[automerger skipped] Fix heap overflow in nfa_rw_store_ndef_rx_buf am: f75e4bfe4a am: 170489f6f5
am: 30545c7bc9 -s ours
am skip reason: change_id I712c1af4442dea526a1fb27123eefdb2ac60c830 with SHA1 11d0ac5fea is in history

Change-Id: I40724aff97fafb418c5879f4bdb8ed74c7dbfc89
diff --git a/Android.bp b/Android.bp
index f049a1d..9679a81 100644
--- a/Android.bp
+++ b/Android.bp
@@ -1,45 +1 @@
-subdirs = ["src"]
-cc_library_shared {
-    name: "nfc_nci.bcm2079x.default",
-    proprietary: true,
-    relative_install_path: "hw",
-    srcs: [
-        "halimpl/bcm2079x/gki/common/*.c",
-        "halimpl/bcm2079x/gki/ulinux/*.c",
-        "halimpl/bcm2079x/hal/hal/*.c",
-        "halimpl/bcm2079x/adaptation/*.cpp",
-        "halimpl/bcm2079x/adaptation/*.c",
-        "halimpl/bcm2079x/nfc_nci.c",
-        "src/adaptation/CrcChecksum.cpp",
-        "src/nfca_version.c",
-    ],
-    header_libs: [
-        "libhardware_headers",
-        "libhardware_legacy_headers",
-    ],
-    shared_libs: [
-        "libcutils",
-        "liblog",
-        "libhwbinder",
-    ],
-    local_include_dirs: [
-        "halimpl/bcm2079x/include",
-        "halimpl/bcm2079x/gki/ulinux",
-        "halimpl/bcm2079x/gki/common",
-        "halimpl/bcm2079x/adaptation",
-        "src/hal/include",
-        "src/hal/int",
-        "src/nfc/include",
-        "src/nfa/include",
-        "src/udrv/include",
-        "src/include",
-    ],
-    cflags: [
-        "-DBUILDCFG=1",
-        "-Wno-deprecated-register",
-        "-Wno-unused-parameter",
-        "-Wno-missing-field-initializers",
-        "-DNFC_HAL_TARGET=TRUE",
-        "-DNFC_RW_ONLY=TRUE",
-    ],
-}
+subdirs = ["src", "utils"]
diff --git a/halimpl/Android.mk b/halimpl/Android.mk
deleted file mode 100644
index cfd03be..0000000
--- a/halimpl/Android.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/halimpl/bcm2079x/adaptation/CondVar.cpp b/halimpl/bcm2079x/adaptation/CondVar.cpp
deleted file mode 100644
index 44b6f2c..0000000
--- a/halimpl/bcm2079x/adaptation/CondVar.cpp
+++ /dev/null
@@ -1,130 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  Encapsulate a condition variable for thread synchronization.
- *
- ******************************************************************************/
-#define LOG_TAG "NfcNciHal"
-#include "CondVar.h"
-#include <errno.h>
-#include <string.h>
-#include "_OverrideLog.h"
-
-/*******************************************************************************
-**
-** Function:        CondVar
-**
-** Description:     Initialize member variables.
-**
-** Returns:         None.
-**
-*******************************************************************************/
-CondVar::CondVar() {
-  pthread_condattr_t attr;
-  pthread_condattr_init(&attr);
-  pthread_condattr_setclock(&attr, CLOCK_MONOTONIC);
-  memset(&mCondition, 0, sizeof(mCondition));
-  int const res = pthread_cond_init(&mCondition, &attr);
-  if (res) {
-    ALOGE("CondVar::CondVar: fail init; error=0x%X", res);
-  }
-}
-
-/*******************************************************************************
-**
-** Function:        ~CondVar
-**
-** Description:     Cleanup all resources.
-**
-** Returns:         None.
-**
-*******************************************************************************/
-CondVar::~CondVar() {
-  int const res = pthread_cond_destroy(&mCondition);
-  if (res) {
-    ALOGE("CondVar::~CondVar: fail destroy; error=0x%X", res);
-  }
-}
-
-/*******************************************************************************
-**
-** Function:        wait
-**
-** Description:     Block the caller and wait for a condition.
-**
-** Returns:         None.
-**
-*******************************************************************************/
-void CondVar::wait(Mutex& mutex) {
-  int const res = pthread_cond_wait(&mCondition, mutex.nativeHandle());
-  if (res) {
-    ALOGE("CondVar::wait: fail wait; error=0x%X", res);
-  }
-}
-
-/*******************************************************************************
-**
-** Function:        wait
-**
-** Description:     Block the caller and wait for a condition.
-**                  millisec: Timeout in milliseconds.
-**
-** Returns:         True if wait is successful; false if timeout occurs.
-**
-*******************************************************************************/
-bool CondVar::wait(Mutex& mutex, long millisec) {
-  bool retVal = false;
-  struct timespec absoluteTime;
-
-  if (clock_gettime(CLOCK_MONOTONIC, &absoluteTime) == -1) {
-    ALOGE("CondVar::wait: fail get time; errno=0x%X", errno);
-  } else {
-    absoluteTime.tv_sec += millisec / 1000;
-    long ns = absoluteTime.tv_nsec + ((millisec % 1000) * 1000000);
-    if (ns > 1000000000) {
-      absoluteTime.tv_sec++;
-      absoluteTime.tv_nsec = ns - 1000000000;
-    } else
-      absoluteTime.tv_nsec = ns;
-  }
-
-  int waitResult =
-      pthread_cond_timedwait(&mCondition, mutex.nativeHandle(), &absoluteTime);
-  if ((waitResult != 0) && (waitResult != ETIMEDOUT))
-    ALOGE("CondVar::wait: fail timed wait; error=0x%X", waitResult);
-  retVal = (waitResult == 0);  // waited successfully
-  return retVal;
-}
-
-/*******************************************************************************
-**
-** Function:        notifyOne
-**
-** Description:     Unblock the waiting thread.
-**
-** Returns:         None.
-**
-*******************************************************************************/
-void CondVar::notifyOne() {
-  int const res = pthread_cond_signal(&mCondition);
-  if (res) {
-    ALOGE("CondVar::notifyOne: fail signal; error=0x%X", res);
-  }
-}
diff --git a/halimpl/bcm2079x/adaptation/CondVar.h b/halimpl/bcm2079x/adaptation/CondVar.h
deleted file mode 100644
index 82e5c6c..0000000
--- a/halimpl/bcm2079x/adaptation/CondVar.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  Encapsulate a condition variable for thread synchronization.
- *
- ******************************************************************************/
-
-#pragma once
-#include <pthread.h>
-#include "Mutex.h"
-
-class CondVar {
- public:
-  /*******************************************************************************
-  **
-  ** Function:        CondVar
-  **
-  ** Description:     Initialize member variables.
-  **
-  ** Returns:         None.
-  **
-  *******************************************************************************/
-  CondVar();
-
-  /*******************************************************************************
-  **
-  ** Function:        ~CondVar
-  **
-  ** Description:     Cleanup all resources.
-  **
-  ** Returns:         None.
-  **
-  *******************************************************************************/
-  ~CondVar();
-
-  /*******************************************************************************
-  **
-  ** Function:        wait
-  **
-  ** Description:     Block the caller and wait for a condition.
-  **
-  ** Returns:         None.
-  **
-  *******************************************************************************/
-  void wait(Mutex& mutex);
-
-  /*******************************************************************************
-  **
-  ** Function:        wait
-  **
-  ** Description:     Block the caller and wait for a condition.
-  **                  millisec: Timeout in milliseconds.
-  **
-  ** Returns:         True if wait is successful; false if timeout occurs.
-  **
-  *******************************************************************************/
-  bool wait(Mutex& mutex, long millisec);
-
-  /*******************************************************************************
-  **
-  ** Function:        notifyOne
-  **
-  ** Description:     Unblock the waiting thread.
-  **
-  ** Returns:         None.
-  **
-  *******************************************************************************/
-  void notifyOne();
-
- private:
-  pthread_cond_t mCondition;
-};
diff --git a/halimpl/bcm2079x/adaptation/HalAdaptation.cpp b/halimpl/bcm2079x/adaptation/HalAdaptation.cpp
deleted file mode 100644
index 1c84426..0000000
--- a/halimpl/bcm2079x/adaptation/HalAdaptation.cpp
+++ /dev/null
@@ -1,373 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  HAL Adaptation Interface (HAI). This interface regulates the interaction
- *  between standard Android HAL and Broadcom-specific HAL.  It adapts
- *  Broadcom-specific features to the Android framework.
- *
- ******************************************************************************/
-#define LOG_TAG "NfcNciHal"
-#include "HalAdaptation.h"
-#include <cutils/properties.h>
-#include <errno.h>
-#include <pthread.h>
-#include "SyncEvent.h"
-#include "_OverrideLog.h"
-#include "android_logmsg.h"
-#include "buildcfg.h"
-#include "config.h"
-#include "nfc_hal_int.h"
-#include "nfc_hal_post_reset.h"
-extern void delete_hal_non_volatile_store(bool forceDelete);
-extern void verify_hal_non_volatile_store();
-extern void resetConfig();
-extern "C" {
-#include "userial.h"
-}
-
-extern void configureCrystalFrequency();
-
-///////////////////////////////////////
-// private declaration, definition
-
-static nfc_stack_callback_t* gAndroidHalCallback = NULL;
-static nfc_stack_data_callback_t* gAndroidHalDataCallback = NULL;
-static SyncEvent gOpenCompletedEvent;
-static SyncEvent gPostInitCompletedEvent;
-static SyncEvent gCloseCompletedEvent;
-
-uint32_t ScrProtocolTraceFlag = SCR_PROTO_TRACE_ALL;  // 0x017F00;
-
-static void BroadcomHalCallback(uint8_t event, tHAL_NFC_STATUS status);
-static void BroadcomHalDataCallback(uint16_t data_len, uint8_t* p_data);
-
-static bool isColdBoot = true;
-
-extern tNFC_HAL_CFG* p_nfc_hal_cfg;
-extern const uint8_t nfca_version_string[];
-extern const uint8_t nfa_version_string[];
-
-tNFC_HAL_DM_PRE_SET_MEM nfc_hal_pre_set_mem_20795a1[] = {
-    {0x0016403c, 0x00000008},
-    {0x0016403c, 0x00000000},
-    {0x0014008c, 0x00000001},
-    {0, 0}};
-
-extern tNFC_HAL_DM_PRE_SET_MEM* p_nfc_hal_dm_pre_set_mem;
-
-///////////////////////////////////////
-
-int HaiInitializeLibrary(const bcm2079x_dev_t* device) {
-  ALOGD("%s: enter", __func__);
-  ALOGE("%s: ver=%s nfa=%s", __func__, nfca_version_string, nfa_version_string);
-  int retval = EACCES;
-  unsigned long freq = 0;
-  unsigned long num = 0;
-  char temp[120];
-  int8_t prop_value;
-  uint8_t logLevel = 0;
-
-  logLevel = InitializeGlobalAppLogLevel();
-
-  if (GetNumValue(NAME_GLOBAL_RESET, &num, sizeof(num))) {
-    if (num == 1) {
-      // Send commands to disable boc
-      p_nfc_hal_dm_pre_set_mem = nfc_hal_pre_set_mem_20795a1;
-    }
-  }
-
-  configureCrystalFrequency();
-  verify_hal_non_volatile_store();
-  if (GetNumValue(NAME_PRESERVE_STORAGE, (char*)&num, sizeof(num)) &&
-      (num == 1))
-    ALOGD("%s: preserve HAL NV store", __func__);
-  else {
-    delete_hal_non_volatile_store(false);
-  }
-
-  if (GetNumValue(NAME_USE_RAW_NCI_TRACE, &num, sizeof(num))) {
-    if (num == 1) {
-      // display protocol traces in raw format
-      ProtoDispAdapterUseRawOutput(TRUE);
-    }
-  }
-
-  // Initialize protocol logging level
-  InitializeProtocolLogLevel();
-
-  tUSERIAL_OPEN_CFG cfg;
-  struct tUART_CONFIG uart;
-
-  if (GetStrValue(NAME_UART_PARITY, temp, sizeof(temp))) {
-    if (strcmp(temp, "even") == 0)
-      uart.m_iParity = USERIAL_PARITY_EVEN;
-    else if (strcmp(temp, "odd") == 0)
-      uart.m_iParity = USERIAL_PARITY_ODD;
-    else if (strcmp(temp, "none") == 0)
-      uart.m_iParity = USERIAL_PARITY_NONE;
-  } else
-    uart.m_iParity = USERIAL_PARITY_NONE;
-
-  if (GetStrValue(NAME_UART_STOPBITS, temp, sizeof(temp))) {
-    if (strcmp(temp, "1") == 0)
-      uart.m_iStopbits = USERIAL_STOPBITS_1;
-    else if (strcmp(temp, "2") == 0)
-      uart.m_iStopbits = USERIAL_STOPBITS_2;
-    else if (strcmp(temp, "1.5") == 0)
-      uart.m_iStopbits = USERIAL_STOPBITS_1_5;
-  } else if (GetNumValue(NAME_UART_STOPBITS, &num, sizeof(num))) {
-    if (num == 1)
-      uart.m_iStopbits = USERIAL_STOPBITS_1;
-    else if (num == 2)
-      uart.m_iStopbits = USERIAL_STOPBITS_2;
-  } else
-    uart.m_iStopbits = USERIAL_STOPBITS_1;
-
-  if (GetNumValue(NAME_UART_DATABITS, &num, sizeof(num))) {
-    if (5 <= num && num <= 8) uart.m_iDatabits = (1 << (num + 1));
-  } else
-    uart.m_iDatabits = USERIAL_DATABITS_8;
-
-  if (GetNumValue(NAME_UART_BAUD, &num, sizeof(num))) {
-    if (num == 300)
-      uart.m_iBaudrate = USERIAL_BAUD_300;
-    else if (num == 600)
-      uart.m_iBaudrate = USERIAL_BAUD_600;
-    else if (num == 1200)
-      uart.m_iBaudrate = USERIAL_BAUD_1200;
-    else if (num == 2400)
-      uart.m_iBaudrate = USERIAL_BAUD_2400;
-    else if (num == 9600)
-      uart.m_iBaudrate = USERIAL_BAUD_9600;
-    else if (num == 19200)
-      uart.m_iBaudrate = USERIAL_BAUD_19200;
-    else if (num == 57600)
-      uart.m_iBaudrate = USERIAL_BAUD_57600;
-    else if (num == 115200)
-      uart.m_iBaudrate = USERIAL_BAUD_115200;
-    else if (num == 230400)
-      uart.m_iBaudrate = USERIAL_BAUD_230400;
-    else if (num == 460800)
-      uart.m_iBaudrate = USERIAL_BAUD_460800;
-    else if (num == 921600)
-      uart.m_iBaudrate = USERIAL_BAUD_921600;
-  } else if (GetStrValue(NAME_UART_BAUD, temp, sizeof(temp))) {
-    if (strcmp(temp, "auto") == 0) uart.m_iBaudrate = USERIAL_BAUD_AUTO;
-  } else
-    uart.m_iBaudrate = USERIAL_BAUD_115200;
-
-  memset(&cfg, 0, sizeof(tUSERIAL_OPEN_CFG));
-  cfg.fmt = uart.m_iDatabits | uart.m_iParity | uart.m_iStopbits;
-  cfg.baud = uart.m_iBaudrate;
-
-  ALOGD("%s: uart config=0x%04x, %d\n", __func__, cfg.fmt, cfg.baud);
-  USERIAL_Init(&cfg);
-
-  if (GetNumValue(NAME_NFCC_ENABLE_TIMEOUT, &num, sizeof(num))) {
-    p_nfc_hal_cfg->nfc_hal_nfcc_enable_timeout = num;
-  }
-
-  if (GetNumValue(NAME_NFA_MAX_EE_SUPPORTED, &num, sizeof(num)) && num == 0) {
-    // Since NFA_MAX_EE_SUPPORTED is explicetly set to 0, no UICC support is
-    // needed.
-    p_nfc_hal_cfg->nfc_hal_hci_uicc_support = 0;
-  }
-
-  prop_value = property_get_bool("nfc.bcm2079x.isColdboot", 0);
-  if (prop_value) {
-    isColdBoot = true;
-    property_set("nfc.bcm2079x.isColdboot", "0");
-  }
-  // Set 'first boot' flag based on static variable that will get set to false
-  // after the stack has first initialized the EE.
-  p_nfc_hal_cfg->nfc_hal_first_boot = isColdBoot ? TRUE : FALSE;
-
-  HAL_NfcInitialize();
-  HAL_NfcSetTraceLevel(logLevel);  // Initialize HAL's logging level
-
-  retval = 0;
-  ALOGD("%s: exit %d", __func__, retval);
-  return retval;
-}
-
-int HaiTerminateLibrary() {
-  int retval = EACCES;
-  ALOGD("%s: enter", __func__);
-
-  HAL_NfcTerminate();
-  gAndroidHalCallback = NULL;
-  gAndroidHalDataCallback = NULL;
-  GKI_shutdown();
-  resetConfig();
-  retval = 0;
-  ALOGD("%s: exit %d", __func__, retval);
-  return retval;
-}
-
-int HaiOpen(const bcm2079x_dev_t* device, nfc_stack_callback_t* halCallbackFunc,
-            nfc_stack_data_callback_t* halDataCallbackFunc) {
-  ALOGD("%s: enter", __func__);
-  int retval = EACCES;
-
-  gAndroidHalCallback = halCallbackFunc;
-  gAndroidHalDataCallback = halDataCallbackFunc;
-
-  SyncEventGuard guard(gOpenCompletedEvent);
-  HAL_NfcOpen(BroadcomHalCallback, BroadcomHalDataCallback);
-  gOpenCompletedEvent.wait();
-
-  retval = 0;
-  ALOGD("%s: exit %d", __func__, retval);
-  return retval;
-}
-
-void BroadcomHalCallback(uint8_t event, tHAL_NFC_STATUS status) {
-  ALOGD("%s: enter; event=0x%X", __func__, event);
-  switch (event) {
-    case HAL_NFC_OPEN_CPLT_EVT: {
-      ALOGD("%s: HAL_NFC_OPEN_CPLT_EVT; status=0x%X", __func__, status);
-      SyncEventGuard guard(gOpenCompletedEvent);
-      gOpenCompletedEvent.notifyOne();
-      break;
-    }
-
-    case HAL_NFC_POST_INIT_CPLT_EVT: {
-      ALOGD("%s: HAL_NFC_POST_INIT_CPLT_EVT", __func__);
-      SyncEventGuard guard(gPostInitCompletedEvent);
-      gPostInitCompletedEvent.notifyOne();
-      break;
-    }
-
-    case HAL_NFC_CLOSE_CPLT_EVT: {
-      ALOGD("%s: HAL_NFC_CLOSE_CPLT_EVT", __func__);
-      SyncEventGuard guard(gCloseCompletedEvent);
-      gCloseCompletedEvent.notifyOne();
-      break;
-    }
-
-    case HAL_NFC_ERROR_EVT: {
-      ALOGD("%s: HAL_NFC_ERROR_EVT", __func__);
-      {
-        SyncEventGuard guard(gOpenCompletedEvent);
-        gOpenCompletedEvent.notifyOne();
-      }
-      {
-        SyncEventGuard guard(gPostInitCompletedEvent);
-        gPostInitCompletedEvent.notifyOne();
-      }
-      {
-        SyncEventGuard guard(gCloseCompletedEvent);
-        gCloseCompletedEvent.notifyOne();
-      }
-      break;
-    }
-  }
-  gAndroidHalCallback(event, status);
-  ALOGD("%s: exit; event=0x%X", __func__, event);
-}
-
-void BroadcomHalDataCallback(uint16_t data_len, uint8_t* p_data) {
-  ALOGD("%s: enter; len=%u", __func__, data_len);
-  gAndroidHalDataCallback(data_len, p_data);
-}
-
-int HaiClose(const bcm2079x_dev_t* device) {
-  ALOGD("%s: enter", __func__);
-  int retval = EACCES;
-
-  SyncEventGuard guard(gCloseCompletedEvent);
-  HAL_NfcClose();
-  gCloseCompletedEvent.wait();
-  retval = 0;
-  ALOGD("%s: exit %d", __func__, retval);
-  return retval;
-}
-
-int HaiCoreInitialized(const bcm2079x_dev_t* device,
-                       uint8_t* coreInitResponseParams) {
-  ALOGD("%s: enter", __func__);
-  int retval = EACCES;
-
-  SyncEventGuard guard(gPostInitCompletedEvent);
-  HAL_NfcCoreInitialized(0, coreInitResponseParams);
-  gPostInitCompletedEvent.wait();
-  retval = 0;
-  ALOGD("%s: exit %d", __func__, retval);
-  return retval;
-}
-
-int HaiWrite(const bcm2079x_dev_t* dev, uint16_t dataLen, const uint8_t* data) {
-  ALOGD("%s: enter; len=%u", __func__, dataLen);
-  int retval = EACCES;
-
-  HAL_NfcWrite(dataLen, const_cast<uint8_t*>(data));
-  retval = 0;
-  ALOGD("%s: exit %d", __func__, retval);
-  return retval;
-}
-
-int HaiPreDiscover(const bcm2079x_dev_t* device) {
-  ALOGD("%s: enter", __func__);
-  int retval = EACCES;
-
-  // This function is a clear indication that the stack is initializing
-  // EE.  So we can reset the cold-boot flag here.
-  isColdBoot = false;
-  retval = HAL_NfcPreDiscover() ? 1 : 0;
-  ALOGD("%s: exit %d", __func__, retval);
-  return retval;
-}
-
-int HaiControlGranted(const bcm2079x_dev_t* device) {
-  ALOGD("%s: enter", __func__);
-  int retval = EACCES;
-
-  HAL_NfcControlGranted();
-  retval = 0;
-  ALOGD("%s: exit %d", __func__, retval);
-  return retval;
-}
-
-int HaiPowerCycle(const bcm2079x_dev_t* device) {
-  ALOGD("%s: enter", __func__);
-  int retval = EACCES;
-
-  HAL_NfcPowerCycle();
-  retval = 0;
-  ALOGD("%s: exit %d", __func__, retval);
-  return retval;
-}
-
-int HaiGetMaxNfcee(const bcm2079x_dev_t* device, uint8_t* maxNfcee) {
-  ALOGD("%s: enter", __func__);
-  int retval = EACCES;
-
-  // This function is a clear indication that the stack is initializing
-  // EE.  So we can reset the cold-boot flag here.
-  isColdBoot = false;
-
-  if (maxNfcee) {
-    *maxNfcee = HAL_NfcGetMaxNfcee();
-    ALOGD("%s: max_ee from HAL to use %d", __func__, *maxNfcee);
-    retval = 0;
-  }
-  ALOGD("%s: exit %d", __func__, retval);
-  return retval;
-}
diff --git a/halimpl/bcm2079x/adaptation/Mutex.cpp b/halimpl/bcm2079x/adaptation/Mutex.cpp
deleted file mode 100644
index c8ebd63..0000000
--- a/halimpl/bcm2079x/adaptation/Mutex.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  Encapsulate a mutex for thread synchronization.
- *
- ******************************************************************************/
-
-#define LOG_TAG "NfcNciHal"
-#include "Mutex.h"
-#include <errno.h>
-#include <string.h>
-#include "_OverrideLog.h"
-
-/*******************************************************************************
-**
-** Function:        Mutex
-**
-** Description:     Initialize member variables.
-**
-** Returns:         None.
-**
-*******************************************************************************/
-Mutex::Mutex() {
-  memset(&mMutex, 0, sizeof(mMutex));
-  int res = pthread_mutex_init(&mMutex, NULL);
-  if (res != 0) {
-    ALOGE("Mutex::Mutex: fail init; error=0x%X", res);
-  }
-}
-
-/*******************************************************************************
-**
-** Function:        ~Mutex
-**
-** Description:     Cleanup all resources.
-**
-** Returns:         None.
-**
-*******************************************************************************/
-Mutex::~Mutex() {
-  int res = pthread_mutex_destroy(&mMutex);
-  if (res != 0) {
-    ALOGE("Mutex::~Mutex: fail destroy; error=0x%X", res);
-  }
-}
-
-/*******************************************************************************
-**
-** Function:        lock
-**
-** Description:     Block the thread and try lock the mutex.
-**
-** Returns:         None.
-**
-*******************************************************************************/
-void Mutex::lock() {
-  int res = pthread_mutex_lock(&mMutex);
-  if (res != 0) {
-    ALOGE("Mutex::lock: fail lock; error=0x%X", res);
-  }
-}
-
-/*******************************************************************************
-**
-** Function:        unlock
-**
-** Description:     Unlock a mutex to unblock a thread.
-**
-** Returns:         None.
-**
-*******************************************************************************/
-void Mutex::unlock() {
-  int res = pthread_mutex_unlock(&mMutex);
-  if (res != 0) {
-    ALOGE("Mutex::unlock: fail unlock; error=0x%X", res);
-  }
-}
-
-/*******************************************************************************
-**
-** Function:        tryLock
-**
-** Description:     Try to lock the mutex.
-**
-** Returns:         True if the mutex is locked.
-**
-*******************************************************************************/
-bool Mutex::tryLock() {
-  int res = pthread_mutex_trylock(&mMutex);
-  if ((res != 0) && (res != EBUSY)) {
-    ALOGE("Mutex::tryLock: error=0x%X", res);
-  }
-  return res == 0;
-}
-
-/*******************************************************************************
-**
-** Function:        nativeHandle
-**
-** Description:     Get the handle of the mutex.
-**
-** Returns:         Handle of the mutex.
-**
-*******************************************************************************/
-pthread_mutex_t* Mutex::nativeHandle() { return &mMutex; }
diff --git a/halimpl/bcm2079x/adaptation/Mutex.h b/halimpl/bcm2079x/adaptation/Mutex.h
deleted file mode 100644
index 741563c..0000000
--- a/halimpl/bcm2079x/adaptation/Mutex.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  Encapsulate a mutex for thread synchronization.
- *
- ******************************************************************************/
-
-#pragma once
-#include <pthread.h>
-
-class Mutex {
- public:
-  /*******************************************************************************
-  **
-  ** Function:        Mutex
-  **
-  ** Description:     Initialize member variables.
-  **
-  ** Returns:         None.
-  **
-  *******************************************************************************/
-  Mutex();
-
-  /*******************************************************************************
-  **
-  ** Function:        ~Mutex
-  **
-  ** Description:     Cleanup all resources.
-  **
-  ** Returns:         None.
-  **
-  *******************************************************************************/
-  ~Mutex();
-
-  /*******************************************************************************
-  **
-  ** Function:        lock
-  **
-  ** Description:     Block the thread and try lock the mutex.
-  **
-  ** Returns:         None.
-  **
-  *******************************************************************************/
-  void lock();
-
-  /*******************************************************************************
-  **
-  ** Function:        unlock
-  **
-  ** Description:     Unlock a mutex to unblock a thread.
-  **
-  ** Returns:         None.
-  **
-  *******************************************************************************/
-  void unlock();
-
-  /*******************************************************************************
-  **
-  ** Function:        tryLock
-  **
-  ** Description:     Try to lock the mutex.
-  **
-  ** Returns:         True if the mutex is locked.
-  **
-  *******************************************************************************/
-  bool tryLock();
-
-  /*******************************************************************************
-  **
-  ** Function:        nativeHandle
-  **
-  ** Description:     Get the handle of the mutex.
-  **
-  ** Returns:         Handle of the mutex.
-  **
-  *******************************************************************************/
-  pthread_mutex_t* nativeHandle();
-
- private:
-  pthread_mutex_t mMutex;
-};
diff --git a/halimpl/bcm2079x/adaptation/NonVolatileStore.cpp b/halimpl/bcm2079x/adaptation/NonVolatileStore.cpp
deleted file mode 100644
index f5b3f0c..0000000
--- a/halimpl/bcm2079x/adaptation/NonVolatileStore.cpp
+++ /dev/null
@@ -1,253 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 1999-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-#define LOG_TAG "NfcNciHal"
-
-#include "_OverrideLog.h"
-#include "gki.h"
-extern "C" {
-#include "nfc_hal_nv_ci.h"
-#include "nfc_hal_target.h"
-}
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <string>
-#include "CrcChecksum.h"
-#include "config.h"
-
-// directory of HAL's non-volatile storage
-static const char* default_location = "/data/nfc";
-static const char* filename_prefix = "/halStorage.bin";
-static const std::string get_storage_location();
-void delete_hal_non_volatile_store(bool forceDelete);
-void verify_hal_non_volatile_store();
-
-/*******************************************************************************
-**
-** Function         nfc_hal_nv_co_read
-**
-** Description      This function is called by NFA to read in data from the
-**                  previously opened file.
-**
-** Parameters       p_buf   - buffer to read the data into.
-**                  nbytes  - number of bytes to read into the buffer.
-**
-** Returns          void
-**
-**                  Note: Upon completion of the request, nfc_hal_nv_ci_read ()
-*is
-**                        called with the buffer of data, along with the number
-**                        of bytes read into the buffer, and a status.  The
-**                        call-in function should only be called when ALL
-*requested
-**                        bytes have been read, the end of file has been
-*detected,
-**                        or an error has occurred.
-**
-*******************************************************************************/
-void nfc_hal_nv_co_read(uint8_t* p_buf, uint16_t nbytes, uint8_t block) {
-  std::string fn = get_storage_location();
-  char filename[256];
-
-  fn.append(filename_prefix);
-  if (fn.length() > 200) {
-    ALOGE("%s: filename too long", __func__);
-    return;
-  }
-  snprintf(filename, sizeof(filename), "%s%u", fn.c_str(), block);
-
-  ALOGD("%s: buffer len=%u; file=%s", __func__, nbytes, filename);
-  int fileStream = open(filename, O_RDONLY);
-  if (fileStream >= 0) {
-    unsigned short checksum = 0;
-    size_t actualReadCrc = read(fileStream, &checksum, sizeof(checksum));
-    size_t actualReadData = read(fileStream, p_buf, nbytes);
-    close(fileStream);
-    if (actualReadData > 0) {
-      ALOGD("%s: data size=%zu", __func__, actualReadData);
-      nfc_hal_nv_ci_read(actualReadData, NFC_HAL_NV_CO_OK, block);
-    } else {
-      ALOGE("%s: fail to read", __func__);
-      nfc_hal_nv_ci_read(0, NFC_HAL_NV_CO_FAIL, block);
-    }
-  } else {
-    ALOGD("%s: fail to open", __func__);
-    nfc_hal_nv_ci_read(0, NFC_HAL_NV_CO_FAIL, block);
-  }
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_nv_co_write
-**
-** Description      This function is called by io to send file data to the
-**                  phone.
-**
-** Parameters       p_buf   - buffer to read the data from.
-**                  nbytes  - number of bytes to write out to the file.
-**
-** Returns          void
-**
-**                  Note: Upon completion of the request, nfc_hal_nv_ci_write ()
-*is
-**                        called with the file descriptor and the status.  The
-**                        call-in function should only be called when ALL
-*requested
-**                        bytes have been written, or an error has been
-*detected,
-**
-*******************************************************************************/
-void nfc_hal_nv_co_write(const uint8_t* p_buf, uint16_t nbytes, uint8_t block) {
-  std::string fn = get_storage_location();
-  char filename[256];
-  int fileStream = 0;
-
-  fn.append(filename_prefix);
-  if (fn.length() > 200) {
-    ALOGE("%s: filename too long", __func__);
-    return;
-  }
-  snprintf(filename, sizeof(filename), "%s%u", fn.c_str(), block);
-  ALOGD("%s: bytes=%u; file=%s", __func__, nbytes, filename);
-
-  fileStream = open(filename, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
-  if (fileStream >= 0) {
-    unsigned short checksum = crcChecksumCompute(p_buf, nbytes);
-    size_t actualWrittenCrc = write(fileStream, &checksum, sizeof(checksum));
-    size_t actualWrittenData = write(fileStream, p_buf, nbytes);
-    ALOGD("%s: %zu bytes written", __func__, actualWrittenData);
-    if ((actualWrittenData == nbytes) &&
-        (actualWrittenCrc == sizeof(checksum))) {
-      nfc_hal_nv_ci_write(NFC_HAL_NV_CO_OK);
-    } else {
-      ALOGE("%s: fail to write", __func__);
-      nfc_hal_nv_ci_write(NFC_HAL_NV_CO_FAIL);
-    }
-    close(fileStream);
-  } else {
-    ALOGE("%s: fail to open, error = %d", __func__, errno);
-    nfc_hal_nv_ci_write(NFC_HAL_NV_CO_FAIL);
-  }
-}
-
-/*******************************************************************************
-**
-** Function         get_storage_location
-**
-** Description      Get the absolute directory path of the HAL's storage
-*location.
-**
-** Parameters       none
-**
-** Returns          Absolute path.
-**
-*******************************************************************************/
-const std::string get_storage_location() {
-  char buffer[100];
-  memset(buffer, 0, sizeof(buffer));
-  if (!GetStrValue(NAME_NFA_STORAGE, buffer, sizeof(buffer)))
-    return default_location;
-  else
-    return std::string(buffer);
-}
-
-/*******************************************************************************
-**
-** Function         delete_hal_non_volatile_store
-**
-** Description      Delete all the content of the HAL's storage location.
-**
-** Parameters       forceDelete: unconditionally delete the storage.
-**
-** Returns          none
-**
-*******************************************************************************/
-void delete_hal_non_volatile_store(bool forceDelete) {
-  static bool firstTime = true;
-  std::string fn = get_storage_location();
-  char filename[256];
-  int stat = 0;
-
-  if ((firstTime == false) && (forceDelete == false)) return;
-  firstTime = false;
-
-  ALOGD("%s", __func__);
-
-  fn.append(filename_prefix);
-  if (fn.length() > 200) {
-    ALOGE("%s: filename too long", __func__);
-    return;
-  }
-
-  snprintf(filename, sizeof(filename), "%s%u", fn.c_str(), DH_NV_BLOCK);
-  remove(filename);
-  snprintf(filename, sizeof(filename), "%s%u", fn.c_str(), HC_F3_NV_BLOCK);
-  remove(filename);
-  snprintf(filename, sizeof(filename), "%s%u", fn.c_str(), HC_F4_NV_BLOCK);
-  remove(filename);
-  snprintf(filename, sizeof(filename), "%s%u", fn.c_str(), HC_F2_NV_BLOCK);
-  remove(filename);
-  snprintf(filename, sizeof(filename), "%s%u", fn.c_str(), HC_F5_NV_BLOCK);
-  remove(filename);
-}
-
-/*******************************************************************************
-**
-** Function         verify_hal_non_volatile_store
-**
-** Description      Verify the content of all non-volatile store.
-**
-** Parameters       none
-**
-** Returns          none
-**
-*******************************************************************************/
-void verify_hal_non_volatile_store() {
-  ALOGD("%s", __func__);
-  std::string fn = get_storage_location();
-  char filename[256];
-  bool isValid = false;
-
-  fn.append(filename_prefix);
-  if (fn.length() > 200) {
-    ALOGE("%s: filename too long", __func__);
-    return;
-  }
-
-  snprintf(filename, sizeof(filename), "%s%u", fn.c_str(), DH_NV_BLOCK);
-  if (crcChecksumVerifyIntegrity(filename)) {
-    snprintf(filename, sizeof(filename), "%s%u", fn.c_str(), HC_F3_NV_BLOCK);
-    if (crcChecksumVerifyIntegrity(filename)) {
-      snprintf(filename, sizeof(filename), "%s%u", fn.c_str(), HC_F4_NV_BLOCK);
-      if (crcChecksumVerifyIntegrity(filename)) {
-        snprintf(filename, sizeof(filename), "%s%u", fn.c_str(),
-                 HC_F2_NV_BLOCK);
-        if (crcChecksumVerifyIntegrity(filename)) {
-          snprintf(filename, sizeof(filename), "%s%u", fn.c_str(),
-                   HC_F5_NV_BLOCK);
-          if (crcChecksumVerifyIntegrity(filename)) isValid = true;
-        }
-      }
-    }
-  }
-
-  if (isValid == false) delete_hal_non_volatile_store(true);
-}
diff --git a/halimpl/bcm2079x/adaptation/StartupConfig.cpp b/halimpl/bcm2079x/adaptation/StartupConfig.cpp
deleted file mode 100644
index 333bc3b..0000000
--- a/halimpl/bcm2079x/adaptation/StartupConfig.cpp
+++ /dev/null
@@ -1,139 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 1999-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- * Construct a buffer that contains multiple Type-Length-Value contents
- * that is used by the HAL in a CORE_SET_CONFIG NCI command.
- ******************************************************************************/
-
-#define LOG_TAG "NfcNciHal"
-#include "StartupConfig.h"
-#include "_OverrideLog.h"
-
-const uint8_t StartupConfig::mMaxLength = 255;
-
-/*******************************************************************************
-**
-** Function:        initialize
-**
-** Description:     Initialize all member variables.
-**
-** Returns:         None
-**
-*******************************************************************************/
-StartupConfig::StartupConfig() {
-  // set first byte to 0, which is length of payload
-  mBuffer.append((uint8_string::size_type)1, (uint8_string::value_type)0);
-}
-
-/*******************************************************************************
-**
-** Function:        initialize
-**
-** Description:     Reset all member variables.
-**
-** Returns:         None
-**
-*******************************************************************************/
-void StartupConfig::initialize() {
-  mBuffer.clear();
-  // set first byte to 0, which is length of payload
-  mBuffer.append((uint8_string::size_type)1, (uint8_string::value_type)0);
-}
-
-/*******************************************************************************
-**
-** Function:        getInternalBuffer
-**
-** Description:     Get the pointer to buffer that contains multiple
-**                  Type-Length-Value contents.
-**
-** Returns:         Pointer to buffer.
-**
-*******************************************************************************/
-const uint8_t* StartupConfig::getInternalBuffer() { return mBuffer.data(); }
-
-/*******************************************************************************
-**
-** Function:        append
-**
-** Description:     Append new config data to internal buffer.
-**                  newContent: buffer containing new content; newContent[0] is
-**                          payload length; newContent[1..end] is payload.
-**                  newContentLen: total length of newContent.
-**
-** Returns:         True if ok.
-**
-*******************************************************************************/
-bool StartupConfig::append(const uint8_t* newContent, uint8_t newContentLen) {
-  static const char fn[] = "StartupConfig::append";
-  if ((newContentLen + mBuffer.size()) > mMaxLength) {
-    ALOGE("%s: exceed max length", fn);
-    return false;
-  }
-
-  ALOGD("%s: try append %zu bytes", fn,
-        (uint8_string::size_type)(newContentLen));
-  // append new payload into private buffer
-  mBuffer.append(newContent + 1, (uint8_string::size_type)(newContentLen - 1));
-  // increase size counter of payload in private buffer
-  mBuffer[0] = mBuffer[0] + newContentLen - 1;
-  ALOGD("%s: new size %u bytes", fn, mBuffer[0]);
-  return true;
-};
-
-/*******************************************************************************
-**
-** Function:        disableSecureElement
-**
-** Description:     Adjust a TLV to disable secure element(s).  The TLV's type
-*is 0xC2.
-**                  bitmask: 0xC0 = do not detect any secure element.
-**                           0x40 = do not detect secure element in slot 0.
-**                           0x80 = do not detect secure element in slot 1.
-**
-** Returns:         True if ok.
-**
-*******************************************************************************/
-bool StartupConfig::disableSecureElement(uint8_t bitmask) {
-  const uint8_t maxLen = mBuffer[0];
-  uint8_t index = 1, tlvType = 0, tlvLen = 0;
-  bool found0xC2 = false;
-
-  while (true) {
-    if (index > maxLen) break;
-    tlvType = mBuffer[index];
-    index++;
-    tlvLen = mBuffer[index];
-    index++;
-    if (tlvType == 0xC2)  // this TLV controls secure elements
-    {
-      index++;  // index of second byte in TLV's value
-      mBuffer[index] = mBuffer[index] | bitmask;  // turn on certain bits
-      found0xC2 = true;
-    } else
-      index += tlvLen;
-  }
-
-  if (found0xC2 == false) {
-    uint8_t tlv[] = {0x04, 0xC2, 0x02, 0x61, 0x00};
-    tlv[4] = tlv[4] | bitmask;
-    found0xC2 = append(tlv, 5);
-  }
-  return found0xC2;
-}
diff --git a/halimpl/bcm2079x/adaptation/SyncEvent.h b/halimpl/bcm2079x/adaptation/SyncEvent.h
deleted file mode 100644
index 4f9384f..0000000
--- a/halimpl/bcm2079x/adaptation/SyncEvent.h
+++ /dev/null
@@ -1,146 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  Synchronize two or more threads using a condition variable and a mutex.
- *
- ******************************************************************************/
-#pragma once
-#include "CondVar.h"
-#include "Mutex.h"
-
-class SyncEvent {
- public:
-  /*******************************************************************************
-  **
-  ** Function:        ~SyncEvent
-  **
-  ** Description:     Cleanup all resources.
-  **
-  ** Returns:         None.
-  **
-  *******************************************************************************/
-  ~SyncEvent() {}
-
-  /*******************************************************************************
-  **
-  ** Function:        start
-  **
-  ** Description:     Start a synchronization operation.
-  **
-  ** Returns:         None.
-  **
-  *******************************************************************************/
-  void start() { mMutex.lock(); }
-
-  /*******************************************************************************
-  **
-  ** Function:        wait
-  **
-  ** Description:     Block the thread and wait for the event to occur.
-  **
-  ** Returns:         None.
-  **
-  *******************************************************************************/
-  void wait() { mCondVar.wait(mMutex); }
-
-  /*******************************************************************************
-  **
-  ** Function:        wait
-  **
-  ** Description:     Block the thread and wait for the event to occur.
-  **                  millisec: Timeout in milliseconds.
-  **
-  ** Returns:         True if wait is successful; false if timeout occurs.
-  **
-  *******************************************************************************/
-  bool wait(long millisec) {
-    bool retVal = mCondVar.wait(mMutex, millisec);
-    return retVal;
-  }
-
-  /*******************************************************************************
-  **
-  ** Function:        notifyOne
-  **
-  ** Description:     Notify a blocked thread that the event has occured.
-  *Unblocks it.
-  **
-  ** Returns:         None.
-  **
-  *******************************************************************************/
-  void notifyOne() { mCondVar.notifyOne(); }
-
-  /*******************************************************************************
-  **
-  ** Function:        end
-  **
-  ** Description:     End a synchronization operation.
-  **
-  ** Returns:         None.
-  **
-  *******************************************************************************/
-  void end() { mMutex.unlock(); }
-
- private:
-  CondVar mCondVar;
-  Mutex mMutex;
-};
-
-/*****************************************************************************/
-/*****************************************************************************/
-
-/*****************************************************************************
-**
-**  Name:           SyncEventGuard
-**
-**  Description:    Automatically start and end a synchronization event.
-**
-*****************************************************************************/
-class SyncEventGuard {
- public:
-  /*******************************************************************************
-  **
-  ** Function:        SyncEventGuard
-  **
-  ** Description:     Start a synchronization operation.
-  **
-  ** Returns:         None.
-  **
-  *******************************************************************************/
-  SyncEventGuard(SyncEvent& event) : mEvent(event) {
-    event.start();  // automatically start operation
-  };
-
-  /*******************************************************************************
-  **
-  ** Function:        ~SyncEventGuard
-  **
-  ** Description:     End a synchronization operation.
-  **
-  ** Returns:         None.
-  **
-  *******************************************************************************/
-  ~SyncEventGuard() {
-    mEvent.end();  // automatically end operation
-  };
-
- private:
-  SyncEvent& mEvent;
-};
diff --git a/halimpl/bcm2079x/adaptation/_OverrideLog.cpp b/halimpl/bcm2079x/adaptation/_OverrideLog.cpp
deleted file mode 100644
index 0fe9bae..0000000
--- a/halimpl/bcm2079x/adaptation/_OverrideLog.cpp
+++ /dev/null
@@ -1,99 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-#define LOG_TAG "NfcNciHal"
-
-/******************************************************************************
- *
- *  Override the ALOGD(), ALOGE(), and other logging macros from
- *  /system/core/include/cutils/log.h
- *
- ******************************************************************************/
-#include "_OverrideLog.h"
-#include <cutils/properties.h>
-#include <stdio.h>
-#include <string.h>
-#include "android_logmsg.h"
-#include "config.h"
-
-unsigned char appl_trace_level = BT_TRACE_LEVEL_DEBUG;
-
-/*******************************************************************************
-**
-** Function:        InitializeGlobalAppLogLevel
-**
-** Description:     Initialize and get global logging level from
-**                  Android property nfc.app_log_level.
-**
-** Returns:         Global log level:
-**                  BT_TRACE_LEVEL_NONE    0        * No trace messages to be
-*generated
-**                  BT_TRACE_LEVEL_ERROR   1        * Error condition trace
-*messages
-**                  BT_TRACE_LEVEL_WARNING 2        * Warning condition trace
-*messages
-**                  BT_TRACE_LEVEL_API     3        * API traces
-**                  BT_TRACE_LEVEL_EVENT   4        * Debug messages for events
-**                  BT_TRACE_LEVEL_DEBUG   5        * Debug messages (general)
-**
-*******************************************************************************/
-unsigned char InitializeGlobalAppLogLevel() {
-  unsigned long num = 0;
-  char valueStr[PROPERTY_VALUE_MAX] = {0};
-
-  num = 1;
-  if (GetNumValue(NAME_APPL_TRACE_LEVEL, &num, sizeof(num)))
-    appl_trace_level = (unsigned char)num;
-
-  int len = property_get("nfc.app_log_level", valueStr, "");
-  if (len > 0) {
-    // let Android property override default value
-    sscanf(valueStr, "%lu", &num);
-    appl_trace_level = (unsigned char)num;
-  }
-
-  // 0xFF is a special value used by the stack to query the current
-  // trace level; it does not change any trace level
-  if (appl_trace_level == 0xFF) appl_trace_level = BT_TRACE_LEVEL_DEBUG;
-  ALOGD("%s: level=%u", __func__, appl_trace_level);
-
-  if (appl_trace_level < BT_TRACE_LEVEL_DEBUG) {
-    // display protocol traces in raw format
-    ProtoDispAdapterUseRawOutput(TRUE);
-  }
-  return appl_trace_level;
-}
-
-uint32_t InitializeProtocolLogLevel() {
-  uint32_t num = 0;
-  char valueStr[PROPERTY_VALUE_MAX] = {0};
-
-  if (GetNumValue(NAME_PROTOCOL_TRACE_LEVEL, &num, sizeof(num)))
-    ScrProtocolTraceFlag = num;
-
-  int len = property_get("nfc.enable_protocol_log", valueStr, "");
-  if (len > 0) {
-    if (strncmp("0", valueStr, 1) == 0) {
-      ScrProtocolTraceFlag = 0;
-    } else {
-      ScrProtocolTraceFlag = ~0;
-    }
-  }
-
-  return ScrProtocolTraceFlag;
-}
diff --git a/halimpl/bcm2079x/adaptation/android_logmsg.cpp b/halimpl/bcm2079x/adaptation/android_logmsg.cpp
deleted file mode 100644
index afd03c2..0000000
--- a/halimpl/bcm2079x/adaptation/android_logmsg.cpp
+++ /dev/null
@@ -1,301 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 1999-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-#include "android_logmsg.h"
-#include <cutils/log.h>
-#include "_OverrideLog.h"
-#include "buildcfg.h"
-#include "nfc_target.h"
-
-extern uint32_t ScrProtocolTraceFlag;
-#define MAX_NCI_PACKET_SIZE 259
-#define BTE_LOG_BUF_SIZE 1024
-#define BTE_LOG_MAX_SIZE (BTE_LOG_BUF_SIZE - 12)
-#define MAX_LOGCAT_LINE 4096
-#define PRINT(s) __android_log_write(ANDROID_LOG_DEBUG, "BrcmNci", s)
-static char log_line[MAX_LOGCAT_LINE];
-static const char* sTable = "0123456789abcdef";
-static bool sIsUseRaw = FALSE;
-static void ToHex(const uint8_t* data, uint16_t len, char* hexString,
-                  uint16_t hexStringSize);
-static void dumpbin(const char* data, int size, uint32_t trace_layer,
-                    uint32_t trace_type);
-static inline void word2hex(const char* data, char** hex);
-static inline void byte2char(const char* data, char** str);
-static inline void byte2hex(const char* data, char** str);
-
-void BTDISP_LOCK_LOG() {}
-
-void BTDISP_UNLOCK_LOG() {}
-
-void BTDISP_INIT_LOCK() {}
-
-void BTDISP_UNINIT_LOCK() {}
-
-void ProtoDispAdapterUseRawOutput(bool isUseRaw) { sIsUseRaw = isUseRaw; }
-
-void ProtoDispAdapterDisplayNciPacket(uint8_t* nciPacket, uint16_t nciPacketLen,
-                                      bool is_recv) {
-  // Protocol decoder is not available, so decode NCI packet into hex numbers.
-  if (!(ScrProtocolTraceFlag & SCR_PROTO_TRACE_NCI)) return;
-  char line_buf[(MAX_NCI_PACKET_SIZE * 2) + 1];
-  ToHex(nciPacket, nciPacketLen, line_buf, sizeof(line_buf));
-  __android_log_write(ANDROID_LOG_DEBUG, (is_recv) ? "BrcmNciR" : "BrcmNciX",
-                      line_buf);
-}
-
-void ToHex(const uint8_t* data, uint16_t len, char* hexString,
-           uint16_t hexStringSize) {
-  int i = 0, j = 0;
-  for (i = 0, j = 0; i < len && j < hexStringSize - 3; i++) {
-    hexString[j++] = sTable[(*data >> 4) & 0xf];
-    hexString[j++] = sTable[*data & 0xf];
-    data++;
-  }
-  hexString[j] = '\0';
-}
-
-// Protodisp code calls ScrLog() to print decoded texts.
-void ScrLog(uint32_t trace_set_mask, const char* fmt_str, ...) {
-  static char buffer[BTE_LOG_BUF_SIZE];
-  va_list ap;
-
-  va_start(ap, fmt_str);
-  vsnprintf(buffer, BTE_LOG_MAX_SIZE, fmt_str, ap);
-  va_end(ap);
-  __android_log_write(ANDROID_LOG_INFO, "BrcmNci", buffer);
-}
-
-uint8_t* scru_dump_hex(uint8_t* p, char* pTitle, uint32_t len, uint32_t layer,
-                       uint32_t type) {
-  if (pTitle && *pTitle) PRINT(pTitle);
-  dumpbin((char*)p, len, layer, type);
-  return p;
-}
-
-void dumpbin(const char* data, int size, uint32_t trace_layer,
-             uint32_t trace_type) {
-  char line_buff[256];
-  char* line;
-  int i, j, addr;
-  const int width = 16;
-  if (size <= 0) return;
-  for (i = 0; i < size / width; i++) {
-    line = line_buff;
-    // write address:
-    addr = i * width;
-    word2hex((const char*)&addr, &line);
-    *line++ = ':';
-    *line++ = ' ';
-    // write hex of data
-    for (j = 0; j < width; j++) {
-      byte2hex(&data[j], &line);
-      *line++ = ' ';
-    }
-    // write char of data
-    for (j = 0; j < width; j++) byte2char(data++, &line);
-    // wirte the end of line
-    *line = 0;
-    // output the line
-    PRINT(line_buff);
-  }
-  // last line of left over if any
-  int leftover = size % width;
-  if (leftover > 0) {
-    line = line_buff;
-    // write address:
-    addr = i * width;
-    word2hex((const char*)&addr, &line);
-    *line++ = ':';
-    *line++ = ' ';
-    // write hex of data
-    for (j = 0; j < leftover; j++) {
-      byte2hex(&data[j], &line);
-      *line++ = ' ';
-    }
-    // write hex padding
-    for (; j < width; j++) {
-      *line++ = ' ';
-      *line++ = ' ';
-      *line++ = ' ';
-    }
-    // write char of data
-    for (j = 0; j < leftover; j++) byte2char(data++, &line);
-    // write the end of line
-    *line = 0;
-    // output the line
-    PRINT(line_buff);
-  }
-}
-
-inline void word2hex(const char* data, char** hex) {
-  byte2hex(&data[1], hex);
-  byte2hex(&data[0], hex);
-}
-
-inline void byte2char(const char* data, char** str) {
-  **str = *data < ' ' ? '.' : *data > '~' ? '.' : *data;
-  ++(*str);
-}
-
-inline void byte2hex(const char* data, char** str) {
-  **str = sTable[(*data >> 4) & 0xf];
-  ++*str;
-  **str = sTable[*data & 0xf];
-  ++*str;
-}
-
-// Decode a few Bluetooth HCI packets into hex numbers.
-void DispHciCmd(NFC_HDR* p_buf) {
-  uint32_t nBytes = ((NFC_HDR_SIZE + p_buf->offset + p_buf->len) * 2) + 1;
-  uint8_t* data = (uint8_t*)p_buf;
-  int data_len = NFC_HDR_SIZE + p_buf->offset + p_buf->len;
-
-  if (appl_trace_level < BT_TRACE_LEVEL_DEBUG) return;
-
-  if (nBytes > sizeof(log_line)) return;
-
-  ToHex(data, data_len, log_line, sizeof(log_line));
-  __android_log_write(ANDROID_LOG_DEBUG, "BrcmHciX", log_line);
-}
-
-// Decode a few Bluetooth HCI packets into hex numbers.
-void DispHciEvt(NFC_HDR* p_buf) {
-  uint32_t nBytes = ((NFC_HDR_SIZE + p_buf->offset + p_buf->len) * 2) + 1;
-  uint8_t* data = (uint8_t*)p_buf;
-  int data_len = NFC_HDR_SIZE + p_buf->offset + p_buf->len;
-
-  if (appl_trace_level < BT_TRACE_LEVEL_DEBUG) return;
-
-  if (nBytes > sizeof(log_line)) return;
-
-  ToHex(data, data_len, log_line, sizeof(log_line));
-  __android_log_write(ANDROID_LOG_DEBUG, "BrcmHciR", log_line);
-}
-
-/*******************************************************************************
-**
-** Function         DispLLCP
-**
-** Description      Log LLCP packet as hex-ascii bytes.
-**
-** Returns          None.
-**
-*******************************************************************************/
-void DispLLCP(NFC_HDR* p_buf, bool is_recv) {
-  uint32_t nBytes = ((NFC_HDR_SIZE + p_buf->offset + p_buf->len) * 2) + 1;
-  uint8_t* data = (uint8_t*)p_buf;
-  int data_len = NFC_HDR_SIZE + p_buf->offset + p_buf->len;
-
-  if (appl_trace_level < BT_TRACE_LEVEL_DEBUG) return;
-
-  if (nBytes > sizeof(log_line)) return;
-
-  ToHex(data, data_len, log_line, sizeof(log_line));
-  __android_log_write(ANDROID_LOG_DEBUG, (is_recv) ? "BrcmLlcpR" : "BrcmLlcpX",
-                      log_line);
-}
-
-/*******************************************************************************
-**
-** Function         DispHcp
-**
-** Description      Log raw HCP packet as hex-ascii bytes
-**
-** Returns          None.
-**
-*******************************************************************************/
-void DispHcp(uint8_t* data, uint16_t len, bool is_recv) {
-  uint32_t nBytes = (len * 2) + 1;
-
-  if (appl_trace_level < BT_TRACE_LEVEL_DEBUG) return;
-
-  // Only trace HCP if we're tracing HCI as well
-  if (!(ScrProtocolTraceFlag & SCR_PROTO_TRACE_HCI_SUMMARY)) return;
-
-  if (nBytes > sizeof(log_line)) return;
-
-  ToHex(data, len, log_line, sizeof(log_line));
-  __android_log_write(ANDROID_LOG_DEBUG, (is_recv) ? "BrcmHcpR" : "BrcmHcpX",
-                      log_line);
-}
-
-void DispSNEP(uint8_t local_sap, uint8_t remote_sap, NFC_HDR* p_buf,
-              bool is_first, bool is_rx) {}
-void DispCHO(uint8_t* pMsg, uint32_t MsgLen, bool is_rx) {}
-void DispT3TagMessage(NFC_HDR* p_msg, bool is_rx) {}
-void DispRWT4Tags(NFC_HDR* p_buf, bool is_rx) {}
-void DispCET4Tags(NFC_HDR* p_buf, bool is_rx) {}
-void DispRWI93Tag(NFC_HDR* p_buf, bool is_rx, uint8_t command_to_respond) {}
-void DispNDEFMsg(uint8_t* pMsg, uint32_t MsgLen, bool is_recv) {}
-
-/*******************************************************************************
-**
-** Function:        LogMsg
-**
-** Description:     Print messages from NFC stack.
-**
-** Returns:         None.
-**
-*******************************************************************************/
-void LogMsg(uint32_t trace_set_mask, const char* fmt_str, ...) {
-  static char buffer[BTE_LOG_BUF_SIZE];
-  va_list ap;
-  uint32_t trace_type =
-      trace_set_mask & 0x07;  // lower 3 bits contain trace type
-  int android_log_type = ANDROID_LOG_INFO;
-
-  va_start(ap, fmt_str);
-  vsnprintf(buffer, BTE_LOG_MAX_SIZE, fmt_str, ap);
-  va_end(ap);
-  if (trace_type == TRACE_TYPE_ERROR) android_log_type = ANDROID_LOG_ERROR;
-  __android_log_write(android_log_type, LOGMSG_TAG_NAME, buffer);
-}
-
-void LogMsg_0(uint32_t maskTraceSet, const char* p_str) {
-  LogMsg(maskTraceSet, p_str);
-}
-
-void LogMsg_1(uint32_t maskTraceSet, const char* fmt_str, uintptr_t p1) {
-  LogMsg(maskTraceSet, fmt_str, p1);
-}
-
-void LogMsg_2(uint32_t maskTraceSet, const char* fmt_str, uintptr_t p1,
-              uintptr_t p2) {
-  LogMsg(maskTraceSet, fmt_str, p1, p2);
-}
-
-void LogMsg_3(uint32_t maskTraceSet, const char* fmt_str, uintptr_t p1,
-              uintptr_t p2, uintptr_t p3) {
-  LogMsg(maskTraceSet, fmt_str, p1, p2, p3);
-}
-
-void LogMsg_4(uint32_t maskTraceSet, const char* fmt_str, uintptr_t p1,
-              uintptr_t p2, uintptr_t p3, uintptr_t p4) {
-  LogMsg(maskTraceSet, fmt_str, p1, p2, p3, p4);
-}
-
-void LogMsg_5(uint32_t maskTraceSet, const char* fmt_str, uintptr_t p1,
-              uintptr_t p2, uintptr_t p3, uintptr_t p4, uintptr_t p5) {
-  LogMsg(maskTraceSet, fmt_str, p1, p2, p3, p4, p5);
-}
-
-void LogMsg_6(uint32_t maskTraceSet, const char* fmt_str, uintptr_t p1,
-              uintptr_t p2, uintptr_t p3, uintptr_t p4, uintptr_t p5,
-              uintptr_t p6) {
-  LogMsg(maskTraceSet, fmt_str, p1, p2, p3, p4, p5, p6);
-}
diff --git a/halimpl/bcm2079x/adaptation/config.cpp b/halimpl/bcm2079x/adaptation/config.cpp
deleted file mode 100644
index 709ea19..0000000
--- a/halimpl/bcm2079x/adaptation/config.cpp
+++ /dev/null
@@ -1,672 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2011-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-#define LOG_TAG "NfcNciHal"
-
-#include "config.h"
-#include <stdio.h>
-#include <sys/stat.h>
-#include <list>
-#include <string>
-#include <vector>
-#include "_OverrideLog.h"
-
-const char* transport_config_paths[] = {"/odm/etc/", "/vendor/etc/", "/etc/"};
-const int transport_config_path_size =
-    (sizeof(transport_config_paths) / sizeof(transport_config_paths[0]));
-
-#define config_name "libnfc-brcm.conf"
-#define extra_config_base "libnfc-brcm-"
-#define extra_config_ext ".conf"
-#define IsStringValue 0x80000000
-
-using namespace ::std;
-
-class CNfcParam : public string {
- public:
-  CNfcParam();
-  CNfcParam(const char* name, const string& value);
-  CNfcParam(const char* name, unsigned long value);
-  virtual ~CNfcParam();
-  unsigned long numValue() const { return m_numValue; }
-  const char* str_value() const { return m_str_value.c_str(); }
-  size_t str_len() const { return m_str_value.length(); }
-
- private:
-  string m_str_value;
-  unsigned long m_numValue;
-};
-
-class CNfcConfig : public vector<const CNfcParam*> {
- public:
-  virtual ~CNfcConfig();
-  static CNfcConfig& GetInstance();
-  friend void readOptionalConfig(const char* optional);
-
-  bool getValue(const char* name, char* pValue, size_t& len) const;
-  bool getValue(const char* name, unsigned long& rValue) const;
-  bool getValue(const char* name, unsigned short& rValue) const;
-  const CNfcParam* find(const char* p_name) const;
-  void clean();
-
- private:
-  CNfcConfig();
-  bool readConfig(const char* name, bool bResetContent);
-  void moveFromList();
-  void moveToList();
-  void add(const CNfcParam* pParam);
-  list<const CNfcParam*> m_list;
-  bool mValidFile;
-
-  unsigned long state;
-
-  inline bool Is(unsigned long f) { return (state & f) == f; }
-  inline void Set(unsigned long f) { state |= f; }
-  inline void Reset(unsigned long f) { state &= ~f; }
-};
-
-/*******************************************************************************
-**
-** Function:    isPrintable()
-**
-** Description: detremine if a char is printable
-**
-** Returns:     none
-**
-*******************************************************************************/
-inline bool isPrintable(char c) {
-  return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') ||
-         (c >= '0' && c <= '9') || c == '/' || c == '_' || c == '-' || c == '.';
-}
-
-/*******************************************************************************
-**
-** Function:    isDigit()
-**
-** Description: detremine if a char is numeral digit
-**
-** Returns:     none
-**
-*******************************************************************************/
-inline bool isDigit(char c, int base) {
-  if ('0' <= c && c <= '9') return true;
-  if (base == 16) {
-    if (('A' <= c && c <= 'F') || ('a' <= c && c <= 'f')) return true;
-  }
-  return false;
-}
-
-/*******************************************************************************
-**
-** Function:    getDigitValue()
-**
-** Description: return numercal value of a char
-**
-** Returns:     none
-**
-*******************************************************************************/
-inline int getDigitValue(char c, int base) {
-  if ('0' <= c && c <= '9') return c - '0';
-  if (base == 16) {
-    if ('A' <= c && c <= 'F')
-      return c - 'A' + 10;
-    else if ('a' <= c && c <= 'f')
-      return c - 'a' + 10;
-  }
-  return 0;
-}
-
-/*******************************************************************************
-**
-** Function:    findConfigFilePathFromTransportConfigPaths()
-**
-** Description: find a config file path with a given config name from transport
-**              config paths
-**
-** Returns:     none
-**
-*******************************************************************************/
-void findConfigFilePathFromTransportConfigPaths(const string& configName,
-                                                string& filePath) {
-  for (int i = 0; i < transport_config_path_size - 1; i++) {
-    filePath.assign(transport_config_paths[i]);
-    filePath += configName;
-    struct stat file_stat;
-    if (stat(filePath.c_str(), &file_stat) == 0 && S_ISREG(file_stat.st_mode)) {
-      return;
-    }
-  }
-  filePath.assign(transport_config_paths[transport_config_path_size - 1]);
-  filePath += configName;
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::readConfig()
-**
-** Description: read Config settings and parse them into a linked list
-**              move the element from linked list to a array at the end
-**
-** Returns:     none
-**
-*******************************************************************************/
-bool CNfcConfig::readConfig(const char* name, bool bResetContent) {
-  enum {
-    BEGIN_LINE = 1,
-    TOKEN,
-    STR_VALUE,
-    NUM_VALUE,
-    BEGIN_HEX,
-    BEGIN_QUOTE,
-    END_LINE
-  };
-
-  FILE* fd = NULL;
-  string token;
-  string strValue;
-  unsigned long numValue = 0;
-  CNfcParam* pParam = NULL;
-  int i = 0;
-  int base = 0;
-  char c = 0;
-
-  state = BEGIN_LINE;
-  /* open config file, read it into a buffer */
-  if ((fd = fopen(name, "rb")) == NULL) {
-    ALOGD("%s Cannot open config file %s\n", __func__, name);
-    if (bResetContent) {
-      ALOGD("%s Using default value for all settings\n", __func__);
-      mValidFile = false;
-    }
-    return false;
-  }
-  ALOGD("%s Opened %s config %s\n", __func__,
-        (bResetContent ? "base" : "optional"), name);
-
-  mValidFile = true;
-  if (size() > 0) {
-    if (bResetContent)
-      clean();
-    else
-      moveToList();
-  }
-
-  while (!feof(fd) && fread(&c, 1, 1, fd) == 1) {
-    switch (state & 0xff) {
-      case BEGIN_LINE:
-        if (c == '#')
-          state = END_LINE;
-        else if (isPrintable(c)) {
-          i = 0;
-          token.erase();
-          strValue.erase();
-          state = TOKEN;
-          token.push_back(c);
-        }
-        break;
-      case TOKEN:
-        if (c == '=') {
-          token.push_back('\0');
-          state = BEGIN_QUOTE;
-        } else if (isPrintable(c))
-          token.push_back(c);
-        else
-          state = END_LINE;
-        break;
-      case BEGIN_QUOTE:
-        if (c == '"') {
-          state = STR_VALUE;
-          base = 0;
-        } else if (c == '0')
-          state = BEGIN_HEX;
-        else if (isDigit(c, 10)) {
-          state = NUM_VALUE;
-          base = 10;
-          numValue = getDigitValue(c, base);
-          i = 0;
-        } else if (c == '{') {
-          state = NUM_VALUE;
-          base = 16;
-          i = 0;
-          Set(IsStringValue);
-        } else
-          state = END_LINE;
-        break;
-      case BEGIN_HEX:
-        if (c == 'x' || c == 'X') {
-          state = NUM_VALUE;
-          base = 16;
-          numValue = 0;
-          i = 0;
-          break;
-        } else if (isDigit(c, 10)) {
-          state = NUM_VALUE;
-          base = 10;
-          numValue = getDigitValue(c, base);
-          break;
-        } else if (c != '\n' && c != '\r') {
-          state = END_LINE;
-          break;
-        }
-      // fal through to numValue to handle numValue
-
-      case NUM_VALUE:
-        if (isDigit(c, base)) {
-          numValue *= base;
-          numValue += getDigitValue(c, base);
-          ++i;
-        } else if (base == 16 &&
-                   (c == ':' || c == '-' || c == ' ' || c == '}')) {
-          if (i > 0) {
-            int n = (i + 1) / 2;
-            while (n-- > 0) {
-              unsigned char c = (numValue >> (n * 8)) & 0xFF;
-              strValue.push_back(c);
-            }
-          }
-          Set(IsStringValue);
-          numValue = 0;
-          i = 0;
-        } else {
-          if (c == '\n' || c == '\r')
-            state = BEGIN_LINE;
-          else
-            state = END_LINE;
-          if (Is(IsStringValue) && base == 16 && i > 0) {
-            int n = (i + 1) / 2;
-            while (n-- > 0) strValue.push_back(((numValue >> (n * 8)) & 0xFF));
-          }
-          if (strValue.length() > 0)
-            pParam = new CNfcParam(token.c_str(), strValue);
-          else
-            pParam = new CNfcParam(token.c_str(), numValue);
-          add(pParam);
-          strValue.erase();
-          numValue = 0;
-        }
-        break;
-      case STR_VALUE:
-        if (c == '"') {
-          strValue.push_back('\0');
-          state = END_LINE;
-          pParam = new CNfcParam(token.c_str(), strValue);
-          add(pParam);
-        } else if (isPrintable(c))
-          strValue.push_back(c);
-        break;
-      case END_LINE:
-        if (c == '\n' || c == '\r') state = BEGIN_LINE;
-        break;
-      default:
-        break;
-    }
-  }
-
-  fclose(fd);
-
-  moveFromList();
-  return size() > 0;
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::CNfcConfig()
-**
-** Description: class constructor
-**
-** Returns:     none
-**
-*******************************************************************************/
-CNfcConfig::CNfcConfig() : mValidFile(true) {}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::~CNfcConfig()
-**
-** Description: class destructor
-**
-** Returns:     none
-**
-*******************************************************************************/
-CNfcConfig::~CNfcConfig() {}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::GetInstance()
-**
-** Description: get class singleton object
-**
-** Returns:     none
-**
-*******************************************************************************/
-CNfcConfig& CNfcConfig::GetInstance() {
-  static CNfcConfig theInstance;
-
-  if (theInstance.size() == 0 && theInstance.mValidFile) {
-    string strPath;
-    findConfigFilePathFromTransportConfigPaths(config_name, strPath);
-    theInstance.readConfig(strPath.c_str(), true);
-  }
-
-  return theInstance;
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::getValue()
-**
-** Description: get a string value of a setting
-**
-** Returns:     true if setting exists
-**              false if setting does not exist
-**
-*******************************************************************************/
-bool CNfcConfig::getValue(const char* name, char* pValue, size_t& len) const {
-  const CNfcParam* pParam = find(name);
-  if (pParam == NULL) return false;
-
-  if (pParam->str_len() > 0) {
-    memset(pValue, 0, len);
-    if (len > pParam->str_len()) len = pParam->str_len();
-    memcpy(pValue, pParam->str_value(), len);
-    return true;
-  }
-  return false;
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::getValue()
-**
-** Description: get a long numerical value of a setting
-**
-** Returns:     true if setting exists
-**              false if setting does not exist
-**
-*******************************************************************************/
-bool CNfcConfig::getValue(const char* name, unsigned long& rValue) const {
-  const CNfcParam* pParam = find(name);
-  if (pParam == NULL) return false;
-
-  if (pParam->str_len() == 0) {
-    rValue = static_cast<unsigned long>(pParam->numValue());
-    return true;
-  }
-  return false;
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::getValue()
-**
-** Description: get a short numerical value of a setting
-**
-** Returns:     true if setting exists
-**              false if setting does not exist
-**
-*******************************************************************************/
-bool CNfcConfig::getValue(const char* name, unsigned short& rValue) const {
-  const CNfcParam* pParam = find(name);
-  if (pParam == NULL) return false;
-
-  if (pParam->str_len() == 0) {
-    rValue = static_cast<unsigned short>(pParam->numValue());
-    return true;
-  }
-  return false;
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::find()
-**
-** Description: search if a setting exist in the setting array
-**
-** Returns:     pointer to the setting object
-**
-*******************************************************************************/
-const CNfcParam* CNfcConfig::find(const char* p_name) const {
-  if (size() == 0) return NULL;
-
-  for (const_iterator it = begin(), itEnd = end(); it != itEnd; ++it) {
-    if (**it < p_name)
-      continue;
-    else if (**it == p_name) {
-      if ((*it)->str_len() > 0)
-        ALOGD("%s found %s=%s\n", __func__, p_name, (*it)->str_value());
-      else
-        ALOGD("%s found %s=(0x%lX)\n", __func__, p_name, (*it)->numValue());
-      return *it;
-    } else
-      break;
-  }
-  return NULL;
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::clean()
-**
-** Description: reset the setting array
-**
-** Returns:     none
-**
-*******************************************************************************/
-void CNfcConfig::clean() {
-  if (size() == 0) return;
-
-  for (iterator it = begin(), itEnd = end(); it != itEnd; ++it) delete *it;
-  clear();
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::Add()
-**
-** Description: add a setting object to the list
-**
-** Returns:     none
-**
-*******************************************************************************/
-void CNfcConfig::add(const CNfcParam* pParam) {
-  if (m_list.size() == 0) {
-    m_list.push_back(pParam);
-    return;
-  }
-  for (list<const CNfcParam *>::iterator it = m_list.begin(),
-                                         itEnd = m_list.end();
-       it != itEnd; ++it) {
-    if (**it < pParam->c_str()) continue;
-    m_list.insert(it, pParam);
-    return;
-  }
-  m_list.push_back(pParam);
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::moveFromList()
-**
-** Description: move the setting object from list to array
-**
-** Returns:     none
-**
-*******************************************************************************/
-void CNfcConfig::moveFromList() {
-  if (m_list.size() == 0) return;
-
-  for (list<const CNfcParam *>::iterator it = m_list.begin(),
-                                         itEnd = m_list.end();
-       it != itEnd; ++it)
-    push_back(*it);
-  m_list.clear();
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::moveToList()
-**
-** Description: move the setting object from array to list
-**
-** Returns:     none
-**
-*******************************************************************************/
-void CNfcConfig::moveToList() {
-  if (m_list.size() != 0) m_list.clear();
-
-  for (iterator it = begin(), itEnd = end(); it != itEnd; ++it)
-    m_list.push_back(*it);
-  clear();
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcParam::CNfcParam()
-**
-** Description: class constructor
-**
-** Returns:     none
-**
-*******************************************************************************/
-CNfcParam::CNfcParam() : m_numValue(0) {}
-
-/*******************************************************************************
-**
-** Function:    CNfcParam::~CNfcParam()
-**
-** Description: class destructor
-**
-** Returns:     none
-**
-*******************************************************************************/
-CNfcParam::~CNfcParam() {}
-
-/*******************************************************************************
-**
-** Function:    CNfcParam::CNfcParam()
-**
-** Description: class copy constructor
-**
-** Returns:     none
-**
-*******************************************************************************/
-CNfcParam::CNfcParam(const char* name, const string& value)
-    : string(name), m_str_value(value), m_numValue(0) {}
-
-/*******************************************************************************
-**
-** Function:    CNfcParam::CNfcParam()
-**
-** Description: class copy constructor
-**
-** Returns:     none
-**
-*******************************************************************************/
-CNfcParam::CNfcParam(const char* name, unsigned long value)
-    : string(name), m_numValue(value) {}
-
-/*******************************************************************************
-**
-** Function:    GetStrValue
-**
-** Description: API function for getting a string value of a setting
-**
-** Returns:     none
-**
-*******************************************************************************/
-extern "C" int GetStrValue(const char* name, char* pValue, unsigned long l) {
-  size_t len = l;
-  CNfcConfig& rConfig = CNfcConfig::GetInstance();
-
-  bool b = rConfig.getValue(name, pValue, len);
-  return b ? len : 0;
-}
-
-/*******************************************************************************
-**
-** Function:    GetNumValue
-**
-** Description: API function for getting a numerical value of a setting
-**
-** Returns:     none
-**
-*******************************************************************************/
-extern "C" int GetNumValue(const char* name, void* pValue, unsigned long len) {
-  if (!pValue) return false;
-
-  CNfcConfig& rConfig = CNfcConfig::GetInstance();
-  const CNfcParam* pParam = rConfig.find(name);
-
-  if (pParam == NULL) return false;
-  unsigned long v = pParam->numValue();
-  if (v == 0 && pParam->str_len() > 0 && pParam->str_len() < 4) {
-    const unsigned char* p = (const unsigned char*)pParam->str_value();
-    for (size_t i = 0; i < pParam->str_len(); ++i) {
-      v *= 256;
-      v += *p++;
-    }
-  }
-  switch (len) {
-    case sizeof(unsigned long):
-      *(static_cast<unsigned long*>(pValue)) = (unsigned long)v;
-      break;
-    case sizeof(unsigned short):
-      *(static_cast<unsigned short*>(pValue)) = (unsigned short)v;
-      break;
-    case sizeof(unsigned char):
-      *(static_cast<unsigned char*>(pValue)) = (unsigned char)v;
-      break;
-    default:
-      return false;
-  }
-  return true;
-}
-
-/*******************************************************************************
-**
-** Function:    resetConfig
-**
-** Description: reset settings array
-**
-** Returns:     none
-**
-*******************************************************************************/
-extern void resetConfig() {
-  CNfcConfig& rConfig = CNfcConfig::GetInstance();
-
-  rConfig.clean();
-}
-
-/*******************************************************************************
-**
-** Function:    readOptionalConfig()
-**
-** Description: read Config settings from an optional conf file
-**
-** Returns:     none
-**
-*******************************************************************************/
-void readOptionalConfig(const char* extra) {
-  string strPath;
-  string configName(extra_config_base);
-  configName += extra;
-  configName += extra_config_ext;
-
-  findConfigFilePathFromTransportConfigPaths(configName, strPath);
-  CNfcConfig::GetInstance().readConfig(strPath.c_str(), false);
-}
diff --git a/halimpl/bcm2079x/adaptation/patchram.cpp b/halimpl/bcm2079x/adaptation/patchram.cpp
deleted file mode 100644
index 3fc4b5a..0000000
--- a/halimpl/bcm2079x/adaptation/patchram.cpp
+++ /dev/null
@@ -1,594 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 1999-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-#define LOG_TAG "NfcNciHal"
-
-#include "_OverrideLog.h"
-#include "config.h"
-#include "nfc_hal_int.h"
-#include "userial.h"
-extern "C" {
-#include "nfc_hal_post_reset.h"
-}
-#include <cutils/properties.h>
-#include <inttypes.h>
-#include <malloc.h>
-#include <string>
-#include "StartupConfig.h"
-#include "spdhelper.h"
-
-#define FW_PRE_PATCH "FW_PRE_PATCH"
-#define FW_PATCH "FW_PATCH"
-#define MAX_RF_DATA_CREDITS "MAX_RF_DATA_CREDITS"
-
-#define MAX_BUFFER (512)
-static char sPrePatchFn[MAX_BUFFER + 1];
-static char sPatchFn[MAX_BUFFER + 1];
-static void* sPrmBuf = NULL;
-static void* sI2cFixPrmBuf = NULL;
-
-#define CONFIG_MAX_LEN 256
-static uint8_t sConfig[CONFIG_MAX_LEN];
-static StartupConfig sStartupConfig;
-static StartupConfig sLptdConfig;
-static StartupConfig sPreDiscoveryConfig;
-static StartupConfig sXtalCustomParam;
-extern uint8_t* p_nfc_hal_dm_start_up_cfg;  // defined in the HAL
-static uint8_t nfa_dm_start_up_vsc_cfg[CONFIG_MAX_LEN];
-extern uint8_t* p_nfc_hal_dm_start_up_vsc_cfg;  // defined in the HAL
-extern uint8_t* p_nfc_hal_dm_lptd_cfg;          // defined in the HAL
-static uint8_t sDontSendLptd[] = {0};
-extern uint8_t* p_nfc_hal_pre_discover_cfg;    // defined in the HAL
-extern uint8_t* p_nfc_hal_dm_xtal_params_cfg;  // defined in HAL
-
-extern tSNOOZE_MODE_CONFIG gSnoozeModeCfg;
-extern tNFC_HAL_CFG* p_nfc_hal_cfg;
-static void mayDisableSecureElement(StartupConfig& config);
-
-/* Default patchfile (in NCD format) */
-#ifndef NFA_APP_DEFAULT_PATCHFILE_NAME
-#define NFA_APP_DEFAULT_PATCHFILE_NAME "\0"
-#endif
-
-/* Default patchfile (in NCD format) */
-#ifndef NFA_APP_DEFAULT_I2C_PATCHFILE_NAME
-#define NFA_APP_DEFAULT_I2C_PATCHFILE_NAME "\0"
-#endif
-
-tNFC_POST_RESET_CB nfc_post_reset_cb = {
-    /* Default Patch & Pre-Patch */
-    NFA_APP_DEFAULT_PATCHFILE_NAME,
-    NULL,
-    NFA_APP_DEFAULT_I2C_PATCHFILE_NAME,
-    NULL,
-
-    /* Default UART baud rate */
-    NFC_HAL_DEFAULT_BAUD,
-
-    /* Default tNFC_HAL_DEV_INIT_CFG (flags, num_xtal_cfg, {brcm_hw_id,
-       xtal-freq, xtal-index} ) */
-    {2, /* number of valid entries */
-     {
-         {0x43341000, 37400,
-          NFC_HAL_XTAL_INDEX_37400},  // All revisions of 43341 use 37,400
-         {0x20795000, 26000, NFC_HAL_XTAL_INDEX_26000},
-         {0, 0, 0},
-         {0, 0, 0},
-         {0, 0, 0},
-     }},
-
-    /* Default low power mode settings */
-    NFC_HAL_LP_SNOOZE_MODE_NONE,    /* Snooze Mode          */
-    NFC_HAL_LP_IDLE_THRESHOLD_HOST, /* Idle Threshold Host  */
-    NFC_HAL_LP_IDLE_THRESHOLD_HC,   /* Idle Threshold HC    */
-    NFC_HAL_LP_ACTIVE_LOW,          /* NFC_WAKE Active Mode */
-    NFC_HAL_LP_ACTIVE_HIGH,         /* DH_WAKE Active Mode  */
-
-    NFA_APP_MAX_NUM_REINIT, /* max retry to get NVM type */
-    0,                      /* current retry count */
-    TRUE,                   /* debug mode for downloading patchram */
-    FALSE /* skip downloading patchram after reinit because of patch download
-             failure */
-};
-
-/*******************************************************************************
-**
-** Function         getFileLength
-**
-** Description      return the size of a file
-**
-** Returns          file size in number of bytes
-**
-*******************************************************************************/
-static long getFileLength(FILE* fp) {
-  long sz;
-  fseek(fp, 0L, SEEK_END);
-  sz = ftell(fp);
-  fseek(fp, 0L, SEEK_SET);
-
-  return (sz > 0) ? sz : 0;
-}
-
-/*******************************************************************************
-**
-** Function         isFileExist
-**
-** Description      Check if file name exists (android does not support fexists)
-**
-** Returns          TRUE if file exists
-**
-*******************************************************************************/
-static bool isFileExist(const char* pFilename) {
-  FILE* pf;
-
-  pf = fopen(pFilename, "r");
-  if (pf != NULL) {
-    fclose(pf);
-    return TRUE;
-  }
-  return FALSE;
-}
-
-/*******************************************************************************
-**
-** Function         findPatchramFile
-**
-** Description      Find the patchram file name specified in the .conf
-**
-** Returns          pointer to the file name
-**
-*******************************************************************************/
-static const char* findPatchramFile(const char* pConfigName, char* pBuffer,
-                                    int bufferLen) {
-  ALOGD("%s: config=%s", __func__, pConfigName);
-
-  if (pConfigName == NULL) {
-    ALOGD("%s No patchfile defined\n", __func__);
-    return NULL;
-  }
-
-  if (GetStrValue(pConfigName, &pBuffer[0], bufferLen)) {
-    ALOGD("%s found patchfile %s\n", __func__, pBuffer);
-    return (pBuffer[0] == '\0') ? NULL : pBuffer;
-  }
-
-  ALOGD("%s Cannot find patchfile '%s'\n", __func__, pConfigName);
-  return NULL;
-}
-
-/*******************************************************************************
-**
-** Function:    continueAfterSetSnoozeMode
-**
-** Description: Called after Snooze Mode is enabled.
-**
-** Returns:     none
-**
-*******************************************************************************/
-static void continueAfterSetSnoozeMode(tHAL_NFC_STATUS status) {
-  ALOGD("%s: status=%u", __func__, status);
-  // let stack download firmware during next initialization
-  nfc_post_reset_cb.spd_skip_on_power_cycle = FALSE;
-  if (status == NCI_STATUS_OK)
-    HAL_NfcPreInitDone(HAL_NFC_STATUS_OK);
-  else
-    HAL_NfcPreInitDone(HAL_NFC_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function:    postDownloadPatchram
-**
-** Description: Called after patch download
-**
-** Returns:     none
-**
-*******************************************************************************/
-static void postDownloadPatchram(tHAL_NFC_STATUS status) {
-  ALOGD("%s: status=%i", __func__, status);
-  GetStrValue(NAME_SNOOZE_MODE_CFG, (char*)&gSnoozeModeCfg,
-              sizeof(gSnoozeModeCfg));
-  if (status != HAL_NFC_STATUS_OK) {
-    ALOGE("%s: Patch download failed", __func__);
-    if (status == HAL_NFC_STATUS_REFUSED) {
-      SpdHelper::setPatchAsBad();
-    } else
-      SpdHelper::incErrorCount();
-
-    /* If in SPD Debug mode, fail immediately and obviously */
-    if (SpdHelper::isSpdDebug())
-      HAL_NfcPreInitDone(HAL_NFC_STATUS_FAILED);
-    else {
-      /* otherwise, power cycle the chip and let the stack startup normally */
-      ALOGD("%s: re-init; don't download firmware", __func__);
-      // stop stack from downloading firmware during next initialization
-      nfc_post_reset_cb.spd_skip_on_power_cycle = TRUE;
-      USERIAL_PowerupDevice(0);
-      HAL_NfcReInit();
-    }
-  }
-  /* Set snooze mode here */
-  else if (gSnoozeModeCfg.snooze_mode != NFC_HAL_LP_SNOOZE_MODE_NONE) {
-    status = HAL_NfcSetSnoozeMode(
-        gSnoozeModeCfg.snooze_mode, gSnoozeModeCfg.idle_threshold_dh,
-        gSnoozeModeCfg.idle_threshold_nfcc, gSnoozeModeCfg.nfc_wake_active_mode,
-        gSnoozeModeCfg.dh_wake_active_mode, continueAfterSetSnoozeMode);
-    if (status != NCI_STATUS_OK) {
-      ALOGE("%s: Setting snooze mode failed, status=%i", __func__, status);
-      HAL_NfcPreInitDone(HAL_NFC_STATUS_FAILED);
-    }
-  } else {
-    ALOGD("%s: Not using Snooze Mode", __func__);
-    HAL_NfcPreInitDone(HAL_NFC_STATUS_OK);
-  }
-}
-
-/*******************************************************************************
-**
-** Function:    prmCallback
-**
-** Description: Patchram callback (for static patchram mode)
-**
-** Returns:     none
-**
-*******************************************************************************/
-void prmCallback(uint8_t event) {
-  ALOGD("%s: event=0x%x", __func__, event);
-  switch (event) {
-    case NFC_HAL_PRM_CONTINUE_EVT:
-      /* This event does not occur if static patchram buf is used */
-      break;
-
-    case NFC_HAL_PRM_COMPLETE_EVT:
-      postDownloadPatchram(HAL_NFC_STATUS_OK);
-      break;
-
-    case NFC_HAL_PRM_ABORT_EVT:
-      postDownloadPatchram(HAL_NFC_STATUS_FAILED);
-      break;
-
-    case NFC_HAL_PRM_ABORT_INVALID_PATCH_EVT:
-      ALOGD("%s: invalid patch...skipping patch download", __func__);
-      postDownloadPatchram(HAL_NFC_STATUS_REFUSED);
-      break;
-
-    case NFC_HAL_PRM_ABORT_BAD_SIGNATURE_EVT:
-      ALOGD("%s: patch authentication failed", __func__);
-      postDownloadPatchram(HAL_NFC_STATUS_REFUSED);
-      break;
-
-    case NFC_HAL_PRM_ABORT_NO_NVM_EVT:
-      ALOGD("%s: No NVM detected", __func__);
-      HAL_NfcPreInitDone(HAL_NFC_STATUS_FAILED);
-      break;
-
-    default:
-      ALOGD("%s: not handled event=0x%x", __func__, event);
-      break;
-  }
-}
-
-/*******************************************************************************
-**
-** Function         getNfaValues
-**
-** Description      Get configuration values needed by NFA layer
-**
-** Returns:         None
-**
-*******************************************************************************/
-static void getNfaValues(uint32_t chipid) {
-  unsigned long num = 0;
-  int actualLen = 0;
-
-  sStartupConfig.initialize();
-  sLptdConfig.initialize();
-  sPreDiscoveryConfig.initialize();
-
-  actualLen =
-      GetStrValue(NAME_NFA_DM_START_UP_CFG, (char*)sConfig, sizeof(sConfig));
-  if (actualLen) sStartupConfig.append(sConfig, actualLen);
-
-  // Set antenna tuning configuration if configured.
-  actualLen =
-      GetStrValue(NAME_PREINIT_DSP_CFG, (char*)sConfig, sizeof(sConfig));
-  if (actualLen) sStartupConfig.append(sConfig, actualLen);
-
-  if (GetStrValue(NAME_NFA_DM_START_UP_VSC_CFG, (char*)nfa_dm_start_up_vsc_cfg,
-                  sizeof(nfa_dm_start_up_vsc_cfg))) {
-    p_nfc_hal_dm_start_up_vsc_cfg = &nfa_dm_start_up_vsc_cfg[0];
-    ALOGD("START_UP_VSC_CFG[0] = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n",
-          nfa_dm_start_up_vsc_cfg[0], nfa_dm_start_up_vsc_cfg[1],
-          nfa_dm_start_up_vsc_cfg[2], nfa_dm_start_up_vsc_cfg[3],
-          nfa_dm_start_up_vsc_cfg[4], nfa_dm_start_up_vsc_cfg[5],
-          nfa_dm_start_up_vsc_cfg[6], nfa_dm_start_up_vsc_cfg[7]);
-  }
-
-  actualLen = GetStrValue(NAME_LPTD_CFG, (char*)sConfig, sizeof(sConfig));
-  if (actualLen) {
-    sLptdConfig.append(sConfig, actualLen);
-    p_nfc_hal_dm_lptd_cfg =
-        const_cast<uint8_t*>(sLptdConfig.getInternalBuffer());
-  } else {
-    // Default to not sending any LPTD setting.
-    p_nfc_hal_dm_lptd_cfg = sDontSendLptd;
-  }
-
-  mayDisableSecureElement(sStartupConfig);
-  p_nfc_hal_dm_start_up_cfg =
-      const_cast<uint8_t*>(sStartupConfig.getInternalBuffer());
-
-  actualLen = GetStrValue(NAME_NFA_DM_PRE_DISCOVERY_CFG, (char*)sConfig,
-                          sizeof(sConfig));
-  if (actualLen) {
-    sPreDiscoveryConfig.append(sConfig, actualLen);
-    mayDisableSecureElement(sPreDiscoveryConfig);
-    p_nfc_hal_pre_discover_cfg =
-        const_cast<uint8_t*>(sPreDiscoveryConfig.getInternalBuffer());
-  }
-
-  // configure how many secure elements are available for each type of chip
-  if (p_nfc_hal_cfg->nfc_hal_hci_uicc_support > 0) {
-    if ((chipid & BRCM_NFC_GEN_MASK) == BRCM_NFC_20791_GEN) {
-      nfc_hal_cb.max_ee = BRCM_NFC_20791_GEN_MAX_EE;
-      p_nfc_hal_cfg->nfc_hal_hci_uicc_support =
-          HAL_NFC_HCI_UICC0_HOST | HAL_NFC_HCI_UICC1_HOST;
-    } else if ((chipid & BRCM_NFC_GEN_MASK) == BRCM_NFC_43341_GEN) {
-      nfc_hal_cb.max_ee = BRCM_NFC_43341_GEN_MAX_EE;
-      p_nfc_hal_cfg->nfc_hal_hci_uicc_support =
-          HAL_NFC_HCI_UICC0_HOST | HAL_NFC_HCI_UICC1_HOST;
-    } else if ((chipid & BRCM_NFC_GEN_MASK) == BRCM_NFC_20795_GEN) {
-      nfc_hal_cb.max_ee = BRCM_NFC_20795_GEN_MAX_EE;
-      p_nfc_hal_cfg->nfc_hal_hci_uicc_support = HAL_NFC_HCI_UICC0_HOST |
-                                                HAL_NFC_HCI_UICC1_HOST |
-                                                HAL_NFC_HCI_UICC2_HOST;
-    }
-
-    // let .conf variable determine how many EE's to discover
-    if (GetNumValue(NAME_NFA_MAX_EE_SUPPORTED, &num, sizeof(num)))
-      nfc_hal_cb.max_ee = num;
-  }
-}
-
-/*******************************************************************************
-**
-** Function         StartPatchDownload
-**
-** Description      Reads configuration settings, and begins the download
-**                  process if patch files are configured.
-**
-** Returns:         None
-**
-*******************************************************************************/
-static void StartPatchDownload(uint32_t chipid) {
-  ALOGD("%s: chipid=%" PRIu32, __func__, chipid);
-
-  char chipID[30];
-  sprintf(chipID, "%" PRIu32, chipid);
-  ALOGD("%s: chidId=%s", __func__, chipID);
-
-  readOptionalConfig(chipID);  // Read optional chip specific settings
-  readOptionalConfig("fime");  // Read optional FIME specific settings
-  getNfaValues(chipid);        // Get NFA configuration values into variables
-
-  findPatchramFile(FW_PATCH, sPatchFn, sizeof(sPatchFn));
-  findPatchramFile(FW_PRE_PATCH, sPrePatchFn, sizeof(sPatchFn));
-
-  {
-    FILE* fd;
-    /* If an I2C fix patch file was specified, then tell the stack about it */
-    if (sPrePatchFn[0] != '\0') {
-      fd = fopen(sPrePatchFn, "rb");
-      if (fd != NULL) {
-        uint32_t lenPrmBuffer = getFileLength(fd);
-
-        sI2cFixPrmBuf = malloc(lenPrmBuffer);
-        if (sI2cFixPrmBuf != NULL) {
-          size_t actualLen = fread(sI2cFixPrmBuf, 1, lenPrmBuffer, fd);
-          if (actualLen == lenPrmBuffer) {
-            ALOGD("%s Setting I2C fix to %s (size: %" PRIu32 ")", __func__,
-                  sPrePatchFn, lenPrmBuffer);
-            HAL_NfcPrmSetI2cPatch((uint8_t*)sI2cFixPrmBuf,
-                                  (uint16_t)lenPrmBuffer, 0);
-          } else
-            ALOGE(
-                "%s fail reading i2c fix; actual len=%zu; expected len="
-                "%" PRIu32,
-                __func__, actualLen, lenPrmBuffer);
-        } else {
-          ALOGE("%s Unable to get buffer to i2c fix (%" PRIu32 " bytes)",
-                __func__, lenPrmBuffer);
-        }
-
-        fclose(fd);
-      } else {
-        ALOGE("%s Unable to open i2c fix patchfile %s", __func__, sPrePatchFn);
-      }
-    }
-  }
-
-  {
-    FILE* fd;
-
-    /* If a patch file was specified, then download it now */
-    if (sPatchFn[0] != '\0') {
-      uint32_t bDownloadStarted = false;
-
-      /* open patchfile, read it into a buffer */
-      fd = fopen(sPatchFn, "rb");
-      if (fd != NULL) {
-        uint32_t lenPrmBuffer = getFileLength(fd);
-        ALOGD("%s Downloading patchfile %s (size: %" PRIu32 ") format=%u",
-              __func__, sPatchFn, lenPrmBuffer, NFC_HAL_PRM_FORMAT_NCD);
-        sPrmBuf = malloc(lenPrmBuffer);
-        if (sPrmBuf != NULL) {
-          size_t actualLen = fread(sPrmBuf, 1, lenPrmBuffer, fd);
-          if (actualLen == lenPrmBuffer) {
-            if (!SpdHelper::isPatchBad((uint8_t*)sPrmBuf, lenPrmBuffer)) {
-              /* Download patch using static memeory mode */
-              HAL_NfcPrmDownloadStart(NFC_HAL_PRM_FORMAT_NCD, 0,
-                                      (uint8_t*)sPrmBuf, lenPrmBuffer, 0,
-                                      prmCallback);
-              bDownloadStarted = true;
-            }
-          } else
-            ALOGE("%s fail reading patchram", __func__);
-        } else
-          ALOGE("%s Unable to buffer to hold patchram (%" PRIu32 " bytes)",
-                __func__, lenPrmBuffer);
-
-        fclose(fd);
-      } else
-        ALOGE("%s Unable to open patchfile %s", __func__, sPatchFn);
-
-      /* If the download never got started */
-      if (!bDownloadStarted) {
-        /* If debug mode, fail in an obvious way, otherwise try to start stack
-         */
-        postDownloadPatchram(SpdHelper::isSpdDebug() ? HAL_NFC_STATUS_FAILED
-                                                     : HAL_NFC_STATUS_OK);
-      }
-    } else {
-      ALOGE(
-          "%s: No patchfile specified or disabled. Proceeding to post-download "
-          "procedure...",
-          __func__);
-      postDownloadPatchram(HAL_NFC_STATUS_OK);
-    }
-  }
-
-  ALOGD("%s: exit", __func__);
-}
-
-/*******************************************************************************
-**
-** Function:    nfc_hal_post_reset_init
-**
-** Description: Called by the NFC HAL after controller has been reset.
-**              Begin to download firmware patch files.
-**
-** Returns:     none
-**
-*******************************************************************************/
-void nfc_hal_post_reset_init(uint32_t brcm_hw_id, uint8_t nvm_type) {
-  ALOGD("%s: brcm_hw_id=0x%" PRIu32 ", nvm_type=%d", __func__, brcm_hw_id,
-        nvm_type);
-  tHAL_NFC_STATUS stat = HAL_NFC_STATUS_FAILED;
-  uint8_t max_credits = 1, allow_no_nvm = 0;
-
-  p_nfc_hal_cfg->nfc_hal_prm_nvm_required =
-      TRUE;  // don't download firmware if controller cannot detect EERPOM
-
-  if (nvm_type == NCI_SPD_NVM_TYPE_NONE) {
-    GetNumValue(NAME_ALLOW_NO_NVM, &allow_no_nvm, sizeof(allow_no_nvm));
-    if (allow_no_nvm == 0) {
-      ALOGD("%s: No NVM detected, FAIL the init stage to force a retry",
-            __func__);
-      USERIAL_PowerupDevice(0);
-      stat = HAL_NfcReInit();
-      return;
-    }
-
-    p_nfc_hal_cfg->nfc_hal_prm_nvm_required =
-        FALSE;  // allow download firmware if controller cannot detect EERPOM
-  }
-
-  /* Start downloading the patch files */
-  StartPatchDownload(brcm_hw_id);
-
-  if (GetNumValue(MAX_RF_DATA_CREDITS, &max_credits, sizeof(max_credits)) &&
-      (max_credits > 0)) {
-    ALOGD("%s : max_credits=%d", __func__, max_credits);
-    HAL_NfcSetMaxRfDataCredits(max_credits);
-  }
-}
-
-/*******************************************************************************
-**
-** Function:        mayDisableSecureElement
-**
-** Description:     Optionally adjust a TLV to disable secure element.  This
-*feature
-**                  is enabled by setting the system property
-**                  nfc.disable_secure_element to a bit mask represented by a
-*hex
-**                  octet: C0 = do not detect any secure element.
-**                         40 = do not detect secure element in slot 0.
-**                         80 = do not detect secure element in slot 1.
-**
-**                  config: a sequence of TLV's.
-**
-*******************************************************************************/
-void mayDisableSecureElement(StartupConfig& config) {
-  unsigned int bitmask = 0;
-  char valueStr[PROPERTY_VALUE_MAX] = {0};
-  int len = property_get("nfc.disable_secure_element", valueStr, "");
-  if (len > 0) {
-    sscanf(valueStr, "%x", &bitmask);  // read system property as a hex octet
-    ALOGD("%s: disable 0x%02X", __func__, (uint8_t)bitmask);
-    config.disableSecureElement((uint8_t)(bitmask & 0xC0));
-  }
-}
-
-/*******************************************************************************
-**
-** Function:    configureCrystalFrequency
-**
-** Description: Configure controller's crystal frequency by reading values from
-**              .conf file.  If .conf file does not define any value, then use
-**              default values defined in struct nfc_post_reset_cb.
-**
-** Returns:     none
-**
-*******************************************************************************/
-void configureCrystalFrequency() {
-  unsigned long num = 0;
-  uint32_t hwId = 0;
-  uint16_t xtalFreq = 0;
-  uint8_t xtalIndex = 0;
-  int actualLen = 0;
-
-  if (GetNumValue(NAME_XTAL_HARDWARE_ID, &num, sizeof(num))) hwId = num;
-
-  if (GetNumValue(NAME_XTAL_FREQUENCY, &num, sizeof(num)))
-    xtalFreq = (uint16_t)num;
-
-  if (GetNumValue(NAME_XTAL_FREQ_INDEX, &num, sizeof(num)))
-    xtalIndex = (uint8_t)num;
-
-  actualLen =
-      GetStrValue(NAME_XTAL_PARAMS_CFG, (char*)sConfig, sizeof(sConfig));
-  if (actualLen &&
-      (xtalIndex ==
-       NFC_HAL_XTAL_INDEX_SPECIAL))  // whether to use custom crystal frequency
-  {
-    sXtalCustomParam.append(sConfig, actualLen);
-    p_nfc_hal_dm_xtal_params_cfg =
-        const_cast<uint8_t*>(sXtalCustomParam.getInternalBuffer());
-  }
-
-  if ((hwId == 0) && (xtalFreq == 0) && (xtalIndex == 0)) return;
-
-  ALOGD("%s: hwId=0x%" PRIX32 "; freq=%u; index=%u", __func__, hwId, xtalFreq,
-        xtalIndex);
-  nfc_post_reset_cb.dev_init_config.xtal_cfg[0].brcm_hw_id =
-      (hwId & BRCM_NFC_GEN_MASK);
-  nfc_post_reset_cb.dev_init_config.xtal_cfg[0].xtal_freq = xtalFreq;
-  nfc_post_reset_cb.dev_init_config.xtal_cfg[0].xtal_index = xtalIndex;
-  nfc_post_reset_cb.dev_init_config.num_xtal_cfg = 1;
-}
diff --git a/halimpl/bcm2079x/adaptation/spdhelper.cpp b/halimpl/bcm2079x/adaptation/spdhelper.cpp
deleted file mode 100644
index b936753..0000000
--- a/halimpl/bcm2079x/adaptation/spdhelper.cpp
+++ /dev/null
@@ -1,90 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-#define LOG_TAG "NfcNciHal"
-#include "spdhelper.h"
-#include "_OverrideLog.h"
-#include "config.h"
-
-void SpdHelper::setPatchAsBad() { getInstance().setPatchAsBadImpl(); }
-
-void SpdHelper::incErrorCount() { getInstance().incErrorCountImpl(); }
-
-bool SpdHelper::isPatchBad(uint8_t* prm, uint32_t len) {
-  return getInstance().isPatchBadImpl(prm, len);
-}
-
-bool SpdHelper::isSpdDebug() {
-  bool b = getInstance().isSpdDebugImpl();
-  ALOGD("%s SpdDebug is %s", __func__, (b ? "TRUE" : "FALSE"));
-  return b;
-}
-
-void SpdHelper::incErrorCountImpl() {
-  if (++mErrorCount >= mMaxErrorCount) {
-    setPatchAsBadImpl();
-  }
-}
-
-void SpdHelper::setPatchAsBadImpl() { mIsPatchBad = true; }
-
-inline const char* toHex(uint8_t b) {
-  static char hex[] = "0123456789ABCDEF";
-  static char c[3];
-  c[0] = hex[((b >> 4) & 0x0F)];
-  c[1] = hex[((b >> 0) & 0x0F)];
-  c[2] = '\0';
-  return &c[0];
-}
-
-bool SpdHelper::isPatchBadImpl(uint8_t* prm, uint32_t len) {
-  string strNew;
-
-  // Get the patch ID from the prm data.
-  for (uint32_t i = 0; i < 8 && i < len; ++i) strNew.append(toHex(*prm++));
-
-  // If it is not the same patch as before, then reset things.
-  if (strNew != mPatchId) {
-    mPatchId = strNew;
-    mErrorCount = 0;
-    mIsPatchBad = false;
-  }
-
-  // Otherwise the 'mIsPatchBad' will tell if its bad or not.
-  ALOGD("%s '%s' (%d) is %sa known bad patch file", __func__, mPatchId.c_str(),
-        mErrorCount, (mIsPatchBad ? "" : "not "));
-
-  return mIsPatchBad;
-}
-
-SpdHelper& SpdHelper::getInstance() {
-  static SpdHelper* theInstance = NULL;
-  if (theInstance == NULL) theInstance = new SpdHelper;
-  return *theInstance;
-}
-
-SpdHelper::SpdHelper() {
-  mErrorCount = 0;
-  mPatchId.erase();
-  if (!GetNumValue((char*)NAME_SPD_MAXRETRYCOUNT, &mMaxErrorCount,
-                   sizeof(mMaxErrorCount)))
-    mMaxErrorCount = DEFAULT_SPD_MAXRETRYCOUNT;
-  mIsPatchBad = false;
-  if (!GetNumValue((char*)NAME_SPD_DEBUG, &mSpdDebug, sizeof(mSpdDebug)))
-    mSpdDebug = false;
-}
diff --git a/halimpl/bcm2079x/adaptation/userial_linux.c b/halimpl/bcm2079x/adaptation/userial_linux.c
deleted file mode 100644
index 3313a2e..0000000
--- a/halimpl/bcm2079x/adaptation/userial_linux.c
+++ /dev/null
@@ -1,1731 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 1999-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-#define LOG_TAG "USERIAL_LINUX"
-
-#include <string.h>
-#include "_OverrideLog.h"
-#include "gki.h"
-#include "nfc_hal_api.h"
-#include "nfc_hal_int.h"
-#include "nfc_target.h"
-#include "userial.h"
-
-#include <errno.h>
-#include <fcntl.h>
-#include <gki_int.h>
-#include <poll.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <termios.h>
-#include <unistd.h>
-#include "bcm2079x.h"
-#include "config.h"
-#include "upio.h"
-
-#define HCISU_EVT EVENT_MASK(APPL_EVT_0)
-#define MAX_ERROR 10
-#define default_transport "/dev/bcm2079x"
-
-#define NUM_RESET_ATTEMPTS 5
-#define NFC_WAKE_ASSERTED_ON_POR UPIO_OFF
-
-#ifndef BTE_APPL_MAX_USERIAL_DEV_NAME
-#define BTE_APPL_MAX_USERIAL_DEV_NAME (256)
-#endif
-extern uint8_t appl_trace_level;
-
-/* Mapping of USERIAL_PORT_x to linux */
-extern uint32_t ScrProtocolTraceFlag;
-static tUPIO_STATE current_nfc_wake_state = UPIO_OFF;
-int uart_port = 0;
-int isLowSpeedTransport = 0;
-int nfc_wake_delay = 0;
-int nfc_write_delay = 0;
-int gPowerOnDelay = 300;
-static int gPrePowerOffDelay = 0;   // default value
-static int gPostPowerOffDelay = 0;  // default value
-static pthread_mutex_t close_thread_mutex = PTHREAD_MUTEX_INITIALIZER;
-
-char userial_dev[BTE_APPL_MAX_USERIAL_DEV_NAME + 1];
-char power_control_dev[BTE_APPL_MAX_USERIAL_DEV_NAME + 1];
-tSNOOZE_MODE_CONFIG gSnoozeModeCfg = {
-    NFC_HAL_LP_SNOOZE_MODE_SPI_I2C, /* Sleep Mode (0=Disabled 1=UART
-                                       8=SPI/I2C) */
-    NFC_HAL_LP_IDLE_THRESHOLD_HOST, /* Idle Threshold Host */
-    NFC_HAL_LP_IDLE_THRESHOLD_HC,   /* Idle Threshold HC */
-    NFC_HAL_LP_ACTIVE_LOW,          /* NFC Wake active mode (0=ActiveLow
-                                       1=ActiveHigh) */
-    NFC_HAL_LP_ACTIVE_HIGH          /* Host Wake active mode (0=ActiveLow
-                                       1=ActiveHigh) */
-};
-
-uint8_t bcmi2cnfc_client_addr = 0;
-uint8_t bcmi2cnfc_read_multi_packets = 0;
-
-#define USERIAL_Debug_verbose \
-  ((ScrProtocolTraceFlag & 0x80000000) == 0x80000000)
-
-#include <sys/socket.h>
-
-static uint8_t spi_negotiation[10] = {
-    0xF0, /* CMD */
-    0x00, /* SPI PARM Negotiation */
-    0x01, /* SPI Version */
-    0x00, /* SPI Mode:0, SPI_INT active low */
-    0x00, /* 8Bit, MSB first, Little Endian byte order */
-    0x00, /* Reserved */
-    0xFF, /* Sleep timeout Lower Byte */
-    0xFF, /* Sleep timeout Upper Byte */
-    0x00, /* Reserved */
-    0x00  /* Reserved */
-};
-static uint8_t spi_nego_res[20];
-
-/* Modes used when powering off (independent
-   of what the stack/jni has configured */
-#define POM_NORMAL (0)  /* Normal */
-#define POM_CE3SO (1)   /* Go to CE3-SO */
-#define POM_NFC_OFF (2) /* Set NFC Off bit */
-
-static int gPowerOffMode = POM_NORMAL;
-
-static uint8_t ce3_so_cmd[10] = {
-    0x10, 0x2F, /* CMD */
-    0x08, 0x06, /* size of cmd */
-    0x02,       /* CE3 power-level */
-    0xF3,       /* LpmUicc */
-    0x01,       /* LpmListenTech */
-    0x01,       /* Param */
-    0x00,       /* Forced */
-    0x00        /* Debug */
-};
-
-static uint8_t set_nfc_off_cmd[5] = {
-    0x10, 0x2F, /* CMD */
-    0x38, 0x01, /* size of cmd */
-    0x01        /* setNfcOff */
-};
-
-#include <ctype.h>
-
-#define USING_BRCM_USB TRUE
-
-/* use tc interface to change baudrate instead of close/open sequence which can
- * fail on some platforms
- * due to tx line movement when opeing/closing the UART. the 43xx do not like
- * this. */
-#ifndef USERIAL_USE_TCIO_BAUD_CHANGE
-#define USERIAL_USE_TCIO_BAUD_CHANGE FALSE
-#endif
-
-#ifndef USERIAL_USE_IO_BT_WAKE
-#define USERIAL_USE_IO_BT_WAKE FALSE
-#endif
-
-/* this are the ioctl values used for bt_wake ioctl via UART driver. you may
- * need to redefine at for
- * you platform! Logically they need to be unique and not colide with existing
- * uart ioctl's.
- */
-#ifndef USERIAL_IO_BT_WAKE_ASSERT
-#define USERIAL_IO_BT_WAKE_ASSERT 0x8003
-#endif
-#ifndef USERIAL_IO_BT_WAKE_DEASSERT
-#define USERIAL_IO_BT_WAKE_DEASSERT 0x8004
-#endif
-#ifndef USERIAL_IO_BT_WAKE_GET_ST
-#define USERIAL_IO_BT_WAKE_GET_ST 0x8005
-#endif
-
-/* the read limit in this current implementation depends on the GKI_BUF3_SIZE
- * It would be better to use some ring buffer from the USERIAL_Read() is reading
- * instead of putting it into GKI buffers.
- */
-#define READ_LIMIT (USERIAL_POOL_BUF_SIZE - NFC_HDR_SIZE)
-/*
- * minimum buffer size requirement to read a full sized packet from NFCC = 255 +
- * 4 byte header
- */
-#define MIN_BUFSIZE 259
-#define POLL_TIMEOUT 1000
-/* priority of the reader thread */
-#define USERIAL_READ_TRHEAD_PRIO 90
-/* time (ms) to wait before trying to allocate again a GKI buffer */
-#define NO_GKI_BUFFER_RECOVER_TIME 100
-#define MAX_SERIAL_PORT (USERIAL_PORT_15 + 1)
-
-extern void dumpbin(const char* data, int size);
-extern uint8_t* scru_dump_hex(uint8_t* p, char* p_title, uint32_t len,
-                              uint32_t trace_layer, uint32_t trace_type);
-
-static pthread_t worker_thread1 = 0;
-
-typedef struct {
-  volatile unsigned long bt_wake_state;
-  int sock;
-  tUSERIAL_CBACK* ser_cb;
-  uint16_t baud;
-  uint8_t data_bits;
-  uint16_t parity;
-  uint8_t stop_bits;
-  uint8_t port;
-  tUSERIAL_OPEN_CFG open_cfg;
-  int sock_power_control;
-  int client_device_address;
-  struct timespec write_time;
-} tLINUX_CB;
-
-static tLINUX_CB
-    linux_cb; /* case of multipel port support use array : [MAX_SERIAL_PORT] */
-
-void userial_close_thread(uint32_t params);
-
-static uint8_t device_name[BTE_APPL_MAX_USERIAL_DEV_NAME + 1];
-static int bSerialPortDevice = false;
-static int _timeout = POLL_TIMEOUT;
-static bool is_close_thread_is_waiting = false;
-
-static int change_client_addr(int addr);
-
-int perf_log_every_count = 0;
-typedef struct {
-  const char* label;
-  long lapse;
-  long bytes;
-  long count;
-  long overhead;
-} tPERF_DATA;
-
-/*******************************************************************************
-**
-** Function         perf_reset
-**
-** Description      reset performance measurement data
-**
-** Returns          none
-**
-*******************************************************************************/
-void perf_reset(tPERF_DATA* t) { t->count = t->bytes = t->lapse = 0; }
-
-/*******************************************************************************
-**
-** Function         perf_log
-**
-** Description      produce a log entry of cvurrent performance data
-**
-** Returns          none
-**
-*******************************************************************************/
-void perf_log(tPERF_DATA* t) {
-  // round to nearest ms
-  // t->lapse += 500;
-  // t->lapse /= 1000;
-  if (t->lapse) {
-    if (t->bytes)
-      ALOGD(
-          "%s:%s, bytes=%ld, lapse=%ld (%d.%02d kbps) (bus data rate %d.%02d "
-          "kbps) overhead %d(%d percent)\n",
-          __func__, t->label, t->bytes, t->lapse,
-          (int)(8 * t->bytes / t->lapse),
-          (int)(800 * t->bytes / (t->lapse)) % 100,
-          (int)(9 * (t->bytes + t->count * t->overhead) / t->lapse),
-          (int)(900 * (t->bytes + t->count * t->overhead) / (t->lapse)) % 100,
-          (int)(t->count * t->overhead),
-          (int)(t->count * t->overhead * 100 / t->bytes));
-    else
-      ALOGD("%s:%s, lapse=%ld (average %ld)\n", __func__, t->label, t->lapse,
-            (int)t->lapse / t->count);
-  }
-  perf_reset(t);
-}
-
-/*******************************************************************************
-**
-** Function         perf_update
-**
-** Description      update perforamnce measurement data
-**
-** Returns          none
-**
-*******************************************************************************/
-void perf_update(tPERF_DATA* t, long lapse, long bytes) {
-  if (!perf_log_every_count) return;
-  // round to nearest ms
-  lapse += 500;
-  lapse /= 1000;
-  t->count++;
-  t->bytes += bytes;
-  t->lapse += lapse;
-  if (t->count == perf_log_every_count) perf_log(t);
-}
-
-static tPERF_DATA perf_poll = {"USERIAL_Poll", 0, 0, 0, 0};
-static tPERF_DATA perf_read = {"USERIAL_Read", 0, 0, 0, 9};
-static tPERF_DATA perf_write = {"USERIAL_Write", 0, 0, 0, 3};
-static tPERF_DATA perf_poll_2_poll = {"USERIAL_Poll_to_Poll", 0, 0, 0, 0};
-static clock_t _poll_t0 = 0;
-
-static uint32_t userial_baud_tbl[] = {
-    300,     /* USERIAL_BAUD_300          0 */
-    600,     /* USERIAL_BAUD_600          1 */
-    1200,    /* USERIAL_BAUD_1200         2 */
-    2400,    /* USERIAL_BAUD_2400         3 */
-    9600,    /* USERIAL_BAUD_9600         4 */
-    19200,   /* USERIAL_BAUD_19200        5 */
-    57600,   /* USERIAL_BAUD_57600        6 */
-    115200,  /* USERIAL_BAUD_115200       7 */
-    230400,  /* USERIAL_BAUD_230400       8 */
-    460800,  /* USERIAL_BAUD_460800       9 */
-    921600,  /* USERIAL_BAUD_921600       10 */
-    1000000, /* USERIAL_BAUD_1M           11 */
-    1500000, /* USERIAL_BAUD_1_5M         12 */
-    2000000, /* USERIAL_BAUD_2M           13 */
-    3000000, /* USERIAL_BAUD_3M           14 */
-    4000000  /* USERIAL_BAUD_4M           15 */
-};
-
-/*******************************************************************************
-**
-** Function         wake_state
-**
-** Description      return current state of NFC_WAKE gpio
-**
-** Returns          GPIO value to wake NFCC
-**
-*******************************************************************************/
-static inline int wake_state() {
-  return ((gSnoozeModeCfg.nfc_wake_active_mode == NFC_HAL_LP_ACTIVE_HIGH)
-              ? UPIO_ON
-              : UPIO_OFF);
-}
-
-/*******************************************************************************
-**
-** Function         sleep_state
-**
-** Description      return current state of NFC_WAKE gpio
-**
-** Returns          GPIO value to allow NFCC to goto sleep
-**
-*******************************************************************************/
-static inline int sleep_state() {
-  return ((gSnoozeModeCfg.nfc_wake_active_mode == NFC_HAL_LP_ACTIVE_HIGH)
-              ? UPIO_OFF
-              : UPIO_ON);
-}
-
-/*******************************************************************************
-**
-** Function         isWake
-**
-** Description      return current state of NFC_WAKE gpio based on the active
-*mode setting
-**
-** Returns          asserted_state if it's awake, deasserted_state if it's
-*allowed to sleep
-**
-*******************************************************************************/
-static inline int isWake(int state) {
-  int asserted_state =
-      ((gSnoozeModeCfg.nfc_wake_active_mode == NFC_HAL_LP_ACTIVE_HIGH)
-           ? UPIO_ON
-           : UPIO_OFF);
-  return (state != -1) ? state == asserted_state
-                       : current_nfc_wake_state == asserted_state;
-}
-
-/*******************************************************************************
-**
-** Function           setWriteDelay
-**
-** Description        Record a delay for the next write operation
-**
-** Input Parameter    delay in milliseconds
-**
-** Comments           use this function to register a delay before next write,
-**                    This is used in three instances: power up delay, wake
-*delay
-**                    and write delay
-**
-*******************************************************************************/
-static void setWriteDelay(int delay) {
-  if (delay <= 0) {
-    // Set a minimum delay of 5ms between back-to-back writes
-    delay = 5;
-  }
-
-  clock_gettime(CLOCK_MONOTONIC, &linux_cb.write_time);
-  if (delay > 1000) {
-    linux_cb.write_time.tv_sec += delay / 1000;
-    delay %= 1000;
-  }
-  unsigned long write_delay = delay * 1000 * 1000;
-  linux_cb.write_time.tv_nsec += write_delay;
-  if (linux_cb.write_time.tv_nsec > 1000 * 1000 * 1000) {
-    linux_cb.write_time.tv_nsec -= 1000 * 1000 * 1000;
-    linux_cb.write_time.tv_sec++;
-  }
-}
-
-/*******************************************************************************
-**
-** Function           doWriteDelay
-**
-** Description        Execute a delay as registered in setWriteDelay()
-**
-** Output Parameter   none
-**
-** Returns            none
-**
-** Comments           This function calls GKI_Delay to execute a delay to
-*fulfill
-**                    the delay registered earlier.
-**
-*******************************************************************************/
-static void doWriteDelay() {
-  struct timespec now;
-  clock_gettime(CLOCK_MONOTONIC, &now);
-  long delay = 0;
-
-  if (now.tv_sec > linux_cb.write_time.tv_sec)
-    return;
-  else if (now.tv_sec == linux_cb.write_time.tv_sec) {
-    if (now.tv_nsec > linux_cb.write_time.tv_nsec) return;
-    delay = (linux_cb.write_time.tv_nsec - now.tv_nsec) / 1000000;
-  } else
-    delay = (linux_cb.write_time.tv_sec - now.tv_sec) * 1000 +
-            linux_cb.write_time.tv_nsec / 1000000 - now.tv_nsec / 1000000;
-
-  if (delay > 0 && delay < 1000) {
-    ALOGD_IF((appl_trace_level >= BT_TRACE_LEVEL_DEBUG),
-             "doWriteDelay() delay %ld ms", delay);
-    GKI_delay(delay);
-  }
-}
-
-/*******************************************************************************
-**
-** Function         create_signal_fds
-**
-** Description      create a socketpair for read thread to use
-**
-** Returns          file descriptor
-**
-*******************************************************************************/
-
-static int signal_fds[2];
-static inline int create_signal_fds(struct pollfd* set) {
-  if (signal_fds[0] == 0 &&
-      socketpair(AF_UNIX, SOCK_STREAM, 0, signal_fds) < 0) {
-    ALOGE("%s create_signal_sockets:socketpair failed, errno: %d", __func__,
-          errno);
-    return -1;
-  }
-  set->fd = signal_fds[0];
-  return signal_fds[0];
-}
-
-/*******************************************************************************
-**
-** Function         close_signal_fds
-**
-** Description      close the socketpair
-**
-** Returns          none
-**
-*******************************************************************************/
-static inline void close_signal_fds() {
-  int stat = 0;
-
-  stat = close(signal_fds[0]);
-  if (stat == -1) ALOGE("%s, fail close index 0; errno=%d", __func__, errno);
-  signal_fds[0] = 0;
-
-  stat = close(signal_fds[1]);
-  if (stat == -1) ALOGE("%s, fail close index 1; errno=%d", __func__, errno);
-  signal_fds[1] = 0;
-}
-
-/*******************************************************************************
-**
-** Function         send_wakeup_signal
-**
-** Description      send a one byte data to the socket as signal to the read
-*thread
-**                  for it to stop
-**
-** Returns          number of bytes sent, or error no
-**
-*******************************************************************************/
-static inline int send_wakeup_signal() {
-  char sig_on = 1;
-  ALOGD("%s: Sending signal to %d", __func__, signal_fds[1]);
-  return send(signal_fds[1], &sig_on, sizeof(sig_on), 0);
-}
-
-/*******************************************************************************
-**
-** Function         reset_signal
-**
-** Description      read the one byte data from the socket
-**
-** Returns          received data
-**
-*******************************************************************************/
-static inline int reset_signal() {
-  char sig_recv = 0;
-  ALOGD("%s: Receiving signal from %d", __func__, signal_fds[0]);
-  recv(signal_fds[0], &sig_recv, sizeof(sig_recv), MSG_WAITALL);
-  return (int)sig_recv;
-}
-
-/*******************************************************************************
-**
-** Function         is_signaled
-**
-** Description      test if there's data waiting on the socket
-**
-** Returns          TRUE is data is available
-**
-*******************************************************************************/
-static inline int is_signaled(struct pollfd* set) {
-  return ((set->revents & POLLIN) == POLLIN) ||
-         ((set->revents & POLLRDNORM) == POLLRDNORM);
-}
-
-/******************************************************************************/
-
-typedef unsigned char uchar;
-
-BUFFER_Q Userial_in_q;
-
-/*******************************************************************************
- **
- ** Function           USERIAL_GetLineSpeed
- **
- ** Description        This function convert USERIAL baud to line speed.
- **
- ** Output Parameter   None
- **
- ** Returns            line speed
- **
- *******************************************************************************/
-extern uint32_t USERIAL_GetLineSpeed(uint8_t baud) {
-  return (baud <= USERIAL_BAUD_4M) ? userial_baud_tbl[baud - USERIAL_BAUD_300]
-                                   : 0;
-}
-
-/*******************************************************************************
- **
- ** Function           USERIAL_GetBaud
- **
- ** Description        This function convert line speed to USERIAL baud.
- **
- ** Output Parameter   None
- **
- ** Returns            line speed
- **
- *******************************************************************************/
-extern uint8_t USERIAL_GetBaud(uint32_t line_speed) {
-  uint8_t i;
-  for (i = USERIAL_BAUD_300; i <= USERIAL_BAUD_921600; i++) {
-    if (userial_baud_tbl[i - USERIAL_BAUD_300] == line_speed) return i;
-  }
-
-  return USERIAL_BAUD_AUTO;
-}
-
-/*******************************************************************************
-**
-** Function           USERIAL_Init
-**
-** Description        This function initializes the  serial driver.
-**
-** Output Parameter   None
-**
-** Returns            Nothing
-**
-*******************************************************************************/
-
-void USERIAL_Init(void* p_cfg) {
-  ALOGI(__func__);
-
-  // if userial_close_thread() is waiting to run; let it go first;
-  // let it finish; then continue this function
-  while (true) {
-    pthread_mutex_lock(&close_thread_mutex);
-    if (is_close_thread_is_waiting) {
-      pthread_mutex_unlock(&close_thread_mutex);
-      ALOGI("USERIAL_Init(): wait for close-thread");
-      sleep(1);
-    } else
-      break;
-  }
-
-  memset(&linux_cb, 0, sizeof(linux_cb));
-  linux_cb.sock = -1;
-  linux_cb.ser_cb = NULL;
-  linux_cb.sock_power_control = -1;
-  linux_cb.client_device_address = 0;
-  GKI_init_q(&Userial_in_q);
-  pthread_mutex_unlock(&close_thread_mutex);
-}
-
-/*******************************************************************************
- **
- ** Function           my_read
- **
- ** Description        This function read a packet from driver.
- **
- ** Output Parameter   None
- **
- ** Returns            number of bytes in the packet or error code
- **
- *******************************************************************************/
-int my_read(int fd, uchar* pbuf, int len) {
-  struct pollfd fds[2];
-
-  int n = 0;
-  int ret = 0;
-  int count = 0;
-  int offset = 0;
-  clock_t t1, t2;
-
-  if (!isLowSpeedTransport && _timeout != POLL_TIMEOUT)
-    ALOGD_IF((appl_trace_level >= BT_TRACE_LEVEL_DEBUG),
-             "%s: enter, pbuf=%lx, len = %d\n", __func__, (unsigned long)pbuf,
-             len);
-  memset(pbuf, 0, len);
-  /* need to use select in order to avoid collistion between read and close on
-   * same fd */
-  /* Initialize the input set */
-  fds[0].fd = fd;
-  fds[0].events = POLLIN | POLLERR | POLLRDNORM;
-  fds[0].revents = 0;
-
-  create_signal_fds(&fds[1]);
-  fds[1].events = POLLIN | POLLERR | POLLRDNORM;
-  fds[1].revents = 0;
-  t1 = clock();
-  n = TEMP_FAILURE_RETRY(poll(fds, 2, _timeout));
-  t2 = clock();
-  perf_update(&perf_poll, t2 - t1, 0);
-  if (_poll_t0) perf_update(&perf_poll_2_poll, t2 - _poll_t0, 0);
-
-  _poll_t0 = t2;
-  /* See if there was an error */
-  if (n < 0) {
-    ALOGD("select failed; errno = %d\n", errno);
-    return -errno;
-  } else if (n == 0)
-    return -EAGAIN;
-
-  if (is_signaled(&fds[1])) {
-    ALOGD("%s: exit signal received\n", __func__);
-    reset_signal();
-    return -1;
-  }
-  if (!bSerialPortDevice || len < MIN_BUFSIZE)
-    count = len;
-  else
-    count = 1;
-  do {
-    t2 = clock();
-    ret = TEMP_FAILURE_RETRY(read(fd, pbuf + offset, (size_t)count));
-    if (ret > 0) perf_update(&perf_read, clock() - t2, ret);
-
-    if (ret <= 0 || !bSerialPortDevice || len < MIN_BUFSIZE) break;
-
-    if (isLowSpeedTransport) goto done;
-
-    if (offset == 0) {
-      if (pbuf[offset] == HCIT_TYPE_NFC)
-        count = 3;
-      else if (pbuf[offset] == HCIT_TYPE_EVENT)
-        count = 2;
-      else {
-        ALOGD("%s: unknown HCIT type header pbuf[%d] = %x\n", __func__, offset,
-              pbuf[offset]);
-        break;
-      }
-      offset = 1;
-    } else if (offset == 1) {
-      offset += count;
-      count = pbuf[offset - 1];
-      if (count > (len - offset))  // if (count > (remaining buffer size))
-        count =
-            len - offset;  // only read what the remaining buffer size can hold
-    } else {
-      offset += ret;
-      count -= ret;
-    }
-    if (count == 0) {
-      ret = offset;
-      break;
-    }
-  } while (count > 0);
-
-#if VALIDATE_PACKET
-  /*
-   * vallidate the packet structure
-   */
-  if (ret > 0 && len >= MIN_BUFSIZE) {
-    count = 0;
-    while (count < ret) {
-      if (pbuf[count] == HCIT_TYPE_NFC) {
-        if (USERIAL_Debug_verbose)
-          scru_dump_hex(pbuf + count, NULL, pbuf[count + 3] + 4, 0, 0);
-        count += pbuf[count + 3] + 4;
-      } else if (pbuf[count] == HCIT_TYPE_EVENT) {
-        if (USERIAL_Debug_verbose)
-          scru_dump_hex(pbuf + count, NULL, pbuf[count + 2] + 3, 0, 0);
-        count += pbuf[count + 2] + 3;
-      } else {
-        ALOGD("%s: unknown HCIT type header pbuf[%d] = %x, remain %d bytes\n",
-              __func__, count, pbuf[count], ret - count);
-        scru_dump_hex(pbuf + count, NULL, ret - count, 0, 0);
-        break;
-      }
-    } /* while*/
-  }
-#endif
-done:
-  if (!isLowSpeedTransport)
-    ALOGD_IF((appl_trace_level >= BT_TRACE_LEVEL_DEBUG),
-             "%s: return %d(0x%x) bytes, errno=%d count=%d, n=%d, timeout=%d\n",
-             __func__, ret, ret, errno, count, n, _timeout);
-  if (_timeout == POLL_TIMEOUT) _timeout = -1;
-  return ret;
-}
-extern bool gki_chk_buf_damage(void* p_buf);
-static int sRxLength = 0;
-
-/*******************************************************************************
- **
- ** Function           userial_read_thread
- **
- ** Description        entry point of read thread.
- **
- ** Output Parameter   None
- **
- ** Returns            0
- **
- *******************************************************************************/
-uint32_t userial_read_thread(uint32_t arg) {
-  int rx_length;
-  int error_count = 0;
-  int bErrorReported = 0;
-  int iMaxError = MAX_ERROR;
-  NFC_HDR* p_buf = NULL;
-
-  worker_thread1 = pthread_self();
-
-  ALOGD("start userial_read_thread, id=%lx", worker_thread1);
-  _timeout = POLL_TIMEOUT;
-
-  for (; linux_cb.sock > 0;) {
-    NFC_HDR* p_buf;
-    uint8_t* current_packet;
-
-    p_buf = (NFC_HDR*)GKI_getpoolbuf(USERIAL_POOL_ID);
-    if (p_buf != NULL) {
-      p_buf->offset = 0;
-      p_buf->layer_specific = 0;
-
-      current_packet = (uint8_t*)(p_buf + 1);
-      rx_length = my_read(linux_cb.sock, current_packet, READ_LIMIT);
-
-    } else {
-      ALOGE(
-          "userial_read_thread(): unable to get buffer from GKI p_buf = %p "
-          "poolid = %d\n",
-          p_buf, USERIAL_POOL_ID);
-      rx_length = 0; /* paranoia setting */
-      GKI_delay(NO_GKI_BUFFER_RECOVER_TIME);
-      continue;
-    }
-    if (rx_length > 0) {
-      bErrorReported = 0;
-      error_count = 0;
-      iMaxError = 3;
-      if (rx_length > sRxLength) sRxLength = rx_length;
-      p_buf->len = (uint16_t)rx_length;
-      GKI_enqueue(&Userial_in_q, p_buf);
-      if (!isLowSpeedTransport)
-        ALOGD_IF(
-            (appl_trace_level >= BT_TRACE_LEVEL_DEBUG),
-            "userial_read_thread(): enqueued p_buf=%p, count=%d, length=%d\n",
-            p_buf, Userial_in_q.count, rx_length);
-
-      if (linux_cb.ser_cb != NULL)
-        (*linux_cb.ser_cb)(linux_cb.port, USERIAL_RX_READY_EVT,
-                           (tUSERIAL_EVT_DATA*)p_buf);
-
-      GKI_send_event(USERIAL_HAL_TASK, HCISU_EVT);
-    } else {
-      GKI_freebuf(p_buf);
-      if (rx_length == -EAGAIN)
-        continue;
-      else if (rx_length == -1) {
-        ALOGD("userial_read_thread(): exiting\n");
-        break;
-      } else if (rx_length == 0 && !isWake(-1))
-        continue;
-      ++error_count;
-      if (rx_length <= 0 &&
-          ((error_count > 0) && ((error_count % iMaxError) == 0))) {
-        if (bErrorReported == 0) {
-          ALOGE(
-              "userial_read_thread(): my_read returned (%d) error count = %d, "
-              "errno=%d return USERIAL_ERR_EVT\n",
-              rx_length, error_count, errno);
-          if (linux_cb.ser_cb != NULL)
-            (*linux_cb.ser_cb)(linux_cb.port, USERIAL_ERR_EVT,
-                               (tUSERIAL_EVT_DATA*)p_buf);
-
-          GKI_send_event(USERIAL_HAL_TASK, HCISU_EVT);
-          ++bErrorReported;
-        }
-        if (sRxLength == 0) {
-          ALOGE(
-              "userial_read_thread(): my_read returned (%d) error count = %d, "
-              "errno=%d exit read thread\n",
-              rx_length, error_count, errno);
-          break;
-        }
-      }
-    }
-  } /* for */
-
-  ALOGD("userial_read_thread(): freeing GKI_buffers\n");
-  while ((p_buf = (NFC_HDR*)GKI_dequeue(&Userial_in_q)) != NULL) {
-    GKI_freebuf(p_buf);
-    ALOGD("userial_read_thread: dequeued buffer from Userial_in_q\n");
-  }
-
-  GKI_exit_task(GKI_get_taskid());
-  ALOGD("USERIAL READ: EXITING TASK\n");
-
-  return 0;
-}
-
-/*******************************************************************************
- **
- ** Function           userial_to_tcio_baud
- **
- ** Description        helper function converts USERIAL baud rates into TCIO
- *conforming baud rates
- **
- ** Output Parameter   None
- **
- ** Returns            TRUE - success
- **                    FALSE - unsupported baud rate, default of 115200 is used
- **
- *******************************************************************************/
-bool userial_to_tcio_baud(uint8_t cfg_baud, uint32_t* baud) {
-  if (cfg_baud == USERIAL_BAUD_600)
-    *baud = B600;
-  else if (cfg_baud == USERIAL_BAUD_1200)
-    *baud = B1200;
-  else if (cfg_baud == USERIAL_BAUD_9600)
-    *baud = B9600;
-  else if (cfg_baud == USERIAL_BAUD_19200)
-    *baud = B19200;
-  else if (cfg_baud == USERIAL_BAUD_57600)
-    *baud = B57600;
-  else if (cfg_baud == USERIAL_BAUD_115200)
-    *baud = B115200 | CBAUDEX;
-  else if (cfg_baud == USERIAL_BAUD_230400)
-    *baud = B230400;
-  else if (cfg_baud == USERIAL_BAUD_460800)
-    *baud = B460800;
-  else if (cfg_baud == USERIAL_BAUD_921600)
-    *baud = B921600;
-  else if (cfg_baud == USERIAL_BAUD_1M)
-    *baud = B1000000;
-  else if (cfg_baud == USERIAL_BAUD_2M)
-    *baud = B2000000;
-  else if (cfg_baud == USERIAL_BAUD_3M)
-    *baud = B3000000;
-  else if (cfg_baud == USERIAL_BAUD_4M)
-    *baud = B4000000;
-  else {
-    ALOGE("userial_to_tcio_baud: unsupported baud idx %i", cfg_baud);
-    *baud = B115200;
-    return false;
-  }
-  return true;
-}
-
-#if (USERIAL_USE_IO_BT_WAKE == TRUE)
-/*******************************************************************************
- **
- ** Function           userial_io_init_bt_wake
- **
- ** Description        helper function to set the open state of the bt_wake if
- *ioctl
- **                    is used. it should not hurt in the rfkill case but it
- *might
- **                    be better to compile it out.
- **
- ** Returns            none
- **
- *******************************************************************************/
-void userial_io_init_bt_wake(int fd, unsigned long* p_wake_state) {
-  /* assert BT_WAKE for ioctl. should NOT hurt on rfkill version */
-  ioctl(fd, USERIAL_IO_BT_WAKE_ASSERT, NULL);
-  ioctl(fd, USERIAL_IO_BT_WAKE_GET_ST, p_wake_state);
-  if (*p_wake_state == 0)
-    ALOGI(
-        "\n***userial_io_init_bt_wake(): Ooops, asserted BT_WAKE signal, but "
-        "still got BT_WAKE state == to %d\n",
-        *p_wake_state);
-
-  *p_wake_state = 1;
-}
-#endif
-
-/*******************************************************************************
-**
-** Function           USERIAL_Open
-**
-** Description        Open the indicated serial port with the given
-*configuration
-**
-** Output Parameter   None
-**
-** Returns            Nothing
-**
-*******************************************************************************/
-void USERIAL_Open(tUSERIAL_PORT port, tUSERIAL_OPEN_CFG* p_cfg,
-                  tUSERIAL_CBACK* p_cback) {
-  uint32_t baud = 0;
-  uint8_t data_bits = 0;
-  uint16_t parity = 0;
-  uint8_t stop_bits = 0;
-  struct termios termios;
-  const char ttyusb[] = "/dev/ttyUSB";
-  const char devtty[] = "/dev/tty";
-  unsigned long num = 0;
-  int ret = 0;
-
-  ALOGI("USERIAL_Open(): enter");
-
-  // if userial_close_thread() is waiting to run; let it go first;
-  // let it finish; then continue this function
-  while (true) {
-    pthread_mutex_lock(&close_thread_mutex);
-    if (is_close_thread_is_waiting) {
-      pthread_mutex_unlock(&close_thread_mutex);
-      ALOGI("USERIAL_Open(): wait for close-thread");
-      sleep(1);
-    } else
-      break;
-  }
-
-  // restore default power off delay settings incase they were changed in
-  // userial_set_poweroff_delays()
-  gPrePowerOffDelay = 0;
-  gPostPowerOffDelay = 0;
-
-  if (!GetStrValue(NAME_TRANSPORT_DRIVER, userial_dev, sizeof(userial_dev)))
-    strcpy(userial_dev, default_transport);
-  if (GetNumValue(NAME_UART_PORT, &num, sizeof(num))) uart_port = num;
-  if (GetNumValue(NAME_LOW_SPEED_TRANSPORT, &num, sizeof(num)))
-    isLowSpeedTransport = num;
-  if (GetNumValue(NAME_NFC_WAKE_DELAY, &num, sizeof(num))) nfc_wake_delay = num;
-  if (GetNumValue(NAME_NFC_WRITE_DELAY, &num, sizeof(num)))
-    nfc_write_delay = num;
-  if (GetNumValue(NAME_PERF_MEASURE_FREQ, &num, sizeof(num)))
-    perf_log_every_count = num;
-  if (GetNumValue(NAME_POWER_ON_DELAY, &num, sizeof(num))) gPowerOnDelay = num;
-  if (GetNumValue(NAME_PRE_POWER_OFF_DELAY, &num, sizeof(num)))
-    gPrePowerOffDelay = num;
-  if (GetNumValue(NAME_POST_POWER_OFF_DELAY, &num, sizeof(num)))
-    gPostPowerOffDelay = num;
-  if (GetNumValue(NAME_POWER_OFF_MODE, &num, sizeof(num))) gPowerOffMode = num;
-  ALOGI(
-      "USERIAL_Open() device: %s port=%d, uart_port=%d WAKE_DELAY(%d) "
-      "WRITE_DELAY(%d) POWER_ON_DELAY(%d) PRE_POWER_OFF_DELAY(%d) "
-      "POST_POWER_OFF_DELAY(%d)",
-      (char*)userial_dev, port, uart_port, nfc_wake_delay, nfc_write_delay,
-      gPowerOnDelay, gPrePowerOffDelay, gPostPowerOffDelay);
-
-  strcpy((char*)device_name, (char*)userial_dev);
-  sRxLength = 0;
-  _poll_t0 = 0;
-
-  if ((strncmp(userial_dev, ttyusb, sizeof(ttyusb) - 1) == 0) ||
-      (strncmp(userial_dev, devtty, sizeof(devtty) - 1) == 0)) {
-    if (uart_port >= MAX_SERIAL_PORT) {
-      ALOGD("Port > MAX_SERIAL_PORT\n");
-      goto done_open;
-    }
-    bSerialPortDevice = true;
-    sprintf((char*)device_name, "%s%d", (char*)userial_dev, uart_port);
-    ALOGI("USERIAL_Open() using device_name: %s ", (char*)device_name);
-    if (!userial_to_tcio_baud(p_cfg->baud, &baud)) goto done_open;
-
-    if (p_cfg->fmt & USERIAL_DATABITS_8)
-      data_bits = CS8;
-    else if (p_cfg->fmt & USERIAL_DATABITS_7)
-      data_bits = CS7;
-    else if (p_cfg->fmt & USERIAL_DATABITS_6)
-      data_bits = CS6;
-    else if (p_cfg->fmt & USERIAL_DATABITS_5)
-      data_bits = CS5;
-    else
-      goto done_open;
-
-    if (p_cfg->fmt & USERIAL_PARITY_NONE)
-      parity = 0;
-    else if (p_cfg->fmt & USERIAL_PARITY_EVEN)
-      parity = PARENB;
-    else if (p_cfg->fmt & USERIAL_PARITY_ODD)
-      parity = (PARENB | PARODD);
-    else
-      goto done_open;
-
-    if (p_cfg->fmt & USERIAL_STOPBITS_1)
-      stop_bits = 0;
-    else if (p_cfg->fmt & USERIAL_STOPBITS_2)
-      stop_bits = CSTOPB;
-    else
-      goto done_open;
-  } else
-    strcpy((char*)device_name, (char*)userial_dev);
-
-  {
-    ALOGD("%s Opening %s\n", __func__, device_name);
-    linux_cb.sock = open((char*)device_name, O_RDWR | O_NOCTTY);
-    if (linux_cb.sock == -1) {
-      ALOGI("%s unable to open %s", __func__, device_name);
-      GKI_send_event(NFC_HAL_TASK, NFC_HAL_TASK_EVT_TERMINATE);
-      goto done_open;
-    }
-    ALOGD("%s sock = %d\n", __func__, linux_cb.sock);
-    if (GetStrValue(NAME_POWER_CONTROL_DRIVER, power_control_dev,
-                    sizeof(power_control_dev)) &&
-        power_control_dev[0] != '\0') {
-      if (strcmp(power_control_dev, userial_dev) == 0)
-        linux_cb.sock_power_control = linux_cb.sock;
-      else {
-        linux_cb.sock_power_control =
-            open((char*)power_control_dev, O_RDWR | O_NOCTTY);
-        if (linux_cb.sock_power_control == -1) {
-          ALOGI("%s unable to open %s", __func__, power_control_dev);
-        }
-      }
-    }
-    if (bSerialPortDevice) {
-      tcflush(linux_cb.sock, TCIOFLUSH);
-      tcgetattr(linux_cb.sock, &termios);
-
-      termios.c_cflag &= ~(CSIZE | PARENB);
-      termios.c_cflag = CLOCAL | CREAD | data_bits | stop_bits | parity;
-      if (!parity) termios.c_cflag |= IGNPAR;
-      // termios.c_cflag &= ~CRTSCTS;
-      termios.c_oflag = 0;
-      termios.c_lflag &= ~(ECHO | ECHONL | ICANON | IEXTEN | ISIG);
-      termios.c_iflag &=
-          ~(BRKINT | ICRNL | INLCR | ISTRIP | IXON | IGNBRK | PARMRK | INPCK);
-      termios.c_lflag = 0;
-      termios.c_iflag = 0;
-      cfsetospeed(&termios, baud);
-      cfsetispeed(&termios, baud);
-
-      termios.c_cc[VTIME] = 0;
-      termios.c_cc[VMIN] = 1;
-      tcsetattr(linux_cb.sock, TCSANOW, &termios);
-
-      tcflush(linux_cb.sock, TCIOFLUSH);
-
-#if (USERIAL_USE_IO_BT_WAKE == TRUE)
-      userial_io_init_bt_wake(linux_cb.sock, &linux_cb.bt_wake_state);
-#endif
-      GKI_delay(gPowerOnDelay);
-    } else {
-      USERIAL_PowerupDevice(port);
-    }
-  }
-
-  linux_cb.ser_cb = p_cback;
-  linux_cb.port = port;
-  memcpy(&linux_cb.open_cfg, p_cfg, sizeof(tUSERIAL_OPEN_CFG));
-  GKI_create_task((TASKPTR)userial_read_thread, USERIAL_HAL_TASK,
-                  (int8_t*)"USERIAL_HAL_TASK", 0, 0, (pthread_cond_t*)NULL,
-                  NULL);
-
-#if (USERIAL_DEBUG == TRUE)
-  ALOGD("Leaving USERIAL_Open\n");
-#endif
-
-#if (SERIAL_AMBA == TRUE)
-  /* give 20ms time for reader thread */
-  GKI_delay(20);
-#endif
-
-done_open:
-  pthread_mutex_unlock(&close_thread_mutex);
-  ALOGI("USERIAL_Open(): exit");
-  return;
-}
-
-/*******************************************************************************
-**
-** Function           USERIAL_Read
-**
-** Description        Read data from a serial port using byte buffers.
-**
-** Output Parameter   None
-**
-** Returns            Number of bytes actually read from the serial port and
-**                    copied into p_data.  This may be less than len.
-**
-*******************************************************************************/
-
-static NFC_HDR* pbuf_USERIAL_Read = NULL;
-
-uint16_t USERIAL_Read(tUSERIAL_PORT port, uint8_t* p_data, uint16_t len) {
-  uint16_t total_len = 0;
-  uint16_t copy_len = 0;
-  uint8_t* current_packet = NULL;
-
-#if (USERIAL_DEBUG == TRUE)
-  ALOGD("%s ++ len=%d pbuf_USERIAL_Read=%p, p_data=%p\n", __func__, len,
-        pbuf_USERIAL_Read, p_data);
-#endif
-  do {
-    if (pbuf_USERIAL_Read != NULL) {
-      current_packet =
-          ((uint8_t*)(pbuf_USERIAL_Read + 1)) + (pbuf_USERIAL_Read->offset);
-
-      if ((pbuf_USERIAL_Read->len) <= (len - total_len))
-        copy_len = pbuf_USERIAL_Read->len;
-      else
-        copy_len = (len - total_len);
-
-      memcpy((p_data + total_len), current_packet, copy_len);
-
-      total_len += copy_len;
-
-      pbuf_USERIAL_Read->offset += copy_len;
-      pbuf_USERIAL_Read->len -= copy_len;
-
-      if (pbuf_USERIAL_Read->len == 0) {
-        GKI_freebuf(pbuf_USERIAL_Read);
-        pbuf_USERIAL_Read = NULL;
-      }
-    }
-
-    if (pbuf_USERIAL_Read == NULL && (total_len < len))
-      pbuf_USERIAL_Read = (NFC_HDR*)GKI_dequeue(&Userial_in_q);
-
-  } while ((pbuf_USERIAL_Read != NULL) && (total_len < len));
-
-#if (USERIAL_DEBUG == TRUE)
-  ALOGD("%s: returned %d bytes", __func__, total_len);
-#endif
-  return total_len;
-}
-
-/*******************************************************************************
-**
-** Function           USERIAL_Readbuf
-**
-** Description        Read data from a serial port using GKI buffers.
-**
-** Output Parameter   Pointer to a GKI buffer which contains the data.
-**
-** Returns            Nothing
-**
-** Comments           The caller of this function is responsible for freeing the
-**                    GKI buffer when it is finished with the data.  If there is
-**                    no data to be read, the value of the returned pointer is
-**                    NULL.
-**
-*******************************************************************************/
-
-void USERIAL_ReadBuf(tUSERIAL_PORT port, NFC_HDR** p_buf) {}
-
-/*******************************************************************************
-**
-** Function           USERIAL_WriteBuf
-**
-** Description        Write data to a serial port using a GKI buffer.
-**
-** Output Parameter   None
-**
-** Returns            TRUE  if buffer accepted for write.
-**                    FALSE if there is already a buffer being processed.
-**
-** Comments           The buffer will be freed by the serial driver.  Therefore,
-**                    the application calling this function must not free the
-**                    buffer.
-**
-*******************************************************************************/
-
-bool USERIAL_WriteBuf(tUSERIAL_PORT port, NFC_HDR* p_buf) { return false; }
-
-/*******************************************************************************
-**
-** Function           USERIAL_Write
-**
-** Description        Write data to a serial port using a byte buffer.
-**
-** Output Parameter   None
-**
-** Returns            Number of bytes actually written to the transport.  This
-**                    may be less than len.
-**
-*******************************************************************************/
-uint16_t USERIAL_Write(tUSERIAL_PORT port, uint8_t* p_data, uint16_t len) {
-  int ret = 0, total = 0;
-  int i = 0;
-  clock_t t;
-
-  ALOGD_IF((appl_trace_level >= BT_TRACE_LEVEL_DEBUG),
-           "USERIAL_Write: (%d bytes)", len);
-  pthread_mutex_lock(&close_thread_mutex);
-
-  doWriteDelay();
-  t = clock();
-  while (len != 0 && linux_cb.sock != -1) {
-    ret = TEMP_FAILURE_RETRY(write(linux_cb.sock, p_data + total, len));
-    if (ret < 0) {
-      ALOGE("USERIAL_Write len = %d, ret = %d, errno = %d", len, ret, errno);
-      break;
-    } else {
-      ALOGD_IF((appl_trace_level >= BT_TRACE_LEVEL_DEBUG),
-               "USERIAL_Write len = %d, ret = %d", len, ret);
-    }
-
-    total += ret;
-    len -= ret;
-  }
-  perf_update(&perf_write, clock() - t, total);
-
-  /* register a delay for next write */
-  setWriteDelay(total * nfc_write_delay / 1000);
-
-  pthread_mutex_unlock(&close_thread_mutex);
-
-  return ((uint16_t)total);
-}
-
-/*******************************************************************************
-**
-** Function           userial_change_rate
-**
-** Description        change naud rate
-**
-** Output Parameter   None
-**
-** Returns            None
-**
-*******************************************************************************/
-void userial_change_rate(uint8_t baud) {
-#if (USING_BRCM_USB == FALSE)
-  struct termios termios;
-#endif
-#if (USERIAL_USE_TCIO_BAUD_CHANGE == TRUE)
-  uint32_t tcio_baud;
-#endif
-
-#if (USING_BRCM_USB == FALSE)
-  tcflush(linux_cb.sock, TCIOFLUSH);
-
-  tcgetattr(linux_cb.sock, &termios);
-
-  cfmakeraw(&termios);
-  cfsetospeed(&termios, baud);
-  cfsetispeed(&termios, baud);
-
-  termios.c_cflag |= (CLOCAL | CREAD | CRTSCTS | stop_bits);
-
-  tcsetattr(linux_cb.sock, TCSANOW, &termios);
-  tcflush(linux_cb.sock, TCIOFLUSH);
-
-#else
-#if (USERIAL_USE_TCIO_BAUD_CHANGE == FALSE)
-  fprintf(stderr, "userial_change_rate: Closing UART Port\n");
-  ALOGI("userial_change_rate: Closing UART Port\n");
-  USERIAL_Close(linux_cb.port);
-
-  GKI_delay(50);
-
-  /* change baud rate in settings - leave everything else the same  */
-  linux_cb.open_cfg.baud = baud;
-
-  ALOGD("userial_change_rate: Attempting to reopen the UART Port at 0x%08x\n",
-        (unsigned int)USERIAL_GetLineSpeed(baud));
-  ALOGI("userial_change_rate: Attempting to reopen the UART Port at %i\n",
-        (unsigned int)USERIAL_GetLineSpeed(baud));
-
-  USERIAL_Open(linux_cb.port, &linux_cb.open_cfg, linux_cb.ser_cb);
-#else /* amba uart */
-  fprintf(stderr, "userial_change_rate(): changeing baud rate via TCIO \n");
-  ALOGI("userial_change_rate: (): changeing baud rate via TCIO \n");
-  /* change baud rate in settings - leave everything else the same  */
-  linux_cb.open_cfg.baud = baud;
-  if (!userial_to_tcio_baud(linux_cb.open_cfg.baud, &tcio_baud)) return;
-
-  tcflush(linux_cb.sock, TCIOFLUSH);
-
-  /* get current settings. they should be fine besides baud rate we want to
-   * change */
-  tcgetattr(linux_cb.sock, &termios);
-
-  /* set input/output baudrate */
-  cfsetospeed(&termios, tcio_baud);
-  cfsetispeed(&termios, tcio_baud);
-  tcsetattr(linux_cb.sock, TCSANOW, &termios);
-
-  tcflush(linux_cb.sock, TCIOFLUSH);
-#endif
-#endif /* USING_BRCM_USB  */
-}
-
-/*******************************************************************************
-**
-** Function           userial_close_port
-**
-** Description        close the transport driver
-**
-** Returns            Nothing
-**
-*******************************************************************************/
-void userial_close_port(void) { USERIAL_Close(linux_cb.port); }
-
-/*******************************************************************************
-**
-** Function           USERIAL_Ioctl
-**
-** Description        Perform an operation on a serial port.
-**
-** Output Parameter   The p_data parameter is either an input or output
-*depending
-**                    on the operation.
-**
-** Returns            Nothing
-**
-*******************************************************************************/
-
-void USERIAL_Ioctl(tUSERIAL_PORT port, tUSERIAL_OP op,
-                   tUSERIAL_IOCTL_DATA* p_data) {
-#if (defined(LINUX_OS) && LINUX_OS == TRUE)
-  USB_SCO_CONTROL ioctl_data;
-
-/* just ignore port parameter as we are using USB in this case  */
-#endif
-
-  switch (op) {
-    case USERIAL_OP_FLUSH:
-      break;
-    case USERIAL_OP_FLUSH_RX:
-      break;
-    case USERIAL_OP_FLUSH_TX:
-      break;
-    case USERIAL_OP_BAUD_WR:
-      ALOGI(
-          "USERIAL_Ioctl: Received USERIAL_OP_BAUD_WR on port: %d, ioctl "
-          "baud%i\n",
-          port, p_data->baud);
-      linux_cb.port = port;
-      userial_change_rate(p_data->baud);
-      break;
-
-    default:
-      break;
-  }
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         USERIAL_SetPowerOffDelays
-**
-** Description      Set power off delays used during USERIAL_Close().  The
-**                  values in the conf. file setting override these if set.
-**
-** Returns          None.
-**
-*******************************************************************************/
-void USERIAL_SetPowerOffDelays(int pre_poweroff_delay,
-                               int post_poweroff_delay) {
-  gPrePowerOffDelay = pre_poweroff_delay;
-  gPostPowerOffDelay = post_poweroff_delay;
-}
-
-/*******************************************************************************
-**
-** Function           USERIAL_Close
-**
-** Description        Close a serial port
-**
-** Output Parameter   None
-**
-** Returns            Nothing
-**
-*******************************************************************************/
-void USERIAL_Close(tUSERIAL_PORT port) {
-  pthread_attr_t attr;
-  pthread_t close_thread;
-  uint8_t res[10];
-  uint32_t delay = 100;
-
-  ALOGD("%s: enter; gPowerOffMode=%d", __func__, gPowerOffMode);
-
-  /* Do we need to put NFCC into certain mode before switching off?... */
-  if (gPowerOffMode != POM_NORMAL) {
-    switch (gPowerOffMode) {
-      case POM_CE3SO:
-        ALOGD("%s: Sending Set_PwrLevel cmd to go to CE3-SO mode", __func__);
-        USERIAL_Write(port, ce3_so_cmd, sizeof(ce3_so_cmd));
-        delay = 1000;
-        break;
-
-      case POM_NFC_OFF:
-        ALOGD("%s: Sending Set_NfcOff cmd", __func__);
-        USERIAL_Write(port, set_nfc_off_cmd, sizeof(set_nfc_off_cmd));
-        break;
-    }
-
-    USERIAL_Read(port, res, sizeof(res));
-    GKI_delay(delay);
-  }
-
-  // check to see if thread is already running
-  if (pthread_mutex_trylock(&close_thread_mutex) == 0) {
-    // mutex aquired so thread is not running
-    is_close_thread_is_waiting = TRUE;
-    pthread_mutex_unlock(&close_thread_mutex);
-
-    // close transport in a new thread so we don't block the caller
-    // make thread detached, no other thread will join
-    pthread_attr_init(&attr);
-    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
-    pthread_create(&close_thread, &attr, (void*)userial_close_thread, NULL);
-    pthread_attr_destroy(&attr);
-  } else {
-    // mutex not aquired to thread is already running
-    ALOGD("USERIAL_Close(): already closing \n");
-  }
-  ALOGD("%s: exit", __func__);
-}
-
-/*******************************************************************************
-**
-** Function         userial_close_thread
-**
-** Description      Thread to close USERIAL
-**
-** Returns          None.
-**
-*******************************************************************************/
-void userial_close_thread(uint32_t params) {
-  NFC_HDR* p_buf = NULL;
-  int result;
-
-  ALOGD("%s: closing transport (%d)\n", __func__, linux_cb.sock);
-  pthread_mutex_lock(&close_thread_mutex);
-  is_close_thread_is_waiting = false;
-
-  if (linux_cb.sock <= 0) {
-    ALOGD("%s: already closed (%d)\n", __func__, linux_cb.sock);
-    pthread_mutex_unlock(&close_thread_mutex);
-    return;
-  }
-
-  send_wakeup_signal();
-  result = pthread_join(worker_thread1, NULL);
-  if (result < 0)
-    ALOGE("%s: pthread_join() FAILED: result: %d", __func__, result);
-  else
-    ALOGD("%s: pthread_join() joined: result: %d", __func__, result);
-
-  if (linux_cb.sock_power_control > 0) {
-    result = ioctl(linux_cb.sock_power_control, BCMNFC_WAKE_CTL, sleep_state());
-    ALOGD("%s: Delay %dms before turning off the chip", __func__,
-          gPrePowerOffDelay);
-    GKI_delay(gPrePowerOffDelay);
-    result = ioctl(linux_cb.sock_power_control, BCMNFC_POWER_CTL, 0);
-    ALOGD("%s: Delay %dms after turning off the chip", __func__,
-          gPostPowerOffDelay);
-    GKI_delay(gPostPowerOffDelay);
-  }
-  result = close(linux_cb.sock);
-  if (result == -1)
-    ALOGE("%s: fail close linux_cb.sock; errno=%d", __func__, errno);
-
-  if (linux_cb.sock_power_control > 0 &&
-      linux_cb.sock_power_control != linux_cb.sock)
-    result = close(linux_cb.sock_power_control);
-  if (result == -1)
-    ALOGE("%s: fail close linux_cb.sock_power_control; errno=%d", __func__,
-          errno);
-
-  linux_cb.sock_power_control = -1;
-  linux_cb.sock = -1;
-
-  close_signal_fds();
-  pthread_mutex_unlock(&close_thread_mutex);
-  ALOGD("%s: exiting", __func__);
-}
-
-/*******************************************************************************
-**
-** Function           USERIAL_Feature
-**
-** Description        Check whether a feature of the serial API is supported.
-**
-** Output Parameter   None
-**
-** Returns            TRUE  if the feature is supported
-**                    FALSE if the feature is not supported
-**
-*******************************************************************************/
-
-bool USERIAL_Feature(tUSERIAL_FEATURE feature) {
-  switch (feature) {
-    case USERIAL_FEAT_PORT_1:
-    case USERIAL_FEAT_PORT_2:
-    case USERIAL_FEAT_PORT_3:
-    case USERIAL_FEAT_PORT_4:
-
-    case USERIAL_FEAT_BAUD_600:
-    case USERIAL_FEAT_BAUD_1200:
-    case USERIAL_FEAT_BAUD_9600:
-    case USERIAL_FEAT_BAUD_19200:
-    case USERIAL_FEAT_BAUD_57600:
-    case USERIAL_FEAT_BAUD_115200:
-
-    case USERIAL_FEAT_STOPBITS_1:
-    case USERIAL_FEAT_STOPBITS_2:
-
-    case USERIAL_FEAT_PARITY_NONE:
-    case USERIAL_FEAT_PARITY_EVEN:
-    case USERIAL_FEAT_PARITY_ODD:
-
-    case USERIAL_FEAT_DATABITS_5:
-    case USERIAL_FEAT_DATABITS_6:
-    case USERIAL_FEAT_DATABITS_7:
-    case USERIAL_FEAT_DATABITS_8:
-
-    case USERIAL_FEAT_FC_HW:
-    case USERIAL_FEAT_BUF_BYTE:
-
-    case USERIAL_FEAT_OP_FLUSH_RX:
-    case USERIAL_FEAT_OP_FLUSH_TX:
-      return true;
-    default:
-      return false;
-  }
-
-  return false;
-}
-
-/*****************************************************************************
-**
-** Function         UPIO_Set
-**
-** Description
-**      This function sets one or more GPIO devices to the given state.
-**      Multiple GPIOs of the same type can be masked together to set more
-**      than one GPIO. This function can only be used on types UPIO_LED and
-**      UPIO_GENERAL.
-**
-** Input Parameters:
-**      type    The type of device.
-**      pio     Indicates the particular GPIOs.
-**      state   The desired state.
-**
-** Output Parameter:
-**      None.
-**
-** Returns:
-**      None.
-**
-*****************************************************************************/
-void UPIO_Set(tUPIO_TYPE type, tUPIO pio, tUPIO_STATE new_state) {
-  int ret;
-  if (type == UPIO_GENERAL) {
-    if (pio == NFC_HAL_LP_NFC_WAKE_GPIO) {
-      if (new_state == UPIO_ON || new_state == UPIO_OFF) {
-        if (linux_cb.sock_power_control > 0) {
-          ALOGD("%s: ioctl, state=%d", __func__, new_state);
-          ret = ioctl(linux_cb.sock_power_control, BCMNFC_WAKE_CTL, new_state);
-          if (isWake(new_state) && nfc_wake_delay > 0 &&
-              new_state != current_nfc_wake_state) {
-            ALOGD("%s: ioctl, old state=%d, insert delay for %d ms", __func__,
-                  current_nfc_wake_state, nfc_wake_delay);
-            setWriteDelay(nfc_wake_delay);
-          }
-          current_nfc_wake_state = new_state;
-        }
-      }
-    }
-  }
-}
-
-/*****************************************************************************
-**
-** Function         setReadPacketSize
-**
-** Description
-**      This function sets the packetSize to the driver.
-**      this enables faster read operation of NCI/HCI responses
-**
-** Input Parameters:
-**      len     number of bytes to read per operation.
-**
-** Output Parameter:
-**      None.
-**
-** Returns:
-**      None.
-**
-*****************************************************************************/
-void setReadPacketSize(int len) {
-  int ret;
-  ALOGD("%s: ioctl, len=%d", __func__, len);
-  ret = ioctl(linux_cb.sock, BCMNFC_READ_FULL_PACKET, len);
-}
-
-bool USERIAL_IsClosed() { return (linux_cb.sock == -1) ? true : false; }
-
-void USERIAL_PowerupDevice(tUSERIAL_PORT port) {
-  int ret = -1;
-  unsigned long num = 0;
-  unsigned int resetSuccess = 0;
-  unsigned int numTries = 0;
-  unsigned char spi_negotiation[64];
-  int delay = gPowerOnDelay;
-  ALOGD("%s: enter", __func__);
-
-  if (GetNumValue(NAME_READ_MULTI_PACKETS, &num, sizeof(num)))
-    bcmi2cnfc_read_multi_packets = num;
-
-  if (bcmi2cnfc_read_multi_packets > 0)
-    ioctl(linux_cb.sock, BCMNFC_READ_MULTI_PACKETS,
-          bcmi2cnfc_read_multi_packets);
-
-  while (!resetSuccess && numTries < NUM_RESET_ATTEMPTS) {
-    if (numTries++ > 0) {
-      ALOGW("BCM2079x: retrying reset, attempt %d/%d", numTries,
-            NUM_RESET_ATTEMPTS);
-    }
-    if (linux_cb.sock_power_control > 0) {
-      current_nfc_wake_state = NFC_WAKE_ASSERTED_ON_POR;
-      ioctl(linux_cb.sock_power_control, BCMNFC_WAKE_CTL,
-            NFC_WAKE_ASSERTED_ON_POR);
-      ioctl(linux_cb.sock_power_control, BCMNFC_POWER_CTL, 0);
-      GKI_delay(10);
-      ret = ioctl(linux_cb.sock_power_control, BCMNFC_POWER_CTL, 1);
-    }
-
-    ret = GetStrValue(NAME_SPI_NEGOTIATION, (char*)spi_negotiation,
-                      sizeof(spi_negotiation));
-    if (ret > 0 && spi_negotiation[0] > 0 &&
-        spi_negotiation[0] < sizeof(spi_negotiation) - 1) {
-      int len = spi_negotiation[0];
-      /* Wake control is not available: Start SPI negotiation*/
-      USERIAL_Write(port, &spi_negotiation[1], len);
-      USERIAL_Read(port, spi_nego_res, sizeof(spi_nego_res));
-    }
-
-    if (GetNumValue(NAME_CLIENT_ADDRESS, &num, sizeof(num)))
-      bcmi2cnfc_client_addr = num & 0xFF;
-    if (bcmi2cnfc_client_addr != 0 && 0x07 < bcmi2cnfc_client_addr &&
-        bcmi2cnfc_client_addr < 0x78) {
-      /* Delay needed after turning on chip */
-      GKI_delay(delay);
-      ALOGD("Change client address to %x\n", bcmi2cnfc_client_addr);
-      ret = change_client_addr(bcmi2cnfc_client_addr);
-      if (!ret) {
-        resetSuccess = 1;
-        linux_cb.client_device_address = bcmi2cnfc_client_addr;
-        /* Delay long enough for address change */
-        /* MACO xxx this needs to be at least 200 ms for BCM2079x B3 */
-        delay = 200;
-      }
-    } else {
-      resetSuccess = 1;
-    }
-  }
-
-  if (!resetSuccess) {
-    ALOGE("BCM2079x: failed to initialize NFC controller");
-  }
-
-  GKI_delay(delay);
-  ALOGD("%s: exit", __func__);
-}
-
-#define DEFAULT_CLIENT_ADDRESS 0x77
-#define ALIAS_CLIENT_ADDRESS 0x79
-static int change_client_addr(int addr) {
-  int ret;
-  int i;
-  char addr_data[] = {0xFA, 0xF2, 0x00, 0x00, 0x00,
-                      0x38, 0x00, 0x00, 0x00, 0x2A};
-  int size = sizeof(addr_data) - 1;
-
-  addr_data[5] = addr & 0xFF;
-
-  /* set the checksum */
-  ret = 0;
-  for (i = 1; i < size; ++i) ret += addr_data[i];
-  addr_data[size] = (ret & 0xFF);
-  ALOGD("change_client_addr() change addr from 0x%x to 0x%x\n",
-        DEFAULT_CLIENT_ADDRESS, addr);
-  /* ignore the return code from IOCTL */
-  /* always revert back to the default client address */
-  ioctl(linux_cb.sock, BCMNFC_SET_CLIENT_ADDR, DEFAULT_CLIENT_ADDRESS);
-  /* Send address change command (skipping first byte) */
-  ret = TEMP_FAILURE_RETRY(write(linux_cb.sock, &addr_data[1], size));
-
-  /* If it fails, it is likely a B3 we are talking to */
-  if (ret != size) {
-    ALOGD(
-        "change_client_addr() change addr to 0x%x by setting BSP address to "
-        "0x%x\n",
-        addr, ALIAS_CLIENT_ADDRESS);
-    /* legacy kernel */
-    /* MACO xxx commented out code below only works with new kernel driver,
-     * but Mako/Manta ship with old one */
-    ret = ioctl(linux_cb.sock, BCMNFC_CHANGE_ADDR, addr);
-    return ret;
-    /*
-    ret = ioctl(linux_cb.sock, BCMNFC_SET_CLIENT_ADDR, ALIAS_CLIENT_ADDRESS);
-    size++;
-    ret = write(linux_cb.sock, addr_data, size);
-    */
-  }
-
-  if (ret == size) {
-    ALOGD("change_client_addr() set client address 0x%x to client driver\n",
-          addr);
-    ret = ioctl(linux_cb.sock, BCMNFC_SET_CLIENT_ADDR, addr);
-  } else {
-    ret = -EIO;
-  }
-  return ret;
-}
diff --git a/halimpl/bcm2079x/gki/common/gki.h b/halimpl/bcm2079x/gki/common/gki.h
deleted file mode 100644
index f452719..0000000
--- a/halimpl/bcm2079x/gki/common/gki.h
+++ /dev/null
@@ -1,487 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 1999-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-#ifndef GKI_H
-#define GKI_H
-
-#ifdef BUILDCFG
-#if (NFC_HAL_TARGET == FALSE)
-#include "buildcfg.h"
-#else
-/* Build config when building HAL */
-#include "buildcfg_hal.h"
-#endif
-#endif
-
-#ifndef NFC_STANDALONE
-#define NFC_STANDALONE FALSE
-#endif
-
-/* Include platform-specific over-rides */
-#if (NFC_STANDALONE == TRUE)
-#include "bt_types.h"
-#include "gki_target.h"
-#elif (NFC_HAL_TARGET == TRUE)
-/* If building NFC HAL, then use hal target file */
-#include "gki_hal_target.h"
-#include "nfc_types.h"
-#else
-/* For non-nfc_standalone, include Bluetooth definitions */
-#include "bt_types.h"
-#endif
-
-#define GKI_BUFFER_DEBUG FALSE
-
-/* Error codes */
-#define GKI_SUCCESS 0x00
-#define GKI_FAILURE 0x01
-#define GKI_INVALID_TASK 0xF0
-#define GKI_INVALID_POOL 0xFF
-
-/************************************************************************
-** Mailbox definitions. Each task has 4 mailboxes that are used to
-** send buffers to the task.
-*/
-#define TASK_MBOX_0 0
-#define TASK_MBOX_1 1
-#define TASK_MBOX_2 2
-#define TASK_MBOX_3 3
-
-#define NUM_TASK_MBOX 4
-
-/************************************************************************
-** Event definitions.
-**
-** There are 4 reserved events used to signal messages rcvd in task mailboxes.
-** There are 4 reserved events used to signal timeout events.
-** There are 8 general purpose events available for applications.
-*/
-#define MAX_EVENTS 16
-
-#define TASK_MBOX_0_EVT_MASK 0x0001
-#define TASK_MBOX_1_EVT_MASK 0x0002
-#define TASK_MBOX_2_EVT_MASK 0x0004
-#define TASK_MBOX_3_EVT_MASK 0x0008
-
-#define TIMER_0 0
-#define TIMER_1 1
-#define TIMER_2 2
-#define TIMER_3 3
-
-#define TIMER_0_EVT_MASK 0x0010
-#define TIMER_1_EVT_MASK 0x0020
-#define TIMER_2_EVT_MASK 0x0040
-#define TIMER_3_EVT_MASK 0x0080
-
-#define APPL_EVT_0 8
-#define APPL_EVT_1 9
-#define APPL_EVT_2 10
-#define APPL_EVT_3 11
-#define APPL_EVT_4 12
-#define APPL_EVT_5 13
-#define APPL_EVT_6 14
-#define APPL_EVT_7 15
-
-#define EVENT_MASK(evt) ((uint16_t)(0x0001 << (evt)))
-
-/************************************************************************
-**  Max Time Queue
-**/
-#ifndef GKI_MAX_TIMER_QUEUES
-#define GKI_MAX_TIMER_QUEUES 3
-#endif
-
-/************************************************************************
-**  Macro to determine the pool buffer size based on the GKI POOL ID at compile
-*time.
-**  Pool IDs index from 0 to GKI_NUM_FIXED_BUF_POOLS - 1
-*/
-
-#if (GKI_NUM_FIXED_BUF_POOLS < 1)
-
-#ifndef GKI_POOL_ID_0
-#define GKI_POOL_ID_0 0
-#endif /* ifndef GKI_POOL_ID_0 */
-
-#ifndef GKI_BUF0_SIZE
-#define GKI_BUF0_SIZE 0
-#endif /* ifndef GKI_BUF0_SIZE */
-
-#endif /* GKI_NUM_FIXED_BUF_POOLS < 1 */
-
-#if (GKI_NUM_FIXED_BUF_POOLS < 2)
-
-#ifndef GKI_POOL_ID_1
-#define GKI_POOL_ID_1 0
-#endif /* ifndef GKI_POOL_ID_1 */
-
-#ifndef GKI_BUF1_SIZE
-#define GKI_BUF1_SIZE 0
-#endif /* ifndef GKI_BUF1_SIZE */
-
-#endif /* GKI_NUM_FIXED_BUF_POOLS < 2 */
-
-#if (GKI_NUM_FIXED_BUF_POOLS < 3)
-
-#ifndef GKI_POOL_ID_2
-#define GKI_POOL_ID_2 0
-#endif /* ifndef GKI_POOL_ID_2 */
-
-#ifndef GKI_BUF2_SIZE
-#define GKI_BUF2_SIZE 0
-#endif /* ifndef GKI_BUF2_SIZE */
-
-#endif /* GKI_NUM_FIXED_BUF_POOLS < 3 */
-
-#if (GKI_NUM_FIXED_BUF_POOLS < 4)
-
-#ifndef GKI_POOL_ID_3
-#define GKI_POOL_ID_3 0
-#endif /* ifndef GKI_POOL_ID_4 */
-
-#ifndef GKI_BUF3_SIZE
-#define GKI_BUF3_SIZE 0
-#endif /* ifndef GKI_BUF3_SIZE */
-
-#endif /* GKI_NUM_FIXED_BUF_POOLS < 4 */
-
-#if (GKI_NUM_FIXED_BUF_POOLS < 5)
-
-#ifndef GKI_POOL_ID_4
-#define GKI_POOL_ID_4 0
-#endif /* ifndef GKI_POOL_ID_4 */
-
-#ifndef GKI_BUF4_SIZE
-#define GKI_BUF4_SIZE 0
-#endif /* ifndef GKI_BUF4_SIZE */
-
-#endif /* GKI_NUM_FIXED_BUF_POOLS < 5 */
-
-#if (GKI_NUM_FIXED_BUF_POOLS < 6)
-
-#ifndef GKI_POOL_ID_5
-#define GKI_POOL_ID_5 0
-#endif /* ifndef GKI_POOL_ID_5 */
-
-#ifndef GKI_BUF5_SIZE
-#define GKI_BUF5_SIZE 0
-#endif /* ifndef GKI_BUF5_SIZE */
-
-#endif /* GKI_NUM_FIXED_BUF_POOLS < 6 */
-
-#if (GKI_NUM_FIXED_BUF_POOLS < 7)
-
-#ifndef GKI_POOL_ID_6
-#define GKI_POOL_ID_6 0
-#endif /* ifndef GKI_POOL_ID_6 */
-
-#ifndef GKI_BUF6_SIZE
-#define GKI_BUF6_SIZE 0
-#endif /* ifndef GKI_BUF6_SIZE */
-
-#endif /* GKI_NUM_FIXED_BUF_POOLS < 7 */
-
-#if (GKI_NUM_FIXED_BUF_POOLS < 8)
-
-#ifndef GKI_POOL_ID_7
-#define GKI_POOL_ID_7 0
-#endif /* ifndef GKI_POOL_ID_7 */
-
-#ifndef GKI_BUF7_SIZE
-#define GKI_BUF7_SIZE 0
-#endif /* ifndef GKI_BUF7_SIZE */
-
-#endif /* GKI_NUM_FIXED_BUF_POOLS < 8 */
-
-#if (GKI_NUM_FIXED_BUF_POOLS < 9)
-
-#ifndef GKI_POOL_ID_8
-#define GKI_POOL_ID_8 0
-#endif /* ifndef GKI_POOL_ID_8 */
-
-#ifndef GKI_BUF8_SIZE
-#define GKI_BUF8_SIZE 0
-#endif /* ifndef GKI_BUF8_SIZE */
-
-#endif /* GKI_NUM_FIXED_BUF_POOLS < 9 */
-
-#if (GKI_NUM_FIXED_BUF_POOLS < 10)
-
-#ifndef GKI_POOL_ID_9
-#define GKI_POOL_ID_9 0
-#endif /* ifndef GKI_POOL_ID_9 */
-
-#ifndef GKI_BUF9_SIZE
-#define GKI_BUF9_SIZE 0
-#endif /* ifndef GKI_BUF9_SIZE */
-
-#endif /* GKI_NUM_FIXED_BUF_POOLS < 10 */
-
-#if (GKI_NUM_FIXED_BUF_POOLS < 11)
-
-#ifndef GKI_POOL_ID_10
-#define GKI_POOL_ID_10 0
-#endif /* ifndef GKI_POOL_ID_10 */
-
-#ifndef GKI_BUF10_SIZE
-#define GKI_BUF10_SIZE 0
-#endif /* ifndef GKI_BUF10_SIZE */
-
-#endif /* GKI_NUM_FIXED_BUF_POOLS < 11 */
-
-#if (GKI_NUM_FIXED_BUF_POOLS < 12)
-
-#ifndef GKI_POOL_ID_11
-#define GKI_POOL_ID_11 0
-#endif /* ifndef GKI_POOL_ID_11 */
-
-#ifndef GKI_BUF11_SIZE
-#define GKI_BUF11_SIZE 0
-#endif /* ifndef GKI_BUF11_SIZE */
-
-#endif /* GKI_NUM_FIXED_BUF_POOLS < 12 */
-
-#if (GKI_NUM_FIXED_BUF_POOLS < 13)
-
-#ifndef GKI_POOL_ID_12
-#define GKI_POOL_ID_12 0
-#endif /* ifndef GKI_POOL_ID_12 */
-
-#ifndef GKI_BUF12_SIZE
-#define GKI_BUF12_SIZE 0
-#endif /* ifndef GKI_BUF12_SIZE */
-
-#endif /* GKI_NUM_FIXED_BUF_POOLS < 13 */
-
-#if (GKI_NUM_FIXED_BUF_POOLS < 14)
-
-#ifndef GKI_POOL_ID_13
-#define GKI_POOL_ID_13 0
-#endif /* ifndef GKI_POOL_ID_13 */
-
-#ifndef GKI_BUF13_SIZE
-#define GKI_BUF13_SIZE 0
-#endif /* ifndef GKI_BUF13_SIZE */
-
-#endif /* GKI_NUM_FIXED_BUF_POOLS < 14 */
-
-#if (GKI_NUM_FIXED_BUF_POOLS < 15)
-
-#ifndef GKI_POOL_ID_14
-#define GKI_POOL_ID_14 0
-#endif /* ifndef GKI_POOL_ID_14 */
-
-#ifndef GKI_BUF14_SIZE
-#define GKI_BUF14_SIZE 0
-#endif /* ifndef GKI_BUF14_SIZE */
-
-#endif /* GKI_NUM_FIXED_BUF_POOLS < 15 */
-
-#if (GKI_NUM_FIXED_BUF_POOLS < 16)
-
-#ifndef GKI_POOL_ID_15
-#define GKI_POOL_ID_15 0
-#endif /* ifndef GKI_POOL_ID_15 */
-
-#ifndef GKI_BUF15_SIZE
-#define GKI_BUF15_SIZE 0
-#endif /* ifndef GKI_BUF15_SIZE */
-
-#endif /* GKI_NUM_FIXED_BUF_POOLS < 16 */
-
-/* Timer list entry callback type
-*/
-typedef void(TIMER_CBACK)(void* p_tle);
-
-/* Define a timer list entry
-*/
-typedef struct _tle {
-  struct _tle* p_next;
-  struct _tle* p_prev;
-  TIMER_CBACK* p_cback;
-  int32_t ticks;
-  uintptr_t param;
-  uint16_t event;
-  uint8_t in_use;
-} TIMER_LIST_ENT;
-
-/* Define a timer list queue
-*/
-typedef struct {
-  TIMER_LIST_ENT* p_first;
-  TIMER_LIST_ENT* p_last;
-  int32_t last_ticks;
-} TIMER_LIST_Q;
-
-/***********************************************************************
-** This queue is a general purpose buffer queue, for application use.
-*/
-typedef struct {
-  void* p_first;
-  void* p_last;
-  uint16_t count;
-} BUFFER_Q;
-
-#define GKI_IS_QUEUE_EMPTY(p_q) ((p_q)->count == 0)
-
-/* Task constants
-*/
-#ifndef TASKPTR
-typedef void (*TASKPTR)(uint32_t);
-#endif
-
-/* General pool accessible to GKI_getbuf() */
-#define GKI_PUBLIC_POOL 0
-#define GKI_RESTRICTED_POOL 1 /* Inaccessible pool to GKI_getbuf() */
-
-/***********************************************************************
-** Function prototypes
-*/
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Task management
-*/
-extern uint8_t GKI_create_task(TASKPTR, uint8_t, int8_t*, uint16_t*, uint16_t,
-                               void*, void*);
-extern void GKI_exit_task(uint8_t);
-extern uint8_t GKI_get_taskid(void);
-extern void GKI_init(void);
-extern int8_t* GKI_map_taskname(uint8_t);
-extern uint8_t GKI_resume_task(uint8_t);
-extern void GKI_run(void*);
-extern void GKI_stop(void);
-extern uint8_t GKI_suspend_task(uint8_t);
-extern uint8_t GKI_is_task_running(uint8_t);
-extern void GKI_shutdown(void);
-
-/* memory management
-*/
-extern void GKI_shiftdown(uint8_t* p_mem, uint32_t len, uint32_t shift_amount);
-extern void GKI_shiftup(uint8_t* p_dest, uint8_t* p_src, uint32_t len);
-
-/* To send buffers and events between tasks
-*/
-extern uint8_t GKI_isend_event(uint8_t, uint16_t);
-extern void GKI_isend_msg(uint8_t, uint8_t, void*);
-extern void* GKI_read_mbox(uint8_t);
-extern void GKI_send_msg(uint8_t, uint8_t, void*);
-extern uint8_t GKI_send_event(uint8_t, uint16_t);
-
-/* To get and release buffers, change owner and get size
-*/
-extern void GKI_change_buf_owner(void*, uint8_t);
-extern uint8_t GKI_create_pool(uint16_t, uint16_t, uint8_t, void*);
-extern void GKI_delete_pool(uint8_t);
-extern void* GKI_find_buf_start(void*);
-extern void GKI_freebuf(void*);
-#if (GKI_BUFFER_DEBUG == TRUE)
-#define GKI_getbuf(size) GKI_getbuf_debug(size, __func__, __LINE__)
-extern void* GKI_getbuf_debug(uint16_t, const char*, int);
-#else
-extern void* GKI_getbuf(uint16_t);
-#endif
-extern uint16_t GKI_get_buf_size(void*);
-#if (GKI_BUFFER_DEBUG == TRUE)
-#define GKI_getpoolbuf(id) GKI_getpoolbuf_debug(id, __func__, __LINE__)
-extern void* GKI_getpoolbuf_debug(uint8_t, const char*, int);
-#else
-extern void* GKI_getpoolbuf(uint8_t);
-#endif
-
-extern uint16_t GKI_poolcount(uint8_t);
-extern uint16_t GKI_poolfreecount(uint8_t);
-extern uint16_t GKI_poolutilization(uint8_t);
-extern void GKI_register_mempool(void* p_mem);
-extern uint8_t GKI_set_pool_permission(uint8_t, uint8_t);
-
-/* User buffer queue management
-*/
-extern void* GKI_dequeue(BUFFER_Q*);
-extern void GKI_enqueue(BUFFER_Q*, void*);
-extern void GKI_enqueue_head(BUFFER_Q*, void*);
-extern void* GKI_getfirst(BUFFER_Q*);
-extern void* GKI_getlast(BUFFER_Q*);
-extern void* GKI_getnext(void*);
-extern void GKI_init_q(BUFFER_Q*);
-extern bool GKI_queue_is_empty(BUFFER_Q*);
-extern void* GKI_remove_from_queue(BUFFER_Q*, void*);
-extern uint16_t GKI_get_pool_bufsize(uint8_t);
-
-/* Timer management
-*/
-extern void GKI_add_to_timer_list(TIMER_LIST_Q*, TIMER_LIST_ENT*);
-extern void GKI_delay(uint32_t);
-extern uint32_t GKI_get_tick_count(void);
-extern int8_t* GKI_get_time_stamp(int8_t*);
-extern void GKI_init_timer_list(TIMER_LIST_Q*);
-extern void GKI_init_timer_list_entry(TIMER_LIST_ENT*);
-extern int32_t GKI_ready_to_sleep(void);
-extern void GKI_remove_from_timer_list(TIMER_LIST_Q*, TIMER_LIST_ENT*);
-extern void GKI_start_timer(uint8_t, int32_t, bool);
-extern void GKI_stop_timer(uint8_t);
-extern void GKI_timer_update(int32_t);
-extern uint16_t GKI_update_timer_list(TIMER_LIST_Q*, int32_t);
-extern uint32_t GKI_get_remaining_ticks(TIMER_LIST_Q*, TIMER_LIST_ENT*);
-extern uint16_t GKI_wait(uint16_t, uint32_t);
-
-/* Start and Stop system time tick callback
- * true for start system tick if time queue is not empty
- * false to stop system tick if time queue is empty
-*/
-typedef void(SYSTEM_TICK_CBACK)(bool);
-
-/* Time queue management for system ticks
-*/
-extern bool GKI_timer_queue_empty(void);
-extern void GKI_timer_queue_register_callback(SYSTEM_TICK_CBACK*);
-
-/* Disable Interrupts, Enable Interrupts
-*/
-extern void GKI_enable(void);
-extern void GKI_disable(void);
-extern void GKI_sched_lock(void);
-extern void GKI_sched_unlock(void);
-
-/* Allocate (Free) memory from an OS
-*/
-extern void* GKI_os_malloc(uint32_t);
-extern void GKI_os_free(void*);
-
-/* os timer operation */
-extern uint32_t GKI_get_os_tick_count(void);
-
-/* Exception handling
-*/
-extern void GKI_exception(uint16_t, char*);
-
-#if (GKI_DEBUG == TRUE)
-extern void GKI_PrintBufferUsage(uint8_t* p_num_pools, uint16_t* p_cur_used);
-extern void GKI_PrintBuffer(void);
-extern void GKI_print_task(void);
-#else
-#undef GKI_PrintBufferUsage
-#define GKI_PrintBuffer() NULL
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/halimpl/bcm2079x/gki/common/gki_buffer.c b/halimpl/bcm2079x/gki/common/gki_buffer.c
deleted file mode 100644
index b413f5c..0000000
--- a/halimpl/bcm2079x/gki/common/gki_buffer.c
+++ /dev/null
@@ -1,1484 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 1999-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-#include <stdio.h>
-#include "gki_int.h"
-
-#if (GKI_NUM_TOTAL_BUF_POOLS > 16)
-#error Number of pools out of range (16 Max)!
-#endif
-
-#if (BTU_STACK_LITE_ENABLED == FALSE)
-static void gki_add_to_pool_list(uint8_t pool_id);
-static void gki_remove_from_pool_list(uint8_t pool_id);
-#endif /*  BTU_STACK_LITE_ENABLED == FALSE */
-
-#if (GKI_BUFFER_DEBUG == TRUE)
-#define LOG_TAG "GKI_DEBUG"
-#include <android/log.h>
-#include <cutils/log.h>
-#define LOGD(format, ...)                                       \
-  LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | \
-             TRACE_TYPE_GENERIC,                                \
-         format, ##__VA_ARGS__)
-#endif
-/*******************************************************************************
-**
-** Function         gki_init_free_queue
-**
-** Description      Internal function called at startup to initialize a free
-**                  queue. It is called once for each free queue.
-**
-** Returns          void
-**
-*******************************************************************************/
-static void gki_init_free_queue(uint8_t id, uint16_t size, uint16_t total,
-                                void* p_mem) {
-  uint16_t i;
-  uint16_t act_size;
-  BUFFER_HDR_T* hdr;
-  BUFFER_HDR_T* hdr1 = NULL;
-  uint32_t* magic;
-  int32_t tempsize = size;
-  tGKI_COM_CB* p_cb = &gki_cb.com;
-
-  /* Ensure an even number of longwords */
-  tempsize = (int32_t)ALIGN_POOL(size);
-  act_size = (uint16_t)(tempsize + BUFFER_PADDING_SIZE);
-
-  /* Remember pool start and end addresses */
-  if (p_mem) {
-    p_cb->pool_start[id] = (uint8_t*)p_mem;
-    p_cb->pool_end[id] = (uint8_t*)p_mem + (act_size * total);
-  }
-
-  p_cb->pool_size[id] = act_size;
-
-  p_cb->freeq[id].size = (uint16_t)tempsize;
-  p_cb->freeq[id].total = total;
-  p_cb->freeq[id].cur_cnt = 0;
-  p_cb->freeq[id].max_cnt = 0;
-
-#if (GKI_BUFFER_DEBUG == TRUE)
-  LOGD(
-      "gki_init_free_queue() init pool=%d, size=%d (aligned=%d) total=%d "
-      "start=%p",
-      id, size, tempsize, total, p_mem);
-#endif
-
-  /* Initialize  index table */
-  if (p_mem) {
-    hdr = (BUFFER_HDR_T*)p_mem;
-    p_cb->freeq[id].p_first = hdr;
-    for (i = 0; i < total; i++) {
-      hdr->task_id = GKI_INVALID_TASK;
-      hdr->q_id = id;
-      hdr->status = BUF_STATUS_FREE;
-      magic = (uint32_t*)((uint8_t*)hdr + BUFFER_HDR_SIZE + tempsize);
-      *magic = MAGIC_NO;
-      hdr1 = hdr;
-      hdr = (BUFFER_HDR_T*)((uint8_t*)hdr + act_size);
-      hdr1->p_next = hdr;
-    }
-    hdr1->p_next = NULL;
-    p_cb->freeq[id].p_last = hdr1;
-  }
-  return;
-}
-
-#if (GKI_USE_DEFERED_ALLOC_BUF_POOLS == TRUE)
-static bool gki_alloc_free_queue(uint8_t id) {
-  FREE_QUEUE_T* Q;
-  tGKI_COM_CB* p_cb = &gki_cb.com;
-#if GKI_BUFFER_DEBUG
-  ALOGD("\ngki_alloc_free_queue in, id:%d \n", id);
-#endif
-
-  Q = &p_cb->freeq[p_cb->pool_list[id]];
-
-  if (Q->p_first == 0) {
-    void* p_mem = GKI_os_malloc((Q->size + BUFFER_PADDING_SIZE) * Q->total);
-    if (p_mem) {
-// re-initialize the queue with allocated memory
-#if GKI_BUFFER_DEBUG
-      ALOGD(
-          "\ngki_alloc_free_queue calling  gki_init_free_queue, id:%d  "
-          "size:%d, totol:%d\n",
-          id, Q->size, Q->total);
-#endif
-      gki_init_free_queue(id, Q->size, Q->total, p_mem);
-#if GKI_BUFFER_DEBUG
-      ALOGD("\ngki_alloc_free_queue ret OK, id:%d  size:%d, totol:%d\n", id,
-            Q->size, Q->total);
-#endif
-      return true;
-    }
-    GKI_exception(GKI_ERROR_BUF_SIZE_TOOBIG,
-                  "gki_alloc_free_queue: Not enough memory");
-  }
-#if GKI_BUFFER_DEBUG
-  ALOGD("\ngki_alloc_free_queue out failed, id:%d\n", id);
-#endif
-  return false;
-}
-#endif
-
-/*******************************************************************************
-**
-** Function         gki_buffer_init
-**
-** Description      Called once internally by GKI at startup to initialize all
-**                  buffers and free buffer pools.
-**
-** Returns          void
-**
-*******************************************************************************/
-void gki_buffer_init(void) {
-  uint8_t i, tt, mb;
-  tGKI_COM_CB* p_cb = &gki_cb.com;
-
-  /* Initialize mailboxes */
-  for (tt = 0; tt < GKI_MAX_TASKS; tt++) {
-    for (mb = 0; mb < NUM_TASK_MBOX; mb++) {
-      p_cb->OSTaskQFirst[tt][mb] = NULL;
-      p_cb->OSTaskQLast[tt][mb] = NULL;
-    }
-  }
-
-  for (tt = 0; tt < GKI_NUM_TOTAL_BUF_POOLS; tt++) {
-    p_cb->pool_start[tt] = NULL;
-    p_cb->pool_end[tt] = NULL;
-    p_cb->pool_size[tt] = 0;
-
-    p_cb->freeq[tt].p_first = 0;
-    p_cb->freeq[tt].p_last = 0;
-    p_cb->freeq[tt].size = 0;
-    p_cb->freeq[tt].total = 0;
-    p_cb->freeq[tt].cur_cnt = 0;
-    p_cb->freeq[tt].max_cnt = 0;
-  }
-
-  /* Use default from target.h */
-  p_cb->pool_access_mask = GKI_DEF_BUFPOOL_PERM_MASK;
-
-#if (GKI_USE_DEFERED_ALLOC_BUF_POOLS == FALSE && \
-     GKI_USE_DYNAMIC_BUFFERS == TRUE)
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 0)
-  p_cb->bufpool0 = (uint8_t*)GKI_os_malloc(
-      (GKI_BUF0_SIZE + BUFFER_PADDING_SIZE) * GKI_BUF0_MAX);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 1)
-  p_cb->bufpool1 = (uint8_t*)GKI_os_malloc(
-      (GKI_BUF1_SIZE + BUFFER_PADDING_SIZE) * GKI_BUF1_MAX);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 2)
-  p_cb->bufpool2 = (uint8_t*)GKI_os_malloc(
-      (GKI_BUF2_SIZE + BUFFER_PADDING_SIZE) * GKI_BUF2_MAX);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 3)
-  p_cb->bufpool3 = (uint8_t*)GKI_os_malloc(
-      (GKI_BUF3_SIZE + BUFFER_PADDING_SIZE) * GKI_BUF3_MAX);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 4)
-  p_cb->bufpool4 = (uint8_t*)GKI_os_malloc(
-      (GKI_BUF4_SIZE + BUFFER_PADDING_SIZE) * GKI_BUF4_MAX);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 5)
-  p_cb->bufpool5 = (uint8_t*)GKI_os_malloc(
-      (GKI_BUF5_SIZE + BUFFER_PADDING_SIZE) * GKI_BUF5_MAX);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 6)
-  p_cb->bufpool6 = (uint8_t*)GKI_os_malloc(
-      (GKI_BUF6_SIZE + BUFFER_PADDING_SIZE) * GKI_BUF6_MAX);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 7)
-  p_cb->bufpool7 = (uint8_t*)GKI_os_malloc(
-      (GKI_BUF7_SIZE + BUFFER_PADDING_SIZE) * GKI_BUF7_MAX);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 8)
-  p_cb->bufpool8 = (uint8_t*)GKI_os_malloc(
-      (GKI_BUF8_SIZE + BUFFER_PADDING_SIZE) * GKI_BUF8_MAX);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 9)
-  p_cb->bufpool9 = (uint8_t*)GKI_os_malloc(
-      (GKI_BUF9_SIZE + BUFFER_PADDING_SIZE) * GKI_BUF9_MAX);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 10)
-  p_cb->bufpool10 = (uint8_t*)GKI_os_malloc(
-      (GKI_BUF10_SIZE + BUFFER_PADDING_SIZE) * GKI_BUF10_MAX);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 11)
-  p_cb->bufpool11 = (uint8_t*)GKI_os_malloc(
-      (GKI_BUF11_SIZE + BUFFER_PADDING_SIZE) * GKI_BUF11_MAX);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 12)
-  p_cb->bufpool12 = (uint8_t*)GKI_os_malloc(
-      (GKI_BUF12_SIZE + BUFFER_PADDING_SIZE) * GKI_BUF12_MAX);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 13)
-  p_cb->bufpool13 = (uint8_t*)GKI_os_malloc(
-      (GKI_BUF13_SIZE + BUFFER_PADDING_SIZE) * GKI_BUF13_MAX);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 14)
-  p_cb->bufpool14 = (uint8_t*)GKI_os_malloc(
-      (GKI_BUF14_SIZE + BUFFER_PADDING_SIZE) * GKI_BUF14_MAX);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 15)
-  p_cb->bufpool15 = (uint8_t*)GKI_os_malloc(
-      (GKI_BUF15_SIZE + BUFFER_PADDING_SIZE) * GKI_BUF15_MAX);
-#endif
-
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 0)
-  gki_init_free_queue(0, GKI_BUF0_SIZE, GKI_BUF0_MAX, p_cb->bufpool0);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 1)
-  gki_init_free_queue(1, GKI_BUF1_SIZE, GKI_BUF1_MAX, p_cb->bufpool1);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 2)
-  gki_init_free_queue(2, GKI_BUF2_SIZE, GKI_BUF2_MAX, p_cb->bufpool2);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 3)
-  gki_init_free_queue(3, GKI_BUF3_SIZE, GKI_BUF3_MAX, p_cb->bufpool3);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 4)
-  gki_init_free_queue(4, GKI_BUF4_SIZE, GKI_BUF4_MAX, p_cb->bufpool4);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 5)
-  gki_init_free_queue(5, GKI_BUF5_SIZE, GKI_BUF5_MAX, p_cb->bufpool5);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 6)
-  gki_init_free_queue(6, GKI_BUF6_SIZE, GKI_BUF6_MAX, p_cb->bufpool6);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 7)
-  gki_init_free_queue(7, GKI_BUF7_SIZE, GKI_BUF7_MAX, p_cb->bufpool7);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 8)
-  gki_init_free_queue(8, GKI_BUF8_SIZE, GKI_BUF8_MAX, p_cb->bufpool8);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 9)
-  gki_init_free_queue(9, GKI_BUF9_SIZE, GKI_BUF9_MAX, p_cb->bufpool9);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 10)
-  gki_init_free_queue(10, GKI_BUF10_SIZE, GKI_BUF10_MAX, p_cb->bufpool10);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 11)
-  gki_init_free_queue(11, GKI_BUF11_SIZE, GKI_BUF11_MAX, p_cb->bufpool11);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 12)
-  gki_init_free_queue(12, GKI_BUF12_SIZE, GKI_BUF12_MAX, p_cb->bufpool12);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 13)
-  gki_init_free_queue(13, GKI_BUF13_SIZE, GKI_BUF13_MAX, p_cb->bufpool13);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 14)
-  gki_init_free_queue(14, GKI_BUF14_SIZE, GKI_BUF14_MAX, p_cb->bufpool14);
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 15)
-  gki_init_free_queue(15, GKI_BUF15_SIZE, GKI_BUF15_MAX, p_cb->bufpool15);
-#endif
-
-  /* add pools to the pool_list which is arranged in the order of size */
-  for (i = 0; i < GKI_NUM_FIXED_BUF_POOLS; i++) {
-    p_cb->pool_list[i] = i;
-  }
-
-  p_cb->curr_total_no_of_pools = GKI_NUM_FIXED_BUF_POOLS;
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         GKI_init_q
-**
-** Description      Called by an application to initialize a buffer queue.
-**
-** Returns          void
-**
-*******************************************************************************/
-void GKI_init_q(BUFFER_Q* p_q) {
-  p_q->p_first = p_q->p_last = NULL;
-  p_q->count = 0;
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         GKI_getbuf
-**
-** Description      Called by an application to get a free buffer which
-**                  is of size greater or equal to the requested size.
-**
-**                  Note: This routine only takes buffers from public pools.
-**                        It will not use any buffers from pools
-**                        marked GKI_RESTRICTED_POOL.
-**
-** Parameters       size - (input) number of bytes needed.
-**
-** Returns          A pointer to the buffer, or NULL if none available
-**
-*******************************************************************************/
-#if (GKI_BUFFER_DEBUG == TRUE)
-void* GKI_getbuf_debug(uint16_t size, const char* _function_, int _line_)
-#else
-void* GKI_getbuf(uint16_t size)
-#endif
-{
-  uint8_t i;
-  FREE_QUEUE_T* Q;
-  BUFFER_HDR_T* p_hdr;
-  tGKI_COM_CB* p_cb = &gki_cb.com;
-#if (GKI_BUFFER_DEBUG == TRUE)
-  uint8_t x;
-#endif
-
-  if (size == 0) {
-    GKI_exception(GKI_ERROR_BUF_SIZE_ZERO, "getbuf: Size is zero");
-    return (NULL);
-  }
-
-#if (GKI_BUFFER_DEBUG == TRUE)
-  LOGD("GKI_getbuf() requesting %d func:%s(line=%d)", size, _function_, _line_);
-#endif
-  /* Find the first buffer pool that is public that can hold the desired size */
-  for (i = 0; i < p_cb->curr_total_no_of_pools; i++) {
-    if (size <= p_cb->freeq[p_cb->pool_list[i]].size) break;
-  }
-
-  if (i == p_cb->curr_total_no_of_pools) {
-    GKI_exception(GKI_ERROR_BUF_SIZE_TOOBIG, "getbuf: Size is too big");
-    return (NULL);
-  }
-
-  /* Make sure the buffers aren't disturbed til finished with allocation */
-  GKI_disable();
-
-  /* search the public buffer pools that are big enough to hold the size
-   * until a free buffer is found */
-  for (; i < p_cb->curr_total_no_of_pools; i++) {
-    /* Only look at PUBLIC buffer pools (bypass RESTRICTED pools) */
-    if (((uint16_t)1 << p_cb->pool_list[i]) & p_cb->pool_access_mask) continue;
-
-    Q = &p_cb->freeq[p_cb->pool_list[i]];
-    if (Q->cur_cnt < Q->total) {
-#if (GKI_USE_DEFERED_ALLOC_BUF_POOLS == TRUE)
-      if (Q->p_first == 0 && gki_alloc_free_queue(i) != true) {
-        GKI_TRACE_ERROR_0("GKI_getbuf() out of buffer");
-        GKI_enable();
-        return NULL;
-      }
-#endif
-
-      if (Q->p_first == 0) {
-        /* gki_alloc_free_queue() failed to alloc memory */
-        GKI_TRACE_ERROR_0("GKI_getbuf() fail alloc free queue");
-        GKI_enable();
-        return NULL;
-      }
-
-      p_hdr = Q->p_first;
-      Q->p_first = p_hdr->p_next;
-
-      if (!Q->p_first) Q->p_last = NULL;
-
-      if (++Q->cur_cnt > Q->max_cnt) Q->max_cnt = Q->cur_cnt;
-
-      GKI_enable();
-
-      p_hdr->task_id = GKI_get_taskid();
-
-      p_hdr->status = BUF_STATUS_UNLINKED;
-      p_hdr->p_next = NULL;
-      p_hdr->Type = 0;
-#if (GKI_BUFFER_DEBUG == TRUE)
-      LOGD("GKI_getbuf() allocated, %x, %x (%d of %d used) %d",
-           (uint8_t*)p_hdr + BUFFER_HDR_SIZE, p_hdr, Q->cur_cnt, Q->total,
-           p_cb->freeq[i].total);
-
-      strncpy(p_hdr->_function, _function_, _GKI_MAX_FUNCTION_NAME_LEN);
-      p_hdr->_function[_GKI_MAX_FUNCTION_NAME_LEN] = '\0';
-      p_hdr->_line = _line_;
-#endif
-      return ((void*)((uint8_t*)p_hdr + BUFFER_HDR_SIZE));
-    }
-  }
-
-  GKI_TRACE_ERROR_0("GKI_getbuf() unable to allocate buffer!!!!!");
-#if (GKI_BUFFER_DEBUG == TRUE)
-  LOGD("GKI_getbuf() unable to allocate buffer!!!!!");
-  LOGD("******************** GKI Memory Pool Dump ********************");
-
-  p_cb = &gki_cb.com;
-
-  LOGD("Dumping total of %d buffer pools", p_cb->curr_total_no_of_pools);
-
-  for (i = 0; i < p_cb->curr_total_no_of_pools; i++) {
-    p_hdr = (BUFFER_HDR_T*)p_cb->pool_start[i];
-
-    LOGD("pool %d has a total of %d buffers (start=%p)", i,
-         p_cb->freeq[i].total, p_hdr);
-
-    for (x = 0; p_hdr && x < p_cb->freeq[i].total; x++) {
-      if (p_hdr->status != BUF_STATUS_FREE) {
-        LOGD("pool:%d, buf[%d]:%x, hdr:%x status=%d func:%s(line=%d)", i, x,
-             (uint8_t*)p_hdr + BUFFER_HDR_SIZE, p_hdr, p_hdr->status,
-             p_hdr->_function, p_hdr->_line);
-      }
-
-      p_hdr = (BUFFER_HDR_T*)((uint8_t*)p_hdr + p_cb->pool_size[i]);
-    }
-  }
-  LOGD("**************************************************************");
-#endif
-
-  GKI_TRACE_ERROR_0("Failed to allocate GKI buffer");
-
-  GKI_enable();
-
-  return (NULL);
-}
-
-/*******************************************************************************
-**
-** Function         GKI_getpoolbuf
-**
-** Description      Called by an application to get a free buffer from
-**                  a specific buffer pool.
-**
-**                  Note: If there are no more buffers available from the pool,
-**                        the public buffers are searched for an available
-*buffer.
-**
-** Parameters       pool_id - (input) pool ID to get a buffer out of.
-**
-** Returns          A pointer to the buffer, or NULL if none available
-**
-*******************************************************************************/
-#if (GKI_BUFFER_DEBUG == TRUE)
-void* GKI_getpoolbuf_debug(uint8_t pool_id, const char* _function_, int _line_)
-#else
-void* GKI_getpoolbuf(uint8_t pool_id)
-#endif
-{
-  FREE_QUEUE_T* Q;
-  BUFFER_HDR_T* p_hdr;
-  tGKI_COM_CB* p_cb = &gki_cb.com;
-
-  if (pool_id >= GKI_NUM_TOTAL_BUF_POOLS) return (NULL);
-
-#if (GKI_BUFFER_DEBUG == TRUE)
-  LOGD("GKI_getpoolbuf() requesting from %d func:%s(line=%d)", pool_id,
-       _function_, _line_);
-#endif
-  /* Make sure the buffers aren't disturbed til finished with allocation */
-  GKI_disable();
-
-  Q = &p_cb->freeq[pool_id];
-  if (Q->cur_cnt < Q->total) {
-#if (GKI_USE_DEFERED_ALLOC_BUF_POOLS == TRUE)
-    if (Q->p_first == 0 && gki_alloc_free_queue(pool_id) != true) return NULL;
-#endif
-
-    if (Q->p_first == 0) {
-      /* gki_alloc_free_queue() failed to alloc memory */
-      GKI_TRACE_ERROR_0("GKI_getpoolbuf() fail alloc free queue");
-      return NULL;
-    }
-
-    p_hdr = Q->p_first;
-    Q->p_first = p_hdr->p_next;
-
-    if (!Q->p_first) Q->p_last = NULL;
-
-    if (++Q->cur_cnt > Q->max_cnt) Q->max_cnt = Q->cur_cnt;
-
-    GKI_enable();
-
-    p_hdr->task_id = GKI_get_taskid();
-
-    p_hdr->status = BUF_STATUS_UNLINKED;
-    p_hdr->p_next = NULL;
-    p_hdr->Type = 0;
-
-#if (GKI_BUFFER_DEBUG == TRUE)
-    LOGD("GKI_getpoolbuf() allocated, %x, %x (%d of %d used) %d",
-         (uint8_t*)p_hdr + BUFFER_HDR_SIZE, p_hdr, Q->cur_cnt, Q->total,
-         p_cb->freeq[pool_id].total);
-
-    strncpy(p_hdr->_function, _function_, _GKI_MAX_FUNCTION_NAME_LEN);
-    p_hdr->_function[_GKI_MAX_FUNCTION_NAME_LEN] = '\0';
-    p_hdr->_line = _line_;
-#endif
-    return ((void*)((uint8_t*)p_hdr + BUFFER_HDR_SIZE));
-  }
-
-  /* If here, no buffers in the specified pool */
-  GKI_enable();
-
-#if (GKI_BUFFER_DEBUG == TRUE)
-  /* try for free buffers in public pools */
-  return (GKI_getbuf_debug(p_cb->freeq[pool_id].size, _function_, _line_));
-#else
-  /* try for free buffers in public pools */
-  return (GKI_getbuf(p_cb->freeq[pool_id].size));
-#endif
-}
-
-/*******************************************************************************
-**
-** Function         GKI_freebuf
-**
-** Description      Called by an application to return a buffer to the free
-*pool.
-**
-** Parameters       p_buf - (input) address of the beginning of a buffer.
-**
-** Returns          void
-**
-*******************************************************************************/
-void GKI_freebuf(void* p_buf) {
-  FREE_QUEUE_T* Q;
-  BUFFER_HDR_T* p_hdr;
-
-#if (GKI_ENABLE_BUF_CORRUPTION_CHECK == TRUE)
-  if (!p_buf || gki_chk_buf_damage(p_buf)) {
-    GKI_exception(GKI_ERROR_BUF_CORRUPTED, "Free - Buf Corrupted");
-    return;
-  }
-#endif
-
-  p_hdr = (BUFFER_HDR_T*)((uint8_t*)p_buf - BUFFER_HDR_SIZE);
-
-#if (GKI_BUFFER_DEBUG == TRUE)
-  LOGD("GKI_freebuf() freeing, %x, %x, func:%s(line=%d)", p_buf, p_hdr,
-       p_hdr->_function, p_hdr->_line);
-#endif
-
-  if (p_hdr->status != BUF_STATUS_UNLINKED) {
-    GKI_exception(GKI_ERROR_FREEBUF_BUF_LINKED, "Freeing Linked Buf");
-    return;
-  }
-
-  if (p_hdr->q_id >= GKI_NUM_TOTAL_BUF_POOLS) {
-    GKI_exception(GKI_ERROR_FREEBUF_BAD_QID, "Bad Buf QId");
-    return;
-  }
-
-  GKI_disable();
-
-  /*
-  ** Release the buffer
-  */
-  Q = &gki_cb.com.freeq[p_hdr->q_id];
-  if (Q->p_last)
-    Q->p_last->p_next = p_hdr;
-  else
-    Q->p_first = p_hdr;
-
-  Q->p_last = p_hdr;
-  p_hdr->p_next = NULL;
-  p_hdr->status = BUF_STATUS_FREE;
-  p_hdr->task_id = GKI_INVALID_TASK;
-  if (Q->cur_cnt > 0) Q->cur_cnt--;
-
-  GKI_enable();
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         GKI_get_buf_size
-**
-** Description      Called by an application to get the size of a buffer.
-**
-** Parameters       p_buf - (input) address of the beginning of a buffer.
-**
-** Returns          the size of the buffer
-**
-*******************************************************************************/
-uint16_t GKI_get_buf_size(void* p_buf) {
-  BUFFER_HDR_T* p_hdr;
-
-  p_hdr = (BUFFER_HDR_T*)((uint8_t*)p_buf - BUFFER_HDR_SIZE);
-
-  if ((uint32_t)p_hdr & 1) return (0);
-
-  if (p_hdr->q_id < GKI_NUM_TOTAL_BUF_POOLS) {
-    return (gki_cb.com.freeq[p_hdr->q_id].size);
-  }
-
-  return (0);
-}
-
-/*******************************************************************************
-**
-** Function         gki_chk_buf_damage
-**
-** Description      Called internally by OSS to check for buffer corruption.
-**
-** Returns          TRUE if there is a problem, else FALSE
-**
-*******************************************************************************/
-bool gki_chk_buf_damage(void* p_buf) {
-#if (GKI_ENABLE_BUF_CORRUPTION_CHECK == TRUE)
-
-  uint32_t* magic;
-  magic = (uint32_t*)((uint8_t*)p_buf + GKI_get_buf_size(p_buf));
-
-  if ((uint32_t)magic & 1) return true;
-
-  if (*magic == MAGIC_NO) return false;
-
-  return true;
-
-#else
-
-  return false;
-
-#endif
-}
-
-/*******************************************************************************
-**
-** Function         GKI_send_msg
-**
-** Description      Called by applications to send a buffer to a task
-**
-** Returns          Nothing
-**
-*******************************************************************************/
-void GKI_send_msg(uint8_t task_id, uint8_t mbox, void* msg) {
-  BUFFER_HDR_T* p_hdr;
-  tGKI_COM_CB* p_cb = &gki_cb.com;
-
-  /* If task non-existant or not started, drop buffer */
-  if ((task_id >= GKI_MAX_TASKS) || (mbox >= NUM_TASK_MBOX) ||
-      (p_cb->OSRdyTbl[task_id] == TASK_DEAD)) {
-    GKI_exception(GKI_ERROR_SEND_MSG_BAD_DEST, "Sending to unknown dest");
-    GKI_freebuf(msg);
-    return;
-  }
-
-#if (GKI_ENABLE_BUF_CORRUPTION_CHECK == TRUE)
-  if (gki_chk_buf_damage(msg)) {
-    GKI_exception(GKI_ERROR_BUF_CORRUPTED, "Send - Buffer corrupted");
-    return;
-  }
-#endif
-
-  p_hdr = (BUFFER_HDR_T*)((uint8_t*)msg - BUFFER_HDR_SIZE);
-
-  if (p_hdr->status != BUF_STATUS_UNLINKED) {
-    GKI_exception(GKI_ERROR_SEND_MSG_BUF_LINKED, "Send - buffer linked");
-    return;
-  }
-
-  GKI_disable();
-
-  if (p_cb->OSTaskQFirst[task_id][mbox])
-    p_cb->OSTaskQLast[task_id][mbox]->p_next = p_hdr;
-  else
-    p_cb->OSTaskQFirst[task_id][mbox] = p_hdr;
-
-  p_cb->OSTaskQLast[task_id][mbox] = p_hdr;
-
-  p_hdr->p_next = NULL;
-  p_hdr->status = BUF_STATUS_QUEUED;
-  p_hdr->task_id = task_id;
-
-  GKI_enable();
-
-  GKI_send_event(task_id, (uint16_t)EVENT_MASK(mbox));
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         GKI_read_mbox
-**
-** Description      Called by applications to read a buffer from one of
-**                  the task mailboxes.  A task can only read its own mailbox.
-**
-** Parameters:      mbox  - (input) mailbox ID to read (0, 1, 2, or 3)
-**
-** Returns          NULL if the mailbox was empty, else the address of a buffer
-**
-*******************************************************************************/
-void* GKI_read_mbox(uint8_t mbox) {
-  uint8_t task_id = GKI_get_taskid();
-  void* p_buf = NULL;
-  BUFFER_HDR_T* p_hdr;
-
-  if ((task_id >= GKI_MAX_TASKS) || (mbox >= NUM_TASK_MBOX)) return (NULL);
-
-  GKI_disable();
-
-  if (gki_cb.com.OSTaskQFirst[task_id][mbox]) {
-    p_hdr = gki_cb.com.OSTaskQFirst[task_id][mbox];
-    gki_cb.com.OSTaskQFirst[task_id][mbox] = p_hdr->p_next;
-
-    p_hdr->p_next = NULL;
-    p_hdr->status = BUF_STATUS_UNLINKED;
-
-    p_buf = (uint8_t*)p_hdr + BUFFER_HDR_SIZE;
-  }
-
-  GKI_enable();
-
-  return (p_buf);
-}
-
-/*******************************************************************************
-**
-** Function         GKI_enqueue
-**
-** Description      Enqueue a buffer at the tail of the queue
-**
-** Parameters:      p_q  -  (input) pointer to a queue.
-**                  p_buf - (input) address of the buffer to enqueue
-**
-** Returns          void
-**
-*******************************************************************************/
-void GKI_enqueue(BUFFER_Q* p_q, void* p_buf) {
-  BUFFER_HDR_T* p_hdr;
-
-#if (GKI_ENABLE_BUF_CORRUPTION_CHECK == TRUE)
-  if (gki_chk_buf_damage(p_buf)) {
-    GKI_exception(GKI_ERROR_BUF_CORRUPTED, "Enqueue - Buffer corrupted");
-    return;
-  }
-#endif
-
-  p_hdr = (BUFFER_HDR_T*)((uint8_t*)p_buf - BUFFER_HDR_SIZE);
-
-  if (p_hdr->status != BUF_STATUS_UNLINKED) {
-    GKI_exception(GKI_ERROR_ENQUEUE_BUF_LINKED, "Eneueue - buf already linked");
-    return;
-  }
-
-  GKI_disable();
-
-  /* Since the queue is exposed (C vs C++), keep the pointers in exposed format
-   */
-  if (p_q->p_first) {
-    BUFFER_HDR_T* p_last_hdr =
-        (BUFFER_HDR_T*)((uint8_t*)p_q->p_last - BUFFER_HDR_SIZE);
-    p_last_hdr->p_next = p_hdr;
-  } else
-    p_q->p_first = p_buf;
-
-  p_q->p_last = p_buf;
-  p_q->count++;
-
-  p_hdr->p_next = NULL;
-  p_hdr->status = BUF_STATUS_QUEUED;
-
-  GKI_enable();
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         GKI_enqueue_head
-**
-** Description      Enqueue a buffer at the head of the queue
-**
-** Parameters:      p_q  -  (input) pointer to a queue.
-**                  p_buf - (input) address of the buffer to enqueue
-**
-** Returns          void
-**
-*******************************************************************************/
-void GKI_enqueue_head(BUFFER_Q* p_q, void* p_buf) {
-  BUFFER_HDR_T* p_hdr;
-
-#if (GKI_ENABLE_BUF_CORRUPTION_CHECK == TRUE)
-  if (gki_chk_buf_damage(p_buf)) {
-    GKI_exception(GKI_ERROR_BUF_CORRUPTED, "Enqueue - Buffer corrupted");
-    return;
-  }
-#endif
-
-  p_hdr = (BUFFER_HDR_T*)((uint8_t*)p_buf - BUFFER_HDR_SIZE);
-
-  if (p_hdr->status != BUF_STATUS_UNLINKED) {
-    GKI_exception(GKI_ERROR_ENQUEUE_BUF_LINKED,
-                  "Eneueue head - buf already linked");
-    return;
-  }
-
-  GKI_disable();
-
-  if (p_q->p_first) {
-    p_hdr->p_next = (BUFFER_HDR_T*)((uint8_t*)p_q->p_first - BUFFER_HDR_SIZE);
-    p_q->p_first = p_buf;
-  } else {
-    p_q->p_first = p_buf;
-    p_q->p_last = p_buf;
-    p_hdr->p_next = NULL;
-  }
-  p_q->count++;
-
-  p_hdr->status = BUF_STATUS_QUEUED;
-
-  GKI_enable();
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         GKI_dequeue
-**
-** Description      Dequeues a buffer from the head of a queue
-**
-** Parameters:      p_q  - (input) pointer to a queue.
-**
-** Returns          NULL if queue is empty, else buffer
-**
-*******************************************************************************/
-void* GKI_dequeue(BUFFER_Q* p_q) {
-  BUFFER_HDR_T* p_hdr;
-
-  GKI_disable();
-
-  if (!p_q || !p_q->count) {
-    GKI_enable();
-    return (NULL);
-  }
-
-  p_hdr = (BUFFER_HDR_T*)((uint8_t*)p_q->p_first - BUFFER_HDR_SIZE);
-
-  /* Keep buffers such that GKI header is invisible
-  */
-  if (p_hdr->p_next)
-    p_q->p_first = ((uint8_t*)p_hdr->p_next + BUFFER_HDR_SIZE);
-  else {
-    p_q->p_first = NULL;
-    p_q->p_last = NULL;
-  }
-
-  p_q->count--;
-
-  p_hdr->p_next = NULL;
-  p_hdr->status = BUF_STATUS_UNLINKED;
-
-  GKI_enable();
-
-  return ((uint8_t*)p_hdr + BUFFER_HDR_SIZE);
-}
-
-/*******************************************************************************
-**
-** Function         GKI_remove_from_queue
-**
-** Description      Dequeue a buffer from the middle of the queue
-**
-** Parameters:      p_q  - (input) pointer to a queue.
-**                  p_buf - (input) address of the buffer to enqueue
-**
-** Returns          NULL if queue is empty, else buffer
-**
-*******************************************************************************/
-void* GKI_remove_from_queue(BUFFER_Q* p_q, void* p_buf) {
-  BUFFER_HDR_T* p_prev;
-  BUFFER_HDR_T* p_buf_hdr;
-
-  GKI_disable();
-
-  if (p_buf == p_q->p_first) {
-    GKI_enable();
-    return (GKI_dequeue(p_q));
-  }
-
-  p_buf_hdr = (BUFFER_HDR_T*)((uint8_t*)p_buf - BUFFER_HDR_SIZE);
-  p_prev = (BUFFER_HDR_T*)((uint8_t*)p_q->p_first - BUFFER_HDR_SIZE);
-
-  for (; p_prev; p_prev = p_prev->p_next) {
-    /* If the previous points to this one, move the pointers around */
-    if (p_prev->p_next == p_buf_hdr) {
-      p_prev->p_next = p_buf_hdr->p_next;
-
-      /* If we are removing the last guy in the queue, update p_last */
-      if (p_buf == p_q->p_last) p_q->p_last = p_prev + 1;
-
-      /* One less in the queue */
-      p_q->count--;
-
-      /* The buffer is now unlinked */
-      p_buf_hdr->p_next = NULL;
-      p_buf_hdr->status = BUF_STATUS_UNLINKED;
-
-      GKI_enable();
-      return (p_buf);
-    }
-  }
-
-  GKI_enable();
-  return (NULL);
-}
-
-/*******************************************************************************
-**
-** Function         GKI_getfirst
-**
-** Description      Return a pointer to the first buffer in a queue
-**
-** Parameters:      p_q  - (input) pointer to a queue.
-**
-** Returns          NULL if queue is empty, else buffer address
-**
-*******************************************************************************/
-void* GKI_getfirst(BUFFER_Q* p_q) { return (p_q->p_first); }
-
-/*******************************************************************************
-**
-** Function         GKI_getlast
-**
-** Description      Return a pointer to the last buffer in a queue
-**
-** Parameters:      p_q  - (input) pointer to a queue.
-**
-** Returns          NULL if queue is empty, else buffer address
-**
-*******************************************************************************/
-void* GKI_getlast(BUFFER_Q* p_q) { return (p_q->p_last); }
-
-/*******************************************************************************
-**
-** Function         GKI_getnext
-**
-** Description      Return a pointer to the next buffer in a queue
-**
-** Parameters:      p_buf  - (input) pointer to the buffer to find the next one
-*from.
-**
-** Returns          NULL if no more buffers in the queue, else next buffer
-*address
-**
-*******************************************************************************/
-void* GKI_getnext(void* p_buf) {
-  BUFFER_HDR_T* p_hdr;
-
-  p_hdr = (BUFFER_HDR_T*)((uint8_t*)p_buf - BUFFER_HDR_SIZE);
-
-  if (p_hdr->p_next)
-    return ((uint8_t*)p_hdr->p_next + BUFFER_HDR_SIZE);
-  else
-    return (NULL);
-}
-
-/*******************************************************************************
-**
-** Function         GKI_queue_is_empty
-**
-** Description      Check the status of a queue.
-**
-** Parameters:      p_q  - (input) pointer to a queue.
-**
-** Returns          TRUE if queue is empty, else FALSE
-**
-*******************************************************************************/
-bool GKI_queue_is_empty(BUFFER_Q* p_q) { return ((bool)(p_q->count == 0)); }
-
-/*******************************************************************************
-**
-** Function         GKI_find_buf_start
-**
-** Description      This function is called with an address inside a buffer,
-**                  and returns the start address ofthe buffer.
-**
-**                  The buffer should be one allocated from one of GKI's pools.
-**
-** Parameters:      p_user_area - (input) address of anywhere in a GKI buffer.
-**
-** Returns          void * - Address of the beginning of the specified buffer if
-*successful,
-**                          otherwise NULL if unsuccessful
-**
-*******************************************************************************/
-void* GKI_find_buf_start(void* p_user_area) {
-  uint16_t xx, size;
-  uint32_t yy;
-  tGKI_COM_CB* p_cb = &gki_cb.com;
-  uint8_t* p_ua = (uint8_t*)p_user_area;
-
-  for (xx = 0; xx < GKI_NUM_TOTAL_BUF_POOLS; xx++) {
-    if ((p_ua > p_cb->pool_start[xx]) && (p_ua < p_cb->pool_end[xx])) {
-      yy = (uint32_t)(p_ua - p_cb->pool_start[xx]);
-
-      size = p_cb->pool_size[xx];
-
-      yy = (yy / size) * size;
-
-      return ((void*)(p_cb->pool_start[xx] + yy + sizeof(BUFFER_HDR_T)));
-    }
-  }
-
-  /* If here, invalid address - not in one of our buffers */
-  GKI_exception(GKI_ERROR_BUF_SIZE_ZERO, "GKI_get_buf_start:: bad addr");
-
-  return (NULL);
-}
-
-/********************************************************
-* The following functions are not needed for light stack
-*********************************************************/
-#ifndef BTU_STACK_LITE_ENABLED
-#define BTU_STACK_LITE_ENABLED FALSE
-#endif
-
-#if (BTU_STACK_LITE_ENABLED == FALSE)
-
-/*******************************************************************************
-**
-** Function         GKI_set_pool_permission
-**
-** Description      This function is called to set or change the permissions for
-**                  the specified pool ID.
-**
-** Parameters       pool_id -       (input) pool ID to be set or changed
-**                  permission -    (input) GKI_PUBLIC_POOL or
-*GKI_RESTRICTED_POOL
-**
-** Returns          GKI_SUCCESS if successful
-**                  GKI_INVALID_POOL if unsuccessful
-**
-*******************************************************************************/
-uint8_t GKI_set_pool_permission(uint8_t pool_id, uint8_t permission) {
-  tGKI_COM_CB* p_cb = &gki_cb.com;
-
-  if (pool_id < GKI_NUM_TOTAL_BUF_POOLS) {
-    if (permission == GKI_RESTRICTED_POOL)
-      p_cb->pool_access_mask =
-          (uint16_t)(p_cb->pool_access_mask | (1 << pool_id));
-
-    else /* mark the pool as public */
-      p_cb->pool_access_mask =
-          (uint16_t)(p_cb->pool_access_mask & ~(1 << pool_id));
-
-    return (GKI_SUCCESS);
-  } else
-    return (GKI_INVALID_POOL);
-}
-
-/*******************************************************************************
-**
-** Function         gki_add_to_pool_list
-**
-** Description      Adds pool to the pool list which is arranged in the
-**                  order of size
-**
-** Returns          void
-**
-*******************************************************************************/
-static void gki_add_to_pool_list(uint8_t pool_id) {
-  int32_t i, j;
-  tGKI_COM_CB* p_cb = &gki_cb.com;
-
-  /* Find the position where the specified pool should be inserted into the list
-   */
-  for (i = 0; i < p_cb->curr_total_no_of_pools; i++) {
-    if (p_cb->freeq[pool_id].size <= p_cb->freeq[p_cb->pool_list[i]].size)
-      break;
-  }
-
-  /* Insert the new buffer pool ID into the list of pools */
-  for (j = p_cb->curr_total_no_of_pools; j > i; j--) {
-    p_cb->pool_list[j] = p_cb->pool_list[j - 1];
-  }
-
-  p_cb->pool_list[i] = pool_id;
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         gki_remove_from_pool_list
-**
-** Description      Removes pool from the pool list. Called when a pool is
-*deleted
-**
-** Returns          void
-**
-*******************************************************************************/
-static void gki_remove_from_pool_list(uint8_t pool_id) {
-  tGKI_COM_CB* p_cb = &gki_cb.com;
-  uint8_t i;
-
-  for (i = 0; i < p_cb->curr_total_no_of_pools; i++) {
-    if (pool_id == p_cb->pool_list[i]) break;
-  }
-
-  while (i < (p_cb->curr_total_no_of_pools - 1)) {
-    p_cb->pool_list[i] = p_cb->pool_list[i + 1];
-    i++;
-  }
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         GKI_igetpoolbuf
-**
-** Description      Called by an interrupt service routine to get a free buffer
-*from
-**                  a specific buffer pool.
-**
-** Parameters       pool_id - (input) pool ID to get a buffer out of.
-**
-** Returns          A pointer to the buffer, or NULL if none available
-**
-*******************************************************************************/
-void* GKI_igetpoolbuf(uint8_t pool_id) {
-  FREE_QUEUE_T* Q;
-  BUFFER_HDR_T* p_hdr;
-
-  if (pool_id >= GKI_NUM_TOTAL_BUF_POOLS) return (NULL);
-
-  Q = &gki_cb.com.freeq[pool_id];
-  if (Q->cur_cnt < Q->total) {
-    p_hdr = Q->p_first;
-    Q->p_first = p_hdr->p_next;
-
-    if (!Q->p_first) Q->p_last = NULL;
-
-    if (++Q->cur_cnt > Q->max_cnt) Q->max_cnt = Q->cur_cnt;
-
-    p_hdr->task_id = GKI_get_taskid();
-
-    p_hdr->status = BUF_STATUS_UNLINKED;
-    p_hdr->p_next = NULL;
-    p_hdr->Type = 0;
-
-    return ((void*)((uint8_t*)p_hdr + BUFFER_HDR_SIZE));
-  }
-
-  return (NULL);
-}
-
-/*******************************************************************************
-**
-** Function         GKI_poolcount
-**
-** Description      Called by an application to get the total number of buffers
-**                  in the specified buffer pool.
-**
-** Parameters       pool_id - (input) pool ID to get the free count of.
-**
-** Returns          the total number of buffers in the pool
-**
-*******************************************************************************/
-uint16_t GKI_poolcount(uint8_t pool_id) {
-  if (pool_id >= GKI_NUM_TOTAL_BUF_POOLS) return (0);
-
-  return (gki_cb.com.freeq[pool_id].total);
-}
-
-/*******************************************************************************
-**
-** Function         GKI_poolfreecount
-**
-** Description      Called by an application to get the number of free buffers
-**                  in the specified buffer pool.
-**
-** Parameters       pool_id - (input) pool ID to get the free count of.
-**
-** Returns          the number of free buffers in the pool
-**
-*******************************************************************************/
-uint16_t GKI_poolfreecount(uint8_t pool_id) {
-  FREE_QUEUE_T* Q;
-
-  if (pool_id >= GKI_NUM_TOTAL_BUF_POOLS) return (0);
-
-  Q = &gki_cb.com.freeq[pool_id];
-
-  return ((uint16_t)(Q->total - Q->cur_cnt));
-}
-
-/*******************************************************************************
-**
-** Function         GKI_change_buf_owner
-**
-** Description      Called to change the task ownership of a buffer.
-**
-** Parameters:      p_buf   - (input) pointer to the buffer
-**                  task_id - (input) task id to change ownership to
-**
-** Returns          void
-**
-*******************************************************************************/
-void GKI_change_buf_owner(void* p_buf, uint8_t task_id) {
-  BUFFER_HDR_T* p_hdr = (BUFFER_HDR_T*)((uint8_t*)p_buf - BUFFER_HDR_SIZE);
-
-  p_hdr->task_id = task_id;
-
-  return;
-}
-
-#if (GKI_SEND_MSG_FROM_ISR == TRUE)
-/*******************************************************************************
-**
-** Function         GKI_isend_msg
-**
-** Description      Called from interrupt context to send a buffer to a task
-**
-** Returns          Nothing
-**
-*******************************************************************************/
-void GKI_isend_msg(uint8_t task_id, uint8_t mbox, void* msg) {
-  BUFFER_HDR_T* p_hdr;
-  tGKI_COM_CB* p_cb = &gki_cb.com;
-
-  /* If task non-existant or not started, drop buffer */
-  if ((task_id >= GKI_MAX_TASKS) || (mbox >= NUM_TASK_MBOX) ||
-      (p_cb->OSRdyTbl[task_id] == TASK_DEAD)) {
-    GKI_exception(GKI_ERROR_SEND_MSG_BAD_DEST, "Sending to unknown dest");
-    GKI_freebuf(msg);
-    return;
-  }
-
-#if (GKI_ENABLE_BUF_CORRUPTION_CHECK == TRUE)
-  if (gki_chk_buf_damage(msg)) {
-    GKI_exception(GKI_ERROR_BUF_CORRUPTED, "Send - Buffer corrupted");
-    return;
-  }
-#endif
-
-#if (GKI_ENABLE_OWNER_CHECK == TRUE)
-  if (gki_chk_buf_owner(msg)) {
-    GKI_exception(GKI_ERROR_NOT_BUF_OWNER, "Send by non-owner");
-    return;
-  }
-#endif
-
-  p_hdr = (BUFFER_HDR_T*)((uint8_t*)msg - BUFFER_HDR_SIZE);
-
-  if (p_hdr->status != BUF_STATUS_UNLINKED) {
-    GKI_exception(GKI_ERROR_SEND_MSG_BUF_LINKED, "Send - buffer linked");
-    return;
-  }
-
-  if (p_cb->OSTaskQFirst[task_id][mbox])
-    p_cb->OSTaskQLast[task_id][mbox]->p_next = p_hdr;
-  else
-    p_cb->OSTaskQFirst[task_id][mbox] = p_hdr;
-
-  p_cb->OSTaskQLast[task_id][mbox] = p_hdr;
-
-  p_hdr->p_next = NULL;
-  p_hdr->status = BUF_STATUS_QUEUED;
-  p_hdr->task_id = task_id;
-
-  GKI_isend_event(task_id, (uint16_t)EVENT_MASK(mbox));
-
-  return;
-}
-#endif
-
-/*******************************************************************************
-**
-** Function         GKI_create_pool
-**
-** Description      Called by applications to create a buffer pool.
-**
-** Parameters:      size        - (input) length (in bytes) of each buffer in
-*the pool
-**                  count       - (input) number of buffers to allocate for the
-*pool
-**                  permission  - (input) restricted or public access?
-**                                        (GKI_PUBLIC_POOL or
-*GKI_RESTRICTED_POOL)
-**                  p_mem_pool  - (input) pointer to an OS memory pool, NULL if
-*not provided
-**
-** Returns          the buffer pool ID, which should be used in calls to
-**                  GKI_getpoolbuf(). If a pool could not be created, this
-**                  function returns 0xff.
-**
-*******************************************************************************/
-uint8_t GKI_create_pool(uint16_t size, uint16_t count, uint8_t permission,
-                        void* p_mem_pool) {
-  uint8_t xx;
-  uint32_t mem_needed;
-  int32_t tempsize = size;
-  tGKI_COM_CB* p_cb = &gki_cb.com;
-
-  /* First make sure the size of each pool has a valid size with room for the
-   * header info */
-  if (size > MAX_USER_BUF_SIZE) return (GKI_INVALID_POOL);
-
-  /* First, look for an unused pool */
-  for (xx = 0; xx < GKI_NUM_TOTAL_BUF_POOLS; xx++) {
-    if (!p_cb->pool_start[xx]) break;
-  }
-
-  if (xx == GKI_NUM_TOTAL_BUF_POOLS) return (GKI_INVALID_POOL);
-
-  /* Ensure an even number of longwords */
-  tempsize = (int32_t)ALIGN_POOL(size);
-
-  mem_needed = (tempsize + BUFFER_PADDING_SIZE) * count;
-
-  if (!p_mem_pool) p_mem_pool = GKI_os_malloc(mem_needed);
-
-  if (p_mem_pool) {
-    /* Initialize the new pool */
-    gki_init_free_queue(xx, size, count, p_mem_pool);
-    gki_add_to_pool_list(xx);
-    (void)GKI_set_pool_permission(xx, permission);
-    p_cb->curr_total_no_of_pools++;
-
-    return (xx);
-  } else
-    return (GKI_INVALID_POOL);
-}
-
-/*******************************************************************************
-**
-** Function         GKI_delete_pool
-**
-** Description      Called by applications to delete a buffer pool.  The
-*function
-**                  calls the operating specific function to free the actual
-*memory.
-**                  An exception is generated if an error is detected.
-**
-** Parameters:      pool_id - (input) Id of the poll being deleted.
-**
-** Returns          void
-**
-*******************************************************************************/
-void GKI_delete_pool(uint8_t pool_id) {
-  FREE_QUEUE_T* Q;
-  tGKI_COM_CB* p_cb = &gki_cb.com;
-
-  if ((pool_id >= GKI_NUM_TOTAL_BUF_POOLS) || (!p_cb->pool_start[pool_id]))
-    return;
-
-  GKI_disable();
-  Q = &p_cb->freeq[pool_id];
-
-  if (!Q->cur_cnt) {
-    Q->size = 0;
-    Q->total = 0;
-    Q->cur_cnt = 0;
-    Q->max_cnt = 0;
-    Q->p_first = NULL;
-    Q->p_last = NULL;
-
-    GKI_os_free(p_cb->pool_start[pool_id]);
-
-    p_cb->pool_start[pool_id] = NULL;
-    p_cb->pool_end[pool_id] = NULL;
-    p_cb->pool_size[pool_id] = 0;
-
-    gki_remove_from_pool_list(pool_id);
-    p_cb->curr_total_no_of_pools--;
-  } else
-    GKI_exception(GKI_ERROR_DELETE_POOL_BAD_QID, "Deleting bad pool");
-
-  GKI_enable();
-
-  return;
-}
-
-#endif /*  BTU_STACK_LITE_ENABLED == FALSE */
-
-/*******************************************************************************
-**
-** Function         GKI_get_pool_bufsize
-**
-** Description      Called by an application to get the size of buffers in a
-*pool
-**
-** Parameters       Pool ID.
-**
-** Returns          the size of buffers in the pool
-**
-*******************************************************************************/
-uint16_t GKI_get_pool_bufsize(uint8_t pool_id) {
-  if (pool_id < GKI_NUM_TOTAL_BUF_POOLS)
-    return (gki_cb.com.freeq[pool_id].size);
-
-  return (0);
-}
-
-/*******************************************************************************
-**
-** Function         GKI_poolutilization
-**
-** Description      Called by an application to get the buffer utilization
-**                  in the specified buffer pool.
-**
-** Parameters       pool_id - (input) pool ID to get the free count of.
-**
-** Returns          % of buffers used from 0 to 100
-**
-*******************************************************************************/
-uint16_t GKI_poolutilization(uint8_t pool_id) {
-  FREE_QUEUE_T* Q;
-
-  if (pool_id >= GKI_NUM_TOTAL_BUF_POOLS) return (100);
-
-  Q = &gki_cb.com.freeq[pool_id];
-
-  if (Q->total == 0) return (100);
-
-  return ((Q->cur_cnt * 100) / Q->total);
-}
diff --git a/halimpl/bcm2079x/gki/common/gki_common.h b/halimpl/bcm2079x/gki/common/gki_common.h
deleted file mode 100644
index f44e292..0000000
--- a/halimpl/bcm2079x/gki/common/gki_common.h
+++ /dev/null
@@ -1,419 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 1999-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-#ifndef GKI_COMMON_H
-#define GKI_COMMON_H
-
-#include "gki.h"
-
-#ifndef GKI_DEBUG
-#define GKI_DEBUG FALSE
-#endif
-
-/* Task States: (For OSRdyTbl) */
-#define TASK_DEAD 0    /* b0000 */
-#define TASK_READY 1   /* b0001 */
-#define TASK_WAIT 2    /* b0010 */
-#define TASK_DELAY 4   /* b0100 */
-#define TASK_SUSPEND 8 /* b1000 */
-
-/********************************************************************
-**  Internal Error codes
-*********************************************************************/
-#define GKI_ERROR_BUF_CORRUPTED 0xFFFF
-#define GKI_ERROR_NOT_BUF_OWNER 0xFFFE
-#define GKI_ERROR_FREEBUF_BAD_QID 0xFFFD
-#define GKI_ERROR_FREEBUF_BUF_LINKED 0xFFFC
-#define GKI_ERROR_SEND_MSG_BAD_DEST 0xFFFB
-#define GKI_ERROR_SEND_MSG_BUF_LINKED 0xFFFA
-#define GKI_ERROR_ENQUEUE_BUF_LINKED 0xFFF9
-#define GKI_ERROR_DELETE_POOL_BAD_QID 0xFFF8
-#define GKI_ERROR_BUF_SIZE_TOOBIG 0xFFF7
-#define GKI_ERROR_BUF_SIZE_ZERO 0xFFF6
-#define GKI_ERROR_ADDR_NOT_IN_BUF 0xFFF5
-
-/********************************************************************
-**  Misc constants
-*********************************************************************/
-
-#define GKI_MAX_INT32 (0x7fffffffL)
-#define GKI_MAX_TIMESTAMP (0xffffffffL)
-
-/********************************************************************
-**  Buffer Management Data Structures
-*********************************************************************/
-
-typedef struct _buffer_hdr {
-  struct _buffer_hdr* p_next; /* next buffer in the queue */
-  uint8_t q_id;               /* id of the queue */
-  uint8_t task_id;            /* task which allocated the buffer*/
-  uint8_t status;             /* FREE, UNLINKED or QUEUED */
-  uint8_t Type;
-
-#if (GKI_BUFFER_DEBUG == TRUE)
-/* for tracking who allocated the buffer */
-#define _GKI_MAX_FUNCTION_NAME_LEN (50)
-  char _function[_GKI_MAX_FUNCTION_NAME_LEN + 1];
-  int _line;
-#endif
-
-} BUFFER_HDR_T;
-
-typedef struct _free_queue {
-  BUFFER_HDR_T* p_first; /* first buffer in the queue */
-  BUFFER_HDR_T* p_last;  /* last buffer in the queue */
-  uint16_t size;         /* size of the buffers in the pool */
-  uint16_t total;        /* toatal number of buffers */
-  uint16_t cur_cnt;      /* number of  buffers currently allocated */
-  uint16_t max_cnt;      /* maximum number of buffers allocated at any time */
-} FREE_QUEUE_T;
-
-/* Buffer related defines
-*/
-#define ALIGN_POOL(pl_size) \
-  ((((pl_size) + 3) / sizeof(uint32_t)) * sizeof(uint32_t))
-/* Offset past header */
-#define BUFFER_HDR_SIZE (sizeof(BUFFER_HDR_T))
-/* Header + Magic Number */
-#define BUFFER_PADDING_SIZE (sizeof(BUFFER_HDR_T) + sizeof(uint32_t))
-/* pool size must allow for header */
-#define MAX_USER_BUF_SIZE ((uint16_t)0xffff - BUFFER_PADDING_SIZE)
-#define MAGIC_NO 0xDDBADDBA
-
-#define BUF_STATUS_FREE 0
-#define BUF_STATUS_UNLINKED 1
-#define BUF_STATUS_QUEUED 2
-
-#define GKI_USE_DEFERED_ALLOC_BUF_POOLS TRUE
-
-/* Exception related structures (Used in debug mode only)
-*/
-#if (GKI_DEBUG == TRUE)
-typedef struct {
-  uint16_t type;
-  uint8_t taskid;
-  uint8_t msg[GKI_MAX_EXCEPTION_MSGLEN];
-} EXCEPTION_T;
-#endif
-
-/* Put all GKI variables into one control block
-*/
-typedef struct {
-/* Task management variables
-*/
-/* The stack and stack size are not used on Windows
-*/
-#if (GKI_USE_DYNAMIC_BUFFERS == FALSE)
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 0)
-  uint8_t bufpool0[(ALIGN_POOL(GKI_BUF0_SIZE) + BUFFER_PADDING_SIZE) *
-                   GKI_BUF0_MAX];
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 1)
-  uint8_t bufpool1[(ALIGN_POOL(GKI_BUF1_SIZE) + BUFFER_PADDING_SIZE) *
-                   GKI_BUF1_MAX];
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 2)
-  uint8_t bufpool2[(ALIGN_POOL(GKI_BUF2_SIZE) + BUFFER_PADDING_SIZE) *
-                   GKI_BUF2_MAX];
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 3)
-  uint8_t bufpool3[(ALIGN_POOL(GKI_BUF3_SIZE) + BUFFER_PADDING_SIZE) *
-                   GKI_BUF3_MAX];
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 4)
-  uint8_t bufpool4[(ALIGN_POOL(GKI_BUF4_SIZE) + BUFFER_PADDING_SIZE) *
-                   GKI_BUF4_MAX];
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 5)
-  uint8_t bufpool5[(ALIGN_POOL(GKI_BUF5_SIZE) + BUFFER_PADDING_SIZE) *
-                   GKI_BUF5_MAX];
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 6)
-  uint8_t bufpool6[(ALIGN_POOL(GKI_BUF6_SIZE) + BUFFER_PADDING_SIZE) *
-                   GKI_BUF6_MAX];
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 7)
-  uint8_t bufpool7[(ALIGN_POOL(GKI_BUF7_SIZE) + BUFFER_PADDING_SIZE) *
-                   GKI_BUF7_MAX];
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 8)
-  uint8_t bufpool8[(ALIGN_POOL(GKI_BUF8_SIZE) + BUFFER_PADDING_SIZE) *
-                   GKI_BUF8_MAX];
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 9)
-  uint8_t bufpool9[(ALIGN_POOL(GKI_BUF9_SIZE) + BUFFER_PADDING_SIZE) *
-                   GKI_BUF9_MAX];
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 10)
-  uint8_t bufpool10[(ALIGN_POOL(GKI_BUF10_SIZE) + BUFFER_PADDING_SIZE) *
-                    GKI_BUF10_MAX];
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 11)
-  uint8_t bufpool11[(ALIGN_POOL(GKI_BUF11_SIZE) + BUFFER_PADDING_SIZE) *
-                    GKI_BUF11_MAX];
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 12)
-  uint8_t bufpool12[(ALIGN_POOL(GKI_BUF12_SIZE) + BUFFER_PADDING_SIZE) *
-                    GKI_BUF12_MAX];
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 13)
-  uint8_t bufpool13[(ALIGN_POOL(GKI_BUF13_SIZE) + BUFFER_PADDING_SIZE) *
-                    GKI_BUF13_MAX];
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 14)
-  uint8_t bufpool14[(ALIGN_POOL(GKI_BUF14_SIZE) + BUFFER_PADDING_SIZE) *
-                    GKI_BUF14_MAX];
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 15)
-  uint8_t bufpool15[(ALIGN_POOL(GKI_BUF15_SIZE) + BUFFER_PADDING_SIZE) *
-                    GKI_BUF15_MAX];
-#endif
-
-#else
-/* Definitions for dynamic buffer use */
-#if (GKI_NUM_FIXED_BUF_POOLS > 0)
-  uint8_t* bufpool0;
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 1)
-  uint8_t* bufpool1;
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 2)
-  uint8_t* bufpool2;
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 3)
-  uint8_t* bufpool3;
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 4)
-  uint8_t* bufpool4;
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 5)
-  uint8_t* bufpool5;
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 6)
-  uint8_t* bufpool6;
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 7)
-  uint8_t* bufpool7;
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 8)
-  uint8_t* bufpool8;
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 9)
-  uint8_t* bufpool9;
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 10)
-  uint8_t* bufpool10;
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 11)
-  uint8_t* bufpool11;
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 12)
-  uint8_t* bufpool12;
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 13)
-  uint8_t* bufpool13;
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 14)
-  uint8_t* bufpool14;
-#endif
-
-#if (GKI_NUM_FIXED_BUF_POOLS > 15)
-  uint8_t* bufpool15;
-#endif
-
-#endif
-
-  uint8_t* OSStack[GKI_MAX_TASKS];     /* pointer to beginning of stack */
-  uint16_t OSStackSize[GKI_MAX_TASKS]; /* stack size available to each task */
-
-  int8_t* OSTName[GKI_MAX_TASKS]; /* name of the task */
-
-  uint8_t OSRdyTbl[GKI_MAX_TASKS]; /* current state of the task */
-  uint16_t OSWaitEvt
-      [GKI_MAX_TASKS]; /* events that have to be processed by the task */
-  uint16_t OSWaitForEvt[GKI_MAX_TASKS]; /* events the task is waiting for*/
-
-  uint32_t OSTicks;   /* system ticks from start */
-  uint32_t OSIdleCnt; /* idle counter */
-  int16_t
-      OSDisableNesting; /* counter to keep track of interrupt disable nesting */
-  int16_t OSLockNesting; /* counter to keep track of sched lock nesting */
-  int16_t OSIntNesting;  /* counter to keep track of interrupt nesting */
-
-  /* Timer related variables
-  */
-  int32_t OSTicksTilExp; /* Number of ticks till next timer expires */
-#if (GKI_DELAY_STOP_SYS_TICK > 0)
-  uint32_t OSTicksTilStop; /* inactivity delay timer; OS Ticks till stopping
-                              system tick */
-#endif
-  int32_t OSNumOrigTicks; /* Number of ticks between last timer expiration to
-                             the next one */
-
-  int32_t OSWaitTmr
-      [GKI_MAX_TASKS]; /* ticks the task has to wait, for specific events */
-
-/* Only take up space timers used in the system (GKI_NUM_TIMERS defined in
- * target.h) */
-#if (GKI_NUM_TIMERS > 0)
-  int32_t OSTaskTmr0[GKI_MAX_TASKS];
-  int32_t OSTaskTmr0R[GKI_MAX_TASKS];
-#endif
-
-#if (GKI_NUM_TIMERS > 1)
-  int32_t OSTaskTmr1[GKI_MAX_TASKS];
-  int32_t OSTaskTmr1R[GKI_MAX_TASKS];
-#endif
-
-#if (GKI_NUM_TIMERS > 2)
-  int32_t OSTaskTmr2[GKI_MAX_TASKS];
-  int32_t OSTaskTmr2R[GKI_MAX_TASKS];
-#endif
-
-#if (GKI_NUM_TIMERS > 3)
-  int32_t OSTaskTmr3[GKI_MAX_TASKS];
-  int32_t OSTaskTmr3R[GKI_MAX_TASKS];
-#endif
-
-  /* Buffer related variables
-  */
-  BUFFER_HDR_T* OSTaskQFirst[GKI_MAX_TASKS]
-                            [NUM_TASK_MBOX]; /* array of pointers to the first
-                                                event in the task mailbox */
-  BUFFER_HDR_T* OSTaskQLast[GKI_MAX_TASKS]
-                           [NUM_TASK_MBOX]; /* array of pointers to the last
-                                               event in the task mailbox */
-
-  /* Define the buffer pool management variables
-  */
-  FREE_QUEUE_T freeq[GKI_NUM_TOTAL_BUF_POOLS];
-
-  uint16_t pool_buf_size[GKI_NUM_TOTAL_BUF_POOLS];
-  uint16_t pool_max_count[GKI_NUM_TOTAL_BUF_POOLS];
-  uint16_t pool_additions[GKI_NUM_TOTAL_BUF_POOLS];
-
-  /* Define the buffer pool start addresses
-  */
-  uint8_t* pool_start[GKI_NUM_TOTAL_BUF_POOLS]; /* array of pointers to the
-                                                   start of each buffer pool */
-  uint8_t*
-      pool_end[GKI_NUM_TOTAL_BUF_POOLS]; /* array of pointers to the end of each
-                                            buffer pool */
-  uint16_t pool_size
-      [GKI_NUM_TOTAL_BUF_POOLS]; /* actual size of the buffers in a pool */
-
-  /* Define the buffer pool access control variables */
-  void* p_user_mempool; /* User O/S memory pool */
-  uint16_t
-      pool_access_mask; /* Bits are set if the corresponding buffer pool is a
-                           restricted pool */
-  uint8_t pool_list[GKI_NUM_TOTAL_BUF_POOLS]; /* buffer pools arranged in the
-                                                 order of size */
-  uint8_t
-      curr_total_no_of_pools; /* number of fixed buf pools + current number of
-                                 dynamic pools */
-
-  bool timer_nesting; /* flag to prevent timer interrupt nesting */
-
-  /* Time queue arrays */
-  TIMER_LIST_Q* timer_queues[GKI_MAX_TIMER_QUEUES];
-  /* System tick callback */
-  SYSTEM_TICK_CBACK* p_tick_cb;
-  bool system_tick_running; /* TRUE if system tick is running. Valid only if
-                               p_tick_cb is not NULL */
-
-#if (GKI_DEBUG == TRUE)
-  uint16_t ExceptionCnt; /* number of GKI exceptions that have happened */
-  EXCEPTION_T Exception[GKI_MAX_EXCEPTION];
-#endif
-
-} tGKI_COM_CB;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Internal GKI function prototypes
-*/
-extern bool gki_chk_buf_damage(void*);
-extern bool gki_chk_buf_owner(void*);
-extern void gki_buffer_init(void);
-extern void gki_timers_init(void);
-extern void gki_adjust_timer_count(int32_t);
-
-extern void OSStartRdy(void);
-extern void OSCtxSw(void);
-extern void OSIntCtxSw(void);
-extern void OSSched(void);
-extern void OSIntEnter(void);
-extern void OSIntExit(void);
-
-/* Debug aids
-*/
-typedef void (*FP_PRINT)(char*, ...);
-
-#if (GKI_DEBUG == TRUE)
-
-typedef void (*PKT_PRINT)(uint8_t*, uint16_t);
-
-extern void gki_print_task(FP_PRINT);
-extern void gki_print_exception(FP_PRINT);
-extern void gki_print_timer(FP_PRINT);
-extern void gki_print_stack(FP_PRINT);
-extern void gki_print_buffer(FP_PRINT);
-extern void gki_print_buffer_statistics(FP_PRINT, int16_t);
-extern void gki_print_used_bufs(FP_PRINT, uint8_t);
-extern void gki_dump(uint8_t*, uint16_t, FP_PRINT);
-extern void gki_dump2(uint16_t*, uint16_t, FP_PRINT);
-extern void gki_dump4(uint32_t*, uint16_t, FP_PRINT);
-
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/halimpl/bcm2079x/gki/common/gki_debug.c b/halimpl/bcm2079x/gki/common/gki_debug.c
deleted file mode 100644
index 33bd3b5..0000000
--- a/halimpl/bcm2079x/gki/common/gki_debug.c
+++ /dev/null
@@ -1,308 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 1999-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-#include "gki_int.h"
-
-#if (GKI_DEBUG == TRUE)
-
-const int8_t* const OSTaskStates[] = {
-    (int8_t*)"DEAD",                                                /* 0 */
-    (int8_t*)"REDY",                                                /* 1 */
-    (int8_t*)"WAIT",                                                /* 2 */
-    (int8_t*)"",     (int8_t*)"DELY",                               /* 4 */
-    (int8_t*)"",     (int8_t*)"",     (int8_t*)"", (int8_t*)"SUSP", /* 8 */
-};
-
-/*******************************************************************************
-**
-** Function         GKI_PrintBufferUsage
-**
-** Description      Displays Current Buffer Pool summary
-**
-** Returns          void
-**
-*******************************************************************************/
-void GKI_PrintBufferUsage(uint8_t* p_num_pools, uint16_t* p_cur_used) {
-  int i;
-  FREE_QUEUE_T* p;
-  uint8_t num = gki_cb.com.curr_total_no_of_pools;
-  uint16_t cur[GKI_NUM_TOTAL_BUF_POOLS];
-
-  GKI_TRACE_0("");
-  GKI_TRACE_0("--- GKI Buffer Pool Summary (R - restricted, P - public) ---");
-
-  GKI_TRACE_0("POOL     SIZE  USED  MAXU  TOTAL");
-  GKI_TRACE_0("------------------------------");
-  for (i = 0; i < gki_cb.com.curr_total_no_of_pools; i++) {
-    p = &gki_cb.com.freeq[i];
-    if ((1 << i) & gki_cb.com.pool_access_mask) {
-      GKI_TRACE_5("%02d: (R), %4d, %3d, %3d, %3d", i, p->size, p->cur_cnt,
-                  p->max_cnt, p->total);
-    } else {
-      GKI_TRACE_5("%02d: (P), %4d, %3d, %3d, %3d", i, p->size, p->cur_cnt,
-                  p->max_cnt, p->total);
-    }
-    cur[i] = p->cur_cnt;
-  }
-  if (p_num_pools) *p_num_pools = num;
-  if (p_cur_used) memcpy(p_cur_used, cur, num * 2);
-}
-
-/*******************************************************************************
-**
-** Function         GKI_PrintBuffer
-**
-** Description      Called internally by OSS to print the buffer pools
-**
-** Returns          void
-**
-*******************************************************************************/
-void GKI_PrintBuffer(void) {
-  uint16_t i;
-  for (i = 0; i < GKI_NUM_TOTAL_BUF_POOLS; i++) {
-    GKI_TRACE_5("pool:%4u free %4u cur %3u max %3u  total%3u", i,
-                gki_cb.com.freeq[i].size, gki_cb.com.freeq[i].cur_cnt,
-                gki_cb.com.freeq[i].max_cnt, gki_cb.com.freeq[i].total);
-  }
-}
-
-/*******************************************************************************
-**
-** Function         gki_calc_stack
-**
-** Description      This function tries to calculate the amount of
-**                  stack used by looking non magic num. Magic num is consider
-**                  the first byte in the stack.
-**
-** Returns          the number of unused byte on the stack. 4 in case of stack
-*overrun
-**
-*******************************************************************************/
-uint16_t gki_calc_stack(uint8_t task) {
-  int j, stacksize;
-  uint32_t MagicNum;
-  uint32_t* p;
-
-  stacksize = (int)gki_cb.com.OSStackSize[task];
-  p = (uint32_t*)gki_cb.com.OSStack[task]; /* assume stack is aligned, */
-  MagicNum = *p;
-
-  for (j = 0; j < stacksize; j++) {
-    if (*p++ != MagicNum) break;
-  }
-
-  return (j * sizeof(uint32_t));
-}
-
-/*******************************************************************************
-**
-** Function         GKI_print_task
-**
-** Description      Print task stack usage.
-**
-** Returns          void
-**
-*******************************************************************************/
-void GKI_print_task(void) {
-#ifdef _BT_WIN32
-  GKI_TRACE_0("Service not available under insight");
-#else
-  uint8_t TaskId;
-
-  GKI_TRACE_0("TID TASKNAME STATE FREE_STACK  STACK");
-  for (TaskId = 0; TaskId < GKI_MAX_TASKS; TaskId++) {
-    if (gki_cb.com.OSRdyTbl[TaskId] != TASK_DEAD) {
-      GKI_TRACE_5("%2u   %-8s %-5s  0x%04X     0x%04X Bytes", (uint16_t)TaskId,
-                  gki_cb.com.OSTName[TaskId],
-                  OSTaskStates[gki_cb.com.OSRdyTbl[TaskId]],
-                  gki_calc_stack(TaskId), gki_cb.com.OSStackSize[TaskId]);
-    }
-  }
-#endif
-}
-
-/*******************************************************************************
-**
-** Function         gki_print_buffer_statistics
-**
-** Description      Called internally by OSS to print the buffer pools
-*statistics
-**
-** Returns          void
-**
-*******************************************************************************/
-void gki_print_buffer_statistics(FP_PRINT print, int16_t pool) {
-  uint16_t i;
-  BUFFER_HDR_T* hdr;
-  uint16_t size, act_size, maxbuffs;
-  uint32_t* magic;
-
-  if (pool > GKI_NUM_TOTAL_BUF_POOLS || pool < 0) {
-    print("Not a valid Buffer pool\n");
-    return;
-  }
-
-  size = gki_cb.com.freeq[pool].size;
-  maxbuffs = gki_cb.com.freeq[pool].total;
-  act_size = size + BUFFER_PADDING_SIZE;
-  print("Buffer Pool[%u] size=%u cur_cnt=%u max_cnt=%u  total=%u\n", pool,
-        gki_cb.com.freeq[pool].size, gki_cb.com.freeq[pool].cur_cnt,
-        gki_cb.com.freeq[pool].max_cnt, gki_cb.com.freeq[pool].total);
-
-  print("      Owner  State    Sanity\n");
-  print("----------------------------\n");
-  hdr = (BUFFER_HDR_T*)(gki_cb.com.pool_start[pool]);
-  for (i = 0; i < maxbuffs; i++) {
-    magic = (uint32_t*)((uint8_t*)hdr + BUFFER_HDR_SIZE + size);
-    print("%3d: 0x%02x %4d %10s\n", i, hdr->task_id, hdr->status,
-          (*magic == MAGIC_NO) ? "OK" : "CORRUPTED");
-    hdr = (BUFFER_HDR_T*)((uint8_t*)hdr + act_size);
-  }
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         gki_print_used_bufs
-**
-** Description      Dumps used buffers in the particular pool
-**
-*******************************************************************************/
-void gki_print_used_bufs(FP_PRINT print, uint8_t pool_id) {
-  uint8_t* p_start;
-  uint16_t buf_size;
-  uint16_t num_bufs;
-  BUFFER_HDR_T* p_hdr;
-  uint16_t i;
-  uint32_t* magic;
-  uint16_t* p;
-
-  if (pool_id >= GKI_NUM_TOTAL_BUF_POOLS &&
-      gki_cb.com.pool_start[pool_id] != 0) {
-    print("Not a valid Buffer pool\n");
-    return;
-  }
-
-  p_start = gki_cb.com.pool_start[pool_id];
-  buf_size = gki_cb.com.freeq[pool_id].size + BUFFER_PADDING_SIZE;
-  num_bufs = gki_cb.com.freeq[pool_id].total;
-
-  for (i = 0; i < num_bufs; i++, p_start += buf_size) {
-    p_hdr = (BUFFER_HDR_T*)p_start;
-    magic = (uint32_t*)((uint8_t*)p_hdr + buf_size - sizeof(uint32_t));
-    p = (uint16_t*)p_hdr;
-
-    if (p_hdr->status != BUF_STATUS_FREE) {
-      print(
-          "%d:0x%x (Q:%d,Task:%s,Stat:%d,%s) %04x %04x %04x %04x %04x %04x "
-          "%04x %04x\n",
-          i, p_hdr, p_hdr->q_id, GKI_map_taskname(p_hdr->task_id),
-          p_hdr->status, (*magic == MAGIC_NO) ? "OK" : "CORRUPTED", p[0], p[1],
-          p[2], p[3], p[4], p[5], p[6], p[7]);
-    }
-  }
-}
-
-/*******************************************************************************
-**
-** Function         gki_print_task
-**
-** Description      This function prints the task states.
-**
-** Returns          void
-**
-*******************************************************************************/
-void gki_print_task(FP_PRINT print) {
-  uint8_t i;
-
-  print("TID VID TASKNAME STATE WAIT WAITFOR TIMEOUT STACK\n");
-  print("-------------------------------------------------\n");
-  for (i = 0; i < GKI_MAX_TASKS; i++) {
-    if (gki_cb.com.OSRdyTbl[i] != TASK_DEAD) {
-      print("%2u  %-8s %-5s %04X    %04X %7u %u/%u Bytes\n", (uint16_t)i,
-            gki_cb.com.OSTName[i], OSTaskStates[gki_cb.com.OSRdyTbl[i]],
-            gki_cb.com.OSWaitEvt[i], gki_cb.com.OSWaitForEvt[i],
-            gki_cb.com.OSWaitTmr[i], gki_calc_stack(i),
-            gki_cb.com.OSStackSize[i]);
-    }
-  }
-}
-
-/*******************************************************************************
-**
-** Function         gki_print_exception
-**
-** Description      This function prints the exception information.
-**
-** Returns          void
-**
-*******************************************************************************/
-void gki_print_exception(FP_PRINT print) {
-  uint16_t i;
-  EXCEPTION_T* pExp;
-
-  print("GKI Exceptions:\n");
-  for (i = 0; i < gki_cb.com.ExceptionCnt; i++) {
-    pExp = &gki_cb.com.Exception[i];
-    print("%d: Type=%d, Task=%d: %s\n", i, (int32_t)pExp->type,
-          (int32_t)pExp->taskid, (int8_t*)pExp->msg);
-  }
-}
-
-/*****************************************************************************/
-void gki_dump(uint8_t* s, uint16_t len, FP_PRINT print) {
-  uint16_t i, j;
-
-  for (i = 0, j = 0; i < len; i++) {
-    if (j == 0)
-      print("\n%lX: %02X, ", &s[i], s[i]);
-    else if (j == 7)
-      print("%02X,  ", s[i]);
-    else
-      print("%02X, ", s[i]);
-    if (++j == 16) j = 0;
-  }
-  print("\n");
-}
-
-void gki_dump2(uint16_t* s, uint16_t len, FP_PRINT print) {
-  uint16_t i, j;
-
-  for (i = 0, j = 0; i < len; i++) {
-    if (j == 0)
-      print("\n%lX: %04X, ", &s[i], s[i]);
-    else
-      print("%04X, ", s[i]);
-    if (++j == 8) j = 0;
-  }
-  print("\n");
-}
-
-void gki_dump4(uint32_t* s, uint16_t len, FP_PRINT print) {
-  uint16_t i, j;
-
-  for (i = 0, j = 0; i < len; i++) {
-    if (j == 0)
-      print("\n%lX: %08lX, ", &s[i], s[i]);
-    else
-      print("%08lX, ", s[i]);
-    if (++j == 4) j = 0;
-  }
-  print("\n");
-}
-
-#endif
diff --git a/halimpl/bcm2079x/gki/common/gki_inet.h b/halimpl/bcm2079x/gki/common/gki_inet.h
deleted file mode 100644
index 079dfe3..0000000
--- a/halimpl/bcm2079x/gki/common/gki_inet.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 1999-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-#ifndef GKI_INET_H
-#define GKI_INET_H
-
-#include "data_types.h"
-
-#define htons ntohs
-#define htonl ntohl
-
-#define htonets nettohs
-#define htonetl nettohl
-
-#if (BIG_ENDIAN == TRUE)
-#define ntohs(n) (n)
-#define ntohl(n) (n)
-#define ntoh6(n) (n)
-
-#define nettohs(n) (n)
-#define nettohl(n) (n)
-#else
-extern uint16_t ntohs(uint16_t n);
-extern uint32_t ntohl(uint32_t n);
-extern uint8_t* ntoh6(uint8_t* p);
-
-#define nettohs(n) ((uint16_t)((((n) << 8) & 0xff00) | (((n) >> 8) & 0x00ff)))
-#define nettohl(n)                                        \
-  ((((n)&0x000000ff) << 24) | (((n) << 8) & 0x00ff0000) | \
-   (((n) >> 8) & 0x0000ff00) | (((n) >> 24) & 0x000000ff))
-#endif
-
-#endif /* GKI_INET_H */
diff --git a/halimpl/bcm2079x/gki/common/gki_time.c b/halimpl/bcm2079x/gki/common/gki_time.c
deleted file mode 100644
index 830ae21..0000000
--- a/halimpl/bcm2079x/gki/common/gki_time.c
+++ /dev/null
@@ -1,950 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 1999-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-#include "gki_int.h"
-
-#ifndef BT_ERROR_TRACE_0
-#define BT_ERROR_TRACE_0(l, m)
-#endif
-
-/* Make sure that this has been defined in target.h */
-#ifndef GKI_NUM_TIMERS
-#error NO TIMERS: Must define at least 1 timer in the system!
-#endif
-
-/* Largest signed positive timer count */
-#define GKI_NO_NEW_TMRS_STARTED (0x7fffffffL)
-/* Marks an unused timer list entry (initial value) */
-#define GKI_UNUSED_LIST_ENTRY (0x80000000L)
-#define GKI_MAX_INT32 (0x7fffffffL)
-
-/*******************************************************************************
-**
-** Function         gki_timers_init
-**
-** Description      This internal function is called once at startup to
-*initialize
-**                  all the timer structures.
-**
-** Returns          void
-**
-*******************************************************************************/
-void gki_timers_init(void) {
-  uint8_t tt;
-
-  gki_cb.com.OSTicksTilExp =
-      0; /* Remaining time (of OSTimeCurTimeout) before next timer expires */
-  gki_cb.com.OSNumOrigTicks = 0;
-#if (GKI_DELAY_STOP_SYS_TICK > 0)
-  gki_cb.com.OSTicksTilStop = 0; /* clear inactivity delay timer */
-#endif
-
-  for (tt = 0; tt < GKI_MAX_TASKS; tt++) {
-    gki_cb.com.OSWaitTmr[tt] = 0;
-
-#if (GKI_NUM_TIMERS > 0)
-    gki_cb.com.OSTaskTmr0[tt] = 0;
-    gki_cb.com.OSTaskTmr0R[tt] = 0;
-#endif
-
-#if (GKI_NUM_TIMERS > 1)
-    gki_cb.com.OSTaskTmr1[tt] = 0;
-    gki_cb.com.OSTaskTmr1R[tt] = 0;
-#endif
-
-#if (GKI_NUM_TIMERS > 2)
-    gki_cb.com.OSTaskTmr2[tt] = 0;
-    gki_cb.com.OSTaskTmr2R[tt] = 0;
-#endif
-
-#if (GKI_NUM_TIMERS > 3)
-    gki_cb.com.OSTaskTmr3[tt] = 0;
-    gki_cb.com.OSTaskTmr3R[tt] = 0;
-#endif
-  }
-
-  for (tt = 0; tt < GKI_MAX_TIMER_QUEUES; tt++) {
-    gki_cb.com.timer_queues[tt] = NULL;
-  }
-
-  gki_cb.com.p_tick_cb = NULL;
-  gki_cb.com.system_tick_running = false;
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         gki_timers_is_timer_running
-**
-** Description      This internal function is called to test if any gki timer
-*are running
-**
-**
-** Returns          TRUE if at least one time is running in the system, FALSE
-*else.
-**
-*******************************************************************************/
-bool gki_timers_is_timer_running(void) {
-  uint8_t tt;
-  for (tt = 0; tt < GKI_MAX_TASKS; tt++) {
-#if (GKI_NUM_TIMERS > 0)
-    if (gki_cb.com.OSTaskTmr0[tt]) {
-      return true;
-    }
-#endif
-
-#if (GKI_NUM_TIMERS > 1)
-    if (gki_cb.com.OSTaskTmr1[tt]) {
-      return true;
-    }
-#endif
-
-#if (GKI_NUM_TIMERS > 2)
-    if (gki_cb.com.OSTaskTmr2[tt]) {
-      return true;
-    }
-#endif
-
-#if (GKI_NUM_TIMERS > 3)
-    if (gki_cb.com.OSTaskTmr3[tt]) {
-      return true;
-    }
-#endif
-  }
-
-  return false;
-}
-
-/*******************************************************************************
-**
-** Function         GKI_get_tick_count
-**
-** Description      This function returns the current system ticks
-**
-** Returns          The current number of system ticks
-**
-*******************************************************************************/
-uint32_t GKI_get_tick_count(void) { return gki_cb.com.OSTicks; }
-
-/*******************************************************************************
-**
-** Function         GKI_ready_to_sleep
-**
-** Description      This function returns the number of system ticks until the
-**                  next timer will expire.  It is typically called by a power
-**                  savings manager to find out how long it can have the system
-**                  sleep before it needs to service the next entry.
-**
-** Parameters:      None
-**
-** Returns          Number of ticks til the next timer expires
-**                  Note: the value is a signed  value.  This value should be
-**                      compared to x > 0, to avoid misinterpreting negative
-*tick
-**                      values.
-**
-*******************************************************************************/
-int32_t GKI_ready_to_sleep(void) { return (gki_cb.com.OSTicksTilExp); }
-
-/*******************************************************************************
-**
-** Function         GKI_start_timer
-**
-** Description      An application can call this function to start one of
-**                  it's four general purpose timers. Any of the four timers
-**                  can be 1-shot or continuous. If a timer is already running,
-**                  it will be reset to the new parameters.
-**
-** Parameters       tnum            - (input) timer number to be started
-*(TIMER_0,
-**                                              TIMER_1, TIMER_2, or TIMER_3)
-**                  ticks           - (input) the number of system ticks til the
-**                                              timer expires.
-**                  is_continuous   - (input) TRUE if timer restarts
-*automatically,
-**                                              else FALSE if it is a
-*'one-shot'.
-**
-** Returns          void
-**
-*******************************************************************************/
-void GKI_start_timer(uint8_t tnum, int32_t ticks, bool is_continuous) {
-  int32_t reload;
-  int32_t orig_ticks;
-  uint8_t task_id = GKI_get_taskid();
-  bool bad_timer = false;
-
-  if (ticks <= 0) ticks = 1;
-
-  orig_ticks = ticks; /* save the ticks in case adjustment is necessary */
-
-  /* If continuous timer, set reload, else set it to 0 */
-  if (is_continuous)
-    reload = ticks;
-  else
-    reload = 0;
-
-  GKI_disable();
-
-  if (gki_timers_is_timer_running() == false) {
-#if (GKI_DELAY_STOP_SYS_TICK > 0)
-    /* if inactivity delay timer is not running, start system tick */
-    if (gki_cb.com.OSTicksTilStop == 0) {
-#endif
-      if (gki_cb.com.p_tick_cb) {
-        /* start system tick */
-        gki_cb.com.system_tick_running = true;
-        (gki_cb.com.p_tick_cb)(true);
-      }
-#if (GKI_DELAY_STOP_SYS_TICK > 0)
-    } else {
-      /* clear inactivity delay timer */
-      gki_cb.com.OSTicksTilStop = 0;
-    }
-#endif
-  }
-  /* Add the time since the last task timer update.
-  ** Note that this works when no timers are active since
-  ** both OSNumOrigTicks and OSTicksTilExp are 0.
-  */
-  if (GKI_MAX_INT32 - (gki_cb.com.OSNumOrigTicks - gki_cb.com.OSTicksTilExp) >
-      ticks) {
-    ticks += gki_cb.com.OSNumOrigTicks - gki_cb.com.OSTicksTilExp;
-  } else
-    ticks = GKI_MAX_INT32;
-
-  switch (tnum) {
-#if (GKI_NUM_TIMERS > 0)
-    case TIMER_0:
-      gki_cb.com.OSTaskTmr0R[task_id] = reload;
-      gki_cb.com.OSTaskTmr0[task_id] = ticks;
-      break;
-#endif
-
-#if (GKI_NUM_TIMERS > 1)
-    case TIMER_1:
-      gki_cb.com.OSTaskTmr1R[task_id] = reload;
-      gki_cb.com.OSTaskTmr1[task_id] = ticks;
-      break;
-#endif
-
-#if (GKI_NUM_TIMERS > 2)
-    case TIMER_2:
-      gki_cb.com.OSTaskTmr2R[task_id] = reload;
-      gki_cb.com.OSTaskTmr2[task_id] = ticks;
-      break;
-#endif
-
-#if (GKI_NUM_TIMERS > 3)
-    case TIMER_3:
-      gki_cb.com.OSTaskTmr3R[task_id] = reload;
-      gki_cb.com.OSTaskTmr3[task_id] = ticks;
-      break;
-#endif
-    default:
-      bad_timer = true; /* Timer number is bad, so do not use */
-  }
-
-  /* Update the expiration timeout if a legitimate timer */
-  if (!bad_timer) {
-    /* Only update the timeout value if it is less than any other newly started
-     * timers */
-    gki_adjust_timer_count(orig_ticks);
-  }
-
-  GKI_enable();
-}
-
-/*******************************************************************************
-**
-** Function         GKI_stop_timer
-**
-** Description      An application can call this function to stop one of
-**                  it's four general purpose timers. There is no harm in
-**                  stopping a timer that is already stopped.
-**
-** Parameters       tnum            - (input) timer number to be started
-*(TIMER_0,
-**                                              TIMER_1, TIMER_2, or TIMER_3)
-** Returns          void
-**
-*******************************************************************************/
-void GKI_stop_timer(uint8_t tnum) {
-  uint8_t task_id = GKI_get_taskid();
-
-  GKI_disable();
-
-  switch (tnum) {
-#if (GKI_NUM_TIMERS > 0)
-    case TIMER_0:
-      gki_cb.com.OSTaskTmr0R[task_id] = 0;
-      gki_cb.com.OSTaskTmr0[task_id] = 0;
-      break;
-#endif
-
-#if (GKI_NUM_TIMERS > 1)
-    case TIMER_1:
-      gki_cb.com.OSTaskTmr1R[task_id] = 0;
-      gki_cb.com.OSTaskTmr1[task_id] = 0;
-      break;
-#endif
-
-#if (GKI_NUM_TIMERS > 2)
-    case TIMER_2:
-      gki_cb.com.OSTaskTmr2R[task_id] = 0;
-      gki_cb.com.OSTaskTmr2[task_id] = 0;
-      break;
-#endif
-
-#if (GKI_NUM_TIMERS > 3)
-    case TIMER_3:
-      gki_cb.com.OSTaskTmr3R[task_id] = 0;
-      gki_cb.com.OSTaskTmr3[task_id] = 0;
-      break;
-#endif
-  }
-
-  if (gki_timers_is_timer_running() == false) {
-    if (gki_cb.com.p_tick_cb) {
-#if (GKI_DELAY_STOP_SYS_TICK > 0)
-      /* if inactivity delay timer is not running */
-      if ((gki_cb.com.system_tick_running) &&
-          (gki_cb.com.OSTicksTilStop == 0)) {
-        /* set inactivity delay timer */
-        /* when timer expires, system tick will be stopped */
-        gki_cb.com.OSTicksTilStop = GKI_DELAY_STOP_SYS_TICK;
-      }
-#else
-      gki_cb.com.system_tick_running = false;
-      (gki_cb.com.p_tick_cb)(false); /* stop system tick */
-#endif
-    }
-  }
-
-  GKI_enable();
-}
-
-/*******************************************************************************
-**
-** Function         GKI_timer_update
-**
-** Description      This function is called by an OS to drive the GKI's timers.
-**                  It is typically called at every system tick to
-**                  update the timers for all tasks, and check for timeouts.
-**
-**                  Note: It has been designed to also allow for variable tick
-*updates
-**                      so that systems with strict power savings requirements
-*can
-**                      have the update occur at variable intervals.
-**
-** Parameters:      ticks_since_last_update - (input) This is the number of
-*TICKS that have
-**                          occurred since the last time GKI_timer_update was
-*called.
-**
-** Returns          void
-**
-*******************************************************************************/
-void GKI_timer_update(int32_t ticks_since_last_update) {
-  uint8_t task_id;
-  long next_expiration; /* Holds the next soonest expiration time after this
-                           update */
-
-  /* Increment the number of ticks used for time stamps */
-  gki_cb.com.OSTicks += ticks_since_last_update;
-
-  /* If any timers are running in any tasks, decrement the remaining time til
-   * the timer updates need to take place (next expiration occurs)
-   */
-  gki_cb.com.OSTicksTilExp -= ticks_since_last_update;
-
-  /* Don't allow timer interrupt nesting */
-  if (gki_cb.com.timer_nesting) return;
-
-  gki_cb.com.timer_nesting = 1;
-
-#if (GKI_DELAY_STOP_SYS_TICK > 0)
-  /* if inactivity delay timer is set and expired */
-  if (gki_cb.com.OSTicksTilStop) {
-    if (gki_cb.com.OSTicksTilStop <= (uint32_t)ticks_since_last_update) {
-      if (gki_cb.com.p_tick_cb) {
-        gki_cb.com.system_tick_running = false;
-        (gki_cb.com.p_tick_cb)(false); /* stop system tick */
-      }
-      gki_cb.com.OSTicksTilStop = 0; /* clear inactivity delay timer */
-      gki_cb.com.timer_nesting = 0;
-      return;
-    } else
-      gki_cb.com.OSTicksTilStop -= ticks_since_last_update;
-  }
-#endif
-
-  /* No need to update the ticks if no timeout has occurred */
-  if (gki_cb.com.OSTicksTilExp > 0) {
-    gki_cb.com.timer_nesting = 0;
-    return;
-  }
-
-  GKI_disable();
-
-  next_expiration = GKI_NO_NEW_TMRS_STARTED;
-
-  /* If here then gki_cb.com.OSTicksTilExp <= 0. If negative, then increase
-     gki_cb.com.OSNumOrigTicks
-     to account for the difference so timer updates below are decremented by the
-     full number
-     of ticks. gki_cb.com.OSNumOrigTicks is reset at the bottom of this function
-     so changing this
-     value only affects the timer updates below
-   */
-  gki_cb.com.OSNumOrigTicks -= gki_cb.com.OSTicksTilExp;
-
-  /* Check for OS Task Timers */
-  for (task_id = 0; task_id < GKI_MAX_TASKS; task_id++) {
-    if (gki_cb.com.OSRdyTbl[task_id] == TASK_DEAD) {
-      // task is shutdown do not try to service timers
-      continue;
-    }
-
-    if (gki_cb.com.OSWaitTmr[task_id] > 0) /* If timer is running */
-    {
-      gki_cb.com.OSWaitTmr[task_id] -= gki_cb.com.OSNumOrigTicks;
-      if (gki_cb.com.OSWaitTmr[task_id] <= 0) {
-        /* Timer Expired */
-        gki_cb.com.OSRdyTbl[task_id] = TASK_READY;
-      }
-    }
-
-#if (GKI_NUM_TIMERS > 0)
-    /* If any timer is running, decrement */
-    if (gki_cb.com.OSTaskTmr0[task_id] > 0) {
-      gki_cb.com.OSTaskTmr0[task_id] -= gki_cb.com.OSNumOrigTicks;
-
-      if (gki_cb.com.OSTaskTmr0[task_id] <= 0) {
-/* Set Timer 0 Expired event mask and reload timer */
-#if (GKI_TIMER_UPDATES_FROM_ISR == TRUE)
-        GKI_isend_event(task_id, TIMER_0_EVT_MASK);
-#else
-        GKI_send_event(task_id, TIMER_0_EVT_MASK);
-#endif
-        gki_cb.com.OSTaskTmr0[task_id] = gki_cb.com.OSTaskTmr0R[task_id];
-      }
-    }
-
-    /* Check to see if this timer is the next one to expire */
-    if (gki_cb.com.OSTaskTmr0[task_id] > 0 &&
-        gki_cb.com.OSTaskTmr0[task_id] < next_expiration)
-      next_expiration = gki_cb.com.OSTaskTmr0[task_id];
-#endif
-
-#if (GKI_NUM_TIMERS > 1)
-    /* If any timer is running, decrement */
-    if (gki_cb.com.OSTaskTmr1[task_id] > 0) {
-      gki_cb.com.OSTaskTmr1[task_id] -= gki_cb.com.OSNumOrigTicks;
-
-      if (gki_cb.com.OSTaskTmr1[task_id] <= 0) {
-/* Set Timer 1 Expired event mask and reload timer */
-#if (GKI_TIMER_UPDATES_FROM_ISR == TRUE)
-        GKI_isend_event(task_id, TIMER_1_EVT_MASK);
-#else
-        GKI_send_event(task_id, TIMER_1_EVT_MASK);
-#endif
-        gki_cb.com.OSTaskTmr1[task_id] = gki_cb.com.OSTaskTmr1R[task_id];
-      }
-    }
-
-    /* Check to see if this timer is the next one to expire */
-    if (gki_cb.com.OSTaskTmr1[task_id] > 0 &&
-        gki_cb.com.OSTaskTmr1[task_id] < next_expiration)
-      next_expiration = gki_cb.com.OSTaskTmr1[task_id];
-#endif
-
-#if (GKI_NUM_TIMERS > 2)
-    /* If any timer is running, decrement */
-    if (gki_cb.com.OSTaskTmr2[task_id] > 0) {
-      gki_cb.com.OSTaskTmr2[task_id] -= gki_cb.com.OSNumOrigTicks;
-
-      if (gki_cb.com.OSTaskTmr2[task_id] <= 0) {
-/* Set Timer 2 Expired event mask and reload timer */
-#if (GKI_TIMER_UPDATES_FROM_ISR == TRUE)
-        GKI_isend_event(task_id, TIMER_2_EVT_MASK);
-#else
-        GKI_send_event(task_id, TIMER_2_EVT_MASK);
-#endif
-        gki_cb.com.OSTaskTmr2[task_id] = gki_cb.com.OSTaskTmr2R[task_id];
-      }
-    }
-
-    /* Check to see if this timer is the next one to expire */
-    if (gki_cb.com.OSTaskTmr2[task_id] > 0 &&
-        gki_cb.com.OSTaskTmr2[task_id] < next_expiration)
-      next_expiration = gki_cb.com.OSTaskTmr2[task_id];
-#endif
-
-#if (GKI_NUM_TIMERS > 3)
-    /* If any timer is running, decrement */
-    if (gki_cb.com.OSTaskTmr3[task_id] > 0) {
-      gki_cb.com.OSTaskTmr3[task_id] -= gki_cb.com.OSNumOrigTicks;
-
-      if (gki_cb.com.OSTaskTmr3[task_id] <= 0) {
-/* Set Timer 3 Expired event mask and reload timer */
-#if (GKI_TIMER_UPDATES_FROM_ISR == TRUE)
-        GKI_isend_event(task_id, TIMER_3_EVT_MASK);
-#else
-        GKI_send_event(task_id, TIMER_3_EVT_MASK);
-#endif
-        gki_cb.com.OSTaskTmr3[task_id] = gki_cb.com.OSTaskTmr3R[task_id];
-      }
-    }
-
-    /* Check to see if this timer is the next one to expire */
-    if (gki_cb.com.OSTaskTmr3[task_id] > 0 &&
-        gki_cb.com.OSTaskTmr3[task_id] < next_expiration)
-      next_expiration = gki_cb.com.OSTaskTmr3[task_id];
-#endif
-  }
-
-  /* Set the next timer experation value if there is one to start */
-  if (next_expiration < GKI_NO_NEW_TMRS_STARTED) {
-    gki_cb.com.OSTicksTilExp = gki_cb.com.OSNumOrigTicks = next_expiration;
-  } else {
-    gki_cb.com.OSTicksTilExp = gki_cb.com.OSNumOrigTicks = 0;
-  }
-
-  gki_cb.com.timer_nesting = 0;
-
-  GKI_enable();
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         GKI_timer_queue_empty
-**
-** Description      This function is called by applications to see whether the
-*timer
-**                  queue is empty
-**
-** Parameters
-**
-** Returns          bool
-**
-*******************************************************************************/
-bool GKI_timer_queue_empty(void) {
-  uint8_t tt;
-
-  for (tt = 0; tt < GKI_MAX_TIMER_QUEUES; tt++) {
-    if (gki_cb.com.timer_queues[tt]) return false;
-  }
-
-  return true;
-}
-
-/*******************************************************************************
-**
-** Function         GKI_timer_queue_register_callback
-**
-** Description      This function is called by applications to register system
-*tick
-**                  start/stop callback for time queues
-**
-**
-** Parameters       p_callback - (input) pointer to the system tick callback
-**
-** Returns          bool
-**
-*******************************************************************************/
-void GKI_timer_queue_register_callback(SYSTEM_TICK_CBACK* p_callback) {
-  gki_cb.com.p_tick_cb = p_callback;
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         GKI_init_timer_list
-**
-** Description      This function is called by applications when they
-**                  want to initialize a timer list.
-**
-** Parameters       p_timer_listq   - (input) pointer to the timer list queue
-*object
-**
-** Returns          void
-**
-*******************************************************************************/
-void GKI_init_timer_list(TIMER_LIST_Q* p_timer_listq) {
-  p_timer_listq->p_first = NULL;
-  p_timer_listq->p_last = NULL;
-  p_timer_listq->last_ticks = 0;
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         GKI_init_timer_list_entry
-**
-** Description      This function is called by the applications when they
-**                  want to initialize a timer list entry. This must be
-**                  done prior to first use of the entry.
-**
-** Parameters       p_tle           - (input) pointer to a timer list queue
-*entry
-**
-** Returns          void
-**
-*******************************************************************************/
-void GKI_init_timer_list_entry(TIMER_LIST_ENT* p_tle) {
-  p_tle->p_next = NULL;
-  p_tle->p_prev = NULL;
-  p_tle->ticks = GKI_UNUSED_LIST_ENTRY;
-  p_tle->in_use = false;
-}
-
-/*******************************************************************************
-**
-** Function         GKI_update_timer_list
-**
-** Description      This function is called by the applications when they
-**                  want to update a timer list. This should be at every
-**                  timer list unit tick, e.g. once per sec, once per minute
-*etc.
-**
-** Parameters       p_timer_listq   - (input) pointer to the timer list queue
-*object
-**                  num_units_since_last_update - (input) number of units since
-*the last update
-**                                  (allows for variable unit update)
-**
-**      NOTE: The following timer list update routines should not be used for
-*exact time
-**            critical purposes.  The timer tasks should be used when exact
-*timing is needed.
-**
-** Returns          the number of timers that have expired
-**
-*******************************************************************************/
-uint16_t GKI_update_timer_list(TIMER_LIST_Q* p_timer_listq,
-                               int32_t num_units_since_last_update) {
-  TIMER_LIST_ENT* p_tle;
-  uint16_t num_time_out = 0;
-  int32_t rem_ticks;
-  int32_t temp_ticks;
-
-  p_tle = p_timer_listq->p_first;
-
-  /* First, get the guys who have previously timed out */
-  /* Note that the tick value of the timers should always be '0' */
-  while ((p_tle) && (p_tle->ticks <= 0)) {
-    num_time_out++;
-    p_tle = p_tle->p_next;
-  }
-
-  /* Timer entriy tick values are relative to the preceeding entry */
-  rem_ticks = num_units_since_last_update;
-
-  /* Now, adjust remaining timer entries */
-  while ((p_tle != NULL) && (rem_ticks > 0)) {
-    temp_ticks = p_tle->ticks;
-    p_tle->ticks -= rem_ticks;
-
-    /* See if this timer has just timed out */
-    if (p_tle->ticks <= 0) {
-      /* We set the number of ticks to '0' so that the legacy code
-       * that assumes a '0' or nonzero value will still work as coded. */
-      p_tle->ticks = 0;
-
-      num_time_out++;
-    }
-
-    rem_ticks -= temp_ticks; /* Decrement the remaining ticks to process */
-    p_tle = p_tle->p_next;
-  }
-
-  if (p_timer_listq->last_ticks > 0) {
-    p_timer_listq->last_ticks -= num_units_since_last_update;
-
-    /* If the last timer has expired set last_ticks to 0 so that other list
-    * update
-    * functions will calculate correctly
-    */
-    if (p_timer_listq->last_ticks < 0) p_timer_listq->last_ticks = 0;
-  }
-
-  return (num_time_out);
-}
-
-/*******************************************************************************
-**
-** Function         GKI_get_remaining_ticks
-**
-** Description      This function is called by an application to get remaining
-**                  ticks to expire
-**
-** Parameters       p_timer_listq   - (input) pointer to the timer list queue
-*object
-**                  p_target_tle    - (input) pointer to a timer list queue
-*entry
-**
-** Returns          0 if timer is not used or timer is not in the list
-**                  remaining ticks if success
-**
-*******************************************************************************/
-uint32_t GKI_get_remaining_ticks(TIMER_LIST_Q* p_timer_listq,
-                                 TIMER_LIST_ENT* p_target_tle) {
-  TIMER_LIST_ENT* p_tle;
-  uint32_t rem_ticks = 0;
-
-  if (p_target_tle->in_use) {
-    p_tle = p_timer_listq->p_first;
-
-    /* adding up all of ticks in previous entries */
-    while ((p_tle) && (p_tle != p_target_tle)) {
-      rem_ticks += p_tle->ticks;
-      p_tle = p_tle->p_next;
-    }
-
-    /* if found target entry */
-    if (p_tle == p_target_tle) {
-      rem_ticks += p_tle->ticks;
-    } else {
-      BT_ERROR_TRACE_0(TRACE_LAYER_GKI,
-                       "GKI_get_remaining_ticks: No timer entry in the list");
-      return (0);
-    }
-  } else {
-    BT_ERROR_TRACE_0(TRACE_LAYER_GKI,
-                     "GKI_get_remaining_ticks: timer entry is not active");
-  }
-
-  return (rem_ticks);
-}
-
-/*******************************************************************************
-**
-** Function         GKI_add_to_timer_list
-**
-** Description      This function is called by an application to add a timer
-**                  entry to a timer list.
-**
-**                  Note: A timer value of '0' will effectively insert an
-*already
-**                      expired event.  Negative tick values will be ignored.
-**
-** Parameters       p_timer_listq   - (input) pointer to the timer list queue
-*object
-**                  p_tle           - (input) pointer to a timer list queue
-*entry
-**
-** Returns          void
-**
-*******************************************************************************/
-void GKI_add_to_timer_list(TIMER_LIST_Q* p_timer_listq, TIMER_LIST_ENT* p_tle) {
-  uint32_t nr_ticks_total;
-  uint8_t tt;
-  TIMER_LIST_ENT* p_temp;
-  if (p_tle == NULL || p_timer_listq == NULL) {
-    GKI_TRACE_3("%s: invalid argument %x, %x****************************<<",
-                __func__, p_timer_listq, p_tle);
-    return;
-  }
-
-  /* Only process valid tick values */
-  if (p_tle->ticks >= 0) {
-    /* If this entry is the last in the list */
-    if (p_tle->ticks >= p_timer_listq->last_ticks) {
-      /* If this entry is the only entry in the list */
-      if (p_timer_listq->p_first == NULL)
-        p_timer_listq->p_first = p_tle;
-      else {
-        /* Insert the entry onto the end of the list */
-        if (p_timer_listq->p_last != NULL)
-          p_timer_listq->p_last->p_next = p_tle;
-
-        p_tle->p_prev = p_timer_listq->p_last;
-      }
-
-      p_tle->p_next = NULL;
-      p_timer_listq->p_last = p_tle;
-      nr_ticks_total = p_tle->ticks;
-      p_tle->ticks -= p_timer_listq->last_ticks;
-
-      p_timer_listq->last_ticks = nr_ticks_total;
-    } else /* This entry needs to be inserted before the last entry */
-    {
-      /* Find the entry that the new one needs to be inserted in front of */
-      p_temp = p_timer_listq->p_first;
-      while (p_tle->ticks > p_temp->ticks) {
-        /* Update the tick value if looking at an unexpired entry */
-        if (p_temp->ticks > 0) p_tle->ticks -= p_temp->ticks;
-
-        p_temp = p_temp->p_next;
-      }
-
-      /* The new entry is the first in the list */
-      if (p_temp == p_timer_listq->p_first) {
-        p_tle->p_next = p_timer_listq->p_first;
-        p_timer_listq->p_first->p_prev = p_tle;
-        p_timer_listq->p_first = p_tle;
-      } else {
-        p_temp->p_prev->p_next = p_tle;
-        p_tle->p_prev = p_temp->p_prev;
-        p_temp->p_prev = p_tle;
-        p_tle->p_next = p_temp;
-      }
-      p_temp->ticks -= p_tle->ticks;
-    }
-
-    p_tle->in_use = true;
-
-    /* if we already add this timer queue to the array */
-    for (tt = 0; tt < GKI_MAX_TIMER_QUEUES; tt++) {
-      if (gki_cb.com.timer_queues[tt] == p_timer_listq) return;
-    }
-    /* add this timer queue to the array */
-    for (tt = 0; tt < GKI_MAX_TIMER_QUEUES; tt++) {
-      if (gki_cb.com.timer_queues[tt] == NULL) break;
-    }
-    if (tt < GKI_MAX_TIMER_QUEUES) {
-      gki_cb.com.timer_queues[tt] = p_timer_listq;
-    }
-  }
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         GKI_remove_from_timer_list
-**
-** Description      This function is called by an application to remove a timer
-**                  entry from a timer list.
-**
-** Parameters       p_timer_listq   - (input) pointer to the timer list queue
-*object
-**                  p_tle           - (input) pointer to a timer list queue
-*entry
-**
-** Returns          void
-**
-*******************************************************************************/
-void GKI_remove_from_timer_list(TIMER_LIST_Q* p_timer_listq,
-                                TIMER_LIST_ENT* p_tle) {
-  uint8_t tt;
-
-  /* Verify that the entry is valid */
-  if (p_tle == NULL || p_tle->in_use == false ||
-      p_timer_listq->p_first == NULL) {
-    return;
-  }
-
-  /* Add the ticks remaining in this timer (if any) to the next guy in the list.
-  ** Note: Expired timers have a tick value of '0'.
-  */
-  if (p_tle->p_next != NULL) {
-    p_tle->p_next->ticks += p_tle->ticks;
-  } else {
-    p_timer_listq->last_ticks -= p_tle->ticks;
-  }
-
-  /* Unlink timer from the list.
-  */
-  if (p_timer_listq->p_first == p_tle) {
-    p_timer_listq->p_first = p_tle->p_next;
-
-    if (p_timer_listq->p_first != NULL) p_timer_listq->p_first->p_prev = NULL;
-
-    if (p_timer_listq->p_last == p_tle) p_timer_listq->p_last = NULL;
-  } else {
-    if (p_timer_listq->p_last == p_tle) {
-      p_timer_listq->p_last = p_tle->p_prev;
-
-      if (p_timer_listq->p_last != NULL) p_timer_listq->p_last->p_next = NULL;
-    } else {
-      if (p_tle->p_next != NULL && p_tle->p_next->p_prev == p_tle)
-        p_tle->p_next->p_prev = p_tle->p_prev;
-      else {
-        /* Error case - chain messed up ?? */
-        return;
-      }
-
-      if (p_tle->p_prev != NULL && p_tle->p_prev->p_next == p_tle)
-        p_tle->p_prev->p_next = p_tle->p_next;
-      else {
-        /* Error case - chain messed up ?? */
-        return;
-      }
-    }
-  }
-
-  p_tle->p_next = p_tle->p_prev = NULL;
-  p_tle->ticks = GKI_UNUSED_LIST_ENTRY;
-  p_tle->in_use = false;
-
-  /* if timer queue is empty */
-  if (p_timer_listq->p_first == NULL && p_timer_listq->p_last == NULL) {
-    for (tt = 0; tt < GKI_MAX_TIMER_QUEUES; tt++) {
-      if (gki_cb.com.timer_queues[tt] == p_timer_listq) {
-        gki_cb.com.timer_queues[tt] = NULL;
-        break;
-      }
-    }
-  }
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         gki_adjust_timer_count
-**
-** Description      This function is called whenever a new timer or GKI_wait
-*occurs
-**                  to adjust (if necessary) the current time til the first
-*expiration.
-**                  This only needs to make an adjustment if the new timer (in
-*ticks) is
-**                  less than the number of ticks remaining on the current
-*timer.
-**
-** Parameters:      ticks - (input) number of system ticks of the new timer
-*entry
-**
-**                  NOTE:  This routine MUST be called while interrupts are
-*disabled to
-**                          avoid updates while adjusting the timer variables.
-**
-** Returns          void
-**
-*******************************************************************************/
-void gki_adjust_timer_count(int32_t ticks) {
-  if (ticks > 0) {
-    /* See if the new timer expires before the current first expiration */
-    if (gki_cb.com.OSNumOrigTicks == 0 ||
-        (ticks < gki_cb.com.OSTicksTilExp && gki_cb.com.OSTicksTilExp > 0)) {
-      gki_cb.com.OSNumOrigTicks =
-          (gki_cb.com.OSNumOrigTicks - gki_cb.com.OSTicksTilExp) + ticks;
-      gki_cb.com.OSTicksTilExp = ticks;
-    }
-  }
-
-  return;
-}
diff --git a/halimpl/bcm2079x/gki/ulinux/data_types.h b/halimpl/bcm2079x/gki/ulinux/data_types.h
deleted file mode 100644
index 060c870..0000000
--- a/halimpl/bcm2079x/gki/ulinux/data_types.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 1999-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-#ifndef DATA_TYPES_H
-#define DATA_TYPES_H
-
-#include <stdbool.h>
-#include <stdint.h>
-#ifndef NULL
-#define NULL 0
-#endif
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-typedef uint32_t TIME_STAMP;
-
-#ifndef TRUE
-#define TRUE (!FALSE)
-#endif
-
-typedef unsigned char UBYTE;
-
-#ifdef __arm
-#define PACKED __packed
-#define INLINE __inline
-#else
-#define PACKED
-#define INLINE
-#endif
-
-#ifndef BIG_ENDIAN
-#define BIG_ENDIAN FALSE
-#endif
-
-#define UINT16_LOW_BYTE(x) ((x)&0xff)
-#define UINT16_HI_BYTE(x) ((x) >> 8)
-
-#endif
diff --git a/halimpl/bcm2079x/gki/ulinux/gki_int.h b/halimpl/bcm2079x/gki/ulinux/gki_int.h
deleted file mode 100644
index 6c60be0..0000000
--- a/halimpl/bcm2079x/gki/ulinux/gki_int.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 1999-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-#ifndef GKI_INT_H
-#define GKI_INT_H
-
-#include <pthread.h>
-#include "gki_common.h"
-
-/**********************************************************************
-** OS specific definitions
-*/
-#ifdef ANDROID
-#include <sys/times.h>
-#endif
-
-typedef struct {
-  pthread_mutex_t GKI_mutex;
-  pthread_t thread_id[GKI_MAX_TASKS];
-  pthread_mutex_t thread_evt_mutex[GKI_MAX_TASKS];
-  pthread_cond_t thread_evt_cond[GKI_MAX_TASKS];
-  pthread_mutex_t thread_timeout_mutex[GKI_MAX_TASKS];
-  pthread_cond_t thread_timeout_cond[GKI_MAX_TASKS];
-  int no_timer_suspend; /* 1: no suspend, 0 stop calling GKI_timer_update() */
-  pthread_mutex_t gki_timer_mutex;
-  pthread_cond_t gki_timer_cond;
-  int gki_timer_wake_lock_on;
-#if (GKI_DEBUG == TRUE)
-  pthread_mutex_t GKI_trace_mutex;
-#endif
-} tGKI_OS;
-
-/* condition to exit or continue GKI_run() timer loop */
-#define GKI_TIMER_TICK_RUN_COND 1
-#define GKI_TIMER_TICK_STOP_COND 0
-#define GKI_TIMER_TICK_EXIT_COND 2
-
-extern void gki_system_tick_start_stop_cback(bool start);
-
-/* Contains common control block as well as OS specific variables */
-typedef struct {
-  tGKI_OS os;
-  tGKI_COM_CB com;
-} tGKI_CB;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern tGKI_CB gki_cb;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/halimpl/bcm2079x/gki/ulinux/gki_ulinux.c b/halimpl/bcm2079x/gki/ulinux/gki_ulinux.c
deleted file mode 100644
index 74743c4..0000000
--- a/halimpl/bcm2079x/gki/ulinux/gki_ulinux.c
+++ /dev/null
@@ -1,1252 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 1999-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-#include <errno.h>
-#include <malloc.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <unistd.h>
-
-#define GKI_DEBUG FALSE
-
-#include <hardware_legacy/power.h> /* Android header */
-#include <pthread.h>               /* must be 1st header defined  */
-#include <time.h>
-#include "gki_int.h"
-#include "gki_target.h"
-
-/* Temp android logging...move to android tgt config file */
-
-#ifndef LINUX_NATIVE
-#include <cutils/log.h>
-#else
-#define LOGV(format, ...) fprintf(stdout, LOG_TAG format, ##__VA_ARGS__)
-#define LOGE(format, ...) fprintf(stderr, LOG_TAG format, ##__VA_ARGS__)
-#define LOGI(format, ...) fprintf(stdout, LOG_TAG format, ##__VA_ARGS__)
-
-#define SCHED_NORMAL 0
-#define SCHED_FIFO 1
-#define SCHED_RR 2
-#define SCHED_BATCH 3
-
-#endif
-
-/* Define the structure that holds the GKI variables
-*/
-tGKI_CB gki_cb;
-
-#define NANOSEC_PER_MILLISEC (1000000)
-#define NSEC_PER_SEC (1000 * NANOSEC_PER_MILLISEC)
-
-/* works only for 1ms to 1000ms heart beat ranges */
-#define LINUX_SEC (1000 / TICKS_PER_SEC)
-// #define GKI_TICK_TIMER_DEBUG
-
-#define LOCK(m) pthread_mutex_lock(&m)
-#define UNLOCK(m) pthread_mutex_unlock(&m)
-#define INIT(m) pthread_mutex_init(&m, NULL)
-
-/* this kind of mutex go into tGKI_OS control block!!!! */
-/* static pthread_mutex_t GKI_sched_mutex; */
-/*static pthread_mutex_t thread_delay_mutex;
-static pthread_cond_t thread_delay_cond;
-static pthread_mutex_t gki_timer_update_mutex;
-static pthread_cond_t   gki_timer_update_cond;
-*/
-#ifdef NO_GKI_RUN_RETURN
-static pthread_t timer_thread_id = 0;
-#endif
-
-/* For Android */
-
-#ifndef GKI_SHUTDOWN_EVT
-#define GKI_SHUTDOWN_EVT APPL_EVT_7
-#endif
-
-typedef struct {
-  uint8_t task_id;         /* GKI task id */
-  TASKPTR task_entry;      /* Task entry function*/
-  uintptr_t params;        /* Extra params to pass to task entry function */
-  pthread_cond_t* pCond;   /* for android*/
-  pthread_mutex_t* pMutex; /* for android*/
-} gki_pthread_info_t;
-gki_pthread_info_t gki_pthread_info[GKI_MAX_TASKS];
-
-static void* GKI_run_worker_thread(void*);
-
-/*******************************************************************************
-**
-** Function         gki_task_entry
-**
-** Description      entry point of GKI created tasks
-**
-** Returns          void
-**
-*******************************************************************************/
-void gki_task_entry(uintptr_t params) {
-  pthread_t thread_id = pthread_self();
-  gki_pthread_info_t* p_pthread_info = (gki_pthread_info_t*)params;
-  GKI_TRACE_5("gki_task_entry task_id=%i, thread_id=%x/%x, pCond/pMutex=%x/%x",
-              p_pthread_info->task_id,
-              gki_cb.os.thread_id[p_pthread_info->task_id], pthread_self(),
-              p_pthread_info->pCond, p_pthread_info->pMutex);
-
-  gki_cb.os.thread_id[p_pthread_info->task_id] = thread_id;
-  /* Call the actual thread entry point */
-  (p_pthread_info->task_entry)(p_pthread_info->params);
-
-  GKI_TRACE_1("gki_task task_id=%i terminating", p_pthread_info->task_id);
-  gki_cb.os.thread_id[p_pthread_info->task_id] = 0;
-
-  pthread_exit(0); /* GKI tasks have no return value */
-}
-/* end android */
-
-#ifndef ANDROID
-void GKI_TRACE(char* fmt, ...) {
-  LOCK(gki_cb.os.GKI_trace_mutex);
-  va_list ap;
-
-  va_start(ap, fmt);
-  vfprintf(stderr, fmt, ap);
-  fprintf(stderr, "\n");
-
-  va_end(ap);
-  UNLOCK(gki_cb.os.GKI_trace_mutex);
-}
-#endif
-
-/*******************************************************************************
-**
-** Function         GKI_init
-**
-** Description      This function is called once at startup to initialize
-**                  all the timer structures.
-**
-** Returns          void
-**
-*******************************************************************************/
-
-void GKI_init(void) {
-  pthread_mutexattr_t attr;
-  tGKI_OS* p_os;
-
-  memset(&gki_cb, 0, sizeof(gki_cb));
-
-  gki_buffer_init();
-  gki_timers_init();
-  gki_cb.com.OSTicks = (uint32_t)times(0);
-
-  pthread_mutexattr_init(&attr);
-
-#ifndef __CYGWIN__
-  pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE_NP);
-#endif
-  p_os = &gki_cb.os;
-  pthread_mutex_init(&p_os->GKI_mutex, &attr);
-/* pthread_mutex_init(&GKI_sched_mutex, NULL); */
-#if (GKI_DEBUG == TRUE)
-  pthread_mutex_init(&p_os->GKI_trace_mutex, NULL);
-#endif
-  /* pthread_mutex_init(&thread_delay_mutex, NULL); */ /* used in GKI_delay */
-  /* pthread_cond_init (&thread_delay_cond, NULL); */
-
-  /* Initialiase GKI_timer_update suspend variables & mutexes to be in running
-   * state.
-   * this works too even if GKI_NO_TICK_STOP is defined in btld.txt */
-  p_os->no_timer_suspend = GKI_TIMER_TICK_RUN_COND;
-  pthread_mutex_init(&p_os->gki_timer_mutex, NULL);
-  pthread_cond_init(&p_os->gki_timer_cond, NULL);
-}
-
-/*******************************************************************************
-**
-** Function         GKI_get_os_tick_count
-**
-** Description      This function is called to retrieve the native OS system
-*tick.
-**
-** Returns          Tick count of native OS.
-**
-*******************************************************************************/
-uint32_t GKI_get_os_tick_count(void) {
-  /* TODO - add any OS specific code here
-  **/
-  return (gki_cb.com.OSTicks);
-}
-
-/*******************************************************************************
-**
-** Function         GKI_create_task
-**
-** Description      This function is called to create a new OSS task.
-**
-** Parameters:      task_entry  - (input) pointer to the entry function of the
-*task
-**                  task_id     - (input) Task id is mapped to priority
-**                  taskname    - (input) name given to the task
-**                  stack       - (input) pointer to the top of the stack
-*(highest memory location)
-**                  stacksize   - (input) size of the stack allocated for the
-*task
-**
-** Returns          GKI_SUCCESS if all OK, GKI_FAILURE if any problem
-**
-** NOTE             This function take some parameters that may not be needed
-**                  by your particular OS. They are here for compatability
-**                  of the function prototype.
-**
-*******************************************************************************/
-uint8_t GKI_create_task(TASKPTR task_entry, uint8_t task_id, int8_t* taskname,
-                        uint16_t* stack, uint16_t stacksize, void* pCondVar,
-                        void* pMutex) {
-  uint16_t i;
-  uint8_t* p;
-  struct sched_param param;
-  int policy, ret = 0;
-  pthread_condattr_t attr;
-  pthread_attr_t attr1;
-
-  pthread_condattr_init(&attr);
-  pthread_condattr_setclock(&attr, CLOCK_MONOTONIC);
-  GKI_TRACE_5(
-      "GKI_create_task func=0x%x  id=%d  name=%s  stack=0x%x  stackSize=%d",
-      task_entry, task_id, taskname, stack, stacksize);
-
-  if (task_id >= GKI_MAX_TASKS) {
-    GKI_TRACE_0("Error! task ID > max task allowed");
-    return (GKI_FAILURE);
-  }
-
-  gki_cb.com.OSRdyTbl[task_id] = TASK_READY;
-  gki_cb.com.OSTName[task_id] = taskname;
-  gki_cb.com.OSWaitTmr[task_id] = 0;
-  gki_cb.com.OSWaitEvt[task_id] = 0;
-
-  /* Initialize mutex and condition variable objects for events and timeouts */
-  pthread_mutex_init(&gki_cb.os.thread_evt_mutex[task_id], NULL);
-  pthread_cond_init(&gki_cb.os.thread_evt_cond[task_id], &attr);
-  pthread_mutex_init(&gki_cb.os.thread_timeout_mutex[task_id], NULL);
-  pthread_cond_init(&gki_cb.os.thread_timeout_cond[task_id], &attr);
-
-  pthread_attr_init(&attr1);
-/* by default, pthread creates a joinable thread */
-#if (FALSE == GKI_PTHREAD_JOINABLE)
-  pthread_attr_setdetachstate(&attr1, PTHREAD_CREATE_DETACHED);
-
-  GKI_TRACE_3("GKI creating task %i, pCond/pMutex=%x/%x", task_id, pCondVar,
-              pMutex);
-#else
-  GKI_TRACE_1("GKI creating JOINABLE task %i", task_id);
-#endif
-
-  /* On Android, the new tasks starts running before
-   * 'gki_cb.os.thread_id[task_id]' is initialized */
-  /* Pass task_id to new task so it can initialize gki_cb.os.thread_id[task_id]
-   * for it calls GKI_wait */
-  gki_pthread_info[task_id].task_id = task_id;
-  gki_pthread_info[task_id].task_entry = task_entry;
-  gki_pthread_info[task_id].params = 0;
-  gki_pthread_info[task_id].pCond = (pthread_cond_t*)pCondVar;
-  gki_pthread_info[task_id].pMutex = (pthread_mutex_t*)pMutex;
-
-  ret = pthread_create(&gki_cb.os.thread_id[task_id], &attr1,
-                       (void*)gki_task_entry, &gki_pthread_info[task_id]);
-
-  if (ret != 0) {
-    GKI_TRACE_2("pthread_create failed(%d), %s!", ret, taskname);
-    return GKI_FAILURE;
-  }
-
-  if (pthread_getschedparam(gki_cb.os.thread_id[task_id], &policy, &param) ==
-      0) {
-#if defined(PBS_SQL_TASK)
-    if (task_id == PBS_SQL_TASK) {
-      GKI_TRACE_0("PBS SQL lowest priority task");
-      policy = SCHED_NORMAL;
-    } else
-#endif
-    {
-      policy = SCHED_RR;
-      param.sched_priority = 30 - task_id - 2;
-    }
-    pthread_setschedparam(gki_cb.os.thread_id[task_id], policy, &param);
-  }
-
-  GKI_TRACE_6("Leaving GKI_create_task %x %d %x %s %x %d", task_entry, task_id,
-              gki_cb.os.thread_id[task_id], taskname, stack, stacksize);
-
-  return (GKI_SUCCESS);
-}
-
-/*******************************************************************************
-**
-** Function         GKI_shutdown
-**
-** Description      shutdowns the GKI tasks/threads in from max task id to 0 and
-*frees
-**                  pthread resources!
-**                  IMPORTANT: in case of join method, GKI_shutdown must be
-*called outside
-**                  a GKI thread context!
-**
-** Returns          void
-**
-*******************************************************************************/
-#define WAKE_LOCK_ID "brcm_nfca"
-
-void GKI_shutdown(void) {
-  uint8_t task_id;
-  volatile int* p_run_cond = &gki_cb.os.no_timer_suspend;
-  int oldCOnd = 0;
-#if (FALSE == GKI_PTHREAD_JOINABLE)
-  int i = 0;
-#else
-  int result;
-#endif
-
-  /* release threads and set as TASK_DEAD. going from low to high priority fixes
-   * GKI_exception problem due to btu->hci sleep request events  */
-  for (task_id = GKI_MAX_TASKS; task_id > 0; task_id--) {
-    if (gki_cb.com.OSRdyTbl[task_id - 1] != TASK_DEAD) {
-      gki_cb.com.OSRdyTbl[task_id - 1] = TASK_DEAD;
-
-      /* paranoi settings, make sure that we do not execute any mailbox events
-       */
-      gki_cb.com.OSWaitEvt[task_id - 1] &=
-          ~(TASK_MBOX_0_EVT_MASK | TASK_MBOX_1_EVT_MASK | TASK_MBOX_2_EVT_MASK |
-            TASK_MBOX_3_EVT_MASK);
-      GKI_send_event(task_id - 1, EVENT_MASK(GKI_SHUTDOWN_EVT));
-
-#if (FALSE == GKI_PTHREAD_JOINABLE)
-      i = 0;
-
-      while ((gki_cb.com.OSWaitEvt[task_id - 1] != 0) && (++i < 10))
-        usleep(100 * 1000);
-#else
-      /* wait for proper Arnold Schwarzenegger task state */
-      result = pthread_join(gki_cb.os.thread_id[task_id - 1], NULL);
-      if (result < 0) {
-        GKI_TRACE_1("pthread_join() FAILED: result: %d", result);
-      }
-#endif
-      GKI_TRACE_1("GKI_shutdown(): task %s dead", gki_cb.com.OSTName[task_id]);
-      GKI_exit_task(task_id - 1);
-    }
-  }
-
-  /* Destroy mutex and condition variable objects */
-  pthread_mutex_destroy(&gki_cb.os.GKI_mutex);
-/*    pthread_mutex_destroy(&GKI_sched_mutex); */
-#if (GKI_DEBUG == TRUE)
-  pthread_mutex_destroy(&gki_cb.os.GKI_trace_mutex);
-#endif
-/*    pthread_mutex_destroy(&thread_delay_mutex);
- pthread_cond_destroy (&thread_delay_cond); */
-#if (FALSE == GKI_PTHREAD_JOINABLE)
-  i = 0;
-#endif
-
-#ifdef NO_GKI_RUN_RETURN
-  shutdown_timer = 1;
-#endif
-  if (gki_cb.os.gki_timer_wake_lock_on) {
-    GKI_TRACE_0("GKI_shutdown :  release_wake_lock(brcm_btld)");
-    gki_cb.os.gki_timer_wake_lock_on = 0;
-  }
-  oldCOnd = *p_run_cond;
-  *p_run_cond = GKI_TIMER_TICK_EXIT_COND;
-  if (oldCOnd == GKI_TIMER_TICK_STOP_COND)
-    pthread_cond_signal(&gki_cb.os.gki_timer_cond);
-}
-
-/*******************************************************************************
- **
- ** Function        GKI_run
- **
- ** Description     This function runs a task
- **
- ** Parameters:     start: TRUE start system tick (again), FALSE stop
- **
- ** Returns         void
- **
- *********************************************************************************/
-void gki_system_tick_start_stop_cback(bool start) {
-  tGKI_OS* p_os = &gki_cb.os;
-  volatile int* p_run_cond = &p_os->no_timer_suspend;
-  volatile static int wake_lock_count;
-  if (start == false) {
-    /* this can lead to a race condition. however as we only read this variable
-     * in the timer loop
-     * we should be fine with this approach. otherwise uncomment below mutexes.
-     */
-    /* GKI_disable(); */
-    *p_run_cond = GKI_TIMER_TICK_STOP_COND;
-/* GKI_enable(); */
-#ifdef GKI_TICK_TIMER_DEBUG
-    BT_TRACE_1(TRACE_LAYER_HCI, TRACE_TYPE_DEBUG,
-               ">>> STOP GKI_timer_update(), wake_lock_count:%d",
-               --wake_lock_count);
-#endif
-    gki_cb.os.gki_timer_wake_lock_on = 0;
-  } else {
-    /* restart GKI_timer_update() loop */
-    gki_cb.os.gki_timer_wake_lock_on = 1;
-    *p_run_cond = GKI_TIMER_TICK_RUN_COND;
-    pthread_mutex_lock(&p_os->gki_timer_mutex);
-    pthread_cond_signal(&p_os->gki_timer_cond);
-    pthread_mutex_unlock(&p_os->gki_timer_mutex);
-
-#ifdef GKI_TICK_TIMER_DEBUG
-    BT_TRACE_1(TRACE_LAYER_HCI, TRACE_TYPE_DEBUG,
-               ">>> START GKI_timer_update(), wake_lock_count:%d",
-               ++wake_lock_count);
-#endif
-  }
-}
-
-/*******************************************************************************
-**
-** Function         timer_thread
-**
-** Description      Timer thread
-**
-** Parameters:      id  - (input) timer ID
-**
-** Returns          void
-**
-*********************************************************************************/
-#ifdef NO_GKI_RUN_RETURN
-void timer_thread(signed long id) {
-  GKI_TRACE_1("%s enter", __func__);
-  struct timespec delay;
-  int timeout = 1000; /* 10  ms per system tick  */
-  int err;
-
-  while (!shutdown_timer) {
-    delay.tv_sec = timeout / 1000;
-    delay.tv_nsec = 1000 * 1000 * (timeout % 1000);
-
-    /* [u]sleep can't be used because it uses SIGALRM */
-
-    do {
-      err = nanosleep(&delay, &delay);
-    } while (err < 0 && errno == EINTR);
-
-    GKI_timer_update(1);
-  }
-  GKI_TRACE_1("%s exit", __func__);
-  pthread_exit(NULL);
-}
-#endif
-
-/*******************************************************************************
-**
-** Function         GKI_run
-**
-** Description      This function runs a task
-**
-** Parameters:      p_task_id  - (input) pointer to task id
-**
-** Returns          void
-**
-** NOTE             This function is only needed for operating systems where
-**                  starting a task is a 2-step process. Most OS's do it in
-**                  one step, If your OS does it in one step, this function
-**                  should be empty.
-*********************************************************************************/
-void GKI_run(void* p_task_id) {
-  GKI_TRACE_1("%s enter", __func__);
-  int retval = EACCES;
-  static pthread_t workerThreadId = 0;
-
-  retval = pthread_create(&workerThreadId, NULL, GKI_run_worker_thread, NULL);
-  if (retval != 0) {
-    GKI_TRACE_ERROR_2("%s: fail create thread %d", __func__, retval);
-  }
-  GKI_TRACE_1("%s exit", __func__);
-}
-
-/*******************************************************************************
-**
-** Function         GKI_run_worker_thread
-**
-** Description      This function runs a task
-**
-** Parameters:      None
-**
-** Returns:         error code
-*********************************************************************************/
-void* GKI_run_worker_thread(void* dummy) {
-  GKI_TRACE_1("%s: enter", __func__);
-  struct timespec delay;
-  int err = 0;
-  volatile int* p_run_cond = &gki_cb.os.no_timer_suspend;
-
-#ifndef GKI_NO_TICK_STOP
-  /* register start stop function which disable timer loop in GKI_run() when no
-   * timers are
-   * in any GKI/BTA/BTU this should save power when BTLD is idle! */
-  GKI_timer_queue_register_callback(gki_system_tick_start_stop_cback);
-  GKI_TRACE_1("%s: Start/Stop GKI_timer_update_registered!", __func__);
-#endif
-
-#ifdef NO_GKI_RUN_RETURN
-  GKI_TRACE_1("%s: GKI_run == NO_GKI_RUN_RETURN", __func__);
-  pthread_attr_t timer_attr;
-
-  shutdown_timer = 0;
-
-  pthread_attr_init(&timer_attr);
-  pthread_attr_setdetachstate(&timer_attr, PTHREAD_CREATE_DETACHED);
-  if (pthread_create(&timer_thread_id, &timer_attr, timer_thread, NULL) != 0) {
-    GKI_TRACE_1("%s: pthread_create failed to create timer_thread!", __func__);
-    return NULL;
-  }
-#else
-  GKI_TRACE_3("%s: run_cond(%x)=%d ", __func__, p_run_cond, *p_run_cond);
-  for (; GKI_TIMER_TICK_EXIT_COND != *p_run_cond;) {
-    do {
-      /* adjust hear bit tick in btld by changning TICKS_PER_SEC!!!!! this
-       * formula works only for
-       * 1-1000ms heart beat units! */
-      delay.tv_sec = LINUX_SEC / 1000;
-      delay.tv_nsec = 1000 * 1000 * (LINUX_SEC % 1000);
-
-      /* [u]sleep can't be used because it uses SIGALRM */
-      do {
-        err = nanosleep(&delay, &delay);
-      } while (err < 0 && errno == EINTR);
-
-      /* the unit should be alsways 1 (1 tick). only if you vary for some reason
-       * heart beat tick
-       * e.g. power saving you may want to provide more ticks
-       */
-      GKI_timer_update(1);
-      /* BT_TRACE_2( TRACE_LAYER_HCI, TRACE_TYPE_DEBUG, "update: tv_sec: %d,
-       * tv_nsec: %d", delay.tv_sec, delay.tv_nsec ); */
-    } while (GKI_TIMER_TICK_RUN_COND == *p_run_cond);
-
-/* currently on reason to exit above loop is no_timer_suspend ==
- * GKI_TIMER_TICK_STOP_COND
- * block timer main thread till re-armed by  */
-#ifdef GKI_TICK_TIMER_DEBUG
-    BT_TRACE_0(TRACE_LAYER_HCI, TRACE_TYPE_DEBUG,
-               ">>> SUSPENDED GKI_timer_update()");
-#endif
-    if (GKI_TIMER_TICK_EXIT_COND != *p_run_cond) {
-      GKI_TRACE_1("%s: waiting timer mutex", __func__);
-      pthread_mutex_lock(&gki_cb.os.gki_timer_mutex);
-      pthread_cond_wait(&gki_cb.os.gki_timer_cond, &gki_cb.os.gki_timer_mutex);
-      pthread_mutex_unlock(&gki_cb.os.gki_timer_mutex);
-      GKI_TRACE_1("%s: exited timer mutex", __func__);
-    }
-/* potentially we need to adjust os gki_cb.com.OSTicks */
-
-#ifdef GKI_TICK_TIMER_DEBUG
-    BT_TRACE_1(TRACE_LAYER_HCI, TRACE_TYPE_DEBUG,
-               ">>> RESTARTED GKI_timer_update(): run_cond: %d", *p_run_cond);
-#endif
-  } /* for */
-#endif
-  GKI_TRACE_1("%s: exit", __func__);
-  return NULL;
-}
-
-/*******************************************************************************
-**
-** Function         GKI_stop
-**
-** Description      This function is called to stop
-**                  the tasks and timers when the system is being stopped
-**
-** Returns          void
-**
-** NOTE             This function is NOT called by the Widcomm stack and
-**                  profiles. If you want to use it in your own implementation,
-**                  put specific code here.
-**
-*******************************************************************************/
-void GKI_stop(void) {
-  uint8_t task_id;
-
-  /*  gki_queue_timer_cback(FALSE); */
-  /* TODO - add code here if needed*/
-
-  for (task_id = 0; task_id < GKI_MAX_TASKS; task_id++) {
-    if (gki_cb.com.OSRdyTbl[task_id] != TASK_DEAD) {
-      GKI_exit_task(task_id);
-    }
-  }
-}
-
-/*******************************************************************************
-**
-** Function         GKI_wait
-**
-** Description      This function is called by tasks to wait for a specific
-**                  event or set of events. The task may specify the duration
-**                  that it wants to wait for, or 0 if infinite.
-**
-** Parameters:      flag -    (input) the event or set of events to wait for
-**                  timeout - (input) the duration that the task wants to wait
-**                                    for the specific events (in system ticks)
-**
-**
-** Returns          the event mask of received events or zero if timeout
-**
-*******************************************************************************/
-uint16_t GKI_wait(uint16_t flag, uint32_t timeout) {
-  uint16_t evt;
-  uint8_t rtask;
-  struct timespec abstime = {0, 0};
-  int sec;
-  int nano_sec;
-
-  rtask = GKI_get_taskid();
-  GKI_TRACE_3("GKI_wait %d %x %d", rtask, flag, timeout);
-  if (rtask >= GKI_MAX_TASKS) {
-    pthread_exit(NULL);
-    return 0;
-  }
-
-  gki_pthread_info_t* p_pthread_info = &gki_pthread_info[rtask];
-  if (p_pthread_info->pCond != NULL && p_pthread_info->pMutex != NULL) {
-    int ret;
-    GKI_TRACE_3("GKI_wait task=%i, pCond/pMutex = %x/%x", rtask,
-                p_pthread_info->pCond, p_pthread_info->pMutex);
-    ret = pthread_mutex_lock(p_pthread_info->pMutex);
-    ret = pthread_cond_signal(p_pthread_info->pCond);
-    ret = pthread_mutex_unlock(p_pthread_info->pMutex);
-    p_pthread_info->pMutex = NULL;
-    p_pthread_info->pCond = NULL;
-  }
-  gki_cb.com.OSWaitForEvt[rtask] = flag;
-
-  /* protect OSWaitEvt[rtask] from modification from an other thread */
-  pthread_mutex_lock(&gki_cb.os.thread_evt_mutex[rtask]);
-
-#if 0 /* for clean scheduling we probably should always call \
-         pthread_cond_wait() */
-    /* Check if anything in any of the mailboxes. There is a potential race condition where OSTaskQFirst[rtask]
-     has been modified. however this should only result in addtional call to  pthread_cond_wait() but as
-     the cond is met, it will exit immediately (depending on schedulling) */
-    if (gki_cb.com.OSTaskQFirst[rtask][0])
-    gki_cb.com.OSWaitEvt[rtask] |= TASK_MBOX_0_EVT_MASK;
-    if (gki_cb.com.OSTaskQFirst[rtask][1])
-    gki_cb.com.OSWaitEvt[rtask] |= TASK_MBOX_1_EVT_MASK;
-    if (gki_cb.com.OSTaskQFirst[rtask][2])
-    gki_cb.com.OSWaitEvt[rtask] |= TASK_MBOX_2_EVT_MASK;
-    if (gki_cb.com.OSTaskQFirst[rtask][3])
-    gki_cb.com.OSWaitEvt[rtask] |= TASK_MBOX_3_EVT_MASK;
-#endif
-
-  if (!(gki_cb.com.OSWaitEvt[rtask] & flag)) {
-    if (timeout) {
-      //            timeout = GKI_MS_TO_TICKS(timeout);     /* convert from
-      //            milliseconds to ticks */
-
-      /* get current system time */
-      //            clock_gettime(CLOCK_MONOTONIC, &currSysTime);
-      //            abstime.tv_sec = currSysTime.time;
-      //            abstime.tv_nsec = NANOSEC_PER_MILLISEC *
-      //            currSysTime.millitm;
-      clock_gettime(CLOCK_MONOTONIC, &abstime);
-
-      /* add timeout */
-      sec = timeout / 1000;
-      nano_sec = (timeout % 1000) * NANOSEC_PER_MILLISEC;
-      abstime.tv_nsec += nano_sec;
-      if (abstime.tv_nsec > NSEC_PER_SEC) {
-        abstime.tv_sec += (abstime.tv_nsec / NSEC_PER_SEC);
-        abstime.tv_nsec = abstime.tv_nsec % NSEC_PER_SEC;
-      }
-      abstime.tv_sec += sec;
-
-      pthread_cond_timedwait(&gki_cb.os.thread_evt_cond[rtask],
-                             &gki_cb.os.thread_evt_mutex[rtask], &abstime);
-
-    } else {
-      pthread_cond_wait(&gki_cb.os.thread_evt_cond[rtask],
-                        &gki_cb.os.thread_evt_mutex[rtask]);
-    }
-
-    /* TODO: check, this is probably neither not needed depending on
-     phtread_cond_wait() implmentation,
-     e.g. it looks like it is implemented as a counter in which case multiple
-     cond_signal
-     should NOT be lost! */
-    // we are waking up after waiting for some events, so refresh variables
-    // no need to call GKI_disable() here as we know that we will have some
-    // events as we've been waking up after condition pending or timeout
-    if (gki_cb.com.OSTaskQFirst[rtask][0])
-      gki_cb.com.OSWaitEvt[rtask] |= TASK_MBOX_0_EVT_MASK;
-    if (gki_cb.com.OSTaskQFirst[rtask][1])
-      gki_cb.com.OSWaitEvt[rtask] |= TASK_MBOX_1_EVT_MASK;
-    if (gki_cb.com.OSTaskQFirst[rtask][2])
-      gki_cb.com.OSWaitEvt[rtask] |= TASK_MBOX_2_EVT_MASK;
-    if (gki_cb.com.OSTaskQFirst[rtask][3])
-      gki_cb.com.OSWaitEvt[rtask] |= TASK_MBOX_3_EVT_MASK;
-
-    if (gki_cb.com.OSRdyTbl[rtask] == TASK_DEAD) {
-      gki_cb.com.OSWaitEvt[rtask] = 0;
-      /* unlock thread_evt_mutex as pthread_cond_wait() does auto lock when cond
-       * is met */
-      pthread_mutex_unlock(&gki_cb.os.thread_evt_mutex[rtask]);
-      GKI_TRACE_1("GKI TASK_DEAD received. exit thread %d...", rtask);
-
-      gki_cb.os.thread_id[rtask] = 0;
-      pthread_exit(NULL);
-      return (EVENT_MASK(GKI_SHUTDOWN_EVT));
-    }
-  }
-
-  /* Clear the wait for event mask */
-  gki_cb.com.OSWaitForEvt[rtask] = 0;
-
-  /* Return only those bits which user wants... */
-  evt = gki_cb.com.OSWaitEvt[rtask] & flag;
-
-  /* Clear only those bits which user wants... */
-  gki_cb.com.OSWaitEvt[rtask] &= ~flag;
-
-  /* unlock thread_evt_mutex as pthread_cond_wait() does auto lock mutex when
-   * cond is met */
-  pthread_mutex_unlock(&gki_cb.os.thread_evt_mutex[rtask]);
-  GKI_TRACE_4("GKI_wait %d %x %d %x resumed", rtask, flag, timeout, evt);
-
-  return (evt);
-}
-
-/*******************************************************************************
-**
-** Function         GKI_delay
-**
-** Description      This function is called by tasks to sleep unconditionally
-**                  for a specified amount of time. The duration is in
-*milliseconds
-**
-** Parameters:      timeout -    (input) the duration in milliseconds
-**
-** Returns          void
-**
-*******************************************************************************/
-
-void GKI_delay(uint32_t timeout) {
-  uint8_t rtask = GKI_get_taskid();
-  struct timespec delay;
-  int err;
-
-  GKI_TRACE_2("GKI_delay %d %d", rtask, timeout);
-
-  delay.tv_sec = timeout / 1000;
-  delay.tv_nsec = 1000 * 1000 * (timeout % 1000);
-
-  /* [u]sleep can't be used because it uses SIGALRM */
-
-  do {
-    err = nanosleep(&delay, &delay);
-  } while (err < 0 && errno == EINTR);
-
-  /* Check if task was killed while sleeping */
-  /* NOTE
-  **      if you do not implement task killing, you do not
-  **      need this check.
-  */
-  if (rtask && gki_cb.com.OSRdyTbl[rtask] == TASK_DEAD) {
-  }
-
-  GKI_TRACE_2("GKI_delay %d %d done", rtask, timeout);
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         GKI_send_event
-**
-** Description      This function is called by tasks to send events to other
-**                  tasks. Tasks can also send events to themselves.
-**
-** Parameters:      task_id -  (input) The id of the task to which the event has
-*to
-**                  be sent
-**                  event   -  (input) The event that has to be sent
-**
-**
-** Returns          GKI_SUCCESS if all OK, else GKI_FAILURE
-**
-*******************************************************************************/
-uint8_t GKI_send_event(uint8_t task_id, uint16_t event) {
-  GKI_TRACE_2("GKI_send_event %d %x", task_id, event);
-
-  /* use efficient coding to avoid pipeline stalls */
-  if (task_id < GKI_MAX_TASKS) {
-    /* protect OSWaitEvt[task_id] from manipulation in GKI_wait() */
-    pthread_mutex_lock(&gki_cb.os.thread_evt_mutex[task_id]);
-
-    /* Set the event bit */
-    gki_cb.com.OSWaitEvt[task_id] |= event;
-
-    pthread_cond_signal(&gki_cb.os.thread_evt_cond[task_id]);
-
-    pthread_mutex_unlock(&gki_cb.os.thread_evt_mutex[task_id]);
-
-    GKI_TRACE_2("GKI_send_event %d %x done", task_id, event);
-    return (GKI_SUCCESS);
-  }
-  return (GKI_FAILURE);
-}
-
-/*******************************************************************************
-**
-** Function         GKI_isend_event
-**
-** Description      This function is called from ISRs to send events to other
-**                  tasks. The only difference between this function and
-*GKI_send_event
-**                  is that this function assumes interrupts are already
-*disabled.
-**
-** Parameters:      task_id -  (input) The destination task Id for the event.
-**                  event   -  (input) The event flag
-**
-** Returns          GKI_SUCCESS if all OK, else GKI_FAILURE
-**
-** NOTE             This function is NOT called by the Widcomm stack and
-**                  profiles. If you want to use it in your own implementation,
-**                  put your code here, otherwise you can delete the entire
-**                  body of the function.
-**
-*******************************************************************************/
-uint8_t GKI_isend_event(uint8_t task_id, uint16_t event) {
-  GKI_TRACE_2("GKI_isend_event %d %x", task_id, event);
-  GKI_TRACE_2("GKI_isend_event %d %x done", task_id, event);
-  return GKI_send_event(task_id, event);
-}
-
-/*******************************************************************************
-**
-** Function         GKI_get_taskid
-**
-** Description      This function gets the currently running task ID.
-**
-** Returns          task ID
-**
-** NOTE             The Widcomm upper stack and profiles may run as a single
-*task.
-**                  If you only have one GKI task, then you can hard-code this
-**                  function to return a '1'. Otherwise, you should have some
-**                  OS-specific method to determine the current task.
-**
-*******************************************************************************/
-uint8_t GKI_get_taskid(void) {
-  int i;
-
-  pthread_t thread_id = pthread_self();
-  for (i = 0; i < GKI_MAX_TASKS; i++) {
-    if (gki_cb.os.thread_id[i] == thread_id) {
-      GKI_TRACE_2("GKI_get_taskid %x %d done", thread_id, i);
-      return (i);
-    }
-  }
-
-  GKI_TRACE_1("GKI_get_taskid: thread id = %x, task id = -1", thread_id);
-
-  return (-1);
-}
-
-/*******************************************************************************
-**
-** Function         GKI_map_taskname
-**
-** Description      This function gets the task name of the taskid passed as
-*arg.
-**                  If GKI_MAX_TASKS is passed as arg the currently running task
-**                  name is returned
-**
-** Parameters:      task_id -  (input) The id of the task whose name is being
-**                  sought. GKI_MAX_TASKS is passed to get the name of the
-**                  currently running task.
-**
-** Returns          pointer to task name
-**
-** NOTE             this function needs no customization
-**
-*******************************************************************************/
-int8_t* GKI_map_taskname(uint8_t task_id) {
-  GKI_TRACE_1("GKI_map_taskname %d", task_id);
-
-  if (task_id < GKI_MAX_TASKS) {
-    GKI_TRACE_2("GKI_map_taskname %d %s done", task_id,
-                gki_cb.com.OSTName[task_id]);
-    return (gki_cb.com.OSTName[task_id]);
-  } else if (task_id == GKI_MAX_TASKS) {
-    return (gki_cb.com.OSTName[GKI_get_taskid()]);
-  } else {
-    return (int8_t*)"BAD";
-  }
-}
-
-/*******************************************************************************
-**
-** Function         GKI_enable
-**
-** Description      This function enables interrupts.
-**
-** Returns          void
-**
-*******************************************************************************/
-void GKI_enable(void) {
-  GKI_TRACE_0("GKI_enable");
-  pthread_mutex_unlock(&gki_cb.os.GKI_mutex);
-  /* 	pthread_mutex_xx is nesting save, no need for this: already_disabled =
-   * 0; */
-  GKI_TRACE_0("Leaving GKI_enable");
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         GKI_disable
-**
-** Description      This function disables interrupts.
-**
-** Returns          void
-**
-*******************************************************************************/
-
-void GKI_disable(void) {
-  // GKI_TRACE_0("GKI_disable");
-
-  /*	pthread_mutex_xx is nesting save, no need for this: if
-     (!already_disabled) {
-      already_disabled = 1; */
-  pthread_mutex_lock(&gki_cb.os.GKI_mutex);
-  /*  } */
-  // GKI_TRACE_0("Leaving GKI_disable");
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         GKI_exception
-**
-** Description      This function throws an exception.
-**                  This is normally only called for a nonrecoverable error.
-**
-** Parameters:      code    -  (input) The code for the error
-**                  msg     -  (input) The message that has to be logged
-**
-** Returns          void
-**
-*******************************************************************************/
-
-void GKI_exception(uint16_t code, char* msg) {
-  uint8_t task_id;
-  int i = 0;
-
-  GKI_TRACE_ERROR_0("GKI_exception(): Task State Table");
-
-  for (task_id = 0; task_id < GKI_MAX_TASKS; task_id++) {
-    GKI_TRACE_ERROR_3("TASK ID [%d] task name [%s] state [%d]", task_id,
-                      gki_cb.com.OSTName[task_id],
-                      gki_cb.com.OSRdyTbl[task_id]);
-  }
-
-  GKI_TRACE_ERROR_2("GKI_exception %d %s", code, msg);
-  GKI_TRACE_ERROR_0(
-      "********************************************************************");
-  GKI_TRACE_ERROR_2("* GKI_exception(): %d %s", code, msg);
-  GKI_TRACE_ERROR_0(
-      "********************************************************************");
-
-#if (GKI_DEBUG == TRUE)
-  GKI_disable();
-
-  if (gki_cb.com.ExceptionCnt < GKI_MAX_EXCEPTION) {
-    EXCEPTION_T* pExp;
-
-    pExp = &gki_cb.com.Exception[gki_cb.com.ExceptionCnt++];
-    pExp->type = code;
-    pExp->taskid = GKI_get_taskid();
-    strncpy((char*)pExp->msg, msg, GKI_MAX_EXCEPTION_MSGLEN - 1);
-  }
-
-  GKI_enable();
-#endif
-
-  GKI_TRACE_ERROR_2("GKI_exception %d %s done", code, msg);
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         GKI_get_time_stamp
-**
-** Description      This function formats the time into a user area
-**
-** Parameters:      tbuf -  (output) the address to the memory containing the
-**                  formatted time
-**
-** Returns          the address of the user area containing the formatted time
-**                  The format of the time is ????
-**
-** NOTE             This function is only called by OBEX.
-**
-*******************************************************************************/
-int8_t* GKI_get_time_stamp(int8_t* tbuf) {
-  uint32_t ms_time;
-  uint32_t s_time;
-  uint32_t m_time;
-  uint32_t h_time;
-  int8_t* p_out = tbuf;
-
-  gki_cb.com.OSTicks = times(0);
-  ms_time = GKI_TICKS_TO_MS(gki_cb.com.OSTicks);
-  s_time = ms_time / 100; /* 100 Ticks per second */
-  m_time = s_time / 60;
-  h_time = m_time / 60;
-
-  ms_time -= s_time * 100;
-  s_time -= m_time * 60;
-  m_time -= h_time * 60;
-
-  *p_out++ = (int8_t)((h_time / 10) + '0');
-  *p_out++ = (int8_t)((h_time % 10) + '0');
-  *p_out++ = ':';
-  *p_out++ = (int8_t)((m_time / 10) + '0');
-  *p_out++ = (int8_t)((m_time % 10) + '0');
-  *p_out++ = ':';
-  *p_out++ = (int8_t)((s_time / 10) + '0');
-  *p_out++ = (int8_t)((s_time % 10) + '0');
-  *p_out++ = ':';
-  *p_out++ = (int8_t)((ms_time / 10) + '0');
-  *p_out++ = (int8_t)((ms_time % 10) + '0');
-  *p_out++ = ':';
-  *p_out = 0;
-
-  return (tbuf);
-}
-
-/*******************************************************************************
-**
-** Function         GKI_register_mempool
-**
-** Description      This function registers a specific memory pool.
-**
-** Parameters:      p_mem -  (input) pointer to the memory pool
-**
-** Returns          void
-**
-** NOTE             This function is NOT called by the Widcomm stack and
-**                  profiles. If your OS has different memory pools, you
-**                  can tell GKI the pool to use by calling this function.
-**
-*******************************************************************************/
-void GKI_register_mempool(void* p_mem) {
-  gki_cb.com.p_user_mempool = p_mem;
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         GKI_os_malloc
-**
-** Description      This function allocates memory
-**
-** Parameters:      size -  (input) The size of the memory that has to be
-**                  allocated
-**
-** Returns          the address of the memory allocated, or NULL if failed
-**
-** NOTE             This function is called by the Widcomm stack when
-**                  dynamic memory allocation is used.
-**
-*******************************************************************************/
-void* GKI_os_malloc(uint32_t size) { return (malloc(size)); }
-
-/*******************************************************************************
-**
-** Function         GKI_os_free
-**
-** Description      This function frees memory
-**
-** Parameters:      size -  (input) The address of the memory that has to be
-**                  freed
-**
-** Returns          void
-**
-** NOTE             This function is NOT called by the Widcomm stack and
-**                  profiles. It is only called from within GKI if dynamic
-**
-*******************************************************************************/
-void GKI_os_free(void* p_mem) {
-  if (p_mem != NULL) free(p_mem);
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         GKI_suspend_task()
-**
-** Description      This function suspends the task specified in the argument.
-**
-** Parameters:      task_id  - (input) the id of the task that has to suspended
-**
-** Returns          GKI_SUCCESS if all OK, else GKI_FAILURE
-**
-** NOTE             This function is NOT called by the Widcomm stack and
-**                  profiles. If you want to implement task suspension
-*capability,
-**                  put specific code here.
-**
-*******************************************************************************/
-uint8_t GKI_suspend_task(uint8_t task_id) {
-  GKI_TRACE_1("GKI_suspend_task %d - NOT implemented", task_id);
-
-  GKI_TRACE_1("GKI_suspend_task %d done", task_id);
-
-  return (GKI_SUCCESS);
-}
-
-/*******************************************************************************
-**
-** Function         GKI_resume_task()
-**
-** Description      This function resumes the task specified in the argument.
-**
-** Parameters:      task_id  - (input) the id of the task that has to resumed
-**
-** Returns          GKI_SUCCESS if all OK
-**
-** NOTE             This function is NOT called by the Widcomm stack and
-**                  profiles. If you want to implement task suspension
-*capability,
-**                  put specific code here.
-**
-*******************************************************************************/
-uint8_t GKI_resume_task(uint8_t task_id) {
-  GKI_TRACE_1("GKI_resume_task %d - NOT implemented", task_id);
-
-  GKI_TRACE_1("GKI_resume_task %d done", task_id);
-
-  return (GKI_SUCCESS);
-}
-
-/*******************************************************************************
-**
-** Function         GKI_exit_task
-**
-** Description      This function is called to stop a GKI task.
-**
-** Parameters:      task_id  - (input) the id of the task that has to be stopped
-**
-** Returns          void
-**
-** NOTE             This function is NOT called by the Widcomm stack and
-**                  profiles. If you want to use it in your own implementation,
-**                  put specific code here to kill a task.
-**
-*******************************************************************************/
-void GKI_exit_task(uint8_t task_id) {
-  GKI_disable();
-  gki_cb.com.OSRdyTbl[task_id] = TASK_DEAD;
-
-  /* Destroy mutex and condition variable objects */
-  pthread_mutex_destroy(&gki_cb.os.thread_evt_mutex[task_id]);
-  pthread_cond_destroy(&gki_cb.os.thread_evt_cond[task_id]);
-  pthread_mutex_destroy(&gki_cb.os.thread_timeout_mutex[task_id]);
-  pthread_cond_destroy(&gki_cb.os.thread_timeout_cond[task_id]);
-
-  GKI_enable();
-
-  // GKI_send_event(task_id, EVENT_MASK(GKI_SHUTDOWN_EVT));
-
-  GKI_TRACE_1("GKI_exit_task %d done", task_id);
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         GKI_sched_lock
-**
-** Description      This function is called by tasks to disable scheduler
-**                  task context switching.
-**
-** Returns          void
-**
-** NOTE             This function is NOT called by the Widcomm stack and
-**                  profiles. If you want to use it in your own implementation,
-**                  put code here to tell the OS to disable context switching.
-**
-*******************************************************************************/
-void GKI_sched_lock(void) {
-  GKI_TRACE_0("GKI_sched_lock");
-  GKI_disable();
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         GKI_sched_unlock
-**
-** Description      This function is called by tasks to enable scheduler
-*switching.
-**
-** Returns          void
-**
-** NOTE             This function is NOT called by the Widcomm stack and
-**                  profiles. If you want to use it in your own implementation,
-**                  put code here to tell the OS to re-enable context switching.
-**
-*******************************************************************************/
-void GKI_sched_unlock(void) {
-  GKI_TRACE_0("GKI_sched_unlock");
-  GKI_enable();
-}
-
-/*******************************************************************************
-**
-** Function         GKI_shiftdown
-**
-** Description      shift memory down (to make space to insert a record)
-**
-*******************************************************************************/
-void GKI_shiftdown(uint8_t* p_mem, uint32_t len, uint32_t shift_amount) {
-  register uint8_t* ps = p_mem + len - 1;
-  register uint8_t* pd = ps + shift_amount;
-  register uint32_t xx;
-
-  for (xx = 0; xx < len; xx++) *pd-- = *ps--;
-}
-
-/*******************************************************************************
-**
-** Function         GKI_shiftup
-**
-** Description      shift memory up (to delete a record)
-**
-*******************************************************************************/
-void GKI_shiftup(uint8_t* p_dest, uint8_t* p_src, uint32_t len) {
-  register uint8_t* ps = p_src;
-  register uint8_t* pd = p_dest;
-  register uint32_t xx;
-
-  for (xx = 0; xx < len; xx++) *pd++ = *ps++;
-}
diff --git a/halimpl/bcm2079x/hal/hal/nfc_hal_api.c b/halimpl/bcm2079x/hal/hal/nfc_hal_api.c
deleted file mode 100644
index b40bcc4..0000000
--- a/halimpl/bcm2079x/hal/hal/nfc_hal_api.c
+++ /dev/null
@@ -1,306 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2012-2014 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  NFC Hardware Abstraction Layer API: Implementation for Broadcom NFC
- *  controllers
- *
- ******************************************************************************/
-#include "nfc_hal_api.h"
-#include <string.h>
-#include "gki.h"
-#include "nfc_hal_int.h"
-#include "nfc_hal_target.h"
-
-/*******************************************************************************
-** NFC_HAL_TASK declarations
-*******************************************************************************/
-#define NFC_HAL_TASK_STR ((int8_t*)"NFC_HAL_TASK")
-#define NFC_HAL_TASK_STACK_SIZE 0x400
-uint32_t nfc_hal_task_stack[(NFC_HAL_TASK_STACK_SIZE + 3) / 4];
-
-/*******************************************************************************
-**
-** Function         HAL_NfcInitialize
-**
-** Description      Called when HAL library is loaded.
-**
-**                  Initialize GKI and start the HCIT task
-**
-** Returns          void
-**
-*******************************************************************************/
-void HAL_NfcInitialize(void) {
-  /* Initialize HAL control block */
-  nfc_hal_main_init();
-
-  HAL_TRACE_API1("HAL_NfcInitialize (): NFC_HAL_TASK id=%i", NFC_HAL_TASK);
-
-#ifndef NFC_HAL_SHARED_GKI
-  /* Initialize GKI (not needed if using shared NFC/HAL GKI resources) */
-  GKI_init();
-  GKI_enable();
-#endif
-
-  /* Create the NCI transport task */
-  GKI_create_task(
-      (TASKPTR)nfc_hal_main_task, NFC_HAL_TASK, NFC_HAL_TASK_STR,
-      (uint16_t*)((uint8_t*)nfc_hal_task_stack + NFC_HAL_TASK_STACK_SIZE),
-      sizeof(nfc_hal_task_stack), NULL, NULL);
-
-#ifndef NFC_HAL_SHARED_GKI
-  /* Start GKI scheduler (not needed if using shared NFC/HAL GKI resources) */
-  GKI_run(0);
-#endif
-}
-
-/*******************************************************************************
-**
-** Function         HAL_NfcTerminate
-**
-** Description      Called to terminate NFC HAL
-**
-** Returns          void
-**
-*******************************************************************************/
-void HAL_NfcTerminate(void) { HAL_TRACE_API0("HAL_NfcTerminate ()"); }
-
-/*******************************************************************************
-**
-** Function         HAL_NfcOpen
-**
-** Description      Open transport and intialize the NFCC, and
-**                  Register callback for HAL event notifications,
-**
-**                  HAL_OPEN_CPLT_EVT will notify when operation is complete.
-**
-** Returns          void
-**
-*******************************************************************************/
-void HAL_NfcOpen(tHAL_NFC_CBACK* p_hal_cback,
-                 tHAL_NFC_DATA_CBACK* p_data_cback) {
-  HAL_TRACE_API0("HAL_NfcOpen ()");
-
-  /* Only handle if HAL is not opened (stack cback is NULL) */
-  if (p_hal_cback) {
-    nfc_hal_dm_init();
-    nfc_hal_cb.p_stack_cback = p_hal_cback;
-    nfc_hal_cb.p_data_cback = p_data_cback;
-
-    /* Send startup event to NFC_HAL_TASK */
-    GKI_send_event(NFC_HAL_TASK, NFC_HAL_TASK_EVT_INITIALIZE);
-  }
-}
-
-/*******************************************************************************
-**
-** Function         HAL_NfcClose
-**
-** Description      Prepare for shutdown. A HAL_CLOSE_DONE_EVENT will be
-**                  reported when complete.
-**
-** Returns          void
-**
-*******************************************************************************/
-void HAL_NfcClose(void) {
-  HAL_TRACE_API0("HAL_NfcClose ()");
-
-  /* Only handle if HAL is opened (stack cback is not-NULL) */
-  if (nfc_hal_cb.p_stack_cback) {
-    /* Send shutdown event to NFC_HAL_TASK */
-    GKI_send_event(NFC_HAL_TASK, NFC_HAL_TASK_EVT_TERMINATE);
-  }
-}
-
-/*******************************************************************************
-**
-** Function         HAL_NfcCoreInitialized
-**
-** Description      Called after the CORE_INIT_RSP is received from the NFCC.
-**                  At this time, the HAL can do any chip-specific
-*configuration,
-**                  and when finished signal the libnfc-nci with event
-**                  HAL_POST_INIT_DONE.
-**
-** Returns          void
-**
-*******************************************************************************/
-void HAL_NfcCoreInitialized(uint16_t data_len,
-                            uint8_t* p_core_init_rsp_params) {
-  NFC_HDR* p_msg;
-  uint16_t size;
-
-  HAL_TRACE_API0("HAL_NfcCoreInitialized ()");
-
-  /* NCI payload len + NCI header size */
-  size = p_core_init_rsp_params[2] + NCI_MSG_HDR_SIZE;
-
-  /* Send message to NFC_HAL_TASK */
-  p_msg = (NFC_HDR*)GKI_getbuf((uint16_t)(size + NFC_HDR_SIZE));
-  if (p_msg != NULL) {
-    p_msg->event = NFC_HAL_EVT_POST_CORE_RESET;
-    p_msg->offset = 0;
-    p_msg->len = size;
-    p_msg->layer_specific = 0;
-    memcpy((uint8_t*)(p_msg + 1) + p_msg->offset, p_core_init_rsp_params, size);
-
-    GKI_send_msg(NFC_HAL_TASK, NFC_HAL_TASK_MBOX, p_msg);
-  }
-}
-
-/*******************************************************************************
-**
-** Function         HAL_NfcWrite
-**
-** Description      Send an NCI control message or data packet to the
-**                  transport. If an NCI command message exceeds the transport
-**                  size, HAL is responsible for fragmenting it, Data packets
-**                  must be of the correct size.
-**
-** Returns          void
-**
-*******************************************************************************/
-void HAL_NfcWrite(uint16_t data_len, uint8_t* p_data) {
-  NFC_HDR* p_msg;
-  uint8_t mt;
-
-  HAL_TRACE_API0("HAL_NfcWrite ()");
-
-  if (data_len > (NCI_MAX_CTRL_SIZE + NCI_MSG_HDR_SIZE)) {
-    HAL_TRACE_ERROR1("HAL_NfcWrite (): too many bytes (%d)", data_len);
-    return;
-  }
-
-  /* Send message to NFC_HAL_TASK */
-  p_msg = (NFC_HDR*)GKI_getpoolbuf(NFC_HAL_NCI_POOL_ID);
-  if (p_msg != NULL) {
-    p_msg->event = NFC_HAL_EVT_TO_NFC_NCI;
-    p_msg->offset = NFC_HAL_NCI_MSG_OFFSET_SIZE;
-    p_msg->len = data_len;
-    memcpy((uint8_t*)(p_msg + 1) + p_msg->offset, p_data, data_len);
-
-    /* Check if message is a command or data */
-    mt = (*(p_data)&NCI_MT_MASK) >> NCI_MT_SHIFT;
-    p_msg->layer_specific = (mt == NCI_MT_CMD) ? NFC_HAL_WAIT_RSP_CMD : 0;
-
-    GKI_send_msg(NFC_HAL_TASK, NFC_HAL_TASK_MBOX, p_msg);
-  }
-}
-
-/*******************************************************************************
-**
-** Function         HAL_NfcPreDiscover
-**
-** Description      Perform any vendor-specific pre-discovery actions (if
-*needed)
-**                  If any actions were performed TRUE will be returned, and
-**                  HAL_PRE_DISCOVER_DONE_EVENT will notify when actions are
-**                  completed.
-**
-** Returns          TRUE if vendor-specific pre-discovery actions initialized
-**                  FALSE if no vendor-specific pre-discovery actions are
-*needed.
-**
-*******************************************************************************/
-bool HAL_NfcPreDiscover(void) {
-  bool status = false;
-
-  NFC_HDR* p_msg;
-
-  HAL_TRACE_API0("HAL_NfcPreDiscover ()");
-  if (nfc_hal_cb.pre_discover_done == false) {
-    nfc_hal_cb.pre_discover_done = true;
-    if (p_nfc_hal_pre_discover_cfg && *p_nfc_hal_pre_discover_cfg) {
-      status = true;
-      /* Send message to NFC_HAL_TASK */
-      p_msg = (NFC_HDR*)GKI_getpoolbuf(NFC_HAL_NCI_POOL_ID);
-      if (p_msg != NULL) {
-        p_msg->event = NFC_HAL_EVT_PRE_DISCOVER;
-        GKI_send_msg(NFC_HAL_TASK, NFC_HAL_TASK_MBOX, p_msg);
-      }
-    }
-  }
-
-  HAL_TRACE_API1("HAL_NfcPreDiscover status:%d", status);
-  return status;
-}
-
-/*******************************************************************************
-**
-** Function         HAL_NfcControlGranted
-**
-** Description      Grant control to HAL control for sending NCI commands.
-**
-**                  Call in response to HAL_REQUEST_CONTROL_EVENT.
-**
-**                  Must only be called when there are no NCI commands pending.
-**
-**                  HAL_RELEASE_CONTROL_EVENT will notify when HAL no longer
-**                  needs control of NCI.
-**
-**
-** Returns          void
-**
-*******************************************************************************/
-void HAL_NfcControlGranted(void) {
-  NFC_HDR* p_msg;
-  HAL_TRACE_API0("HAL_NfcControlGranted ()");
-
-  /* Send message to NFC_HAL_TASK */
-  p_msg = (NFC_HDR*)GKI_getpoolbuf(NFC_HAL_NCI_POOL_ID);
-  if (p_msg != NULL) {
-    p_msg->event = NFC_HAL_EVT_CONTROL_GRANTED;
-    GKI_send_msg(NFC_HAL_TASK, NFC_HAL_TASK_MBOX, p_msg);
-  }
-}
-
-/*******************************************************************************
-**
-** Function         HAL_NfcPowerCycle
-**
-** Description      Restart NFCC by power cyle
-**
-**                  HAL_OPEN_CPLT_EVT will notify when operation is complete.
-**
-** Returns          void
-**
-*******************************************************************************/
-void HAL_NfcPowerCycle(void) {
-  HAL_TRACE_API0("HAL_NfcPowerCycle ()");
-
-  /* Only handle if HAL is opened (stack cback is not-NULL) */
-  if (nfc_hal_cb.p_stack_cback) {
-    /* Send power cycle event to NFC_HAL_TASK */
-    GKI_send_event(NFC_HAL_TASK, NFC_HAL_TASK_EVT_POWER_CYCLE);
-  }
-}
-
-/*******************************************************************************
-**
-** Function         HAL_NfcGetMaxNfcee
-**
-** Description      Retrieve the maximum number of NFCEEs supported by NFCC
-**
-** Returns          the maximum number of NFCEEs supported by NFCC
-**
-*******************************************************************************/
-uint8_t HAL_NfcGetMaxNfcee(void) {
-  HAL_TRACE_API1("HAL_NfcGetMaxNfcee: %d", nfc_hal_cb.max_ee);
-  return nfc_hal_cb.max_ee;
-}
diff --git a/halimpl/bcm2079x/hal/hal/nfc_hal_dm.c b/halimpl/bcm2079x/hal/hal/nfc_hal_dm.c
deleted file mode 100644
index b2fec1b..0000000
--- a/halimpl/bcm2079x/hal/hal/nfc_hal_dm.c
+++ /dev/null
@@ -1,1331 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2012-2014 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  Vendor-specific handler for DM events
- *
- ******************************************************************************/
-#include <string.h>
-#include "nfc_hal_int.h"
-#include "nfc_hal_post_reset.h"
-#include "upio.h"
-#include "userial.h"
-
-/*****************************************************************************
-** Constants and types
-*****************************************************************************/
-
-#define NFC_HAL_I93_RW_CFG_LEN (5)
-#define NFC_HAL_I93_RW_CFG_PARAM_LEN (3)
-#define NFC_HAL_I93_AFI (0)
-#define NFC_HAL_I93_ENABLE_SMART_POLL (1)
-
-static uint8_t nfc_hal_dm_i93_rw_cfg[NFC_HAL_I93_RW_CFG_LEN] = {
-    NCI_PARAM_ID_I93_DATARATE, NFC_HAL_I93_RW_CFG_PARAM_LEN,
-    NFC_HAL_I93_FLAG_DATA_RATE,   /* Bit0:Sub carrier, Bit1:Data rate,
-                                     Bit4:Enable/Disable AFI */
-    NFC_HAL_I93_AFI,              /* AFI if Bit 4 is set in the flag byte */
-    NFC_HAL_I93_ENABLE_SMART_POLL /* Bit0:Enable/Disable smart poll */
-};
-
-static uint8_t nfc_hal_dm_set_fw_fsm_cmd[NCI_MSG_HDR_SIZE + 1] = {
-    NCI_MTS_CMD | NCI_GID_PROP, NCI_MSG_SET_FWFSM, 0x01, 0x00,
-};
-#define NCI_SET_FWFSM_OFFSET_ENABLE 3
-
-/* length of parameters in XTAL_INDEX CMD */
-#define NCI_PROP_PARAM_SIZE_XTAL_INDEX 3
-#ifndef NCI_PROP_PARAM_MAX_SIZE_XTAL_INDEX
-#define NCI_PROP_PARAM_MAX_SIZE_XTAL_INDEX 20
-#endif
-
-const uint8_t nfc_hal_dm_get_build_info_cmd[NCI_MSG_HDR_SIZE] = {
-    NCI_MTS_CMD | NCI_GID_PROP, NCI_MSG_GET_BUILD_INFO, 0x00};
-#define NCI_BUILD_INFO_OFFSET_HWID 25 /* HW ID offset in build info RSP */
-
-const uint8_t nfc_hal_dm_get_patch_version_cmd[NCI_MSG_HDR_SIZE] = {
-    NCI_MTS_CMD | NCI_GID_PROP, NCI_MSG_GET_PATCH_VERSION, 0x00};
-/* Length of patch version string in PATCH_INFO */
-#define NCI_PATCH_INFO_VERSION_LEN 16
-
-/*****************************************************************************
-** Extern function prototypes
-*****************************************************************************/
-extern uint8_t* p_nfc_hal_dm_lptd_cfg;
-extern uint8_t* p_nfc_hal_dm_pll_325_cfg;
-extern uint8_t* p_nfc_hal_dm_start_up_cfg;
-extern uint8_t* p_nfc_hal_dm_start_up_vsc_cfg;
-extern tNFC_HAL_CFG* p_nfc_hal_cfg;
-extern tNFC_HAL_DM_PRE_SET_MEM* p_nfc_hal_dm_pre_set_mem;
-
-/*****************************************************************************
-** Local function prototypes
-*****************************************************************************/
-
-/*******************************************************************************
-**
-** Function         nfc_hal_dm_set_config
-**
-** Description      Send NCI config items to NFCC
-**
-** Returns          tHAL_NFC_STATUS
-**
-*******************************************************************************/
-tHAL_NFC_STATUS nfc_hal_dm_set_config(uint8_t tlv_size, uint8_t* p_param_tlvs,
-                                      tNFC_HAL_NCI_CBACK* p_cback) {
-  uint8_t *p_buff, *p;
-  uint8_t num_param = 0, param_len, rem_len, *p_tlv;
-  uint16_t cmd_len = NCI_MSG_HDR_SIZE + tlv_size + 1;
-  tHAL_NFC_STATUS status = HAL_NFC_STATUS_FAILED;
-
-  if ((tlv_size == 0) || (p_param_tlvs == NULL)) {
-    return status;
-  }
-
-  p_buff = (uint8_t*)GKI_getbuf((uint16_t)(NCI_MSG_HDR_SIZE + tlv_size));
-  if (p_buff != NULL) {
-    p = p_buff;
-
-    NCI_MSG_BLD_HDR0(p, NCI_MT_CMD, NCI_GID_CORE);
-    NCI_MSG_BLD_HDR1(p, NCI_MSG_CORE_SET_CONFIG);
-    UINT8_TO_STREAM(p, (uint8_t)(tlv_size + 1));
-
-    rem_len = tlv_size;
-    p_tlv = p_param_tlvs;
-    while (rem_len > 1) {
-      num_param++; /* number of params */
-
-      p_tlv++;              /* param type   */
-      param_len = *p_tlv++; /* param length */
-
-      rem_len -= 2; /* param type and length */
-      if (rem_len >= param_len) {
-        rem_len -= param_len;
-        p_tlv += param_len; /* next param_type */
-
-        if (rem_len == 0) {
-          status = HAL_NFC_STATUS_OK;
-          break;
-        }
-      } else {
-        /* error found */
-        break;
-      }
-    }
-
-    if (status == HAL_NFC_STATUS_OK) {
-      UINT8_TO_STREAM(p, num_param);
-      ARRAY_TO_STREAM(p, p_param_tlvs, tlv_size);
-
-      nfc_hal_dm_send_nci_cmd(p_buff, cmd_len, p_cback);
-    } else {
-      HAL_TRACE_ERROR0("nfc_hal_dm_set_config ():Bad TLV");
-    }
-
-    GKI_freebuf(p_buff);
-  }
-
-  return status;
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_dm_set_fw_fsm
-**
-** Description      Enable or disable FW FSM
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_dm_set_fw_fsm(bool enable, tNFC_HAL_NCI_CBACK* p_cback) {
-  if (enable)
-    nfc_hal_dm_set_fw_fsm_cmd[NCI_SET_FWFSM_OFFSET_ENABLE] =
-        0x01; /* Enable, default is disabled */
-  else
-    nfc_hal_dm_set_fw_fsm_cmd[NCI_SET_FWFSM_OFFSET_ENABLE] = 0x00; /* Disable */
-
-  nfc_hal_dm_send_nci_cmd(nfc_hal_dm_set_fw_fsm_cmd, NCI_MSG_HDR_SIZE + 1,
-                          p_cback);
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_dm_config_nfcc_cback
-**
-** Description      Callback for NCI vendor specific command complete
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_dm_config_nfcc_cback(tNFC_HAL_NCI_EVT event, uint16_t data_len,
-                                  uint8_t* p_data) {
-  if (nfc_hal_cb.dev_cb.next_dm_config == NFC_HAL_DM_CONFIG_NONE) {
-    nfc_hal_hci_enable();
-  } else {
-    nfc_hal_dm_config_nfcc();
-  }
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_dm_send_startup_vsc
-**
-** Description      Send VS command before NFA start-up
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfc_hal_dm_send_startup_vsc(void) {
-  uint8_t *p, *p_end;
-  uint16_t len;
-
-  HAL_TRACE_DEBUG0("nfc_hal_dm_send_startup_vsc ()");
-
-  /* VSC must have NCI header at least */
-  if (nfc_hal_cb.dev_cb.next_startup_vsc + NCI_MSG_HDR_SIZE - 1 <=
-      *p_nfc_hal_dm_start_up_vsc_cfg) {
-    p = p_nfc_hal_dm_start_up_vsc_cfg + nfc_hal_cb.dev_cb.next_startup_vsc;
-    len = *(p + 2);
-    p_end = p + NCI_MSG_HDR_SIZE - 1 + len;
-
-    if (p_end <=
-        p_nfc_hal_dm_start_up_vsc_cfg + *p_nfc_hal_dm_start_up_vsc_cfg) {
-      /* move to next VSC */
-      nfc_hal_cb.dev_cb.next_startup_vsc += NCI_MSG_HDR_SIZE + len;
-
-      /* if this is last VSC */
-      if (p_end ==
-          p_nfc_hal_dm_start_up_vsc_cfg + *p_nfc_hal_dm_start_up_vsc_cfg)
-        nfc_hal_cb.dev_cb.next_dm_config = NFC_HAL_DM_CONFIG_NONE;
-
-      nfc_hal_dm_send_nci_cmd(p, (uint16_t)(NCI_MSG_HDR_SIZE + len),
-                              nfc_hal_dm_config_nfcc_cback);
-      return;
-    }
-  }
-
-  HAL_TRACE_ERROR0("nfc_hal_dm_send_startup_vsc (): Bad start-up VSC");
-
-  NFC_HAL_SET_INIT_STATE(NFC_HAL_INIT_STATE_IDLE);
-  nfc_hal_cb.p_stack_cback(HAL_NFC_POST_INIT_CPLT_EVT, HAL_NFC_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_dm_config_nfcc
-**
-** Description      Send VS config before NFA start-up
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_dm_config_nfcc(void) {
-  HAL_TRACE_DEBUG1("nfc_hal_dm_config_nfcc (): next_dm_config = %d",
-                   nfc_hal_cb.dev_cb.next_dm_config);
-
-  if ((p_nfc_hal_dm_lptd_cfg[0]) &&
-      (nfc_hal_cb.dev_cb.next_dm_config <= NFC_HAL_DM_CONFIG_LPTD)) {
-    nfc_hal_cb.dev_cb.next_dm_config = NFC_HAL_DM_CONFIG_PLL_325;
-
-    if (nfc_hal_dm_set_config(
-            p_nfc_hal_dm_lptd_cfg[0], &p_nfc_hal_dm_lptd_cfg[1],
-            nfc_hal_dm_config_nfcc_cback) == HAL_NFC_STATUS_OK) {
-      return;
-    } else {
-      NFC_HAL_SET_INIT_STATE(NFC_HAL_INIT_STATE_IDLE);
-      nfc_hal_cb.p_stack_cback(HAL_NFC_POST_INIT_CPLT_EVT,
-                               HAL_NFC_STATUS_FAILED);
-      return;
-    }
-  }
-
-  if ((p_nfc_hal_dm_pll_325_cfg) &&
-      (nfc_hal_cb.dev_cb.next_dm_config <= NFC_HAL_DM_CONFIG_PLL_325)) {
-    nfc_hal_cb.dev_cb.next_dm_config = NFC_HAL_DM_CONFIG_START_UP;
-
-    if (nfc_hal_dm_set_config(
-            NFC_HAL_PLL_325_SETCONFIG_PARAM_LEN, p_nfc_hal_dm_pll_325_cfg,
-            nfc_hal_dm_config_nfcc_cback) == HAL_NFC_STATUS_OK) {
-      return;
-    } else {
-      NFC_HAL_SET_INIT_STATE(NFC_HAL_INIT_STATE_IDLE);
-      nfc_hal_cb.p_stack_cback(HAL_NFC_POST_INIT_CPLT_EVT,
-                               HAL_NFC_STATUS_FAILED);
-      return;
-    }
-  }
-
-  if ((p_nfc_hal_dm_start_up_cfg[0]) &&
-      (nfc_hal_cb.dev_cb.next_dm_config <= NFC_HAL_DM_CONFIG_START_UP)) {
-    nfc_hal_cb.dev_cb.next_dm_config = NFC_HAL_DM_CONFIG_I93_DATA_RATE;
-    if (nfc_hal_dm_set_config(
-            p_nfc_hal_dm_start_up_cfg[0], &p_nfc_hal_dm_start_up_cfg[1],
-            nfc_hal_dm_config_nfcc_cback) == HAL_NFC_STATUS_OK) {
-      return;
-    } else {
-      NFC_HAL_SET_INIT_STATE(NFC_HAL_INIT_STATE_IDLE);
-      nfc_hal_cb.p_stack_cback(HAL_NFC_POST_INIT_CPLT_EVT,
-                               HAL_NFC_STATUS_FAILED);
-      return;
-    }
-  }
-
-#if (NFC_HAL_I93_FLAG_DATA_RATE == NFC_HAL_I93_FLAG_DATA_RATE_HIGH)
-  if (nfc_hal_cb.dev_cb.next_dm_config <= NFC_HAL_DM_CONFIG_I93_DATA_RATE) {
-    nfc_hal_cb.dev_cb.next_dm_config = NFC_HAL_DM_CONFIG_FW_FSM;
-    if (nfc_hal_dm_set_config(NFC_HAL_I93_RW_CFG_LEN, nfc_hal_dm_i93_rw_cfg,
-                              nfc_hal_dm_config_nfcc_cback) ==
-        HAL_NFC_STATUS_OK) {
-      return;
-    } else {
-      NFC_HAL_SET_INIT_STATE(NFC_HAL_INIT_STATE_IDLE);
-      nfc_hal_cb.p_stack_cback(HAL_NFC_POST_INIT_CPLT_EVT,
-                               HAL_NFC_STATUS_FAILED);
-      return;
-    }
-  }
-#endif
-
-  /* FW FSM is disabled as default in NFCC */
-  if (nfc_hal_cb.dev_cb.next_dm_config <= NFC_HAL_DM_CONFIG_FW_FSM) {
-    nfc_hal_cb.dev_cb.next_dm_config = NFC_HAL_DM_CONFIG_START_UP_VSC;
-    nfc_hal_dm_set_fw_fsm(NFC_HAL_DM_MULTI_TECH_RESP,
-                          nfc_hal_dm_config_nfcc_cback);
-    return;
-  }
-
-  if (nfc_hal_cb.dev_cb.next_dm_config <= NFC_HAL_DM_CONFIG_START_UP_VSC) {
-    if (p_nfc_hal_dm_start_up_vsc_cfg && *p_nfc_hal_dm_start_up_vsc_cfg) {
-      nfc_hal_dm_send_startup_vsc();
-      return;
-    }
-  }
-
-  /* nothing to config */
-  nfc_hal_cb.dev_cb.next_dm_config = NFC_HAL_DM_CONFIG_NONE;
-  nfc_hal_dm_config_nfcc_cback(0, 0, NULL);
-}
-
-/*******************************************************************************
-**
-** Function:    nfc_hal_dm_get_xtal_index
-**
-** Description: Return Xtal index and frequency
-**
-** Returns:     tNFC_HAL_XTAL_INDEX
-**
-*******************************************************************************/
-tNFC_HAL_XTAL_INDEX nfc_hal_dm_get_xtal_index(uint32_t brcm_hw_id,
-                                              uint16_t* p_xtal_freq) {
-  uint8_t xx;
-
-  HAL_TRACE_DEBUG1("nfc_hal_dm_get_xtal_index() brcm_hw_id:0x%x", brcm_hw_id);
-
-  for (xx = 0; xx < nfc_post_reset_cb.dev_init_config.num_xtal_cfg; xx++) {
-    if ((brcm_hw_id & BRCM_NFC_GEN_MASK) ==
-        nfc_post_reset_cb.dev_init_config.xtal_cfg[xx].brcm_hw_id) {
-      *p_xtal_freq = nfc_post_reset_cb.dev_init_config.xtal_cfg[xx].xtal_freq;
-      return (nfc_post_reset_cb.dev_init_config.xtal_cfg[xx].xtal_index);
-    }
-  }
-
-  /* if not found */
-  *p_xtal_freq = 0;
-  return (NFC_HAL_XTAL_INDEX_MAX);
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_dm_set_xtal_freq_index
-**
-** Description      Set crystal frequency index
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_dm_set_xtal_freq_index(void) {
-  uint8_t nci_brcm_xtal_index_cmd[NCI_MSG_HDR_SIZE +
-                                  NCI_PROP_PARAM_MAX_SIZE_XTAL_INDEX];
-  uint8_t* p;
-  tNFC_HAL_XTAL_INDEX xtal_index;
-  uint16_t xtal_freq;
-  uint8_t cmd_len = NCI_PROP_PARAM_SIZE_XTAL_INDEX;
-  extern uint8_t* p_nfc_hal_dm_xtal_params_cfg;
-
-  HAL_TRACE_DEBUG1("nfc_hal_dm_set_xtal_freq_index (): brcm_hw_id = 0x%x",
-                   nfc_hal_cb.dev_cb.brcm_hw_id);
-
-  xtal_index =
-      nfc_hal_dm_get_xtal_index(nfc_hal_cb.dev_cb.brcm_hw_id, &xtal_freq);
-  if ((xtal_index == NFC_HAL_XTAL_INDEX_SPECIAL) &&
-      (p_nfc_hal_dm_xtal_params_cfg)) {
-    cmd_len +=
-        p_nfc_hal_dm_xtal_params_cfg[0]; /* [0] is the length of extra params */
-  }
-
-  p = nci_brcm_xtal_index_cmd;
-  UINT8_TO_STREAM(p, (NCI_MTS_CMD | NCI_GID_PROP));
-  UINT8_TO_STREAM(p, NCI_MSG_GET_XTAL_INDEX_FROM_DH);
-  UINT8_TO_STREAM(p, cmd_len);
-  UINT8_TO_STREAM(p, xtal_index);
-  UINT16_TO_STREAM(p, xtal_freq);
-  if (cmd_len > NCI_PROP_PARAM_SIZE_XTAL_INDEX) {
-    memcpy(p, &p_nfc_hal_dm_xtal_params_cfg[1],
-           p_nfc_hal_dm_xtal_params_cfg[0]);
-  }
-
-  NFC_HAL_SET_INIT_STATE(NFC_HAL_INIT_STATE_W4_XTAL_SET);
-
-  nfc_hal_dm_send_nci_cmd(nci_brcm_xtal_index_cmd, NCI_MSG_HDR_SIZE + cmd_len,
-                          NULL);
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_dm_set_power_level_zero
-**
-** Description      set power level to 0
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfc_hal_dm_set_power_level_zero(void) {
-  uint8_t
-      nci_brcm_set_pwr_level_cmd[NCI_MSG_HDR_SIZE + NCI_PARAM_LEN_POWER_LEVEL];
-  uint8_t* p;
-  uint8_t cmd_len = NCI_PARAM_LEN_POWER_LEVEL;
-
-  p = nci_brcm_set_pwr_level_cmd;
-  UINT8_TO_STREAM(p, (NCI_MTS_CMD | NCI_GID_PROP));
-  UINT8_TO_STREAM(p, NCI_MSG_POWER_LEVEL);
-  UINT8_TO_STREAM(p, NCI_PARAM_LEN_POWER_LEVEL);
-  memset(p, 0, NCI_PARAM_LEN_POWER_LEVEL);
-
-  nfc_hal_dm_send_nci_cmd(nci_brcm_set_pwr_level_cmd,
-                          NCI_MSG_HDR_SIZE + cmd_len,
-                          nfc_hal_main_exit_op_done);
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_dm_send_get_build_info_cmd
-**
-** Description      Send NCI_MSG_GET_BUILD_INFO CMD
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_dm_send_get_build_info_cmd(void) {
-  NFC_HAL_SET_INIT_STATE(NFC_HAL_INIT_STATE_W4_BUILD_INFO);
-
-  /* get build information to find out HW */
-  nfc_hal_dm_send_nci_cmd(nfc_hal_dm_get_build_info_cmd, NCI_MSG_HDR_SIZE,
-                          NULL);
-}
-/*******************************************************************************
-**
-** Function:    nfc_hal_dm_adjust_hw_id
-**
-** Description: The hw_id of certain chips are shifted by 8 bits.
-**              Adjust the hw_id before processing.
-**
-** Returns:     Nothing
-**
-*******************************************************************************/
-static uint32_t nfc_hal_dm_adjust_hw_id(uint32_t hw_id) {
-  if ((hw_id & 0xF0000000) == 0)
-    hw_id <<= 4; /* shift hw_id by 4 bits to align w the format of most chips */
-  return hw_id;
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_dm_check_xtal
-**
-** Description      check if need to send xtal command.
-**                  If not, proceed to next step get_patch_version.
-**
-** Returns          void
-**
-*******************************************************************************/
-static void nfc_hal_dm_check_xtal(void) {
-  uint16_t xtal_freq;
-  tNFC_HAL_XTAL_INDEX xtal_index;
-
-  /* if NFCC needs to set Xtal frequency before getting patch version */
-  xtal_index =
-      nfc_hal_dm_get_xtal_index(nfc_hal_cb.dev_cb.brcm_hw_id, &xtal_freq);
-  if ((xtal_index < NFC_HAL_XTAL_INDEX_MAX) ||
-      (xtal_index == NFC_HAL_XTAL_INDEX_SPECIAL)) {
-    {
-      /* set Xtal index before getting patch version */
-      nfc_hal_dm_set_xtal_freq_index();
-      return;
-    }
-  }
-
-  NFC_HAL_SET_INIT_STATE(NFC_HAL_INIT_STATE_W4_PATCH_INFO);
-
-  nfc_hal_dm_send_nci_cmd(nfc_hal_dm_get_patch_version_cmd, NCI_MSG_HDR_SIZE,
-                          NULL);
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_dm_pre_set_mem_cback
-**
-** Description      This is pre-set mem complete callback.
-**
-** Returns          void
-**
-*******************************************************************************/
-static void nfc_hal_dm_pre_set_mem_cback(tNFC_HAL_BTVSC_CPLT* pData) {
-  uint8_t status = pData->p_param_buf[0];
-
-  HAL_TRACE_DEBUG1("nfc_hal_dm_pre_set_mem_cback: %d", status);
-  /* if it is completed */
-  if (status == HCI_SUCCESS) {
-    if (!nfc_hal_dm_check_pre_set_mem()) {
-      return;
-    }
-  }
-  nfc_hal_dm_check_xtal();
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_dm_check_pre_set_mem
-**
-** Description      Check if need to send the command.
-**
-** Returns          TRUE if done.
-**
-*******************************************************************************/
-bool nfc_hal_dm_check_pre_set_mem(void) {
-  uint8_t cmd[NFC_HAL_BT_HCI_CMD_HDR_SIZE + HCI_BRCM_PRE_SET_MEM_LENGTH];
-  uint8_t* p;
-  uint32_t addr = 0;
-
-  if (p_nfc_hal_dm_pre_set_mem)
-    addr = p_nfc_hal_dm_pre_set_mem[nfc_hal_cb.pre_set_mem_idx].addr;
-  HAL_TRACE_DEBUG2("nfc_hal_dm_check_pre_set_mem: %d/0x%x",
-                   nfc_hal_cb.pre_set_mem_idx, addr);
-  if (addr == 0) {
-    return true;
-  }
-  p = cmd;
-
-  /* Add the command */
-  UINT16_TO_STREAM(p, HCI_BRCM_PRE_SET_MEM);
-  UINT8_TO_STREAM(p, HCI_BRCM_PRE_SET_MEM_LENGTH);
-
-  UINT8_TO_STREAM(p, HCI_BRCM_PRE_SET_MEM_TYPE);
-  UINT32_TO_STREAM(p, addr);
-  UINT8_TO_STREAM(p, 0);
-  UINT32_TO_STREAM(p,
-                   p_nfc_hal_dm_pre_set_mem[nfc_hal_cb.pre_set_mem_idx].data);
-  nfc_hal_cb.pre_set_mem_idx++;
-
-  nfc_hal_dm_send_bt_cmd(
-      cmd, NFC_HAL_BT_HCI_CMD_HDR_SIZE + HCI_BRCM_PRE_SET_MEM_LENGTH,
-      nfc_hal_dm_pre_set_mem_cback);
-  return false;
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_dm_got_vs_rsp
-**
-** Description      Received VS RSP. Clean up control block to allow next NCI
-*cmd
-**
-** Returns          void
-**
-*******************************************************************************/
-tNFC_HAL_NCI_CBACK* nfc_hal_dm_got_vs_rsp(void) {
-  tNFC_HAL_NCI_CBACK* p_cback = NULL;
-  nfc_hal_cb.ncit_cb.nci_wait_rsp = NFC_HAL_WAIT_RSP_NONE;
-  p_cback = (tNFC_HAL_NCI_CBACK*)nfc_hal_cb.ncit_cb.p_vsc_cback;
-  nfc_hal_cb.ncit_cb.p_vsc_cback = NULL;
-  nfc_hal_main_stop_quick_timer(&nfc_hal_cb.ncit_cb.nci_wait_rsp_timer);
-  return p_cback;
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_dm_proc_msg_during_init
-**
-** Description      Process NCI message while initializing NFCC
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_dm_proc_msg_during_init(NFC_HDR* p_msg) {
-  uint8_t* p;
-  uint8_t reset_reason, reset_type;
-  uint8_t mt, pbf, gid, op_code;
-  uint8_t *p_old, old_gid, old_oid, old_mt;
-  uint8_t u8;
-  tNFC_HAL_NCI_CBACK* p_cback = NULL;
-  uint8_t chipverlen;
-  uint8_t chipverstr[NCI_SPD_HEADER_CHIPVER_LEN];
-  uint32_t hw_id = 0;
-
-  HAL_TRACE_DEBUG1("nfc_hal_dm_proc_msg_during_init(): init state:%d",
-                   nfc_hal_cb.dev_cb.initializing_state);
-
-  p = (uint8_t*)(p_msg + 1) + p_msg->offset;
-
-  NCI_MSG_PRS_HDR0(p, mt, pbf, gid);
-  NCI_MSG_PRS_HDR1(p, op_code);
-
-  /* check if waiting for this response */
-  if ((nfc_hal_cb.ncit_cb.nci_wait_rsp == NFC_HAL_WAIT_RSP_CMD) ||
-      (nfc_hal_cb.ncit_cb.nci_wait_rsp == NFC_HAL_WAIT_RSP_VSC)) {
-    if (mt == NCI_MT_RSP) {
-      p_old = nfc_hal_cb.ncit_cb.last_hdr;
-      NCI_MSG_PRS_HDR0(p_old, old_mt, pbf, old_gid);
-      old_oid = ((*p_old) & NCI_OID_MASK);
-      /* make sure this is the RSP we are waiting for before updating the
-       * command window */
-      if ((old_gid == gid) && (old_oid == op_code)) {
-        nfc_hal_cb.ncit_cb.nci_wait_rsp = NFC_HAL_WAIT_RSP_NONE;
-        p_cback = (tNFC_HAL_NCI_CBACK*)nfc_hal_cb.ncit_cb.p_vsc_cback;
-        nfc_hal_cb.ncit_cb.p_vsc_cback = NULL;
-        nfc_hal_main_stop_quick_timer(&nfc_hal_cb.ncit_cb.nci_wait_rsp_timer);
-      }
-    }
-  }
-
-  if (gid == NCI_GID_CORE) {
-    if (op_code == NCI_MSG_CORE_RESET) {
-      if (mt == NCI_MT_NTF) {
-        if ((nfc_hal_cb.dev_cb.initializing_state ==
-             NFC_HAL_INIT_STATE_W4_NFCC_ENABLE) ||
-            (nfc_hal_cb.dev_cb.initializing_state ==
-             NFC_HAL_INIT_STATE_POST_XTAL_SET)) {
-          /*
-          ** Core reset ntf in the following cases;
-          ** 1) after power up (raising REG_PU)
-          ** 2) after setting xtal index
-          ** Start pre-initializing NFCC
-          */
-          nfc_hal_main_stop_quick_timer(&nfc_hal_cb.timer);
-          nfc_hal_dm_pre_init_nfcc();
-        } else {
-          /* Core reset ntf after post-patch download, Call reset notification
-           * callback */
-          p++; /* Skip over param len */
-          STREAM_TO_UINT8(reset_reason, p);
-          STREAM_TO_UINT8(reset_type, p);
-          nfc_hal_prm_spd_reset_ntf(reset_reason, reset_type);
-        }
-      }
-    } else if (p_cback) {
-      (*p_cback)((tNFC_HAL_NCI_EVT)(op_code), p_msg->len,
-                 (uint8_t*)(p_msg + 1) + p_msg->offset);
-    }
-  } else if (gid == NCI_GID_PROP) /* this is for download patch */
-  {
-    if (mt == NCI_MT_NTF)
-      op_code |= NCI_NTF_BIT;
-    else
-      op_code |= NCI_RSP_BIT;
-
-    if (nfc_hal_cb.dev_cb.initializing_state ==
-        NFC_HAL_INIT_STATE_W4_XTAL_SET) {
-      if (op_code == (NCI_RSP_BIT | NCI_MSG_GET_XTAL_INDEX_FROM_DH)) {
-        /* start timer in case that NFCC doesn't send RESET NTF after loading
-         * patch from NVM */
-        NFC_HAL_SET_INIT_STATE(NFC_HAL_INIT_STATE_POST_XTAL_SET);
-
-        nfc_hal_main_start_quick_timer(
-            &nfc_hal_cb.timer, NFC_HAL_TTYPE_NFCC_ENABLE,
-            ((p_nfc_hal_cfg->nfc_hal_post_xtal_timeout) *
-             QUICK_TIMER_TICKS_PER_SEC) /
-                1000);
-      }
-    } else if ((op_code == NFC_VS_GET_BUILD_INFO_EVT) &&
-               (nfc_hal_cb.dev_cb.initializing_state ==
-                NFC_HAL_INIT_STATE_W4_BUILD_INFO)) {
-      p += NCI_BUILD_INFO_OFFSET_HWID;
-
-      STREAM_TO_UINT32(hw_id, p);
-      nfc_hal_cb.dev_cb.brcm_hw_id = nfc_hal_dm_adjust_hw_id(hw_id);
-      HAL_TRACE_DEBUG2("brcm_hw_id: 0x%x -> 0x%x", hw_id,
-                       nfc_hal_cb.dev_cb.brcm_hw_id);
-
-      STREAM_TO_UINT8(chipverlen, p);
-      memset(chipverstr, 0, NCI_SPD_HEADER_CHIPVER_LEN);
-
-      STREAM_TO_ARRAY(chipverstr, p, chipverlen);
-
-      /* If chip is not 20791 and 43341, set flag to send the "Disable" VSC */
-      if (((nfc_hal_cb.dev_cb.brcm_hw_id & BRCM_NFC_GEN_MASK) !=
-           BRCM_NFC_20791_GEN) &&
-          ((nfc_hal_cb.dev_cb.brcm_hw_id & BRCM_NFC_GEN_MASK) !=
-           BRCM_NFC_43341_GEN)) {
-        nfc_hal_cb.hal_flags |= NFC_HAL_FLAGS_NEED_DISABLE_VSC;
-      }
-
-      nfc_hal_hci_handle_build_info(chipverlen, chipverstr);
-      nfc_hal_cb.pre_set_mem_idx = 0;
-      if (!nfc_hal_dm_check_pre_set_mem()) {
-        /* pre-set mem started */
-        return;
-      }
-      nfc_hal_dm_check_xtal();
-    } else if ((op_code == NFC_VS_GET_PATCH_VERSION_EVT) &&
-               (nfc_hal_cb.dev_cb.initializing_state ==
-                NFC_HAL_INIT_STATE_W4_PATCH_INFO)) {
-      /* Store NVM info to control block */
-
-      /* Skip over rsp len */
-      p++;
-
-      /* Get project id */
-      STREAM_TO_UINT16(nfc_hal_cb.nvm_cb.project_id, p);
-
-      /* RFU */
-      p++;
-
-      /* Get chip version string */
-      STREAM_TO_UINT8(u8, p);
-      if (u8 > NFC_HAL_PRM_MAX_CHIP_VER_LEN) u8 = NFC_HAL_PRM_MAX_CHIP_VER_LEN;
-      memcpy(nfc_hal_cb.nvm_cb.chip_ver, p, u8);
-      p += NCI_PATCH_INFO_VERSION_LEN;
-
-      /* Get major/minor version */
-      STREAM_TO_UINT16(nfc_hal_cb.nvm_cb.ver_major, p);
-      STREAM_TO_UINT16(nfc_hal_cb.nvm_cb.ver_minor, p);
-
-      /* Skip over max_size and patch_max_size */
-      p += 4;
-
-      /* Get current lpm patch size */
-      STREAM_TO_UINT16(nfc_hal_cb.nvm_cb.lpm_size, p);
-      STREAM_TO_UINT16(nfc_hal_cb.nvm_cb.fpm_size, p);
-
-      /* clear all flags which may be set during previous initialization */
-      nfc_hal_cb.nvm_cb.flags = 0;
-
-      /* Set patch present flag */
-      if ((nfc_hal_cb.nvm_cb.fpm_size) || (nfc_hal_cb.nvm_cb.lpm_size))
-        nfc_hal_cb.nvm_cb.flags |= NFC_HAL_NVM_FLAGS_PATCH_PRESENT;
-
-      /* LPMPatchCodeHasBadCRC (if not bad crc, then indicate LPM patch is
-       * present in nvm) */
-      STREAM_TO_UINT8(u8, p);
-      if (u8) {
-        /* LPM patch in NVM fails CRC check */
-        nfc_hal_cb.nvm_cb.flags |= NFC_HAL_NVM_FLAGS_LPM_BAD;
-      }
-
-      /* FPMPatchCodeHasBadCRC (if not bad crc, then indicate LPM patch is
-       * present in nvm) */
-      STREAM_TO_UINT8(u8, p);
-      if (u8) {
-        /* FPM patch in NVM fails CRC check */
-        nfc_hal_cb.nvm_cb.flags |= NFC_HAL_NVM_FLAGS_FPM_BAD;
-      }
-
-      /* Check if downloading patch to RAM only (no NVM) */
-      STREAM_TO_UINT8(nfc_hal_cb.nvm_cb.nvm_type, p);
-      if (nfc_hal_cb.nvm_cb.nvm_type == NCI_SPD_NVM_TYPE_NONE) {
-        nfc_hal_cb.nvm_cb.flags |= NFC_HAL_NVM_FLAGS_NO_NVM;
-      }
-
-      /* let platform update baudrate or download patch */
-      NFC_HAL_SET_INIT_STATE(NFC_HAL_INIT_STATE_W4_APP_COMPLETE);
-      nfc_hal_post_reset_init(nfc_hal_cb.dev_cb.brcm_hw_id,
-                              nfc_hal_cb.nvm_cb.nvm_type);
-    } else if (p_cback) {
-      (*p_cback)((tNFC_HAL_NCI_EVT)(op_code), p_msg->len,
-                 (uint8_t*)(p_msg + 1) + p_msg->offset);
-    } else if (op_code == NFC_VS_SEC_PATCH_AUTH_EVT) {
-      HAL_TRACE_DEBUG0("signature!!");
-      nfc_hal_prm_nci_command_complete_cback(
-          (tNFC_HAL_NCI_EVT)(op_code), p_msg->len,
-          (uint8_t*)(p_msg + 1) + p_msg->offset);
-    }
-  }
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_dm_proc_msg_during_exit
-**
-** Description      Process NCI message while shutting down NFCC
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_dm_proc_msg_during_exit(NFC_HDR* p_msg) {
-  uint8_t* p;
-  uint8_t mt, pbf, gid, op_code;
-  uint8_t *p_old, old_gid, old_oid, old_mt;
-  uint8_t u8;
-  tNFC_HAL_NCI_CBACK* p_cback = NULL;
-
-  HAL_TRACE_DEBUG1("nfc_hal_dm_proc_msg_during_exit(): state:%d",
-                   nfc_hal_cb.dev_cb.initializing_state);
-
-  p = (uint8_t*)(p_msg + 1) + p_msg->offset;
-
-  NCI_MSG_PRS_HDR0(p, mt, pbf, gid);
-  NCI_MSG_PRS_HDR1(p, op_code);
-  u8 = *p;
-
-  /* check if waiting for this response */
-  if ((nfc_hal_cb.ncit_cb.nci_wait_rsp == NFC_HAL_WAIT_RSP_CMD) ||
-      (nfc_hal_cb.ncit_cb.nci_wait_rsp == NFC_HAL_WAIT_RSP_VSC)) {
-    if (mt == NCI_MT_RSP) {
-      p_old = nfc_hal_cb.ncit_cb.last_hdr;
-      NCI_MSG_PRS_HDR0(p_old, old_mt, pbf, old_gid);
-      old_oid = ((*p_old) & NCI_OID_MASK);
-      /* make sure this is the RSP we are waiting for before updating the
-       * command window */
-      if ((old_gid == gid) && (old_oid == op_code)) {
-        p_cback = nfc_hal_dm_got_vs_rsp();
-        if (p_cback) {
-          if (gid == NCI_GID_PROP) {
-            if (mt == NCI_MT_NTF)
-              op_code |= NCI_NTF_BIT;
-            else
-              op_code |= NCI_RSP_BIT;
-
-            if (op_code == NFC_VS_POWER_LEVEL_RSP) {
-              (*p_cback)((tNFC_HAL_NCI_EVT)(op_code), p_msg->len,
-                         (uint8_t*)(p_msg + 1) + p_msg->offset);
-            }
-          }
-        }
-      }
-    }
-  }
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_dm_send_nci_cmd
-**
-** Description      Send NCI command to NFCC while initializing BRCM NFCC
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_dm_send_nci_cmd(const uint8_t* p_data, uint16_t len,
-                             tNFC_HAL_NCI_CBACK* p_cback) {
-  NFC_HDR* p_buf;
-  uint8_t* ps;
-
-  HAL_TRACE_DEBUG1("nfc_hal_dm_send_nci_cmd (): nci_wait_rsp = 0x%x",
-                   nfc_hal_cb.ncit_cb.nci_wait_rsp);
-
-  if (nfc_hal_cb.ncit_cb.nci_wait_rsp != NFC_HAL_WAIT_RSP_NONE) {
-    HAL_TRACE_ERROR0("nfc_hal_dm_send_nci_cmd(): no command window");
-    return;
-  }
-
-  p_buf = (NFC_HDR*)GKI_getpoolbuf(NFC_HAL_NCI_POOL_ID);
-  if (p_buf != NULL) {
-    nfc_hal_cb.ncit_cb.nci_wait_rsp = NFC_HAL_WAIT_RSP_VSC;
-
-    p_buf->offset = NFC_HAL_NCI_MSG_OFFSET_SIZE;
-    p_buf->event = NFC_HAL_EVT_TO_NFC_NCI;
-    p_buf->len = len;
-
-    memcpy((uint8_t*)(p_buf + 1) + p_buf->offset, p_data, len);
-
-    /* Keep a copy of the command and send to NCI transport */
-
-    /* save the message header to double check the response */
-    ps = (uint8_t*)(p_buf + 1) + p_buf->offset;
-    memcpy(nfc_hal_cb.ncit_cb.last_hdr, ps, NFC_HAL_SAVED_HDR_SIZE);
-    memcpy(nfc_hal_cb.ncit_cb.last_cmd, ps + NCI_MSG_HDR_SIZE,
-           NFC_HAL_SAVED_CMD_SIZE);
-
-    /* save the callback for NCI VSCs */
-    nfc_hal_cb.ncit_cb.p_vsc_cback = (void*)p_cback;
-
-    nfc_hal_nci_send_cmd(p_buf);
-
-    /* start NFC command-timeout timer */
-    nfc_hal_main_start_quick_timer(
-        &nfc_hal_cb.ncit_cb.nci_wait_rsp_timer,
-        (uint16_t)(NFC_HAL_TTYPE_NCI_WAIT_RSP),
-        ((uint32_t)NFC_HAL_CMD_TOUT) * QUICK_TIMER_TICKS_PER_SEC / 1000);
-  }
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_dm_send_pend_cmd
-**
-** Description      Send a command to NFCC
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_dm_send_pend_cmd(void) {
-  NFC_HDR* p_buf = nfc_hal_cb.ncit_cb.p_pend_cmd;
-  uint8_t* p;
-
-  if (p_buf == NULL) return;
-
-  /* check low power mode state */
-  if (!nfc_hal_dm_power_mode_execute(NFC_HAL_LP_TX_DATA_EVT)) {
-    return;
-  }
-
-  if (nfc_hal_cb.ncit_cb.nci_wait_rsp == NFC_HAL_WAIT_RSP_PROP) {
-#if (NFC_HAL_TRACE_PROTOCOL == TRUE)
-    DispHciCmd(p_buf);
-#endif
-
-    /* save the message header to double check the response */
-    p = (uint8_t*)(p_buf + 1) + p_buf->offset;
-    memcpy(nfc_hal_cb.ncit_cb.last_hdr, p, NFC_HAL_SAVED_HDR_SIZE);
-
-    /* add packet type for BT message */
-    p_buf->offset--;
-    p_buf->len++;
-
-    p = (uint8_t*)(p_buf + 1) + p_buf->offset;
-    *p = HCIT_TYPE_COMMAND;
-
-    USERIAL_Write(USERIAL_NFC_PORT, p, p_buf->len);
-
-    GKI_freebuf(p_buf);
-    nfc_hal_cb.ncit_cb.p_pend_cmd = NULL;
-
-    /* start NFC command-timeout timer */
-    nfc_hal_main_start_quick_timer(
-        &nfc_hal_cb.ncit_cb.nci_wait_rsp_timer,
-        (uint16_t)(NFC_HAL_TTYPE_NCI_WAIT_RSP),
-        ((uint32_t)NFC_HAL_CMD_TOUT) * QUICK_TIMER_TICKS_PER_SEC / 1000);
-  }
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_dm_send_bt_cmd
-**
-** Description      Send BT message to NFCC while initializing BRCM NFCC
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_dm_send_bt_cmd(const uint8_t* p_data, uint16_t len,
-                            tNFC_HAL_BTVSC_CPLT_CBACK* p_cback) {
-  NFC_HDR* p_buf;
-  char buff[300];
-  char tmp[4];
-  buff[0] = 0;
-  int i;
-
-  HAL_TRACE_DEBUG1("nfc_hal_dm_send_bt_cmd (): nci_wait_rsp = 0x%x",
-                   nfc_hal_cb.ncit_cb.nci_wait_rsp);
-
-  for (i = 0; i < len; i++) {
-    sprintf(tmp, "%02x ", p_data[i]);
-    strcat(buff, tmp);
-  }
-  HAL_TRACE_DEBUG2("nfc_hal_dm_send_bt_cmd (): HCI Write (%d bytes): %s", len,
-                   buff);
-
-  if (nfc_hal_cb.ncit_cb.nci_wait_rsp != NFC_HAL_WAIT_RSP_NONE) {
-    HAL_TRACE_ERROR0("nfc_hal_dm_send_bt_cmd(): no command window");
-    return;
-  }
-
-  p_buf = (NFC_HDR*)GKI_getpoolbuf(NFC_HAL_NCI_POOL_ID);
-  if (p_buf != NULL) {
-    nfc_hal_cb.ncit_cb.nci_wait_rsp = NFC_HAL_WAIT_RSP_PROP;
-
-    p_buf->offset = NFC_HAL_NCI_MSG_OFFSET_SIZE;
-    p_buf->len = len;
-
-    memcpy((uint8_t*)(p_buf + 1) + p_buf->offset, p_data, len);
-
-    /* save the callback for NCI VSCs)  */
-    nfc_hal_cb.ncit_cb.p_vsc_cback = (void*)p_cback;
-
-    nfc_hal_cb.ncit_cb.p_pend_cmd = p_buf;
-    if (nfc_hal_cb.dev_cb.initializing_state == NFC_HAL_INIT_STATE_IDLE) {
-      NFC_HAL_SET_INIT_STATE(NFC_HAL_INIT_STATE_W4_CONTROL_DONE);
-      nfc_hal_cb.p_stack_cback(HAL_NFC_REQUEST_CONTROL_EVT, HAL_NFC_STATUS_OK);
-      return;
-    }
-
-    nfc_hal_dm_send_pend_cmd();
-  }
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_dm_set_nfc_wake
-**
-** Description      Set NFC_WAKE line
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_dm_set_nfc_wake(uint8_t cmd) {
-  HAL_TRACE_DEBUG1("nfc_hal_dm_set_nfc_wake () %s",
-                   (cmd == NFC_HAL_ASSERT_NFC_WAKE ? "ASSERT" : "DEASSERT"));
-
-  /*
-  **  nfc_wake_active_mode             cmd              result of voltage on
-  *NFC_WAKE
-  **
-  **  NFC_HAL_LP_ACTIVE_LOW (0)    NFC_HAL_ASSERT_NFC_WAKE (0)    pull down
-  *NFC_WAKE (GND)
-  **  NFC_HAL_LP_ACTIVE_LOW (0)    NFC_HAL_DEASSERT_NFC_WAKE (1)  pull up
-  *NFC_WAKE (VCC)
-  **  NFC_HAL_LP_ACTIVE_HIGH (1)   NFC_HAL_ASSERT_NFC_WAKE (0)    pull up
-  *NFC_WAKE (VCC)
-  **  NFC_HAL_LP_ACTIVE_HIGH (1)   NFC_HAL_DEASSERT_NFC_WAKE (1)  pull down
-  *NFC_WAKE (GND)
-  */
-
-  if (cmd == nfc_hal_cb.dev_cb.nfc_wake_active_mode)
-    UPIO_Set(UPIO_GENERAL, NFC_HAL_LP_NFC_WAKE_GPIO,
-             UPIO_OFF); /* pull down NFC_WAKE */
-  else
-    UPIO_Set(UPIO_GENERAL, NFC_HAL_LP_NFC_WAKE_GPIO,
-             UPIO_ON); /* pull up NFC_WAKE */
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_dm_power_mode_execute
-**
-** Description      If snooze mode is enabled in full power mode,
-**                     Assert NFC_WAKE before sending data
-**                     Deassert NFC_WAKE when idle timer expires
-**
-** Returns          TRUE if DH can send data to NFCC
-**
-*******************************************************************************/
-bool nfc_hal_dm_power_mode_execute(tNFC_HAL_LP_EVT event) {
-  bool send_to_nfcc = false;
-
-  HAL_TRACE_DEBUG1("nfc_hal_dm_power_mode_execute () event = %d", event);
-
-  if (nfc_hal_cb.dev_cb.power_mode == NFC_HAL_POWER_MODE_FULL) {
-    if (nfc_hal_cb.dev_cb.snooze_mode != NFC_HAL_LP_SNOOZE_MODE_NONE) {
-      /* if any transport activity */
-      if ((event == NFC_HAL_LP_TX_DATA_EVT) ||
-          (event == NFC_HAL_LP_RX_DATA_EVT)) {
-        /* if idle timer is not running */
-        if (nfc_hal_cb.dev_cb.lp_timer.in_use == false) {
-          nfc_hal_dm_set_nfc_wake(NFC_HAL_ASSERT_NFC_WAKE);
-        }
-
-        /* start or extend idle timer */
-        nfc_hal_main_start_quick_timer(&nfc_hal_cb.dev_cb.lp_timer, 0x00,
-                                       ((uint32_t)NFC_HAL_LP_IDLE_TIMEOUT) *
-                                           QUICK_TIMER_TICKS_PER_SEC / 1000);
-      } else if (event == NFC_HAL_LP_TIMEOUT_EVT) {
-        /* let NFCC go to snooze mode */
-        nfc_hal_dm_set_nfc_wake(NFC_HAL_DEASSERT_NFC_WAKE);
-      }
-    }
-
-    send_to_nfcc = true;
-  }
-
-  return (send_to_nfcc);
-}
-
-/*******************************************************************************
-**
-** Function         nci_brcm_lp_timeout_cback
-**
-** Description      callback function for low power timeout
-**
-** Returns          void
-**
-*******************************************************************************/
-static void nci_brcm_lp_timeout_cback(void* p_tle) {
-  HAL_TRACE_DEBUG0("nci_brcm_lp_timeout_cback ()");
-
-  nfc_hal_dm_power_mode_execute(NFC_HAL_LP_TIMEOUT_EVT);
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_dm_pre_init_nfcc
-**
-** Description      This function initializes Broadcom specific control blocks
-*for
-**                  NCI transport
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_dm_pre_init_nfcc(void) {
-  HAL_TRACE_DEBUG0("nfc_hal_dm_pre_init_nfcc ()");
-
-  /* if it was waiting for core reset notification after raising REG_PU */
-  if (nfc_hal_cb.dev_cb.initializing_state ==
-      NFC_HAL_INIT_STATE_W4_NFCC_ENABLE) {
-    nfc_hal_dm_send_get_build_info_cmd();
-  }
-  /* if it was waiting for core reset notification after setting Xtal */
-  else if (nfc_hal_cb.dev_cb.initializing_state ==
-           NFC_HAL_INIT_STATE_POST_XTAL_SET) {
-    {
-      /* Core reset ntf after xtal setting indicating NFCC loaded patch from NVM
-       */
-      NFC_HAL_SET_INIT_STATE(NFC_HAL_INIT_STATE_W4_PATCH_INFO);
-
-      nfc_hal_dm_send_nci_cmd(nfc_hal_dm_get_patch_version_cmd,
-                              NCI_MSG_HDR_SIZE, NULL);
-    }
-  }
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_dm_shutting_down_nfcc
-**
-** Description      This function initializes Broadcom specific control blocks
-*for
-**                  NCI transport
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_dm_shutting_down_nfcc(void) {
-  HAL_TRACE_DEBUG0("nfc_hal_dm_shutting_down_nfcc ()");
-
-  nfc_hal_cb.dev_cb.initializing_state = NFC_HAL_INIT_STATE_CLOSING;
-
-  /* reset low power mode variables */
-  if ((nfc_hal_cb.dev_cb.power_mode == NFC_HAL_POWER_MODE_FULL) &&
-      (nfc_hal_cb.dev_cb.snooze_mode != NFC_HAL_LP_SNOOZE_MODE_NONE)) {
-    nfc_hal_dm_set_nfc_wake(NFC_HAL_ASSERT_NFC_WAKE);
-  }
-
-  nfc_hal_cb.ncit_cb.nci_wait_rsp = NFC_HAL_WAIT_RSP_NONE;
-
-  nfc_hal_cb.dev_cb.power_mode = NFC_HAL_POWER_MODE_FULL;
-  nfc_hal_cb.dev_cb.snooze_mode = NFC_HAL_LP_SNOOZE_MODE_NONE;
-
-  /* Stop all timers */
-  nfc_hal_main_stop_quick_timer(&nfc_hal_cb.ncit_cb.nci_wait_rsp_timer);
-  nfc_hal_main_stop_quick_timer(&nfc_hal_cb.dev_cb.lp_timer);
-  nfc_hal_main_stop_quick_timer(&nfc_hal_cb.prm.timer);
-#if (NFC_HAL_HCI_INCLUDED == TRUE)
-  nfc_hal_cb.hci_cb.hcp_conn_id = 0;
-  nfc_hal_main_stop_quick_timer(&nfc_hal_cb.hci_cb.hci_timer);
-#endif
-  nfc_hal_main_stop_quick_timer(&nfc_hal_cb.timer);
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_dm_init
-**
-** Description      This function initializes Broadcom specific control blocks
-*for
-**                  NCI transport
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_dm_init(void) {
-  HAL_TRACE_DEBUG0("nfc_hal_dm_init ()");
-
-  nfc_hal_cb.dev_cb.lp_timer.p_cback = nci_brcm_lp_timeout_cback;
-
-  nfc_hal_cb.ncit_cb.nci_wait_rsp_timer.p_cback = nfc_hal_nci_cmd_timeout_cback;
-
-#if (NFC_HAL_HCI_INCLUDED == TRUE)
-  nfc_hal_cb.hci_cb.hci_timer.p_cback = nfc_hal_hci_timeout_cback;
-#endif
-
-  nfc_hal_cb.pre_discover_done = false;
-
-  nfc_post_reset_cb.spd_nvm_detection_cur_count = 0;
-  nfc_post_reset_cb.spd_skip_on_power_cycle = false;
-}
-
-/*******************************************************************************
-**
-** Function         HAL_NfcDevInitDone
-**
-** Description      Notify that pre-initialization of NFCC is complete
-**
-** Returns          void
-**
-*******************************************************************************/
-void HAL_NfcPreInitDone(tHAL_NFC_STATUS status) {
-  HAL_TRACE_DEBUG1("HAL_NfcPreInitDone () status=%d", status);
-
-  if (nfc_hal_cb.dev_cb.initializing_state ==
-      NFC_HAL_INIT_STATE_W4_APP_COMPLETE) {
-    NFC_HAL_SET_INIT_STATE(NFC_HAL_INIT_STATE_IDLE);
-
-    nfc_hal_main_pre_init_done(status);
-  }
-}
-
-/*******************************************************************************
-**
-** Function         HAL_NfcReInit
-**
-** Description      This function is called to restart initialization after
-*REG_PU
-**                  toggled because of failure to detect NVM type or download
-*patchram.
-**
-** Note             This function should be called only during the HAL init
-*process
-**
-** Returns          HAL_NFC_STATUS_OK if successfully initiated
-**                  HAL_NFC_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tHAL_NFC_STATUS HAL_NfcReInit(void) {
-  tHAL_NFC_STATUS status = HAL_NFC_STATUS_FAILED;
-
-  HAL_TRACE_DEBUG1("HAL_NfcReInit () init st=0x%x",
-                   nfc_hal_cb.dev_cb.initializing_state);
-  if (nfc_hal_cb.dev_cb.initializing_state ==
-      NFC_HAL_INIT_STATE_W4_APP_COMPLETE) {
-    {
-      /* Wait for NFCC to enable - Core reset notification */
-      NFC_HAL_SET_INIT_STATE(NFC_HAL_INIT_STATE_W4_NFCC_ENABLE);
-
-      /* NFCC Enable timeout */
-      nfc_hal_main_start_quick_timer(
-          &nfc_hal_cb.timer, NFC_HAL_TTYPE_NFCC_ENABLE,
-          ((p_nfc_hal_cfg->nfc_hal_nfcc_enable_timeout) *
-           QUICK_TIMER_TICKS_PER_SEC) /
-              1000);
-    }
-
-    status = HAL_NFC_STATUS_OK;
-  }
-  return status;
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_dm_set_snooze_mode_cback
-**
-** Description      This is snooze update complete callback.
-**
-** Returns          void
-**
-*******************************************************************************/
-static void nfc_hal_dm_set_snooze_mode_cback(tNFC_HAL_BTVSC_CPLT* pData) {
-  uint8_t status = pData->p_param_buf[0];
-  tHAL_NFC_STATUS hal_status;
-  tHAL_NFC_STATUS_CBACK* p_cback;
-
-  /* if it is completed */
-  if (status == HCI_SUCCESS) {
-    /* update snooze mode */
-    nfc_hal_cb.dev_cb.snooze_mode = nfc_hal_cb.dev_cb.new_snooze_mode;
-
-    nfc_hal_dm_set_nfc_wake(NFC_HAL_ASSERT_NFC_WAKE);
-
-    if (nfc_hal_cb.dev_cb.snooze_mode != NFC_HAL_LP_SNOOZE_MODE_NONE) {
-      /* start idle timer */
-      nfc_hal_main_start_quick_timer(&nfc_hal_cb.dev_cb.lp_timer, 0x00,
-                                     ((uint32_t)NFC_HAL_LP_IDLE_TIMEOUT) *
-                                         QUICK_TIMER_TICKS_PER_SEC / 1000);
-    } else {
-      nfc_hal_main_stop_quick_timer(&nfc_hal_cb.dev_cb.lp_timer);
-    }
-    hal_status = HAL_NFC_STATUS_OK;
-  } else {
-    hal_status = HAL_NFC_STATUS_FAILED;
-  }
-
-  if (nfc_hal_cb.dev_cb.p_prop_cback) {
-    p_cback = nfc_hal_cb.dev_cb.p_prop_cback;
-    nfc_hal_cb.dev_cb.p_prop_cback = NULL;
-    (*p_cback)(hal_status);
-  }
-}
-
-/*******************************************************************************
-**
-** Function         HAL_NfcSetSnoozeMode
-**
-** Description      Set snooze mode
-**                  snooze_mode
-**                      NFC_HAL_LP_SNOOZE_MODE_NONE - Snooze mode disabled
-**                      NFC_HAL_LP_SNOOZE_MODE_UART - Snooze mode for UART
-**                      NFC_HAL_LP_SNOOZE_MODE_SPI_I2C - Snooze mode for SPI/I2C
-**
-**                  idle_threshold_dh/idle_threshold_nfcc
-**                      Idle Threshold Host in 100ms unit
-**
-**                  nfc_wake_active_mode/dh_wake_active_mode
-**                      NFC_HAL_LP_ACTIVE_LOW - high to low voltage is asserting
-**                      NFC_HAL_LP_ACTIVE_HIGH - low to high voltage is
-*asserting
-**
-**                  p_snooze_cback
-**                      Notify status of operation
-**
-** Returns          tHAL_NFC_STATUS
-**
-*******************************************************************************/
-tHAL_NFC_STATUS HAL_NfcSetSnoozeMode(uint8_t snooze_mode,
-                                     uint8_t idle_threshold_dh,
-                                     uint8_t idle_threshold_nfcc,
-                                     uint8_t nfc_wake_active_mode,
-                                     uint8_t dh_wake_active_mode,
-                                     tHAL_NFC_STATUS_CBACK* p_snooze_cback) {
-  uint8_t cmd[NFC_HAL_BT_HCI_CMD_HDR_SIZE + HCI_BRCM_WRITE_SLEEP_MODE_LENGTH];
-  uint8_t* p;
-
-  HAL_TRACE_API1("HAL_NfcSetSnoozeMode (): snooze_mode = %d", snooze_mode);
-
-  nfc_hal_cb.dev_cb.new_snooze_mode = snooze_mode;
-  nfc_hal_cb.dev_cb.nfc_wake_active_mode = nfc_wake_active_mode;
-  nfc_hal_cb.dev_cb.p_prop_cback = p_snooze_cback;
-
-  p = cmd;
-
-  /* Add the HCI command */
-  UINT16_TO_STREAM(p, HCI_BRCM_WRITE_SLEEP_MODE);
-  UINT8_TO_STREAM(p, HCI_BRCM_WRITE_SLEEP_MODE_LENGTH);
-
-  memset(p, 0x00, HCI_BRCM_WRITE_SLEEP_MODE_LENGTH);
-
-  UINT8_TO_STREAM(p, snooze_mode); /* Sleep Mode               */
-
-  UINT8_TO_STREAM(p, idle_threshold_dh);    /* Idle Threshold Host      */
-  UINT8_TO_STREAM(p, idle_threshold_nfcc);  /* Idle Threshold HC        */
-  UINT8_TO_STREAM(p, nfc_wake_active_mode); /* BT Wake Active Mode      */
-  UINT8_TO_STREAM(p, dh_wake_active_mode);  /* Host Wake Active Mode    */
-
-  nfc_hal_dm_send_bt_cmd(
-      cmd, NFC_HAL_BT_HCI_CMD_HDR_SIZE + HCI_BRCM_WRITE_SLEEP_MODE_LENGTH,
-      nfc_hal_dm_set_snooze_mode_cback);
-  return (NCI_STATUS_OK);
-}
diff --git a/halimpl/bcm2079x/hal/hal/nfc_hal_dm_cfg.c b/halimpl/bcm2079x/hal/hal/nfc_hal_dm_cfg.c
deleted file mode 100644
index 0363f26..0000000
--- a/halimpl/bcm2079x/hal/hal/nfc_hal_dm_cfg.c
+++ /dev/null
@@ -1,202 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2011-2014 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  This file contains compile-time configurable constants for BRCM HAL
- *  modules
- *
- ******************************************************************************/
-#include "nci_defs.h"
-#include "nfc_brcm_defs.h"
-#include "nfc_hal_int.h"
-
-/* the SetConfig at start up*/
-uint8_t nfc_hal_start_up_cfg[] = {
-    /* TLV len */ 31,
-    /* B0 */ NCI_PARAM_ID_EMVCO_ENABLE,
-    /* B1 */ 1,
-    /* B2 */
-    1, /* (1 = enable emvco mode, 0 = disable emvco mode) Default = 0.*/
-    /* B3 */ NCI_PARAM_ID_CONTINUE_MODE, /* NFCC will restart discovery
-                                            after deactivated */
-    /* B4 */ 1,
-    /* B5 */ 1, /* (1 = enable, 0 = disable) Default = 0.*/
-    /* B6 */ NCI_PARAM_ID_RFU_CONFIG,
-    /* B7 */ 0x14,
-    /* B8 */ 0x00,
-    /* B9 */ 0x00,
-    /* B10*/ 0x00,
-    /* B11*/ 0x00,
-    /* B12*/ 0x0E,
-    /* B13*/ 0xE8,
-    /* B14*/ 0xF0,
-    /* B15*/ 0x55,
-    /* B16*/ 0x00,
-    /* B17*/ 0x0F, /* CE3 SO delay in sec */
-    /* B18*/ 0x00,
-    /* B19*/ 0x00,
-    /* B20*/ 0x00,
-    /* B21*/ 0x00,
-    /* B22*/ 0x00,
-    /* B23*/ 0x00,
-    /* B24*/ 0x00,
-    /* B25*/ 0x00,
-    /* B26*/ 0x00,
-    /* B27*/ 0x00,
-    /* B28*/ NCI_PARAM_ID_ACT_ORDER, /* polling sequence */
-    /* B29*/ 1,
-    /* B30*/ 1, /* (1 = active mode polling before passive, 0 = passive
-                   polling first) Default = 0.*/
-};
-
-uint8_t* p_nfc_hal_dm_start_up_cfg = (uint8_t*)nfc_hal_start_up_cfg;
-
-/* the VSCs at start up:
- * The VSCs are specified in TLV format similar to nfa_start_up_cfg[]
- * first byte is the TLV total len.
- * B0 is the first T; i.e. the opcode for the VSC
- * B1 is the len of the VSC parameters/payload
- * */
-uint8_t nfc_hal_dm_start_up_vsc_cfg[] = {
-    /* TLV len */ 5,
-    /* B0 */ NCI_MTS_CMD | NCI_GID_PROP,
-    /* B1 */ NCI_MSG_FRAME_LOG,
-    /* B2 */ 2,
-    /* B3 */ 0, /* 1 to enable RF frames */
-    /* B4 */ 1  /* 1 to enable SWP frames */
-};
-
-uint8_t* p_nfc_hal_dm_start_up_vsc_cfg = NULL;
-
-/* the SetConfig at HAL_NfcPreDiscover. This is done once after HAL_NfcOpen */
-uint8_t nfc_hal_pre_discover_cfg[] = {
-    /* TLV len */ 0x0A,
-    /* B0 */ NCI_PARAM_ID_SWPCFG,
-    /* B1 */ 0x08,
-    /* B2 */ 0x01,
-    /* B3 */ 0x08,
-    /* B4 */ 0x00,
-    /* B5 */ 0x04,
-    /* B6 */ 0x80,
-    /* B7 */ 0xC3,
-    /* B8 */ 0xC9,
-    /* B9 */ 0x01};
-
-uint8_t* p_nfc_hal_pre_discover_cfg = NULL;
-
-/* LPTD parameters (LowPowerTagDetection)
- * This is typical values for 20791B2
- * The timing and threshold parameters used for a customer handset/hardware may
- * vary
- * depending on antenna and should be verified during a customer testing phase.
- * the data fields without comments are too complicated. Please see ""
- * */
-const uint8_t nfc_hal_dm_lptd_cfg[] = {
-    21,                        /* total TLV length excluding itself */
-    NCI_PARAM_ID_TAGSNIFF_CFG, /* type */
-    19,                        /* length */
-    0x01,                      /* B0 enable: 0/disable, 1/enable*/
-    0x02, /* B1 poll count: number of full power poll before starting lptd
-             poll */
-    0xFF, /* B2 sniff count lsb: number of lptd poll before switching to
-             full power poll */
-    0xFF, /* B3 sniff count msb */
-    0x80, /* B4 threshold: Bigger thresholds give a smaller LPTD range but
-             more immunity to false detections. Smaller thresholds increase
-             LPTD range at the cost of greater likelihood of false
-             detections. */
-    0x40, /* B5 delay lsb: delay (us) to sampling power */
-    0x00, /* B6 delay msb */
-    0x40, /* B7 carrier threshold lsb */
-    0x00, /* B8 carrier threshold msb */
-    0x80, /* B9 mode: Bitwise variable used to enable various algorithm
-             modes.*/
-    0x80, /* B10 0-offset lsb */
-    0x00, /* B11 0-offset msb */
-    0x10, /* B12 field sense time lsb */
-    0x00, /* B13 field sense time msb */
-    0x00, /* B14 false detect threshold lsb: 0x00 to disable LPTD NTF. The
-             number of false tag detections to resport LPTD NTF. */
-    0x00, /* B15 false detect threshold msb. A false tag detect - full poll
-             results in no tag being detected.*/
-    0x75, /* B16 mode1; Bitwise variable used to enable various algorithm
-             modes. */
-    0x0D, /* B17 lptd ant cfg rx */
-    0x30, /* B18 lptd rdr cfg ve */
-};
-
-uint8_t* p_nfc_hal_dm_lptd_cfg = (uint8_t*)&nfc_hal_dm_lptd_cfg[0];
-
-/*
-** NFCC has a table which has 9 XTAL frequencies: 9.6, 13, 16.2,  19.2, 24, 26,
-*38.4, 52 and 37.4 in MHz.
-** For these 9 xtal frequencies, host doesn't need to configure PLL325.
-** For 43341, host doesn't need to configure it at all.
-*/
-uint8_t* p_nfc_hal_dm_pll_325_cfg = NULL;
-
-/*
-** Proprietary pre-set is required, if not NULL.
-*/
-tNFC_HAL_DM_PRE_SET_MEM* p_nfc_hal_dm_pre_set_mem = NULL;
-
-tNFC_HAL_CFG nfc_hal_cfg = {
-    false, /* set nfc_hal_prm_nvm_required to TRUE, if the platform wants to
-              abort PRM process without NVM */
-    (uint16_t)NFC_HAL_NFCC_ENABLE_TIMEOUT, /* max time to wait for RESET NTF
-                                         *after setting REG_PU to high
-                                         ** If NFCC doesn't have NVM or cannot
-                                         *load patch from NVM without Xtal
-                                         *setting
-                                         ** then set it to short to optimize
-                                         *bootup time because NFCC cannot send
-                                         *RESET NTF.
-                                         ** Otherwise, it depends on NVM type
-                                         *and size of patchram.
-                                         */
-    (uint16_t)NFC_HAL_NFCC_ENABLE_TIMEOUT  /* max time to wait for RESET NTF
-                                         *after setting Xtal frequency
-                                         ** It depends on NVM type and size of
-                                         *patchram.
-                                         */
-#if (NFC_HAL_HCI_INCLUDED == TRUE)
-    ,
-    true, /* set nfc_hal_first_boot to TRUE, if platform enables NFC for the
-             first time after bootup */
-    (HAL_NFC_HCI_UICC0_HOST | HAL_NFC_HCI_UICC1_HOST |
-     HAL_NFC_HCI_UICC2_HOST) /* Set bit(s) for supported UICC(s) */
-#endif
-};
-
-tNFC_HAL_CFG* p_nfc_hal_cfg = (tNFC_HAL_CFG*)&nfc_hal_cfg;
-
-const uint8_t nfc_hal_dm_xtal_params_cfg[] = {
-    8,    /* length */
-    0x00, /* B0 Rfpll_cfg_pll_xtal_div_2                  */
-    0x00, /* B1 Rfpll_cfg_pll_vcocal1_0_cal_ref_timeout   */
-    0x00, /* B2 Rfpll_cfg_pll_vcocal2_cal_count           */
-    0x00, /* B3 Rfpll_cfg_pll_vcocal3_cal_count           */
-    0x00, /* B4 Rfpll_cfg_pll_dsm_b_msb_wild_base         */
-    0x00, /* B5 Rfpll_cfg_pll_dsm_b_lsb_3_wild_base_3     */
-    0x00, /* B6 Rfpll_cfg_pll_dsm_b_lsb_2_wild_base_2     */
-    0x00  /* B7 Rfpll_cfg_pll_dsm_b_lsb_1_wild_base_1     */
-};
-
-/* By default, the XTAL command does not need these extra params. */
-uint8_t* p_nfc_hal_dm_xtal_params_cfg = NULL;
diff --git a/halimpl/bcm2079x/hal/hal/nfc_hal_hci.c b/halimpl/bcm2079x/hal/hal/nfc_hal_hci.c
deleted file mode 100644
index 1033327..0000000
--- a/halimpl/bcm2079x/hal/hal/nfc_hal_hci.c
+++ /dev/null
@@ -1,851 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2012-2014 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  Vendor-specific handler for HCI events
- *
- ******************************************************************************/
-#include "gki.h"
-#include "nfc_hal_api.h"
-#include "nfc_hal_int.h"
-#include "nfc_hal_target.h"
-
-#if (NFC_HAL_HCI_INCLUDED == TRUE)
-
-#include "nfc_hal_nv_ci.h"
-#include "nfc_hal_nv_co.h"
-
-#include <string.h>
-
-#ifndef NFC_HAL_HCI_NV_READ_TIMEOUT
-#define NFC_HAL_HCI_NV_READ_TIMEOUT 1000
-#endif
-
-#ifndef NFC_HAL_HCI_NFCC_RSP_TIMEOUT
-#define NFC_HAL_HCI_NFCC_RSP_TIMEOUT 3000
-#endif
-
-#define NFC_HAL_HCI_NETWK_CMD_TYPE_A_CE_PIPE_INFO_OFFSET 0x0C
-#define NFC_HAL_HCI_NETWK_CMD_TYPE_B_CE_PIPE_INFO_OFFSET 0x32
-#define NFC_HAL_HCI_NETWK_CMD_TYPE_BP_CE_PIPE_INFO_OFFSET 0x7F
-#define NFC_HAL_HCI_NETWK_CMD_TYPE_F_CE_PIPE_INFO_OFFSET 0xB4
-
-#define NFC_HAL_HCI_PIPE_VALID_MASK 0x80
-
-#define NFC_HAL_HCI_FIRST_BOOT_SESSION_ID_0_VAL 0xFF
-#define NFC_HAL_HCI_NEXT_BOOT_SESSION_ID_0_VAL 0xFE
-
-/* Version string for BCM20791B3 */
-const uint8_t NFC_HAL_DM_BCM20791B3_STR[] = "20791B3";
-#define NFC_HAL_DM_BCM20791B3_STR_LEN (sizeof(NFC_HAL_DM_BCM20791B3_STR) - 1)
-
-/* Version string for BCM20791B4 */
-const uint8_t NFC_HAL_DM_BCM20791B4_STR[] = "20791B4";
-#define NFC_HAL_DM_BCM20791B4_STR_LEN (sizeof(NFC_HAL_DM_BCM20791B4_STR) - 1)
-
-/* Version string for BCM43341B0 */
-const uint8_t NFC_HAL_DM_BCM43341B0_STR[] = "43341B0";
-#define NFC_HAL_DM_BCM43341B0_STR_LEN (sizeof(NFC_HAL_DM_BCM43341B0_STR) - 1)
-
-extern tNFC_HAL_CFG* p_nfc_hal_cfg;
-/****************************************************************************
-** Internal function prototypes
-****************************************************************************/
-static void nfc_hal_hci_set_next_hci_netwk_config(uint8_t block);
-static void nfc_hal_hci_remove_dyn_pipe_to_uicc1(void);
-static void nfc_hal_hci_handle_nv_read(uint8_t block, tHAL_NFC_STATUS status,
-                                       uint16_t size);
-static void nfc_hal_hci_init_complete(tHAL_NFC_STATUS status);
-static void nfc_hal_hci_vsc_cback(tNFC_HAL_NCI_EVT event, uint16_t data_len,
-                                  uint8_t* p_data);
-
-/*******************************************************************************
-**
-** Function         nfc_hal_hci_evt_hdlr
-**
-** Description      Processing event for NFA HCI
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfc_hal_hci_evt_hdlr(tNFC_HAL_HCI_EVENT_DATA* p_evt_data) {
-  HAL_TRACE_DEBUG0("nfc_hal_hci_evt_hdlr ()");
-
-  switch (p_evt_data->hdr.event) {
-    case NFC_HAL_HCI_RSP_NV_READ_EVT:
-      if ((nfc_hal_cb.hci_cb.p_hci_netwk_info_buf &&
-           (p_evt_data->nv_read.block == HC_F3_NV_BLOCK ||
-            p_evt_data->nv_read.block == HC_F4_NV_BLOCK ||
-            p_evt_data->nv_read.block == HC_F5_NV_BLOCK)) ||
-          (nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf &&
-           p_evt_data->nv_read.block == HC_F2_NV_BLOCK)) {
-        nfc_hal_hci_handle_nv_read(p_evt_data->nv_read.block,
-                                   p_evt_data->nv_read.status,
-                                   p_evt_data->nv_read.size);
-      } else {
-        /* Invalid block or no buffer, Ignore */
-        HAL_TRACE_ERROR1(
-            "nfc_hal_hci_evt_hdlr: No buffer for handling read NV block: "
-            "0x%02x",
-            p_evt_data->nv_read.block);
-      }
-      break;
-
-    case NFC_HAL_HCI_RSP_NV_WRITE_EVT:
-      /* NV Ram write completed - nothing to do... */
-      break;
-
-    default:
-      break;
-  }
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_hci_enable
-**
-** Description      Program nv data on to controller
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_hci_enable(void) {
-  uint8_t* p_hci_netwk_cmd;
-
-  HAL_TRACE_DEBUG0("nfc_hal_hci_enable ()");
-
-  if (nfc_hal_cb.nvm_cb.nvm_type == NCI_SPD_NVM_TYPE_NONE) {
-    HAL_TRACE_DEBUG1(
-        "nfc_hal_hci_enable (): No HCI NETWK CMD to send for NVM Type: 0x%02x",
-        nfc_hal_cb.nvm_cb.nvm_type);
-    nfc_hal_hci_init_complete(HAL_NFC_STATUS_OK);
-    return;
-  }
-
-  if (nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf) {
-    p_hci_netwk_cmd = (uint8_t*)(nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf -
-                                 NCI_MSG_HDR_SIZE);
-    GKI_freebuf(p_hci_netwk_cmd);
-    nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf = NULL;
-  }
-
-  if (nfc_hal_cb.hci_cb.p_hci_netwk_info_buf) {
-    p_hci_netwk_cmd =
-        (uint8_t*)(nfc_hal_cb.hci_cb.p_hci_netwk_info_buf - NCI_MSG_HDR_SIZE);
-    GKI_freebuf(p_hci_netwk_cmd);
-    nfc_hal_cb.hci_cb.p_hci_netwk_info_buf = NULL;
-  }
-
-  if ((p_nfc_hal_cfg->nfc_hal_hci_uicc_support & HAL_NFC_HCI_UICC0_HOST) ||
-      ((p_nfc_hal_cfg->nfc_hal_hci_uicc_support & HAL_NFC_HCI_UICC1_HOST) &&
-       ((!nfc_hal_cb.hci_cb.hci_fw_workaround) ||
-        (nfc_hal_cb.nvm_cb.nvm_type == NCI_SPD_NVM_TYPE_EEPROM))) ||
-      (p_nfc_hal_cfg->nfc_hal_hci_uicc_support & HAL_NFC_HCI_UICC2_HOST)) {
-    p_hci_netwk_cmd =
-        (uint8_t*)GKI_getbuf(NCI_MSG_HDR_SIZE + NFC_HAL_HCI_NETWK_INFO_SIZE);
-    if (p_hci_netwk_cmd == NULL) {
-      HAL_TRACE_ERROR0(
-          "nfc_hal_hci_enable: unable to allocate buffer for reading hci "
-          "network info from nvram");
-      nfc_hal_hci_init_complete(HAL_NFC_STATUS_FAILED);
-    } else {
-      nfc_hal_cb.hci_cb.p_hci_netwk_info_buf =
-          (uint8_t*)(p_hci_netwk_cmd + NCI_MSG_HDR_SIZE);
-      nfc_hal_cb.hci_cb.hci_netwk_config_block = 0;
-      if (p_nfc_hal_cfg->nfc_hal_hci_uicc_support & HAL_NFC_HCI_UICC0_HOST) {
-        memset(nfc_hal_cb.hci_cb.p_hci_netwk_info_buf, 0,
-               NFC_HAL_HCI_NETWK_INFO_SIZE);
-        nfc_hal_nv_co_read((uint8_t*)nfc_hal_cb.hci_cb.p_hci_netwk_info_buf,
-                           NFC_HAL_HCI_NETWK_INFO_SIZE, HC_F3_NV_BLOCK);
-        nfc_hal_main_start_quick_timer(&nfc_hal_cb.hci_cb.hci_timer,
-                                       NFC_HAL_HCI_VSC_TIMEOUT_EVT,
-                                       NFC_HAL_HCI_NV_READ_TIMEOUT);
-      } else {
-        HAL_TRACE_DEBUG1(
-            "nfc_hal_hci_enable (): Skip send F3 HCI NETWK CMD for UICC Mask: "
-            "0x%02x",
-            p_nfc_hal_cfg->nfc_hal_hci_uicc_support);
-        nfc_hal_hci_set_next_hci_netwk_config(HC_F3_NV_BLOCK);
-      }
-    }
-  } else {
-    HAL_TRACE_DEBUG2(
-        "nfc_hal_hci_enable (): No HCI NETWK CMD to send for UICC Mask: 0x%02x "
-        "& NVM Type: 0x%02x",
-        p_nfc_hal_cfg->nfc_hal_hci_uicc_support, nfc_hal_cb.nvm_cb.nvm_type);
-    nfc_hal_hci_set_next_hci_netwk_config(HC_F2_NV_BLOCK);
-  }
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_hci_handle_build_info
-**
-** Description      handle build info evt
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_hci_handle_build_info(uint8_t chipverlen, uint8_t* p_chipverstr) {
-  HAL_TRACE_DEBUG0("nfc_hal_hci_handle_build_info ()");
-
-  if ((chipverlen == NFC_HAL_DM_BCM20791B3_STR_LEN) &&
-      (memcmp(NFC_HAL_DM_BCM20791B3_STR, p_chipverstr,
-              NFC_HAL_DM_BCM20791B3_STR_LEN) == 0)) {
-    /* BCM2079B3 FW - eSE restarted for patch download */
-    nfc_hal_cb.hci_cb.hci_fw_workaround = true;
-    nfc_hal_cb.hci_cb.hci_fw_validate_netwk_cmd = true;
-  } else if (((chipverlen == NFC_HAL_DM_BCM20791B4_STR_LEN) &&
-              (memcmp(NFC_HAL_DM_BCM20791B4_STR, p_chipverstr,
-                      NFC_HAL_DM_BCM20791B4_STR_LEN) == 0)) ||
-             ((chipverlen == NFC_HAL_DM_BCM43341B0_STR_LEN) &&
-              (memcmp(NFC_HAL_DM_BCM43341B0_STR, p_chipverstr,
-                      NFC_HAL_DM_BCM43341B0_STR_LEN) == 0))) {
-    /* BCM43341B0/BCM2079B4 FW - eSE restarted for patch download */
-    nfc_hal_cb.hci_cb.hci_fw_workaround = true;
-    nfc_hal_cb.hci_cb.hci_fw_validate_netwk_cmd = false;
-  } else {
-    /* BCM2079B5 FW - eSE not be restarted for patch download from UICC */
-    nfc_hal_cb.hci_cb.hci_fw_workaround = false;
-    nfc_hal_cb.hci_cb.hci_fw_validate_netwk_cmd = false;
-  }
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_hci_handle_hci_netwk_info
-**
-** Description      Handler function for HCI Network Notification
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfc_hal_hci_handle_hci_netwk_info(uint8_t* p_data) {
-  uint8_t* p = p_data;
-  uint16_t data_len;
-  uint8_t target_handle = 0;
-  uint8_t hci_netwk_cmd[1 + NFC_HAL_HCI_SESSION_ID_LEN];
-  uint8_t block = 0;
-
-  HAL_TRACE_DEBUG0("nfc_hal_hci_handle_hci_netwk_info ()");
-
-  /* skip NCI header byte0 (MT,GID), byte1 (OID) */
-  p += 2;
-
-  STREAM_TO_UINT8(data_len, p);
-  target_handle = *(uint8_t*)p;
-
-  if (target_handle == NFC_HAL_HCI_DH_TARGET_HANDLE) {
-    /* Correct the session id assigned by DH */
-    *(p + 1) = nfc_hal_cb.hci_cb.dh_session_id[0];
-    nfc_hal_nv_co_write(p, data_len, HC_F2_NV_BLOCK);
-    return;
-  }
-
-  if (target_handle == NFC_HAL_HCI_UICC0_TARGET_HANDLE) {
-    block = HC_F3_NV_BLOCK;
-  } else if (target_handle == NFC_HAL_HCI_UICC1_TARGET_HANDLE) {
-    block = HC_F4_NV_BLOCK;
-  } else if (target_handle == NFC_HAL_HCI_UICC2_TARGET_HANDLE) {
-    block = HC_F5_NV_BLOCK;
-  } else {
-    HAL_TRACE_DEBUG1(
-        "nfc_hal_hci_handle_hci_netwk_info(): Invalid Target handle: 0x%02x",
-        target_handle);
-    return;
-  }
-
-  if ((!nfc_hal_cb.hci_cb.hci_fw_validate_netwk_cmd) ||
-      (p[NFC_HAL_HCI_NETWK_CMD_TYPE_A_CE_PIPE_INFO_OFFSET] &
-       NFC_HAL_HCI_PIPE_VALID_MASK) ||
-      (p[NFC_HAL_HCI_NETWK_CMD_TYPE_B_CE_PIPE_INFO_OFFSET] &
-       NFC_HAL_HCI_PIPE_VALID_MASK) ||
-      (p[NFC_HAL_HCI_NETWK_CMD_TYPE_BP_CE_PIPE_INFO_OFFSET] &
-       NFC_HAL_HCI_PIPE_VALID_MASK) ||
-      (p[NFC_HAL_HCI_NETWK_CMD_TYPE_F_CE_PIPE_INFO_OFFSET] &
-       NFC_HAL_HCI_PIPE_VALID_MASK)) {
-    /* HCI Network notification received for UICC0/UICC1/UICC2, Update nv data
-     */
-    nfc_hal_nv_co_write(p, data_len, block);
-  } else {
-    HAL_TRACE_DEBUG1(
-        "nfc_hal_hci_handle_hci_netwk_info(): Type A Card Emulation invalid, "
-        "Reset nv file: 0x%02x",
-        p[NFC_HAL_HCI_NETWK_CMD_TYPE_A_CE_PIPE_INFO_OFFSET]);
-    hci_netwk_cmd[0] = target_handle;
-    memset(&hci_netwk_cmd[1], 0xFF, NFC_HAL_HCI_SESSION_ID_LEN);
-    nfc_hal_nv_co_write(hci_netwk_cmd, 1, block);
-  }
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_hci_fake_adm_notify_all_pipe_cleared_to_dh
-**
-** Description      Fake ADM_NOTIFY_ALL_PIPE_CLEARED cmd to nfc task
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfc_hal_hci_fake_adm_notify_all_pipe_cleared_to_dh(void) {
-  NFC_HDR* p_msg;
-  uint8_t *p, *ps;
-
-  HAL_TRACE_DEBUG1(
-      "nfc_hal_hci_fake_adm_notify_all_pipe_cleared_to_dh (): Fake "
-      "ADM_NOTIFY_ALL_PIPE_CLEARED (0x%02x) from HAL",
-      NFC_HAL_HCI_HOST_ID_UICC1);
-
-  /* Start of new message. Allocate a buffer for message */
-  p_msg = (NFC_HDR*)GKI_getpoolbuf(NFC_HAL_NCI_POOL_ID);
-  if (p_msg != NULL) {
-    /* Initialize NFC_HDR */
-    p_msg->len = NCI_DATA_HDR_SIZE + 0x03;
-    p_msg->event = 0;
-    p_msg->offset = 0;
-    p_msg->layer_specific = 0;
-
-    p = (uint8_t*)(p_msg + 1) + p_msg->offset;
-    ps = p;
-    NCI_DATA_BLD_HDR(p, nfc_hal_cb.hci_cb.hcp_conn_id, 0x03);
-    /* HCP header with ADMIN pipe id and chaining bit set */
-    *p++ = ((1 << 0x07) | (NFC_HAL_HCI_ADMIN_PIPE & 0x7F));
-    /* HCP Message header with Command type instruction and
-     * ADM_NOTIFY_ALL_PIPE_CLEARED command */
-    *p++ = ((NFC_HAL_HCI_COMMAND_TYPE << 6) |
-            (NFC_HAL_HCI_ADM_NOTIFY_ALL_PIPE_CLEARED & 0x3F));
-    /* HCP Data with UICC1 host id */
-    *p = NFC_HAL_HCI_HOST_ID_UICC1;
-
-#ifdef DISP_NCI
-    DISP_NCI(ps, (uint16_t)p_msg->len, true);
-#endif
-    nfc_hal_send_nci_msg_to_nfc_task(p_msg);
-
-  } else {
-    HAL_TRACE_ERROR0(
-        "Unable to allocate buffer for faking ADM_NOTIFY_ALL_PIPE_CLEARED cmd "
-        "from HAL to stack");
-  }
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_hci_handle_hcp_pkt_to_hc
-**
-** Description      Handle HCP Packet from NFC task to Host Controller
-**
-** Returns          FALSE to send the packet to host controller
-**                  TRUE to drop the packet and fake credit ntf for hcp
-*connection
-**
-*******************************************************************************/
-bool nfc_hal_hci_handle_hcp_pkt_to_hc(uint8_t* p_data) {
-  uint8_t chaining_bit;
-  uint8_t pipe;
-  uint8_t type;
-  uint8_t inst;
-  uint8_t index;
-
-  HAL_TRACE_DEBUG0("nfc_hal_hci_handle_hcp_pkt_to_hc ()");
-
-  chaining_bit = ((*p_data) >> 0x07) & 0x01;
-  pipe = (*p_data++) & 0x7F;
-
-  if ((chaining_bit) && (pipe == NFC_HAL_HCI_ADMIN_PIPE)) {
-    type = ((*p_data) >> 0x06) & 0x03;
-
-    if (type == NFC_HAL_HCI_COMMAND_TYPE) {
-      inst = (*p_data++ & 0x3F);
-      if (inst == NFC_HAL_HCI_ANY_GET_PARAMETER) {
-        index = *(p_data++);
-        if (index == NFC_HAL_HCI_SESSION_IDENTITY_INDEX) {
-          /* Set flag to modify session id[0] on response
-           * from host controller to set session id cmd
-           */
-          nfc_hal_cb.hci_cb.update_session_id = true;
-        }
-      } else if (inst == NFC_HAL_HCI_ANY_SET_PARAMETER) {
-        index = *(p_data++);
-        if (index == NFC_HAL_HCI_WHITELIST_INDEX) {
-          if ((nfc_hal_cb.hci_cb.hci_fw_workaround) &&
-              (nfc_hal_cb.nvm_cb.nvm_type == NCI_SPD_NVM_TYPE_UICC)) {
-            /* Set flag to fake ADM_NOTIFY_ALL_PIPE_CLEARED cmd to nfc task
-             * after
-             * response from host controller to set whitelist cmd
-             */
-            nfc_hal_cb.hci_cb.clear_all_pipes_to_uicc1 = true;
-          }
-        } else if (index == NFC_HAL_HCI_SESSION_IDENTITY_INDEX) {
-          nfc_hal_cb.hci_cb.dh_session_id[0] = *p_data;
-          if (p_nfc_hal_cfg->nfc_hal_first_boot)
-            *p_data = NFC_HAL_HCI_FIRST_BOOT_SESSION_ID_0_VAL;
-          else
-            *p_data = NFC_HAL_HCI_NEXT_BOOT_SESSION_ID_0_VAL;
-        }
-      }
-    } else if (type == NFC_HAL_HCI_RESPONSE_TYPE) {
-      if ((nfc_hal_cb.hci_cb.hci_fw_workaround) &&
-          (nfc_hal_cb.nvm_cb.nvm_type == NCI_SPD_NVM_TYPE_UICC) &&
-          (nfc_hal_cb.hci_cb.clear_all_pipes_to_uicc1)) {
-        /* Got response to the fake ADM_NOTIFY_ALL_PIPE_CLEARED cmd sent by HAL
-         * to nfc task */
-        nfc_hal_cb.hci_cb.clear_all_pipes_to_uicc1 = false;
-        /* return TRUE to drop this hcp without forwarding to host controller */
-        return true;
-      }
-    }
-  }
-
-  return false;
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_hci_handle_hcp_pkt_from_hc
-**
-** Description      Handle HCP Packet from Host controller to Terminal Host
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfc_hal_hci_handle_hcp_pkt_from_hc(uint8_t* p_data) {
-  uint8_t chaining_bit;
-  uint8_t pipe;
-  uint8_t type;
-  uint8_t inst;
-  uint8_t hci_netwk_cmd[1 + NFC_HAL_HCI_SESSION_ID_LEN];
-  uint8_t source_host;
-  uint8_t block = 0;
-
-  HAL_TRACE_DEBUG0("nfc_hal_hci_handle_hcp_pkt_from_hc ()");
-
-  chaining_bit = ((*p_data) >> 0x07) & 0x01;
-  pipe = (*p_data++) & 0x7F;
-
-  if ((chaining_bit) && (pipe == NFC_HAL_HCI_ADMIN_PIPE)) {
-    type = ((*p_data) >> 0x06) & 0x03;
-
-    if (type == NFC_HAL_HCI_COMMAND_TYPE) {
-      if (!nfc_hal_cb.hci_cb.hci_fw_workaround) return;
-
-      inst = (*p_data++ & 0x3F);
-
-      if (inst == NFC_HAL_HCI_ADM_NOTIFY_ALL_PIPE_CLEARED) {
-        STREAM_TO_UINT8(source_host, p_data);
-
-        HAL_TRACE_DEBUG1(
-            "nfc_hal_hci_handle_hcp_pkt_from_hc (): Received "
-            "ADM_NOTIFY_ALL_PIPE_CLEARED command for UICC: 0x%02x",
-            source_host);
-        if (source_host == NFC_HAL_HCI_HOST_ID_UICC0) {
-          block = HC_F3_NV_BLOCK;
-          hci_netwk_cmd[0] = NFC_HAL_HCI_UICC0_TARGET_HANDLE;
-        } else if (source_host == NFC_HAL_HCI_HOST_ID_UICC1) {
-          block = HC_F4_NV_BLOCK;
-          hci_netwk_cmd[0] = NFC_HAL_HCI_UICC1_TARGET_HANDLE;
-        } else if (source_host == NFC_HAL_HCI_HOST_ID_UICC2) {
-          block = HC_F5_NV_BLOCK;
-          hci_netwk_cmd[0] = NFC_HAL_HCI_UICC2_TARGET_HANDLE;
-        }
-
-        if (source_host >= NFC_HAL_HCI_HOST_ID_UICC0) {
-          /* Reset Session ID */
-          memset(&hci_netwk_cmd[1], 0xFF, NFC_HAL_HCI_SESSION_ID_LEN);
-          nfc_hal_nv_co_write(hci_netwk_cmd, 1, block);
-          HAL_TRACE_DEBUG1(
-              "nfc_hal_hci_handle_hcp_pkt_from_hc (): Sent command to reset nv "
-              "file for block: 0x%02x",
-              block);
-        }
-      }
-    } else if (type == NFC_HAL_HCI_RESPONSE_TYPE) {
-      if (nfc_hal_cb.hci_cb.update_session_id) {
-        nfc_hal_cb.hci_cb.update_session_id = false;
-        inst = (*p_data++ & 0x3F);
-        if (inst == NFC_HAL_HCI_ANY_OK) {
-          /* Correct the session id assigned by DH */
-          *p_data = nfc_hal_cb.hci_cb.dh_session_id[0];
-        }
-      } else if (nfc_hal_cb.hci_cb.clear_all_pipes_to_uicc1) {
-        /* NVM Type is UICC and got response from host controller
-         * to Set whitelist command. Now fake ADM_NOTIFY_ALL_PIPE_CLEARED cmd to
-         * NFC Task and then forward the whitelist cmd response
-         */
-        nfc_hal_hci_fake_adm_notify_all_pipe_cleared_to_dh();
-      }
-    }
-  }
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_hci_handle_nv_read
-**
-** Description      handler function for nv read complete event
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfc_hal_hci_handle_nv_read(uint8_t block, tHAL_NFC_STATUS status,
-                                uint16_t size) {
-  uint8_t* p;
-  uint8_t* p_hci_netwk_info = NULL;
-
-  HAL_TRACE_DEBUG3(
-      "nfc_hal_hci_handle_nv_read (): Block: [0x%02x], Status: [0x%02x], Size: "
-      "[0x%04x]",
-      block, status, size);
-
-  /* Stop timer as NVDATA Read Completed */
-  nfc_hal_main_stop_quick_timer(&nfc_hal_cb.hci_cb.hci_timer);
-
-  switch (block) {
-    case HC_F3_NV_BLOCK:
-    case HC_F4_NV_BLOCK:
-    case HC_F5_NV_BLOCK:
-      if ((status != HAL_NFC_STATUS_OK) ||
-          (size > NFC_HAL_HCI_NETWK_INFO_SIZE) ||
-          (size < NFC_HAL_HCI_MIN_NETWK_INFO_SIZE) ||
-          ((nfc_hal_cb.hci_cb.hci_fw_workaround) && (block == HC_F4_NV_BLOCK) &&
-           (nfc_hal_cb.nvm_cb.nvm_type == NCI_SPD_NVM_TYPE_UICC))) {
-        HAL_TRACE_DEBUG1(
-            "nfc_hal_hci_handle_nv_read: Invalid data from nv memory, Set "
-            "DEFAULT Configuration for block:0x%02x",
-            block);
-        memset(nfc_hal_cb.hci_cb.p_hci_netwk_info_buf, 0,
-               NFC_HAL_HCI_NETWK_INFO_SIZE);
-        if (block == HC_F3_NV_BLOCK)
-          nfc_hal_cb.hci_cb.p_hci_netwk_info_buf[0] =
-              NFC_HAL_HCI_UICC0_TARGET_HANDLE;
-        else if (block == HC_F4_NV_BLOCK)
-          nfc_hal_cb.hci_cb.p_hci_netwk_info_buf[0] =
-              NFC_HAL_HCI_UICC1_TARGET_HANDLE;
-        else
-          nfc_hal_cb.hci_cb.p_hci_netwk_info_buf[0] =
-              NFC_HAL_HCI_UICC2_TARGET_HANDLE;
-
-        memset(&nfc_hal_cb.hci_cb.p_hci_netwk_info_buf[1], 0xFF,
-               NFC_HAL_HCI_SESSION_ID_LEN);
-        size = NFC_HAL_HCI_NETWK_INFO_SIZE;
-      }
-
-      p_hci_netwk_info =
-          (uint8_t*)nfc_hal_cb.hci_cb.p_hci_netwk_info_buf - NCI_MSG_HDR_SIZE;
-      break;
-
-    case HC_F2_NV_BLOCK:
-      nfc_hal_cb.hci_cb.dh_session_id[0] =
-          nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf[1];
-      if (p_nfc_hal_cfg->nfc_hal_first_boot)
-        nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf[1] =
-            NFC_HAL_HCI_FIRST_BOOT_SESSION_ID_0_VAL;
-      else
-        nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf[1] =
-            NFC_HAL_HCI_NEXT_BOOT_SESSION_ID_0_VAL;
-
-      if ((status != HAL_NFC_STATUS_OK) ||
-          (size > NFC_HAL_HCI_DH_NETWK_INFO_SIZE) ||
-          (size < NFC_HAL_HCI_MIN_DH_NETWK_INFO_SIZE)) {
-        HAL_TRACE_DEBUG1(
-            "nfc_hal_hci_handle_nv_read: Invalid data from nv memory, Set "
-            "DEFAULT Configuration for block:0x%02x",
-            block);
-        nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf[0] =
-            NFC_HAL_HCI_DH_TARGET_HANDLE;
-        nfc_hal_cb.hci_cb.dh_session_id[0] = 0xFF;
-        memset(&nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf[2], 0xFF,
-               (NFC_HAL_HCI_SESSION_ID_LEN - 1));
-        memset((nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf +
-                NFC_HAL_HCI_SESSION_ID_LEN + 1),
-               0, (NFC_HAL_HCI_DH_NETWK_INFO_SIZE - NFC_HAL_HCI_SESSION_ID_LEN -
-                   1));
-        size = NFC_HAL_HCI_DH_NETWK_INFO_SIZE;
-        p_hci_netwk_info = (uint8_t*)nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf -
-                           NCI_MSG_HDR_SIZE;
-      } else {
-        if ((nfc_hal_cb.hci_cb.hci_fw_workaround) &&
-            (nfc_hal_cb.nvm_cb.nvm_type == NCI_SPD_NVM_TYPE_UICC)) {
-          /* if NVM Type is UICC, then UICC1 will find session id mismatch when
-           * activated for patch download,
-           * and will remove pipes connected to DH even before DH is enabled, So
-           * DH will update NFCC
-           * control block by removing all dynamic pipes connected to UICC1 */
-
-          nfc_hal_hci_remove_dyn_pipe_to_uicc1();
-          size = NFC_HAL_HCI_DH_NETWK_INFO_SIZE;
-        }
-        p_hci_netwk_info =
-            (uint8_t*)(nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf -
-                       NCI_MSG_HDR_SIZE);
-      }
-      break;
-
-    default:
-      return;
-  }
-
-  p = p_hci_netwk_info;
-  /* Send HCI Network ntf command using nv data */
-  NCI_MSG_BLD_HDR0(p, NCI_MT_CMD, NCI_GID_PROP);
-  NCI_MSG_BLD_HDR1(p, NCI_MSG_HCI_NETWK);
-  UINT8_TO_STREAM(p, (uint8_t)size);
-
-  nfc_hal_dm_send_nci_cmd(p_hci_netwk_info, (uint16_t)(NCI_MSG_HDR_SIZE + size),
-                          nfc_hal_hci_vsc_cback);
-
-  nfc_hal_cb.hci_cb.hci_netwk_config_block = block;
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_hci_remove_dyn_pipe_to_uicc1
-**
-** Description      Prepare hci network command read from nv file removing
-**                  all pipes connected to UICC1
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfc_hal_hci_remove_dyn_pipe_to_uicc1(void) {
-  uint8_t *p, *np;
-  uint8_t num_dyn_pipes = 0, new_num_dyn_pipes = 0;
-  uint8_t xx;
-  uint8_t source_host, dest_host, pipe_id;
-
-  HAL_TRACE_DEBUG0("nfc_hal_hci_remove_dyn_pipe_to_uicc1 ()");
-
-  p = (uint8_t*)(nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf +
-                 NFC_HAL_HCI_MIN_DH_NETWK_INFO_SIZE);
-  np = p;
-  num_dyn_pipes = *(p - 1);
-
-  for (xx = 0; xx < num_dyn_pipes; xx++, p += NFC_HAL_HCI_PIPE_INFO_SIZE) {
-    source_host = *(uint8_t*)(p);
-    dest_host = *(uint8_t*)(p + 1);
-    pipe_id = *(uint8_t*)(p + 4);
-
-    if ((source_host != NFC_HAL_HCI_HOST_ID_UICC1) &&
-        (dest_host != NFC_HAL_HCI_HOST_ID_UICC1)) {
-      memcpy(np, p, NFC_HAL_HCI_PIPE_INFO_SIZE);
-      np += NFC_HAL_HCI_PIPE_INFO_SIZE;
-      new_num_dyn_pipes++;
-    }
-  }
-
-  memset((uint8_t*)(np), 0,
-         NFC_HAL_HCI_PIPE_INFO_SIZE * (20 - new_num_dyn_pipes));
-
-  /* Update number of pipes after removing pipes connected to UICC1 */
-  p = (uint8_t*)(nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf +
-                 NFC_HAL_HCI_MIN_DH_NETWK_INFO_SIZE);
-  *(p - 1) = new_num_dyn_pipes;
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_hci_init_complete
-**
-** Description      Notify VSC initialization is complete
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfc_hal_hci_init_complete(tHAL_NFC_STATUS status) {
-  uint8_t* p_hci_netwk_cmd;
-
-  HAL_TRACE_DEBUG1("nfc_hal_hci_init_complete (): Status: [0x%02x]", status);
-
-  if (nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf) {
-    p_hci_netwk_cmd = (uint8_t*)(nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf -
-                                 NCI_MSG_HDR_SIZE);
-    GKI_freebuf(p_hci_netwk_cmd);
-    nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf = NULL;
-  }
-
-  if (nfc_hal_cb.hci_cb.p_hci_netwk_info_buf) {
-    p_hci_netwk_cmd =
-        (uint8_t*)(nfc_hal_cb.hci_cb.p_hci_netwk_info_buf - NCI_MSG_HDR_SIZE);
-    GKI_freebuf(p_hci_netwk_cmd);
-    nfc_hal_cb.hci_cb.p_hci_netwk_info_buf = NULL;
-  }
-
-  NFC_HAL_SET_INIT_STATE(NFC_HAL_INIT_STATE_IDLE);
-
-  nfc_hal_cb.p_stack_cback(HAL_NFC_POST_INIT_CPLT_EVT, status);
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_hci_set_next_hci_netwk_config
-**
-** Description      set next hci network configuration
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfc_hal_hci_set_next_hci_netwk_config(uint8_t block) {
-  uint8_t* p_hci_netwk_cmd;
-
-  HAL_TRACE_DEBUG1("nfc_hal_hci_set_next_hci_netwk_config (): Block: [0x%02x]",
-                   block);
-
-  switch (block) {
-    case HC_F3_NV_BLOCK:
-      if ((p_nfc_hal_cfg->nfc_hal_hci_uicc_support & HAL_NFC_HCI_UICC1_HOST) &&
-          (nfc_hal_cb.hci_cb.p_hci_netwk_info_buf) &&
-          ((!nfc_hal_cb.hci_cb.hci_fw_workaround) ||
-           (nfc_hal_cb.nvm_cb.nvm_type == NCI_SPD_NVM_TYPE_EEPROM))) {
-        /* Send command to read nvram data for 0xF4 */
-        memset(nfc_hal_cb.hci_cb.p_hci_netwk_info_buf, 0,
-               NFC_HAL_HCI_NETWK_INFO_SIZE);
-        nfc_hal_nv_co_read((uint8_t*)nfc_hal_cb.hci_cb.p_hci_netwk_info_buf,
-                           NFC_HAL_HCI_NETWK_INFO_SIZE, HC_F4_NV_BLOCK);
-        nfc_hal_main_start_quick_timer(&nfc_hal_cb.hci_cb.hci_timer,
-                                       NFC_HAL_HCI_VSC_TIMEOUT_EVT,
-                                       NFC_HAL_HCI_NV_READ_TIMEOUT);
-        break;
-      }
-      HAL_TRACE_DEBUG2(
-          "nfc_hal_hci_set_next_hci_netwk_config (): Skip send F4 HCI NETWK "
-          "CMD for UICC Mask: 0x%02x & NVM Type: 0x%02x",
-          p_nfc_hal_cfg->nfc_hal_hci_uicc_support, nfc_hal_cb.nvm_cb.nvm_type);
-
-    case HC_F4_NV_BLOCK:
-      if ((p_nfc_hal_cfg->nfc_hal_hci_uicc_support & HAL_NFC_HCI_UICC2_HOST) &&
-          (nfc_hal_cb.hci_cb.p_hci_netwk_info_buf)) {
-        /* Send command to read nvram data for 0xF5 */
-        memset(nfc_hal_cb.hci_cb.p_hci_netwk_info_buf, 0,
-               NFC_HAL_HCI_NETWK_INFO_SIZE);
-        nfc_hal_nv_co_read((uint8_t*)nfc_hal_cb.hci_cb.p_hci_netwk_info_buf,
-                           NFC_HAL_HCI_NETWK_INFO_SIZE, HC_F5_NV_BLOCK);
-        nfc_hal_main_start_quick_timer(&nfc_hal_cb.hci_cb.hci_timer,
-                                       NFC_HAL_HCI_VSC_TIMEOUT_EVT,
-                                       NFC_HAL_HCI_NV_READ_TIMEOUT);
-        break;
-      }
-      HAL_TRACE_DEBUG2(
-          "nfc_hal_hci_set_next_hci_netwk_config (): Skip send F5 HCI NETWK "
-          "CMD for UICC Mask: 0x%02x & NVM Type: 0x%02x",
-          p_nfc_hal_cfg->nfc_hal_hci_uicc_support, nfc_hal_cb.nvm_cb.nvm_type);
-
-    case HC_F5_NV_BLOCK:
-      p_hci_netwk_cmd = (uint8_t*)GKI_getbuf(NCI_MSG_HDR_SIZE +
-                                             NFC_HAL_HCI_DH_NETWK_INFO_SIZE);
-      if (p_hci_netwk_cmd == NULL) {
-        HAL_TRACE_ERROR0(
-            "nfc_hal_hci_set_next_hci_netwk_config: unable to allocate buffer "
-            "for reading hci network info from nvram");
-        nfc_hal_hci_init_complete(HAL_NFC_STATUS_FAILED);
-      } else {
-        nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf =
-            (uint8_t*)(p_hci_netwk_cmd + NCI_MSG_HDR_SIZE);
-        /* Send command to read nvram data for 0xF2 */
-        memset(nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf, 0,
-               NFC_HAL_HCI_DH_NETWK_INFO_SIZE);
-        nfc_hal_nv_co_read((uint8_t*)nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf,
-                           NFC_HAL_HCI_DH_NETWK_INFO_SIZE, HC_F2_NV_BLOCK);
-        nfc_hal_main_start_quick_timer(&nfc_hal_cb.hci_cb.hci_timer,
-                                       NFC_HAL_HCI_VSC_TIMEOUT_EVT,
-                                       NFC_HAL_HCI_NV_READ_TIMEOUT);
-      }
-      break;
-
-    case HC_F2_NV_BLOCK:
-      nfc_hal_hci_init_complete(HAL_NFC_STATUS_OK);
-      break;
-
-    default:
-      HAL_TRACE_ERROR1(
-          "nfc_hal_hci_set_next_hci_netwk_config: unable to allocate buffer to "
-          "send VSC 0x%02x",
-          block);
-      /* Brcm initialization failed */
-      nfc_hal_hci_init_complete(HAL_NFC_STATUS_FAILED);
-      break;
-  }
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_hci_vsc_cback
-**
-** Description      process VS callback event from stack
-**
-** Returns          none
-**
-*******************************************************************************/
-static void nfc_hal_hci_vsc_cback(tNFC_HAL_NCI_EVT event, uint16_t data_len,
-                                  uint8_t* p_data) {
-  uint8_t* p_ret = NULL;
-  uint8_t status;
-
-  p_ret = p_data + NCI_MSG_HDR_SIZE;
-  status = *p_ret;
-
-  HAL_TRACE_DEBUG3(
-      "nfc_hal_hci_vsc_cback (): Event: [0x%02x], Data length: [0x%04x], "
-      "Status: [0x%02x]",
-      event, data_len, status);
-
-  if (event != NFC_VS_HCI_NETWK_RSP) return;
-
-  if (status != HAL_NFC_STATUS_OK) {
-    nfc_hal_hci_init_complete(HAL_NFC_STATUS_FAILED);
-    return;
-  }
-
-  switch (nfc_hal_cb.hci_cb.hci_netwk_config_block) {
-    case HC_F3_NV_BLOCK:
-    case HC_F4_NV_BLOCK:
-    case HC_F5_NV_BLOCK:
-    case HC_F2_NV_BLOCK:
-      nfc_hal_hci_set_next_hci_netwk_config(
-          nfc_hal_cb.hci_cb.hci_netwk_config_block);
-      break;
-
-    default:
-      /* Ignore the event */
-      break;
-  }
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_nci_cmd_timeout_cback
-**
-** Description      callback function for timeout
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_hci_timeout_cback(void* p_tle) {
-  TIMER_LIST_ENT* p_tlent = (TIMER_LIST_ENT*)p_tle;
-
-  HAL_TRACE_DEBUG0("nfc_hal_hci_timeout_cback ()");
-
-  if (p_tlent->event == NFC_HAL_HCI_VSC_TIMEOUT_EVT) {
-    HAL_TRACE_ERROR0(
-        "nfc_hal_hci_timeout_cback: Timeout - NFC HAL HCI BRCM Initialization "
-        "Failed!");
-    nfc_hal_hci_init_complete(HAL_NFC_STATUS_FAILED);
-  }
-}
-
-#endif
diff --git a/halimpl/bcm2079x/hal/hal/nfc_hal_hci_ci.c b/halimpl/bcm2079x/hal/hal/nfc_hal_hci_ci.c
deleted file mode 100644
index 73bf6a5..0000000
--- a/halimpl/bcm2079x/hal/hal/nfc_hal_hci_ci.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2010-2014 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  This file contains the call-in functions for NFC HAL HCI
- *
- ******************************************************************************/
-#include <string.h>
-#include "gki.h"
-#include "nfc_hal_api.h"
-#include "nfc_hal_int.h"
-
-#if (NFC_HAL_HCI_INCLUDED == TRUE)
-#include "nfc_hal_nv_ci.h"
-#include "nfc_hal_nv_co.h"
-
-/*******************************************************************************
-**
-** Function         nfc_hal_nv_ci_read
-**
-** Description      call-in function for non volatile memory read acess
-**
-** Returns          none
-**
-*******************************************************************************/
-void nfc_hal_nv_ci_read(uint16_t num_bytes_read, tNFC_HAL_NV_CO_STATUS status,
-                        uint8_t block) {
-  tNFC_HAL_HCI_EVENT_DATA* p_msg;
-
-  /* Send message to NCIT task */
-  p_msg = (tNFC_HAL_HCI_EVENT_DATA*)GKI_getbuf(sizeof(tNFC_HAL_HCI_EVENT_DATA));
-  if (p_msg != NULL) {
-    p_msg->nv_read.hdr.event = NFC_HAL_HCI_RSP_NV_READ_EVT;
-    p_msg->hdr.offset = 0;
-    p_msg->hdr.len = sizeof(tNFC_HAL_HCI_RSP_NV_READ_EVT);
-    p_msg->hdr.layer_specific = 0;
-
-    if ((status == NFC_HAL_NV_CO_OK) && (num_bytes_read != 0))
-      p_msg->nv_read.status = HAL_NFC_STATUS_OK;
-    else
-      p_msg->nv_read.status = HAL_NFC_STATUS_FAILED;
-
-    p_msg->nv_read.size = num_bytes_read;
-    p_msg->nv_read.block = block;
-
-    GKI_send_msg(NFC_HAL_TASK, NFC_HAL_TASK_MBOX, p_msg);
-  }
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_nv_ci_write
-**
-** Description      call-in function for non volatile memory write acess
-**
-** Returns          none
-**
-*******************************************************************************/
-void nfc_hal_nv_ci_write(tNFC_HAL_NV_CO_STATUS status) {
-  tNFC_HAL_HCI_EVENT_DATA* p_msg;
-
-  p_msg = (tNFC_HAL_HCI_EVENT_DATA*)GKI_getbuf(sizeof(tNFC_HAL_HCI_EVENT_DATA));
-  if (p_msg != NULL) {
-    p_msg->nv_write.hdr.event = NFC_HAL_HCI_RSP_NV_WRITE_EVT;
-    p_msg->nv_write.hdr.offset = 0;
-    p_msg->nv_write.hdr.len = sizeof(tNFC_HAL_HCI_RSP_NV_READ_EVT);
-    p_msg->nv_write.hdr.layer_specific = 0;
-    p_msg->nv_write.status = HAL_NFC_STATUS_OK;
-
-    GKI_send_msg(NFC_HAL_TASK, NFC_HAL_TASK_MBOX, p_msg);
-  }
-}
-
-#endif
diff --git a/halimpl/bcm2079x/hal/hal/nfc_hal_main.c b/halimpl/bcm2079x/hal/hal/nfc_hal_main.c
deleted file mode 100644
index 7b4e79b..0000000
--- a/halimpl/bcm2079x/hal/hal/nfc_hal_main.c
+++ /dev/null
@@ -1,740 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2010-2014 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  Functions for handling NFC HAL NCI Transport events
- *
- ******************************************************************************/
-#include <string.h>
-#include "nfc_hal_int.h"
-#include "nfc_hal_post_reset.h"
-#include "upio.h"
-#include "userial.h"
-
-/****************************************************************************
-** Definitions
-****************************************************************************/
-
-/* Default NFC HAL NCI port configuration  */
-NFC_HAL_TRANS_CFG_QUALIFIER tNFC_HAL_TRANS_CFG nfc_hal_trans_cfg = {
-    NFC_HAL_SHARED_TRANSPORT_ENABLED, /* bSharedTransport */
-    USERIAL_BAUD_115200,              /* Baud rate */
-    USERIAL_FC_HW                     /* Flow control */
-};
-
-/* Control block for NFC HAL NCI transport */
-tNFC_HAL_CB nfc_hal_cb;
-
-extern tNFC_HAL_CFG* p_nfc_hal_cfg;
-/****************************************************************************
-** Internal function prototypes
-****************************************************************************/
-static void nfc_hal_main_userial_cback(tUSERIAL_PORT port, tUSERIAL_EVT evt,
-                                       tUSERIAL_EVT_DATA* p_data);
-static void nfc_hal_main_handle_terminate(void);
-static void nfc_hal_main_timeout_cback(void* p_tle);
-
-#if (NFC_HAL_DEBUG == TRUE)
-const char* const nfc_hal_init_state_str[] = {
-    "IDLE",           /* Initialization is done                */
-    "W4_XTAL_SET",    /* Waiting for crystal setting rsp       */
-    "POST_XTAL_SET",  /* Waiting for reset ntf after xtal set  */
-    "W4_NFCC_ENABLE", /* Waiting for reset ntf atter REG_PU up */
-    "W4_BUILD_INFO",  /* Waiting for build info rsp            */
-    "W4_PATCH_INFO",  /* Waiting for patch info rsp            */
-    "W4_APP_COMPL",   /* Waiting for complete from application */
-    "W4_POST_INIT",   /* Waiting for complete of post init     */
-    "W4_CONTROL",     /* Waiting for control release           */
-    "W4_PREDISC",     /* Waiting for complete of prediscover   */
-    "CLOSING"         /* Shutting down                         */
-};
-#endif
-
-/*******************************************************************************
-**
-** Function         nfc_hal_main_init
-**
-** Description      This function initializes control block for NFC HAL
-**
-** Returns          nothing
-**
-*******************************************************************************/
-void nfc_hal_main_init(void) {
-  /* Clear control block */
-  memset(&nfc_hal_cb, 0, sizeof(tNFC_HAL_CB));
-
-  nfc_hal_cb.ncit_cb.nci_ctrl_size = NFC_HAL_NCI_INIT_CTRL_PAYLOAD_SIZE;
-  nfc_hal_cb.trace_level = NFC_HAL_INITIAL_TRACE_LEVEL;
-  nfc_hal_cb.timer.p_cback = nfc_hal_main_timeout_cback;
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_main_open_transport
-**
-** Description      Open transport and prepare for new incoming message;
-**
-** Returns          nothing
-**
-*******************************************************************************/
-static void nfc_hal_main_open_transport(void) {
-  tUSERIAL_OPEN_CFG open_cfg;
-
-  /* Initialize control block */
-  nfc_hal_cb.ncit_cb.rcv_state =
-      NFC_HAL_RCV_IDLE_ST; /* to process packet type */
-
-  if (nfc_hal_cb.ncit_cb.p_rcv_msg) {
-    GKI_freebuf(nfc_hal_cb.ncit_cb.p_rcv_msg);
-    nfc_hal_cb.ncit_cb.p_rcv_msg = NULL;
-  }
-
-  /* open transport */
-  open_cfg.fmt =
-      (USERIAL_DATABITS_8 | USERIAL_PARITY_NONE | USERIAL_STOPBITS_1);
-  open_cfg.baud = nfc_hal_trans_cfg.userial_baud;
-  open_cfg.fc = nfc_hal_trans_cfg.userial_fc;
-  open_cfg.buf = USERIAL_BUF_BYTE;
-
-  USERIAL_Open(USERIAL_NFC_PORT, &open_cfg, nfc_hal_main_userial_cback);
-
-  {
-    /* Wait for NFCC to enable - Core reset notification */
-    NFC_HAL_SET_INIT_STATE(NFC_HAL_INIT_STATE_W4_NFCC_ENABLE);
-
-    /* NFCC Enable timeout */
-    nfc_hal_main_start_quick_timer(
-        &nfc_hal_cb.timer, NFC_HAL_TTYPE_NFCC_ENABLE,
-        ((p_nfc_hal_cfg->nfc_hal_nfcc_enable_timeout) *
-         QUICK_TIMER_TICKS_PER_SEC) /
-            1000);
-  }
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_main_close
-**
-** Description      Check and shutdown NFCC
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfc_hal_main_close(void) {
-  tHAL_NFC_CBACK* p_stack_cback_temp;
-
-  if ((nfc_hal_cb.dev_cb.initializing_state !=
-       NFC_HAL_INIT_STATE_W4_NFCC_TURN_OFF) &&
-      (nfc_hal_cb.hal_flags & NFC_HAL_FLAGS_NEED_DISABLE_VSC)) {
-    nfc_hal_cb.dev_cb.initializing_state = NFC_HAL_INIT_STATE_W4_NFCC_TURN_OFF;
-    nfc_hal_dm_set_power_level_zero();
-  } else {
-    nfc_hal_main_handle_terminate();
-
-    /* Close uart */
-    USERIAL_Close(USERIAL_NFC_PORT);
-
-    if (nfc_hal_cb.p_stack_cback) {
-      p_stack_cback_temp = nfc_hal_cb.p_stack_cback;
-      nfc_hal_cb.p_stack_cback = NULL;
-      p_stack_cback_temp(HAL_NFC_CLOSE_CPLT_EVT, HAL_NFC_STATUS_OK);
-    }
-  }
-}
-
-/*******************************************************************************
-**
-** Function         nfa_hal_pre_discover_done_cback
-**
-** Description      Pre-discovery CFG is sent.
-**
-** Returns          nothing
-**
-*******************************************************************************/
-void nfa_hal_pre_discover_done_cback(tNFC_HAL_NCI_EVT event, uint16_t data_len,
-                                     uint8_t* p_data) {
-  NFC_HAL_SET_INIT_STATE(NFC_HAL_INIT_STATE_IDLE);
-  nfc_hal_main_stop_quick_timer(&nfc_hal_cb.ncit_cb.nci_wait_rsp_timer);
-  nfc_hal_cb.p_stack_cback(HAL_NFC_PRE_DISCOVER_CPLT_EVT, HAL_NFC_STATUS_OK);
-}
-
-/*******************************************************************************
-**
-** Function         nfa_hal_send_pre_discover_cfg
-**
-** Description      sending Pre-discovery CFG
-**
-** Returns          nothing
-**
-*******************************************************************************/
-void nfa_hal_send_pre_discover_cfg(void) {
-  if (nfc_hal_dm_set_config(
-          p_nfc_hal_pre_discover_cfg[0], &p_nfc_hal_pre_discover_cfg[1],
-          nfa_hal_pre_discover_done_cback) != HAL_NFC_STATUS_OK) {
-    nfa_hal_pre_discover_done_cback(0, 0, NULL);
-  }
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_main_send_error
-**
-** Description      send an Error event to NFC stack
-**
-** Returns          nothing
-**
-*******************************************************************************/
-void nfc_hal_main_send_error(tHAL_NFC_STATUS status) {
-  /* Notify stack */
-  nfc_hal_cb.p_stack_cback(HAL_NFC_ERROR_EVT, status);
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_main_userial_cback
-**
-** Description      USERIAL callback for NCI transport
-**
-** Returns          nothing
-**
-*******************************************************************************/
-static void nfc_hal_main_userial_cback(tUSERIAL_PORT port, tUSERIAL_EVT evt,
-                                       tUSERIAL_EVT_DATA* p_data) {
-  if (evt == USERIAL_RX_READY_EVT) {
-    /* Notify transport task of serial port event */
-    GKI_send_event(NFC_HAL_TASK, NFC_HAL_TASK_EVT_DATA_RDY);
-  } else if (evt == USERIAL_TX_DONE_EVT) {
-    /* Serial driver has finshed sending data from USERIAL_Write */
-    /* Currently, no action is needed for this event */
-  } else if (evt == USERIAL_ERR_EVT) {
-    HAL_TRACE_ERROR0(
-        "nfc_hal_main_userial_cback: USERIAL_ERR_EVT. Notifying NFC_TASK of "
-        "transport error");
-    if (nfc_hal_cb.ncit_cb.nci_wait_rsp != NFC_HAL_WAIT_RSP_NONE) {
-      nfc_hal_main_stop_quick_timer(&nfc_hal_cb.ncit_cb.nci_wait_rsp_timer);
-      nfc_hal_nci_cmd_timeout_cback(
-          (void*)&nfc_hal_cb.ncit_cb.nci_wait_rsp_timer);
-    } else {
-      nfc_hal_main_send_error(HAL_NFC_STATUS_ERR_TRANSPORT);
-    }
-  } else if (evt == USERIAL_WAKEUP_EVT) {
-    HAL_TRACE_DEBUG1("nfc_hal_main_userial_cback: USERIAL_WAKEUP_EVT: %d",
-                     p_data->sigs);
-  } else {
-    HAL_TRACE_DEBUG1("nfc_hal_main_userial_cback: unhandled userial evt: %i",
-                     evt);
-  }
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_main_exit_op_done
-**
-** Description      handle completion of HAL exit operation
-**
-** Returns          nothing
-**
-*******************************************************************************/
-void nfc_hal_main_exit_op_done(tNFC_HAL_NCI_EVT event, uint16_t data_len,
-                               uint8_t* p_data) {
-  nfc_hal_main_close();
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_main_pre_init_done
-**
-** Description      notify complete of pre-initialization
-**
-** Returns          nothing
-**
-*******************************************************************************/
-void nfc_hal_main_pre_init_done(tHAL_NFC_STATUS status) {
-  HAL_TRACE_DEBUG1("nfc_hal_main_pre_init_done () status = %d", status);
-
-  if (status != HAL_NFC_STATUS_OK) {
-    nfc_hal_main_handle_terminate();
-
-    /* Close uart */
-    USERIAL_Close(USERIAL_NFC_PORT);
-  }
-
-  /* Notify NFC Task the status of initialization */
-  nfc_hal_cb.p_stack_cback(HAL_NFC_OPEN_CPLT_EVT, status);
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_main_timeout_cback
-**
-** Description      callback function for timeout
-**
-** Returns          void
-**
-*******************************************************************************/
-static void nfc_hal_main_timeout_cback(void* p_tle) {
-  TIMER_LIST_ENT* p_tlent = (TIMER_LIST_ENT*)p_tle;
-
-  HAL_TRACE_DEBUG0("nfc_hal_main_timeout_cback ()");
-
-  switch (p_tlent->event) {
-    case NFC_HAL_TTYPE_POWER_CYCLE:
-      nfc_hal_main_open_transport();
-      break;
-
-    case NFC_HAL_TTYPE_NFCC_ENABLE:
-      /* NFCC should have enabled now, notify transport openned */
-      nfc_hal_dm_pre_init_nfcc();
-      break;
-
-    default:
-      HAL_TRACE_DEBUG1(
-          "nfc_hal_main_timeout_cback: unhandled timer event (0x%04x)",
-          p_tlent->event);
-      break;
-  }
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_main_handle_terminate
-**
-** Description      Handle NFI transport shutdown
-**
-** Returns          nothing
-**
-*******************************************************************************/
-static void nfc_hal_main_handle_terminate(void) {
-  NFC_HDR* p_msg;
-
-  /* dequeue and free buffer */
-  if (nfc_hal_cb.ncit_cb.p_pend_cmd != NULL) {
-    GKI_freebuf(nfc_hal_cb.ncit_cb.p_pend_cmd);
-    nfc_hal_cb.ncit_cb.p_pend_cmd = NULL;
-  }
-
-  /* Free unsent nfc rx buffer */
-  if (nfc_hal_cb.ncit_cb.p_rcv_msg) {
-    GKI_freebuf(nfc_hal_cb.ncit_cb.p_rcv_msg);
-    nfc_hal_cb.ncit_cb.p_rcv_msg = NULL;
-  }
-
-  /* Free buffer for pending fragmented response/notification */
-  if (nfc_hal_cb.ncit_cb.p_frag_msg) {
-    GKI_freebuf(nfc_hal_cb.ncit_cb.p_frag_msg);
-    nfc_hal_cb.ncit_cb.p_frag_msg = NULL;
-  }
-
-  /* Free buffers in the tx mbox */
-  while ((p_msg = (NFC_HDR*)GKI_read_mbox(NFC_HAL_TASK_MBOX)) != NULL) {
-    GKI_freebuf(p_msg);
-  }
-
-  /* notify closing transport */
-  nfc_hal_dm_shutting_down_nfcc();
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_main_start_quick_timer
-**
-** Description      Start a timer for the specified amount of time.
-**                  NOTE: The timeout resolution depends on including modules.
-**                  QUICK_TIMER_TICKS_PER_SEC should be used to convert from
-**                  time to ticks.
-**
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_main_start_quick_timer(TIMER_LIST_ENT* p_tle, uint16_t type,
-                                    uint32_t timeout) {
-  NFC_HDR* p_msg;
-
-  /* if timer list is currently empty, start periodic GKI timer */
-  if (nfc_hal_cb.quick_timer_queue.p_first == NULL) {
-    /* if timer starts on other than NCIT task (script wrapper) */
-    if (GKI_get_taskid() != NFC_HAL_TASK) {
-      /* post event to start timer in NCIT task */
-      p_msg = (NFC_HDR*)GKI_getbuf(NFC_HDR_SIZE);
-      if (p_msg != NULL) {
-        p_msg->event = NFC_HAL_EVT_TO_START_QUICK_TIMER;
-        GKI_send_msg(NFC_HAL_TASK, NFC_HAL_TASK_MBOX, p_msg);
-      }
-    } else {
-      GKI_start_timer(NFC_HAL_QUICK_TIMER_ID,
-                      ((GKI_SECS_TO_TICKS(1) / QUICK_TIMER_TICKS_PER_SEC)),
-                      true);
-    }
-  }
-
-  GKI_remove_from_timer_list(&nfc_hal_cb.quick_timer_queue, p_tle);
-
-  p_tle->event = type;
-  p_tle->ticks = timeout; /* Save the number of ticks for the timer */
-
-  GKI_add_to_timer_list(&nfc_hal_cb.quick_timer_queue, p_tle);
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_main_stop_quick_timer
-**
-** Description      Stop a timer.
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_main_stop_quick_timer(TIMER_LIST_ENT* p_tle) {
-  GKI_remove_from_timer_list(&nfc_hal_cb.quick_timer_queue, p_tle);
-
-  /* if timer list is empty stop periodic GKI timer */
-  if (nfc_hal_cb.quick_timer_queue.p_first == NULL) {
-    GKI_stop_timer(NFC_HAL_QUICK_TIMER_ID);
-  }
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_main_process_quick_timer_evt
-**
-** Description      Process quick timer event
-**
-** Returns          void
-**
-*******************************************************************************/
-static void nfc_hal_main_process_quick_timer_evt(void) {
-  TIMER_LIST_ENT* p_tle;
-
-  GKI_update_timer_list(&nfc_hal_cb.quick_timer_queue, 1);
-
-  while ((nfc_hal_cb.quick_timer_queue.p_first) &&
-         (!nfc_hal_cb.quick_timer_queue.p_first->ticks)) {
-    p_tle = nfc_hal_cb.quick_timer_queue.p_first;
-    GKI_remove_from_timer_list(&nfc_hal_cb.quick_timer_queue, p_tle);
-
-    if (p_tle->p_cback) {
-      (*p_tle->p_cback)(p_tle);
-    }
-  }
-
-  /* if timer list is empty stop periodic GKI timer */
-  if (nfc_hal_cb.quick_timer_queue.p_first == NULL) {
-    GKI_stop_timer(NFC_HAL_QUICK_TIMER_ID);
-  }
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_send_nci_msg_to_nfc_task
-**
-** Description      This function is called to send nci message to nfc task
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_send_nci_msg_to_nfc_task(NFC_HDR* p_msg) {
-#ifdef NFC_HAL_SHARED_GKI
-  /* Using shared NFC/HAL GKI resources - send message buffer directly to
-   * NFC_TASK for processing */
-  p_msg->event = BT_EVT_TO_NFC_NCI;
-  GKI_send_msg(NFC_TASK, NFC_MBOX_ID, p_msg);
-#else
-  /* Send NCI message to the stack */
-  nfc_hal_cb.p_data_cback(p_msg->len, (uint8_t*)((p_msg + 1) + p_msg->offset));
-  GKI_freebuf(p_msg);
-#endif
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_send_credit_ntf_for_cid
-**
-** Description      This function is called to send credit ntf
-**                  for the specified connection id to nfc task
-**
-** Returns          void
-**
-*******************************************************************************/
-static void nfc_hal_send_credit_ntf_for_cid(uint8_t cid) {
-  NFC_HDR* p_msg;
-  uint8_t *p, *ps;
-
-  /* Start of new message. Allocate a buffer for message */
-  p_msg = (NFC_HDR*)GKI_getpoolbuf(NFC_HAL_NCI_POOL_ID);
-  if (p_msg != NULL) {
-    /* Initialize NFC_HDR */
-    p_msg->len = NCI_DATA_HDR_SIZE + 0x03;
-    p_msg->event = 0;
-    p_msg->offset = 0;
-    p_msg->layer_specific = 0;
-
-    p = (uint8_t*)(p_msg + 1) + p_msg->offset;
-    ps = p;
-    NCI_MSG_BLD_HDR0(p, NCI_MT_NTF, NCI_GID_CORE);
-    NCI_MSG_BLD_HDR1(p, NCI_MSG_CORE_CONN_CREDITS);
-    UINT8_TO_STREAM(p, 0x03);
-
-    /* Number of credit entries */
-    *p++ = 0x01;
-    /* Connection id of the credit ntf */
-    *p++ = cid;
-    /* Number of credits */
-    *p = 0x01;
-#ifdef DISP_NCI
-    DISP_NCI(ps, (uint16_t)p_msg->len, true);
-#endif
-    nfc_hal_send_nci_msg_to_nfc_task(p_msg);
-  } else {
-    HAL_TRACE_ERROR0(
-        "Unable to allocate buffer for Sending credit ntf to stack");
-  }
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_main_send_message
-**
-** Description      This function is calledto send an NCI message.
-**
-** Returns          void
-**
-*******************************************************************************/
-static void nfc_hal_main_send_message(NFC_HDR* p_msg) {
-#if (NFC_HAL_HCI_INCLUDED == TRUE)
-  uint8_t cid, pbf;
-  uint16_t data_len;
-#endif
-  uint8_t *ps, *pp;
-  uint16_t len = p_msg->len;
-#ifdef DISP_NCI
-  uint8_t delta;
-#endif
-
-  HAL_TRACE_DEBUG1("nfc_hal_main_send_message() ls:0x%x",
-                   p_msg->layer_specific);
-  if ((p_msg->layer_specific == NFC_HAL_WAIT_RSP_CMD) ||
-      (p_msg->layer_specific == NFC_HAL_WAIT_RSP_VSC)) {
-    nfc_hal_nci_send_cmd(p_msg);
-  } else {
-    /* NFC task has fragmented the data packet to the appropriate size
-     * and data credit is available; just send it */
-
-    /* add NCI packet type in front of message */
-    nfc_hal_nci_add_nfc_pkt_type(p_msg);
-
-    /* send this packet to transport */
-    ps = (uint8_t*)(p_msg + 1) + p_msg->offset;
-    pp = ps + 1;
-#ifdef DISP_NCI
-    delta = p_msg->len - len;
-    DISP_NCI(ps + delta, (uint16_t)(p_msg->len - delta), false);
-#endif
-
-#if (NFC_HAL_HCI_INCLUDED == TRUE)
-    if (nfc_hal_cb.hci_cb.hcp_conn_id) {
-      NCI_DATA_PRS_HDR(pp, pbf, cid, data_len);
-      if (cid == nfc_hal_cb.hci_cb.hcp_conn_id) {
-        if (nfc_hal_hci_handle_hcp_pkt_to_hc(pp)) {
-          HAL_TRACE_DEBUG0(
-              "nfc_hal_main_send_message() - Drop rsp to Fake cmd, Fake credit "
-              "ntf");
-          GKI_freebuf(p_msg);
-          nfc_hal_send_credit_ntf_for_cid(cid);
-          return;
-        }
-      }
-    }
-#endif
-
-    /* check low power mode state */
-    if (nfc_hal_dm_power_mode_execute(NFC_HAL_LP_TX_DATA_EVT)) {
-      USERIAL_Write(USERIAL_NFC_PORT, ps, p_msg->len);
-    } else {
-      HAL_TRACE_ERROR0(
-          "nfc_hal_main_send_message(): drop data in low power mode");
-    }
-    GKI_freebuf(p_msg);
-  }
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_main_task
-**
-** Description      NFC HAL NCI transport event processing task
-**
-** Returns          0
-**
-*******************************************************************************/
-uint32_t nfc_hal_main_task(uint32_t param) {
-  uint16_t event;
-  uint8_t byte;
-  uint8_t num_interfaces;
-  uint8_t* p;
-  NFC_HDR* p_msg;
-  bool free_msg;
-
-  HAL_TRACE_DEBUG0("NFC_HAL_TASK started");
-
-  /* Main loop */
-  while (true) {
-    event = GKI_wait(0xFFFF, 0);
-
-    /* Handle NFC_HAL_TASK_EVT_INITIALIZE (for initializing NCI transport) */
-    if (event & NFC_HAL_TASK_EVT_INITIALIZE) {
-      HAL_TRACE_DEBUG0(
-          "NFC_HAL_TASK got NFC_HAL_TASK_EVT_INITIALIZE signal. Opening NFC "
-          "transport...");
-
-      nfc_hal_main_open_transport();
-    }
-
-    /* Check for terminate event */
-    if (event & NFC_HAL_TASK_EVT_TERMINATE) {
-      HAL_TRACE_DEBUG0("NFC_HAL_TASK got NFC_HAL_TASK_EVT_TERMINATE");
-
-      nfc_hal_main_close();
-
-      continue;
-    }
-
-    /* Check for power cycle event */
-    if (event & NFC_HAL_TASK_EVT_POWER_CYCLE) {
-      HAL_TRACE_DEBUG0("NFC_HAL_TASK got NFC_HAL_TASK_EVT_POWER_CYCLE");
-      nfc_hal_main_handle_terminate();
-
-      /* Close uart */
-      USERIAL_Close(USERIAL_NFC_PORT);
-
-      /* power cycle timeout */
-      nfc_hal_main_start_quick_timer(
-          &nfc_hal_cb.timer, NFC_HAL_TTYPE_POWER_CYCLE,
-          (NFC_HAL_POWER_CYCLE_DELAY * QUICK_TIMER_TICKS_PER_SEC) / 1000);
-      continue;
-    }
-
-    /* NCI message ready to be sent to NFCC */
-    if (event & NFC_HAL_TASK_EVT_MBOX) {
-      while ((p_msg = (NFC_HDR*)GKI_read_mbox(NFC_HAL_TASK_MBOX)) != NULL) {
-        free_msg = true;
-        switch (p_msg->event & NFC_EVT_MASK) {
-          case NFC_HAL_EVT_TO_NFC_NCI:
-            nfc_hal_main_send_message(p_msg);
-            /* do not free buffer. NCI VS code may keep it for processing later
-             */
-            free_msg = false;
-            break;
-
-          case NFC_HAL_EVT_POST_CORE_RESET:
-            NFC_HAL_SET_INIT_STATE(NFC_HAL_INIT_STATE_W4_POST_INIT_DONE);
-
-            /* set NCI Control packet size from CORE_INIT_RSP */
-            p = (uint8_t*)(p_msg + 1) + p_msg->offset + NCI_MSG_HDR_SIZE;
-            p += 5;
-            STREAM_TO_UINT8(num_interfaces, p);
-            p += (num_interfaces + 3);
-            nfc_hal_cb.ncit_cb.nci_ctrl_size = *p;
-
-            /* start post initialization */
-            nfc_hal_cb.dev_cb.next_dm_config = NFC_HAL_DM_CONFIG_LPTD;
-            nfc_hal_cb.dev_cb.next_startup_vsc = 1;
-
-            nfc_hal_dm_config_nfcc();
-            break;
-
-          case NFC_HAL_EVT_TO_START_QUICK_TIMER:
-            GKI_start_timer(
-                NFC_HAL_QUICK_TIMER_ID,
-                ((GKI_SECS_TO_TICKS(1) / QUICK_TIMER_TICKS_PER_SEC)), true);
-            break;
-
-          case NFC_HAL_EVT_HCI:
-            nfc_hal_hci_evt_hdlr((tNFC_HAL_HCI_EVENT_DATA*)p_msg);
-            break;
-
-          case NFC_HAL_EVT_PRE_DISCOVER:
-            NFC_HAL_SET_INIT_STATE(NFC_HAL_INIT_STATE_W4_PREDISCOVER_DONE);
-            nfa_hal_send_pre_discover_cfg();
-            break;
-
-          case NFC_HAL_EVT_CONTROL_GRANTED:
-            nfc_hal_dm_send_pend_cmd();
-            break;
-
-          default:
-            break;
-        }
-
-        if (free_msg) GKI_freebuf(p_msg);
-      }
-    }
-
-    /* Data waiting to be read from serial port */
-    if (event & NFC_HAL_TASK_EVT_DATA_RDY) {
-      while (true) {
-        /* Read one byte to see if there is anything waiting to be read */
-        if (USERIAL_Read(USERIAL_NFC_PORT, &byte, 1) == 0) {
-          break;
-        }
-
-        if (nfc_hal_nci_receive_msg(byte)) {
-          /* complete of receiving NCI message */
-          nfc_hal_nci_assemble_nci_msg();
-          if (nfc_hal_cb.ncit_cb.p_rcv_msg) {
-            if (nfc_hal_nci_preproc_rx_nci_msg(nfc_hal_cb.ncit_cb.p_rcv_msg)) {
-              /* Send NCI message to the stack */
-              nfc_hal_send_nci_msg_to_nfc_task(nfc_hal_cb.ncit_cb.p_rcv_msg);
-            } else {
-              if (nfc_hal_cb.ncit_cb.p_rcv_msg)
-                GKI_freebuf(nfc_hal_cb.ncit_cb.p_rcv_msg);
-            }
-            nfc_hal_cb.ncit_cb.p_rcv_msg = NULL;
-          }
-        }
-      } /* while (TRUE) */
-    }
-
-    /* Process quick timer tick */
-    if (event & NFC_HAL_QUICK_TIMER_EVT_MASK) {
-      nfc_hal_main_process_quick_timer_evt();
-    }
-  }
-
-  HAL_TRACE_DEBUG0("nfc_hal_main_task terminated");
-
-  GKI_exit_task(GKI_get_taskid());
-  return 0;
-}
-
-/*******************************************************************************
-**
-** Function         HAL_NfcSetTraceLevel
-**
-** Description      This function sets the trace level for HAL.  If called with
-**                  a value of 0xFF, it simply returns the current trace level.
-**
-** Returns          The new or current trace level
-**
-*******************************************************************************/
-uint8_t HAL_NfcSetTraceLevel(uint8_t new_level) {
-  if (new_level != 0xFF) nfc_hal_cb.trace_level = new_level;
-
-  return (nfc_hal_cb.trace_level);
-}
diff --git a/halimpl/bcm2079x/hal/hal/nfc_hal_nci.c b/halimpl/bcm2079x/hal/hal/nfc_hal_nci.c
deleted file mode 100644
index 8d57eeb..0000000
--- a/halimpl/bcm2079x/hal/hal/nfc_hal_nci.c
+++ /dev/null
@@ -1,826 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2010-2014 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  This file contains function of the NFC unit to receive/process NCI/VS
- *  commands/responses.
- *
- ******************************************************************************/
-#include <string.h>
-#include "nci_defs.h"
-#include "nfc_hal_int.h"
-#include "nfc_hal_post_reset.h"
-#include "userial.h"
-
-/*****************************************************************************
-** Constants and types
-*****************************************************************************/
-
-/*****************************************************************************
-** Local function prototypes
-*****************************************************************************/
-
-/*******************************************************************************
-**
-** Function         nfc_hal_nci_assemble_nci_msg
-**
-** Description      This function is called to reassemble the received NCI
-**                  response/notification packet, if required.
-**                  (The data packets are posted to NFC task for reassembly)
-**
-** Returns          void.
-**
-*******************************************************************************/
-void nfc_hal_nci_assemble_nci_msg(void) {
-  NFC_HDR* p_msg = nfc_hal_cb.ncit_cb.p_rcv_msg;
-  uint8_t u8;
-  uint8_t *p, *pp;
-  uint8_t hdr[2];
-  uint8_t *ps, *pd;
-  uint16_t size, needed;
-  bool disp_again = false;
-
-  if ((p_msg == NULL) || (p_msg->len < NCI_MSG_HDR_SIZE)) return;
-
-#ifdef DISP_NCI
-  DISP_NCI((uint8_t*)(p_msg + 1) + p_msg->offset, (uint16_t)(p_msg->len), true);
-#endif
-
-  p = (uint8_t*)(p_msg + 1) + p_msg->offset;
-  u8 = *p++;
-  /* remove the PBF bit for potential reassembly later */
-  hdr[0] = u8 & ~NCI_PBF_MASK;
-  if ((u8 & NCI_MT_MASK) == NCI_MT_DATA) {
-    /* clear the RFU in octet1 */
-    *(p) = 0;
-    /* data packet reassembly is performed in NFC task */
-    return;
-  } else {
-    *(p) &= NCI_OID_MASK;
-  }
-
-  hdr[1] = *p;
-  pp = hdr;
-  /* save octet0 and octet1 of an NCI header in layer_specific for the received
-   * packet */
-  STREAM_TO_UINT16(p_msg->layer_specific, pp);
-
-  if (nfc_hal_cb.ncit_cb.p_frag_msg) {
-    if (nfc_hal_cb.ncit_cb.p_frag_msg->layer_specific !=
-        p_msg->layer_specific) {
-      /* check if these fragments are of the same NCI message */
-      HAL_TRACE_ERROR2(
-          "nfc_hal_nci_assemble_nci_msg() - different messages 0x%x, 0x%x!!",
-          nfc_hal_cb.ncit_cb.p_frag_msg->layer_specific, p_msg->layer_specific);
-      nfc_hal_cb.ncit_cb.nci_ras |= NFC_HAL_NCI_RAS_ERROR;
-    } else if (nfc_hal_cb.ncit_cb.nci_ras == 0) {
-      disp_again = true;
-      /* if not previous reassembly error, append the new fragment */
-      p_msg->offset += NCI_MSG_HDR_SIZE;
-      p_msg->len -= NCI_MSG_HDR_SIZE;
-      size = GKI_get_buf_size(nfc_hal_cb.ncit_cb.p_frag_msg);
-      needed = (NFC_HDR_SIZE + nfc_hal_cb.ncit_cb.p_frag_msg->len +
-                nfc_hal_cb.ncit_cb.p_frag_msg->offset + p_msg->len);
-      if (size >= needed) {
-        /* the buffer for reassembly is big enough to append the new fragment */
-        ps = (uint8_t*)(p_msg + 1) + p_msg->offset;
-        pd = (uint8_t*)(nfc_hal_cb.ncit_cb.p_frag_msg + 1) +
-             nfc_hal_cb.ncit_cb.p_frag_msg->offset +
-             nfc_hal_cb.ncit_cb.p_frag_msg->len;
-        memcpy(pd, ps, p_msg->len);
-        nfc_hal_cb.ncit_cb.p_frag_msg->len += p_msg->len;
-        /* adjust the NCI packet length */
-        pd = (uint8_t*)(nfc_hal_cb.ncit_cb.p_frag_msg + 1) +
-             nfc_hal_cb.ncit_cb.p_frag_msg->offset + 2;
-        *pd = (uint8_t)(nfc_hal_cb.ncit_cb.p_frag_msg->len - NCI_MSG_HDR_SIZE);
-      } else {
-        nfc_hal_cb.ncit_cb.nci_ras |= NFC_HAL_NCI_RAS_TOO_BIG;
-        HAL_TRACE_ERROR2(
-            "nfc_hal_nci_assemble_nci_msg() buffer overrun (%d + %d)!!",
-            nfc_hal_cb.ncit_cb.p_frag_msg->len, p_msg->len);
-      }
-    }
-    /* we are done with this new fragment, free it */
-    GKI_freebuf(p_msg);
-  } else {
-    nfc_hal_cb.ncit_cb.p_frag_msg = p_msg;
-  }
-
-  if ((u8 & NCI_PBF_MASK) == NCI_PBF_NO_OR_LAST) {
-    /* last fragment */
-    p_msg = nfc_hal_cb.ncit_cb.p_frag_msg;
-    p = (uint8_t*)(p_msg + 1) + p_msg->offset;
-    *p = u8; /* this should make the PBF flag as Last Fragment */
-    nfc_hal_cb.ncit_cb.p_frag_msg = NULL;
-
-    p_msg->layer_specific = nfc_hal_cb.ncit_cb.nci_ras;
-    /* still report the data packet, if the incoming packet is too big */
-    if (nfc_hal_cb.ncit_cb.nci_ras & NFC_HAL_NCI_RAS_ERROR) {
-      /* NFCC reported NCI fragments for different NCI messages and this is the
-       * last fragment - drop it */
-      HAL_TRACE_ERROR0("nfc_hal_nci_assemble_nci_msg() clearing NCI_RAS_ERROR");
-      GKI_freebuf(p_msg);
-      p_msg = NULL;
-    }
-#ifdef DISP_NCI
-    if ((nfc_hal_cb.ncit_cb.nci_ras == 0) && (disp_again)) {
-      DISP_NCI((uint8_t*)(p_msg + 1) + p_msg->offset, (uint16_t)(p_msg->len),
-               true);
-    }
-#endif
-    /* clear the error flags, so the next NCI packet is clean */
-    nfc_hal_cb.ncit_cb.nci_ras = 0;
-  } else {
-    /* still reassembling */
-    p_msg = NULL;
-  }
-
-  nfc_hal_cb.ncit_cb.p_rcv_msg = p_msg;
-}
-
-/*****************************************************************************
-**
-** Function         nfc_hal_nci_receive_nci_msg
-**
-** Description
-**      Handle incoming data (NCI events) from the serial port.
-**
-**      If there is data waiting from the serial port, this funciton reads the
-**      data and parses it. Once an entire NCI message has been read, it sends
-**      the message the the NFC_TASK for processing
-**
-*****************************************************************************/
-static bool nfc_hal_nci_receive_nci_msg(tNFC_HAL_NCIT_CB* p_cb, uint8_t byte) {
-  uint16_t len;
-  bool msg_received = false;
-
-  switch (p_cb->rcv_state) {
-    case NFC_HAL_RCV_NCI_MSG_ST:
-
-      /* Initialize rx parameters */
-      p_cb->rcv_state = NFC_HAL_RCV_NCI_HDR_ST;
-      p_cb->rcv_len = NCI_MSG_HDR_SIZE;
-
-      /* Start of new message. Allocate a buffer for message */
-      p_cb->p_rcv_msg = (NFC_HDR*)GKI_getpoolbuf(NFC_HAL_NCI_POOL_ID);
-      if (p_cb->p_rcv_msg != NULL) {
-        /* Initialize NFC_HDR */
-        p_cb->p_rcv_msg->len = 0;
-        p_cb->p_rcv_msg->event = 0;
-        p_cb->p_rcv_msg->offset = 0;
-
-        *((uint8_t*)(p_cb->p_rcv_msg + 1) + p_cb->p_rcv_msg->offset +
-          p_cb->p_rcv_msg->len++) = byte;
-      } else {
-        HAL_TRACE_ERROR0("Unable to allocate buffer for incoming NCI message.");
-      }
-      p_cb->rcv_len--;
-      break;
-
-    case NFC_HAL_RCV_NCI_HDR_ST:
-
-      if (p_cb->p_rcv_msg) {
-        *((uint8_t*)(p_cb->p_rcv_msg + 1) + p_cb->p_rcv_msg->offset +
-          p_cb->p_rcv_msg->len++) = byte;
-      }
-
-      p_cb->rcv_len--;
-
-      /* Check if we read in entire NFC message header yet */
-      if (p_cb->rcv_len == 0) {
-        p_cb->rcv_len = byte;
-
-        /* If non-zero payload, then go to receive-data state */
-        if (byte > 0) {
-          p_cb->rcv_state = NFC_HAL_RCV_NCI_PAYLOAD_ST;
-        } else {
-          msg_received = true;
-          p_cb->rcv_state = NFC_HAL_RCV_IDLE_ST;
-        }
-      }
-      break;
-
-    case NFC_HAL_RCV_NCI_PAYLOAD_ST:
-
-      p_cb->rcv_len--;
-      if (p_cb->p_rcv_msg) {
-        *((uint8_t*)(p_cb->p_rcv_msg + 1) + p_cb->p_rcv_msg->offset +
-          p_cb->p_rcv_msg->len++) = byte;
-
-        if (p_cb->rcv_len > 0) {
-          /* Read in the rest of the message */
-          len = USERIAL_Read(USERIAL_NFC_PORT,
-                             ((uint8_t*)(p_cb->p_rcv_msg + 1) +
-                              p_cb->p_rcv_msg->offset + p_cb->p_rcv_msg->len),
-                             p_cb->rcv_len);
-          p_cb->p_rcv_msg->len += len;
-          p_cb->rcv_len -= len;
-        }
-      }
-
-      /* Check if we read in entire message yet */
-      if (p_cb->rcv_len == 0) {
-        msg_received = true;
-        p_cb->rcv_state = NFC_HAL_RCV_IDLE_ST;
-      }
-      break;
-  }
-
-  return (msg_received);
-}
-
-/*****************************************************************************
-**
-** Function         nfc_hal_nci_receive_bt_msg
-**
-** Description
-**      Handle incoming BRCM specific data from the serial port.
-**
-**      If there is data waiting from the serial port, this funciton reads the
-**      data and parses it. Once an entire message has been read, it returns
-**      TRUE.
-**
-*****************************************************************************/
-static bool nfc_hal_nci_receive_bt_msg(tNFC_HAL_NCIT_CB* p_cb, uint8_t byte) {
-  uint16_t len;
-  bool msg_received = false;
-
-  switch (p_cb->rcv_state) {
-    case NFC_HAL_RCV_BT_MSG_ST:
-
-      /* Initialize rx parameters */
-      p_cb->rcv_state = NFC_HAL_RCV_BT_HDR_ST;
-      p_cb->rcv_len = HCIE_PREAMBLE_SIZE;
-
-      p_cb->p_rcv_msg = (NFC_HDR*)GKI_getpoolbuf(NFC_HAL_NCI_POOL_ID);
-      if (p_cb->p_rcv_msg != NULL) {
-        /* Initialize NFC_HDR */
-        p_cb->p_rcv_msg->len = 0;
-        p_cb->p_rcv_msg->event = 0;
-        p_cb->p_rcv_msg->offset = 0;
-
-        *((uint8_t*)(p_cb->p_rcv_msg + 1) + p_cb->p_rcv_msg->offset +
-          p_cb->p_rcv_msg->len++) = byte;
-      } else {
-        HAL_TRACE_ERROR0(
-            "[nfc] Unable to allocate buffer for incoming NCI message.");
-      }
-      p_cb->rcv_len--;
-      break;
-
-    case NFC_HAL_RCV_BT_HDR_ST:
-      if (p_cb->p_rcv_msg) {
-        *((uint8_t*)(p_cb->p_rcv_msg + 1) + p_cb->p_rcv_msg->offset +
-          p_cb->p_rcv_msg->len++) = byte;
-      }
-      p_cb->rcv_len--;
-
-      /* Check if we received entire preamble yet */
-      if (p_cb->rcv_len == 0) {
-        /* Received entire preamble. Length is in the last byte(s) of the
-         * preamble */
-        p_cb->rcv_len = byte;
-
-        /* Verify that buffer is big enough to fit message */
-        if ((p_cb->p_rcv_msg) && ((sizeof(NFC_HDR) + HCIE_PREAMBLE_SIZE +
-                                   byte) > GKI_get_buf_size(p_cb->p_rcv_msg))) {
-          /* Message cannot fit into buffer */
-          GKI_freebuf(p_cb->p_rcv_msg);
-          p_cb->p_rcv_msg = NULL;
-
-          HAL_TRACE_ERROR0("Invalid length for incoming BT HCI message.");
-        }
-
-        /* Message length is valid */
-        if (byte) {
-          /* Read rest of message */
-          p_cb->rcv_state = NFC_HAL_RCV_BT_PAYLOAD_ST;
-        } else {
-          /* Message has no additional parameters. (Entire message has been
-           * received) */
-          msg_received = true;
-          p_cb->rcv_state = NFC_HAL_RCV_IDLE_ST; /* Next, wait for packet type
-                                                    of next message */
-        }
-      }
-      break;
-
-    case NFC_HAL_RCV_BT_PAYLOAD_ST:
-      p_cb->rcv_len--;
-      if (p_cb->p_rcv_msg) {
-        *((uint8_t*)(p_cb->p_rcv_msg + 1) + p_cb->p_rcv_msg->offset +
-          p_cb->p_rcv_msg->len++) = byte;
-
-        if (p_cb->rcv_len > 0) {
-          /* Read in the rest of the message */
-          len = USERIAL_Read(USERIAL_NFC_PORT,
-                             ((uint8_t*)(p_cb->p_rcv_msg + 1) +
-                              p_cb->p_rcv_msg->offset + p_cb->p_rcv_msg->len),
-                             p_cb->rcv_len);
-          p_cb->p_rcv_msg->len += len;
-          p_cb->rcv_len -= len;
-        }
-      }
-
-      /* Check if we read in entire message yet */
-      if (p_cb->rcv_len == 0) {
-        msg_received = true;
-        p_cb->rcv_state =
-            NFC_HAL_RCV_IDLE_ST; /* Next, wait for packet type of next message
-                                    */
-      }
-      break;
-  }
-
-/* If we received entire message */
-#if (NFC_HAL_TRACE_PROTOCOL == TRUE)
-  if (msg_received && p_cb->p_rcv_msg) {
-    /* Display protocol trace message */
-    DispHciEvt(p_cb->p_rcv_msg);
-  }
-#endif
-
-  return (msg_received);
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_nci_proc_rx_bt_msg
-**
-** Description      Received BT message from NFCC
-**
-**                  Notify command complete if initializing NFCC
-**                  Forward BT message to NFC task
-**
-** Returns          void
-**
-*******************************************************************************/
-static void nfc_hal_nci_proc_rx_bt_msg(void) {
-  uint8_t* p;
-  NFC_HDR* p_msg;
-  uint16_t opcode, old_opcode;
-  tNFC_HAL_BTVSC_CPLT vcs_cplt_params;
-  tNFC_HAL_BTVSC_CPLT_CBACK* p_cback = NULL;
-
-  /* if complete BT message is received successfully */
-  if (nfc_hal_cb.ncit_cb.p_rcv_msg) {
-    p_msg = nfc_hal_cb.ncit_cb.p_rcv_msg;
-    HAL_TRACE_DEBUG1(
-        "nfc_hal_nci_proc_rx_bt_msg (): GOT an BT msgs init_sta:%d",
-        nfc_hal_cb.dev_cb.initializing_state);
-    HAL_TRACE_DEBUG2("event: 0x%x, wait_rsp:0x%x", p_msg->event,
-                     nfc_hal_cb.ncit_cb.nci_wait_rsp);
-    /* increase the cmd window here */
-    if (nfc_hal_cb.ncit_cb.nci_wait_rsp == NFC_HAL_WAIT_RSP_PROP) {
-      p = (uint8_t*)(p_msg + 1) + p_msg->offset;
-      if (*p == HCI_COMMAND_COMPLETE_EVT) {
-        p += 3; /* code, len, cmd window */
-        STREAM_TO_UINT16(opcode, p);
-        p = nfc_hal_cb.ncit_cb.last_hdr;
-        STREAM_TO_UINT16(old_opcode, p);
-        if (opcode == old_opcode) {
-          nfc_hal_cb.ncit_cb.nci_wait_rsp = NFC_HAL_WAIT_RSP_NONE;
-          p_cback = (tNFC_HAL_BTVSC_CPLT_CBACK*)nfc_hal_cb.ncit_cb.p_vsc_cback;
-          nfc_hal_cb.ncit_cb.p_vsc_cback = NULL;
-          nfc_hal_main_stop_quick_timer(&nfc_hal_cb.ncit_cb.nci_wait_rsp_timer);
-        }
-      }
-    }
-
-    /* if initializing BRCM NFCC */
-    if ((nfc_hal_cb.dev_cb.initializing_state ==
-         NFC_HAL_INIT_STATE_W4_APP_COMPLETE) ||
-        (nfc_hal_cb.dev_cb.initializing_state ==
-         NFC_HAL_INIT_STATE_W4_BUILD_INFO) ||
-        (nfc_hal_cb.dev_cb.initializing_state ==
-         NFC_HAL_INIT_STATE_W4_CONTROL_DONE)) {
-      /* this is command complete event for baud rate update or download patch
-       */
-      p = (uint8_t*)(p_msg + 1) + p_msg->offset;
-
-      p += 1; /* skip opcode */
-      STREAM_TO_UINT8(vcs_cplt_params.param_len, p);
-
-      p += 1; /* skip num command packets */
-      STREAM_TO_UINT16(vcs_cplt_params.opcode, p);
-
-      vcs_cplt_params.param_len -= 3;
-      vcs_cplt_params.p_param_buf = p;
-
-      if (nfc_hal_cb.dev_cb.initializing_state ==
-          NFC_HAL_INIT_STATE_W4_CONTROL_DONE) {
-        NFC_HAL_SET_INIT_STATE(NFC_HAL_INIT_STATE_IDLE);
-        nfc_hal_cb.p_stack_cback(HAL_NFC_RELEASE_CONTROL_EVT,
-                                 HAL_NFC_STATUS_OK);
-      }
-      if (p_cback) {
-        nfc_hal_cb.ncit_cb.p_vsc_cback = NULL;
-        (*p_cback)(&vcs_cplt_params);
-      }
-
-      /* do not BT send message to NFC task */
-      GKI_freebuf(p_msg);
-    } else {
-      /* do not BT send message to NFC task */
-      GKI_freebuf(nfc_hal_cb.ncit_cb.p_rcv_msg);
-    }
-    nfc_hal_cb.ncit_cb.p_rcv_msg = NULL;
-  }
-}
-
-/*****************************************************************************
-**
-** Function         nfc_hal_nci_receive_msg
-**
-** Description
-**      Handle incoming data (NCI events) from the serial port.
-**
-**      If there is data waiting from the serial port, this funciton reads the
-**      data and parses it. Once an entire NCI message has been read, it sends
-**      the message the the NFC_TASK for processing
-**
-*****************************************************************************/
-bool nfc_hal_nci_receive_msg(uint8_t byte) {
-  tNFC_HAL_NCIT_CB* p_cb = &(nfc_hal_cb.ncit_cb);
-  bool msg_received = false;
-
-  if (p_cb->rcv_state == NFC_HAL_RCV_IDLE_ST) {
-    /* if this is NCI message */
-    if (byte == HCIT_TYPE_NFC) {
-      p_cb->rcv_state = NFC_HAL_RCV_NCI_MSG_ST;
-    }
-    /* if this is BT message */
-    else if (byte == HCIT_TYPE_EVENT) {
-      p_cb->rcv_state = NFC_HAL_RCV_BT_MSG_ST;
-    } else {
-      HAL_TRACE_ERROR1("Unknown packet type drop this byte 0x%x", byte);
-    }
-  } else if (p_cb->rcv_state <= NFC_HAL_RCV_NCI_PAYLOAD_ST) {
-    msg_received = nfc_hal_nci_receive_nci_msg(p_cb, byte);
-  } else {
-    if (nfc_hal_nci_receive_bt_msg(p_cb, byte)) {
-      /* received BT message */
-      nfc_hal_nci_proc_rx_bt_msg();
-    }
-  }
-
-  return (msg_received);
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_nci_preproc_rx_nci_msg
-**
-** Description      NFCC sends NCI message to DH while initializing NFCC
-**                  processing low power mode
-**
-** Returns          TRUE, if NFC task need to receive NCI message
-**
-*******************************************************************************/
-bool nfc_hal_nci_preproc_rx_nci_msg(NFC_HDR* p_msg) {
-  uint8_t *p, *pp;
-  uint8_t mt, pbf, gid, op_code;
-  uint8_t payload_len;
-#if (NFC_HAL_HCI_INCLUDED == TRUE)
-  uint8_t cid;
-  uint16_t data_len;
-#endif
-
-  HAL_TRACE_DEBUG0("nfc_hal_nci_preproc_rx_nci_msg()");
-
-  if (nfc_hal_cb.dev_cb.initializing_state ==
-      NFC_HAL_INIT_STATE_W4_NFCC_TURN_OFF) {
-    /* if turning off BRCM NFCC */
-    nfc_hal_dm_proc_msg_during_exit(p_msg);
-    /* do not send message to NFC task while shutting down */
-    return false;
-  }
-
-  /* if initializing BRCM NFCC */
-  if (nfc_hal_cb.dev_cb.initializing_state != NFC_HAL_INIT_STATE_IDLE) {
-    nfc_hal_dm_proc_msg_during_init(p_msg);
-    /* do not send message to NFC task while initializing NFCC */
-    return false;
-  } else {
-    p = (uint8_t*)(p_msg + 1) + p_msg->offset;
-    pp = p;
-    NCI_MSG_PRS_HDR0(p, mt, pbf, gid);
-    NCI_MSG_PRS_HDR1(p, op_code);
-    payload_len = *p++;
-
-#if (NFC_HAL_HCI_INCLUDED == TRUE)
-    if (mt == NCI_MT_DATA) {
-      if (nfc_hal_cb.hci_cb.hcp_conn_id) {
-        NCI_DATA_PRS_HDR(pp, pbf, cid, data_len);
-        if (cid == nfc_hal_cb.hci_cb.hcp_conn_id) {
-          nfc_hal_hci_handle_hcp_pkt_from_hc(pp);
-        }
-      }
-    }
-
-    if (gid == NCI_GID_PROP) /* this is for hci netwk ntf */
-    {
-      if (mt == NCI_MT_NTF) {
-        if (op_code == NCI_MSG_HCI_NETWK) {
-          nfc_hal_hci_handle_hci_netwk_info((uint8_t*)(p_msg + 1) +
-                                            p_msg->offset);
-        }
-      }
-    } else
-#endif
-        if (gid == NCI_GID_RF_MANAGE) {
-      if (mt == NCI_MT_NTF) {
-        if (op_code == NCI_MSG_RF_INTF_ACTIVATED) {
-          if ((nfc_hal_cb.max_rf_credits) && (payload_len > 5)) {
-            /* API used wants to limit the RF data credits */
-            p += 5; /* skip RF disc id, interface, protocol, tech&mode, payload
-                       size */
-            if (*p > nfc_hal_cb.max_rf_credits) {
-              HAL_TRACE_DEBUG2("RfDataCredits %d->%d", *p,
-                               nfc_hal_cb.max_rf_credits);
-              *p = nfc_hal_cb.max_rf_credits;
-            }
-          }
-        }
-      }
-    }
-#if (NFC_HAL_HCI_INCLUDED == TRUE)
-    else if (gid == NCI_GID_CORE) {
-      if (mt == NCI_MT_RSP) {
-        if (op_code == NCI_MSG_CORE_CONN_CREATE) {
-          if (nfc_hal_cb.hci_cb.b_wait_hcp_conn_create_rsp) {
-            p++; /* skip status byte */
-            nfc_hal_cb.hci_cb.b_wait_hcp_conn_create_rsp = false;
-            p++; /* skip buff size */
-            p++; /* num of buffers */
-            nfc_hal_cb.hci_cb.hcp_conn_id = *p;
-          }
-        }
-      }
-    }
-#endif
-  }
-
-  if (nfc_hal_cb.dev_cb.power_mode == NFC_HAL_POWER_MODE_FULL) {
-    if (nfc_hal_cb.dev_cb.snooze_mode != NFC_HAL_LP_SNOOZE_MODE_NONE) {
-      /* extend idle timer */
-      nfc_hal_dm_power_mode_execute(NFC_HAL_LP_RX_DATA_EVT);
-    }
-  }
-
-  return true;
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_nci_add_nfc_pkt_type
-**
-** Description      Add packet type (HCIT_TYPE_NFC)
-**
-** Returns          TRUE, if NFCC can receive NCI message
-**
-*******************************************************************************/
-void nfc_hal_nci_add_nfc_pkt_type(NFC_HDR* p_msg) {
-  uint8_t* p;
-  uint8_t hcit;
-
-  /* add packet type in front of NCI header */
-  if (p_msg->offset > 0) {
-    p_msg->offset--;
-    p_msg->len++;
-
-    p = (uint8_t*)(p_msg + 1) + p_msg->offset;
-    *p = HCIT_TYPE_NFC;
-  } else {
-    HAL_TRACE_ERROR0(
-        "nfc_hal_nci_add_nfc_pkt_type () : No space for packet type");
-    hcit = HCIT_TYPE_NFC;
-    USERIAL_Write(USERIAL_NFC_PORT, &hcit, 1);
-  }
-}
-
-#if (NFC_HAL_HCI_INCLUDED == TRUE)
-/*******************************************************************************
-**
-** Function         nci_brcm_check_cmd_create_hcp_connection
-**
-** Description      Check if this is command to create HCP connection
-**
-** Returns          None
-**
-*******************************************************************************/
-static void nci_brcm_check_cmd_create_hcp_connection(NFC_HDR* p_msg) {
-  uint8_t* p;
-  uint8_t mt, pbf, gid, op_code;
-
-  nfc_hal_cb.hci_cb.b_wait_hcp_conn_create_rsp = false;
-
-  p = (uint8_t*)(p_msg + 1) + p_msg->offset;
-
-  if (nfc_hal_cb.dev_cb.initializing_state == NFC_HAL_INIT_STATE_IDLE) {
-    NCI_MSG_PRS_HDR0(p, mt, pbf, gid);
-    NCI_MSG_PRS_HDR1(p, op_code);
-
-    if (gid == NCI_GID_CORE) {
-      if (mt == NCI_MT_CMD) {
-        if (op_code == NCI_MSG_CORE_CONN_CREATE) {
-          if (((NCI_CORE_PARAM_SIZE_CON_CREATE + 4) == *p++) &&
-              (NCI_DEST_TYPE_NFCEE == *p++) && (1 == *p++) &&
-              (NCI_CON_CREATE_TAG_NFCEE_VAL == *p++) && (2 == *p++)) {
-            p++;
-            if (NCI_NFCEE_INTERFACE_HCI_ACCESS == *p) {
-              nfc_hal_cb.hci_cb.b_wait_hcp_conn_create_rsp = true;
-              return;
-            }
-          }
-        }
-      }
-    }
-  }
-}
-
-#endif
-
-/*******************************************************************************
-**
-** Function         nfc_hal_nci_send_cmd
-**
-** Description      Send NCI command to the transport
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_nci_send_cmd(NFC_HDR* p_buf) {
-  bool continue_to_process = true;
-  uint8_t *ps, *pd;
-  uint16_t max_len;
-  uint16_t buf_len, offset;
-  uint8_t* p;
-  uint8_t hdr[NCI_MSG_HDR_SIZE];
-  uint8_t nci_ctrl_size = nfc_hal_cb.ncit_cb.nci_ctrl_size;
-  uint8_t delta = 0;
-
-#if (NFC_HAL_HCI_INCLUDED == TRUE)
-  if ((nfc_hal_cb.hci_cb.hcp_conn_id == 0) &&
-      (nfc_hal_cb.nvm_cb.nvm_type != NCI_SPD_NVM_TYPE_NONE))
-    nci_brcm_check_cmd_create_hcp_connection((NFC_HDR*)p_buf);
-#endif
-
-  /* check low power mode state */
-  continue_to_process = nfc_hal_dm_power_mode_execute(NFC_HAL_LP_TX_DATA_EVT);
-
-  if (!continue_to_process) {
-    /* save the command to be sent until NFCC is free. */
-    nfc_hal_cb.ncit_cb.p_pend_cmd = p_buf;
-    return;
-  }
-
-  max_len = nci_ctrl_size + NCI_MSG_HDR_SIZE;
-  buf_len = p_buf->len;
-  offset = p_buf->offset;
-#ifdef DISP_NCI
-  if (buf_len > max_len) {
-    /* this command needs to be fragmented. display the complete packet first */
-    DISP_NCI((uint8_t*)(p_buf + 1) + p_buf->offset, p_buf->len, false);
-  }
-#endif
-  ps = (uint8_t*)(p_buf + 1) + p_buf->offset;
-  memcpy(hdr, ps, NCI_MSG_HDR_SIZE);
-  while (buf_len > max_len) {
-    HAL_TRACE_DEBUG2("buf_len (%d) > max_len (%d)", buf_len, max_len);
-    /* the NCI command is bigger than the NFCC Max Control Packet Payload Length
-     * fragment the command */
-
-    p_buf->len = max_len;
-    ps = (uint8_t*)(p_buf + 1) + p_buf->offset;
-    /* mark the control packet as fragmented */
-    *ps |= NCI_PBF_ST_CONT;
-    /* adjust the length of this fragment */
-    ps += 2;
-    *ps = nci_ctrl_size;
-
-    /* add NCI packet type in front of message */
-    nfc_hal_nci_add_nfc_pkt_type(p_buf);
-
-    /* send this fragment to transport */
-    p = (uint8_t*)(p_buf + 1) + p_buf->offset;
-
-#ifdef DISP_NCI
-    delta = p_buf->len - max_len;
-    DISP_NCI(p + delta, (uint16_t)(p_buf->len - delta), false);
-#endif
-    USERIAL_Write(USERIAL_NFC_PORT, p, p_buf->len);
-
-    /* adjust the len and offset to reflect that part of the command is already
-     * sent */
-    buf_len -= nci_ctrl_size;
-    offset += nci_ctrl_size;
-    HAL_TRACE_DEBUG2("p_buf->len: %d buf_len (%d)", p_buf->len, buf_len);
-    p_buf->len = buf_len;
-    p_buf->offset = offset;
-    pd = (uint8_t*)(p_buf + 1) + p_buf->offset;
-    /* restore the NCI header */
-    memcpy(pd, hdr, NCI_MSG_HDR_SIZE);
-    pd += 2;
-    *pd = (uint8_t)(p_buf->len - NCI_MSG_HDR_SIZE);
-  }
-
-  HAL_TRACE_DEBUG1("p_buf->len: %d", p_buf->len);
-
-  /* add NCI packet type in front of message */
-  nfc_hal_nci_add_nfc_pkt_type(p_buf);
-
-  /* send this fragment to transport */
-  p = (uint8_t*)(p_buf + 1) + p_buf->offset;
-
-#ifdef DISP_NCI
-  delta = p_buf->len - buf_len;
-  DISP_NCI(p + delta, (uint16_t)(p_buf->len - delta), false);
-#endif
-  USERIAL_Write(USERIAL_NFC_PORT, p, p_buf->len);
-
-  GKI_freebuf(p_buf);
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_nci_cmd_timeout_cback
-**
-** Description      callback function for timeout
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_nci_cmd_timeout_cback(void* p_tle) {
-  TIMER_LIST_ENT* p_tlent = (TIMER_LIST_ENT*)p_tle;
-
-  HAL_TRACE_DEBUG0("nfc_hal_nci_cmd_timeout_cback ()");
-
-  nfc_hal_cb.ncit_cb.nci_wait_rsp = NFC_HAL_WAIT_RSP_NONE;
-
-  if (p_tlent->event == NFC_HAL_TTYPE_NCI_WAIT_RSP) {
-    if (nfc_hal_cb.dev_cb.initializing_state <=
-        NFC_HAL_INIT_STATE_W4_PATCH_INFO) {
-      NFC_HAL_SET_INIT_STATE(NFC_HAL_INIT_STATE_IDLE);
-      nfc_hal_main_pre_init_done(HAL_NFC_STATUS_ERR_CMD_TIMEOUT);
-    } else if (nfc_hal_cb.dev_cb.initializing_state ==
-               NFC_HAL_INIT_STATE_W4_APP_COMPLETE) {
-      if (nfc_hal_cb.prm.state != NFC_HAL_PRM_ST_IDLE) {
-        nfc_hal_prm_process_timeout(NULL);
-      } else {
-        NFC_HAL_SET_INIT_STATE(NFC_HAL_INIT_STATE_IDLE);
-        nfc_hal_main_pre_init_done(HAL_NFC_STATUS_ERR_CMD_TIMEOUT);
-      }
-    } else if (nfc_hal_cb.dev_cb.initializing_state ==
-               NFC_HAL_INIT_STATE_W4_POST_INIT_DONE) {
-      NFC_HAL_SET_INIT_STATE(NFC_HAL_INIT_STATE_IDLE);
-      nfc_hal_cb.p_stack_cback(HAL_NFC_POST_INIT_CPLT_EVT,
-                               HAL_NFC_STATUS_ERR_CMD_TIMEOUT);
-    } else if (nfc_hal_cb.dev_cb.initializing_state ==
-               NFC_HAL_INIT_STATE_W4_CONTROL_DONE) {
-      NFC_HAL_SET_INIT_STATE(NFC_HAL_INIT_STATE_IDLE);
-      nfc_hal_cb.p_stack_cback(HAL_NFC_RELEASE_CONTROL_EVT,
-                               HAL_NFC_STATUS_ERR_CMD_TIMEOUT);
-    } else if (nfc_hal_cb.dev_cb.initializing_state ==
-               NFC_HAL_INIT_STATE_W4_PREDISCOVER_DONE) {
-      NFC_HAL_SET_INIT_STATE(NFC_HAL_INIT_STATE_IDLE);
-      nfc_hal_cb.p_stack_cback(HAL_NFC_PRE_DISCOVER_CPLT_EVT,
-                               HAL_NFC_STATUS_ERR_CMD_TIMEOUT);
-    } else if (nfc_hal_cb.dev_cb.initializing_state ==
-               NFC_HAL_INIT_STATE_W4_NFCC_TURN_OFF) {
-      nfc_hal_main_close();
-    }
-  }
-}
-
-/*******************************************************************************
-**
-** Function         HAL_NfcSetMaxRfDataCredits
-**
-** Description      This function sets the maximum RF data credit for HAL.
-**                  If 0, use the value reported from NFCC.
-**
-** Returns          none
-**
-*******************************************************************************/
-void HAL_NfcSetMaxRfDataCredits(uint8_t max_credits) {
-  HAL_TRACE_DEBUG2("HAL_NfcSetMaxRfDataCredits %d->%d",
-                   nfc_hal_cb.max_rf_credits, max_credits);
-  nfc_hal_cb.max_rf_credits = max_credits;
-}
diff --git a/halimpl/bcm2079x/hal/hal/nfc_hal_prm.c b/halimpl/bcm2079x/hal/hal/nfc_hal_prm.c
deleted file mode 100644
index 3d9e76f..0000000
--- a/halimpl/bcm2079x/hal/hal/nfc_hal_prm.c
+++ /dev/null
@@ -1,1172 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2012-2014 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-#include <string.h>
-#include "nfc_hal_int.h"
-#include "userial.h"
-
-/*****************************************************************************
-* Definitions
-*****************************************************************************/
-
-/* Internal flags */
-/* Application provided patchram in a single buffer */
-#define NFC_HAL_PRM_FLAGS_USE_PATCHRAM_BUF 0x01
-/* Reserved for future use */
-#define NFC_HAL_PRM_FLAGS_RFU 0x02
-#define NFC_HAL_PRM_FLAGS_SIGNATURE_SENT 0x04   /* Signature sent to NFCC */
-#define NFC_HAL_PRM_FLAGS_I2C_FIX_REQUIRED 0x08 /* PreI2C patch required */
-/* B3 Patch (no RESET_NTF after patch download) */
-#define NFC_HAL_PRM_FLAGS_BCM20791B3 0x10
-#define NFC_HAL_PRM_FLAGS_RM_RF 0x20 /* Erase Personality data */
-
-/* Secure patch download definitions */
-/* PRJID + MAJORVER + MINORVER + COUNT */
-#define NFC_HAL_PRM_NCD_PATCHFILE_HDR_LEN 7
-
-/* Enumeration of power modes IDs */
-#define NFC_HAL_PRM_SPD_POWER_MODE_LPM 0
-#define NFC_HAL_PRM_SPD_POWER_MODE_FPM 1
-
-/* Version string for BCM20791B3 */
-const uint8_t NFC_HAL_PRM_BCM20791B3_STR[] = "20791B3";
-#define NFC_HAL_PRM_BCM20791B3_STR_LEN (sizeof(NFC_HAL_PRM_BCM20791B3_STR) - 1)
-
-/* timeout for SPD events (in ms)   */
-#define NFC_HAL_PRM_SPD_TOUT (6000)
-/* delay before sending any new command (ms)*/
-#define NFC_HAL_PRM_END_DELAY (250)
-
-#if (NFC_HAL_PRM_DEBUG == TRUE)
-#define NFC_HAL_PRM_STATE(str) \
-  HAL_TRACE_DEBUG2("%s st: %d", str, nfc_hal_cb.prm.state)
-#else
-#define NFC_HAL_PRM_STATE(str)
-#endif
-
-void nfc_hal_prm_post_baud_update(tHAL_NFC_STATUS status);
-typedef struct {
-  uint16_t offset;
-  uint8_t len;
-} tNFC_HAL_PRM_RM_RF;
-
-const tNFC_HAL_PRM_RM_RF nfc_hal_prm_rm_rf_20795a1[] = {
-    {0x0000, 0xFB}, {0x019C, 0x08}, {0x05E8, 0xFB}, {0, 0}};
-static bool nfc_hal_prm_nvm_rw_cmd(void);
-
-/*****************************************************************************
-** Extern variable from nfc_hal_dm_cfg.c
-*****************************************************************************/
-extern tNFC_HAL_CFG* p_nfc_hal_cfg;
-
-/*******************************************************************************
-**
-** Function         nfc_hal_prm_spd_handle_download_complete
-**
-** Description      Patch download complete (for secure patch download)
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_prm_spd_handle_download_complete(uint8_t event) {
-  nfc_hal_cb.prm.state = NFC_HAL_PRM_ST_IDLE;
-
-  /* Notify application now */
-  if (nfc_hal_cb.prm.p_cback) (nfc_hal_cb.prm.p_cback)(event);
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_prm_spd_send_next_segment
-**
-** Description      Send next patch segment (for secure patch download)
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_prm_spd_send_next_segment(void) {
-  uint8_t* p_src;
-  uint16_t len, offset = nfc_hal_cb.prm.cur_patch_offset;
-  uint8_t hcit, oid, hdr0, type;
-  uint8_t chipverlen;
-  uint8_t chipverstr[NCI_SPD_HEADER_CHIPVER_LEN];
-  uint8_t patch_hdr_size = NCI_MSG_HDR_SIZE + 1; /* 1 is for HCIT */
-
-  /* Validate that segment is at least big enought to have NCI_MSG_HDR_SIZE + 1
-   * (hcit) */
-  if (nfc_hal_cb.prm.cur_patch_len_remaining < patch_hdr_size) {
-    HAL_TRACE_ERROR0("Unexpected end of patch.");
-    nfc_hal_prm_spd_handle_download_complete(
-        NFC_HAL_PRM_ABORT_INVALID_PATCH_EVT);
-    return;
-  }
-
-  /* Parse NCI command header */
-  p_src = (uint8_t*)(nfc_hal_cb.prm.p_cur_patch_data + offset);
-  STREAM_TO_UINT8(hcit, p_src);
-  STREAM_TO_UINT8(hdr0, p_src);
-  STREAM_TO_UINT8(oid, p_src);
-  STREAM_TO_UINT8(len, p_src);
-  STREAM_TO_UINT8(type, p_src);
-
-  /* Update number of bytes comsumed */
-  nfc_hal_cb.prm.cur_patch_offset += (len + patch_hdr_size);
-  nfc_hal_cb.prm.cur_patch_len_remaining -= (len + patch_hdr_size);
-
-  /* Check if sending signature byte */
-  if ((oid == NCI_MSG_SECURE_PATCH_DOWNLOAD) &&
-      (type == NCI_SPD_TYPE_SIGNATURE)) {
-    nfc_hal_cb.prm.flags |= NFC_HAL_PRM_FLAGS_SIGNATURE_SENT;
-  }
-  /* Check for header */
-  else if ((oid == NCI_MSG_SECURE_PATCH_DOWNLOAD) &&
-           (type == NCI_SPD_TYPE_HEADER)) {
-    /* Check if patch is for BCM20791B3 */
-    p_src += NCI_SPD_HEADER_OFFSET_CHIPVERLEN;
-    STREAM_TO_UINT8(chipverlen, p_src);
-    if (memcmp(nfc_hal_cb.nvm_cb.chip_ver, p_src, chipverlen) != 0) {
-      HAL_TRACE_ERROR0("Unexpected chip ver.");
-      nfc_hal_prm_spd_handle_download_complete(
-          NFC_HAL_PRM_ABORT_INVALID_PATCH_EVT);
-      return;
-    }
-    STREAM_TO_ARRAY(chipverstr, p_src, NCI_SPD_HEADER_CHIPVER_LEN);
-
-    if (memcmp(NFC_HAL_PRM_BCM20791B3_STR, chipverstr,
-               NFC_HAL_PRM_BCM20791B3_STR_LEN) == 0) {
-      /* Patch is for BCM2079B3 - do not wait for RESET_NTF after patch download
-       */
-      nfc_hal_cb.prm.flags |= NFC_HAL_PRM_FLAGS_BCM20791B3;
-    } else {
-      /* Patch is for BCM2079B4 or newer - wait for RESET_NTF after patch
-       * download */
-      nfc_hal_cb.prm.flags &= ~NFC_HAL_PRM_FLAGS_BCM20791B3;
-    }
-  }
-
-  /* Send the command (not including HCIT here) */
-  nfc_hal_dm_send_nci_cmd(
-      (uint8_t*)(nfc_hal_cb.prm.p_cur_patch_data + offset + 1),
-      (uint8_t)(len + NCI_MSG_HDR_SIZE),
-      nfc_hal_prm_nci_command_complete_cback);
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_prm_spd_handle_next_patch_start
-**
-** Description      Handle start of next patch (for secure patch download)
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_prm_spd_handle_next_patch_start(void) {
-  uint32_t cur_patch_mask;
-  uint32_t cur_patch_len;
-  bool found_patch_to_download = false;
-
-  while (!found_patch_to_download) {
-    /* Get length of current patch */
-    cur_patch_len =
-        nfc_hal_cb.prm.spd_patch_desc[nfc_hal_cb.prm.spd_cur_patch_idx].len;
-
-    /* Check if this is a patch we need to download */
-    cur_patch_mask =
-        ((uint32_t)1 << nfc_hal_cb.prm
-                            .spd_patch_desc[nfc_hal_cb.prm.spd_cur_patch_idx]
-                            .power_mode);
-    if (nfc_hal_cb.prm.spd_patch_needed_mask & cur_patch_mask) {
-      found_patch_to_download = true;
-    } else {
-      /* Do not need to download this patch. Skip to next patch */
-      HAL_TRACE_DEBUG1(
-          "Skipping patch for power_mode %i.",
-          nfc_hal_cb.prm.spd_patch_desc[nfc_hal_cb.prm.spd_cur_patch_idx]
-              .power_mode);
-
-      nfc_hal_cb.prm.spd_cur_patch_idx++;
-      if (nfc_hal_cb.prm.spd_cur_patch_idx >= nfc_hal_cb.prm.spd_patch_count) {
-        /* No more to download */
-        nfc_hal_prm_spd_handle_download_complete(NFC_HAL_PRM_COMPLETE_EVT);
-        return;
-      } else if (!(nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_USE_PATCHRAM_BUF)) {
-        /* Notify adaptation layer to call HAL_NfcPrmDownloadContinue with the
-         * next patch header */
-        (nfc_hal_cb.prm.p_cback)(NFC_HAL_PRM_SPD_GET_NEXT_PATCH);
-        return;
-      } else {
-        /* Patch in buffer. Skip over current patch. Check next patch */
-        nfc_hal_cb.prm.cur_patch_len_remaining -= (uint16_t)cur_patch_len;
-        nfc_hal_cb.prm.cur_patch_offset += (uint16_t)cur_patch_len;
-      }
-    }
-  }
-
-  /* Begin downloading patch */
-  HAL_TRACE_DEBUG1(
-      "Downloading patch for power_mode %i.",
-      nfc_hal_cb.prm.spd_patch_desc[nfc_hal_cb.prm.spd_cur_patch_idx]
-          .power_mode);
-  nfc_hal_cb.prm.state = NFC_HAL_PRM_ST_SPD_DOWNLOADING;
-  nfc_hal_prm_spd_send_next_segment();
-}
-
-#if (NFC_HAL_PRE_I2C_PATCH_INCLUDED == TRUE)
-/*******************************************************************************
-**
-** Function         nfc_hal_prm_spd_download_i2c_fix
-**
-** Description      Start downloading patch for i2c fix
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_prm_spd_download_i2c_fix(void) {
-  uint8_t *p, *p_start;
-  uint16_t patchfile_project_id;
-  uint16_t patchfile_ver_major;
-  uint16_t patchfile_ver_minor;
-  uint16_t patchfile_patchsize;
-  uint8_t u8;
-
-  HAL_TRACE_DEBUG0("Downloading I2C fix...");
-
-  /* Save pointer and offset of patchfile, so we can resume after downloading
-   * the i2c fix */
-  nfc_hal_cb.prm.spd_patch_offset = nfc_hal_cb.prm.cur_patch_offset;
-  nfc_hal_cb.prm.spd_patch_len_remaining =
-      nfc_hal_cb.prm.cur_patch_len_remaining;
-
-  /* Initialize pointers for downloading i2c fix */
-  nfc_hal_cb.prm.p_cur_patch_data = nfc_hal_cb.prm_i2c.p_patch;
-  nfc_hal_cb.prm.cur_patch_offset = 0;
-  nfc_hal_cb.prm.cur_patch_len_remaining = nfc_hal_cb.prm_i2c.len;
-
-  /* Parse the i2c patchfile */
-  if (nfc_hal_cb.prm.cur_patch_len_remaining >=
-      NFC_HAL_PRM_NCD_PATCHFILE_HDR_LEN) {
-    /* Parse patchfile header */
-    p = (uint8_t*)nfc_hal_cb.prm.p_cur_patch_data;
-    p_start = p;
-    STREAM_TO_UINT16(patchfile_project_id, p);
-    STREAM_TO_UINT16(patchfile_ver_major, p);
-    STREAM_TO_UINT16(patchfile_ver_minor, p);
-
-    /* RFU */
-    p++;
-
-    /* Check how many patches are in the patch file */
-    STREAM_TO_UINT8(u8, p);
-
-    /* Should only be one patch */
-    if (u8 > 1) {
-      HAL_TRACE_ERROR1("Invalid i2c fix: invalid number of patches (%i)", u8);
-      nfc_hal_prm_spd_handle_download_complete(
-          NFC_HAL_PRM_ABORT_INVALID_PATCH_EVT);
-      return;
-    }
-
-    /* Get info about the i2c patch*/
-    STREAM_TO_UINT8(u8, p); /* power mode (not needed for i2c patch)    */
-    STREAM_TO_UINT16(patchfile_patchsize, p); /* size of patch */
-
-    /* 5 byte RFU */
-    p += 5;
-
-    /* Adjust length to exclude patchfiloe header */
-    nfc_hal_cb.prm.cur_patch_len_remaining -=
-        (uint16_t)(p - p_start); /* Adjust size of patchfile */
-    nfc_hal_cb.prm.cur_patch_offset += (uint16_t)(
-        p - p_start); /* Bytes of patchfile transmitted/processed so far */
-
-    /* Begin sending patch to the NFCC */
-    nfc_hal_prm_spd_send_next_segment();
-  } else {
-    /* ERROR: Bad length for patchfile */
-    HAL_TRACE_ERROR0("Invalid i2c fix: unexpected end of patch");
-    nfc_hal_prm_spd_handle_download_complete(
-        NFC_HAL_PRM_ABORT_INVALID_PATCH_EVT);
-  }
-}
-#endif /* NFC_HAL_PRE_I2C_PATCH_INCLUDED */
-
-/*******************************************************************************
-**
-** Function         nfc_hal_prm_spd_check_version_continue
-**
-** Description      Check patchfile version with current downloaded version
-**
-** Returns          void
-**
-*******************************************************************************/
-static void nfc_hal_prm_spd_check_version_continue(void) {
-  HAL_TRACE_DEBUG1("nfc_hal_prm_spd_check_version_continue 0x%02x",
-                   nfc_hal_cb.prm.flags);
-  if (nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_RM_RF) {
-    HAL_TRACE_DEBUG0("erase relevant blocks in NVM");
-    nfc_hal_cb.prm.flags &= ~NFC_HAL_PRM_FLAGS_RM_RF;
-    if (!nfc_hal_prm_nvm_rw_cmd()) {
-      /* nvm rw started successfully */
-      return;
-    }
-  }
-#if (NFC_HAL_PRE_I2C_PATCH_INCLUDED == TRUE)
-  if (nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_I2C_FIX_REQUIRED) {
-    HAL_TRACE_DEBUG0("I2C patch fix required.");
-    /* Download i2c fix first */
-    nfc_hal_prm_spd_download_i2c_fix();
-    return;
-  }
-#endif /* NFC_HAL_PRE_I2C_PATCH_INCLUDED */
-
-  /* Download first segment */
-  nfc_hal_cb.prm.state = NFC_HAL_PRM_ST_SPD_GET_PATCH_HEADER;
-  if (!(nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_USE_PATCHRAM_BUF)) {
-    /* Notify adaptation layer to call HAL_NfcPrmDownloadContinue with the next
-     * patch segment */
-    (nfc_hal_cb.prm.p_cback)(NFC_HAL_PRM_SPD_GET_NEXT_PATCH);
-  } else {
-    nfc_hal_prm_spd_handle_next_patch_start();
-  }
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_prm_spd_check_version
-**
-** Description      Check patchfile version with current downloaded version
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_prm_spd_check_version(void) {
-  uint8_t *p, *p_start, i;
-  uint32_t nvm_patch_present_mask = 0;
-  uint32_t patchfile_patch_present_mask;
-  uint16_t patchfile_project_id = 0;
-  uint16_t patchfile_ver_major = 0;
-  uint16_t patchfile_ver_minor = 0;
-  uint16_t patchfile_patchsize;
-
-  uint8_t return_code = NFC_HAL_PRM_COMPLETE_EVT;
-
-  /* Initialize patchfile offset pointers */
-  p = p_start = NULL;
-  patchfile_patchsize = 0;
-
-  /* the good patches in NVM */
-  if (nfc_hal_cb.nvm_cb.lpm_size &&
-      !(nfc_hal_cb.nvm_cb.flags & (NFC_HAL_NVM_FLAGS_LPM_BAD)))
-    nvm_patch_present_mask |= (1 << NFC_HAL_PRM_SPD_POWER_MODE_LPM);
-
-  if (nfc_hal_cb.nvm_cb.fpm_size &&
-      !(nfc_hal_cb.nvm_cb.flags & (NFC_HAL_NVM_FLAGS_FPM_BAD)))
-    nvm_patch_present_mask |= (1 << NFC_HAL_PRM_SPD_POWER_MODE_FPM);
-
-  /* Get patchfile version */
-  if (nfc_hal_cb.prm.cur_patch_len_remaining >=
-      NFC_HAL_PRM_NCD_PATCHFILE_HDR_LEN) {
-    /* Parse patchfile header */
-    p = (uint8_t*)nfc_hal_cb.prm.p_cur_patch_data;
-    p_start = p;
-    STREAM_TO_UINT16(patchfile_project_id, p);
-    STREAM_TO_UINT16(patchfile_ver_major, p);
-    STREAM_TO_UINT16(patchfile_ver_minor, p);
-
-    /* RFU */
-    p++;
-
-    /* Check how many patches are in the patch file */
-    STREAM_TO_UINT8(nfc_hal_cb.prm.spd_patch_count, p);
-
-    if (nfc_hal_cb.prm.spd_patch_count > NFC_HAL_PRM_MAX_PATCH_COUNT) {
-      HAL_TRACE_ERROR2(
-          "Unsupported patchfile (number of patches (%i) exceeds maximum (%i)",
-          nfc_hal_cb.prm.spd_patch_count, NFC_HAL_PRM_MAX_PATCH_COUNT);
-    }
-
-    /* Mask of patches that are present in the patchfile */
-    patchfile_patch_present_mask = 0;
-
-    /* Get lengths for each patch */
-    for (i = 0; i < nfc_hal_cb.prm.spd_patch_count; i++) {
-      /* Get power mode for this patch */
-      STREAM_TO_UINT8(nfc_hal_cb.prm.spd_patch_desc[i].power_mode, p);
-
-      /* Update mask of power-modes present in the patchfile */
-      patchfile_patch_present_mask |=
-          ((uint32_t)1 << nfc_hal_cb.prm.spd_patch_desc[i].power_mode);
-
-      /* Get length of patch */
-      STREAM_TO_UINT16(nfc_hal_cb.prm.spd_patch_desc[i].len, p);
-
-      /* Add total size of patches */
-      patchfile_patchsize += nfc_hal_cb.prm.spd_patch_desc[i].len;
-
-      /* 5 byte RFU */
-      p += 5;
-    }
-
-    /* Adjust offset to after the patch file header */
-    nfc_hal_cb.prm.cur_patch_offset += (uint16_t)(
-        p - p_start); /* Bytes of patchfile transmitted/processed so far */
-    nfc_hal_cb.prm.cur_patch_len_remaining -=
-        (uint16_t)(p - p_start); /* Adjust size of patchfile */
-
-    HAL_TRACE_DEBUG4(
-        "NVM Patch info: flags=0x%04x,   Ver=%i.%i, PatchMask=0x%08x",
-        nfc_hal_cb.nvm_cb.flags, nfc_hal_cb.nvm_cb.ver_major,
-        nfc_hal_cb.nvm_cb.ver_minor, nvm_patch_present_mask);
-    HAL_TRACE_DEBUG6(
-        "Patchfile info: ProjID=0x%04x,  Ver=%i.%i, Num patches=%i, "
-        "PatchMask=0x%08x, PatchSize=%i",
-        patchfile_project_id, patchfile_ver_major, patchfile_ver_minor,
-        nfc_hal_cb.prm.spd_patch_count, patchfile_patch_present_mask,
-        patchfile_patchsize);
-
-    /*********************************************************************
-    * Version check of patchfile against NVM
-    *********************************************************************/
-    /* Download the patchfile if no patches in NVM */
-    if ((nfc_hal_cb.nvm_cb.project_id == 0) ||
-        !(nfc_hal_cb.nvm_cb.flags & NFC_HAL_NVM_FLAGS_PATCH_PRESENT)) {
-      /* No patch in NVM, need to download all */
-      nfc_hal_cb.prm.spd_patch_needed_mask = patchfile_patch_present_mask;
-      if (nfc_hal_cb.dev_cb.brcm_hw_id == BRCM_20795A1_ID) {
-        nfc_hal_cb.prm.flags |= NFC_HAL_PRM_FLAGS_RM_RF;
-        nfc_hal_cb.prm.p_param = (void*)nfc_hal_prm_rm_rf_20795a1;
-        nfc_hal_cb.prm.param_idx = 0;
-      }
-
-      HAL_TRACE_DEBUG2("No previous patch detected. Downloading patch %i.%i",
-                       patchfile_ver_major, patchfile_ver_minor);
-    }
-    /* Skip download if project ID of patchfile does not match NVM */
-    else if (nfc_hal_cb.nvm_cb.project_id != patchfile_project_id) {
-      /* Project IDs mismatch */
-      HAL_TRACE_DEBUG2(
-          "Patch download skipped: Mismatched Project ID (NVM ProjId: 0x%04x, "
-          "Patchfile ProjId: 0x%04x)",
-          nfc_hal_cb.nvm_cb.project_id, patchfile_project_id);
-
-      return_code = NFC_HAL_PRM_ABORT_INVALID_PATCH_EVT;
-    }
-    /* Skip download if version of patchfile is equal to version in NVM */
-    /*                  and patches of the power modes are the same as the good
-       patches in NVM */
-    else if ((nfc_hal_cb.nvm_cb.ver_major == patchfile_ver_major) &&
-             (nfc_hal_cb.nvm_cb.ver_minor == patchfile_ver_minor) &&
-             ((nvm_patch_present_mask | patchfile_patch_present_mask) ==
-              nvm_patch_present_mask)) /* if the NVM patch include all the
-                                          patched in file */
-    {
-      HAL_TRACE_DEBUG2(
-          "Patch download skipped. NVM patch (version %i.%i) is the same than "
-          "the patchfile ",
-          nfc_hal_cb.nvm_cb.ver_major, nfc_hal_cb.nvm_cb.ver_minor);
-
-      return_code = NFC_HAL_PRM_COMPLETE_EVT;
-    }
-    /* Remaining cases: Download all patches in the patchfile */
-    else {
-      nfc_hal_cb.prm.spd_patch_needed_mask = patchfile_patch_present_mask;
-
-      HAL_TRACE_DEBUG4(
-          "Downloading patch version: %i.%i (previous version in NVM: "
-          "%i.%i)...",
-          patchfile_ver_major, patchfile_ver_minor, nfc_hal_cb.nvm_cb.ver_major,
-          nfc_hal_cb.nvm_cb.ver_minor);
-    }
-
-  } else {
-    /* Invalid patch file header */
-    HAL_TRACE_ERROR0("Invalid patch file header.");
-
-    return_code = NFC_HAL_PRM_ABORT_INVALID_PATCH_EVT;
-  }
-
-  /* If we need to download anything, get the first patch to download */
-  if (nfc_hal_cb.prm.spd_patch_needed_mask) {
-    HAL_TRACE_ERROR4(
-        "Downloading patch version: %i.%i (previous version in NVM: %i.%i)...",
-        patchfile_ver_major, patchfile_ver_minor, nfc_hal_cb.nvm_cb.ver_major,
-        nfc_hal_cb.nvm_cb.ver_minor);
-#if (NFC_HAL_PRE_I2C_PATCH_INCLUDED == TRUE)
-    /* Check if I2C patch is needed: if                                     */
-    /*      - I2C patch file was provided using HAL_NfcPrmSetI2cPatch, and */
-    /*      -   current patch in NVM has ProjectID=0, or                    */
-    /*          FPM is not present or corrupted, or                         */
-    /*          or patchfile is major-ver 76+                               */
-    /*          or patchfile is not for B3 (always download for B4 onward)  */
-    if ((nfc_hal_cb.prm_i2c.p_patch) &&
-        ((nfc_hal_cb.nvm_cb.project_id == 0) ||
-         (nfc_hal_cb.nvm_cb.fpm_size == 0) ||
-         (nfc_hal_cb.nvm_cb.flags & NFC_HAL_NVM_FLAGS_FPM_BAD) ||
-         (patchfile_ver_major >= 76) ||
-         (!(nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_BCM20791B3)))) {
-      HAL_TRACE_DEBUG0("I2C patch fix required.");
-      nfc_hal_cb.prm.flags |= NFC_HAL_PRM_FLAGS_I2C_FIX_REQUIRED;
-    }
-#endif /* NFC_HAL_PRE_I2C_PATCH_INCLUDED */
-    nfc_hal_prm_spd_check_version_continue();
-  } else {
-    static bool firstTime = true;
-    if (firstTime) {
-      HAL_TRACE_ERROR2("NVM patch version is %d.%d",
-                       nfc_hal_cb.nvm_cb.ver_major,
-                       nfc_hal_cb.nvm_cb.ver_minor);
-      firstTime = false;
-    }
-    /* Download complete */
-    nfc_hal_prm_spd_handle_download_complete(return_code);
-  }
-}
-
-#if (NFC_HAL_TRACE_VERBOSE == TRUE)
-/*******************************************************************************
-**
-** Function         nfc_hal_prm_spd_status_str
-**
-** Description      Return status string for a given spd status code
-**
-** Returns          Status string
-**
-*******************************************************************************/
-uint8_t* nfc_hal_prm_spd_status_str(uint8_t spd_status_code) {
-  char* p_str;
-
-  switch (spd_status_code) {
-    case NCI_STATUS_SPD_ERROR_DEST:
-      p_str = "SPD_ERROR_DEST";
-      break;
-
-    case NCI_STATUS_SPD_ERROR_PROJECTID:
-      p_str = "SPD_ERROR_PROJECTID";
-      break;
-
-    case NCI_STATUS_SPD_ERROR_CHIPVER:
-      p_str = "SPD_ERROR_CHIPVER";
-      break;
-
-    case NCI_STATUS_SPD_ERROR_MAJORVER:
-      p_str = "SPD_ERROR_MAJORVER";
-      break;
-
-    case NCI_STATUS_SPD_ERROR_INVALID_PARAM:
-      p_str = "SPD_ERROR_INVALID_PARAM";
-      break;
-
-    case NCI_STATUS_SPD_ERROR_INVALID_SIG:
-      p_str = "SPD_ERROR_INVALID_SIG";
-      break;
-
-    case NCI_STATUS_SPD_ERROR_NVM_CORRUPTED:
-      p_str = "SPD_ERROR_NVM_CORRUPTED";
-      break;
-
-    case NCI_STATUS_SPD_ERROR_PWR_MODE:
-      p_str = "SPD_ERROR_PWR_MODE";
-      break;
-
-    case NCI_STATUS_SPD_ERROR_MSG_LEN:
-      p_str = "SPD_ERROR_MSG_LEN";
-      break;
-
-    case NCI_STATUS_SPD_ERROR_PATCHSIZE:
-      p_str = "SPD_ERROR_PATCHSIZE";
-      break;
-
-    default:
-      p_str = "Unspecified Error";
-      break;
-  }
-
-  return ((uint8_t*)p_str);
-}
-#endif /* (NFC_HAL_TRACE_VERBOSE == TRUE) */
-/*******************************************************************************
-**
-** Function         nfc_hal_prm_nvm_rw_cmd
-**
-** Description      Non Volatile Read Write Command; for now only write zeros
-**
-** Returns          TRUE if done.
-**
-*******************************************************************************/
-static bool nfc_hal_prm_nvm_rw_cmd(void) {
-  tNFC_HAL_PRM_RM_RF* p_param = (tNFC_HAL_PRM_RM_RF*)(nfc_hal_cb.prm.p_param);
-  uint8_t *p_buff, *p, *p_end;
-  uint8_t len = 0;
-  uint16_t cmd_len;
-
-  if (p_param) len = p_param[nfc_hal_cb.prm.param_idx].len;
-  HAL_TRACE_DEBUG2("nfc_hal_prm_nvm_rw_cmd: %d/%d", nfc_hal_cb.prm.param_idx,
-                   len);
-  if (len == 0) {
-    return true;
-  }
-  cmd_len = len + 7;
-
-  p_buff = (uint8_t*)GKI_getbuf(cmd_len);
-  if (p_buff == NULL) {
-    HAL_TRACE_ERROR0("NVM No buffer");
-    nfc_hal_prm_spd_handle_download_complete(NFC_HAL_PRM_ABORT_EVT);
-    return true;
-  }
-
-  p = p_buff;
-
-  UINT8_TO_STREAM(p, (NCI_MTS_CMD | NCI_GID_PROP));
-  UINT8_TO_STREAM(p, NCI_MSG_EEPROM_RW);
-  UINT8_TO_STREAM(p, (len + 4));
-  UINT8_TO_STREAM(p, 1); /* 1=write 0=read */
-  UINT16_TO_STREAM(p, p_param[nfc_hal_cb.prm.param_idx].offset);
-  UINT8_TO_STREAM(p, len);
-  memset(p, 0, len); /* Fill remaining bytes with zeros*/
-
-  nfc_hal_cb.prm.param_idx++;
-  nfc_hal_dm_send_nci_cmd(p_buff, cmd_len,
-                          nfc_hal_prm_nci_command_complete_cback);
-  GKI_freebuf(p_buff);
-  return false;
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_prm_nci_command_complete_cback
-**
-** Description      Callback for NCI vendor specific command complete
-**                  (for secure patch download)
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_prm_nci_command_complete_cback(tNFC_HAL_NCI_EVT event,
-                                            uint16_t data_len,
-                                            uint8_t* p_data) {
-  uint8_t status, u8;
-  uint8_t* p;
-  uint32_t post_signature_delay;
-
-  NFC_HAL_PRM_STATE("nfc_hal_prm_nci_command_complete_cback");
-
-  /* Stop the command-timeout timer */
-  nfc_hal_main_stop_quick_timer(&nfc_hal_cb.prm.timer);
-
-  /* Skip over NCI header */
-  p = p_data + NCI_MSG_HDR_SIZE;
-
-  /* Handle SECURE_PATCH_DOWNLOAD Rsp */
-  if (event == NFC_VS_SEC_PATCH_DOWNLOAD_EVT) {
-    /* Status and error code */
-    STREAM_TO_UINT8(status, p);
-    STREAM_TO_UINT8(u8, p);
-
-    if (status != NCI_STATUS_OK) {
-#if (NFC_HAL_TRACE_VERBOSE == TRUE)
-      HAL_TRACE_ERROR2("Patch download failed, reason code=0x%X (%s)", status,
-                       nfc_hal_prm_spd_status_str(status));
-#else
-      HAL_TRACE_ERROR1("Patch download failed, reason code=0x%X", status);
-#endif
-
-      /* Notify application */
-      nfc_hal_prm_spd_handle_download_complete(
-          NFC_HAL_PRM_ABORT_INVALID_PATCH_EVT);
-      return;
-    }
-
-    /* If last segment (SIGNATURE) sent */
-    if (nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_SIGNATURE_SENT) {
-      /* Wait for authentication complete (SECURE_PATCH_DOWNLOAD NTF), including
-       * time to commit to NVM (for BCM43341B0) */
-      nfc_hal_cb.prm.state = NFC_HAL_PRM_ST_SPD_AUTHENTICATING;
-      nfc_hal_main_start_quick_timer(
-          &nfc_hal_cb.prm.timer, 0x00,
-          (NFC_HAL_PRM_COMMIT_DELAY * QUICK_TIMER_TICKS_PER_SEC) / 1000);
-      return;
-    }
-    /* Download next segment */
-    else if (nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_USE_PATCHRAM_BUF) {
-      /* If patch is in a buffer, get next patch from buffer */
-      nfc_hal_prm_spd_send_next_segment();
-    } else {
-      /* Notify adaptation layer to get next patch segment (via
-       * HAL_NfcPrmDownloadContinue) */
-      (nfc_hal_cb.prm.p_cback)(NFC_HAL_PRM_CONTINUE_EVT);
-    }
-  }
-  /* Handle SECURE_PATCH_DOWNLOAD NTF */
-  else if (event == NFC_VS_SEC_PATCH_AUTH_EVT) {
-    HAL_TRACE_DEBUG1("prm flags:0x%x.", nfc_hal_cb.prm.flags);
-    /* Status and error code */
-    STREAM_TO_UINT8(status, p);
-    STREAM_TO_UINT8(u8, p);
-
-    /* Sanity check - should only get this NTF while in AUTHENTICATING stage */
-    if (nfc_hal_cb.prm.state == NFC_HAL_PRM_ST_SPD_AUTHENTICATING) {
-      if (status != NCI_STATUS_OK) {
-        HAL_TRACE_ERROR0("Patch authentication failed");
-        nfc_hal_prm_spd_handle_download_complete(
-            NFC_HAL_PRM_ABORT_BAD_SIGNATURE_EVT);
-        return;
-      }
-
-#if (NFC_HAL_PRE_I2C_PATCH_INCLUDED == TRUE)
-      if (nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_I2C_FIX_REQUIRED) {
-        HAL_TRACE_DEBUG1(
-            "PreI2C patch downloaded...waiting %i ms for NFCC to reboot.",
-            nfc_hal_cb.prm_i2c.prei2c_delay);
-
-        /* Restore pointers to patchfile */
-        nfc_hal_cb.prm.flags &= ~NFC_HAL_PRM_FLAGS_I2C_FIX_REQUIRED;
-        nfc_hal_cb.prm.p_cur_patch_data = nfc_hal_cb.prm.p_spd_patch;
-        nfc_hal_cb.prm.cur_patch_offset = nfc_hal_cb.prm.spd_patch_offset;
-        nfc_hal_cb.prm.cur_patch_len_remaining =
-            nfc_hal_cb.prm.spd_patch_len_remaining;
-
-        /* Resume normal patch download */
-        nfc_hal_cb.prm.state = NFC_HAL_PRM_ST_SPD_GET_PATCH_HEADER;
-        nfc_hal_cb.prm.flags &= ~NFC_HAL_PRM_FLAGS_SIGNATURE_SENT;
-
-        /* Post PreI2C delay */
-        nfc_hal_main_start_quick_timer(
-            &nfc_hal_cb.prm.timer, 0x00,
-            (nfc_hal_cb.prm_i2c.prei2c_delay * QUICK_TIMER_TICKS_PER_SEC) /
-                1000);
-
-        return;
-      }
-#endif /* NFC_HAL_PRE_I2C_PATCH_INCLUDED */
-
-      /* Wait for NFCC to save the patch to NVM */
-      if (!(nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_BCM20791B3)) {
-        /* 20791B4 or newer - wait for RESET_NTF; including time to commit to
-         * NVM (for BCM20791B4+) */
-        post_signature_delay = NFC_HAL_PRM_COMMIT_DELAY;
-        HAL_TRACE_DEBUG1(
-            "Patch downloaded and authenticated. Waiting %i ms for RESET "
-            "NTF...",
-            post_signature_delay);
-
-      } else if (nfc_hal_cb.nvm_cb.flags & NFC_HAL_NVM_FLAGS_NO_NVM) {
-        /* No NVM. Wait for NFCC to restart */
-        post_signature_delay = NFC_HAL_PRM_END_DELAY;
-        HAL_TRACE_DEBUG1(
-            "Patch downloaded and authenticated. Waiting %i ms for NFCC to "
-            "restart...",
-            post_signature_delay);
-      } else {
-        /* Wait for NFCC to save the patch to NVM (need about 1 ms per byte) */
-        post_signature_delay =
-            nfc_hal_cb.prm.spd_patch_desc[nfc_hal_cb.prm.spd_cur_patch_idx].len;
-        if (post_signature_delay < nfc_hal_cb.prm.patchram_delay)
-          post_signature_delay = nfc_hal_cb.prm.patchram_delay;
-        HAL_TRACE_DEBUG1(
-            "Patch downloaded and authenticated. Waiting %i ms for NVM update "
-            "to complete...",
-            post_signature_delay);
-      }
-
-      nfc_hal_cb.prm.state = NFC_HAL_PRM_ST_SPD_AUTH_DONE;
-
-      nfc_hal_main_start_quick_timer(
-          &nfc_hal_cb.prm.timer, 0x00,
-          (post_signature_delay * QUICK_TIMER_TICKS_PER_SEC) / 1000);
-    } else {
-      HAL_TRACE_ERROR0("Got unexpected SECURE_PATCH_DOWNLOAD NTF");
-      nfc_hal_prm_spd_handle_download_complete(NFC_HAL_PRM_ABORT_EVT);
-    }
-  }
-  /* Handle NCI_MSG_GET_PATCH_VERSION RSP */
-  else if (event == NFC_VS_GET_PATCH_VERSION_EVT) {
-    nfc_hal_prm_spd_handle_download_complete(NFC_HAL_PRM_COMPLETE_EVT);
-  } else if (event == NFC_VS_EEPROM_RW_EVT) {
-    STREAM_TO_UINT8(status, p);
-    if (status == NCI_STATUS_OK) {
-      if (nfc_hal_prm_nvm_rw_cmd()) {
-        nfc_hal_prm_spd_check_version_continue();
-      }
-    } else {
-      HAL_TRACE_ERROR0("NVM failed");
-      nfc_hal_prm_spd_handle_download_complete(NFC_HAL_PRM_ABORT_EVT);
-    }
-  } else {
-    /* Invalid response from NFCC during patch download */
-    HAL_TRACE_ERROR1(
-        "Invalid response from NFCC during patch download (opcode=0x%02X)",
-        event);
-    nfc_hal_prm_spd_handle_download_complete(
-        NFC_HAL_PRM_ABORT_INVALID_PATCH_EVT);
-  }
-
-  NFC_HAL_PRM_STATE("prm_nci_command_complete_cback");
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_prm_nfcc_ready_to_continue
-**
-** Description      Continue to download patch or notify application
-*completition
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_prm_nfcc_ready_to_continue(void) {
-  uint8_t get_patch_version_cmd[NCI_MSG_HDR_SIZE] = {
-      NCI_MTS_CMD | NCI_GID_PROP, NCI_MSG_GET_PATCH_VERSION, 0x00};
-
-  /* Clear the bit for the patch we just downloaded */
-  nfc_hal_cb.prm.spd_patch_needed_mask &=
-      ~((uint32_t)1 << nfc_hal_cb.prm
-                           .spd_patch_desc[nfc_hal_cb.prm.spd_cur_patch_idx]
-                           .power_mode);
-
-  /* Check if another patch to download */
-  nfc_hal_cb.prm.spd_cur_patch_idx++;
-  if ((nfc_hal_cb.prm.spd_patch_needed_mask) &&
-      (nfc_hal_cb.prm.spd_cur_patch_idx < nfc_hal_cb.prm.spd_patch_count)) {
-    nfc_hal_cb.prm.state = NFC_HAL_PRM_ST_SPD_GET_PATCH_HEADER;
-    nfc_hal_cb.prm.flags &= ~NFC_HAL_PRM_FLAGS_SIGNATURE_SENT;
-
-    if (nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_USE_PATCHRAM_BUF) {
-      /* If patch is in a buffer, get next patch from buffer */
-      nfc_hal_prm_spd_handle_next_patch_start();
-    } else {
-      /* Notify adaptation layer to get next patch header (via
-       * HAL_NfcPrmDownloadContinue) */
-      (nfc_hal_cb.prm.p_cback)(NFC_HAL_PRM_SPD_GET_NEXT_PATCH);
-    }
-
-  } else {
-    /* Done downloading */
-    HAL_TRACE_DEBUG0(
-        "Patch downloaded and authenticated. Get new patch version.");
-    /* add get patch info again to verify the effective FW version */
-    nfc_hal_dm_send_nci_cmd(get_patch_version_cmd, NCI_MSG_HDR_SIZE,
-                            nfc_hal_prm_nci_command_complete_cback);
-    nfc_hal_cb.prm.state = NFC_HAL_PRM_ST_W4_GET_VERSION;
-  }
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_prm_spd_reset_ntf
-**
-** Description      Received RESET NTF from NFCC, indicating it has completed
-**                  reset after patch download.
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_prm_spd_reset_ntf(uint8_t reset_reason, uint8_t reset_type) {
-  /* Check if we were expecting a RESET NTF */
-  if (nfc_hal_cb.prm.state == NFC_HAL_PRM_ST_SPD_AUTH_DONE) {
-    HAL_TRACE_DEBUG2(
-        "Received RESET NTF after patch download (reset_reason=%i, "
-        "reset_type=%i)",
-        reset_reason, reset_type);
-
-    /* Stop waiting for RESET NTF */
-    nfc_hal_main_stop_quick_timer(&nfc_hal_cb.prm.timer);
-
-    {
-      /* Continue with patch download */
-      nfc_hal_prm_nfcc_ready_to_continue();
-    }
-  } else if (nfc_hal_cb.prm.state == NFC_HAL_PRM_ST_SPD_GET_PATCH_HEADER) {
-    HAL_TRACE_DEBUG0(
-        "Received RESET NTF after pre-I2C patch download. Proceeding with "
-        "patch download...");
-
-    /* Stop waiting for RESET NTF */
-    nfc_hal_main_stop_quick_timer(&nfc_hal_cb.prm.timer);
-    nfc_hal_prm_spd_handle_next_patch_start();
-  } else {
-    HAL_TRACE_ERROR2(
-        "Received unexpected RESET NTF (reset_reason=%i, reset_type=%i)",
-        reset_reason, reset_type);
-  }
-}
-
-/*******************************************************************************
-**
-** Function:    nfc_post_final_baud_update
-**
-** Description: Called after baud rate udate
-**
-** Returns:     Nothing
-**
-*******************************************************************************/
-void nfc_hal_prm_post_baud_update(tHAL_NFC_STATUS status) {
-  NFC_HAL_PRM_STATE("nfc_hal_prm_post_baud_update");
-
-  if (nfc_hal_cb.prm.state == NFC_HAL_PRM_ST_SPD_AUTH_DONE) {
-    /* Proceed with next step of patch download sequence */
-    nfc_hal_prm_nfcc_ready_to_continue();
-  }
-}
-
-/*******************************************************************************
-**
-** Function         nfc_hal_prm_process_timeout
-**
-** Description      Process timer expireation for patch download
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_prm_process_timeout(void* p_tle) {
-  NFC_HAL_PRM_STATE("nfc_hal_prm_process_timeout");
-
-  if (nfc_hal_cb.prm.state == NFC_HAL_PRM_ST_SPD_AUTH_DONE) {
-    if (!(nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_BCM20791B3)) {
-      /* Timeout waiting for RESET NTF after signature sent */
-      HAL_TRACE_ERROR0("Timeout waiting for RESET NTF after patch download");
-      nfc_hal_prm_spd_handle_download_complete(NFC_HAL_PRM_ABORT_EVT);
-    } else {
-      nfc_hal_prm_nfcc_ready_to_continue();
-    }
-  } else if (nfc_hal_cb.prm.state == NFC_HAL_PRM_ST_SPD_GET_PATCH_HEADER) {
-    HAL_TRACE_DEBUG0(
-        "Delay after PreI2C patch download...proceeding to download firmware "
-        "patch");
-    nfc_hal_prm_spd_handle_next_patch_start();
-  } else if (nfc_hal_cb.prm.state == NFC_HAL_PRM_ST_W4_GET_VERSION) {
-    HAL_TRACE_DEBUG0("get patch version timeout???");
-    nfc_hal_prm_spd_handle_download_complete(NFC_HAL_PRM_COMPLETE_EVT);
-  } else {
-    HAL_TRACE_ERROR1("Patch download: command timeout (state=%i)",
-                     nfc_hal_cb.prm.state);
-
-    nfc_hal_prm_spd_handle_download_complete(NFC_HAL_PRM_ABORT_EVT);
-  }
-
-  NFC_HAL_PRM_STATE("nfc_hal_prm_process_timeout");
-}
-
-/*******************************************************************************
-**
-** Function         HAL_NfcPrmDownloadStart
-**
-** Description      Initiate patch download
-**
-** Input Params
-**                  format_type     patch format type
-**                                  (NFC_HAL_PRM_FORMAT_BIN,
-*NFC_HAL_PRM_FORMAT_HCD, or
-**                                   NFC_HAL_PRM_FORMAT_NCD)
-**
-**                  dest_address    destination adderess (needed for BIN format
-*only)
-**
-**                  p_patchram_buf  pointer to patchram buffer. If NULL,
-**                                  then app must call
-*HAL_NfcPrmDownloadContinue when
-**                                  NFC_HAL_PRM_CONTINUE_EVT is received, to
-*send the next
-**                                  segment of patchram
-**
-**                  patchram_len    size of p_patchram_buf (if non-NULL)
-**
-**                  patchram_delay  The delay after each patch.
-**                                  If the given value is less than the size of
-*the patchram,
-**                                  the size of patchram is used instead.
-**
-**                  p_cback         callback for download status
-**
-**
-** Returns          TRUE if successful, otherwise FALSE
-**
-**
-*******************************************************************************/
-bool HAL_NfcPrmDownloadStart(tNFC_HAL_PRM_FORMAT format_type,
-                             uint32_t dest_address, uint8_t* p_patchram_buf,
-                             uint32_t patchram_len, uint32_t patchram_delay,
-                             tNFC_HAL_PRM_CBACK* p_cback) {
-  HAL_TRACE_API0("HAL_NfcPrmDownloadStart ()");
-
-  memset(&nfc_hal_cb.prm, 0, sizeof(tNFC_HAL_PRM_CB));
-
-  if (p_patchram_buf) {
-    nfc_hal_cb.prm.p_cur_patch_data = p_patchram_buf;
-    nfc_hal_cb.prm.cur_patch_offset = 0;
-    nfc_hal_cb.prm.cur_patch_len_remaining = (uint16_t)patchram_len;
-    nfc_hal_cb.prm.flags |= NFC_HAL_PRM_FLAGS_USE_PATCHRAM_BUF;
-
-    if (patchram_len == 0) return false;
-  }
-
-  nfc_hal_cb.prm.p_cback = p_cback;
-  nfc_hal_cb.prm.dest_ram = dest_address;
-  nfc_hal_cb.prm.format = format_type;
-  nfc_hal_cb.prm.patchram_delay = patchram_delay;
-
-  nfc_hal_cb.prm.timer.p_cback = nfc_hal_prm_process_timeout;
-
-  if (format_type == NFC_HAL_PRM_FORMAT_NCD) {
-    /* Store patch buffer pointer and length */
-    nfc_hal_cb.prm.p_spd_patch = p_patchram_buf;
-    nfc_hal_cb.prm.spd_patch_len_remaining = (uint16_t)patchram_len;
-    nfc_hal_cb.prm.spd_patch_offset = 0;
-
-    /* If patch download is required, but no NVM is available, then abort */
-    if ((p_nfc_hal_cfg->nfc_hal_prm_nvm_required) &&
-        (nfc_hal_cb.nvm_cb.flags & NFC_HAL_NVM_FLAGS_NO_NVM)) {
-      HAL_TRACE_ERROR0(
-          "This platform requires NVM and the NVM is not available - Abort");
-      nfc_hal_prm_spd_handle_download_complete(NFC_HAL_PRM_ABORT_NO_NVM_EVT);
-      return false;
-    }
-
-    /* Compare patch version in NVM with version in patchfile */
-    nfc_hal_cb.prm.state = NFC_HAL_PRM_ST_SPD_COMPARE_VERSION;
-    if (nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_USE_PATCHRAM_BUF) {
-      /* If patchfile is in a buffer, get patch version from buffer */
-      nfc_hal_prm_spd_check_version();
-    } else {
-      /* If patchfile is not in a buffer, then request patchfile header from
-       * adaptation layer. */
-      (nfc_hal_cb.prm.p_cback)(NFC_HAL_PRM_SPD_GET_PATCHFILE_HDR_EVT);
-    }
-  } else {
-    HAL_TRACE_ERROR0("Unexpected patch format.");
-    return false;
-  }
-
-  return true;
-}
-
-/*******************************************************************************
-**
-** Function         HAL_NfcPrmDownloadContinue
-**
-** Description      Send next segment of patchram to controller. Called when
-**                  NFC_HAL_PRM_CONTINUE_EVT is received.
-**
-**                  Only needed if HAL_NfcPrmDownloadStart was called with
-**                  p_patchram_buf=NULL
-**
-** Input Params     p_patch_data    pointer to patch data
-**                  patch_data_len  patch data len
-**
-** Returns          TRUE if successful, otherwise FALSE
-**
-*******************************************************************************/
-bool HAL_NfcPrmDownloadContinue(uint8_t* p_patch_data,
-                                uint16_t patch_data_len) {
-  HAL_TRACE_API2("HAL_NfcPrmDownloadContinue ():state = %d, patch_data_len=%d",
-                 nfc_hal_cb.prm.state, patch_data_len);
-
-  /* Check if we are in a valid state for this API */
-  if ((nfc_hal_cb.prm.state != NFC_HAL_PRM_ST_SPD_COMPARE_VERSION) &&
-      (nfc_hal_cb.prm.state != NFC_HAL_PRM_ST_SPD_GET_PATCH_HEADER) &&
-      (nfc_hal_cb.prm.state != NFC_HAL_PRM_ST_SPD_DOWNLOADING))
-    return false;
-
-  if (patch_data_len == 0) return false;
-
-  nfc_hal_cb.prm.cur_patch_offset = 0;
-  nfc_hal_cb.prm.p_cur_patch_data = p_patch_data;
-  nfc_hal_cb.prm.cur_patch_len_remaining = patch_data_len;
-
-  /* Call appropriate handler */
-  if (nfc_hal_cb.prm.state == NFC_HAL_PRM_ST_SPD_COMPARE_VERSION) {
-    nfc_hal_prm_spd_check_version();
-  } else if (nfc_hal_cb.prm.state == NFC_HAL_PRM_ST_SPD_GET_PATCH_HEADER) {
-    nfc_hal_prm_spd_handle_next_patch_start();
-  } else if (nfc_hal_cb.prm.state == NFC_HAL_PRM_ST_SPD_DOWNLOADING) {
-    nfc_hal_prm_spd_send_next_segment();
-  } else {
-    HAL_TRACE_ERROR1("Unexpected patch state:%d.", nfc_hal_cb.prm.state);
-  }
-
-  return true;
-}
-
-/*******************************************************************************
-**
-** Function         HAL_NfcPrmSetI2cPatch
-**
-** Description      Specify patchfile for BCM20791B3 I2C fix. This fix
-**                  must be downloaded prior to initial patch download for I2C
-**                  transport
-**
-** Input Params     p_i2c_patchfile_buf: pointer to patch for i2c fix
-**                  i2c_patchfile_len: length of patch
-**                  prei2c_delay: the delay before downloading main patch
-**                                if 0 is given, NFC_HAL_PRM_POST_I2C_FIX_DELAY
-*is used instead.
-**
-** Returns          Nothing
-**
-**
-*******************************************************************************/
-void HAL_NfcPrmSetI2cPatch(uint8_t* p_i2c_patchfile_buf,
-                           uint16_t i2c_patchfile_len, uint32_t prei2c_delay) {
-#if (NFC_HAL_PRE_I2C_PATCH_INCLUDED == TRUE)
-  HAL_TRACE_API0("HAL_NfcPrmSetI2cPatch ()");
-
-  nfc_hal_cb.prm_i2c.prei2c_delay = NFC_HAL_PRM_POST_I2C_FIX_DELAY;
-  if (prei2c_delay) nfc_hal_cb.prm_i2c.prei2c_delay = prei2c_delay;
-  nfc_hal_cb.prm_i2c.p_patch = p_i2c_patchfile_buf;
-  nfc_hal_cb.prm_i2c.len = i2c_patchfile_len;
-#endif /* NFC_HAL_PRE_I2C_PATCH_INCLUDED */
-}
-
-/*******************************************************************************
-**
-** Function         HAL_NfcPrmSetSpdNciCmdPayloadSize
-**
-** Description      Set Host-to-NFCC NCI message size for secure patch download
-**
-**                  This API must be called before calling
-*HAL_NfcPrmDownloadStart.
-**                  If the API is not called, then PRM will use the default
-**                  message size.
-**
-**                  Typically, this API is only called for platforms that have
-**                  message-size limitations in the transport/driver.
-**
-**                  Valid message size range:
-*NFC_HAL_PRM_MIN_NCI_CMD_PAYLOAD_SIZE to 255.
-**
-** Returns          HAL_NFC_STATUS_OK if successful
-**                  HAL_NFC_STATUS_FAILED otherwise
-**
-**
-*******************************************************************************/
-tHAL_NFC_STATUS HAL_NfcPrmSetSpdNciCmdPayloadSize(uint8_t max_payload_size) {
-  /* Validate: minimum size is NFC_HAL_PRM_MIN_NCI_CMD_PAYLOAD_SIZE */
-  if (max_payload_size < NFC_HAL_PRM_MIN_NCI_CMD_PAYLOAD_SIZE) {
-    HAL_TRACE_ERROR2(
-        "HAL_NfcPrmSetSpdNciCmdPayloadSize: invalid size (%i). Must be between "
-        "%i and 255",
-        max_payload_size, NFC_HAL_PRM_MIN_NCI_CMD_PAYLOAD_SIZE);
-    return (HAL_NFC_STATUS_FAILED);
-  } else {
-    HAL_TRACE_API1(
-        "HAL_NfcPrmSetSpdNciCmdPayloadSize: new message size during download: "
-        "%i",
-        max_payload_size);
-    nfc_hal_cb.ncit_cb.nci_ctrl_size = max_payload_size;
-    return (HAL_NFC_STATUS_OK);
-  }
-}
diff --git a/halimpl/bcm2079x/include/HalAdaptation.h b/halimpl/bcm2079x/include/HalAdaptation.h
deleted file mode 100644
index a6e3bd1..0000000
--- a/halimpl/bcm2079x/include/HalAdaptation.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  HAL Adaptation Interface (HAI). This interface regulates the interaction
- *  between standard Android HAL and Broadcom-specific HAL.  It adapts
- *  Broadcom-specific features to the Android framework.
- *
- ******************************************************************************/
-#pragma once
-#include <hardware/hardware.h>
-#include <hardware/nfc.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct {
-  struct nfc_nci_device nci_device;
-  // below declarations are private variables within Broadcom HAL
-  void* data;
-} bcm2079x_dev_t;
-
-/*
-All functions return POSIX error codes (see errno):
-  0 means success.
-  non-zero means failure; for example EACCES.
-*/
-
-extern int HaiInitializeLibrary(const bcm2079x_dev_t* device);
-extern int HaiTerminateLibrary();
-extern int HaiOpen(const bcm2079x_dev_t* device,
-                   nfc_stack_callback_t* halCallbackFunc,
-                   nfc_stack_data_callback_t* halDataCallbackFunc);
-extern int HaiClose(const bcm2079x_dev_t* device);
-extern int HaiCoreInitialized(const bcm2079x_dev_t* device,
-                              uint8_t* coreInitResponseParams);
-extern int HaiWrite(const bcm2079x_dev_t* dev, uint16_t dataLen,
-                    const uint8_t* data);
-extern int HaiPreDiscover(const bcm2079x_dev_t* device);
-extern int HaiControlGranted(const bcm2079x_dev_t* device);
-extern int HaiPowerCycle(const bcm2079x_dev_t* device);
-extern int HaiGetMaxNfcee(const bcm2079x_dev_t* device, uint8_t* maxNfcee);
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/halimpl/bcm2079x/include/StartupConfig.h b/halimpl/bcm2079x/include/StartupConfig.h
deleted file mode 100644
index 1dbb5c3..0000000
--- a/halimpl/bcm2079x/include/StartupConfig.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 1999-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- * Construct a buffer that contains multiple Type-Length-Value contents
- * that is used by the HAL in a CORE_SET_CONFIG NCI command.
- ******************************************************************************/
-
-#pragma once
-#include <string>
-#include "bt_types.h"
-
-class StartupConfig {
- public:
-  typedef std::basic_string<uint8_t> uint8_string;
-  StartupConfig();
-
-  /*******************************************************************************
-  **
-  ** Function:        initialize
-  **
-  ** Description:     Reset all member variables.
-  **
-  ** Returns:         None
-  **
-  *******************************************************************************/
-  void initialize();
-
-  /*******************************************************************************
-  **
-  ** Function:        getInternalBuffer
-  **
-  ** Description:     Get the pointer to buffer that contains multiple
-  **                  Type-Length-Value contents.
-  **
-  ** Returns:         Pointer to buffer.
-  **
-  *******************************************************************************/
-  const uint8_t* getInternalBuffer();
-
-  /*******************************************************************************
-  **
-  ** Function:        append
-  **
-  ** Description:     Append new config data to internal buffer.
-  **                  newContent: buffer containing new content; newContent[0]
-  *is
-  **                          payload length; newContent[1..end] is payload.
-  **                  newContentLen: total length of newContent.
-  **
-  ** Returns:         True if ok.
-  **
-  *******************************************************************************/
-  bool append(const uint8_t* newContent, uint8_t newContentLen);
-
-  /*******************************************************************************
-  **
-  ** Function:        disableSecureElement
-  **
-  ** Description:     Adjust a TLV to disable secure element(s).  The TLV's type
-  *is 0xC2.
-  **                  bitmask: 0xC0 = do not detect any secure element.
-  **                           0x40 = do not detect secure element in slot 0.
-  **                           0x80 = do not detect secure element in slot 1.
-  **
-  ** Returns:         True if ok.
-  **
-  *******************************************************************************/
-  bool disableSecureElement(uint8_t bitmask);
-
- private:
-  static const uint8_t mMaxLength;
-  uint8_string mBuffer;
-};
diff --git a/halimpl/bcm2079x/include/_OverrideLog.h b/halimpl/bcm2079x/include/_OverrideLog.h
deleted file mode 100644
index 7f9a65f..0000000
--- a/halimpl/bcm2079x/include/_OverrideLog.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  Override the Android logging macro(s) from
- *  /system/core/include/cutils/log.h. This header must be the first header
- *  included by a *.cpp file so the original Android macro can be replaced.
- *  Do not include this header in another header, because that will create
- *  unnecessary dependency.
- *
- ******************************************************************************/
-#pragma once
-
-// Override Android's ALOGD macro by adding a boolean expression.
-#define ALOGD(...) \
-  ((void)ALOGD_IF(appl_trace_level >= BT_TRACE_LEVEL_DEBUG, __VA_ARGS__))
-
-#include <cutils/log.h>  //define Android logging macros
-#include "bt_types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern unsigned char appl_trace_level;
-extern uint32_t ScrProtocolTraceFlag;
-
-/*******************************************************************************
-**
-** Function:        InitializeGlobalAppLogLevel
-**
-** Description:     Initialize and get global logging level from .conf or
-**                  Android property nfc.app_log_level.  The Android property
-**                  overrides .conf variable.
-**
-** Returns:         Global log level:
-**                  BT_TRACE_LEVEL_NONE    0        * No trace messages to be
-*generated
-**                  BT_TRACE_LEVEL_ERROR   1        * Error condition trace
-*messages
-**                  BT_TRACE_LEVEL_WARNING 2        * Warning condition trace
-*messages
-**                  BT_TRACE_LEVEL_API     3        * API traces
-**                  BT_TRACE_LEVEL_EVENT   4        * Debug messages for events
-**                  BT_TRACE_LEVEL_DEBUG   5        * Debug messages (general)
-**
-*******************************************************************************/
-unsigned char InitializeGlobalAppLogLevel();
-uint32_t InitializeProtocolLogLevel();
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/halimpl/bcm2079x/include/android_logmsg.h b/halimpl/bcm2079x/include/android_logmsg.h
deleted file mode 100644
index 4dfccbc..0000000
--- a/halimpl/bcm2079x/include/android_logmsg.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2011-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-/******************************************************************************
- * Decode NFC packets and print them to ADB log.
- * If protocol decoder is not present, then decode packets into hex numbers.
- ******************************************************************************/
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "data_types.h"
-#include "nfc_types.h"
-
-#define DISP_NCI ProtoDispAdapterDisplayNciPacket
-void ProtoDispAdapterDisplayNciPacket(uint8_t* nciPacket, uint16_t nciPacketLen,
-                                      bool is_recv);
-void ProtoDispAdapterUseRawOutput(bool isUseRaw);
-void ScrLog(uint32_t trace_set_mask, const char* fmt_str, ...);
-void LogMsg(uint32_t trace_set_mask, const char* fmt_str, ...);
-void LogMsg_0(uint32_t trace_set_mask, const char* p_str);
-void LogMsg_1(uint32_t trace_set_mask, const char* fmt_str, uintptr_t p1);
-void LogMsg_2(uint32_t trace_set_mask, const char* fmt_str, uintptr_t p1,
-              uintptr_t p2);
-void LogMsg_3(uint32_t trace_set_mask, const char* fmt_str, uintptr_t p1,
-              uintptr_t p2, uintptr_t p3);
-void LogMsg_4(uint32_t trace_set_mask, const char* fmt_str, uintptr_t p1,
-              uintptr_t p2, uintptr_t p3, uintptr_t p4);
-void LogMsg_5(uint32_t trace_set_mask, const char* fmt_str, uintptr_t p1,
-              uintptr_t p2, uintptr_t p3, uintptr_t p4, uintptr_t p5);
-void LogMsg_6(uint32_t trace_set_mask, const char* fmt_str, uintptr_t p1,
-              uintptr_t p2, uintptr_t p3, uintptr_t p4, uintptr_t p5,
-              uintptr_t p6);
-uint8_t* scru_dump_hex(uint8_t* p, char* pTitle, uint32_t len, uint32_t layer,
-                       uint32_t type);
-void BTDISP_LOCK_LOG();
-void BTDISP_UNLOCK_LOG();
-void BTDISP_INIT_LOCK();
-void BTDISP_UNINIT_LOCK();
-void DispHciCmd(NFC_HDR* p_buf);
-void DispHciEvt(NFC_HDR* p_buf);
-void DispLLCP(NFC_HDR* p_buf, bool is_recv);
-void DispHcp(uint8_t* data, uint16_t len, bool is_recv);
-void DispSNEP(uint8_t local_sap, uint8_t remote_sap, NFC_HDR* p_buf,
-              bool is_first, bool is_rx);
-void DispCHO(uint8_t* pMsg, uint32_t MsgLen, bool is_rx);
-void DispT3TagMessage(NFC_HDR* p_msg, bool is_rx);
-void DispRWT4Tags(NFC_HDR* p_buf, bool is_rx);
-void DispCET4Tags(NFC_HDR* p_buf, bool is_rx);
-void DispRWI93Tag(NFC_HDR* p_buf, bool is_rx, uint8_t command_to_respond);
-void DispNDEFMsg(uint8_t* pMsg, uint32_t MsgLen, bool is_recv);
-
-#ifdef __cplusplus
-};
-#endif
diff --git a/halimpl/bcm2079x/include/bcm2079x.h b/halimpl/bcm2079x/include/bcm2079x.h
deleted file mode 100644
index 5f45224..0000000
--- a/halimpl/bcm2079x/include/bcm2079x.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-#ifndef _BCM2079X_H
-#define _BCM2079X_H
-
-#define BCMNFC_MAGIC 0xFA
-
-/*
- * BCMNFC power control via ioctl
- * BCMNFC_POWER_CTL(0): power off
- * BCMNFC_POWER_CTL(1): power on
- * BCMNFC_WAKE_CTL(0): wake off
- * BCMNFC_WAKE_CTL(1): wake on
- */
-#define BCMNFC_POWER_CTL _IO(BCMNFC_MAGIC, 0x01)
-#define BCMNFC_CHANGE_ADDR _IO(BCMNFC_MAGIC, 0x02)
-#define BCMNFC_READ_FULL_PACKET _IO(BCMNFC_MAGIC, 0x03)
-#define BCMNFC_SET_WAKE_ACTIVE_STATE _IO(BCMNFC_MAGIC, 0x04)
-#define BCMNFC_WAKE_CTL _IO(BCMNFC_MAGIC, 0x05)
-#define BCMNFC_READ_MULTI_PACKETS _IO(BCMNFC_MAGIC, 0x06)
-#define BCMNFC_SET_CLIENT_ADDR _IO(BCMNFC_MAGIC, 0x07)
-
-struct bcm2079x_platform_data {
-  unsigned int irq_gpio;
-  unsigned int en_gpio;
-  int wake_gpio;
-};
-
-#endif
diff --git a/halimpl/bcm2079x/include/buildcfg.h b/halimpl/bcm2079x/include/buildcfg.h
deleted file mode 100644
index d2e743d..0000000
--- a/halimpl/bcm2079x/include/buildcfg.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 1999-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-#pragma once
-#include <memory.h>
-#include <stdio.h>
-#include <string.h>
-#include "data_types.h"
-
-#define BTE_APPL_MAX_USERIAL_DEV_NAME (256)
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern uint8_t* scru_dump_hex(uint8_t* p, char* p_title, uint32_t len,
-                              uint32_t trace_layer, uint32_t trace_type);
-void DispNci(uint8_t* p, uint16_t len, bool is_recv);
-void ProtoDispAdapterDisplayNciPacket(uint8_t* nciPacket, uint16_t nciPacketLen,
-                                      bool is_recv);
-#define DISP_NCI ProtoDispAdapterDisplayNciPacket
-#define LOGMSG_TAG_NAME "NfcNciHal"
-
-#ifdef __cplusplus
-};
-#endif
diff --git a/halimpl/bcm2079x/include/buildcfg_hal.h b/halimpl/bcm2079x/include/buildcfg_hal.h
deleted file mode 100644
index 0908226..0000000
--- a/halimpl/bcm2079x/include/buildcfg_hal.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2001-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-// override any HAL-specific macros
-#pragma once
-
-#include "bt_types.h"
-
-// NFC_HAL_TASK=0 is already defined in gki_hal_target.h; it executes the
-// Broadcom HAL
-#define USERIAL_HAL_TASK 1     // execute userial's read thread
-#define GKI_RUNNER_HAL_TASK 2  // execute GKI_run(), which runs forever
-#define GKI_MAX_TASKS 3        // total of 3 tasks
-
-#define GKI_BUF0_MAX 16
-#define GKI_BUF1_MAX 16
-
-#define NFC_HAL_PRM_POST_I2C_FIX_DELAY (500)
diff --git a/halimpl/bcm2079x/include/gki_target.h b/halimpl/bcm2079x/include/gki_target.h
deleted file mode 100644
index afb4f78..0000000
--- a/halimpl/bcm2079x/include/gki_target.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2001-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-#pragma once
-#include "gki_hal_target.h"
diff --git a/halimpl/bcm2079x/include/spdhelper.h b/halimpl/bcm2079x/include/spdhelper.h
deleted file mode 100644
index 8eea553..0000000
--- a/halimpl/bcm2079x/include/spdhelper.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-#pragma once
-
-#include <string>
-
-using namespace std;
-#define DEFAULT_SPD_MAXRETRYCOUNT (3)
-
-class SpdHelper {
- public:
-  static bool isPatchBad(uint8_t* prm, uint32_t len);
-  static void setPatchAsBad();
-  static void incErrorCount();
-  static bool isSpdDebug();
-
- private:
-  SpdHelper();
-  static SpdHelper& getInstance();
-
-  bool isPatchBadImpl(uint8_t* prm, uint32_t len);
-  void setPatchAsBadImpl();
-  void incErrorCountImpl();
-  bool isSpdDebugImpl() { return mSpdDebug; }
-  string mPatchId;
-  int mErrorCount;
-  int mMaxErrorCount;
-  bool mIsPatchBad;
-  bool mSpdDebug;
-};
diff --git a/halimpl/bcm2079x/include/userial.h b/halimpl/bcm2079x/include/userial.h
deleted file mode 100644
index ab845d8..0000000
--- a/halimpl/bcm2079x/include/userial.h
+++ /dev/null
@@ -1,281 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2001-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  This file contains serial definitions from WIDCOMM's Universal Embedded
- *  Drivers API.
- *
- ******************************************************************************/
-
-#ifndef USERIAL_H
-#define USERIAL_H
-
-/*******************************************************************************
-** Serial APIs
-*******************************************************************************/
-
-/**** port IDs ****/
-#define USERIAL_PORT_1 0
-#define USERIAL_PORT_2 1
-#define USERIAL_PORT_3 2
-#define USERIAL_PORT_4 3
-#define USERIAL_PORT_5 4
-#define USERIAL_PORT_6 5
-#define USERIAL_PORT_7 6
-#define USERIAL_PORT_8 7
-#define USERIAL_PORT_9 8
-#define USERIAL_PORT_10 9
-#define USERIAL_PORT_11 10
-#define USERIAL_PORT_12 11
-#define USERIAL_PORT_13 12
-#define USERIAL_PORT_14 13
-#define USERIAL_PORT_15 14
-#define USERIAL_PORT_16 15
-#define USERIAL_PORT_17 16
-#define USERIAL_PORT_18 17
-
-typedef uint8_t tUSERIAL_PORT;
-
-/**** baud rates ****/
-#define USERIAL_BAUD_300 0
-#define USERIAL_BAUD_600 1
-#define USERIAL_BAUD_1200 2
-#define USERIAL_BAUD_2400 3
-#define USERIAL_BAUD_9600 4
-#define USERIAL_BAUD_19200 5
-#define USERIAL_BAUD_57600 6
-#define USERIAL_BAUD_115200 7
-#define USERIAL_BAUD_230400 8
-#define USERIAL_BAUD_460800 9
-#define USERIAL_BAUD_921600 10
-#define USERIAL_BAUD_1M 11
-#define USERIAL_BAUD_1_5M 12
-#define USERIAL_BAUD_2M 13
-#define USERIAL_BAUD_3M 14
-#define USERIAL_BAUD_4M 15
-#define USERIAL_BAUD_AUTO 16
-
-/**** Data Format ****/
-
-/* Stop Bits */
-#define USERIAL_STOPBITS_1 1
-#define USERIAL_STOPBITS_1_5 (1 << 1)
-#define USERIAL_STOPBITS_2 (1 << 2)
-
-/* Parity Bits */
-#define USERIAL_PARITY_NONE (1 << 3)
-#define USERIAL_PARITY_EVEN (1 << 4)
-#define USERIAL_PARITY_ODD (1 << 5)
-
-/* Data Bits */
-#define USERIAL_DATABITS_5 (1 << 6)
-#define USERIAL_DATABITS_6 (1 << 7)
-#define USERIAL_DATABITS_7 (1 << 8)
-#define USERIAL_DATABITS_8 (1 << 9)
-
-/**** Flow Control ****/
-#define USERIAL_FC_NONE 0
-#define USERIAL_FC_HW 1
-#define USERIAL_FC_SW 2
-
-/**** Data Buffering Mechanism ****/
-#define USERIAL_BUF_BYTE 0
-#define USERIAL_BUF_GKI 1
-
-/**** Signals ****/
-#define USERIAL_SIG_RTSCTS 1
-#define USERIAL_SIG_DSRDTR (1 << 1)
-#define USERIAL_SIG_RI (1 << 2)
-#define USERIAL_SIG_CD (1 << 3)
-#define USERIAL_SIG_DTE_DEVICE (1 << 4)
-
-/**** Errors *****/
-#define USERIAL_ERR_OVERRUN 1
-#define USERIAL_ERR_PARITY (1 << 1)
-#define USERIAL_ERR_FRAMING (1 << 2)
-#define USERIAL_ERR_BREAK (1 << 3)
-
-/**** Serial Operations ****/
-#define USERIAL_OP_FLUSH 0
-#define USERIAL_OP_FLUSH_RX 1
-#define USERIAL_OP_FLUSH_TX 2
-#define USERIAL_OP_BREAK_OFF 3
-#define USERIAL_OP_BREAK_ON 4
-#define USERIAL_OP_BAUD_RD 5
-#define USERIAL_OP_BAUD_WR 6
-#define USERIAL_OP_FMT_RD 7
-#define USERIAL_OP_FMT_WR 8
-#define USERIAL_OP_SIG_RD 9
-#define USERIAL_OP_SIG_WR 10
-#define USERIAL_OP_FC_RD 11
-#define USERIAL_OP_FC_WR 12
-#define USERIAL_OP_CTS_AS_WAKEUP 13 /* H4IBSS */
-#define USERIAL_OP_CTS_AS_FC 14     /* H4IBSS */
-
-#if (defined(LINUX_OS) && LINUX_OS == TRUE)
-#define USERIAL_OP_SCO_UP 20   /* LINUX SCO */
-#define USERIAL_OP_SCO_DOWN 21 /* LINUX SCO */
-#endif
-
-typedef uint8_t tUSERIAL_OP;
-
-/**** Serial feature types ****/
-#define USERIAL_FEAT_PORT_1 0
-#define USERIAL_FEAT_PORT_2 1
-#define USERIAL_FEAT_PORT_3 2
-#define USERIAL_FEAT_PORT_4 3
-#define USERIAL_FEAT_BAUD_AUTO 4
-#define USERIAL_FEAT_BAUD_300 5
-#define USERIAL_FEAT_BAUD_600 6
-#define USERIAL_FEAT_BAUD_1200 7
-#define USERIAL_FEAT_BAUD_2400 8
-#define USERIAL_FEAT_BAUD_9600 9
-#define USERIAL_FEAT_BAUD_19200 10
-#define USERIAL_FEAT_BAUD_57600 11
-#define USERIAL_FEAT_BAUD_115200 12
-#define USERIAL_FEAT_BAUD_230400 13
-#define USERIAL_FEAT_BAUD_460800 14
-#define USERIAL_FEAT_BAUD_921600 15
-#define USERIAL_FEAT_STOPBITS_1 16
-#define USERIAL_FEAT_STOPBITS_1_5 17
-#define USERIAL_FEAT_STOPBITS_2 18
-#define USERIAL_FEAT_PARITY_NONE 19
-#define USERIAL_FEAT_PARITY_EVEN 20
-#define USERIAL_FEAT_PARITY_ODD 21
-#define USERIAL_FEAT_DATABITS_5 22
-#define USERIAL_FEAT_DATABITS_6 23
-#define USERIAL_FEAT_DATABITS_7 24
-#define USERIAL_FEAT_DATABITS_8 25
-#define USERIAL_FEAT_FC_NONE 26
-#define USERIAL_FEAT_FC_HW 27
-#define USERIAL_FEAT_FC_SW 28
-#define USERIAL_FEAT_BUF_BYTE 29
-#define USERIAL_FEAT_BUF_GKI 30
-#define USERIAL_FEAT_SIG_RTS 31
-#define USERIAL_FEAT_SIG_CTS 32
-#define USERIAL_FEAT_SIG_DSR 33
-#define USERIAL_FEAT_SIG_DTR 34
-#define USERIAL_FEAT_SIG_RI 35
-#define USERIAL_FEAT_SIG_CD 36
-#define USERIAL_FEAT_OP_FLUSH 37
-#define USERIAL_FEAT_OP_FLUSH_RX 38
-#define USERIAL_FEAT_OP_FLUSH_TX 39
-#define USERIAL_FEAT_OP_BREAK 40
-#define USERIAL_FEAT_OP_BAUD_RD 41
-#define USERIAL_FEAT_OP_BAUD_WR 42
-#define USERIAL_FEAT_OP_FMT_RD 43
-#define USERIAL_FEAT_OP_FMT_WR 44
-#define USERIAL_FEAT_OP_SIG_RD 45
-#define USERIAL_FEAT_OP_SIG_WR 46
-#define USERIAL_FEAT_OP_FC_RD 47
-#define USERIAL_FEAT_OP_FC_WR 48
-
-typedef uint8_t tUSERIAL_FEATURE;
-
-/**** Event types ****/
-#define USERIAL_RX_READY_EVT 0
-#define USERIAL_TX_DONE_EVT 1
-#define USERIAL_SIG_EVT 2
-#define USERIAL_ERR_EVT 3
-#define USERIAL_WAKEUP_EVT 4 /* H4IBSS */
-
-typedef uint8_t tUSERIAL_EVT;
-
-/* Structure used to configure serial port during open        */
-typedef struct {
-  uint16_t fmt;    /* Data format                       */
-  uint8_t baud;    /* Baud rate                         */
-  uint8_t fc;      /* Flow control                      */
-  uint8_t buf;     /* Data buffering mechanism          */
-  uint8_t pool;    /* GKI buffer pool for received data */
-  uint16_t size;   /* Size of GKI buffer pool           */
-  uint16_t offset; /* Offset in GKI buffer pool         */
-} tUSERIAL_OPEN_CFG;
-
-/* Union used to pass ioctl arguments */
-typedef union {
-  uint16_t fmt;
-  uint8_t baud;
-  uint8_t fc;
-  uint8_t sigs;
-#if (defined(LINUX_OS) && LINUX_OS == TRUE)
-  uint16_t sco_handle;
-#endif
-} tUSERIAL_IOCTL_DATA;
-
-/* Union to pass event data */
-typedef union {
-  uint8_t sigs;
-  uint8_t error;
-} tUSERIAL_EVT_DATA;
-
-/* callback for events */
-typedef void(tUSERIAL_CBACK)(tUSERIAL_PORT, tUSERIAL_EVT, tUSERIAL_EVT_DATA*);
-
-/*******************************************************************************
-** Function Prototypes
-*******************************************************************************/
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern void USERIAL_Init(void*);
-extern void USERIAL_Open(tUSERIAL_PORT, tUSERIAL_OPEN_CFG*, tUSERIAL_CBACK*);
-extern void USERIAL_ReadBuf(tUSERIAL_PORT, NFC_HDR**);
-extern uint16_t USERIAL_Read(tUSERIAL_PORT, uint8_t*, uint16_t);
-extern bool USERIAL_WriteBuf(tUSERIAL_PORT, NFC_HDR*);
-extern uint16_t USERIAL_Write(tUSERIAL_PORT, uint8_t*, uint16_t);
-extern void USERIAL_Ioctl(tUSERIAL_PORT, tUSERIAL_OP, tUSERIAL_IOCTL_DATA*);
-extern void USERIAL_Close(tUSERIAL_PORT);
-extern bool USERIAL_Feature(tUSERIAL_FEATURE);
-extern bool USERIAL_IsClosed();
-extern void USERIAL_SetPowerOffDelays(int, int);
-extern void USERIAL_PowerupDevice(tUSERIAL_PORT port);
-
-/*******************************************************************************
- **
- ** Function           USERIAL_GetLineSpeed
- **
- ** Description        This function convert USERIAL baud to line speed.
- **
- ** Output Parameter   None
- **
- ** Returns            line speed
- **
- *******************************************************************************/
-extern uint32_t USERIAL_GetLineSpeed(uint8_t baud);
-/*******************************************************************************
- **
- ** Function           USERIAL_GetBaud
- **
- ** Description        This function convert line speed to USERIAL baud.
- **
- ** Output Parameter   None
- **
- ** Returns            line speed
- **
- *******************************************************************************/
-extern uint8_t USERIAL_GetBaud(uint32_t line_speed);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* USERIAL_H */
diff --git a/halimpl/bcm2079x/nfc_nci.c b/halimpl/bcm2079x/nfc_nci.c
deleted file mode 100644
index 6948fb6..0000000
--- a/halimpl/bcm2079x/nfc_nci.c
+++ /dev/null
@@ -1,163 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 1999-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-#define LOG_TAG "NfcNciHal"
-#include <errno.h>
-#include <hardware/hardware.h>
-#include <hardware/nfc.h>
-#include <malloc.h>
-#include <string.h>
-#include "HalAdaptation.h"
-#include "_OverrideLog.h"
-
-/*********************************
- * NCI HAL method implementations.
- *********************************/
-
-static int hal_open(const struct nfc_nci_device* p_dev,
-                    nfc_stack_callback_t* p_hal_cback,
-                    nfc_stack_data_callback_t* p_hal_data_callback) {
-  int retval = 0;
-  bcm2079x_dev_t* dev = (bcm2079x_dev_t*)p_dev;
-
-  retval = HaiOpen(dev, p_hal_cback, p_hal_data_callback);
-  return retval;
-}
-
-static int hal_write(const struct nfc_nci_device* p_dev, uint16_t data_len,
-                     const uint8_t* p_data) {
-  int retval = 0;
-  bcm2079x_dev_t* dev = (bcm2079x_dev_t*)p_dev;
-
-  retval = HaiWrite(dev, data_len, p_data);
-  return retval;
-}
-
-static int hal_core_initialized(const struct nfc_nci_device* p_dev,
-                                uint8_t* p_core_init_rsp_params) {
-  int retval = 0;
-  bcm2079x_dev_t* dev = (bcm2079x_dev_t*)p_dev;
-
-  retval = HaiCoreInitialized(dev, p_core_init_rsp_params);
-  return retval;
-}
-
-static int hal_pre_discover(const struct nfc_nci_device* p_dev) {
-  int retval = 0;
-  bcm2079x_dev_t* dev = (bcm2079x_dev_t*)p_dev;
-
-  retval = HaiPreDiscover(dev);
-  return retval;
-}
-
-static int hal_close(const struct nfc_nci_device* p_dev) {
-  int retval = 0;
-  bcm2079x_dev_t* dev = (bcm2079x_dev_t*)p_dev;
-
-  retval = HaiClose(dev);
-  return retval;
-}
-
-static int hal_control_granted(const struct nfc_nci_device* p_dev) {
-  int retval = 0;
-  bcm2079x_dev_t* dev = (bcm2079x_dev_t*)p_dev;
-
-  retval = HaiControlGranted(dev);
-  return retval;
-}
-
-static int hal_power_cycle(const struct nfc_nci_device* p_dev) {
-  int retval = 0;
-  bcm2079x_dev_t* dev = (bcm2079x_dev_t*)p_dev;
-
-  retval = HaiPowerCycle(dev);
-  return retval;
-}
-
-static int hal_get_max_nfcee(const struct nfc_nci_device* p_dev,
-                             uint8_t* maxNfcee) {
-  int retval = 0;
-  bcm2079x_dev_t* dev = (bcm2079x_dev_t*)p_dev;
-
-  retval = HaiGetMaxNfcee(dev, maxNfcee);
-  return retval;
-}
-
-/*************************************
- * Generic device handling.
- *************************************/
-
-/* Close an opened nfc device instance */
-static int nfc_close(hw_device_t* dev) {
-  int retval = 0;
-  free(dev);
-  retval = HaiTerminateLibrary();
-  return retval;
-}
-
-static int nfc_open(const hw_module_t* module, const char* name,
-                    hw_device_t** device) {
-  ALOGD("%s: enter; name=%s", __func__, name);
-  int retval = 0;  // 0 is ok; -1 is error
-
-  if (strcmp(name, NFC_NCI_CONTROLLER) == 0) {
-    bcm2079x_dev_t* dev = calloc(1, sizeof(bcm2079x_dev_t));
-
-    // Common hw_device_t fields
-    dev->nci_device.common.tag = HARDWARE_DEVICE_TAG;
-    dev->nci_device.common.version = 0x00010000;  // [31:16] major, [15:0] minor
-    dev->nci_device.common.module = (struct hw_module_t*)module;
-    dev->nci_device.common.close = nfc_close;
-
-    // NCI HAL method pointers
-    dev->nci_device.open = hal_open;
-    dev->nci_device.write = hal_write;
-    dev->nci_device.core_initialized = hal_core_initialized;
-    dev->nci_device.pre_discover = hal_pre_discover;
-    dev->nci_device.close = hal_close;
-    dev->nci_device.control_granted = hal_control_granted;
-    dev->nci_device.power_cycle = hal_power_cycle;
-    // dev->nci_device.get_max_ee = hal_get_max_nfcee;
-
-    // Copy in
-    *device = (hw_device_t*)dev;
-
-    retval = HaiInitializeLibrary(dev);
-  } else {
-    retval = -EINVAL;
-  }
-  ALOGD("%s: exit %d", __func__, retval);
-  return retval;
-}
-
-static struct hw_module_methods_t nfc_module_methods = {
-    .open = nfc_open,
-};
-
-struct nfc_nci_module_t HAL_MODULE_INFO_SYM = {
-    .common =
-        {
-            .tag = HARDWARE_MODULE_TAG,
-            .module_api_version = 0x0100,  // [15:8] major, [7:0] minor (1.0)
-            .hal_api_version = 0x00,       // 0 is only valid value
-            .id = NFC_NCI_BCM2079X_HARDWARE_MODULE_ID,
-            .name = "BCM2079x NFC NCI HW HAL",
-            .author = "Broadcom Corporation",
-            .methods = &nfc_module_methods,
-        },
-};
diff --git a/halimpl/pn54x/Android.bp b/halimpl/pn54x/Android.bp
deleted file mode 100644
index e69de29..0000000
--- a/halimpl/pn54x/Android.bp
+++ /dev/null
diff --git a/halimpl/pn54x/Android.mk b/halimpl/pn54x/Android.mk
deleted file mode 100644
index c5a0030..0000000
--- a/halimpl/pn54x/Android.mk
+++ /dev/null
@@ -1,88 +0,0 @@
-# Copyright (C) 2011 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-#variables for NFC_NXP_CHIP_TYPE
-PN547C2 := 1
-PN548C2 := 2
-PN551   := 3
-PN553   := 4
-NQ110 := $PN547C2
-NQ120 := $PN547C2
-NQ210 := $PN548C2
-NQ220 := $PN548C2
-#NXP PN547 Enable
-ifeq ($(PN547C2),1)
-D_CFLAGS += -DPN547C2=1
-endif
-ifeq ($(PN548C2),2)
-D_CFLAGS += -DPN548C2=2
-endif
-ifeq ($(PN551),3)
-D_CFLAGS += -DPN551=3
-endif
-ifeq ($(PN553),4)
-D_CFLAGS += -DPN553=4
-endif
-
-ifeq ($(NXP_CHIP_TYPE),$(PN547C2))
-D_CFLAGS += -DNFC_NXP_CHIP_TYPE=PN547C2
-else ifeq ($(NXP_CHIP_TYPE),$(PN548C2))
-D_CFLAGS += -DNFC_NXP_CHIP_TYPE=PN548C2
-else ifeq ($(NXP_CHIP_TYPE),$(PN551))
-D_CFLAGS += -DNFC_NXP_CHIP_TYPE=PN551
-else ifeq ($(NXP_CHIP_TYPE),$(PN553))
-D_CFLAGS += -DNFC_NXP_CHIP_TYPE=PN553
-else
-D_CFLAGS += -DNFC_NXP_CHIP_TYPE=PN553
-endif
-
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-LOCAL_MODULE := nfc_nci.$(TARGET_DEVICE)
-LOCAL_PROPRIETARY_MODULE := true
-LOCAL_MODULE_RELATIVE_PATH := hw
-LOCAL_SRC_FILES := \
-    $(call all-c-files-under, common) \
-    $(call all-c-files-under, dnld) \
-    $(call all-c-files-under, hal) \
-    $(call all-c-files-under, log) \
-    $(call all-c-files-under, self-test) \
-    $(call all-c-files-under, tml) \
-    $(call all-c-files-under, utils) \
-    $(call all-cpp-files-under, utils) \
-    nfc_nci.c
-
-LOCAL_SHARED_LIBRARIES := liblog libcutils libdl libhardware
-
-LOCAL_CFLAGS := $(D_CFLAGS)
-LOCAL_C_INCLUDES += \
-    $(LOCAL_PATH)/utils \
-    $(LOCAL_PATH)/inc \
-    $(LOCAL_PATH)/common \
-    $(LOCAL_PATH)/dnld \
-    $(LOCAL_PATH)/hal \
-    $(LOCAL_PATH)/log \
-    $(LOCAL_PATH)/tml \
-    $(LOCAL_PATH)/self-test \
-
-LOCAL_CFLAGS += -DANDROID \
-        -DNXP_UICC_ENABLE -DNXP_HW_SELF_TEST
-LOCAL_CFLAGS += -DNFC_NXP_HFO_SETTINGS=FALSE
-#LOCAL_CFLAGS += -DFELICA_CLT_ENABLE
-
-
-#
-# nfc_nci.$(TARGET_DEVICE)
-#
-include $(BUILD_SHARED_LIBRARY)
diff --git a/halimpl/pn54x/common/phNfcCommon.h b/halimpl/pn54x/common/phNfcCommon.h
deleted file mode 100644
index 638a133..0000000
--- a/halimpl/pn54x/common/phNfcCommon.h
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (C) 2010-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- *  OSAL header files related to memory, debug, random, semaphore and mutex
- * functions.
- */
-
-#ifndef PHNFCCOMMON_H
-#define PHNFCCOMMON_H
-
-/*
-************************* Include Files ****************************************
-*/
-
-#include <phDal4Nfc_messageQueueLib.h>
-#include <phNfcCompId.h>
-#include <phNfcStatus.h>
-#include <phOsalNfc_Timer.h>
-#include <pthread.h>
-#include <semaphore.h>
-
-#define FW_DLL_ROOT_DIR "/system/vendor/firmware/"
-#define FW_DLL_EXTENSION ".so"
-
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-
-/* Actual FW library name*/
-#define FW_LIB_PATH FW_DLL_ROOT_DIR "libpn548ad_fw" FW_DLL_EXTENSION
-/* Restore Corrupted PLL Setttings/etc */
-#define PLATFORM_LIB_PATH \
-  FW_DLL_ROOT_DIR "libpn548ad_fw_platform" FW_DLL_EXTENSION
-/* Upgrade the public Key */
-#define PKU_LIB_PATH FW_DLL_ROOT_DIR "libpn548ad_fw_pku" FW_DLL_EXTENSION
-#elif (NFC_NXP_CHIP_TYPE == PN551)
-/* Actual FW library name*/
-#define FW_LIB_PATH FLASH_CONF_ROOT_DIR "libpn551_fw" FW_DLL_EXTENSION
-/* Restore Corrupted PLL Settings/etc */
-#define PLATFORM_LIB_PATH \
-  FW_DLL_ROOT_DIR "libpn551_fw_platform" FW_DLL_EXTENSION
-/* Upgrade the public Key */
-#define PKU_LIB_PATH FW_DLL_ROOT_DIR "libpn551_fw_pku" FW_DLL_EXTENSION
-#elif (NFC_NXP_CHIP_TYPE == PN553)
-/* Actual FW library name*/
-#define FW_LIB_PATH FLASH_CONF_ROOT_DIR "libpn553_fw" FW_DLL_EXTENSION
-/* Restore Corrupted PLL Settings/etc */
-#define PLATFORM_LIB_PATH \
-  FW_DLL_ROOT_DIR "libpn553_fw_platform" FW_DLL_EXTENSION
-/* Upgrade the public Key */
-#define PKU_LIB_PATH FW_DLL_ROOT_DIR "libpn553_fw_pku" FW_DLL_EXTENSION
-#else
-/* Actual FW library name*/
-#define FW_LIB_PATH FW_DLL_ROOT_DIR "libpn547_fw" FW_DLL_EXTENSION
-/* Restore Corrupted PLL Settings/etc */
-#define PLATFORM_LIB_PATH \
-  FW_DLL_ROOT_DIR "libpn547_fw_platform" FW_DLL_EXTENSION
-/* Upgrade the public Key */
-#define PKU_LIB_PATH FW_DLL_ROOT_DIR "libpn547_fw_pku" FW_DLL_EXTENSION
-#endif
-
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-#define COMPILATION_MW "PN548C2"
-#elif (NFC_NXP_CHIP_TYPE == PN551)
-#define COMPILATION_MW "PN551"
-#elif (NFC_NXP_CHIP_TYPE == PN553)
-#define COMPILATION_MW "PN553"
-#else
-#define COMPILATION_MW "PN547C2"
-#endif
-
-/* HAL Version number (Updated as per release) */
-#define NXP_MW_VERSION_MAJ (3U)
-#define NXP_MW_VERSION_MIN (5U)
-
-/*
- *****************************************************************
- ***********  System clock source selection configuration ********
- *****************************************************************
- */
-
-#define CLK_SRC_UNDEF 0
-#define CLK_SRC_XTAL 1
-#define CLK_SRC_PLL 2
-#define CLK_SRC_PADDIRECT 3
-
-/*Extern crystal clock source*/
-/* Use one of CLK_SRC_<value> */
-#define NXP_SYS_CLK_SRC_SEL CLK_SRC_PLL
-/*Direct clock*/
-
-/*
- *****************************************************************
- ***********  System clock frequency selection configuration ****************
- * If Clk_Src is set to PLL, make sure to set the Clk_Freq also*
- *****************************************************************
- */
-#define CLK_FREQ_UNDEF 0
-#define CLK_FREQ_13MHZ 1
-#define CLK_FREQ_19_2MHZ 2
-#define CLK_FREQ_24MHZ 3
-#define CLK_FREQ_26MHZ 4
-#define CLK_FREQ_38_4MHZ 5
-#define CLK_FREQ_52MHZ 6
-
-/* Set to one of CLK_FREQ_<value> */
-#define NXP_SYS_CLK_FREQ_SEL CLK_FREQ_19_2MHZ
-
-#define CLK_TO_CFG_DEF 1
-#define CLK_TO_CFG_MAX 6
-/*
- *  information to configure OSAL
- */
-typedef struct phOsalNfc_Config {
-  uint8_t* pLogFile;            /* Log File Name*/
-  uintptr_t dwCallbackThreadId; /* Client ID to which message is posted */
-} phOsalNfc_Config_t, *pphOsalNfc_Config_t /* Pointer to #phOsalNfc_Config_t */;
-
-/*
- * Deferred call declaration.
- * This type of API is called from ClientApplication (main thread) to notify
- * specific callback.
- */
-typedef void (*pphOsalNfc_DeferFuncPointer_t)(void*);
-
-/*
- * Deferred message specific info declaration.
- */
-typedef struct phOsalNfc_DeferedCallInfo {
-  pphOsalNfc_DeferFuncPointer_t pDeferedCall; /* pointer to Deferred callback */
-  void* pParam; /* contains timer message specific details*/
-} phOsalNfc_DeferedCallInfo_t;
-
-/*
- * States in which a OSAL timer exist.
- */
-typedef enum {
-  eTimerIdle = 0,          /* Indicates Initial state of timer */
-  eTimerRunning = 1,       /* Indicate timer state when started */
-  eTimerStopped = 2        /* Indicates timer state when stopped */
-} phOsalNfc_TimerStates_t; /* Variable representing State of timer */
-
-/*
- **Timer Handle structure containing details of a timer.
- */
-typedef struct phOsalNfc_TimerHandle {
-  uint32_t TimerId;     /* ID of the timer */
-  timer_t hTimerHandle; /* Handle of the timer */
-  /* Timer callback function to be invoked */
-  pphOsalNfc_TimerCallbck_t Application_callback;
-  void* pContext; /* Parameter to be passed to the callback function */
-  phOsalNfc_TimerStates_t eState; /* Timer states */
-  /* Osal Timer message posted on User Thread */
-  phLibNfc_Message_t tOsalMessage;
-  /* Deferred Call structure to Invoke Callback function */
-  phOsalNfc_DeferedCallInfo_t tDeferedCallInfo;
-  /* Variables for Structure Instance and Structure Ptr */
-} phOsalNfc_TimerHandle_t, *pphOsalNfc_TimerHandle_t;
-
-#endif /*  PHOSALNFC_H  */
diff --git a/halimpl/pn54x/common/phNfcCompId.h b/halimpl/pn54x/common/phNfcCompId.h
deleted file mode 100644
index 9930e0c..0000000
--- a/halimpl/pn54x/common/phNfcCompId.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2010-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * NFC Component ID Values - Used for Function Return Codes
- */
-
-#ifndef PHNFCCOMPID_H
-#define PHNFCCOMPID_H
-
-/*
- *  Component IDs
- *
- *  IDs for all NFC components. Combined with the Status Code they build the
- * value (status)
- *  returned by each function.
- *
- *  ID Number Spaces:
- *  - 01..1F: HAL
- *  - 20..3F: NFC-MW (Local Device)
- *  - 40..5F: NFC-MW (Remote Device)
- *  .
- *
- *         The value CID_NFC_NONE does not exist for Component IDs. Do not use
- * this value except
- *         for NFCSTATUS_SUCCESS. The enumeration function uses CID_NFC_NONE
- *         to mark unassigned "References".
- */
-/* Unassigned or doesn't apply (see #NFCSTATUS_SUCCESS) */
-#define CID_NFC_NONE 0x00
-#define CID_NFC_TML 0x01 /* Transport Mapping Layer */
-#define CID_NFC_LLC 0x07 /* Logical Link Control Layer */
-/* NFC Controller(NFCC) Interface Layer */
-#define CID_NFC_NCI 0x08
-/* Firmware Download Management Layer */
-#define CID_NFC_DNLD 0x09
-#define CID_NFC_HAL 0x10 /* Hardware Abstraction Layer */
-/* Operating System Abstraction Layer*/
-#define CID_NFC_OSAL CID_NFC_NONE
-#define CID_FRI_NFC_OVR_HAL 0x20       /* NFC-Device, HAL-based */
-#define CID_FRI_NFC_NDEF_RECORD 0x22   /* NDEF Record Tools Library. */
-#define CID_FRI_NFC_NDEF_MAP 0x23      /* NDEF Mapping. */
-#define CID_FRI_NFC_NDEF_REGISTRY 0x24 /* NDEF_REGISTRY. */
-/* Automatic Device Discovery. */
-#define CID_FRI_NFC_AUTO_DEV_DIS 0x25
-#define CID_FRI_NFC_NDEF_SMTCRDFMT 0x26 /* Smart Card Formatting */
-#define CID_NFC_LIB 0x30                /* NFC Library Layer*/
-/* The maximum CID value that is defined. */
-#define CID_MAX_VALUE 0xF0
-/* Logical Link Control Protocol */
-#define CID_FRI_NFC_LLCP 0x40
-#define CID_FRI_NFC_LLCP_TRANSPORT 0x50
-#define CID_FRI_NFC_LLCP_MAC 0x60
-
-#endif /* PHNFCCOMPID_H */
diff --git a/halimpl/pn54x/common/phNfcStatus.h b/halimpl/pn54x/common/phNfcStatus.h
deleted file mode 100644
index f3aa51a..0000000
--- a/halimpl/pn54x/common/phNfcStatus.h
+++ /dev/null
@@ -1,374 +0,0 @@
-/*
- * Copyright (C) 2010-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * NFC Status Values - Function Return Codes
- */
-
-#ifndef PHNFCSTATUS_H
-#define PHNFCSTATUS_H
-
-#include <phNfcTypes.h>
-
-/* Internally required by PHNFCSTVAL. */
-#define PHNFCSTSHL8 (8U)
-/* Required by PHNFCSTVAL. */
-#define PHNFCSTBLOWER ((NFCSTATUS)(0x00FFU))
-
-/*
- *  NFC Status Composition Macro
- *
- *  This is the macro which must be used to compose status values.
- *
- *  phNfcCompID Component ID, as defined in phNfcCompId.h .
- *  phNfcStatus Status values, as defined in phNfcStatus.h .
- *
- *  The macro is not required for the NFCSTATUS_SUCCESS value.
- *  This is the only return value to be used directly.
- *  For all other values it shall be used in assignment and conditional
- * statements, e.g.:
- *     NFCSTATUS status = PHNFCSTVAL(phNfcCompID, phNfcStatus); ...
- *     if (status == PHNFCSTVAL(phNfcCompID, phNfcStatus)) ...
- */
-#define PHNFCSTVAL(phNfcCompID, phNfcStatus)               \
-  (((phNfcStatus) == (NFCSTATUS_SUCCESS))                  \
-       ? (NFCSTATUS_SUCCESS)                               \
-       : ((((NFCSTATUS)(phNfcStatus)) & (PHNFCSTBLOWER)) | \
-          (((uint16_t)(phNfcCompID)) << (PHNFCSTSHL8))))
-
-/*
- * PHNFCSTATUS
- * Get grp_retval from Status Code
- */
-#define PHNFCSTATUS(phNfcStatus) ((phNfcStatus)&0x00FFU)
-#define PHNFCCID(phNfcStatus) (((phNfcStatus)&0xFF00U) >> 8)
-
-#define PHNFC_I2C_FRAGMENT_SIZE 512
-/*
- *  Status Codes
- *
- *  Generic Status codes for the NFC components. Combined with the Component ID
- *  they build the value (status) returned by each function.
- *  Example:
- *      grp_comp_id "Component ID" -  e.g. 0x10, plus
- *      status code as listed in this file - e.g. 0x03
- *      result in a status value of 0x0003.
- */
-
-/*
- * The function indicates successful completion
- */
-#define NFCSTATUS_SUCCESS (0x0000)
-
-/*
- *  The function indicates successful completion
- */
-#define NFCSTATUS_OK (NFCSTATUS_SUCCESS)
-
-/*
- * At least one parameter could not be properly interpreted
- */
-#define NFCSTATUS_INVALID_PARAMETER (0x0001)
-
-/*
- * The buffer provided by the caller is too small
- */
-#define NFCSTATUS_BUFFER_TOO_SMALL (0x0003)
-
-/*
- * Device specifier/handle value is invalid for the operation
- */
-#define NFCSTATUS_INVALID_DEVICE (0x0006)
-
-/*
- * The function executed successfully but could have returned
- * more information than space provided by the caller
- */
-#define NFCSTATUS_MORE_INFORMATION (0x0008)
-
-/*
- * No response from the remote device received: Time-out
- */
-#define NFCSTATUS_RF_TIMEOUT (0x0009)
-
-/*
- * RF Error during data transaction with the remote device
- */
-#define NFCSTATUS_RF_ERROR (0x000A)
-
-/*
- * Not enough resources Memory, Timer etc(e.g. allocation failed.)
- */
-#define NFCSTATUS_INSUFFICIENT_RESOURCES (0x000C)
-
-/*
- * A non-blocking function returns this immediately to indicate
- * that an internal operation is in progress
- */
-#define NFCSTATUS_PENDING (0x000D)
-
-/*
- * A board communication error occurred
- * (e.g. Configuration went wrong)
- */
-#define NFCSTATUS_BOARD_COMMUNICATION_ERROR (0x000F)
-
-/*
- * Invalid State of the particular state machine
- */
-#define NFCSTATUS_INVALID_STATE (0x0011)
-
-/*
- * This Layer is Not initialized, hence initialization required.
- */
-#define NFCSTATUS_NOT_INITIALISED (0x0031)
-
-/*
- * The Layer is already initialized, hence initialization repeated.
- */
-#define NFCSTATUS_ALREADY_INITIALISED (0x0032)
-
-/*
- * Feature not supported
- */
-#define NFCSTATUS_FEATURE_NOT_SUPPORTED (0x0033)
-
-/*  The Unregistration command has failed because the user wants to unregister
- * on
- * an element for which he was not registered
- */
-#define NFCSTATUS_NOT_REGISTERED (0x0034)
-
-/* The Registration command has failed because the user wants to register on
- * an element for which he is already registered
- */
-#define NFCSTATUS_ALREADY_REGISTERED (0x0035)
-
-/*  Single Tag with Multiple
-    Protocol support detected */
-#define NFCSTATUS_MULTIPLE_PROTOCOLS (0x0036)
-
-/*
- * Feature not supported
- */
-#define NFCSTATUS_MULTIPLE_TAGS (0x0037)
-
-/*
- * A DESELECT event has occurred
- */
-#define NFCSTATUS_DESELECTED (0x0038)
-
-/*
- * A RELEASE event has occurred
- */
-#define NFCSTATUS_RELEASED (0x0039)
-
-/*
- * The operation is currently not possible or not allowed
- */
-#define NFCSTATUS_NOT_ALLOWED (0x003A)
-
-/*
- * FW version error while performing FW download,
- * FW major version mismatch (cannot downgrade FW major version) or FW version
- * already upto date
- * User may be trying to flash Mobile FW on top of Infra FW, which is not
- * allowed
- * Download appropriate version of FW
- */
-#define NFCSTATUS_FW_VERSION_ERROR (0x003C)
-
-/*
- *  The system is busy with the previous operation.
- */
-#define NFCSTATUS_BUSY (0x006F)
-
-/* NDEF Mapping error codes */
-
-/* The remote device (type) is not valid for this request. */
-#define NFCSTATUS_INVALID_REMOTE_DEVICE (0x001D)
-
-/* Read operation failed */
-#define NFCSTATUS_READ_FAILED (0x0014)
-
-/*
- * Write operation failed
- */
-#define NFCSTATUS_WRITE_FAILED (0x0015)
-
-/* Non Ndef Compliant */
-#define NFCSTATUS_NO_NDEF_SUPPORT (0x0016)
-
-/* Could not proceed further with the write operation: reached card EOF*/
-#define NFCSTATUS_EOF_NDEF_CONTAINER_REACHED (0x001A)
-
-/* Incorrect number of bytes received from the card*/
-#define NFCSTATUS_INVALID_RECEIVE_LENGTH (0x001B)
-
-/* The data format/composition is not understood/correct. */
-#define NFCSTATUS_INVALID_FORMAT (0x001C)
-
-/* There is not sufficient storage available. */
-#define NFCSTATUS_INSUFFICIENT_STORAGE (0x001F)
-
-/* The Ndef Format procedure has failed. */
-#define NFCSTATUS_FORMAT_ERROR (0x0023)
-
-/* The NCI Cedit error */
-#define NFCSTATUS_CREDIT_TIMEOUT (0x0024)
-
-/*
- * Response Time out for the control message(NFCC not responded)
- */
-#define NFCSTATUS_RESPONSE_TIMEOUT (0x0025)
-
-/*
- * Device is already connected
- */
-#define NFCSTATUS_ALREADY_CONNECTED (0x0026)
-
-/*
- * Device is already connected
- */
-#define NFCSTATUS_ANOTHER_DEVICE_CONNECTED (0x0027)
-
-/*
- * Single Target Detected and Activated
- */
-#define NFCSTATUS_SINGLE_TAG_ACTIVATED (0x0028)
-
-/*
- * Single Target Detected
- */
-#define NFCSTATUS_SINGLE_TAG_DISCOVERED (0x0029)
-
-/*
- * Secure element Detected and Activated
- */
-#define NFCSTATUS_SECURE_ELEMENT_ACTIVATED (0x0028)
-
-/*
- * Unknown error Status Codes
- */
-#define NFCSTATUS_UNKNOWN_ERROR (0x00FE)
-
-/*
- * Status code for failure
- */
-#define NFCSTATUS_FAILED (0x00FF)
-
-/*
- * The function/command has been aborted
- */
-#define NFCSTATUS_CMD_ABORTED (0x0002)
-
-/*
- * No target found after poll
- */
-#define NFCSTATUS_NO_TARGET_FOUND (0x000A)
-
-/* Attempt to disconnect a not connected remote device. */
-#define NFCSTATUS_NO_DEVICE_CONNECTED (0x000B)
-
-/* External RF field detected. */
-#define NFCSTATUS_EXTERNAL_RF_DETECTED (0x000E)
-
-/* Message is not allowed by the state machine
- * (e.g. configuration went wrong)
- */
-#define NFCSTATUS_MSG_NOT_ALLOWED_BY_FSM (0x0010)
-
-/*
- * No access has been granted
- */
-#define NFCSTATUS_ACCESS_DENIED (0x001E)
-
-/* No registry node matches the specified input data. */
-#define NFCSTATUS_NODE_NOT_FOUND (0x0017)
-
-/* The current module is busy ; one might retry later */
-#define NFCSTATUS_SMX_BAD_STATE (0x00F0)
-
-/* The Abort mechanism has failed for unexpected reason: user can try again*/
-#define NFCSTATUS_ABORT_FAILED (0x00F2)
-
-/* The Registration command has failed because the user wants to register as
- * target
- * on a operating mode not supported
- */
-#define NFCSTATUS_REG_OPMODE_NOT_SUPPORTED (0x00F5)
-
-/*
- * Shutdown in progress, cannot handle the request at this time.
- */
-#define NFCSTATUS_SHUTDOWN (0x0091)
-
-/*
- * Target is no more in RF field
- */
-#define NFCSTATUS_TARGET_LOST (0x0092)
-
-/*
- * Request is rejected
- */
-#define NFCSTATUS_REJECTED (0x0093)
-
-/*
- * Target is not connected
- */
-#define NFCSTATUS_TARGET_NOT_CONNECTED (0x0094)
-
-/*
- * Invalid handle for the operation
- */
-#define NFCSTATUS_INVALID_HANDLE (0x0095)
-
-/*
- * Process aborted
- */
-#define NFCSTATUS_ABORTED (0x0096)
-
-/*
- * Requested command is not supported
- */
-#define NFCSTATUS_COMMAND_NOT_SUPPORTED (0x0097)
-
-/*
- * Tag is not NDEF compilant
- */
-#define NFCSTATUS_NON_NDEF_COMPLIANT (0x0098)
-
-/*
- * Not enough memory available to complete the requested operation
- */
-#define NFCSTATUS_NOT_ENOUGH_MEMORY (0x001F)
-
-/*
- * Indicates incoming connection
- */
-#define NFCSTATUS_INCOMING_CONNECTION (0x0045)
-
-/*
- * Indicates Connection was successful
- */
-#define NFCSTATUS_CONNECTION_SUCCESS (0x0046)
-
-/*
- * Indicates Connection failed
- */
-#define NFCSTATUS_CONNECTION_FAILED (0x0047)
-
-#endif /* PHNFCSTATUS_H */
diff --git a/halimpl/pn54x/common/phNfcTypes.h b/halimpl/pn54x/common/phNfcTypes.h
deleted file mode 100644
index d80ad50..0000000
--- a/halimpl/pn54x/common/phNfcTypes.h
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
- * Copyright (C) 2010-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef PHNFCTYPES_H
-#define PHNFCTYPES_H
-
-#include <stdbool.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#ifndef TRUE
-#define TRUE (0x01) /* Logical True Value */
-#endif
-#ifndef FALSE
-#define FALSE (0x00) /* Logical False Value */
-#endif
-typedef uint8_t utf8_t;     /* UTF8 Character String */
-typedef uint8_t bool_t;     /* boolean data type */
-typedef uint16_t NFCSTATUS; /* Return values */
-#define STATIC static
-
-#define PHNFC_MAX_UID_LENGTH 0x0AU /* Maximum UID length expected */
-/* Maximum ATR_RES (General Bytes) length expected */
-#define PHNFC_MAX_ATR_LENGTH 0x30U
-#define PHNFC_NFCID_LENGTH 0x0AU /* Maximum length of NFCID 1.3*/
-#define PHNFC_ATQA_LENGTH 0x02U  /* ATQA length */
-
-/*
- * NFC Data structure
- */
-typedef struct phNfc_sData {
-  uint8_t* buffer; /* Buffer to store data */
-  uint32_t length; /* Buffer length */
-} phNfc_sData_t;
-
-/*
- * Possible Hardware Configuration exposed to upper layer.
- * Typically this should be port name (Ex:"COM1","COM2") to which PN54X is
- * connected.
- */
-typedef enum {
-  ENUM_LINK_TYPE_COM1,
-  ENUM_LINK_TYPE_COM2,
-  ENUM_LINK_TYPE_COM3,
-  ENUM_LINK_TYPE_COM4,
-  ENUM_LINK_TYPE_COM5,
-  ENUM_LINK_TYPE_COM6,
-  ENUM_LINK_TYPE_COM7,
-  ENUM_LINK_TYPE_COM8,
-  ENUM_LINK_TYPE_I2C,
-  ENUM_LINK_TYPE_SPI,
-  ENUM_LINK_TYPE_USB,
-  ENUM_LINK_TYPE_TCP,
-  ENUM_LINK_TYPE_NB
-} phLibNfc_eConfigLinkType;
-
-/*
- * Deferred message. This message type will be posted to the client application
- * thread
- * to notify that a deferred call must be invoked.
- */
-#define PH_LIBNFC_DEFERREDCALL_MSG (0x311)
-
-/*
- * Deferred call declaration.
- * This type of API is called from ClientApplication ( main thread) to notify
- * specific callback.
- */
-typedef void (*pphLibNfc_DeferredCallback_t)(void*);
-
-/*
- * Deferred parameter declaration.
- * This type of data is passed as parameter from ClientApplication (main thread)
- * to the
- * callback.
- */
-typedef void* pphLibNfc_DeferredParameter_t;
-
-/*
- * Possible Hardware Configuration exposed to upper layer.
- * Typically this should be at least the communication link (Ex:"COM1","COM2")
- * the controller is connected to.
- */
-typedef struct phLibNfc_sConfig {
-  uint8_t* pLogFile; /* Log File Name*/
-  /* Hardware communication link to the controller */
-  phLibNfc_eConfigLinkType nLinkType;
-  /* The client ID (thread ID or message queue ID) */
-  uintptr_t nClientId;
-} phLibNfc_sConfig_t, *pphLibNfc_sConfig_t;
-
-/*
- * NFC Message structure contains message specific details like
- * message type, message specific data block details, etc.
- */
-typedef struct phLibNfc_Message {
-  uint32_t eMsgType; /* Type of the message to be posted*/
-  void* pMsgData;    /* Pointer to message specific data block in case any*/
-  uint32_t Size;     /* Size of the datablock*/
-} phLibNfc_Message_t, *pphLibNfc_Message_t;
-
-/*
- * Deferred message specific info declaration.
- * This type of information is packed as message data when
- * PH_LIBNFC_DEFERREDCALL_MSG
- * type message is posted to message handler thread.
- */
-typedef struct phLibNfc_DeferredCall {
-  pphLibNfc_DeferredCallback_t pCallback;   /* pointer to Deferred callback */
-  pphLibNfc_DeferredParameter_t pParameter; /* pointer to Deferred parameter */
-} phLibNfc_DeferredCall_t;
-
-/*
- * Definitions for supported protocol
- */
-typedef struct phNfc_sSupProtocol {
-  unsigned int MifareUL : 1;    /* Protocol Mifare Ultra Light or any NFC Forum
-                                   Type-2 tags */
-  unsigned int MifareStd : 1;   /* Protocol Mifare Standard. */
-  unsigned int ISO14443_4A : 1; /* Protocol ISO14443-4 Type A.  */
-  unsigned int ISO14443_4B : 1; /* Protocol ISO14443-4 Type B.  */
-  unsigned int ISO15693 : 1;    /* Protocol ISO15693 HiTag.  */
-  unsigned int Felica : 1;      /* Protocol Felica. */
-  unsigned int NFC : 1;         /* Protocol NFC. */
-  unsigned int Jewel : 1;       /* Protocol Innovision Jewel Tag. or Any T1T*/
-  unsigned int
-      Desfire : 1;          /*TRUE indicates specified feature (mapping
-                            or formatting)for DESFire tag supported else not supported.*/
-  unsigned int Kovio : 1;   /* Protocol Kovio Tag*/
-  unsigned int HID : 1;     /* Protocol HID(Picopass) Tag*/
-  unsigned int Bprime : 1;  /* Protocol BPrime Tag*/
-  unsigned int EPCGEN2 : 1; /* Protocol EPCGEN2 Tag*/
-} phNfc_sSupProtocol_t;
-
-/*
- *  Enumerated MIFARE Commands
- */
-
-typedef enum phNfc_eMifareCmdList {
-  phNfc_eMifareRaw = 0x00U,      /* This command performs raw transcations */
-  phNfc_eMifareAuthentA = 0x60U, /* This command performs an authentication with
-                                    KEY A for a sector. */
-  phNfc_eMifareAuthentB = 0x61U, /* This command performs an authentication with
-                                    KEY B for a sector. */
-  phNfc_eMifareRead16 = 0x30U,  /* Read 16 Bytes from a Mifare Standard block */
-  phNfc_eMifareRead = 0x30U,    /* Read Mifare Standard */
-  phNfc_eMifareWrite16 = 0xA0U, /* Write 16 Bytes to a Mifare Standard block */
-  phNfc_eMifareWrite4 = 0xA2U,  /* Write 4 bytes. */
-  phNfc_eMifareInc = 0xC1U,     /* Increment */
-  phNfc_eMifareDec = 0xC0U,     /* Decrement */
-  phNfc_eMifareTransfer = 0xB0U,    /* Transfer */
-  phNfc_eMifareRestore = 0xC2U,     /* Restore.   */
-  phNfc_eMifareReadSector = 0x38U,  /* Read Sector.   */
-  phNfc_eMifareWriteSector = 0xA8U, /* Write Sector.   */
-  /* Above commands could be used for preparing raw command but below one can
-     not be */
-  phNfc_eMifareReadN = 0x01,      /* Proprietary Command */
-  phNfc_eMifareWriteN = 0x02,     /* Proprietary Command */
-  phNfc_eMifareSectorSel = 0x03,  /* Proprietary Command */
-  phNfc_eMifareAuth = 0x04,       /* Proprietary Command */
-  phNfc_eMifareProxCheck = 0x05,  /* Proprietary Command */
-  phNfc_eMifareInvalidCmd = 0xFFU /* Invalid Command */
-} phNfc_eMifareCmdList_t;
-
-/*
- * Information about ISO14443A
- */
-typedef struct phNfc_sIso14443AInfo {
-  uint8_t Uid[PHNFC_MAX_UID_LENGTH]; /* UID information of the TYPE A
-                                      * Tag Discovered */
-  uint8_t UidLength;                 /* UID information length */
-  uint8_t
-      AppData[PHNFC_MAX_ATR_LENGTH]; /* Application data information of the
-               1                      * tag discovered (= Historical bytes for
-                                      * type A) */
-  uint8_t AppDataLength;             /* Application data length */
-  uint8_t Sak;                       /* SAK information of the TYPE A
-                                      * Tag Discovered */
-  uint8_t AtqA[PHNFC_ATQA_LENGTH];   /* ATQA informationof the TYPE A
-                                      * Tag Discovered */
-  uint8_t MaxDataRate;               /* Maximum data rate supported
-                                      * by the tag Discovered */
-  uint8_t Fwi_Sfgt;                  /* Frame waiting time and start up
-                                      * frame guard */
-} phNfc_sIso14443AInfo_t;
-
-/* Remote device information structure */
-typedef union phNfc_uRemoteDevInfo {
-  phNfc_sIso14443AInfo_t Iso14443A_Info; /* ISO1443A Remote device info */
-} phNfc_uRemoteDevInfo_t;
-
-/*
-*
-*  The RF Device Type List is used to identify the type of
-*  remote device that is discovered and connected.
-*
-*/
-
-typedef enum phNfc_eRFDevType {
-  phNfc_eUnknown_DevType = 0x00U,
-
-  phNfc_eISO14443_A_PCD,
-  phNfc_eISO14443_B_PCD,
-  phNfc_eISO14443_BPrime_PCD,
-  phNfc_eFelica_PCD,
-  phNfc_eJewel_PCD,
-  phNfc_eISO15693_PCD,
-  phNfc_eEpcGen2_PCD,
-  phNfc_ePCD_DevType,
-
-  phNfc_ePICC_DevType,
-  phNfc_eISO14443_A_PICC,
-  phNfc_eISO14443_4A_PICC,
-  phNfc_eISO14443_3A_PICC,
-  phNfc_eMifare_PICC,
-  phNfc_eISO14443_B_PICC,
-  phNfc_eISO14443_4B_PICC,
-  phNfc_eISO14443_BPrime_PICC,
-  phNfc_eFelica_PICC,
-  phNfc_eJewel_PICC,
-  phNfc_eISO15693_PICC,
-  phNfc_eEpcGen2_PICC,
-
-  phNfc_eNfcIP1_Target,
-  phNfc_eNfcIP1_Initiator,
-
-  phNfc_eInvalid_DevType
-
-} phNfc_eRFDevType_t;
-
-/*
- * The Remote Device Type List is used to identify the type of
- * remote device that is discovered/connected
- */
-typedef phNfc_eRFDevType_t phNfc_eRemDevType_t;
-typedef phNfc_eRemDevType_t phHal_eRemDevType_t;
-
-/*
- *   Union for each available type of Commands.
- */
-
-typedef union phNfc_uCommand {
-  phNfc_eMifareCmdList_t MfCmd; /* Mifare command structure.  */
-} phNfc_uCmdList_t;
-
-/*
- *  The Remote Device Information Structure holds information about one single
- * Remote
- *  Device detected.
- */
-typedef struct phNfc_sRemoteDevInformation {
-  uint8_t SessionOpened;                /* Flag indicating the validity of
-                                         * the handle of the remote device.
-                                         * 1 = Device is not activer (Only discovered), 2 =
-                                         * Device is active and ready for use*/
-  phNfc_eRemDevType_t RemDevType;       /* Remote device type */
-  phNfc_uRemoteDevInfo_t RemoteDevInfo; /* Union of available Remote Device */
-} phNfc_sRemoteDevInformation_t;
-
-/*
- * Transceive Information Data Structure for sending commands/response to the
- * remote device
- */
-
-typedef struct phNfc_sTransceiveInfo {
-  phNfc_uCmdList_t cmd; /* Command for transceive */
-  uint8_t addr;         /* Start Block Number */
-  uint8_t NumBlock;     /* Number of Blocks to perform operation */
-  /* For Felica only*/
-  uint16_t* ServiceCodeList; /* 2 Byte service Code List */
-  uint16_t* Blocklist;       /* 2 Byte Block list */
-  phNfc_sData_t sSendData;   /* Send data */
-  phNfc_sData_t sRecvData;   /* Recv data */
-  /* For EPC-GEN */
-  uint32_t dwWordPtr;  /* Word address for the memory write */
-  uint8_t bWordPtrLen; /* Specifies the length of word pointer
-                       00: 8  bits
-                       01: 16 bits
-                       10: 24 bits
-                       11: 32 bits
-                       */
-  uint8_t bWordCount;  /* Number of words to be read or written */
-} phNfc_sTransceiveInfo_t;
-
-#define UNUSED(X) (void)X;
-
-#endif /* PHNFCTYPES_H */
diff --git a/halimpl/pn54x/dnld/phDnldNfc.c b/halimpl/pn54x/dnld/phDnldNfc.c
deleted file mode 100644
index d2258ef..0000000
--- a/halimpl/pn54x/dnld/phDnldNfc.c
+++ /dev/null
@@ -1,1294 +0,0 @@
-/*
- * Copyright (C) 2010-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * Download Component
- * Download Interface routines implementation
- */
-
-#include <dlfcn.h>
-#include <phDnldNfc_Internal.h>
-#include <phNxpConfig.h>
-#include <phNxpLog.h>
-#include <phTmlNfc.h>
-
-static void*
-    pFwLibHandle;    /* Global firmware lib handle used in this file only */
-uint16_t wMwVer = 0; /* Middleware version no */
-uint16_t wFwVer = 0; /* Firmware version no */
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-uint8_t gRecFWDwnld;  // flag set to true to indicate dummy FW download
-#endif
-static pphDnldNfc_DlContext_t gpphDnldContext = NULL; /* Download contex */
-static pphDnldNfc_RspCb_t UserCb; /* Upper layer call back function */
-static void* UserCtxt;            /* Pointer to upper layer context */
-#undef EEPROM_Read_Mem_IMP
-
-/* Function prototype declaration */
-static void phDnldNfc_ReadComplete(void* pContext, NFCSTATUS status,
-                                   void* pInfo);
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_Reset
-**
-** Description      Performs a soft reset of the download module
-**
-** Parameters       pNotify  - notify caller after getting response
-**                  pContext - caller context
-**
-** Returns          NFC status:
-**                  NFCSTATUS_SUCCESS - reset request to NFCC is successful
-**                  NFCSTATUS_FAILED - reset request failed due to internal
-**                                     error
-**                  NFCSTATUS_NOT_ALLOWED - command not allowed
-**                  Other command specific errors
-**
-*******************************************************************************/
-NFCSTATUS phDnldNfc_Reset(pphDnldNfc_RspCb_t pNotify, void* pContext) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-
-  if ((NULL == pNotify) || (NULL == pContext)) {
-    NXPLOG_FWDNLD_E("Invalid Input Parameters!!");
-    wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-  } else {
-    if (phDnldNfc_TransitionIdle != gpphDnldContext->tDnldInProgress) {
-      NXPLOG_FWDNLD_E("Dnld Cmd Request in Progress..Cannot Continue!!");
-      wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_BUSY);
-    } else {
-      (gpphDnldContext->FrameInp.Type) = phDnldNfc_FTNone;
-      (gpphDnldContext->tCmdId) = PH_DL_CMD_RESET;
-      (gpphDnldContext->tRspBuffInfo.pBuff) = NULL;
-      (gpphDnldContext->tRspBuffInfo.wLen) = 0;
-      (gpphDnldContext->tUserData.pBuff) = NULL;
-      (gpphDnldContext->tUserData.wLen) = 0;
-      (gpphDnldContext->UserCb) = pNotify;
-      (gpphDnldContext->UserCtxt) = pContext;
-
-      wStatus = phDnldNfc_CmdHandler(gpphDnldContext, phDnldNfc_EventReset);
-
-      if (NFCSTATUS_PENDING == wStatus) {
-        NXPLOG_FWDNLD_D("Reset Request submitted successfully");
-      } else {
-        NXPLOG_FWDNLD_E("Reset Request Failed!!");
-      }
-    }
-  }
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_GetVersion
-**
-** Description      Retrieves Hardware version, ROM Code version, Protected Data
-**                  version, Trim data version, User data version, and Firmware
-**                  version information
-**
-** Parameters       pVersionInfo - response buffer which gets updated with
-**                                 complete version info from NFCC
-**                  pNotify - notify caller after getting response
-**                  pContext - caller context
-**
-** Returns          NFC status:
-**                  NFCSTATUS_SUCCESS - GetVersion request to NFCC is successful
-**                  NFCSTATUS_FAILED - GetVersion request failed due to internal
-**                                     error
-**                  NFCSTATUS_NOT_ALLOWED - command not allowed
-**                  Other command specific errors
-**
-*******************************************************************************/
-NFCSTATUS phDnldNfc_GetVersion(pphDnldNfc_Buff_t pVersionInfo,
-                               pphDnldNfc_RspCb_t pNotify, void* pContext) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-
-  if ((NULL == pVersionInfo) || (NULL == pNotify) || (NULL == pContext)) {
-    NXPLOG_FWDNLD_E("Invalid Input Parameters!!");
-    wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-  } else {
-    if (phDnldNfc_TransitionIdle != gpphDnldContext->tDnldInProgress) {
-      NXPLOG_FWDNLD_E("Dnld Cmd Request in Progress..Cannot Continue!!");
-      wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_BUSY);
-    } else {
-      if ((NULL != pVersionInfo->pBuff) && (0 != pVersionInfo->wLen)) {
-        (gpphDnldContext->tRspBuffInfo.pBuff) = pVersionInfo->pBuff;
-        (gpphDnldContext->tRspBuffInfo.wLen) = pVersionInfo->wLen;
-        (gpphDnldContext->FrameInp.Type) = phDnldNfc_FTNone;
-        (gpphDnldContext->tCmdId) = PH_DL_CMD_GETVERSION;
-        (gpphDnldContext->tUserData.pBuff) = NULL;
-        (gpphDnldContext->tUserData.wLen) = 0;
-        (gpphDnldContext->UserCb) = pNotify;
-        (gpphDnldContext->UserCtxt) = pContext;
-
-        wStatus = phDnldNfc_CmdHandler(gpphDnldContext, phDnldNfc_EventGetVer);
-
-        if (NFCSTATUS_PENDING == wStatus) {
-          NXPLOG_FWDNLD_D("GetVersion Request submitted successfully");
-        } else {
-          NXPLOG_FWDNLD_E("GetVersion Request Failed!!");
-        }
-      } else {
-        NXPLOG_FWDNLD_E("Invalid Buff Parameters!!");
-        wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-      }
-    }
-  }
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_GetSessionState
-**
-** Description      Retrieves the current session state of NFCC
-**
-** Parameters       pSession - response buffer which gets updated with complete
-**                             version info from NFCC
-**                  pNotify - notify caller after getting response
-**                  pContext - caller context
-**
-** Returns          NFC status:
-**                  NFCSTATUS_SUCCESS - GetSessionState request to NFCC is
-**                                      successful
-**                  NFCSTATUS_FAILED - GetSessionState request failed due to
-**                                     internal error
-**                  NFCSTATUS_NOT_ALLOWED - command not allowed
-**                  Other command specific errors
-**
-*******************************************************************************/
-NFCSTATUS phDnldNfc_GetSessionState(pphDnldNfc_Buff_t pSession,
-                                    pphDnldNfc_RspCb_t pNotify,
-                                    void* pContext) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-
-  if ((NULL == pSession) || (NULL == pNotify) || (NULL == pContext)) {
-    NXPLOG_FWDNLD_E("Invalid Input Parameters!!");
-    wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-  } else {
-    if (phDnldNfc_TransitionIdle != gpphDnldContext->tDnldInProgress) {
-      NXPLOG_FWDNLD_E("Dnld Cmd Request in Progress..Cannot Continue!!");
-      wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_BUSY);
-    } else {
-      if ((NULL != pSession->pBuff) && (0 != pSession->wLen)) {
-        (gpphDnldContext->tRspBuffInfo.pBuff) = pSession->pBuff;
-        (gpphDnldContext->tRspBuffInfo.wLen) = pSession->wLen;
-        (gpphDnldContext->FrameInp.Type) = phDnldNfc_FTNone;
-        (gpphDnldContext->tCmdId) = PH_DL_CMD_GETSESSIONSTATE;
-        (gpphDnldContext->tUserData.pBuff) = NULL;
-        (gpphDnldContext->tUserData.wLen) = 0;
-        (gpphDnldContext->UserCb) = pNotify;
-        (gpphDnldContext->UserCtxt) = pContext;
-
-        wStatus =
-            phDnldNfc_CmdHandler(gpphDnldContext, phDnldNfc_EventGetSesnSt);
-
-        if (NFCSTATUS_PENDING == wStatus) {
-          NXPLOG_FWDNLD_D("GetSessionState Request submitted successfully");
-        } else {
-          NXPLOG_FWDNLD_E("GetSessionState Request Failed!!");
-        }
-      } else {
-        NXPLOG_FWDNLD_E("Invalid Buff Parameters!!");
-        wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-      }
-    }
-  }
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_CheckIntegrity
-**
-** Description      Inspects the integrity of EEPROM and FLASH contents of the
-**                  NFCC, provides CRC for each section
-**                  NOTE: The user data section CRC is valid only after fresh
-**                        download
-**
-** Parameters       bChipVer - current ChipVersion for including additional
-**                             parameters in request payload
-**                  pCRCData - response buffer which gets updated with
-**                             respective section CRC status and CRC bytes from
-**                             NFCC
-**                  pNotify - notify caller after getting response
-**                  pContext - caller context
-**
-** Returns          NFC status:
-**                  NFCSTATUS_SUCCESS - CheckIntegrity request is successful
-**                  NFCSTATUS_FAILED - CheckIntegrity request failed due to
-**                                     internal error
-**                  NFCSTATUS_NOT_ALLOWED - command not allowed
-**                  Other command specific errors
-**
-*******************************************************************************/
-NFCSTATUS phDnldNfc_CheckIntegrity(uint8_t bChipVer, pphDnldNfc_Buff_t pCRCData,
-                                   pphDnldNfc_RspCb_t pNotify, void* pContext) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-
-  if ((NULL == pNotify) || (NULL == pContext)) {
-    NXPLOG_FWDNLD_E("Invalid Input Parameters!!");
-    wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-  } else {
-    if (phDnldNfc_TransitionIdle != gpphDnldContext->tDnldInProgress) {
-      NXPLOG_FWDNLD_E("Dnld Cmd Request in Progress..Cannot Continue!!");
-      wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_BUSY);
-    } else {
-      if ((PHDNLDNFC_HWVER_MRA2_1 == bChipVer) ||
-          (PHDNLDNFC_HWVER_MRA2_2 == bChipVer)
-#if (NFC_NXP_CHIP_TYPE == PN551)
-          || (PHDNLDNFC_HWVER_PN551_MRA1_0 == bChipVer)
-#elif (NFC_NXP_CHIP_TYPE == PN548C2)
-          || (PHDNLDNFC_HWVER_PN548AD_MRA1_0 == bChipVer)
-#elif (NFC_NXP_CHIP_TYPE == PN553)
-          || (PHDNLDNFC_HWVER_PN553_MRA1_0 == bChipVer) ||
-          (PHDNLDNFC_HWVER_PN553_MRA1_0_UPDATED & bChipVer)
-#endif
-              ) {
-        (gpphDnldContext->FrameInp.Type) = phDnldNfc_ChkIntg;
-      } else {
-        (gpphDnldContext->FrameInp.Type) = phDnldNfc_FTNone;
-      }
-
-      if ((NULL != pCRCData->pBuff) && (0 != pCRCData->wLen)) {
-        (gpphDnldContext->tRspBuffInfo.pBuff) = pCRCData->pBuff;
-        (gpphDnldContext->tRspBuffInfo.wLen) = pCRCData->wLen;
-        (gpphDnldContext->tCmdId) = PH_DL_CMD_CHECKINTEGRITY;
-        (gpphDnldContext->tUserData.pBuff) = NULL;
-        (gpphDnldContext->tUserData.wLen) = 0;
-        (gpphDnldContext->UserCb) = pNotify;
-        (gpphDnldContext->UserCtxt) = pContext;
-
-        wStatus =
-            phDnldNfc_CmdHandler(gpphDnldContext, phDnldNfc_EventIntegChk);
-
-        if (NFCSTATUS_PENDING == wStatus) {
-          NXPLOG_FWDNLD_D("CheckIntegrity Request submitted successfully");
-        } else {
-          NXPLOG_FWDNLD_E("CheckIntegrity Request Failed!!");
-        }
-      } else {
-        NXPLOG_FWDNLD_E("Invalid Buff Parameters!!");
-        wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-      }
-    }
-  }
-
-  return wStatus;
-}
-/*******************************************************************************
-**
-** Function         phDnldNfc_ReadLog
-**
-** Description      Retrieves log data from EEPROM
-**
-** Parameters       pData - response buffer which gets updated with data from
-**                          EEPROM
-**                  pNotify - notify caller after getting response
-**                  pContext - caller context
-**
-** Returns          NFC status:
-**                  NFCSTATUS_SUCCESS - Read request to NFCC is successful
-**                  NFCSTATUS_FAILED - Read request failed due to internal error
-**                  NFCSTATUS_NOT_ALLOWED - command not allowed
-**                  Other command specific errors
-**
-*******************************************************************************/
-NFCSTATUS phDnldNfc_ReadLog(pphDnldNfc_Buff_t pData, pphDnldNfc_RspCb_t pNotify,
-                            void* pContext) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-
-  if ((NULL == pNotify) || (NULL == pData) || (NULL == pContext)) {
-    NXPLOG_FWDNLD_E("Invalid Input Parameters!!");
-    wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-  } else {
-    if (phDnldNfc_TransitionIdle != gpphDnldContext->tDnldInProgress) {
-      NXPLOG_FWDNLD_E("Dnld Cmd Request in Progress..Cannot Continue!!");
-      wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_BUSY);
-    } else {
-      if ((NULL != pData->pBuff) && (0 != pData->wLen)) {
-        (gpphDnldContext->tCmdId) = PH_DL_CMD_READ;
-        (gpphDnldContext->FrameInp.Type) = phDnldNfc_FTRead;
-        (gpphDnldContext->FrameInp.dwAddr) = PHDNLDNFC_EEPROM_LOG_START_ADDR;
-        (gpphDnldContext->tRspBuffInfo.pBuff) = pData->pBuff;
-        (gpphDnldContext->tRspBuffInfo.wLen) = pData->wLen;
-        (gpphDnldContext->tUserData.pBuff) = NULL;
-        (gpphDnldContext->tUserData.wLen) = 0;
-        (gpphDnldContext->UserCb) = pNotify;
-        (gpphDnldContext->UserCtxt) = pContext;
-
-        memset(&(gpphDnldContext->tRWInfo), 0,
-               sizeof(gpphDnldContext->tRWInfo));
-
-        wStatus = phDnldNfc_CmdHandler(gpphDnldContext, phDnldNfc_EventRead);
-
-        if (NFCSTATUS_PENDING == wStatus) {
-          NXPLOG_FWDNLD_D("Read Request submitted successfully");
-        } else {
-          NXPLOG_FWDNLD_E("Read Request Failed!!");
-        }
-      } else {
-        NXPLOG_FWDNLD_E("Invalid Buff Parameters!!");
-        wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-      }
-    }
-  }
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_Write
-**
-** Description      Writes requested  data of length len to desired EEPROM/FLASH
-**                  address
-**
-** Parameters       bRecoverSeq - flag to indicate whether recover sequence data
-**                                needs to be written or not
-**                  pData - data buffer to write into EEPROM/FLASH by user
-**                  pNotify - notify caller after getting response
-**                  pContext - caller context
-**
-** Returns          NFC status:
-**                  NFCSTATUS_SUCCESS - Write request to NFCC is successful
-**                  NFCSTATUS_FAILED - Write request failed due to internal
-**                                     error
-**                  NFCSTATUS_NOT_ALLOWED - command not allowed
-**                  Other command specific errors
-**
-*******************************************************************************/
-NFCSTATUS phDnldNfc_Write(bool_t bRecoverSeq, pphDnldNfc_Buff_t pData,
-                          pphDnldNfc_RspCb_t pNotify, void* pContext) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  uint8_t* pImgPtr = NULL;
-  uint16_t wLen = 0;
-  phDnldNfc_Buff_t tImgBuff;
-
-  if ((NULL == pNotify) || (NULL == pContext)) {
-    NXPLOG_FWDNLD_E("Invalid Input Parameters!!");
-    wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-  } else {
-    if (phDnldNfc_TransitionIdle != gpphDnldContext->tDnldInProgress) {
-      NXPLOG_FWDNLD_E("Dnld Cmd Request in Progress..Cannot Continue!!");
-      wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_BUSY);
-    } else {
-      if (NULL != pData) {
-        pImgPtr = pData->pBuff;
-        wLen = pData->wLen;
-      } else {
-        if (bRecoverSeq == false) {
-          pImgPtr = (uint8_t*)gpphDnldContext->nxp_nfc_fw;
-          wLen = gpphDnldContext->nxp_nfc_fw_len;
-
-        } else {
-          if (PH_DL_STATUS_PLL_ERROR == (gpphDnldContext->tLastStatus)) {
-            wStatus = phDnldNfc_LoadRecInfo();
-          } else if (PH_DL_STATUS_SIGNATURE_ERROR ==
-                     (gpphDnldContext->tLastStatus)) {
-            wStatus = phDnldNfc_LoadPKInfo();
-          } else {
-          }
-
-          if (NFCSTATUS_SUCCESS == wStatus) {
-            pImgPtr = (uint8_t*)gpphDnldContext->nxp_nfc_fwp;
-            wLen = gpphDnldContext->nxp_nfc_fwp_len;
-          } else {
-            NXPLOG_FWDNLD_E("Platform Recovery Image extraction Failed!!");
-            pImgPtr = NULL;
-            wLen = 0;
-          }
-        }
-      }
-
-      if ((NULL != pImgPtr) && (0 != wLen)) {
-        tImgBuff.pBuff = pImgPtr;
-        tImgBuff.wLen = wLen;
-
-        (gpphDnldContext->tCmdId) = PH_DL_CMD_WRITE;
-        (gpphDnldContext->FrameInp.Type) = phDnldNfc_FTWrite;
-        (gpphDnldContext->tRspBuffInfo.pBuff) = NULL;
-        (gpphDnldContext->tRspBuffInfo.wLen) = 0;
-        (gpphDnldContext->tUserData.pBuff) = pImgPtr;
-        (gpphDnldContext->tUserData.wLen) = wLen;
-        (gpphDnldContext->bResendLastFrame) = false;
-
-        memset(&(gpphDnldContext->tRWInfo), 0,
-               sizeof(gpphDnldContext->tRWInfo));
-        (gpphDnldContext->tRWInfo.bFirstWrReq) = true;
-        (gpphDnldContext->UserCb) = pNotify;
-        (gpphDnldContext->UserCtxt) = pContext;
-
-        wStatus = phDnldNfc_CmdHandler(gpphDnldContext, phDnldNfc_EventWrite);
-
-        if (NFCSTATUS_PENDING == wStatus) {
-          NXPLOG_FWDNLD_D("Write Request submitted successfully");
-        } else {
-          NXPLOG_FWDNLD_E("Write Request Failed!!");
-        }
-      } else {
-        NXPLOG_FWDNLD_E("Download Image Primitives extraction failed!!");
-        wStatus = NFCSTATUS_FAILED;
-      }
-    }
-  }
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_Log
-**
-** Description      Provides a full page free write to EEPROM
-**
-** Parameters       pData - data buffer to write into EEPROM/FLASH by user
-**                  pNotify - notify caller after getting response
-**                  pContext - caller context
-**
-** Returns          NFC status:
-**                  NFCSTATUS_SUCCESS - Write request to NFCC is successful
-**                  NFCSTATUS_FAILED - Write request failed due to internal
-**                                     error
-**                  NFCSTATUS_NOT_ALLOWED - command not allowed
-**                  Other command specific error
-**
-*******************************************************************************/
-NFCSTATUS phDnldNfc_Log(pphDnldNfc_Buff_t pData, pphDnldNfc_RspCb_t pNotify,
-                        void* pContext) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-
-  if ((NULL == pNotify) || (NULL == pData) || (NULL == pContext)) {
-    NXPLOG_FWDNLD_E("Invalid Input Parameters!!");
-    wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-  } else {
-    if (phDnldNfc_TransitionIdle != gpphDnldContext->tDnldInProgress) {
-      NXPLOG_FWDNLD_E("Dnld Cmd Request in Progress..Cannot Continue!!");
-      wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_BUSY);
-    } else {
-      if ((NULL != (pData->pBuff)) &&
-          ((0 != (pData->wLen) && (PHDNLDNFC_MAX_LOG_SIZE >= (pData->wLen))))) {
-        (gpphDnldContext->tCmdId) = PH_DL_CMD_LOG;
-        (gpphDnldContext->FrameInp.Type) = phDnldNfc_FTLog;
-        (gpphDnldContext->tRspBuffInfo.pBuff) = NULL;
-        (gpphDnldContext->tRspBuffInfo.wLen) = 0;
-        (gpphDnldContext->tUserData.pBuff) = (pData->pBuff);
-        (gpphDnldContext->tUserData.wLen) = (pData->wLen);
-
-        memset(&(gpphDnldContext->tRWInfo), 0,
-               sizeof(gpphDnldContext->tRWInfo));
-        (gpphDnldContext->UserCb) = pNotify;
-        (gpphDnldContext->UserCtxt) = pContext;
-
-        wStatus = phDnldNfc_CmdHandler(gpphDnldContext, phDnldNfc_EventLog);
-
-        if (NFCSTATUS_PENDING == wStatus) {
-          NXPLOG_FWDNLD_D("Log Request submitted successfully");
-        } else {
-          NXPLOG_FWDNLD_E("Log Request Failed!!");
-        }
-      } else {
-        NXPLOG_FWDNLD_E("Invalid Input Parameters for Log!!");
-        wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-      }
-    }
-  }
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_Force
-**
-** Description      Used as an emergency recovery procedure for NFCC due to
-**                  corrupt settings of system platform specific parameters by
-**                  the host
-**
-** Parameters       pInputs - input buffer which contains  clk src & clk freq
-**                            settings for desired platform
-**                  pNotify - notify caller after getting response
-**                  pContext - caller context
-**
-** Returns          NFC status:
-**                  NFCSTATUS_SUCCESS - Emergency Recovery request is successful
-**                  NFCSTATUS_FAILED - Emergency Recovery failed due to internal
-**                                     error
-**                  NFCSTATUS_NOT_ALLOWED - command not allowed
-**                  Other command specific errors
-**
-*******************************************************************************/
-NFCSTATUS phDnldNfc_Force(pphDnldNfc_Buff_t pInputs, pphDnldNfc_RspCb_t pNotify,
-                          void* pContext) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  uint8_t bClkSrc = 0x00, bClkFreq = 0x00;
-  uint8_t bPldVal[3] = {
-      0x11, 0x00, 0x00}; /* default values to be used if input not provided */
-
-  if ((NULL == pNotify) || (NULL == pContext)) {
-    NXPLOG_FWDNLD_E("Invalid Input Parameters!!");
-    wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-  } else {
-    if (phDnldNfc_TransitionIdle != gpphDnldContext->tDnldInProgress) {
-      NXPLOG_FWDNLD_E("Dnld Cmd Request in Progress..Cannot Continue!!");
-      wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_BUSY);
-    } else {
-      (gpphDnldContext->tCmdId) = PH_DL_CMD_FORCE;
-      (gpphDnldContext->FrameInp.Type) = phDnldNfc_FTForce;
-      (gpphDnldContext->tRspBuffInfo.pBuff) = NULL;
-      (gpphDnldContext->tRspBuffInfo.wLen) = 0;
-
-      if ((0 != (pInputs->wLen)) || (NULL != (pInputs->pBuff))) {
-        if (CLK_SRC_XTAL == (pInputs->pBuff[0])) {
-          bClkSrc = phDnldNfc_ClkSrcXtal;
-        } else if (CLK_SRC_PLL == (pInputs->pBuff[0])) {
-          bClkSrc = phDnldNfc_ClkSrcPLL;
-          if (CLK_FREQ_13MHZ == (pInputs->pBuff[1])) {
-            bClkFreq = phDnldNfc_ClkFreq_13Mhz;
-          } else if (CLK_FREQ_19_2MHZ == (pInputs->pBuff[1])) {
-            bClkFreq = phDnldNfc_ClkFreq_19_2Mhz;
-          } else if (CLK_FREQ_24MHZ == (pInputs->pBuff[1])) {
-            bClkFreq = phDnldNfc_ClkFreq_24Mhz;
-          } else if (CLK_FREQ_26MHZ == (pInputs->pBuff[1])) {
-            bClkFreq = phDnldNfc_ClkFreq_26Mhz;
-          } else if (CLK_FREQ_38_4MHZ == (pInputs->pBuff[1])) {
-            bClkFreq = phDnldNfc_ClkFreq_38_4Mhz;
-          } else if (CLK_FREQ_52MHZ == (pInputs->pBuff[1])) {
-            bClkFreq = phDnldNfc_ClkFreq_52Mhz;
-          } else {
-            NXPLOG_FWDNLD_E(
-                "Invalid Clk Frequency !! Using default value of 19.2Mhz..");
-            bClkFreq = phDnldNfc_ClkFreq_19_2Mhz;
-          }
-
-        } else if (CLK_SRC_PADDIRECT == (pInputs->pBuff[0])) {
-          bClkSrc = phDnldNfc_ClkSrcPad;
-        } else {
-          NXPLOG_FWDNLD_E("Invalid Clk src !! Using default value of PLL..");
-          bClkSrc = phDnldNfc_ClkSrcPLL;
-        }
-
-        bPldVal[0] = 0U;
-        bPldVal[0] = ((bClkSrc << 3U) | bClkFreq);
-      } else {
-        NXPLOG_FWDNLD_E("Clk src inputs not provided!! Using default values..");
-      }
-
-      (gpphDnldContext->tUserData.pBuff) = bPldVal;
-      (gpphDnldContext->tUserData.wLen) = sizeof(bPldVal);
-
-      memset(&(gpphDnldContext->tRWInfo), 0, sizeof(gpphDnldContext->tRWInfo));
-      (gpphDnldContext->UserCb) = pNotify;
-      (gpphDnldContext->UserCtxt) = pContext;
-
-      wStatus = phDnldNfc_CmdHandler(gpphDnldContext, phDnldNfc_EventForce);
-
-      if (NFCSTATUS_PENDING == wStatus) {
-        NXPLOG_FWDNLD_D("Force Command Request submitted successfully");
-      } else {
-        NXPLOG_FWDNLD_E("Force Command Request Failed!!");
-      }
-    }
-  }
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_SetHwDevHandle
-**
-** Description      Stores the HwDev handle to download context. The handle is
-**                  required for subsequent operations
-**
-** Parameters       None
-**
-** Returns          None                -
-**
-*******************************************************************************/
-void phDnldNfc_SetHwDevHandle(void) {
-  pphDnldNfc_DlContext_t psDnldContext = NULL;
-
-  if (NULL == gpphDnldContext) {
-    NXPLOG_FWDNLD_D("Allocating Mem for Dnld Context..");
-    /* Create the memory for Download Mgmt Context */
-    psDnldContext =
-        (pphDnldNfc_DlContext_t)malloc(sizeof(phDnldNfc_DlContext_t));
-
-    if (psDnldContext != NULL) {
-      (void)memset((void*)psDnldContext, 0, sizeof(phDnldNfc_DlContext_t));
-      gpphDnldContext = psDnldContext;
-    } else {
-      NXPLOG_FWDNLD_E("Error Allocating Mem for Dnld Context..")
-    }
-  } else {
-    (void)memset((void*)gpphDnldContext, 0, sizeof(phDnldNfc_DlContext_t));
-  }
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_ReSetHwDevHandle
-**
-** Description      Frees the HwDev handle to download context.
-**
-** Parameters       None
-**
-** Returns          None                -
-**
-*******************************************************************************/
-void phDnldNfc_ReSetHwDevHandle(void) {
-  if (gpphDnldContext != NULL) {
-    NXPLOG_FWDNLD_E("Freeing Mem for Dnld Context..")
-    free(gpphDnldContext);
-    gpphDnldContext = NULL;
-  }
-}
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_RawReq
-**
-** Description      Sends raw frame request to NFCC.
-**                  It is currently used for sending an NCI RESET cmd after
-**                  doing a production key update
-**
-** Parameters       pFrameData - input buffer, contains raw frame packet to be
-**                               sent to NFCC
-**                  pRspData - response buffer received from NFCC
-**                  pNotify - notify caller after getting response
-**                  pContext - caller context
-**
-** Returns          NFC status:
-**                  NFCSTATUS_SUCCESS - GetSessionState request to NFCC is
-**                                      successful
-**                  NFCSTATUS_FAILED - GetSessionState request failed due to
-**                                     internal error
-**                  NFCSTATUS_NOT_ALLOWED - command not allowed
-**                  Other command specific errors
-**
-*******************************************************************************/
-NFCSTATUS phDnldNfc_RawReq(pphDnldNfc_Buff_t pFrameData,
-                           pphDnldNfc_Buff_t pRspData,
-                           pphDnldNfc_RspCb_t pNotify, void* pContext) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-
-  if ((NULL == pFrameData) || (NULL == pNotify) || (NULL == pRspData) ||
-      (NULL == pContext)) {
-    NXPLOG_FWDNLD_E("Invalid Input Parameters!!");
-    wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-  } else {
-    if (phDnldNfc_TransitionIdle != gpphDnldContext->tDnldInProgress) {
-      NXPLOG_FWDNLD_E("Raw Cmd Request in Progress..Cannot Continue!!");
-      wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_BUSY);
-    } else {
-      if (((NULL != pFrameData->pBuff) && (0 != pFrameData->wLen)) &&
-          ((NULL != pRspData->pBuff) && (0 != pRspData->wLen))) {
-        (gpphDnldContext->tRspBuffInfo.pBuff) = pRspData->pBuff;
-        (gpphDnldContext->tRspBuffInfo.wLen) = pRspData->wLen;
-        (gpphDnldContext->FrameInp.Type) = phDnldNfc_FTRaw;
-        (gpphDnldContext->tCmdId) = PH_DL_CMD_NONE;
-        (gpphDnldContext->tUserData.pBuff) = pFrameData->pBuff;
-        (gpphDnldContext->tUserData.wLen) = pFrameData->wLen;
-        (gpphDnldContext->UserCb) = pNotify;
-        (gpphDnldContext->UserCtxt) = pContext;
-
-        wStatus = phDnldNfc_CmdHandler(gpphDnldContext, phDnldNfc_EventRaw);
-
-        if (NFCSTATUS_PENDING == wStatus) {
-          NXPLOG_FWDNLD_D("RawFrame Request submitted successfully");
-        } else {
-          NXPLOG_FWDNLD_E("RawFrame Request Failed!!");
-        }
-      } else {
-        NXPLOG_FWDNLD_E("Invalid Buff Parameters!!");
-        wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-      }
-    }
-  }
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_InitImgInfo
-**
-** Description      Extracts image information and stores it in respective
-**                  variables, to be used internally for write operation
-**
-** Parameters       None
-**
-** Returns          NFC status
-**
-*******************************************************************************/
-NFCSTATUS phDnldNfc_InitImgInfo(void) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  uint8_t* pImageInfo = NULL;
-  uint16_t ImageInfoLen = 0;
-  char fwFileName[256];
-  char fwpathName[256];
-  char* pathName = NULL;
-
-  /* if memory is not allocated then allocate memory for download context
-   * structure */
-  phDnldNfc_SetHwDevHandle();
-
-  /*Read Firmware file name from config file*/
-  if (GetNxpStrValue(NAME_NXP_FW_NAME, fwFileName, sizeof(fwFileName)) ==
-      true) {
-    strcpy(fwpathName, FW_DLL_ROOT_DIR);
-    strncat(fwpathName, fwFileName, strlen(fwFileName));
-    pathName = fwpathName;
-  }
-
-/* load the library and get the image info pointer */
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-  if (gRecFWDwnld == true)
-    wStatus = phDnldNfc_LoadRecoveryFW(pathName, &pImageInfo, &ImageInfoLen);
-  else
-#endif
-    wStatus = phDnldNfc_LoadFW(pathName, &pImageInfo, &ImageInfoLen);
-
-  NXPLOG_FWDNLD_E("FW Image Length - ImageInfoLen %d", ImageInfoLen);
-  NXPLOG_FWDNLD_E("FW Image Info Pointer - pImageInfo %p", pImageInfo);
-
-  if ((pImageInfo == NULL) || (ImageInfoLen == 0)) {
-    NXPLOG_FWDNLD_E(
-        "Image extraction Failed - invalid imginfo or imginfolen!!");
-    wStatus = NFCSTATUS_FAILED;
-  }
-
-  if (wStatus != NFCSTATUS_SUCCESS) {
-    NXPLOG_FWDNLD_E("Error loading libpn54x_fw !!\n");
-  }
-
-  /* get the MW version */
-  if (NFCSTATUS_SUCCESS == wStatus) {
-    // NXPLOG_FWDNLD_D("MW Major Version Num - %x",NXP_MW_VERSION_MAJ);
-    // NXPLOG_FWDNLD_D("MW Minor Version Num - %x",NXP_MW_VERSION_MIN);
-    wMwVer = (((uint16_t)(NXP_MW_VERSION_MAJ) << 8U) | (NXP_MW_VERSION_MIN));
-  }
-
-  if (NFCSTATUS_SUCCESS == wStatus) {
-    gpphDnldContext->nxp_nfc_fw = (uint8_t*)pImageInfo;
-    gpphDnldContext->nxp_nfc_fw_len = ImageInfoLen;
-    if ((NULL != gpphDnldContext->nxp_nfc_fw) &&
-        (0 != gpphDnldContext->nxp_nfc_fw_len)) {
-      NXPLOG_FWDNLD_E("FW Major Version Num - %x",
-                      gpphDnldContext->nxp_nfc_fw[5]);
-      NXPLOG_FWDNLD_E("FW Minor Version Num - %x",
-                      gpphDnldContext->nxp_nfc_fw[4]);
-      NXPLOG_FWDNLD_E("FW Image Length - %d", ImageInfoLen);
-      NXPLOG_FWDNLD_E("FW Image Info Pointer - %p", pImageInfo);
-
-      /* get the FW version */
-      wFwVer = (((uint16_t)(gpphDnldContext->nxp_nfc_fw[5]) << 8U) |
-                (gpphDnldContext->nxp_nfc_fw[4]));
-      wStatus = NFCSTATUS_SUCCESS;
-    } else {
-      NXPLOG_FWDNLD_E("Image details extraction Failed!!");
-      wStatus = NFCSTATUS_FAILED;
-    }
-  }
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_LoadRecInfo
-**
-** Description      Extracts recovery sequence image information and stores it
-**                  in respective variables, to be used internally for write
-**                  operation
-**
-** Parameters       None
-**
-** Returns          NFC status
-**
-*******************************************************************************/
-NFCSTATUS phDnldNfc_LoadRecInfo(void) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  uint8_t* pImageInfo = NULL;
-  uint16_t ImageInfoLen = 0;
-
-  /* if memory is not allocated then allocate memory for donwload context
-   * structure */
-  phDnldNfc_SetHwDevHandle();
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-  if (gRecFWDwnld == true)
-    wStatus =
-        phDnldNfc_LoadRecoveryFW(PLATFORM_LIB_PATH, &pImageInfo, &ImageInfoLen);
-  else
-#endif
-    wStatus = phDnldNfc_LoadFW(PLATFORM_LIB_PATH, &pImageInfo, &ImageInfoLen);
-  if ((pImageInfo == NULL) || (ImageInfoLen == 0)) {
-    NXPLOG_FWDNLD_E(
-        "Image extraction Failed - invalid imginfo or imginfolen!!");
-    wStatus = NFCSTATUS_FAILED;
-  }
-
-  /* load the PLL recovery image library */
-  if (wStatus != NFCSTATUS_SUCCESS) {
-    NXPLOG_FWDNLD_E("Error loading libpn54x_fw_platform !!\n");
-  }
-
-  if (NFCSTATUS_SUCCESS == wStatus) {
-    /* fetch the PLL recovery image pointer and the image length */
-    gpphDnldContext->nxp_nfc_fwp = (uint8_t*)pImageInfo;
-    gpphDnldContext->nxp_nfc_fwp_len = ImageInfoLen;
-    if ((NULL != gpphDnldContext->nxp_nfc_fwp) &&
-        (0 != gpphDnldContext->nxp_nfc_fwp_len)) {
-      NXPLOG_FWDNLD_D("Recovery Image Length - %d", ImageInfoLen);
-      NXPLOG_FWDNLD_D("Recovery Image Info Pointer - %p", pImageInfo);
-      wStatus = NFCSTATUS_SUCCESS;
-    } else {
-      NXPLOG_FWDNLD_E("Recovery Image details extraction Failed!!");
-      wStatus = NFCSTATUS_FAILED;
-    }
-  }
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_LoadPKInfo
-**
-** Description      Extracts production sequence image information and stores it
-**                  in respective variables, to be used internally for write
-**                  operation
-**
-** Parameters       None
-**
-** Returns          NFC status
-**
-*******************************************************************************/
-NFCSTATUS phDnldNfc_LoadPKInfo(void) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  uint8_t* pImageInfo = NULL;
-  uint16_t ImageInfoLen = 0;
-
-  /* if memory is not allocated then allocate memory for donwload context
-   * structure */
-  phDnldNfc_SetHwDevHandle();
-
-/* load the PKU image library */
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-  if (gRecFWDwnld == true)
-    wStatus =
-        phDnldNfc_LoadRecoveryFW(PKU_LIB_PATH, &pImageInfo, &ImageInfoLen);
-  else
-#endif
-    wStatus = phDnldNfc_LoadFW(PKU_LIB_PATH, &pImageInfo, &ImageInfoLen);
-  if ((pImageInfo == NULL) || (ImageInfoLen == 0)) {
-    NXPLOG_FWDNLD_E(
-        "Image extraction Failed - invalid imginfo or imginfolen!!");
-    wStatus = NFCSTATUS_FAILED;
-  }
-
-  if (wStatus != NFCSTATUS_SUCCESS) {
-    NXPLOG_FWDNLD_E("Error loading libpn54x_fw_pku !!\n");
-  }
-
-  if (NFCSTATUS_SUCCESS == wStatus) {
-    /* fetch the PKU image pointer and the image length */
-    gpphDnldContext->nxp_nfc_fwp = (uint8_t*)pImageInfo;
-    gpphDnldContext->nxp_nfc_fwp_len = ImageInfoLen;
-
-    if ((NULL != gpphDnldContext->nxp_nfc_fwp) &&
-        (0 != gpphDnldContext->nxp_nfc_fwp_len)) {
-      NXPLOG_FWDNLD_D("PKU Image Length - %d", ImageInfoLen);
-      NXPLOG_FWDNLD_D("PKU Image Info Pointer - %p", pImageInfo);
-      wStatus = NFCSTATUS_SUCCESS;
-    } else {
-      NXPLOG_FWDNLD_E("PKU Image details extraction Failed!!");
-      wStatus = NFCSTATUS_FAILED;
-    }
-  }
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_CloseFwLibHandle
-**
-** Description      Closes previously opened fw library handle as part of
-**                  dynamic loader processing
-**
-** Parameters       None
-**
-** Returns          None
-**
-*******************************************************************************/
-void phDnldNfc_CloseFwLibHandle(void) {
-  NFCSTATUS wStatus;
-
-  wStatus = phDnldNfc_UnloadFW();
-  if (wStatus != NFCSTATUS_SUCCESS) {
-    NXPLOG_FWDNLD_E("free library FAILED !!\n");
-  } else {
-    NXPLOG_FWDNLD_E("free library SUCCESS !!\n");
-  }
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_LoadFW
-**
-** Description      Load the firmware version form firmware lib
-**
-** Parameters       pathName    - Firmware image path
-**                  pImgInfo    - Firmware image handle
-**                  pImgInfoLen - Firmware image length
-**
-** Returns          NFC status
-**
-*******************************************************************************/
-NFCSTATUS phDnldNfc_LoadFW(const char* pathName, uint8_t** pImgInfo,
-                           uint16_t* pImgInfoLen) {
-  void* pImageInfo = NULL;
-  void* pImageInfoLen = NULL;
-  if (pathName == NULL) {
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-    pathName = "/system/vendor/firmware/libpn548ad_fw.so";
-#elif (NFC_NXP_CHIP_TYPE == PN551)
-    pathName = "/system/vendor/firmware/libpn551_fw.so";
-#elif (NFC_NXP_CHIP_TYPE == PN553)
-    pathName = "/system/vendor/firmware/libpn553_fw.so";
-#else
-    pathName = "/system/vendor/firmware/libpn547_fw.so";
-#endif
-  }
-
-  /* check if the handle is not NULL then free the library */
-  if (pFwLibHandle != NULL) {
-    phDnldNfc_UnloadFW();
-    pFwLibHandle = NULL;
-  }
-
-  /* load the DLL file */
-  pFwLibHandle = dlopen(pathName, RTLD_LAZY);
-  NXPLOG_FWDNLD_D("@@@%s", pathName);
-
-  /* if library load failed then handle will be NULL */
-  if (pFwLibHandle == NULL) {
-    NXPLOG_FWDNLD_E(
-        "NULL handler : unable to load the library file, specify correct path");
-    return NFCSTATUS_FAILED;
-  }
-
-  dlerror(); /* Clear any existing error */
-
-  /* load the address of download image pointer and image size */
-  pImageInfo = (void*)dlsym(pFwLibHandle, "gphDnldNfc_DlSeq");
-
-  if (dlerror() || (NULL == pImageInfo)) {
-    NXPLOG_FWDNLD_E("Problem loading symbol : gphDnldNfc_DlSeq");
-    return NFCSTATUS_FAILED;
-  }
-  (*pImgInfo) = (*(uint8_t**)pImageInfo);
-
-  pImageInfoLen = (void*)dlsym(pFwLibHandle, "gphDnldNfc_DlSeqSz");
-  if (dlerror() || (NULL == pImageInfoLen)) {
-    NXPLOG_FWDNLD_E("Problem loading symbol : gphDnldNfc_DlSeqSz");
-    return NFCSTATUS_FAILED;
-  }
-
-  (*pImgInfoLen) = (uint16_t)(*((uint16_t*)pImageInfoLen));
-
-  return NFCSTATUS_SUCCESS;
-}
-
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-/*******************************************************************************
-**
-** Function         phDnldNfc_LoadRecoveryFW
-**
-** Description      Load the dummy firmware version form firmware lib for
-**                  recovery. This will change the FW version of the NFCC
-**                  firmware and enable flashing of firmware of same version.
-**
-** Parameters       pathName    - Firmware image path
-**                  pImgInfo    - Firmware image handle
-**                  pImgInfoLen - Firmware image length
-**
-** Returns          NFCSTATUS
-**
-*******************************************************************************/
-NFCSTATUS phDnldNfc_LoadRecoveryFW(const char* pathName, uint8_t** pImgInfo,
-                                   uint16_t* pImgInfoLen) {
-  void* pImageInfo = NULL;
-  void* pImageInfoLen = NULL;
-
-  /* check for path name */
-  if (pathName == NULL) {
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-    pathName = "/system/vendor/firmware/libpn548ad_fw.so";
-#elif (NFC_NXP_CHIP_TYPE == PN551)
-    pathName = "/system/vendor/firmware/libpn551_fw.so";
-#elif (NFC_NXP_CHIP_TYPE == PN553)
-    pathName = "/system/vendor/firmware/libpn553_fw.so";
-#else
-    pathName = "/system/vendor/firmware/libpn547_fw.so";
-#endif
-  }
-
-  /* check if the handle is not NULL then free the library */
-  if (pFwLibHandle != NULL) {
-    phDnldNfc_UnloadFW();
-    pFwLibHandle = NULL;
-  }
-  /* load the DLL file */
-  pFwLibHandle = dlopen(pathName, RTLD_LAZY);
-  NXPLOG_FWDNLD_D("phDnldNfc_LoadRecoveryFW %s ", pathName);
-
-  /* if library load failed then handle will be NULL */
-  if (pFwLibHandle == NULL) {
-    NXPLOG_FWDNLD_E(
-        "NULL handler : unable to load the library file, specify correct path");
-    return NFCSTATUS_FAILED;
-  }
-
-  dlerror(); /* Clear any existing error */
-
-  /* load the address of download image pointer and image size */
-  pImageInfo = (void*)dlsym(pFwLibHandle, "gphDnldNfc_DummyDlSeq");
-
-  if (dlerror() || (NULL == pImageInfo)) {
-    NXPLOG_FWDNLD_E("Problem loading symbol : gphDnldNfc_DummyDlSeq");
-    return NFCSTATUS_FAILED;
-  }
-
-  (*pImgInfo) = (*(uint8_t**)pImageInfo);
-  pImageInfoLen = (void*)dlsym(pFwLibHandle, "gphDnldNfc_DlSeqDummyFwSz");
-  if (dlerror() || (NULL == pImageInfoLen)) {
-    NXPLOG_FWDNLD_E("Problem loading symbol : gphDnldNfc_DlSeqDummyFwSz");
-    return NFCSTATUS_FAILED;
-  }
-
-  (*pImgInfoLen) = (uint16_t)(*((uint16_t*)pImageInfoLen));
-
-  return NFCSTATUS_SUCCESS;
-}
-#endif
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_UnloadFW
-**
-** Description      Deinit the firmware handle
-**
-** Parameters       None
-**
-** Returns          NFC status
-**
-*******************************************************************************/
-NFCSTATUS phDnldNfc_UnloadFW(void) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  int32_t status;
-
-  /* check if the handle is not NULL then free the library */
-  if (pFwLibHandle != NULL) {
-    status = dlclose(pFwLibHandle);
-    pFwLibHandle = NULL;
-
-    dlerror(); /* Clear any existing error */
-    if (status != 0) {
-      wStatus = NFCSTATUS_FAILED;
-      NXPLOG_FWDNLD_E("Free library file failed");
-    }
-  }
-
-  return wStatus;
-}
-
-#ifdef EEPROM_Read_Mem_IMP
-/*******************************************************************************
-**
-** Function         phDnldNfc_ReadMem
-**
-** Description      Dumps the contents of EEPROM. The handle is required for
-**                  subsequent operations
-**
-** Parameters       pHwRef - pointer to the hardware device
-**                  pNotify - notify caller after getting response
-**                  pContext - caller context
-**
-** Returns          NFC status:
-**                  NFCSTATUS_SUCCESS - request to NFCC is successful
-**                  NFCSTATUS_FAILED - request failed due to internal error
-**                  NFCSTATUS_NOT_ALLOWED - command not allowed
-**                  Other command specific errors
-**
-*******************************************************************************/
-NFCSTATUS phDnldNfc_ReadMem(void* pHwRef, pphDnldNfc_RspCb_t pNotify,
-                            void* pContext) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  uint32_t wAddr = 0x2011C0; /* eeprom platform specific area start address */
-  uint32_t wRdAddr = 0;
-  uint8_t* pAddr;
-  static uint8_t bRdData[3519]; /* buffer to hold the read data */
-  static phDnldNfc_Buff_t Data;
-
-  if ((NULL == pNotify) || (NULL == pContext)) {
-    NXPLOG_FWDNLD_E("Invalid Input Parameters!!");
-    wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-  } else {
-    /* Call Tml Ioctl to enable download mode */
-    wStatus = phTmlNfc_IoCtl(phTmlNfc_e_EnableDownloadMode);
-
-    if (NFCSTATUS_SUCCESS == wStatus) {
-      /* Set the obtained device handle to download module */
-      phDnldNfc_SetHwDevHandle();
-    } else {
-      wStatus = NFCSTATUS_FAILED;
-    }
-
-    if (NFCSTATUS_SUCCESS == wStatus) {
-      pAddr = (uint8_t*)&wAddr;
-
-      wRdAddr = (pAddr[3]);
-      wRdAddr <<= 8;
-      wRdAddr |= (pAddr[2]);
-      wRdAddr <<= 8;
-      wRdAddr |= (pAddr[1]);
-      wRdAddr <<= 8;
-      wRdAddr |= (pAddr[0]);
-
-      Data.pBuff = bRdData;
-      Data.wLen = sizeof(bRdData);
-      UserCb = pNotify;
-      UserCtxt = pContext;
-
-      wStatus = phDnldNfc_Read(&Data, wRdAddr,
-                               (pphDnldNfc_RspCb_t)phDnldNfc_ReadComplete,
-                               gpphDnldContext);
-    } else {
-      Data.pBuff = NULL;
-      Data.wLen = 0;
-      wStatus = NFCSTATUS_FAILED;
-    }
-
-    if (NFCSTATUS_PENDING == wStatus) {
-      NXPLOG_FWDNLD_D("Read Request submitted successfully..");
-    } else {
-      NXPLOG_FWDNLD_E("Read Request submission failed!!");
-    }
-  }
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_ReadComplete
-**
-** Description      Read complete
-**
-** Parameters       pContext - caller layer context
-**                  status   - status of the transaction
-**                  pInfo    - transaction info
-**
-** Returns          None
-**
-*******************************************************************************/
-static void phDnldNfc_ReadComplete(void* pContext, NFCSTATUS status,
-                                   void* pInfo) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  UNUSED(pContext);
-
-  /* Call Tml Ioctl to enable/restore normal mode */
-  wStatus = phTmlNfc_IoCtl(phTmlNfc_e_EnableNormalMode);
-
-  if (NFCSTATUS_SUCCESS == wStatus) {
-    NXPLOG_FWDNLD_D("Read Done!!");
-  }
-
-  UserCb(&UserCtxt, status, pInfo);
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_Read
-**
-** Description      Retrieves requested data of specified length from desired
-**                  EEPROM address
-**
-** Parameters       pData - response buffer which gets updated with data from
-**                          EEPROM
-**                  dwRdAddr - EEPROM address for data read
-**                  pNotify - notify caller after getting response
-**                  pContext - caller context
-**
-** Returns          NFC status:
-**                  NFCSTATUS_SUCCESS - Read request to NFCC is successful
-**                  NFCSTATUS_FAILED - Read request failed due to internal error
-**                  NFCSTATUS_NOT_ALLOWED - command not allowed
-**                  Other command specific errors
-**
-*******************************************************************************/
-NFCSTATUS phDnldNfc_Read(pphDnldNfc_Buff_t pData, uint32_t dwRdAddr,
-                         pphDnldNfc_RspCb_t pNotify, void* pContext) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-
-  if ((NULL == pNotify) || (NULL == pData) || (NULL == pContext)) {
-    NXPLOG_FWDNLD_E("Invalid Input Parameters!!");
-    wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-  } else {
-    if (phDnldNfc_TransitionIdle != gpphDnldContext->tDnldInProgress) {
-      NXPLOG_FWDNLD_E("Dnld Cmd Request in Progress..Cannot Continue!!");
-      wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_BUSY);
-    } else {
-      if ((NULL != pData->pBuff) && (0 != pData->wLen)) {
-        (gpphDnldContext->tCmdId) = PH_DL_CMD_READ;
-        (gpphDnldContext->FrameInp.Type) = phDnldNfc_FTRead;
-        (gpphDnldContext->FrameInp.dwAddr) = dwRdAddr;
-        (gpphDnldContext->tRspBuffInfo.pBuff) = pData->pBuff;
-        (gpphDnldContext->tRspBuffInfo.wLen) = pData->wLen;
-        (gpphDnldContext->tUserData.pBuff) = NULL;
-        (gpphDnldContext->tUserData.wLen) = 0;
-        (gpphDnldContext->UserCb) = pNotify;
-        (gpphDnldContext->UserCtxt) = pContext;
-
-        memset(&(gpphDnldContext->tRWInfo), 0,
-               sizeof(gpphDnldContext->tRWInfo));
-
-        wStatus = phDnldNfc_CmdHandler(gpphDnldContext, phDnldNfc_EventRead);
-
-        if (NFCSTATUS_PENDING == wStatus) {
-          NXPLOG_FWDNLD_D("Read Request submitted successfully");
-        } else {
-          NXPLOG_FWDNLD_E("Read Request Failed!!");
-        }
-      } else {
-        NXPLOG_FWDNLD_E("Invalid Buff Parameters!!");
-        wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-      }
-    }
-  }
-
-  return wStatus;
-}
-#endif
diff --git a/halimpl/pn54x/dnld/phDnldNfc.h b/halimpl/pn54x/dnld/phDnldNfc.h
deleted file mode 100644
index 5b7e420..0000000
--- a/halimpl/pn54x/dnld/phDnldNfc.h
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright (C) 2010-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * Firmware Download Interface File
- */
-#ifndef PHDNLDNFC_H
-#define PHDNLDNFC_H
-
-#include <phNfcStatus.h>
-
-/*
- *
- * Callback for handling the received data/response from PN54X.
- * Parameters to be passed/registered to download context during respective
- * download function call:
- *      pContext - Upper layer context
- *      wStatus  - Status of the transaction
- *      pInfo    - Contains the Transaction Info
- */
-typedef void (*pphDnldNfc_RspCb_t)(void* pContext, NFCSTATUS wStatus,
-                                   void* pInfo);
-
-#define PHLIBNFC_FWDNLD_SESSNOPEN (0x01U)   /* download session is Open */
-#define PHLIBNFC_FWDNLD_SESSNCLOSED (0x00U) /* download session is Closed */
-
-#define PHDNLDNFC_HWVER_MRA1_0 (0x01U) /* ChipVersion MRA1.0 */
-#define PHDNLDNFC_HWVER_MRA1_1 (0x02U) /* ChipVersion MRA1.1 */
-#define PHDNLDNFC_HWVER_MRA2_0 (0x03U) /* ChipVersion MRA2.0 */
-#define PHDNLDNFC_HWVER_MRA2_1 (0x04U) /* ChipVersion MRA2.1 */
-#define PHDNLDNFC_HWVER_MRA2_2 (0x05U) /* ChipVersion MRA2.2 */
-
-/* PN548AD ChipVersion MRA1.0 */
-#define PHDNLDNFC_HWVER_PN548AD_MRA1_0 (0x08U)
-
-/* PN551 ChipVersion MRA1.0 */
-#define PHDNLDNFC_HWVER_PN551_MRA1_0 (0x08U)
-/* PN553-NCI1.0 ChipVersion MRA1.0 */
-#define PHDNLDNFC_HWVER_PN553_MRA1_0 (0x0BU)
-/* PN553 A0 -> 0x40 hardware version
-   PN553 B0 -> 0x41
-   PN80T A0 -> 0x50
-   PN80T B0 -> 0x51 */
-#define PHDNLDNFC_HWVER_PN553_MRA1_0_UPDATED (0x40U)
-/*
- * Enum definition contains Download Life Cycle States
- */
-typedef enum phDnldNfc_LC {
-  phDnldNfc_LCCreat = 11, /* Life Cycle Creation*/
-  phDnldNfc_LCInit = 13,  /* Life Cycle Initializing */
-  phDnldNfc_LCOper = 17,  /* Life Cycle Operational */
-  phDnldNfc_LCTerm = 19   /* Life Cycle Termination */
-} phDnldNfc_LC_t;
-
-/*
- * Enum definition contains Clk Source Options for Force command request
- */
-typedef enum phDnldNfc_ClkSrc {
-  phDnldNfc_ClkSrcXtal = 1U, /* Crystal */
-  phDnldNfc_ClkSrcPLL = 2U,  /* PLL output */
-  phDnldNfc_ClkSrcPad = 3U   /* Directly use clk on CLK_IN Pad */
-} phDnldNfc_ClkSrc_t;
-
-/*
- * Enum definition contains Clk Frequency value for Force command request
- */
-typedef enum phDnldNfc_ClkFreq {
-  phDnldNfc_ClkFreq_13Mhz = 0U,   /* 13Mhz Clk Frequency */
-  phDnldNfc_ClkFreq_19_2Mhz = 1U, /* 19.2Mhz Clk Frequency */
-  phDnldNfc_ClkFreq_24Mhz = 2U,   /* 24Mhz Clk Frequency */
-  phDnldNfc_ClkFreq_26Mhz = 3U,   /* 26Mhz Clk Frequency */
-  phDnldNfc_ClkFreq_38_4Mhz = 4U, /* 38.4Mhz Clk Frequency */
-  phDnldNfc_ClkFreq_52Mhz = 5U    /* 52Mhz Clk Frequency */
-} phDnldNfc_ClkFreq_t;
-
-/*
- * Struct contains buffer where user payload shall be stored
- */
-typedef struct phDnldNfc_Buff {
-  uint8_t* pBuff; /*pointer to the buffer where user payload shall be stored*/
-  uint16_t wLen;  /*Buffer length*/
-} phDnldNfc_Buff_t, *pphDnldNfc_Buff_t; /* pointer to #phDnldNfc_Buff_t */
-
-/*
-*********************** Function Prototype Declaration *************************
-*/
-
-extern NFCSTATUS phDnldNfc_Reset(pphDnldNfc_RspCb_t pNotify, void* pContext);
-extern NFCSTATUS phDnldNfc_GetVersion(pphDnldNfc_Buff_t pVersionInfo,
-                                      pphDnldNfc_RspCb_t pNotify,
-                                      void* pContext);
-extern NFCSTATUS phDnldNfc_CheckIntegrity(uint8_t bChipVer,
-                                          pphDnldNfc_Buff_t pCRCData,
-                                          pphDnldNfc_RspCb_t pNotify,
-                                          void* pContext);
-extern NFCSTATUS phDnldNfc_GetSessionState(pphDnldNfc_Buff_t pSession,
-                                           pphDnldNfc_RspCb_t pNotify,
-                                           void* pContext);
-extern NFCSTATUS phDnldNfc_Force(pphDnldNfc_Buff_t pInputs,
-                                 pphDnldNfc_RspCb_t pNotify, void* pContext);
-extern NFCSTATUS phDnldNfc_Read(pphDnldNfc_Buff_t pData, uint32_t dwRdAddr,
-                                pphDnldNfc_RspCb_t pNotify, void* pContext);
-extern NFCSTATUS phDnldNfc_ReadLog(pphDnldNfc_Buff_t pData,
-                                   pphDnldNfc_RspCb_t pNotify, void* pContext);
-extern NFCSTATUS phDnldNfc_Write(bool_t bRecoverSeq, pphDnldNfc_Buff_t pData,
-                                 pphDnldNfc_RspCb_t pNotify, void* pContext);
-extern NFCSTATUS phDnldNfc_Log(pphDnldNfc_Buff_t pData,
-                               pphDnldNfc_RspCb_t pNotify, void* pContext);
-extern void phDnldNfc_SetHwDevHandle(void);
-void phDnldNfc_ReSetHwDevHandle(void);
-extern NFCSTATUS phDnldNfc_ReadMem(void* pHwRef, pphDnldNfc_RspCb_t pNotify,
-                                   void* pContext);
-extern NFCSTATUS phDnldNfc_RawReq(pphDnldNfc_Buff_t pFrameData,
-                                  pphDnldNfc_Buff_t pRspData,
-                                  pphDnldNfc_RspCb_t pNotify, void* pContext);
-extern NFCSTATUS phDnldNfc_InitImgInfo(void);
-extern NFCSTATUS phDnldNfc_LoadRecInfo(void);
-extern NFCSTATUS phDnldNfc_LoadPKInfo(void);
-extern void phDnldNfc_CloseFwLibHandle(void);
-extern NFCSTATUS phDnldNfc_LoadFW(const char* pathName, uint8_t** pImgInfo,
-                                  uint16_t* pImgInfoLen);
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-extern NFCSTATUS phDnldNfc_LoadRecoveryFW(const char* pathName,
-                                          uint8_t** pImgInfo,
-                                          uint16_t* pImgInfoLen);
-#endif
-extern NFCSTATUS phDnldNfc_UnloadFW(void);
-#endif /* PHDNLDNFC_H */
diff --git a/halimpl/pn54x/dnld/phDnldNfc_Cmd.h b/halimpl/pn54x/dnld/phDnldNfc_Cmd.h
deleted file mode 100644
index 31992f6..0000000
--- a/halimpl/pn54x/dnld/phDnldNfc_Cmd.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2010-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * Firmware Download command values
- */
-
-#ifndef PHDNLDNFC_CMD_H
-#define PHDNLDNFC_CMD_H
-
-#include <phNfcStatus.h>
-
-/*
- * Enum definition contains Firmware Download Command Ids
- */
-typedef enum phDnldNfc_CmdId {
-  PH_DL_CMD_NONE = 0x00,           /* Invalid Cmd */
-  PH_DL_CMD_RESET = 0xF0,          /* Reset */
-  PH_DL_CMD_GETVERSION = 0xF1,     /* Get Version */
-  PH_DL_CMD_CHECKINTEGRITY = 0xE0, /* Check Integrity */
-  PH_DL_CMD_WRITE = 0xC0,          /* Write */
-  PH_DL_CMD_READ = 0xA2,           /* Read */
-  PH_DL_CMD_LOG = 0xA7,            /* Log */
-  PH_DL_CMD_FORCE = 0xD0,          /* Force */
-  PH_DL_CMD_GETSESSIONSTATE = 0xF2 /* Get Session State */
-} phDnldNfc_CmdId_t;
-
-#endif /* PHDNLDNFC_CMD_H */
diff --git a/halimpl/pn54x/dnld/phDnldNfc_Internal.c b/halimpl/pn54x/dnld/phDnldNfc_Internal.c
deleted file mode 100644
index 2a66af1..0000000
--- a/halimpl/pn54x/dnld/phDnldNfc_Internal.c
+++ /dev/null
@@ -1,1215 +0,0 @@
-/*
- * Copyright (C) 2010-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * Internal Download Management routines
- * Download Component
- */
-
-#include <phDnldNfc_Internal.h>
-#include <phDnldNfc_Utils.h>
-#include <phNxpLog.h>
-#include <phNxpNciHal_utils.h>
-#include <phTmlNfc.h>
-
-/* Minimum length of payload including 1 byte CmdId */
-#define PHDNLDNFC_MIN_PLD_LEN (0x04U)
-
-/* Offset of Length byte within the frame */
-#define PHDNLDNFC_FRAME_HDR_OFFSET (0x00)
-/* Offset of FrameId within the frame */
-#define PHDNLDNFC_FRAMEID_OFFSET (PHDNLDNFC_FRAME_HDR_LEN)
-/* Offset of status byte within the frame */
-#define PHDNLDNFC_FRAMESTATUS_OFFSET PHDNLDNFC_FRAMEID_OFFSET
-/* Offset within frame where payload starts*/
-#define PHDNLDNFC_PLD_OFFSET (PHDNLDNFC_MIN_PLD_LEN - 1)
-
-#define PHDNLDNFC_FRAME_RDDATA_OFFSET \
-  ((PHDNLDNFC_FRAME_HDR_LEN) +        \
-   (PHDNLDNFC_MIN_PLD_LEN)) /* recvd frame offset where data starts */
-
-/* Size of first secure write frame Signature */
-#define PHDNLDNFC_FRAME_SIGNATURE_SIZE (0xC0U)
-/* Size of first secure write frame payload */
-#define PHDNLDNFC_FIRST_FRAME_PLD_SIZE (0xE4U)
-
-/* Status response for first fragmented write frame */
-#define PHDNLDNFC_FIRST_FRAGFRAME_RESP (0x2DU)
-/* Status response for subsequent fragmented write frame */
-#define PHDNLDNFC_NEXT_FRAGFRAME_RESP (0x2EU)
-
-#define PHDNLDNFC_SET_HDR_FRAGBIT(n) \
-  ((n) | (1 << 10)) /* Header chunk bit set macro */
-#define PHDNLDNFC_CLR_HDR_FRAGBIT(n) \
-  ((n) & ~(1U << 10)) /* Header chunk bit clear macro */
-#define PHDNLDNFC_CHK_HDR_FRAGBIT(n) \
-  ((n)&0x04) /* macro to check if frag bit is set in Hdr */
-
-/* Timeout value to wait for response from NFCC */
-#define PHDNLDNFC_RSP_TIMEOUT (2500)
-/* Timeout value to wait before resending the last frame */
-#define PHDNLDNFC_RETRY_FRAME_WRITE (50)
-
-/* size of EEPROM user data length */
-#define PHDNLDNFC_USERDATA_EEPROM_LENSIZE (0x02U)
-/* size of EEPROM offset */
-#define PHDNLDNFC_USERDATA_EEPROM_OFFSIZE (0x02U)
-
-#ifdef NXP_PN547C1_DOWNLOAD
-/* EEPROM offset and length value for PN547C1 */
-/* 16 bits offset indicating user data area start location */
-#define PHDNLDNFC_USERDATA_EEPROM_OFFSET (0x003CU)
-/* 16 bits length of user data area */
-#define PHDNLDNFC_USERDATA_EEPROM_LEN (0x0DC0U)
-#else
-
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-/* EEPROM offset and length value for PN548AD */
-/* 16 bits offset indicating user data area start location */
-#define PHDNLDNFC_USERDATA_EEPROM_OFFSET (0x02BCU)
-/* 16 bits length of user data area */
-#define PHDNLDNFC_USERDATA_EEPROM_LEN (0x0C00U)
-#elif (NFC_NXP_CHIP_TYPE == PN551)
-/* EEPROM offset and length value for PN551 */
-/* 16 bits offset indicating user data area start location */
-#define PHDNLDNFC_USERDATA_EEPROM_OFFSET (0x02BCU)
-/* 16 bits length of user data area */
-#define PHDNLDNFC_USERDATA_EEPROM_LEN (0x0C00U)
-#else
-/* EEPROM offset and length value for PN547C2 */
-/* 16 bits offset indicating user data area start location */
-#define PHDNLDNFC_USERDATA_EEPROM_OFFSET (0x023CU)
-/* 16 bits length of user data area */
-#define PHDNLDNFC_USERDATA_EEPROM_LEN (0x0C80U)
-#endif
-
-#endif
-#define PH_LIBNFC_VEN_RESET_ON_DOWNLOAD_TIMEOUT (1)
-
-/* Function prototype declarations */
-static void phDnldNfc_ProcessSeqState(void* pContext,
-                                      phTmlNfc_TransactInfo_t* pInfo);
-static void phDnldNfc_ProcessRWSeqState(void* pContext,
-                                        phTmlNfc_TransactInfo_t* pInfo);
-static NFCSTATUS phDnldNfc_ProcessFrame(void* pContext,
-                                        phTmlNfc_TransactInfo_t* pInfo);
-static NFCSTATUS phDnldNfc_ProcessRecvInfo(void* pContext,
-                                           phTmlNfc_TransactInfo_t* pInfo);
-static NFCSTATUS phDnldNfc_BuildFramePkt(pphDnldNfc_DlContext_t pDlContext);
-static NFCSTATUS phDnldNfc_CreateFramePld(pphDnldNfc_DlContext_t pDlContext);
-static NFCSTATUS phDnldNfc_SetupResendTimer(pphDnldNfc_DlContext_t pDlContext);
-static NFCSTATUS phDnldNfc_UpdateRsp(pphDnldNfc_DlContext_t pDlContext,
-                                     phTmlNfc_TransactInfo_t* pInfo,
-                                     uint16_t wPldLen);
-static void phDnldNfc_RspTimeOutCb(uint32_t TimerId, void* pContext);
-static void phDnldNfc_ResendTimeOutCb(uint32_t TimerId, void* pContext);
-
-/*
-*************************** Function Definitions ***************************
-*/
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_CmdHandler
-**
-** Description      Download Command Handler Mechanism
-**                  - holds the sub states for each command processing
-**                  - coordinates with TML download thread to complete a
-**                    download command request
-**                  - calls the user callback on completion of a cmd
-**
-** Parameters       pContext  - pointer to the download context structure
-**                  TrigEvent - event requested by user
-**
-** Returns          NFC status:
-**                  NFCSTATUS_PENDING - download request sent to NFCC
-**                                      successfully,response pending
-**                  NFCSTATUS_BUSY - handler is busy processing a download
-**                                   request
-**                  NFCSTATUS_INVALID_PARAMETER - one or more of the supplied
-**                                                parameters could not be
-**                                                interpreted properly
-**                  Other errors
-**
-*******************************************************************************/
-NFCSTATUS phDnldNfc_CmdHandler(void* pContext, phDnldNfc_Event_t TrigEvent) {
-  NFCSTATUS status = NFCSTATUS_SUCCESS;
-  pphDnldNfc_DlContext_t pDlCtxt = (pphDnldNfc_DlContext_t)pContext;
-
-  if (NULL == pDlCtxt) {
-    NXPLOG_FWDNLD_E("Invalid Input Parameter!!");
-    status = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-  } else {
-    switch (TrigEvent) {
-      case phDnldNfc_EventReset:
-      case phDnldNfc_EventGetVer:
-      case phDnldNfc_EventIntegChk:
-      case phDnldNfc_EventGetSesnSt:
-      case phDnldNfc_EventRaw: {
-        if (phDnldNfc_EventInvalid == (pDlCtxt->tCurrEvent)) {
-          NXPLOG_FWDNLD_D("Processing Normal Sequence..");
-          pDlCtxt->tCurrEvent = TrigEvent;
-          pDlCtxt->tDnldInProgress = phDnldNfc_TransitionBusy;
-
-          phDnldNfc_ProcessSeqState(pDlCtxt, NULL);
-
-          status = pDlCtxt->wCmdSendStatus;
-        } else {
-          NXPLOG_FWDNLD_E("Prev Norml Sequence not completed/restored!!");
-          status = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_FAILED);
-        }
-        break;
-      }
-      case phDnldNfc_EventWrite:
-      case phDnldNfc_EventRead:
-      case phDnldNfc_EventLog:
-      case phDnldNfc_EventForce: {
-        if (phDnldNfc_EventInvalid == (pDlCtxt->tCurrEvent)) {
-          NXPLOG_FWDNLD_D("Processing R/W Sequence..");
-          pDlCtxt->tCurrEvent = TrigEvent;
-          pDlCtxt->tDnldInProgress = phDnldNfc_TransitionBusy;
-
-          phDnldNfc_ProcessRWSeqState(pDlCtxt, NULL);
-
-          status = pDlCtxt->wCmdSendStatus;
-        } else {
-          NXPLOG_FWDNLD_E("Prev R/W Sequence not completed/restored!!");
-          status = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_FAILED);
-        }
-        break;
-      }
-      default: {
-        /* Unknown Event */
-        NXPLOG_FWDNLD_E("Unknown Event Parameter!!");
-        status = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-        break;
-      }
-    }
-  }
-
-  return status;
-}
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_ProcessSeqState
-**
-** Description      Processes all cmd/resp sequences except read & write
-**
-** Parameters       pContext - pointer to the download context structure
-**                  pInfo - pointer to the Transaction buffer updated by TML
-**                          Thread
-**
-** Returns          None
-**
-*******************************************************************************/
-static void phDnldNfc_ProcessSeqState(void* pContext,
-                                      phTmlNfc_TransactInfo_t* pInfo) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  NFCSTATUS wIntStatus;
-  uint32_t TimerId;
-  pphDnldNfc_DlContext_t pDlCtxt = (pphDnldNfc_DlContext_t)pContext;
-
-  if (NULL == pDlCtxt) {
-    NXPLOG_FWDNLD_E("Invalid Input Parameter!!");
-    wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-  } else {
-    switch (pDlCtxt->tCurrState) {
-      case phDnldNfc_StateInit: {
-        NXPLOG_FWDNLD_D("Initializing Sequence..");
-
-        if (0 == (pDlCtxt->TimerInfo.dwRspTimerId)) {
-          TimerId = phOsalNfc_Timer_Create();
-
-          if (0 == TimerId) {
-            NXPLOG_FWDNLD_W("Response Timer Create failed!!");
-            wStatus = NFCSTATUS_INSUFFICIENT_RESOURCES;
-            pDlCtxt->wCmdSendStatus = wStatus;
-            break;
-          } else {
-            NXPLOG_FWDNLD_D("Response Timer Created Successfully");
-            (pDlCtxt->TimerInfo.dwRspTimerId) = TimerId;
-            (pDlCtxt->TimerInfo.TimerStatus) = 0;
-            (pDlCtxt->TimerInfo.wTimerExpStatus) = 0;
-          }
-        }
-        pDlCtxt->tCurrState = phDnldNfc_StateSend;
-      }
-      case phDnldNfc_StateSend: {
-        wStatus = phDnldNfc_BuildFramePkt(pDlCtxt);
-
-        if (NFCSTATUS_SUCCESS == wStatus) {
-          pDlCtxt->tCurrState = phDnldNfc_StateRecv;
-
-          wStatus = phTmlNfc_Write(
-              (pDlCtxt->tCmdRspFrameInfo.aFrameBuff),
-              (uint16_t)(pDlCtxt->tCmdRspFrameInfo.dwSendlength),
-              (pphTmlNfc_TransactCompletionCb_t)&phDnldNfc_ProcessSeqState,
-              pDlCtxt);
-        }
-        pDlCtxt->wCmdSendStatus = wStatus;
-        break;
-      }
-      case phDnldNfc_StateRecv: {
-        wStatus = phDnldNfc_ProcessRecvInfo(pContext, pInfo);
-
-        if (NFCSTATUS_SUCCESS == wStatus) {
-          wStatus = phOsalNfc_Timer_Start((pDlCtxt->TimerInfo.dwRspTimerId),
-                                          PHDNLDNFC_RSP_TIMEOUT,
-                                          &phDnldNfc_RspTimeOutCb, pDlCtxt);
-
-          if (NFCSTATUS_SUCCESS == wStatus) {
-            NXPLOG_FWDNLD_D("Response timer started");
-            pDlCtxt->TimerInfo.TimerStatus = 1;
-            pDlCtxt->tCurrState = phDnldNfc_StateTimer;
-          } else {
-            NXPLOG_FWDNLD_W("Response timer not started");
-            pDlCtxt->tCurrState = phDnldNfc_StateResponse;
-          }
-          /* Call TML_Read function and register the call back function */
-          wStatus = phTmlNfc_Read(
-              pDlCtxt->tCmdRspFrameInfo.aFrameBuff,
-              (uint16_t)PHDNLDNFC_CMDRESP_MAX_BUFF_SIZE,
-              (pphTmlNfc_TransactCompletionCb_t)&phDnldNfc_ProcessSeqState,
-              (void*)pDlCtxt);
-
-          /* set read status to pDlCtxt->wCmdSendStatus to enable callback */
-          pDlCtxt->wCmdSendStatus = wStatus;
-          break;
-        } else {
-          /* Setting TimerExpStatus below to avoid frame processing in response
-           * state */
-          (pDlCtxt->TimerInfo.wTimerExpStatus) = NFCSTATUS_RF_TIMEOUT;
-          pDlCtxt->tCurrState = phDnldNfc_StateResponse;
-        }
-      }
-      case phDnldNfc_StateTimer: {
-        if (1 == (pDlCtxt->TimerInfo.TimerStatus)) /*Is Timer Running*/
-        {
-          /*Stop Timer*/
-          (void)phOsalNfc_Timer_Stop(pDlCtxt->TimerInfo.dwRspTimerId);
-          (pDlCtxt->TimerInfo.TimerStatus) = 0; /*timer stopped*/
-        }
-        pDlCtxt->tCurrState = phDnldNfc_StateResponse;
-      }
-      case phDnldNfc_StateResponse: {
-        if (NFCSTATUS_RF_TIMEOUT != (pDlCtxt->TimerInfo.wTimerExpStatus)) {
-          /* Process response */
-          wStatus = phDnldNfc_ProcessFrame(pContext, pInfo);
-        } else {
-          if (phDnldNfc_EventReset != pDlCtxt->tCurrEvent) {
-            wStatus = (pDlCtxt->TimerInfo.wTimerExpStatus);
-          } else {
-            wStatus = NFCSTATUS_SUCCESS;
-          }
-          (pDlCtxt->TimerInfo.wTimerExpStatus) = 0;
-        }
-
-        /* Abort TML read operation which is always kept open */
-        wIntStatus = phTmlNfc_ReadAbort();
-
-        if (NFCSTATUS_SUCCESS != wIntStatus) {
-          /* TODO:-Action to take in this case:-Tml read abort failed!? */
-          NXPLOG_FWDNLD_W("Tml Read Abort failed!!");
-        }
-
-        pDlCtxt->tCurrEvent = phDnldNfc_EventInvalid;
-        pDlCtxt->tDnldInProgress = phDnldNfc_TransitionIdle;
-        pDlCtxt->tCurrState = phDnldNfc_StateInit;
-
-        /* Delete the timer & reset timer primitives in context */
-        (void)phOsalNfc_Timer_Delete(pDlCtxt->TimerInfo.dwRspTimerId);
-        (pDlCtxt->TimerInfo.dwRspTimerId) = 0;
-        (pDlCtxt->TimerInfo.TimerStatus) = 0;
-        (pDlCtxt->TimerInfo.wTimerExpStatus) = 0;
-
-        if ((NULL != (pDlCtxt->UserCb)) && (NULL != (pDlCtxt->UserCtxt))) {
-          pDlCtxt->UserCb((pDlCtxt->UserCtxt), wStatus,
-                          &(pDlCtxt->tRspBuffInfo));
-        }
-        break;
-      }
-      default: {
-        pDlCtxt->tCurrEvent = phDnldNfc_EventInvalid;
-        pDlCtxt->tDnldInProgress = phDnldNfc_TransitionIdle;
-        break;
-      }
-    }
-  }
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_ProcessRWSeqState
-**
-** Description      Processes read/write cmd/rsp sequence
-**
-** Parameters       pContext - pointer to the download context structure
-**                  pInfo - pointer to the Transaction buffer updated by TML
-**                             Thread
-**
-** Returns          None
-**
-*******************************************************************************/
-static void phDnldNfc_ProcessRWSeqState(void* pContext,
-                                        phTmlNfc_TransactInfo_t* pInfo) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  NFCSTATUS wIntStatus = wStatus;
-  uint32_t TimerId;
-  pphDnldNfc_DlContext_t pDlCtxt = (pphDnldNfc_DlContext_t)pContext;
-
-  if (NULL == pDlCtxt) {
-    NXPLOG_FWDNLD_E("Invalid Input Parameter!!");
-    wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-  } else {
-    switch (pDlCtxt->tCurrState) {
-      case phDnldNfc_StateInit: {
-        if (0 == (pDlCtxt->TimerInfo.dwRspTimerId)) {
-          TimerId = phOsalNfc_Timer_Create();
-
-          if (0 == TimerId) {
-            NXPLOG_FWDNLD_E("Response Timer Create failed!!");
-            wStatus = NFCSTATUS_INSUFFICIENT_RESOURCES;
-          } else {
-            NXPLOG_FWDNLD_D("Response Timer Created Successfully");
-            (pDlCtxt->TimerInfo.dwRspTimerId) = TimerId;
-            (pDlCtxt->TimerInfo.TimerStatus) = 0;
-            (pDlCtxt->TimerInfo.wTimerExpStatus) = 0;
-          }
-        }
-        pDlCtxt->tCurrState = phDnldNfc_StateSend;
-      }
-      case phDnldNfc_StateSend: {
-        if (pDlCtxt->bResendLastFrame == false) {
-          wStatus = phDnldNfc_BuildFramePkt(pDlCtxt);
-        } else {
-          pDlCtxt->bResendLastFrame = false;
-        }
-
-        if (NFCSTATUS_SUCCESS == wStatus) {
-          pDlCtxt->tCurrState = phDnldNfc_StateRecv;
-
-          wStatus = phTmlNfc_Write(
-              (pDlCtxt->tCmdRspFrameInfo.aFrameBuff),
-              (uint16_t)(pDlCtxt->tCmdRspFrameInfo.dwSendlength),
-              (pphTmlNfc_TransactCompletionCb_t)&phDnldNfc_ProcessRWSeqState,
-              pDlCtxt);
-        }
-        pDlCtxt->wCmdSendStatus = wStatus;
-        break;
-      }
-      case phDnldNfc_StateRecv: {
-        wStatus = phDnldNfc_ProcessRecvInfo(pContext, pInfo);
-
-        if (NFCSTATUS_SUCCESS == wStatus) {
-          /* processing For Pipelined write before calling timer below */
-          wStatus = phOsalNfc_Timer_Start((pDlCtxt->TimerInfo.dwRspTimerId),
-                                          PHDNLDNFC_RSP_TIMEOUT,
-                                          &phDnldNfc_RspTimeOutCb, pDlCtxt);
-
-          if (NFCSTATUS_SUCCESS == wStatus) {
-            NXPLOG_FWDNLD_D("Response timer started");
-            pDlCtxt->TimerInfo.TimerStatus = 1;
-            pDlCtxt->tCurrState = phDnldNfc_StateTimer;
-          } else {
-            NXPLOG_FWDNLD_W("Response timer not started");
-            pDlCtxt->tCurrState = phDnldNfc_StateResponse;
-            /* Todo:- diagnostic in this case */
-          }
-          /* Call TML_Read function and register the call back function */
-          wStatus = phTmlNfc_Read(
-              pDlCtxt->tCmdRspFrameInfo.aFrameBuff,
-              (uint16_t)PHDNLDNFC_CMDRESP_MAX_BUFF_SIZE,
-              (pphTmlNfc_TransactCompletionCb_t)&phDnldNfc_ProcessRWSeqState,
-              (void*)pDlCtxt);
-
-          /* set read status to pDlCtxt->wCmdSendStatus to enable callback */
-          pDlCtxt->wCmdSendStatus = wStatus;
-          break;
-        } else {
-          /* Setting TimerExpStatus below to avoid frame processing in reponse
-           * state */
-          (pDlCtxt->TimerInfo.wTimerExpStatus) = NFCSTATUS_RF_TIMEOUT;
-          pDlCtxt->tCurrState = phDnldNfc_StateResponse;
-        }
-      }
-      case phDnldNfc_StateTimer: {
-        if (1 == (pDlCtxt->TimerInfo.TimerStatus)) /*Is Timer Running*/
-        {
-          /* Stop Timer */
-          (void)phOsalNfc_Timer_Stop(pDlCtxt->TimerInfo.dwRspTimerId);
-          (pDlCtxt->TimerInfo.TimerStatus) = 0; /*timer stopped*/
-        }
-        pDlCtxt->tCurrState = phDnldNfc_StateResponse;
-      }
-      case phDnldNfc_StateResponse: {
-        if (NFCSTATUS_RF_TIMEOUT != (pDlCtxt->TimerInfo.wTimerExpStatus)) {
-          /* Process response */
-          wStatus = phDnldNfc_ProcessFrame(pContext, pInfo);
-
-          if (NFCSTATUS_BUSY == wStatus) {
-            /* store the status for use in subsequent processing */
-            wIntStatus = wStatus;
-
-            /* setup the resend wait timer */
-            wStatus = phDnldNfc_SetupResendTimer(pDlCtxt);
-
-            if (NFCSTATUS_SUCCESS == wStatus) {
-              /* restore the last mem_bsy status to avoid re-building frame
-               * below */
-              wStatus = wIntStatus;
-            }
-          }
-        } else {
-          wStatus = (pDlCtxt->TimerInfo.wTimerExpStatus);
-          (pDlCtxt->TimerInfo.wTimerExpStatus) = 0;
-        }
-
-        if ((0 != (pDlCtxt->tRWInfo.wRemBytes)) &&
-            (NFCSTATUS_SUCCESS == wStatus)) {
-          /* Abort TML read operation which is always kept open */
-          wIntStatus = phTmlNfc_ReadAbort();
-
-          if (NFCSTATUS_SUCCESS != wIntStatus) {
-            NXPLOG_FWDNLD_W("Tml read abort failed!");
-          }
-
-          wStatus = phDnldNfc_BuildFramePkt(pDlCtxt);
-
-          if (NFCSTATUS_SUCCESS == wStatus) {
-            pDlCtxt->tCurrState = phDnldNfc_StateRecv;
-            wStatus = phTmlNfc_Write(
-                (pDlCtxt->tCmdRspFrameInfo.aFrameBuff),
-                (uint16_t)(pDlCtxt->tCmdRspFrameInfo.dwSendlength),
-                (pphTmlNfc_TransactCompletionCb_t)&phDnldNfc_ProcessRWSeqState,
-                pDlCtxt);
-
-            /* TODO:- Verify here if TML_Write returned NFC_PENDING status &
-               take appropriate
-                  action otherwise ?? */
-          }
-        } else if (NFCSTATUS_BUSY == wStatus) {
-          /* No processing to be done,since resend wait timer should have
-           * already been started */
-        } else {
-          (pDlCtxt->tRWInfo.bFramesSegmented) = false;
-          /* Abort TML read operation which is always kept open */
-          wIntStatus = phTmlNfc_ReadAbort();
-
-          if (NFCSTATUS_SUCCESS != wIntStatus) {
-            NXPLOG_FWDNLD_W("Tml read abort failed!");
-          }
-
-          pDlCtxt->tCurrEvent = phDnldNfc_EventInvalid;
-          pDlCtxt->tDnldInProgress = phDnldNfc_TransitionIdle;
-          pDlCtxt->tCurrState = phDnldNfc_StateInit;
-          pDlCtxt->bResendLastFrame = false;
-
-          /* Delete the timer & reset timer primitives in context */
-          (void)phOsalNfc_Timer_Delete(pDlCtxt->TimerInfo.dwRspTimerId);
-          (pDlCtxt->TimerInfo.dwRspTimerId) = 0;
-          (pDlCtxt->TimerInfo.TimerStatus) = 0;
-          (pDlCtxt->TimerInfo.wTimerExpStatus) = 0;
-
-          if ((NULL != (pDlCtxt->UserCb)) && (NULL != (pDlCtxt->UserCtxt))) {
-            pDlCtxt->UserCb((pDlCtxt->UserCtxt), wStatus,
-                            &(pDlCtxt->tRspBuffInfo));
-          }
-        }
-        break;
-      }
-      default: {
-        pDlCtxt->tCurrEvent = phDnldNfc_EventInvalid;
-        pDlCtxt->tDnldInProgress = phDnldNfc_TransitionIdle;
-        break;
-      }
-    }
-  }
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_BuildFramePkt
-**
-** Description      Forms the frame packet
-**
-** Parameters       pDlContext - pointer to the download context structure
-**
-** Returns          NFC status
-**
-*******************************************************************************/
-static NFCSTATUS phDnldNfc_BuildFramePkt(pphDnldNfc_DlContext_t pDlContext) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  uint16_t wFrameLen = 0;
-  uint16_t wCrcVal;
-  uint8_t* pFrameByte;
-
-  if (NULL == pDlContext) {
-    NXPLOG_FWDNLD_E("Invalid Input Parameter!!");
-    wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-  } else {
-    if (phDnldNfc_FTWrite == (pDlContext->FrameInp.Type)) {
-      if ((0 == (pDlContext->tUserData.wLen)) ||
-          (NULL == (pDlContext->tUserData.pBuff))) {
-        NXPLOG_FWDNLD_E("Invalid Input Parameter(s) for Write!!");
-        wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-      } else {
-        if ((pDlContext->tRWInfo.bFirstWrReq) == true) {
-          (pDlContext->tRWInfo.wRemBytes) = (pDlContext->tUserData.wLen);
-          (pDlContext->tRWInfo.wOffset) = 0;
-        }
-      }
-    } else if (phDnldNfc_FTRead == (pDlContext->FrameInp.Type)) {
-      if ((0 == (pDlContext->tRspBuffInfo.wLen)) ||
-          (NULL == (pDlContext->tRspBuffInfo.pBuff))) {
-        NXPLOG_FWDNLD_E("Invalid Input Parameter(s) for Read!!");
-        wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-      } else {
-        if ((pDlContext->tRWInfo.bFramesSegmented) == false) {
-          NXPLOG_FWDNLD_D("Verifying RspBuffInfo for Read Request..");
-          wFrameLen = (pDlContext->tRspBuffInfo.wLen) + PHDNLDNFC_MIN_PLD_LEN;
-
-          (pDlContext->tRWInfo.wRWPldSize) =
-              (PHDNLDNFC_CMDRESP_MAX_PLD_SIZE - PHDNLDNFC_MIN_PLD_LEN);
-          (pDlContext->tRWInfo.wRemBytes) = (pDlContext->tRspBuffInfo.wLen);
-          (pDlContext->tRWInfo.dwAddr) = (pDlContext->FrameInp.dwAddr);
-          (pDlContext->tRWInfo.wOffset) = 0;
-          (pDlContext->tRWInfo.wBytesRead) = 0;
-
-          if (PHDNLDNFC_CMDRESP_MAX_PLD_SIZE < wFrameLen) {
-            (pDlContext->tRWInfo.bFramesSegmented) = true;
-          }
-        }
-      }
-    } else if (phDnldNfc_FTLog == (pDlContext->FrameInp.Type)) {
-      if ((0 == (pDlContext->tUserData.wLen)) ||
-          (NULL == (pDlContext->tUserData.pBuff))) {
-        NXPLOG_FWDNLD_E("Invalid Input Parameter(s) for Log!!");
-        wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-      }
-    } else {
-    }
-
-    if (NFCSTATUS_SUCCESS == wStatus) {
-      wStatus = phDnldNfc_CreateFramePld(pDlContext);
-    }
-
-    if (NFCSTATUS_SUCCESS == wStatus) {
-      wFrameLen = 0;
-      wFrameLen = (pDlContext->tCmdRspFrameInfo.dwSendlength);
-
-      if (phDnldNfc_FTRaw != (pDlContext->FrameInp.Type)) {
-        if (phDnldNfc_FTWrite != (pDlContext->FrameInp.Type)) {
-          pFrameByte = (uint8_t*)&wFrameLen;
-
-          pDlContext->tCmdRspFrameInfo.aFrameBuff[PHDNLDNFC_FRAME_HDR_OFFSET] =
-              pFrameByte[1];
-          pDlContext->tCmdRspFrameInfo
-              .aFrameBuff[PHDNLDNFC_FRAME_HDR_OFFSET + 1] = pFrameByte[0];
-
-          NXPLOG_FWDNLD_D("Inserting FrameId ..");
-          pDlContext->tCmdRspFrameInfo.aFrameBuff[PHDNLDNFC_FRAMEID_OFFSET] =
-              (pDlContext->tCmdId);
-
-          wFrameLen += PHDNLDNFC_FRAME_HDR_LEN;
-        } else {
-          if (0 != (pDlContext->tRWInfo.wRWPldSize)) {
-            if ((pDlContext->tRWInfo.bFramesSegmented) == true) {
-              /* Turning ON the Fragmentation bit in FrameLen */
-              wFrameLen = PHDNLDNFC_SET_HDR_FRAGBIT(wFrameLen);
-            }
-
-            pFrameByte = (uint8_t*)&wFrameLen;
-
-            pDlContext->tCmdRspFrameInfo
-                .aFrameBuff[PHDNLDNFC_FRAME_HDR_OFFSET] = pFrameByte[1];
-            pDlContext->tCmdRspFrameInfo
-                .aFrameBuff[PHDNLDNFC_FRAME_HDR_OFFSET + 1] = pFrameByte[0];
-
-            /* To ensure we have no frag bit set for crc calculation */
-            wFrameLen = PHDNLDNFC_CLR_HDR_FRAGBIT(wFrameLen);
-
-            wFrameLen += PHDNLDNFC_FRAME_HDR_LEN;
-          }
-        }
-        if (wFrameLen > PHDNLDNFC_CMDRESP_MAX_BUFF_SIZE) {
-          NXPLOG_FWDNLD_D("wFrameLen exceeds the limit");
-          return NFCSTATUS_FAILED;
-        }
-        /* calculate CRC16 */
-        wCrcVal = phDnldNfc_CalcCrc16((pDlContext->tCmdRspFrameInfo.aFrameBuff),
-                                      wFrameLen);
-
-        pFrameByte = (uint8_t*)&wCrcVal;
-
-        /* Insert the computed Crc value */
-        pDlContext->tCmdRspFrameInfo.aFrameBuff[wFrameLen] = pFrameByte[1];
-        pDlContext->tCmdRspFrameInfo.aFrameBuff[wFrameLen + 1] = pFrameByte[0];
-
-        wFrameLen += PHDNLDNFC_FRAME_CRC_LEN;
-      }
-
-      (pDlContext->tCmdRspFrameInfo.dwSendlength) = wFrameLen;
-      NXPLOG_FWDNLD_D("Frame created successfully");
-    } else {
-      NXPLOG_FWDNLD_E("Frame creation failed!!");
-      wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_FAILED);
-    }
-  }
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_CreateFramePld
-**
-** Description      Forms the frame payload
-**
-** Parameters       pDlContext - pointer to the download context structure
-**
-** Returns          NFC status
-**
-*******************************************************************************/
-static NFCSTATUS phDnldNfc_CreateFramePld(pphDnldNfc_DlContext_t pDlContext) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  uint16_t wBuffIdx = 0;
-  uint16_t wChkIntgVal = 0;
-  uint16_t wFrameLen = 0;
-
-  if (NULL == pDlContext) {
-    NXPLOG_FWDNLD_E("Invalid Input Parameter!!");
-    wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-  } else {
-    memset((pDlContext->tCmdRspFrameInfo.aFrameBuff), 0,
-           PHDNLDNFC_CMDRESP_MAX_BUFF_SIZE);
-    (pDlContext->tCmdRspFrameInfo.dwSendlength) = 0;
-
-    if (phDnldNfc_FTNone == (pDlContext->FrameInp.Type)) {
-      (pDlContext->tCmdRspFrameInfo.dwSendlength) += PHDNLDNFC_MIN_PLD_LEN;
-    } else if (phDnldNfc_ChkIntg == (pDlContext->FrameInp.Type)) {
-      (pDlContext->tCmdRspFrameInfo.dwSendlength) += PHDNLDNFC_MIN_PLD_LEN;
-
-      wChkIntgVal = PHDNLDNFC_USERDATA_EEPROM_OFFSET;
-      memcpy(&(pDlContext->tCmdRspFrameInfo
-                   .aFrameBuff[PHDNLDNFC_FRAME_RDDATA_OFFSET]),
-             &wChkIntgVal, sizeof(wChkIntgVal));
-
-      wChkIntgVal = PHDNLDNFC_USERDATA_EEPROM_LEN;
-      memcpy(&(pDlContext->tCmdRspFrameInfo
-                   .aFrameBuff[PHDNLDNFC_FRAME_RDDATA_OFFSET +
-                               PHDNLDNFC_USERDATA_EEPROM_OFFSIZE]),
-             &wChkIntgVal, sizeof(wChkIntgVal));
-
-      (pDlContext->tCmdRspFrameInfo.dwSendlength) +=
-          PHDNLDNFC_USERDATA_EEPROM_LENSIZE;
-      (pDlContext->tCmdRspFrameInfo.dwSendlength) +=
-          PHDNLDNFC_USERDATA_EEPROM_OFFSIZE;
-    } else if (phDnldNfc_FTWrite == (pDlContext->FrameInp.Type)) {
-      wBuffIdx = (pDlContext->tRWInfo.wOffset);
-
-      if ((pDlContext->tRWInfo.bFramesSegmented) == false) {
-        wFrameLen = (pDlContext->tUserData.pBuff[wBuffIdx]);
-        wFrameLen <<= 8;
-        wFrameLen |= (pDlContext->tUserData.pBuff[wBuffIdx + 1]);
-
-        (pDlContext->tRWInfo.wRWPldSize) = wFrameLen;
-      }
-
-      if ((pDlContext->tRWInfo.wRWPldSize) > PHDNLDNFC_CMDRESP_MAX_PLD_SIZE) {
-        if ((pDlContext->tRWInfo.bFirstChunkResp) == false) {
-          (pDlContext->tRWInfo.wRemChunkBytes) = wFrameLen;
-          (pDlContext->tRWInfo.wOffset) += PHDNLDNFC_FRAME_HDR_LEN;
-          wBuffIdx = (pDlContext->tRWInfo.wOffset);
-        }
-
-        if (PHDNLDNFC_CMDRESP_MAX_PLD_SIZE <
-            (pDlContext->tRWInfo.wRemChunkBytes)) {
-          (pDlContext->tRWInfo.wBytesToSendRecv) =
-              PHDNLDNFC_CMDRESP_MAX_PLD_SIZE;
-          (pDlContext->tRWInfo.bFramesSegmented) = true;
-        } else {
-          (pDlContext->tRWInfo.wBytesToSendRecv) =
-              (pDlContext->tRWInfo.wRemChunkBytes);
-          (pDlContext->tRWInfo.bFramesSegmented) = false;
-        }
-
-        memcpy(&(pDlContext->tCmdRspFrameInfo
-                     .aFrameBuff[PHDNLDNFC_FRAMEID_OFFSET]),
-               &(pDlContext->tUserData.pBuff[wBuffIdx]),
-               (pDlContext->tRWInfo.wBytesToSendRecv));
-      } else {
-        (pDlContext->tRWInfo.wRWPldSize) = 0;
-        (pDlContext->tRWInfo.wBytesToSendRecv) =
-            (wFrameLen + PHDNLDNFC_FRAME_HDR_LEN);
-
-        memcpy(&(pDlContext->tCmdRspFrameInfo.aFrameBuff[0]),
-               &(pDlContext->tUserData.pBuff[wBuffIdx]),
-               (pDlContext->tRWInfo.wBytesToSendRecv));
-      }
-      (pDlContext->tCmdRspFrameInfo.dwSendlength) +=
-          (pDlContext->tRWInfo.wBytesToSendRecv);
-    } else if (phDnldNfc_FTRead == (pDlContext->FrameInp.Type)) {
-      (pDlContext->tRWInfo.wBytesToSendRecv) =
-          ((pDlContext->tRWInfo.wRemBytes) > (pDlContext->tRWInfo.wRWPldSize))
-              ? (pDlContext->tRWInfo.wRWPldSize)
-              : (pDlContext->tRWInfo.wRemBytes);
-
-      wBuffIdx = (PHDNLDNFC_PLD_OFFSET +
-                  ((sizeof(pDlContext->tRWInfo.wBytesToSendRecv)) %
-                   PHDNLDNFC_MIN_PLD_LEN) -
-                  1);
-
-      memcpy(&(pDlContext->tCmdRspFrameInfo.aFrameBuff[wBuffIdx]),
-             &(pDlContext->tRWInfo.wBytesToSendRecv),
-             (sizeof(pDlContext->tRWInfo.wBytesToSendRecv)));
-
-      wBuffIdx += sizeof(pDlContext->tRWInfo.wBytesToSendRecv);
-
-      memcpy(&(pDlContext->tCmdRspFrameInfo.aFrameBuff[wBuffIdx]),
-             &(pDlContext->tRWInfo.dwAddr), sizeof(pDlContext->tRWInfo.dwAddr));
-
-      (pDlContext->tCmdRspFrameInfo.dwSendlength) +=
-          (PHDNLDNFC_MIN_PLD_LEN + (sizeof(pDlContext->tRWInfo.dwAddr)));
-    } else if (phDnldNfc_FTLog == (pDlContext->FrameInp.Type)) {
-      (pDlContext->tCmdRspFrameInfo.dwSendlength) += PHDNLDNFC_MIN_PLD_LEN;
-
-      wBuffIdx = (PHDNLDNFC_MIN_PLD_LEN + PHDNLDNFC_FRAME_HDR_LEN);
-
-      memcpy(&(pDlContext->tCmdRspFrameInfo.aFrameBuff[wBuffIdx]),
-             (pDlContext->tUserData.pBuff), (pDlContext->tUserData.wLen));
-
-      (pDlContext->tCmdRspFrameInfo.dwSendlength) +=
-          (pDlContext->tUserData.wLen);
-    } else if (phDnldNfc_FTForce == (pDlContext->FrameInp.Type)) {
-      (pDlContext->tCmdRspFrameInfo.dwSendlength) += PHDNLDNFC_MIN_PLD_LEN;
-
-      wBuffIdx = PHDNLDNFC_PLD_OFFSET;
-
-      memcpy(&(pDlContext->tCmdRspFrameInfo.aFrameBuff[wBuffIdx]),
-             (pDlContext->tUserData.pBuff), (pDlContext->tUserData.wLen));
-    } else if (phDnldNfc_FTRaw == (pDlContext->FrameInp.Type)) {
-      if ((0 == (pDlContext->tUserData.wLen)) ||
-          (NULL == (pDlContext->tUserData.pBuff))) {
-        NXPLOG_FWDNLD_E("Invalid Input Parameter(s) for Raw Request!!");
-        wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-      } else {
-        memcpy(&(pDlContext->tCmdRspFrameInfo.aFrameBuff[wBuffIdx]),
-               (pDlContext->tUserData.pBuff), (pDlContext->tUserData.wLen));
-
-        (pDlContext->tCmdRspFrameInfo.dwSendlength) +=
-            (pDlContext->tUserData.wLen);
-      }
-    } else {
-    }
-  }
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_ProcessFrame
-**
-** Description      Processes response frame received
-**
-** Parameters       pContext - pointer to the download context structure
-**                  pInfo - pointer to the Transaction buffer updated by TML
-**                          Thread
-**
-** Returns          NFCSTATUS_SUCCESS - parameters successfully validated
-**                  NFCSTATUS_INVALID_PARAMETER - invalid parameters
-**
-*******************************************************************************/
-static NFCSTATUS phDnldNfc_ProcessFrame(void* pContext,
-                                        phTmlNfc_TransactInfo_t* pInfo) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  uint16_t wCrcVal, wRecvdCrc, wRecvdLen, wPldLen;
-  pphDnldNfc_DlContext_t pDlCtxt = (pphDnldNfc_DlContext_t)pContext;
-
-  if ((NULL == pDlCtxt) || (NULL == pInfo)) {
-    NXPLOG_FWDNLD_E("Invalid Input Parameters!!");
-    wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-  } else {
-    if ((PH_DL_STATUS_OK != pInfo->wStatus) || (0 == pInfo->wLength) ||
-        (NULL == pInfo->pBuff)) {
-      NXPLOG_FWDNLD_E("Dnld Cmd Request Failed!!");
-      wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_FAILED);
-    } else {
-      if (phDnldNfc_FTRaw == (pDlCtxt->FrameInp.Type)) {
-        if ((0 != (pDlCtxt->tRspBuffInfo.wLen)) &&
-            (NULL != (pDlCtxt->tRspBuffInfo.pBuff))) {
-          memcpy((pDlCtxt->tRspBuffInfo.pBuff), (pInfo->pBuff),
-                 (pInfo->wLength));
-
-          (pDlCtxt->tRspBuffInfo.wLen) = (pInfo->wLength);
-        } else {
-          NXPLOG_FWDNLD_E("Cannot update Response buff with received data!!");
-        }
-      } else {
-        /* calculate CRC16 */
-        wCrcVal = phDnldNfc_CalcCrc16(
-            (pInfo->pBuff), ((pInfo->wLength) - PHDNLDNFC_FRAME_CRC_LEN));
-
-        wRecvdCrc = 0;
-        wRecvdCrc = (((uint16_t)(pInfo->pBuff[(pInfo->wLength) - 2]) << 8U) |
-                     (pInfo->pBuff[(pInfo->wLength) - 1]));
-
-        if (wRecvdCrc == wCrcVal) {
-          wRecvdLen =
-              (((uint16_t)(pInfo->pBuff[PHDNLDNFC_FRAME_HDR_OFFSET]) << 8U) |
-               (pInfo->pBuff[PHDNLDNFC_FRAME_HDR_OFFSET + 1]));
-
-          wPldLen = ((pInfo->wLength) -
-                     (PHDNLDNFC_FRAME_HDR_LEN + PHDNLDNFC_FRAME_CRC_LEN));
-
-          if (wRecvdLen != wPldLen) {
-            NXPLOG_FWDNLD_E("Invalid frame payload length received");
-            wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_FAILED);
-          } else {
-            wStatus = phDnldNfc_UpdateRsp(pDlCtxt, pInfo, (wPldLen - 1));
-          }
-        } else {
-          NXPLOG_FWDNLD_E("Invalid frame received");
-          wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_FAILED);
-        }
-      }
-    }
-  }
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_ProcessRecvInfo
-**
-** Description      Processes the response during the state phDnldNfc_StateRecv
-**
-** Parameters       pContext - pointer to the download context structure
-**                  pInfo - pointer to the Transaction buffer updated by TML
-**                          Thread
-**
-** Returns          NFCSTATUS_SUCCESS - parameters successfully validated
-**                  NFCSTATUS_INVALID_PARAMETER - invalid parameters
-**
-*******************************************************************************/
-static NFCSTATUS phDnldNfc_ProcessRecvInfo(void* pContext,
-                                           phTmlNfc_TransactInfo_t* pInfo) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-
-  if (NULL != pContext) {
-    if (NULL == pInfo) {
-      NXPLOG_FWDNLD_E("Invalid pInfo received from TML!!");
-      wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_FAILED);
-    } else {
-      wStatus = PHNFCSTATUS(pInfo->wStatus);
-
-      if (NFCSTATUS_SUCCESS == wStatus) {
-        NXPLOG_FWDNLD_D("Send Success");
-      } else {
-        NXPLOG_FWDNLD_E("Tml Write error!!");
-        wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_FAILED);
-      }
-    }
-  } else {
-    NXPLOG_FWDNLD_E("Invalid context received from TML!!");
-    wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_FAILED);
-  }
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_SetupResendTimer
-**
-** Description      Sets up the timer for resending the previous write frame
-**
-** Parameters       pDlContext - pointer to the download context structure
-**
-** Returns          NFC status
-**
-*******************************************************************************/
-static NFCSTATUS phDnldNfc_SetupResendTimer(pphDnldNfc_DlContext_t pDlContext) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-
-  wStatus = phOsalNfc_Timer_Start((pDlContext->TimerInfo.dwRspTimerId),
-                                  PHDNLDNFC_RETRY_FRAME_WRITE,
-                                  &phDnldNfc_ResendTimeOutCb, pDlContext);
-
-  if (NFCSTATUS_SUCCESS == wStatus) {
-    NXPLOG_FWDNLD_D("Frame Resend wait timer started");
-    (pDlContext->TimerInfo.TimerStatus) = 1;
-    pDlContext->tCurrState = phDnldNfc_StateTimer;
-  } else {
-    NXPLOG_FWDNLD_W("Frame Resend wait timer not started");
-    (pDlContext->TimerInfo.TimerStatus) = 0; /*timer stopped*/
-    pDlContext->tCurrState = phDnldNfc_StateResponse;
-    /* Todo:- diagnostic in this case */
-  }
-
-  return wStatus;
-}
-
-#if !defined(PH_LIBNFC_VEN_RESET_ON_DOWNLOAD_TIMEOUT)
-#error PH_LIBNFC_VEN_RESET_ON_DOWNLOAD_TIMEOUT has to be defined
-#endif
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_RspTimeOutCb
-**
-** Description      Callback function in case of timer expiration
-**
-** Parameters       TimerId  - expired timer id
-**                  pContext - pointer to the download context structure
-**
-** Returns          None
-**
-*******************************************************************************/
-static void phDnldNfc_RspTimeOutCb(uint32_t TimerId, void* pContext) {
-  pphDnldNfc_DlContext_t pDlCtxt = (pphDnldNfc_DlContext_t)pContext;
-
-  if (NULL != pDlCtxt) {
-    UNUSED(TimerId);
-
-    if (1 == pDlCtxt->TimerInfo.TimerStatus) {
-      /* No response received and the timer expired */
-      pDlCtxt->TimerInfo.TimerStatus = 0; /* Reset timer status flag */
-
-      NXPLOG_FWDNLD_D("%x", pDlCtxt->tLastStatus);
-
-#if (PH_LIBNFC_VEN_RESET_ON_DOWNLOAD_TIMEOUT == TRUE)
-      if (PH_DL_STATUS_SIGNATURE_ERROR == pDlCtxt->tLastStatus) {
-        /* Do a VEN Reset of the chip. */
-        NXPLOG_FWDNLD_E("Performing a VEN Reset");
-        phTmlNfc_IoCtl(phTmlNfc_e_EnableNormalMode);
-        phTmlNfc_IoCtl(phTmlNfc_e_EnableDownloadMode);
-        NXPLOG_FWDNLD_E("VEN Reset Done");
-      }
-#endif
-
-      (pDlCtxt->TimerInfo.wTimerExpStatus) = NFCSTATUS_RF_TIMEOUT;
-
-      if ((phDnldNfc_EventRead == pDlCtxt->tCurrEvent) ||
-          (phDnldNfc_EventWrite == pDlCtxt->tCurrEvent)) {
-        phDnldNfc_ProcessRWSeqState(pDlCtxt, NULL);
-      } else {
-        phDnldNfc_ProcessSeqState(pDlCtxt, NULL);
-      }
-    }
-  }
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_ResendTimeOutCb
-**
-** Description      Callback function in case of Frame Resend Wait timer
-**                  expiration
-**
-** Parameters       TimerId  - expired timer id
-**                  pContext - pointer to the download context structure
-**
-** Returns          None
-**
-*******************************************************************************/
-static void phDnldNfc_ResendTimeOutCb(uint32_t TimerId, void* pContext) {
-  pphDnldNfc_DlContext_t pDlCtxt = (pphDnldNfc_DlContext_t)pContext;
-
-  if (NULL != pDlCtxt) {
-    UNUSED(TimerId);
-
-    if (1 == pDlCtxt->TimerInfo.TimerStatus) {
-      /* No response received and the timer expired */
-      pDlCtxt->TimerInfo.TimerStatus = 0; /* Reset timer status flag */
-
-      (pDlCtxt->TimerInfo.wTimerExpStatus) = 0;
-
-      pDlCtxt->tCurrState = phDnldNfc_StateSend;
-
-      /* set the flag to trigger last frame re-transmission */
-      pDlCtxt->bResendLastFrame = true;
-
-      phDnldNfc_ProcessRWSeqState(pDlCtxt, NULL);
-    }
-  }
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_UpdateRsp
-**
-** Description      verifies the payload status byte and copies data
-**                  to response buffer if successful
-**
-** Parameters       pDlContext - pointer to the download context structure
-**                  pInfo - pointer to the Transaction buffer updated by TML
-**                          Thread
-**                  wPldLen - Length of the payload bytes to copy to response
-**                            buffer
-**
-** Returns          NFC status
-**
-*******************************************************************************/
-static NFCSTATUS phDnldNfc_UpdateRsp(pphDnldNfc_DlContext_t pDlContext,
-                                     phTmlNfc_TransactInfo_t* pInfo,
-                                     uint16_t wPldLen) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  uint16_t wReadLen = 0;
-
-  if ((NULL == pDlContext) || (NULL == pInfo)) {
-    NXPLOG_FWDNLD_E("Invalid Input Parameters!!");
-    wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_INVALID_PARAMETER);
-  } else {
-    if (PH_DL_CMD_WRITE == (pDlContext->tCmdId)) {
-      if (PH_DL_STATUS_OK == (pInfo->pBuff[PHDNLDNFC_FRAMESTATUS_OFFSET])) {
-        /* first write frame response received case */
-        if ((pDlContext->tRWInfo.bFirstWrReq) == true) {
-          NXPLOG_FWDNLD_D("First Write Frame Success Status received!!");
-          (pDlContext->tRWInfo.bFirstWrReq) = false;
-        }
-
-        if ((pDlContext->tRWInfo.bFirstChunkResp) == true) {
-          if ((pDlContext->tRWInfo.bFramesSegmented) == false) {
-            NXPLOG_FWDNLD_D("Chunked Write Frame Success Status received!!");
-            (pDlContext->tRWInfo.wRemChunkBytes) -=
-                (pDlContext->tRWInfo.wBytesToSendRecv);
-            (pDlContext->tRWInfo.bFirstChunkResp) = false;
-          } else {
-            NXPLOG_FWDNLD_E("UnExpected Status received!!");
-            wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_FAILED);
-          }
-        }
-
-        if (NFCSTATUS_SUCCESS == wStatus) {
-          (pDlContext->tRWInfo.wRemBytes) -=
-              (pDlContext->tRWInfo.wBytesToSendRecv);
-          (pDlContext->tRWInfo.wOffset) +=
-              (pDlContext->tRWInfo.wBytesToSendRecv);
-        }
-      } else if (((pDlContext->tRWInfo.bFirstChunkResp) == false) &&
-                 ((pDlContext->tRWInfo.bFramesSegmented) == true) &&
-                 (PHDNLDNFC_FIRST_FRAGFRAME_RESP ==
-                  (pInfo->pBuff[PHDNLDNFC_FRAMESTATUS_OFFSET]))) {
-        (pDlContext->tRWInfo.bFirstChunkResp) = true;
-        (pDlContext->tRWInfo.wRemChunkBytes) -=
-            (pDlContext->tRWInfo.wBytesToSendRecv);
-        (pDlContext->tRWInfo.wRemBytes) -=
-            ((pDlContext->tRWInfo.wBytesToSendRecv) + PHDNLDNFC_FRAME_HDR_LEN);
-        (pDlContext->tRWInfo.wOffset) += (pDlContext->tRWInfo.wBytesToSendRecv);
-
-        /* first write frame response received case */
-        if ((pDlContext->tRWInfo.bFirstWrReq) == true) {
-          NXPLOG_FWDNLD_D("First Write Frame Success Status received!!");
-          (pDlContext->tRWInfo.bFirstWrReq) = false;
-        }
-      } else if (((pDlContext->tRWInfo.bFirstChunkResp) == true) &&
-                 ((pDlContext->tRWInfo.bFramesSegmented) == true) &&
-                 (PHDNLDNFC_NEXT_FRAGFRAME_RESP ==
-                  (pInfo->pBuff[PHDNLDNFC_FRAMESTATUS_OFFSET]))) {
-        (pDlContext->tRWInfo.wRemChunkBytes) -=
-            (pDlContext->tRWInfo.wBytesToSendRecv);
-        (pDlContext->tRWInfo.wRemBytes) -=
-            (pDlContext->tRWInfo.wBytesToSendRecv);
-        (pDlContext->tRWInfo.wOffset) += (pDlContext->tRWInfo.wBytesToSendRecv);
-      } else if (PH_DL_STATUS_FIRMWARE_VERSION_ERROR ==
-                 (pInfo->pBuff[PHDNLDNFC_FRAMESTATUS_OFFSET])) {
-        NXPLOG_FWDNLD_E(
-            "FW version Error !!!could be either due to FW major version "
-            "mismatch or Firmware Already Up To Date !!");
-        (pDlContext->tRWInfo.bFirstWrReq) = false;
-        /* resetting wRemBytes to 0 to avoid any further write frames send */
-        (pDlContext->tRWInfo.wRemBytes) = 0;
-        (pDlContext->tRWInfo.wOffset) = 0;
-        wStatus = NFCSTATUS_FW_VERSION_ERROR;
-      } else if (PH_DL_STATUS_PLL_ERROR ==
-                 (pInfo->pBuff[PHDNLDNFC_FRAMESTATUS_OFFSET])) {
-        NXPLOG_FWDNLD_E("PLL Error Status received!!");
-        (pDlContext->tLastStatus) = PH_DL_STATUS_PLL_ERROR;
-        wStatus = NFCSTATUS_WRITE_FAILED;
-      } else if (PH_DL_STATUS_SIGNATURE_ERROR ==
-                 (pInfo->pBuff[PHDNLDNFC_FRAMESTATUS_OFFSET])) {
-        NXPLOG_FWDNLD_E("Signature Mismatch Error received!!");
-        /* save the status for use in loading the relevant recovery image
-         * (either signature or platform) */
-        (pDlContext->tLastStatus) = PH_DL_STATUS_SIGNATURE_ERROR;
-        wStatus = NFCSTATUS_REJECTED;
-      } else if (PH_DL_STATUS_MEM_BSY ==
-                 (pInfo->pBuff[PHDNLDNFC_FRAMESTATUS_OFFSET])) {
-        NXPLOG_FWDNLD_E("Mem Busy Status received!!");
-        (pDlContext->tLastStatus) = PH_DL_STATUS_MEM_BSY;
-        wStatus = NFCSTATUS_BUSY;
-      } else {
-        NXPLOG_FWDNLD_E("Unsuccessful Status received!!");
-        wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_FAILED);
-      }
-    } else if (PH_DL_CMD_READ == (pDlContext->tCmdId)) {
-      if (PH_DL_STATUS_OK == (pInfo->pBuff[PHDNLDNFC_FRAMESTATUS_OFFSET])) {
-        wReadLen = (((uint16_t)(pInfo->pBuff[PHDNLDNFC_FRAMESTATUS_OFFSET + 3])
-                     << 8U) |
-                    (pInfo->pBuff[PHDNLDNFC_FRAMESTATUS_OFFSET + 2]));
-
-        if (wReadLen != (pDlContext->tRWInfo.wBytesToSendRecv)) {
-          NXPLOG_FWDNLD_E("Desired Length bytes not received!!");
-          wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_FAILED);
-        } else {
-          memcpy(
-              &(pDlContext->tRspBuffInfo.pBuff[(pDlContext->tRWInfo.wOffset)]),
-              &(pInfo->pBuff[PHDNLDNFC_FRAME_RDDATA_OFFSET]), wReadLen);
-
-          (pDlContext->tRWInfo.wBytesRead) += wReadLen;
-
-          (pDlContext->tRspBuffInfo.wLen) = (pDlContext->tRWInfo.wBytesRead);
-
-          (pDlContext->tRWInfo.wRemBytes) -=
-              (pDlContext->tRWInfo.wBytesToSendRecv);
-          (pDlContext->tRWInfo.dwAddr) +=
-              (pDlContext->tRWInfo.wBytesToSendRecv);
-          (pDlContext->tRWInfo.wOffset) +=
-              (pDlContext->tRWInfo.wBytesToSendRecv);
-        }
-      } else {
-        NXPLOG_FWDNLD_E("Unsuccessful Status received!!");
-        wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_FAILED);
-      }
-    } else {
-      if (PH_DL_STATUS_OK == (pInfo->pBuff[PHDNLDNFC_FRAMESTATUS_OFFSET])) {
-        if ((0 != (pDlContext->tRspBuffInfo.wLen)) &&
-            (NULL != (pDlContext->tRspBuffInfo.pBuff))) {
-          memcpy((pDlContext->tRspBuffInfo.pBuff),
-                 &(pInfo->pBuff[PHDNLDNFC_FRAMESTATUS_OFFSET + 1]), wPldLen);
-
-          (pDlContext->tRspBuffInfo.wLen) = wPldLen;
-        }
-      } else {
-        NXPLOG_FWDNLD_E("Unsuccessful Status received!!");
-        wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_FAILED);
-      }
-    }
-  }
-
-  return wStatus;
-}
diff --git a/halimpl/pn54x/dnld/phDnldNfc_Internal.h b/halimpl/pn54x/dnld/phDnldNfc_Internal.h
deleted file mode 100644
index 9a9d422..0000000
--- a/halimpl/pn54x/dnld/phDnldNfc_Internal.h
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * Copyright (C) 2010-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * Internal Primitives (Functions + Variables) used for Firmware Download
- */
-#ifndef PHDNLDNFC_INTERNAL_H
-#define PHDNLDNFC_INTERNAL_H
-
-#include <phDnldNfc.h>
-#include <phDnldNfc_Cmd.h>
-#include <phDnldNfc_Status.h>
-
-#define PHDNLDNFC_CMDRESP_MAX_BUFF_SIZE                 \
-  (0x100U) /* DL Host Frame Buffer Size for all CMD/RSP \
-                except pipelined WRITE */
-#if (PHDNLDNFC_CMDRESP_MAX_BUFF_SIZE > PHNFC_I2C_FRAGMENT_SIZE)
-#undef PHDNLDNFC_CMDRESP_MAX_BUFF_SIZE
-#define PHDNLDNFC_CMDRESP_MAX_BUFF_SIZE (PHNFC_I2C_FRAGMENT_SIZE)
-#endif
-
-/* DL Host Short Frame Buffer Size for pipelined WRITE RSP */
-#define PHDNLDNFC_WRITERSP_BUFF_SIZE (0x08U)
-
-/* DL Host Frame Buffer Header Length */
-#define PHDNLDNFC_FRAME_HDR_LEN (0x02U)
-/* DL Host Frame Buffer CRC Length */
-#define PHDNLDNFC_FRAME_CRC_LEN (PHDNLDNFC_FRAME_HDR_LEN)
-#define PHDNLDNFC_FRAME_ID_LEN (0x01U) /* Length of Cmd Id */
-
-/* size of EEPROM/Flash address */
-#define PHDNLDNFC_EEFL_ADDR_SIZE (0x03U)
-/* 2 Byte size of data */
-#define PHDNLDNFC_DATA_SIZE (PHDNLDNFC_FRAME_HDR_LEN)
-
-/* Start of EEPROM address for log */
-#define PHDNLDNFC_EEPROM_LOG_START_ADDR (0x201F80U)
-/* End of EEPROM address for log */
-#define PHDNLDNFC_EEPROM_LOG_END_ADDR (0x201FBFU)
-
-#define PHDNLDNFC_MAX_LOG_SIZE \
-  ((PHDNLDNFC_EEPROM_LOG_END_ADDR - PHDNLDNFC_EEPROM_LOG_START_ADDR) + 1)
-
-/* DL Max Payload Size */
-#define PHDNLDNFC_CMDRESP_MAX_PLD_SIZE \
-  ((PHDNLDNFC_CMDRESP_MAX_BUFF_SIZE) - \
-   (PHDNLDNFC_FRAME_HDR_LEN + PHDNLDNFC_FRAME_CRC_LEN))
-
-/*
- * Enum definition contains Download Event Types
- */
-typedef enum phDnldNfc_Event {
-  phDnldNfc_EventInvalid = 0x00, /*Invalid Event Value*/
-  phDnldNfc_EventReset,          /* Reset event */
-  phDnldNfc_EventGetVer,         /* Get Version event*/
-  phDnldNfc_EventWrite,          /* Write event*/
-  phDnldNfc_EventRead,           /* Read event*/
-  phDnldNfc_EventIntegChk,       /* Integrity Check event*/
-  phDnldNfc_EventGetSesnSt,      /* Get Session State event*/
-  phDnldNfc_EventLog,            /* Log event*/
-  phDnldNfc_EventForce,          /* Force event*/
-  phDnldNfc_EventRaw, /* Raw Req/Rsp event,used currently for sending NCI RESET
-                         cmd */
-  phDnldNfc_EVENT_INT_MAX /* Max Event Count*/
-} phDnldNfc_Event_t;
-
-/*
- * Enum definition contains Download Handler states for each event requested
- */
-typedef enum phDnldNfc_State {
-  phDnldNfc_StateInit = 0x00, /* Handler init state */
-  phDnldNfc_StateSend,        /* Send frame to NFCC state */
-  phDnldNfc_StateRecv,        /* Recv Send complete State */
-  phDnldNfc_StateTimer, /* State to stop prev set timer on Recv or handle timed
-                           out scenario */
-  phDnldNfc_StateResponse,  /* Process response from NFCC state */
-  phDnldNfc_StatePipelined, /* Write requests to be pipelined state */
-  phDnldNfc_StateInvalid    /* Invalid Handler state */
-} phDnldNfc_State_t;
-
-/*
- * Enum definition contains Download Handler Transition
- */
-typedef enum phDnldNfc_Transition {
-  phDnldNfc_TransitionIdle =
-      0x00, /* Handler in Idle state - No Download in progress */
-  phDnldNfc_TransitionBusy,   /* Handler is busy processing download request */
-  phDnldNfc_TransitionInvalid /* Invalid Handler Transition */
-} phDnldNfc_Transition_t;
-
-/*
- * Enum definition contains the Frame input type for CmdId in process
- */
-typedef enum {
-  phDnldNfc_FTNone = 0, /* input type None */
-  phDnldNfc_ChkIntg, /* user eeprom offset & len to be added for Check Integrity
-                        Request */
-  phDnldNfc_FTWrite, /* Frame inputs for Write request */
-  phDnldNfc_FTLog,   /* Frame inputs for Log request */
-  phDnldNfc_FTForce, /* Frame input for Force cmd request */
-  phDnldNfc_FTRead,  /* Addr input required for read request */
-  phDnldNfc_FTRaw    /* Raw Req/Rsp type */
-} phDnldNfc_FrameInputType_t;
-
-/*
- * Contains Host Frame Buffer information.
- */
-typedef struct phDnldNfc_FrameInfo {
-  uint16_t dwSendlength; /* length of the payload  */
-  uint8_t
-      aFrameBuff[PHDNLDNFC_CMDRESP_MAX_BUFF_SIZE]; /* Buffer to store command
-                                                      that needs to be sent*/
-} phDnldNfc_FrameInfo_t,
-    *pphDnldNfc_FrameInfo_t; /* pointer to #phDnldNfc_FrameInfo_t */
-
-/*
- * Frame Input Type & Value for CmdId in Process
- */
-typedef struct phDnldNfc_FrameInput {
-  phDnldNfc_FrameInputType_t
-      Type;        /* Type of frame input required for current cmd in process */
-  uint32_t dwAddr; /* Address value required for Read/Write Cmd*/
-} phDnldNfc_FrameInput_t,
-    *pphDnldNfc_FrameInput_t; /* pointer to #phDnldNfc_FrameInput_t */
-
-/*
- * Context for the response timeout
- */
-typedef struct phDnldNfc_RspTimerInfo {
-  uint32_t dwRspTimerId;     /* Timer for Core to handle response */
-  uint8_t TimerStatus;       /* 0 = Timer not running 1 = timer running*/
-  NFCSTATUS wTimerExpStatus; /* Holds the status code on timer expiry */
-} phDnldNfc_RspTimerInfo_t;
-
-/*
- * Read/Write Processing Info
- */
-typedef struct phDnldNfc_RWInfo {
-  uint32_t dwAddr;    /* current Addr updated for read/write */
-  uint16_t wOffset;   /* current offset within the user buffer to read/write */
-  uint16_t wRemBytes; /* Remaining bytes to read/write */
-  uint16_t wRemChunkBytes; /* Remaining bytes within the chunked frame */
-  uint16_t wRWPldSize;     /* Size of the read/write payload per transaction */
-  uint16_t wBytesToSendRecv; /* Num of Bytes being written/read currently */
-  uint16_t wBytesRead;       /* Bytes read from read cmd currently */
-  bool_t bFramesSegmented;   /* Flag to indicate if Read/Write frames are
-                                segmented */
-  bool_t bFirstWrReq; /* Flag to indicate if this is the first write frame being
-                         sent */
-  bool_t
-      bFirstChunkResp; /* Flag to indicate if we got the first chunk response */
-} phDnldNfc_RWInfo_t, *pphDnldNfc_RWInfo_t; /* pointer to #phDnldNfc_RWInfo_t */
-
-/*
- * Download context structure
- */
-typedef struct phDnldNfc_DlContext {
-  const uint8_t* nxp_nfc_fw; /* Pointer to firmware version from image */
-  const uint8_t*
-      nxp_nfc_fwp; /* Pointer to firmware version from get_version cmd */
-  uint16_t nxp_nfc_fwp_len; /* Length of firmware image length */
-  uint16_t nxp_nfc_fw_len;  /* Firmware image length */
-  bool_t bResendLastFrame;  /* Flag to resend the last write frame after MEM_BSY
-                               status */
-  phDnldNfc_Transition_t
-      tDnldInProgress; /* Flag to indicate if download request is ongoing */
-  phDnldNfc_Event_t tCurrEvent; /* Current event being processed */
-  phDnldNfc_State_t tCurrState; /* Current state being processed */
-  pphDnldNfc_RspCb_t UserCb;    /* Upper layer call back function */
-  void* UserCtxt;               /* Pointer to upper layer context */
-  phDnldNfc_Buff_t tUserData;   /* Data buffer provided by caller */
-  phDnldNfc_Buff_t
-      tRspBuffInfo; /* Buffer to store payload field of the received response*/
-  phDnldNfc_FrameInfo_t tCmdRspFrameInfo; /* Buffer to hold the cmd/resp frame
-                                             except pipeline write */
-  phDnldNfc_FrameInfo_t
-      tPipeLineWrFrameInfo; /* Buffer to hold the pipelined write frame */
-  NFCSTATUS
-  wCmdSendStatus; /* Holds the status of cmd request made to cmd handler */
-  phDnldNfc_CmdId_t tCmdId; /* Cmd Id of the currently processed cmd */
-  phDnldNfc_FrameInput_t
-      FrameInp; /* input value required for current cmd in process */
-  phDnldNfc_RspTimerInfo_t
-      TimerInfo;              /* Timer context handled into download context*/
-  phDnldNfc_Buff_t tTKey;     /* Defualt Transport Key provided by caller */
-  phDnldNfc_RWInfo_t tRWInfo; /* Read/Write segmented frame info */
-  phDnldNfc_Status_t tLastStatus; /* saved status to distinguish signature or
-                                     pltform recovery */
-} phDnldNfc_DlContext_t,
-    *pphDnldNfc_DlContext_t; /* pointer to #phDnldNfc_DlContext_t structure */
-
-/* The phDnldNfc_CmdHandler function declaration */
-extern NFCSTATUS phDnldNfc_CmdHandler(void* pContext,
-                                      phDnldNfc_Event_t TrigEvent);
-
-#endif /* PHDNLDNFC_INTERNAL_H */
diff --git a/halimpl/pn54x/dnld/phDnldNfc_Status.h b/halimpl/pn54x/dnld/phDnldNfc_Status.h
deleted file mode 100644
index a5b9125..0000000
--- a/halimpl/pn54x/dnld/phDnldNfc_Status.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2010-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * Firmware Download Status Values
- */
-#ifndef PHDNLDNFC_STATUS_H
-#define PHDNLDNFC_STATUS_H
-
-#include <phNfcStatus.h>
-
-/* reusing LibNfcStatus.h value below as a placeholder for now, need to find
-   the right value */
-#define NFCSTATUS_ABORTED (0x0096) /* Command aborted */
-
-/*
- * Enum definition contains Firmware Download Status codes
- */
-typedef enum phDnldNfc_Status {
-  PH_DL_STATUS_PLL_ERROR = 0x0D,
-  PH_DL_STATUS_LC_WRONG = 0x13,
-  PH_DL_STATUS_LC_TERMINATION_NOT_SUPPORTED = 0x14,
-  PH_DL_STATUS_LC_CREATION_NOT_SUPPORTED = 0x15,
-  PH_DL_STATUS_LC_UNKNOWN = 0x16,
-  PH_DL_STATUS_AUTHENTICATION_ERROR = 0x19,
-  PH_DL_STATUS_NOT_AUTHENTICATED = 0x1A,
-  PH_DL_STATUS_AUTHENTICATION_LOST = 0x1B,
-  PH_DL_STATUS_WRITE_PROTECTED = 0x1C,
-  PH_DL_STATUS_READ_PROTECTED = 0x1D,
-  PH_DL_STATUS_ADDR_RANGE_OFL_ERROR = 0x1E,
-  PH_DL_STATUS_BUFFER_OFL_ERROR = 0x1F,
-  PH_DL_STATUS_MEM_BSY = 0x20,
-  PH_DL_STATUS_SIGNATURE_ERROR = 0x21,
-  PH_DL_STATUS_SESSION_WAS_OPEN = 0x22,
-  PH_DL_STATUS_SESSION_WAS_CLOSED = 0x23,
-  /* the Firmware version passed to CommitSession is not greater than
-      the EEPROM resident stored Firmware version number */
-  PH_DL_STATUS_FIRMWARE_VERSION_ERROR = 0x24,
-  PH_DL_STATUS_LOOPBACK_DATA_MISSMATCH_ERROR = 0x25,
-  /*****************************/
-  PH_DL_STATUS_HOST_PAYLOAD_UFL_ERROR = 0x26,
-  PH_DL_STATUS_HOST_PAYLOAD_OFL_ERROR = 0x27,
-  PH_DL_STATUS_PROTOCOL_ERROR = 0x28,
-  /* Download codes re-mapped to generic entries */
-  PH_DL_STATUS_INVALID_ADDR = NFCSTATUS_INVALID_PARAMETER,
-  PH_DL_STATUS_GENERIC_ERROR = NFCSTATUS_FAILED,
-  PH_DL_STATUS_ABORTED_CMD = NFCSTATUS_ABORTED,
-  PH_DL_STATUS_FLASH_WRITE_PROTECTED = PH_DL_STATUS_WRITE_PROTECTED,
-  PH_DL_STATUS_FLASH_READ_PROTECTED = PH_DL_STATUS_READ_PROTECTED,
-  PH_DL_STATUS_USERDATA_WRITE_PROTECTED = PH_DL_STATUS_WRITE_PROTECTED,
-  PH_DL_STATUS_USERDATA_READ_PROTECTED = PH_DL_STATUS_READ_PROTECTED,
-  PH_DL_STATUS_OK = NFCSTATUS_SUCCESS
-} phDnldNfc_Status_t;
-
-#endif /* PHDNLDNFC_STATUS_H */
diff --git a/halimpl/pn54x/dnld/phDnldNfc_Utils.c b/halimpl/pn54x/dnld/phDnldNfc_Utils.c
deleted file mode 100644
index 014ca66..0000000
--- a/halimpl/pn54x/dnld/phDnldNfc_Utils.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (C) 2010-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * Download Component
- * Download Utility routines implementation
- */
-
-#include <phDnldNfc_Utils.h>
-#include <phNxpLog.h>
-
-static uint16_t const aCrcTab[256] = {
-    0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108,
-    0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210,
-    0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b,
-    0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,
-    0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee,
-    0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6,
-    0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d,
-    0xc7bc, 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
-    0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, 0x5af5,
-    0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc,
-    0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4,
-    0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,
-    0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13,
-    0x2e32, 0x1e51, 0x0e70, 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a,
-    0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e,
-    0xe16f, 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
-    0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1,
-    0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb,
-    0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0,
-    0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,
-    0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657,
-    0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9,
-    0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882,
-    0x28a3, 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
-    0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e,
-    0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07,
-    0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0xef1f, 0xff3e, 0xcf5d,
-    0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,
-    0x2e93, 0x3eb2, 0x0ed1, 0x1ef0};
-
-/*******************************************************************************
-**
-** Function         phDnldNfc_CalcCrc16
-**
-** Description      Calculates CRC16 for the frame buffer
-**
-** Parameters       pBuff - CRC16 calculation input buffer
-**                  wLen  - input buffer length
-**
-** Returns          wCrc  - computed 2 byte CRC16 value
-**
-*******************************************************************************/
-uint16_t phDnldNfc_CalcCrc16(uint8_t* pBuff, uint16_t wLen) {
-  uint16_t wTmp;
-  uint16_t wValue;
-  uint16_t wCrc = 0xffff;
-  uint32_t i;
-
-  if ((NULL == pBuff) || (0 == wLen)) {
-    NXPLOG_FWDNLD_W("Invalid Params supplied!!");
-  } else {
-    /* Perform CRC calculation according to ccitt with a initial value of 0x1d0f
-     */
-    for (i = 0; i < wLen; i++) {
-      wValue = 0x00ffU & (uint16_t)pBuff[i];
-      wTmp = (wCrc >> 8U) ^ wValue;
-      wCrc = (wCrc << 8U) ^ aCrcTab[wTmp];
-    }
-  }
-
-  return wCrc;
-}
diff --git a/halimpl/pn54x/dnld/phDnldNfc_Utils.h b/halimpl/pn54x/dnld/phDnldNfc_Utils.h
deleted file mode 100644
index 4b4e2af..0000000
--- a/halimpl/pn54x/dnld/phDnldNfc_Utils.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2010-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * Firmware Download Utilities File
- */
-#ifndef PHDNLDNFC_UTILS_H
-#define PHDNLDNFC_UTILS_H
-
-#include <phDnldNfc.h>
-
-extern uint16_t phDnldNfc_CalcCrc16(uint8_t* pBuff, uint16_t wLen);
-
-#endif /* PHDNLDNFC_UTILS_H */
diff --git a/halimpl/pn54x/dnld/phNxpNciHal_Dnld.c b/halimpl/pn54x/dnld/phNxpNciHal_Dnld.c
deleted file mode 100644
index 42cadba..0000000
--- a/halimpl/pn54x/dnld/phNxpNciHal_Dnld.c
+++ /dev/null
@@ -1,1808 +0,0 @@
-/*
- * Copyright (C) 2012-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <phDnldNfc.h>
-#include <phNxpConfig.h>
-#include <phNxpLog.h>
-#include <phNxpNciHal_Dnld.h>
-#include <phNxpNciHal_utils.h>
-#include <phTmlNfc.h>
-
-/* Macro */
-#define PHLIBNFC_IOCTL_DNLD_MAX_ATTEMPTS 3
-#define PHLIBNFC_IOCTL_DNLD_GETVERLEN (0x0BU)
-#define PHLIBNFC_IOCTL_DNLD_GETVERLEN_MRA2_1 (0x09U)
-#define PHLIBNFC_DNLD_MEM_READ (0xECU)
-#define PHLIBNFC_DNLD_MEM_WRITE (0xEDU)
-#define PHLIBNFC_DNLD_READ_LOG (0xEEU)
-#define NFC_MEM_READ (0xD0U)
-#define NFC_MEM_WRITE (0xD1U)
-#define NFC_FW_DOWNLOAD (0x09F7U)
-
-/* External global variable to get FW version */
-extern uint16_t wFwVer;
-extern uint16_t wMwVer;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-extern uint8_t gRecFWDwnld;
-#endif
-/* RF Configuration structure */
-typedef struct phLibNfc_IoctlSetRfConfig {
-  uint8_t bNumOfParams;   /* Number of Rf configurable parameters to be set */
-  uint8_t* pInputBuffer;  /* Buffer containing Rf configurable parameters */
-  uint8_t bSetSysPmuFlag; /* Flag to decide wether to set SystemPmu or no from
-                             the first byte */
-} phLibNfc_IoctlSetRfConfig;
-
-/* Structure to hold information from EEPROM */
-typedef struct phLibNfc_EELogParams {
-  uint16_t wCurrMwVer;      /* Holds current MW version on the chip */
-  uint16_t wCurrFwVer;      /* Holds current FW version on the chip */
-  uint16_t wNumDnldTrig;    /* Total number of times dnld has been attempted */
-  uint16_t wNumDnldSuccess; /* Total number of times dnld has been successful */
-  uint16_t wNumDnldFail;    /* Total number of times dnld has Failed */
-  uint16_t wDnldFailCnt;    /* holds the number of times dnld has failed,will be
-                               reset on success */
-  bool_t bConfig; /* Flag to be set in dnld mode after successful dnld,to be
-                    reset in NCI Mode
-                    after setting the NCI configuration */
-} phLibNfc_EELogParams_t;
-
-/* FW download module context structure */
-typedef struct {
-  bool_t bDnldEepromWrite; /* Flag to indicate eeprom write request*/
-  bool_t
-      bSkipSeq; /* Flag to indicate FW download sequence to be skipped or not */
-  bool_t bSkipReset; /* Flag to indicate Reset cmd to be skipped or not in FW
-                        download sequence */
-  bool_t bSkipForce; /* Flag to indicate Force cmd to be skipped or not in FW
-                        recovery sequence */
-  bool_t bPrevSessnOpen; /* Flag to indicate previous download session is open
-                            or not */
-  bool_t bLibNfcCtxtMem; /* flag to indicate if mem was allocated for
-                            gpphLibNfc_Context */
-  bool_t bDnldInitiated; /* Flag to indicate if fw upgrade was initiated */
-  bool_t
-      bSendNciCmd; /* Flag to indicate if NCI cmd to be sent or not,after PKU */
-  uint8_t bChipVer;     /* holds the hw chip version */
-  bool_t bDnldRecovery; /* Flag to indicate if dnld recovery sequence needs to
-                           be triggered */
-  bool_t bForceDnld; /* Flag to indicate if forced download option is enabled */
-  bool_t bRetryDnld; /* Flag to indicate retry download after successful
-                        recovery complete */
-  uint8_t
-      bDnldAttempts;  /* Holds the count of no. of dnld attempts made.max 3 */
-  uint16_t IoctlCode; /* Ioctl code*/
-  bool_t bDnldAttemptFailed; /* Flag to indicate last download attempt failed */
-  NFCSTATUS bLastStatus; /* Holds the actual download write attempt status */
-  phLibNfc_EELogParams_t
-      tLogParams;     /* holds the params that could be logged to reserved EE
-                         address */
-  uint8_t bClkSrcVal; /* Holds the System clock source read from config file */
-  uint8_t
-      bClkFreqVal; /* Holds the System clock frequency read from config file */
-} phNxpNciHal_fw_Ioctl_Cntx_t;
-
-/* Global variables used in this file only*/
-static phNxpNciHal_fw_Ioctl_Cntx_t gphNxpNciHal_fw_IoctlCtx;
-
-/* Local function prototype */
-static NFCSTATUS phNxpNciHal_fw_dnld_reset(void* pContext, NFCSTATUS status,
-                                           void* pInfo);
-
-static void phNxpNciHal_fw_dnld_reset_cb(void* pContext, NFCSTATUS status,
-                                         void* pInfo);
-
-static NFCSTATUS phNxpNciHal_fw_dnld_force(void* pContext, NFCSTATUS status,
-                                           void* pInfo);
-
-static void phNxpNciHal_fw_dnld_force_cb(void* pContext, NFCSTATUS status,
-                                         void* pInfo);
-
-static void phNxpNciHal_fw_dnld_normal_cb(void* pContext, NFCSTATUS status,
-                                          void* pInfo);
-
-static NFCSTATUS phNxpNciHal_fw_dnld_normal(void* pContext, NFCSTATUS status,
-                                            void* pInfo);
-
-static void phNxpNciHal_fw_dnld_get_version_cb(void* pContext, NFCSTATUS status,
-                                               void* pInfo);
-
-static NFCSTATUS phNxpNciHal_fw_dnld_get_version(void* pContext,
-                                                 NFCSTATUS status, void* pInfo);
-
-static void phNxpNciHal_fw_dnld_get_sessn_state_cb(void* pContext,
-                                                   NFCSTATUS status,
-                                                   void* pInfo);
-
-static NFCSTATUS phNxpNciHal_fw_dnld_get_sessn_state(void* pContext,
-                                                     NFCSTATUS status,
-                                                     void* pInfo);
-
-static void phNxpNciHal_fw_dnld_log_read_cb(void* pContext, NFCSTATUS status,
-                                            void* pInfo);
-
-static NFCSTATUS phNxpNciHal_fw_dnld_log_read(void* pContext, NFCSTATUS status,
-                                              void* pInfo);
-
-static void phNxpNciHal_fw_dnld_write_cb(void* pContext, NFCSTATUS status,
-                                         void* pInfo);
-
-static NFCSTATUS phNxpNciHal_fw_dnld_write(void* pContext, NFCSTATUS status,
-                                           void* pInfo);
-
-static void phNxpNciHal_fw_dnld_chk_integrity_cb(void* pContext,
-                                                 NFCSTATUS status, void* pInfo);
-
-static NFCSTATUS phNxpNciHal_fw_dnld_chk_integrity(void* pContext,
-                                                   NFCSTATUS status,
-                                                   void* pInfo);
-
-static void phNxpNciHal_fw_dnld_log_cb(void* pContext, NFCSTATUS status,
-                                       void* pInfo);
-
-static NFCSTATUS phNxpNciHal_fw_dnld_log(void* pContext, NFCSTATUS status,
-                                         void* pInfo);
-
-static void phNxpNciHal_fw_dnld_send_ncicmd_Cb(void* pContext, NFCSTATUS status,
-                                               void* pInfo);
-
-static NFCSTATUS phNxpNciHal_fw_dnld_send_ncicmd(void* pContext,
-                                                 NFCSTATUS status, void* pInfo);
-
-static NFCSTATUS phNxpNciHal_fw_dnld_recover(void* pContext, NFCSTATUS status,
-                                             void* pInfo);
-
-static NFCSTATUS phNxpNciHal_fw_dnld_complete(void* pContext, NFCSTATUS status,
-                                              void* pInfo);
-
-/* Internal function to verify Crc Status byte received during CheckIntegrity */
-static NFCSTATUS phLibNfc_VerifyCrcStatus(uint8_t bCrcStatus);
-
-static void phNxpNciHal_fw_dnld_recover_cb(void* pContext, NFCSTATUS status,
-                                           void* pInfo);
-
-static NFCSTATUS phNxpNciHal_fw_seq_handler(
-    NFCSTATUS (*seq_handler[])(void* pContext, NFCSTATUS status, void* pInfo));
-
-/* Array of pointers to start fw download seq */
-static NFCSTATUS (*phNxpNciHal_dwnld_seqhandler[])(void* pContext,
-                                                   NFCSTATUS status,
-                                                   void* pInfo) = {
-#if (NFC_NXP_CHIP_TYPE == PN547C2)
-    phNxpNciHal_fw_dnld_normal,
-    phNxpNciHal_fw_dnld_normal,
-#endif
-    phNxpNciHal_fw_dnld_get_sessn_state,
-    phNxpNciHal_fw_dnld_get_version,
-    phNxpNciHal_fw_dnld_log_read,
-    phNxpNciHal_fw_dnld_write,
-    phNxpNciHal_fw_dnld_get_sessn_state,
-    phNxpNciHal_fw_dnld_get_version,
-    phNxpNciHal_fw_dnld_log,
-    phNxpNciHal_fw_dnld_chk_integrity,
-    NULL};
-
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-/* Array of pointers to start dummy fw download seq */
-static NFCSTATUS (*phNxpNciHal_dummy_rec_dwnld_seqhandler[])(void* pContext,
-                                                             NFCSTATUS status,
-                                                             void* pInfo) = {
-    phNxpNciHal_fw_dnld_normal,
-    phNxpNciHal_fw_dnld_normal,
-    phNxpNciHal_fw_dnld_get_sessn_state,
-    phNxpNciHal_fw_dnld_get_version,
-    phNxpNciHal_fw_dnld_log_read,
-    phNxpNciHal_fw_dnld_write,
-    NULL};
-#endif
-
-/* Download Recovery Sequence */
-static NFCSTATUS (*phNxpNciHal_dwnld_rec_seqhandler[])(void* pContext,
-                                                       NFCSTATUS status,
-                                                       void* pInfo) = {
-    phNxpNciHal_fw_dnld_reset, phNxpNciHal_fw_dnld_force,
-    phNxpNciHal_fw_dnld_recover, phNxpNciHal_fw_dnld_send_ncicmd, NULL};
-
-/* Download Log Sequence */
-static NFCSTATUS (*phNxpNciHal_dwnld_log_seqhandler[])(void* pContext,
-                                                       NFCSTATUS status,
-                                                       void* pInfo) = {
-    phNxpNciHal_fw_dnld_log, NULL};
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_fw_dnld_reset_cb
-**
-** Description      Download Reset callback
-**
-** Returns          None
-**
-*******************************************************************************/
-static void phNxpNciHal_fw_dnld_reset_cb(void* pContext, NFCSTATUS status,
-                                         void* pInfo) {
-  phNxpNciHal_Sem_t* p_cb_data = (phNxpNciHal_Sem_t*)pContext;
-  UNUSED(pInfo);
-  if (NFCSTATUS_SUCCESS == status) {
-    NXPLOG_FWDNLD_D("phNxpNciHal_fw_dnld_reset_cb - Request Successful");
-  } else {
-    NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_reset_cb - Request Failed!!");
-  }
-  p_cb_data->status = status;
-
-  SEM_POST(p_cb_data);
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_fw_dnld_reset
-**
-** Description      Download Reset
-**
-** Returns          NFCSTATUS_SUCCESS if success
-**
-*******************************************************************************/
-static NFCSTATUS phNxpNciHal_fw_dnld_reset(void* pContext, NFCSTATUS status,
-                                           void* pInfo) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  phNxpNciHal_Sem_t cb_data;
-  UNUSED(pContext);
-  UNUSED(status);
-  UNUSED(pInfo);
-  if (((gphNxpNciHal_fw_IoctlCtx.bSkipSeq) == true) ||
-      ((gphNxpNciHal_fw_IoctlCtx.bSkipReset) == true)) {
-    if ((gphNxpNciHal_fw_IoctlCtx.bSkipReset) == true) {
-      (gphNxpNciHal_fw_IoctlCtx.bSkipReset) = false;
-    }
-    return NFCSTATUS_SUCCESS;
-  }
-
-  if (phNxpNciHal_init_cb_data(&cb_data, NULL) != NFCSTATUS_SUCCESS) {
-    NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_reset Create dnld_cb_data  failed");
-    return NFCSTATUS_FAILED;
-  }
-  wStatus = phDnldNfc_Reset((pphDnldNfc_RspCb_t)&phNxpNciHal_fw_dnld_reset_cb,
-                            (void*)&cb_data);
-
-  if (wStatus != NFCSTATUS_PENDING) {
-    NXPLOG_FWDNLD_E("phDnldNfc_Reset failed");
-    wStatus = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-
-  /* Wait for callback response */
-  if (SEM_WAIT(cb_data)) {
-    NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_reset semaphore error");
-    wStatus = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-
-  if (cb_data.status != NFCSTATUS_SUCCESS) {
-    NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_reset cb failed");
-    wStatus = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-
-  wStatus = NFCSTATUS_SUCCESS;
-
-clean_and_return:
-  phNxpNciHal_cleanup_cb_data(&cb_data);
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_fw_dnld_normal_cb
-**
-** Description      Download Normal callback
-**
-** Returns          None
-**
-*******************************************************************************/
-static void phNxpNciHal_fw_dnld_normal_cb(void* pContext, NFCSTATUS status,
-                                          void* pInfo) {
-  phNxpNciHal_Sem_t* p_cb_data = (phNxpNciHal_Sem_t*)pContext;
-  UNUSED(pInfo);
-  if (NFCSTATUS_SUCCESS == status) {
-    NXPLOG_FWDNLD_D("phNxpNciHal_fw_dnld_normal_cb - Request Successful");
-  } else {
-    NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_normal_cb - Request Failed!!");
-    /* In this fail scenario trick the sequence handler to call next recover
-     * sequence */
-    status = NFCSTATUS_SUCCESS;
-  }
-  p_cb_data->status = status;
-
-  SEM_POST(p_cb_data);
-  usleep(1000 * 10);
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_fw_dnld_force_cb
-**
-** Description      Download Force callback
-**
-** Returns          None
-**
-*******************************************************************************/
-static void phNxpNciHal_fw_dnld_force_cb(void* pContext, NFCSTATUS status,
-                                         void* pInfo) {
-  phNxpNciHal_Sem_t* p_cb_data = (phNxpNciHal_Sem_t*)pContext;
-  UNUSED(pInfo);
-  if (NFCSTATUS_SUCCESS == status) {
-    NXPLOG_FWDNLD_D("phLibNfc_DnldForceCb - Request Successful");
-    (gphNxpNciHal_fw_IoctlCtx.bDnldRecovery) = false;
-    (gphNxpNciHal_fw_IoctlCtx.bRetryDnld) = true;
-    (gphNxpNciHal_fw_IoctlCtx.bSkipReset) = true;
-  } else {
-    /* In this fail scenario trick the sequence handler to call next recover
-     * sequence */
-    status = NFCSTATUS_SUCCESS;
-    NXPLOG_FWDNLD_E("phLibNfc_DnldForceCb - Request Failed!!");
-  }
-  p_cb_data->status = status;
-
-  SEM_POST(p_cb_data);
-  usleep(1000 * 10);
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_fw_dnld_normal
-**
-** Description      Download Normal
-**
-** Returns          NFCSTATUS_SUCCESS if success
-**
-*******************************************************************************/
-static NFCSTATUS phNxpNciHal_fw_dnld_normal(void* pContext, NFCSTATUS status,
-                                            void* pInfo) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  uint8_t bClkVal[2];
-  phDnldNfc_Buff_t tData;
-  phNxpNciHal_Sem_t cb_data;
-  UNUSED(pContext);
-  UNUSED(status);
-  UNUSED(pInfo);
-  if ((gphNxpNciHal_fw_IoctlCtx.bSkipForce) == true) {
-    return NFCSTATUS_SUCCESS;
-  } else {
-    /*
-    bClkVal[0] = NXP_SYS_CLK_SRC_SEL;
-    bClkVal[1] = NXP_SYS_CLK_FREQ_SEL;
-    */
-    bClkVal[0] = gphNxpNciHal_fw_IoctlCtx.bClkSrcVal;
-    bClkVal[1] = gphNxpNciHal_fw_IoctlCtx.bClkFreqVal;
-
-    (tData.pBuff) = bClkVal;
-    (tData.wLen) = sizeof(bClkVal);
-
-    if ((gphNxpNciHal_fw_IoctlCtx.bDnldRecovery) == true) {
-      (gphNxpNciHal_fw_IoctlCtx.bDnldAttempts)++;
-    }
-
-    if (phNxpNciHal_init_cb_data(&cb_data, NULL) != NFCSTATUS_SUCCESS) {
-      NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_reset Create dnld_cb_data  failed");
-      return NFCSTATUS_FAILED;
-    }
-    wStatus = phDnldNfc_Force(
-        &tData, (pphDnldNfc_RspCb_t)&phNxpNciHal_fw_dnld_normal_cb,
-        (void*)&cb_data);
-
-    if (NFCSTATUS_PENDING != wStatus) {
-      NXPLOG_FWDNLD_E("phDnldNfc_Normal failed");
-      (gphNxpNciHal_fw_IoctlCtx.bSkipForce) = false;
-      (gphNxpNciHal_fw_IoctlCtx.bRetryDnld) = false;
-      goto clean_and_return;
-    }
-  }
-
-  /* Wait for callback response */
-  if (SEM_WAIT(cb_data)) {
-    NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_normal semaphore error");
-    wStatus = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-
-  if (cb_data.status != NFCSTATUS_SUCCESS) {
-    NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_normal cb failed");
-    wStatus = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-
-  wStatus = NFCSTATUS_SUCCESS;
-
-clean_and_return:
-  phNxpNciHal_cleanup_cb_data(&cb_data);
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_fw_dnld_force
-**
-** Description      Download Force
-**
-** Returns          NFCSTATUS_SUCCESS if success
-**
-*******************************************************************************/
-static NFCSTATUS phNxpNciHal_fw_dnld_force(void* pContext, NFCSTATUS status,
-                                           void* pInfo) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  uint8_t bClkVal[2];
-  phDnldNfc_Buff_t tData;
-  phNxpNciHal_Sem_t cb_data;
-  UNUSED(pContext);
-  UNUSED(status);
-  UNUSED(pInfo);
-  if ((gphNxpNciHal_fw_IoctlCtx.bSkipForce) == true) {
-    return NFCSTATUS_SUCCESS;
-  } else {
-    /*
-    bClkVal[0] = NXP_SYS_CLK_SRC_SEL;
-    bClkVal[1] = NXP_SYS_CLK_FREQ_SEL;
-    */
-    bClkVal[0] = gphNxpNciHal_fw_IoctlCtx.bClkSrcVal;
-    bClkVal[1] = gphNxpNciHal_fw_IoctlCtx.bClkFreqVal;
-
-    (tData.pBuff) = bClkVal;
-    (tData.wLen) = sizeof(bClkVal);
-
-    if ((gphNxpNciHal_fw_IoctlCtx.bDnldRecovery) == true) {
-      (gphNxpNciHal_fw_IoctlCtx.bDnldAttempts)++;
-    }
-
-    if (phNxpNciHal_init_cb_data(&cb_data, NULL) != NFCSTATUS_SUCCESS) {
-      NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_reset Create dnld_cb_data  failed");
-      return NFCSTATUS_FAILED;
-    }
-    wStatus = phDnldNfc_Force(&tData,
-                              (pphDnldNfc_RspCb_t)&phNxpNciHal_fw_dnld_force_cb,
-                              (void*)&cb_data);
-
-    if (NFCSTATUS_PENDING != wStatus) {
-      NXPLOG_FWDNLD_E("phDnldNfc_Force failed");
-      (gphNxpNciHal_fw_IoctlCtx.bSkipForce) = false;
-      (gphNxpNciHal_fw_IoctlCtx.bRetryDnld) = false;
-      goto clean_and_return;
-    }
-  }
-
-  /* Wait for callback response */
-  if (SEM_WAIT(cb_data)) {
-    NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_force semaphore error");
-    wStatus = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-
-  if (cb_data.status != NFCSTATUS_SUCCESS) {
-    NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_force cb failed");
-    wStatus = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-
-  wStatus = NFCSTATUS_SUCCESS;
-
-clean_and_return:
-  phNxpNciHal_cleanup_cb_data(&cb_data);
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_fw_dnld_get_version_cb
-**
-** Description      Download Get version callback
-**
-** Returns          None
-**
-*******************************************************************************/
-static void phNxpNciHal_fw_dnld_get_version_cb(void* pContext, NFCSTATUS status,
-                                               void* pInfo) {
-  phNxpNciHal_Sem_t* p_cb_data = (phNxpNciHal_Sem_t*)pContext;
-  NFCSTATUS wStatus = status;
-  pphDnldNfc_Buff_t pRespBuff;
-  uint16_t wFwVern = 0;
-  uint16_t wMwVern = 0;
-  uint8_t bHwVer = 0;
-  uint8_t bExpectedLen = 0;
-  uint8_t bNewVer[2];
-  uint8_t bCurrVer[2];
-
-  if ((NFCSTATUS_SUCCESS == wStatus) && (NULL != pInfo)) {
-    NXPLOG_FWDNLD_D("phNxpNciHal_fw_dnld_get_version_cb - Request Successful");
-
-    pRespBuff = (pphDnldNfc_Buff_t)pInfo;
-
-    if ((0 != pRespBuff->wLen) && (NULL != pRespBuff->pBuff)) {
-      bHwVer = (pRespBuff->pBuff[0]);
-      bHwVer &= 0x0F; /* 0x0F is the mask to extract chip version */
-
-      if ((PHDNLDNFC_HWVER_MRA2_1 == bHwVer) ||
-          (PHDNLDNFC_HWVER_MRA2_2 == bHwVer)
-#if (NFC_NXP_CHIP_TYPE == PN551)
-          || (PHDNLDNFC_HWVER_PN551_MRA1_0 == bHwVer)
-#elif (NFC_NXP_CHIP_TYPE == PN548C2)
-          || (PHDNLDNFC_HWVER_PN548AD_MRA1_0 == bHwVer)
-#elif (NFC_NXP_CHIP_TYPE == PN553)
-          || (PHDNLDNFC_HWVER_PN553_MRA1_0 == bHwVer ||
-              PHDNLDNFC_HWVER_PN553_MRA1_0_UPDATED & pRespBuff->pBuff[0])
-#endif
-              ) {
-        bExpectedLen = PHLIBNFC_IOCTL_DNLD_GETVERLEN_MRA2_1;
-        (gphNxpNciHal_fw_IoctlCtx.bChipVer) = bHwVer;
-#if (NFC_NXP_CHIP_TYPE == PN553)
-        if (PHDNLDNFC_HWVER_PN553_MRA1_0_UPDATED & pRespBuff->pBuff[0]) {
-          (gphNxpNciHal_fw_IoctlCtx.bChipVer) = pRespBuff->pBuff[0];
-        }
-#endif
-      } else if ((bHwVer >= PHDNLDNFC_HWVER_MRA1_0) &&
-                 (bHwVer <= PHDNLDNFC_HWVER_MRA2_0)) {
-        bExpectedLen = PHLIBNFC_IOCTL_DNLD_GETVERLEN;
-        (gphNxpNciHal_fw_IoctlCtx.bChipVer) = bHwVer;
-      } else {
-        wStatus = NFCSTATUS_FAILED;
-        NXPLOG_FWDNLD_E(
-            "phNxpNciHal_fw_dnld_get_version_cb - Invalid ChipVersion!!");
-      }
-    } else {
-      wStatus = NFCSTATUS_FAILED;
-      NXPLOG_FWDNLD_E(
-          "phNxpNciHal_fw_dnld_get_version_cb - Version Resp Buff "
-          "Invalid...\n");
-    }
-
-    if ((NFCSTATUS_SUCCESS == wStatus) && (bExpectedLen == pRespBuff->wLen) &&
-        (NULL != pRespBuff->pBuff)) {
-      NXPLOG_FWDNLD_D(
-          "phNxpNciHal_fw_dnld_get_version_cb - Valid Version Resp "
-          "Buff!!...\n");
-
-      /* Validate version details to confirm if continue with the next sequence
-       * of Operations. */
-      memcpy(bCurrVer, &(pRespBuff->pBuff[bExpectedLen - 2]), sizeof(bCurrVer));
-      wFwVern = wFwVer;
-      wMwVern = wMwVer;
-
-      memcpy(bNewVer, &wFwVern, sizeof(bNewVer));
-
-      /* check if the ROM code version and FW Major version is valid for the
-       * chip*/
-      /* ES2.2 Rom Version - 0x7 and Valid FW Major Version - 0x1 */
-      if ((pRespBuff->pBuff[1] == 0x07) && (bNewVer[1] != 0x01)) {
-        NXPLOG_FWDNLD_E(
-            "C1 FW on C2 chip is not allowed - FW Major Version!= 1 on ES2.2");
-        wStatus = NFCSTATUS_NOT_ALLOWED;
-      }
-      /* Major Version number check */
-      else if ((FALSE == (gphNxpNciHal_fw_IoctlCtx.bDnldInitiated)) &&
-               (bNewVer[1] < bCurrVer[1])) {
-        NXPLOG_FWDNLD_E("Version Check Failed - MajorVerNum Mismatch\n");
-        NXPLOG_FWDNLD_E("NewVer %d != CurrVer %d\n", bNewVer[1], bCurrVer[1]);
-        wStatus = NFCSTATUS_NOT_ALLOWED;
-      }
-      /* Minor Version number check - before download.*/
-      else if ((FALSE == (gphNxpNciHal_fw_IoctlCtx.bDnldInitiated)) &&
-               ((bNewVer[0] == bCurrVer[0]) && (bNewVer[1] == bCurrVer[1]))) {
-        wStatus = NFCSTATUS_SUCCESS;
-#if (PH_LIBNFC_ENABLE_FORCE_DOWNLOAD == 0)
-        NXPLOG_FWDNLD_D("Version Already UpToDate!!\n");
-        (gphNxpNciHal_fw_IoctlCtx.bSkipSeq) = TRUE;
-#else
-        (gphNxpNciHal_fw_IoctlCtx.bForceDnld) = TRUE;
-#endif
-
-      }
-      /* Minor Version number check - after download
-       * after download, we should get the same version information.*/
-      else if ((TRUE == (gphNxpNciHal_fw_IoctlCtx.bDnldInitiated)) &&
-               ((bNewVer[0] != bCurrVer[0]) || (bNewVer[1] != bCurrVer[1]))) {
-        NXPLOG_FWDNLD_E("Version Not Updated After Download!!\n");
-        wStatus = NFCSTATUS_FAILED;
-      } else {
-        NXPLOG_FWDNLD_D("Version Check Successful\n");
-        /* Store the Mw & Fw Version for updating in EEPROM Log Area after
-         * successful download */
-        if (TRUE == (gphNxpNciHal_fw_IoctlCtx.bDnldInitiated)) {
-          NXPLOG_FWDNLD_W("Updating Fw & Mw Versions..");
-          (gphNxpNciHal_fw_IoctlCtx.tLogParams.wCurrMwVer) = wMwVern;
-          (gphNxpNciHal_fw_IoctlCtx.tLogParams.wCurrFwVer) = wFwVern;
-        }
-      }
-    } else {
-      NXPLOG_FWDNLD_E(
-          "phNxpNciHal_fw_dnld_get_version_cb - Version Resp Buff "
-          "Invalid...\n");
-    }
-  } else {
-    wStatus = NFCSTATUS_FAILED;
-    NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_get_version_cb - Request Failed!!");
-  }
-
-  p_cb_data->status = wStatus;
-  SEM_POST(p_cb_data);
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_fw_dnld_get_version
-**
-** Description      Download Get version
-**
-** Returns          NFCSTATUS_SUCCESS if success
-**
-*******************************************************************************/
-static NFCSTATUS phNxpNciHal_fw_dnld_get_version(void* pContext,
-                                                 NFCSTATUS status,
-                                                 void* pInfo) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  phNxpNciHal_Sem_t cb_data;
-  static uint8_t bGetVerRes[11];
-  phDnldNfc_Buff_t tDnldBuff;
-  UNUSED(pContext);
-  UNUSED(status);
-  UNUSED(pInfo);
-  if (((gphNxpNciHal_fw_IoctlCtx.bSkipSeq) == true) ||
-      ((gphNxpNciHal_fw_IoctlCtx.bPrevSessnOpen) == true)) {
-    return NFCSTATUS_SUCCESS;
-  }
-
-  if (phNxpNciHal_init_cb_data(&cb_data, NULL) != NFCSTATUS_SUCCESS) {
-    NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_get_version cb_data creation failed");
-    return NFCSTATUS_FAILED;
-  }
-
-  tDnldBuff.pBuff = bGetVerRes;
-  tDnldBuff.wLen = sizeof(bGetVerRes);
-
-  wStatus = phDnldNfc_GetVersion(
-      &tDnldBuff, (pphDnldNfc_RspCb_t)&phNxpNciHal_fw_dnld_get_version_cb,
-      (void*)&cb_data);
-  if (wStatus != NFCSTATUS_PENDING) {
-    NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_get_version failed");
-    wStatus = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-  /* Wait for callback response */
-  if (SEM_WAIT(cb_data)) {
-    NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_get_version semaphore error");
-    wStatus = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-
-  if (cb_data.status != NFCSTATUS_SUCCESS) {
-    NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_get_version cb failed");
-    wStatus = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-
-  wStatus = NFCSTATUS_SUCCESS;
-
-clean_and_return:
-  phNxpNciHal_cleanup_cb_data(&cb_data);
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_fw_dnld_get_sessn_state_cb
-**
-** Description      Download Get session state callback
-**
-** Returns          None
-**
-*******************************************************************************/
-static void phNxpNciHal_fw_dnld_get_sessn_state_cb(void* pContext,
-                                                   NFCSTATUS status,
-                                                   void* pInfo) {
-  phNxpNciHal_Sem_t* p_cb_data = (phNxpNciHal_Sem_t*)pContext;
-  NFCSTATUS wStatus = status;
-  pphDnldNfc_Buff_t pRespBuff;
-  if ((NFCSTATUS_SUCCESS == wStatus) && (NULL != pInfo)) {
-    NXPLOG_FWDNLD_D(
-        "phNxpNciHal_fw_dnld_get_sessn_state_cb - Request Successful");
-
-    pRespBuff = (pphDnldNfc_Buff_t)pInfo;
-
-    if ((3 == (pRespBuff->wLen)) && (NULL != (pRespBuff->pBuff))) {
-      NXPLOG_FWDNLD_D(
-          "phNxpNciHal_fw_dnld_get_sessn_state_cb - Valid Session State Resp "
-          "Buff!!...");
-
-      if (phDnldNfc_LCOper == pRespBuff->pBuff[2]) {
-        if (PHLIBNFC_FWDNLD_SESSNOPEN == pRespBuff->pBuff[0]) {
-          NXPLOG_FWDNLD_E("Prev Fw Upgrade Session still Open..");
-          (gphNxpNciHal_fw_IoctlCtx.bPrevSessnOpen) = true;
-          if ((gphNxpNciHal_fw_IoctlCtx.bDnldInitiated) == true) {
-            NXPLOG_FWDNLD_D(
-                "Session still Open after Prev Fw Upgrade attempt!!");
-
-            if ((gphNxpNciHal_fw_IoctlCtx.bDnldAttempts) <
-                PHLIBNFC_IOCTL_DNLD_MAX_ATTEMPTS) {
-              NXPLOG_FWDNLD_W("Setting Dnld Retry ..");
-              (gphNxpNciHal_fw_IoctlCtx.bRetryDnld) = true;
-            } else {
-              NXPLOG_FWDNLD_E("Max Dnld Retry Counts Exceeded!!");
-              (gphNxpNciHal_fw_IoctlCtx.bRetryDnld) = false;
-            }
-            wStatus = NFCSTATUS_FAILED;
-          }
-        } else {
-          gphNxpNciHal_fw_IoctlCtx.bPrevSessnOpen = false;
-        }
-      } else {
-        wStatus = NFCSTATUS_FAILED;
-        NXPLOG_FWDNLD_E(
-            "NFCC not in Operational State..Fw Upgrade not allowed!!");
-      }
-    } else {
-      wStatus = NFCSTATUS_FAILED;
-      NXPLOG_FWDNLD_E(
-          "phNxpNciHal_fw_dnld_get_sessn_state_cb - Session State Resp Buff "
-          "Invalid...");
-    }
-  } else {
-    wStatus = NFCSTATUS_FAILED;
-    NXPLOG_FWDNLD_E(
-        "phNxpNciHal_fw_dnld_get_sessn_state_cb - Request Failed!!");
-  }
-
-  p_cb_data->status = wStatus;
-
-  SEM_POST(p_cb_data);
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_fw_dnld_get_sessn_state
-**
-** Description      Download Get session state
-**
-** Returns          NFCSTATUS_SUCCESS if success
-**
-*******************************************************************************/
-static NFCSTATUS phNxpNciHal_fw_dnld_get_sessn_state(void* pContext,
-                                                     NFCSTATUS status,
-                                                     void* pInfo) {
-  phDnldNfc_Buff_t tDnldBuff;
-  static uint8_t bGSnStateRes[3];
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  phNxpNciHal_Sem_t cb_data;
-  UNUSED(pContext);
-  UNUSED(status);
-  UNUSED(pInfo);
-  if (gphNxpNciHal_fw_IoctlCtx.bSkipSeq == true) {
-    return NFCSTATUS_SUCCESS;
-  }
-
-  if (phNxpNciHal_init_cb_data(&cb_data, NULL) != NFCSTATUS_SUCCESS) {
-    NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_get_version cb_data creation failed");
-    return NFCSTATUS_FAILED;
-  }
-
-  tDnldBuff.pBuff = bGSnStateRes;
-  tDnldBuff.wLen = sizeof(bGSnStateRes);
-
-  wStatus = phDnldNfc_GetSessionState(
-      &tDnldBuff, &phNxpNciHal_fw_dnld_get_sessn_state_cb, (void*)&cb_data);
-  if (wStatus != NFCSTATUS_PENDING) {
-    NXPLOG_FWDNLD_E("phDnldNfc_GetSessionState failed");
-    wStatus = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-
-  /* Wait for callback response */
-  if (SEM_WAIT(cb_data)) {
-    NXPLOG_FWDNLD_E("phDnldNfc_GetSessionState semaphore error");
-    wStatus = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-
-  if (cb_data.status != NFCSTATUS_SUCCESS) {
-    NXPLOG_FWDNLD_E("phDnldNfc_GetSessionState cb failed");
-    wStatus = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-
-  wStatus = NFCSTATUS_SUCCESS;
-
-clean_and_return:
-  phNxpNciHal_cleanup_cb_data(&cb_data);
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_fw_dnld_log_read_cb
-**
-** Description      Download Logread callback
-**
-** Returns          None
-**
-*******************************************************************************/
-static void phNxpNciHal_fw_dnld_log_read_cb(void* pContext, NFCSTATUS status,
-                                            void* pInfo) {
-  phNxpNciHal_Sem_t* p_cb_data = (phNxpNciHal_Sem_t*)pContext;
-
-  if ((NFCSTATUS_SUCCESS == status) && (NULL != pInfo)) {
-    NXPLOG_FWDNLD_D("phNxpNciHal_fw_dnld_log_read_cb - Request Successful");
-  } else {
-    status = NFCSTATUS_FAILED;
-    NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_log_read_cb - Request Failed!!");
-  }
-
-  p_cb_data->status = status;
-  SEM_POST(p_cb_data);
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_fw_dnld_log_read
-**
-** Description      Download Log Read
-**
-** Returns          NFCSTATUS_SUCCESS if success
-**
-*******************************************************************************/
-static NFCSTATUS phNxpNciHal_fw_dnld_log_read(void* pContext, NFCSTATUS status,
-                                              void* pInfo) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  phNxpNciHal_Sem_t cb_data;
-  phDnldNfc_Buff_t Data;
-  UNUSED(pContext);
-  UNUSED(status);
-  UNUSED(pInfo);
-  if (((((gphNxpNciHal_fw_IoctlCtx.bSkipSeq) == true) ||
-        ((gphNxpNciHal_fw_IoctlCtx.bForceDnld) == true)) &&
-       ((gphNxpNciHal_fw_IoctlCtx.bPrevSessnOpen) == false)) ||
-      ((((gphNxpNciHal_fw_IoctlCtx.bPrevSessnOpen) == true)) &&
-       ((gphNxpNciHal_fw_IoctlCtx.bRetryDnld) == true)))
-
-  {
-    return NFCSTATUS_SUCCESS;
-  }
-
-  if (phNxpNciHal_init_cb_data(&cb_data, NULL) != NFCSTATUS_SUCCESS) {
-    NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_log_read cb_data creation failed");
-    return NFCSTATUS_FAILED;
-  }
-
-  (Data.pBuff) = (void*)&(gphNxpNciHal_fw_IoctlCtx.tLogParams);
-  (Data.wLen) = sizeof(phLibNfc_EELogParams_t);
-
-  wStatus = phDnldNfc_ReadLog(
-      &Data, (pphDnldNfc_RspCb_t)&phNxpNciHal_fw_dnld_log_read_cb,
-      (void*)&cb_data);
-  if (wStatus != NFCSTATUS_PENDING) {
-    NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_log_read failed");
-    wStatus = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-
-  /* Wait for callback response */
-  if (SEM_WAIT(cb_data)) {
-    NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_log_read semaphore error");
-    wStatus = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-
-  if (cb_data.status != NFCSTATUS_SUCCESS) {
-    NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_log_read cb failed");
-    wStatus = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-
-  wStatus = NFCSTATUS_SUCCESS;
-
-clean_and_return:
-  phNxpNciHal_cleanup_cb_data(&cb_data);
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_fw_dnld_write_cb
-**
-** Description      Download Write callback
-**
-** Returns          None
-**
-*******************************************************************************/
-static void phNxpNciHal_fw_dnld_write_cb(void* pContext, NFCSTATUS status,
-                                         void* pInfo) {
-  phNxpNciHal_Sem_t* p_cb_data = (phNxpNciHal_Sem_t*)pContext;
-  UNUSED(pInfo);
-  if (NFCSTATUS_SUCCESS == status) {
-    NXPLOG_FWDNLD_D("phNxpNciHal_fw_dnld_write_cb - Request Successful");
-    (gphNxpNciHal_fw_IoctlCtx.bDnldEepromWrite) = false;
-    if ((gphNxpNciHal_fw_IoctlCtx.bDnldInitiated) == true) {
-      (gphNxpNciHal_fw_IoctlCtx.tLogParams.wNumDnldSuccess) += 1;
-
-      if ((gphNxpNciHal_fw_IoctlCtx.tLogParams.wDnldFailCnt) > 0) {
-        NXPLOG_FWDNLD_D("phNxpNciHal_fw_dnld_write_cb - Resetting DnldFailCnt");
-        (gphNxpNciHal_fw_IoctlCtx.tLogParams.wDnldFailCnt) = 0;
-      }
-
-      if ((gphNxpNciHal_fw_IoctlCtx.tLogParams.bConfig) == false) {
-        NXPLOG_FWDNLD_D(
-            "phNxpNciHal_fw_dnld_write_cb - Setting bConfig for use by NCI "
-            "mode");
-        (gphNxpNciHal_fw_IoctlCtx.tLogParams.bConfig) = true;
-      }
-    }
-
-    /* Reset the previously set DnldAttemptFailed flag */
-    if ((gphNxpNciHal_fw_IoctlCtx.bDnldAttemptFailed) == true) {
-      (gphNxpNciHal_fw_IoctlCtx.bDnldAttemptFailed) = false;
-    }
-  } else {
-    if ((gphNxpNciHal_fw_IoctlCtx.bDnldInitiated) == true) {
-      (gphNxpNciHal_fw_IoctlCtx.tLogParams.wNumDnldFail) += 1;
-      (gphNxpNciHal_fw_IoctlCtx.tLogParams.wDnldFailCnt) += 1;
-      (gphNxpNciHal_fw_IoctlCtx.tLogParams.bConfig) = false;
-    }
-    if (NFCSTATUS_WRITE_FAILED == status) {
-      (gphNxpNciHal_fw_IoctlCtx.bSkipSeq) = true;
-      (gphNxpNciHal_fw_IoctlCtx.bDnldRecovery) = true;
-    }
-    // status = NFCSTATUS_FAILED;
-
-    NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_write_cb - Request Failed!!");
-  }
-
-  p_cb_data->status = status;
-  SEM_POST(p_cb_data);
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_fw_dnld_write
-**
-** Description      Download Write
-**
-** Returns          NFCSTATUS_SUCCESS if success
-**
-*******************************************************************************/
-static NFCSTATUS phNxpNciHal_fw_dnld_write(void* pContext, NFCSTATUS status,
-                                           void* pInfo) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  phNxpNciHal_Sem_t cb_data;
-  UNUSED(pContext);
-  UNUSED(status);
-  UNUSED(pInfo);
-  if ((gphNxpNciHal_fw_IoctlCtx.bRetryDnld) == true) {
-    (gphNxpNciHal_fw_IoctlCtx.bRetryDnld) = false;
-  }
-
-  if (((gphNxpNciHal_fw_IoctlCtx.bSkipSeq) == true) &&
-      ((gphNxpNciHal_fw_IoctlCtx.bPrevSessnOpen) == false)) {
-    return NFCSTATUS_SUCCESS;
-  }
-
-  if (phNxpNciHal_init_cb_data(&cb_data, NULL) != NFCSTATUS_SUCCESS) {
-    NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_write cb_data creation failed");
-    return NFCSTATUS_FAILED;
-  }
-  if ((gphNxpNciHal_fw_IoctlCtx.bForceDnld) == false) {
-    NXPLOG_FWDNLD_D("phNxpNciHal_fw_dnld_write - Incrementing NumDnldTrig..");
-    (gphNxpNciHal_fw_IoctlCtx.bDnldInitiated) = true;
-    (gphNxpNciHal_fw_IoctlCtx.bDnldAttempts)++;
-    (gphNxpNciHal_fw_IoctlCtx.tLogParams.wNumDnldTrig) += 1;
-  }
-  wStatus = phDnldNfc_Write(false, NULL,
-                            (pphDnldNfc_RspCb_t)&phNxpNciHal_fw_dnld_write_cb,
-                            (void*)&cb_data);
-  if ((gphNxpNciHal_fw_IoctlCtx.bForceDnld) == false) {
-    if (wStatus != NFCSTATUS_PENDING) {
-      NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_write failed");
-      wStatus = NFCSTATUS_FAILED;
-      (gphNxpNciHal_fw_IoctlCtx.tLogParams.wNumDnldFail) += 1;
-      (gphNxpNciHal_fw_IoctlCtx.tLogParams.wDnldFailCnt) += 1;
-      (gphNxpNciHal_fw_IoctlCtx.tLogParams.bConfig) = false;
-      goto clean_and_return;
-    }
-  }
-  /* Wait for callback response */
-  if (SEM_WAIT(cb_data)) {
-    NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_write semaphore error");
-    wStatus = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-
-  if (cb_data.status != NFCSTATUS_SUCCESS) {
-    NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_write cb failed");
-    wStatus = cb_data.status;
-    goto clean_and_return;
-  }
-
-  wStatus = NFCSTATUS_SUCCESS;
-
-clean_and_return:
-  phNxpNciHal_cleanup_cb_data(&cb_data);
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_fw_dnld_chk_integrity_cb
-**
-** Description      Download Check Integrity callback
-**
-** Returns          None
-**
-*******************************************************************************/
-static void phNxpNciHal_fw_dnld_chk_integrity_cb(void* pContext,
-                                                 NFCSTATUS status,
-                                                 void* pInfo) {
-  phNxpNciHal_Sem_t* p_cb_data = (phNxpNciHal_Sem_t*)pContext;
-  NFCSTATUS wStatus = status;
-  pphDnldNfc_Buff_t pRespBuff;
-  // uint8_t bUserDataCrc[4];
-
-  if ((NFCSTATUS_SUCCESS == wStatus) && (NULL != pInfo)) {
-    NXPLOG_FWDNLD_D(
-        "phNxpNciHal_fw_dnld_chk_integrity_cb - Request Successful");
-    pRespBuff = (pphDnldNfc_Buff_t)pInfo;
-
-    if ((31 == (pRespBuff->wLen)) && (NULL != (pRespBuff->pBuff))) {
-      NXPLOG_FWDNLD_D(
-          "phNxpNciHal_fw_dnld_chk_integrity_cb - Valid Resp Buff!!...\n");
-      wStatus = phLibNfc_VerifyCrcStatus(pRespBuff->pBuff[0]);
-      /*
-      memcpy(bUserDataCrc, &(pRespBuff->pBuff[27]),
-              sizeof(bUserDataCrc));*/
-    } else {
-      NXPLOG_FWDNLD_E(
-          "phNxpNciHal_fw_dnld_chk_integrity_cb - Resp Buff Invalid...\n");
-    }
-  } else {
-    wStatus = NFCSTATUS_FAILED;
-    NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_chk_integrity_cb - Request Failed!!");
-  }
-
-  p_cb_data->status = wStatus;
-
-  SEM_POST(p_cb_data);
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_fw_dnld_chk_integrity
-**
-** Description      Download Check Integrity
-**
-** Returns          NFCSTATUS_SUCCESS if success
-**
-*******************************************************************************/
-static NFCSTATUS phNxpNciHal_fw_dnld_chk_integrity(void* pContext,
-                                                   NFCSTATUS status,
-                                                   void* pInfo) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  phNxpNciHal_Sem_t cb_data;
-  phDnldNfc_Buff_t tDnldBuff;
-  static uint8_t bChkIntgRes[31];
-  UNUSED(pInfo);
-  UNUSED(pContext);
-  UNUSED(status);
-  if (gphNxpNciHal_fw_IoctlCtx.bPrevSessnOpen == true) {
-    NXPLOG_FWDNLD_D(
-        "Previous Upload session is open..Cannot issue ChkIntegrity Cmd!!");
-    return NFCSTATUS_SUCCESS;
-  }
-
-  if ((gphNxpNciHal_fw_IoctlCtx.bSkipSeq) == true) {
-    return NFCSTATUS_SUCCESS;
-  } else if (gphNxpNciHal_fw_IoctlCtx.bPrevSessnOpen == true) {
-    NXPLOG_FWDNLD_E(
-        "Previous Upload session is open..Cannot issue ChkIntegrity Cmd!!");
-    return NFCSTATUS_SUCCESS;
-  }
-
-  tDnldBuff.pBuff = bChkIntgRes;
-  tDnldBuff.wLen = sizeof(bChkIntgRes);
-
-  if (phNxpNciHal_init_cb_data(&cb_data, NULL) != NFCSTATUS_SUCCESS) {
-    NXPLOG_FWDNLD_E(
-        "phNxpNciHal_fw_dnld_chk_integrity cb_data creation failed");
-    return NFCSTATUS_FAILED;
-  }
-
-  wStatus = phDnldNfc_CheckIntegrity(
-      (gphNxpNciHal_fw_IoctlCtx.bChipVer), &tDnldBuff,
-      &phNxpNciHal_fw_dnld_chk_integrity_cb, (void*)&cb_data);
-  if (wStatus != NFCSTATUS_PENDING) {
-    NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_chk_integrity failed");
-    wStatus = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-
-  /* Wait for callback response */
-  if (SEM_WAIT(cb_data)) {
-    NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_chk_integrity semaphore error");
-    wStatus = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-
-  if (cb_data.status != NFCSTATUS_SUCCESS) {
-    NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_chk_integrity cb failed");
-    wStatus = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-
-  wStatus = NFCSTATUS_SUCCESS;
-
-clean_and_return:
-  phNxpNciHal_cleanup_cb_data(&cb_data);
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_fw_dnld_recover
-**
-** Description      Download Recover
-**
-** Returns          NFCSTATUS_SUCCESS if success
-**
-*******************************************************************************/
-static NFCSTATUS phNxpNciHal_fw_dnld_recover(void* pContext, NFCSTATUS status,
-                                             void* pInfo) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  phNxpNciHal_Sem_t cb_data;
-
-  UNUSED(pInfo);
-  UNUSED(status);
-  UNUSED(pContext);
-  if ((gphNxpNciHal_fw_IoctlCtx.bDnldRecovery) == true) {
-    if (phNxpNciHal_init_cb_data(&cb_data, NULL) != NFCSTATUS_SUCCESS) {
-      NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_recover cb_data creation failed");
-      return NFCSTATUS_FAILED;
-    }
-    (gphNxpNciHal_fw_IoctlCtx.bDnldAttempts)++;
-
-    /* resetting this flag to avoid cyclic issuance of recovery sequence in case
-     * of failure */
-    (gphNxpNciHal_fw_IoctlCtx.bDnldRecovery) = false;
-
-    wStatus = phDnldNfc_Write(
-        true, NULL, (pphDnldNfc_RspCb_t)&phNxpNciHal_fw_dnld_recover_cb,
-        (void*)&cb_data);
-
-    if (NFCSTATUS_PENDING != wStatus) {
-      (gphNxpNciHal_fw_IoctlCtx.bSkipForce) = false;
-      (gphNxpNciHal_fw_IoctlCtx.bRetryDnld) = false;
-      goto clean_and_return;
-    }
-    /* Wait for callback response */
-    if (SEM_WAIT(cb_data)) {
-      NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_recover semaphore error");
-      wStatus = NFCSTATUS_FAILED;
-      goto clean_and_return;
-    }
-
-    if (cb_data.status != NFCSTATUS_SUCCESS) {
-      NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_recover cb failed");
-      wStatus = NFCSTATUS_FAILED;
-      goto clean_and_return;
-    }
-    wStatus = NFCSTATUS_SUCCESS;
-
-  clean_and_return:
-    phNxpNciHal_cleanup_cb_data(&cb_data);
-  }
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_fw_dnld_recover_cb
-**
-** Description      Download Recover callback
-**
-** Returns          None
-**
-*******************************************************************************/
-static void phNxpNciHal_fw_dnld_recover_cb(void* pContext, NFCSTATUS status,
-                                           void* pInfo) {
-  phNxpNciHal_Sem_t* p_cb_data = (phNxpNciHal_Sem_t*)pContext;
-  NFCSTATUS wStatus = status;
-  UNUSED(pContext);
-  UNUSED(pInfo);
-
-  if (NFCSTATUS_SUCCESS == wStatus) {
-    if ((gphNxpNciHal_fw_IoctlCtx.bSkipForce) == false) {
-      NXPLOG_FWDNLD_D("phNxpNciHal_fw_dnld_recoverCb - Request Successful");
-      (gphNxpNciHal_fw_IoctlCtx.bRetryDnld) = true;
-    } else {
-      NXPLOG_FWDNLD_D(
-          "phNxpNciHal_fw_dnld_recoverCb - Production key update Request "
-          "Successful");
-      (gphNxpNciHal_fw_IoctlCtx.bSendNciCmd) = true;
-    }
-  } else {
-    wStatus = NFCSTATUS_FAILED;
-    NXPLOG_FWDNLD_D("phNxpNciHal_fw_dnld_recoverCb - Request Failed!!");
-  }
-
-  /* resetting this flag to avoid cyclic issuance of recovery sequence in case
-   * of failure */
-  (gphNxpNciHal_fw_IoctlCtx.bDnldRecovery) = false;
-
-  /* reset previously set SkipForce */
-  (gphNxpNciHal_fw_IoctlCtx.bSkipForce) = false;
-  p_cb_data->status = wStatus;
-
-  SEM_POST(p_cb_data);
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_fw_dnld_send_ncicmd_cb
-**
-** Description      Download Send NCI Command callback
-**
-** Returns          None
-**
-*******************************************************************************/
-static void phNxpNciHal_fw_dnld_send_ncicmd_cb(void* pContext, NFCSTATUS status,
-                                               void* pInfo) {
-  phNxpNciHal_Sem_t* p_cb_data = (phNxpNciHal_Sem_t*)pContext;
-  NFCSTATUS wStatus = status;
-  pphDnldNfc_Buff_t pRespBuff;
-  UNUSED(pContext);
-
-  if (NFCSTATUS_SUCCESS == wStatus) {
-    NXPLOG_FWDNLD_D("phNxpNciHal_fw_dnld_send_ncicmdCb - Request Successful");
-    pRespBuff = (pphDnldNfc_Buff_t)pInfo;
-
-    if ((0 != (pRespBuff->wLen)) && (NULL != (pRespBuff->pBuff))) {
-      if (0 == (pRespBuff->pBuff[3])) {
-        NXPLOG_FWDNLD_D("Successful Response received for Nci Reset Cmd");
-      } else {
-        NXPLOG_FWDNLD_E("Nci Reset Request Failed!!");
-      }
-    } else {
-      NXPLOG_FWDNLD_E("Invalid Response received for Nci Reset Request!!");
-    }
-    /* Call Tml Ioctl to enable download mode */
-    wStatus = phTmlNfc_IoCtl(phTmlNfc_e_EnableDownloadMode);
-
-    if (NFCSTATUS_SUCCESS == wStatus) {
-      NXPLOG_FWDNLD_D("Switched Successfully to dnld mode..");
-      (gphNxpNciHal_fw_IoctlCtx.bRetryDnld) = true;
-    } else {
-      NXPLOG_FWDNLD_E("Switching back to dnld mode Failed!!");
-      (gphNxpNciHal_fw_IoctlCtx.bRetryDnld) = false;
-      wStatus = NFCSTATUS_FAILED;
-    }
-  } else {
-    NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_send_ncicmdCb - Request Failed!!");
-  }
-
-  (gphNxpNciHal_fw_IoctlCtx.bSendNciCmd) = false;
-  p_cb_data->status = wStatus;
-
-  SEM_POST(p_cb_data);
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_fw_dnld_send_ncicmd
-**
-** Description      Download Send NCI Command
-**
-** Returns          NFCSTATUS_SUCCESS if success
-**
-*******************************************************************************/
-static NFCSTATUS phNxpNciHal_fw_dnld_send_ncicmd(void* pContext,
-                                                 NFCSTATUS status,
-                                                 void* pInfo) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  static uint8_t bNciCmd[4] = {0x20, 0x00, 0x01,
-                               0x00}; /* Nci Reset Cmd with KeepConfig option */
-  static uint8_t bNciResp[6];
-  phDnldNfc_Buff_t tsData;
-  phDnldNfc_Buff_t trData;
-  phNxpNciHal_Sem_t cb_data;
-
-  UNUSED(pInfo);
-  UNUSED(status);
-  UNUSED(pContext);
-  if ((gphNxpNciHal_fw_IoctlCtx.bSendNciCmd) == false) {
-    return NFCSTATUS_SUCCESS;
-  } else {
-    /* Call Tml Ioctl to enable/restore normal mode */
-    wStatus = phTmlNfc_IoCtl(phTmlNfc_e_EnableNormalMode);
-
-    if (NFCSTATUS_SUCCESS != wStatus) {
-      NXPLOG_FWDNLD_E("Switching to NormalMode Failed!!");
-      (gphNxpNciHal_fw_IoctlCtx.bRetryDnld) = false;
-      (gphNxpNciHal_fw_IoctlCtx.bSendNciCmd) = false;
-    } else {
-      if (phNxpNciHal_init_cb_data(&cb_data, NULL) != NFCSTATUS_SUCCESS) {
-        NXPLOG_FWDNLD_E(
-            "phNxpNciHal_fw_dnld_send_ncicmd cb_data creation failed");
-        return NFCSTATUS_FAILED;
-      }
-      (tsData.pBuff) = bNciCmd;
-      (tsData.wLen) = sizeof(bNciCmd);
-      (trData.pBuff) = bNciResp;
-      (trData.wLen) = sizeof(bNciResp);
-
-      wStatus = phDnldNfc_RawReq(
-          &tsData, &trData,
-          (pphDnldNfc_RspCb_t)&phNxpNciHal_fw_dnld_send_ncicmd_cb,
-          (void*)&cb_data);
-      if (NFCSTATUS_PENDING != wStatus) {
-        goto clean_and_return;
-      }
-      /* Wait for callback response */
-      if (SEM_WAIT(cb_data)) {
-        NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_send_ncicmd semaphore error");
-        wStatus = NFCSTATUS_FAILED;
-        goto clean_and_return;
-      }
-
-      if (cb_data.status != NFCSTATUS_SUCCESS) {
-        NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_send_ncicmd cb failed");
-        wStatus = NFCSTATUS_FAILED;
-        goto clean_and_return;
-      }
-      wStatus = NFCSTATUS_SUCCESS;
-
-    clean_and_return:
-      phNxpNciHal_cleanup_cb_data(&cb_data);
-    }
-  }
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_fw_dnld_log_cb
-**
-** Description      Download Log callback
-**
-** Returns          None
-**
-*******************************************************************************/
-static void phNxpNciHal_fw_dnld_log_cb(void* pContext, NFCSTATUS status,
-                                       void* pInfo) {
-  phNxpNciHal_Sem_t* p_cb_data = (phNxpNciHal_Sem_t*)pContext;
-  NFCSTATUS wStatus = status;
-  UNUSED(pContext);
-  UNUSED(pInfo);
-
-  if (NFCSTATUS_SUCCESS == wStatus) {
-    NXPLOG_FWDNLD_D("phLibNfc_DnldLogCb - Request Successful");
-    (gphNxpNciHal_fw_IoctlCtx.bDnldInitiated) = false;
-  } else {
-    wStatus = NFCSTATUS_FAILED;
-    NXPLOG_FWDNLD_E("phLibNfc_DnldLogCb - Request Failed!!");
-  }
-  p_cb_data->status = wStatus;
-
-  SEM_POST(p_cb_data);
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_fw_dnld_log
-**
-** Description      Download Log
-**
-** Returns          NFCSTATUS_SUCCESS if success
-**
-*******************************************************************************/
-static NFCSTATUS phNxpNciHal_fw_dnld_log(void* pContext, NFCSTATUS status,
-                                         void* pInfo) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  phNxpNciHal_Sem_t cb_data;
-  phDnldNfc_Buff_t tData;
-
-  UNUSED(pInfo);
-  UNUSED(status);
-  UNUSED(pContext);
-  if ((((gphNxpNciHal_fw_IoctlCtx.bSkipSeq) == true) ||
-       ((gphNxpNciHal_fw_IoctlCtx.bForceDnld) == true)) &&
-      ((gphNxpNciHal_fw_IoctlCtx.bDnldInitiated) == false)) {
-    return NFCSTATUS_SUCCESS;
-  } else {
-    if (phNxpNciHal_init_cb_data(&cb_data, NULL) != NFCSTATUS_SUCCESS) {
-      NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_log cb_data creation failed");
-      return NFCSTATUS_FAILED;
-    }
-    (tData.pBuff) = (void*)&(gphNxpNciHal_fw_IoctlCtx.tLogParams);
-    (tData.wLen) = sizeof(gphNxpNciHal_fw_IoctlCtx.tLogParams);
-
-    wStatus =
-        phDnldNfc_Log(&tData, (pphDnldNfc_RspCb_t)&phNxpNciHal_fw_dnld_log_cb,
-                      (void*)&cb_data);
-
-    if (wStatus != NFCSTATUS_PENDING) {
-      NXPLOG_FWDNLD_E("phDnldNfc_Log failed");
-      (gphNxpNciHal_fw_IoctlCtx.bDnldInitiated) = false;
-      wStatus = NFCSTATUS_FAILED;
-      goto clean_and_return;
-    }
-    /* Wait for callback response */
-    if (SEM_WAIT(cb_data)) {
-      NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_log semaphore error");
-      wStatus = NFCSTATUS_FAILED;
-      goto clean_and_return;
-    }
-
-    if (cb_data.status != NFCSTATUS_SUCCESS) {
-      NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_log_cb failed");
-      wStatus = NFCSTATUS_FAILED;
-      goto clean_and_return;
-    }
-
-    wStatus = NFCSTATUS_SUCCESS;
-
-  clean_and_return:
-    phNxpNciHal_cleanup_cb_data(&cb_data);
-
-    return wStatus;
-  }
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_fw_seq_handler
-**
-** Description      Sequence Handler
-**
-** Returns          NFCSTATUS_SUCCESS if sequence completed uninterrupted
-**
-*******************************************************************************/
-static NFCSTATUS phNxpNciHal_fw_seq_handler(
-    NFCSTATUS (*seq_handler[])(void* pContext, NFCSTATUS status, void* pInfo)) {
-  char* pContext = "FW-Download";
-  int16_t seq_counter = 0;
-  phDnldNfc_Buff_t pInfo;
-  NFCSTATUS status = NFCSTATUS_FAILED;
-
-  status = phTmlNfc_ReadAbort();
-  if (NFCSTATUS_SUCCESS != status) {
-    NXPLOG_FWDNLD_E("Tml Read Abort failed!!");
-    return status;
-  }
-
-  while (seq_handler[seq_counter] != NULL) {
-    status = NFCSTATUS_FAILED;
-    status = (seq_handler[seq_counter])(pContext, status, &pInfo);
-    if (NFCSTATUS_SUCCESS != status) {
-      NXPLOG_FWDNLD_E(" phNxpNciHal_fw_seq_handler : FAILED");
-      break;
-    }
-    seq_counter++;
-  }
-  return status;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_fw_dnld_complete
-**
-** Description      Download Sequence Complete
-**
-** Returns          NFCSTATUS_SUCCESS if success
-**
-*******************************************************************************/
-static NFCSTATUS phNxpNciHal_fw_dnld_complete(void* pContext, NFCSTATUS status,
-                                              void* pInfo) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  NFCSTATUS fStatus = status;
-  UNUSED(pInfo);
-  UNUSED(pContext);
-
-  if (NFCSTATUS_WRITE_FAILED == status) {
-    if ((gphNxpNciHal_fw_IoctlCtx.bDnldAttempts) <
-        PHLIBNFC_IOCTL_DNLD_MAX_ATTEMPTS) {
-      (gphNxpNciHal_fw_IoctlCtx.bDnldRecovery) = true;
-    } else {
-      NXPLOG_FWDNLD_E("Max Dnld Retry Counts Exceeded!!");
-      (gphNxpNciHal_fw_IoctlCtx.bDnldRecovery) = false;
-      (gphNxpNciHal_fw_IoctlCtx.bRetryDnld) = false;
-    }
-  } else if (NFCSTATUS_REJECTED == status) {
-    if ((gphNxpNciHal_fw_IoctlCtx.bDnldAttempts) <
-        PHLIBNFC_IOCTL_DNLD_MAX_ATTEMPTS) {
-      (gphNxpNciHal_fw_IoctlCtx.bDnldRecovery) = true;
-
-      /* in case of signature error we need to try recover sequence directly
-       * bypassing the force cmd */
-      (gphNxpNciHal_fw_IoctlCtx.bSkipForce) = true;
-    } else {
-      NXPLOG_FWDNLD_E("Max Dnld Retry Counts Exceeded!!");
-      (gphNxpNciHal_fw_IoctlCtx.bDnldRecovery) = false;
-      (gphNxpNciHal_fw_IoctlCtx.bRetryDnld) = false;
-    }
-  }
-
-  if ((gphNxpNciHal_fw_IoctlCtx.bDnldInitiated) == true) {
-    (gphNxpNciHal_fw_IoctlCtx.bLastStatus) = status;
-    (gphNxpNciHal_fw_IoctlCtx.bDnldAttemptFailed) = true;
-
-    NXPLOG_FWDNLD_E("Invoking Pending Download Log Sequence..");
-    (gphNxpNciHal_fw_IoctlCtx.bDnldInitiated) = false;
-    /* Perform the Logging sequence */
-    wStatus = phNxpNciHal_fw_seq_handler(phNxpNciHal_dwnld_log_seqhandler);
-    if (NFCSTATUS_SUCCESS != gphNxpNciHal_fw_IoctlCtx.bLastStatus) {
-      /* update the previous Download Write status to upper layer and not the
-       * status of Log command */
-      wStatus = gphNxpNciHal_fw_IoctlCtx.bLastStatus;
-      NXPLOG_FWDNLD_E(
-          "phNxpNciHal_fw_dnld_complete: Last Download Write Status before Log "
-          "command bLastStatus = 0x%x",
-          gphNxpNciHal_fw_IoctlCtx.bLastStatus);
-    }
-    status = phNxpNciHal_fw_dnld_complete(pContext, wStatus, &pInfo);
-    if (NFCSTATUS_SUCCESS == status) {
-      NXPLOG_FWDNLD_D(" phNxpNciHal_fw_dnld_complete : SUCCESS");
-    } else {
-      NXPLOG_FWDNLD_E(" phNxpNciHal_fw_dnld_complete : FAILED");
-    }
-  } else if ((gphNxpNciHal_fw_IoctlCtx.bDnldRecovery) == true) {
-    NXPLOG_FWDNLD_E("Invoking Download Recovery Sequence..");
-
-    if (NFCSTATUS_SUCCESS == wStatus) {
-      /* Perform the download Recovery sequence */
-      wStatus = phNxpNciHal_fw_seq_handler(phNxpNciHal_dwnld_rec_seqhandler);
-
-      status = phNxpNciHal_fw_dnld_complete(pContext, wStatus, &pInfo);
-      if (NFCSTATUS_SUCCESS == status) {
-        NXPLOG_FWDNLD_D(" phNxpNciHal_fw_dnld_complete : SUCCESS");
-      } else {
-        NXPLOG_FWDNLD_E(" phNxpNciHal_fw_dnld_complete : FAILED");
-      }
-    }
-  } else if ((gphNxpNciHal_fw_IoctlCtx.bRetryDnld) == true) {
-    (gphNxpNciHal_fw_IoctlCtx.bPrevSessnOpen) = false;
-    (gphNxpNciHal_fw_IoctlCtx.bDnldInitiated) = false;
-    (gphNxpNciHal_fw_IoctlCtx.bForceDnld) = false;
-    (gphNxpNciHal_fw_IoctlCtx.bSkipSeq) = false;
-    (gphNxpNciHal_fw_IoctlCtx.bSkipForce) = false;
-    (gphNxpNciHal_fw_IoctlCtx.bDnldRecovery) = false;
-    (gphNxpNciHal_fw_IoctlCtx.bSendNciCmd) = false;
-
-    /* Perform the download sequence ... after successful recover attempt */
-    wStatus = phNxpNciHal_fw_seq_handler(phNxpNciHal_dwnld_seqhandler);
-
-    status = phNxpNciHal_fw_dnld_complete(pContext, wStatus, &pInfo);
-    if (NFCSTATUS_SUCCESS == status) {
-      NXPLOG_FWDNLD_D(" phNxpNciHal_fw_dnld_complete : SUCCESS");
-    } else {
-      NXPLOG_FWDNLD_E(" phNxpNciHal_fw_dnld_complete : FAILED");
-    }
-  } else {
-    NXPLOG_FWDNLD_D("phNxpNciHal_fw_dnld_complete: Download Status = 0x%x",
-                    status);
-    if ((gphNxpNciHal_fw_IoctlCtx.bSkipSeq) == false) {
-      if (NFCSTATUS_SUCCESS == status) {
-        if (NFC_FW_DOWNLOAD == gphNxpNciHal_fw_IoctlCtx.IoctlCode) {
-          NXPLOG_FWDNLD_E("Fw Download success.. ");
-        } else if (PHLIBNFC_DNLD_MEM_READ ==
-                   gphNxpNciHal_fw_IoctlCtx.IoctlCode) {
-          NXPLOG_FWDNLD_E("Read Request success.. ");
-        } else if (PHLIBNFC_DNLD_MEM_WRITE ==
-                   gphNxpNciHal_fw_IoctlCtx.IoctlCode) {
-          NXPLOG_FWDNLD_E("Write Request success.. ");
-        } else if (PHLIBNFC_DNLD_READ_LOG ==
-                   gphNxpNciHal_fw_IoctlCtx.IoctlCode) {
-          NXPLOG_FWDNLD_E("ReadLog Request success.. ");
-        } else {
-          NXPLOG_FWDNLD_E("Invalid Request!!");
-        }
-      } else {
-        if (NFC_FW_DOWNLOAD == gphNxpNciHal_fw_IoctlCtx.IoctlCode) {
-          NXPLOG_FWDNLD_E("Fw Download Failed!!");
-        } else if (NFC_MEM_READ == gphNxpNciHal_fw_IoctlCtx.IoctlCode) {
-          NXPLOG_FWDNLD_E("Read Request Failed!!");
-        } else if (NFC_MEM_WRITE == gphNxpNciHal_fw_IoctlCtx.IoctlCode) {
-          NXPLOG_FWDNLD_E("Write Request Failed!!");
-        } else if (PHLIBNFC_DNLD_READ_LOG ==
-                   gphNxpNciHal_fw_IoctlCtx.IoctlCode) {
-          NXPLOG_FWDNLD_E("ReadLog Request Failed!!");
-        } else {
-          NXPLOG_FWDNLD_E("Invalid Request!!");
-        }
-      }
-    }
-
-    if (gphNxpNciHal_fw_IoctlCtx.bSendNciCmd == false) {
-      /* Call Tml Ioctl to enable/restore normal mode */
-      wStatus = phTmlNfc_IoCtl(phTmlNfc_e_EnableNormalMode);
-
-      if (NFCSTATUS_SUCCESS != wStatus) {
-        NXPLOG_FWDNLD_E("Switching to NormalMode Failed!!");
-      } else {
-        wStatus = fStatus;
-      }
-    }
-
-    (gphNxpNciHal_fw_IoctlCtx.bPrevSessnOpen) = false;
-    (gphNxpNciHal_fw_IoctlCtx.bDnldInitiated) = false;
-    (gphNxpNciHal_fw_IoctlCtx.bChipVer) = 0;
-    (gphNxpNciHal_fw_IoctlCtx.bSkipSeq) = false;
-    (gphNxpNciHal_fw_IoctlCtx.bForceDnld) = false;
-    (gphNxpNciHal_fw_IoctlCtx.bDnldRecovery) = false;
-    (gphNxpNciHal_fw_IoctlCtx.bRetryDnld) = false;
-    (gphNxpNciHal_fw_IoctlCtx.bSkipReset) = false;
-    (gphNxpNciHal_fw_IoctlCtx.bSkipForce) = false;
-    (gphNxpNciHal_fw_IoctlCtx.bSendNciCmd) = false;
-    (gphNxpNciHal_fw_IoctlCtx.bDnldAttempts) = 0;
-
-    if (gphNxpNciHal_fw_IoctlCtx.bDnldAttemptFailed == false) {
-    } else {
-      NXPLOG_FWDNLD_E("Returning Download Failed Status to Caller!!");
-
-      (gphNxpNciHal_fw_IoctlCtx.bLastStatus) = NFCSTATUS_SUCCESS;
-      (gphNxpNciHal_fw_IoctlCtx.bDnldAttemptFailed) = false;
-    }
-    phDnldNfc_CloseFwLibHandle();
-  }
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_fw_download_seq
-**
-** Description      Download Sequence
-**
-** Returns          NFCSTATUS_SUCCESS if success
-**
-*******************************************************************************/
-NFCSTATUS phNxpNciHal_fw_download_seq(uint8_t bClkSrcVal, uint8_t bClkFreqVal) {
-  NFCSTATUS status = NFCSTATUS_FAILED;
-  phDnldNfc_Buff_t pInfo;
-  char* pContext = "FW-Download";
-
-  /* reset the global flags */
-  gphNxpNciHal_fw_IoctlCtx.IoctlCode = NFC_FW_DOWNLOAD;
-  (gphNxpNciHal_fw_IoctlCtx.bPrevSessnOpen) = false;
-  (gphNxpNciHal_fw_IoctlCtx.bDnldInitiated) = false;
-  (gphNxpNciHal_fw_IoctlCtx.bChipVer) = 0;
-  (gphNxpNciHal_fw_IoctlCtx.bSkipSeq) = false;
-  (gphNxpNciHal_fw_IoctlCtx.bForceDnld) = false;
-  (gphNxpNciHal_fw_IoctlCtx.bDnldRecovery) = false;
-  (gphNxpNciHal_fw_IoctlCtx.bRetryDnld) = false;
-  (gphNxpNciHal_fw_IoctlCtx.bSkipReset) = false;
-  (gphNxpNciHal_fw_IoctlCtx.bSkipForce) = false;
-  (gphNxpNciHal_fw_IoctlCtx.bSendNciCmd) = false;
-  (gphNxpNciHal_fw_IoctlCtx.bDnldAttempts) = 0;
-  (gphNxpNciHal_fw_IoctlCtx.bClkSrcVal) = bClkSrcVal;
-  (gphNxpNciHal_fw_IoctlCtx.bClkFreqVal) = bClkFreqVal;
-  /* Get firmware version */
-  if (NFCSTATUS_SUCCESS == phDnldNfc_InitImgInfo()) {
-    NXPLOG_FWDNLD_D("phDnldNfc_InitImgInfo:SUCCESS");
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-    if (gRecFWDwnld == true) {
-      status =
-          phNxpNciHal_fw_seq_handler(phNxpNciHal_dummy_rec_dwnld_seqhandler);
-    } else
-#endif
-    {
-      status = phNxpNciHal_fw_seq_handler(phNxpNciHal_dwnld_seqhandler);
-    }
-  } else {
-    NXPLOG_FWDNLD_E("phDnldNfc_InitImgInfo: FAILED");
-  }
-
-  /* Chage to normal mode */
-  status = phNxpNciHal_fw_dnld_complete(pContext, status, &pInfo);
-  /*if (NFCSTATUS_SUCCESS == status)
-  {
-      NXPLOG_FWDNLD_D(" phNxpNciHal_fw_dnld_complete : SUCCESS");
-  }
-  else
-  {
-      NXPLOG_FWDNLD_E(" phNxpNciHal_fw_dnld_complete : FAILED");
-  }*/
-
-  return status;
-}
-
-static NFCSTATUS phLibNfc_VerifyCrcStatus(uint8_t bCrcStatus) {
-#if ((NFC_NXP_CHIP_TYPE == PN551) || (NFC_NXP_CHIP_TYPE == PN553))
-  uint8_t bBitPos = 1;
-  uint8_t bShiftVal = 2;
-#else
-  uint8_t bBitPos = 0;
-  uint8_t bShiftVal = 1;
-#endif
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  while (bBitPos < 7) {
-    if (!(bCrcStatus & bShiftVal)) {
-      switch (bBitPos) {
-        case 0: {
-          NXPLOG_FWDNLD_E("User Data Crc is NOT OK!!");
-          wStatus = NFCSTATUS_FAILED;
-          break;
-        }
-        case 1: {
-          NXPLOG_FWDNLD_E("Trim Data Crc is NOT OK!!");
-          wStatus = NFCSTATUS_FAILED;
-          break;
-        }
-        case 2: {
-          NXPLOG_FWDNLD_E("Protected Data Crc is NOT OK!!");
-          wStatus = NFCSTATUS_FAILED;
-          break;
-        }
-        case 3: {
-          NXPLOG_FWDNLD_E("Patch Code Crc is NOT OK!!");
-          wStatus = NFCSTATUS_FAILED;
-          break;
-        }
-        case 4: {
-          NXPLOG_FWDNLD_E("Function Code Crc is NOT OK!!");
-          wStatus = NFCSTATUS_FAILED;
-          break;
-        }
-        case 5: {
-          NXPLOG_FWDNLD_E("Patch Table Crc is NOT OK!!");
-          wStatus = NFCSTATUS_FAILED;
-          break;
-        }
-        case 6: {
-          NXPLOG_FWDNLD_E("Function Table Crc is NOT OK!!");
-          wStatus = NFCSTATUS_FAILED;
-          break;
-        }
-        default: { break; }
-      }
-    }
-
-    bShiftVal <<= 1;
-    ++bBitPos;
-  }
-
-  return wStatus;
-}
diff --git a/halimpl/pn54x/dnld/phNxpNciHal_Dnld.h b/halimpl/pn54x/dnld/phNxpNciHal_Dnld.h
deleted file mode 100644
index d32fead..0000000
--- a/halimpl/pn54x/dnld/phNxpNciHal_Dnld.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2012-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef _PHNXPNCIHAL_DNLD_H_
-#define _PHNXPNCIHAL_DNLD_H_
-
-#include <phNfcStatus.h>
-#include <phNfcTypes.h>
-
-NFCSTATUS phNxpNciHal_fw_download_seq(uint8_t bClkSrcVal, uint8_t bClkFreqVal);
-
-#endif /* _PHNXPNCIHAL_DNLD_H_ */
diff --git a/halimpl/pn54x/hal/phNxpNciHal.c b/halimpl/pn54x/hal/phNxpNciHal.c
deleted file mode 100644
index 5a799d5..0000000
--- a/halimpl/pn54x/hal/phNxpNciHal.c
+++ /dev/null
@@ -1,2653 +0,0 @@
-/*
- * Copyright (C) 2012-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <phDal4Nfc_messageQueueLib.h>
-#include <phDnldNfc.h>
-#include <phNxpConfig.h>
-#include <phNxpLog.h>
-#include <phNxpNciHal.h>
-#include <phNxpNciHal_Adaptation.h>
-#include <phNxpNciHal_Dnld.h>
-#include <phNxpNciHal_NfcDepSWPrio.h>
-#include <phNxpNciHal_ext.h>
-#include <phTmlNfc.h>
-#include <sys/stat.h>
-/*********************** Global Variables *************************************/
-#define PN547C2_CLOCK_SETTING
-#undef PN547C2_FACTORY_RESET_DEBUG
-#define CORE_RES_STATUS_BYTE 3
-/* FW Mobile major number */
-#define FW_MOBILE_MAJOR_NUMBER_PN553 0x01
-#define FW_MOBILE_MAJOR_NUMBER_PN81A 0x02
-#define FW_MOBILE_MAJOR_NUMBER_PN551 0x05
-#define FW_MOBILE_MAJOR_NUMBER_PN48AD 0x01
-
-#if (NFC_NXP_CHIP_TYPE == PN551)
-#define FW_MOBILE_MAJOR_NUMBER FW_MOBILE_MAJOR_NUMBER_PN551
-#elif (NFC_NXP_CHIP_TYPE == PN553)
-#define FW_MOBILE_MAJOR_NUMBER FW_MOBILE_MAJOR_NUMBER_PN553
-#else
-#define FW_MOBILE_MAJOR_NUMBER FW_MOBILE_MAJOR_NUMBER_PN48AD
-#endif
-/* Processing of ISO 15693 EOF */
-extern uint8_t icode_send_eof;
-extern uint8_t icode_detected;
-static uint8_t cmd_icode_eof[] = {0x00, 0x00, 0x00};
-
-/* FW download success flag */
-static uint8_t fw_download_success = 0;
-
-static uint8_t config_access = false;
-static uint8_t config_success = true;
-/* NCI HAL Control structure */
-phNxpNciHal_Control_t nxpncihal_ctrl;
-
-/* NXP Poll Profile structure */
-phNxpNciProfile_Control_t nxpprofile_ctrl;
-
-/* TML Context */
-extern phTmlNfc_Context_t* gpphTmlNfc_Context;
-extern void phTmlNfc_set_fragmentation_enabled(
-    phTmlNfc_i2cfragmentation_t result);
-/* global variable to get FW version from NCI response*/
-uint32_t wFwVerRsp;
-/* External global variable to get FW version */
-extern uint16_t wFwVer;
-
-extern uint16_t fw_maj_ver;
-extern uint16_t rom_version;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-extern uint8_t gRecFWDwnld;
-static uint8_t gRecFwRetryCount;  // variable to hold dummy FW recovery count
-#endif
-static uint8_t Rx_data[NCI_MAX_DATA_LEN];
-
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-uint8_t discovery_cmd[50] = {0};
-uint8_t discovery_cmd_len = 0;
-#endif
-uint32_t timeoutTimerId = 0;
-phNxpNciHal_Sem_t config_data;
-
-phNxpNciClock_t phNxpNciClock = {0, {0}, false};
-
-phNxpNciRfSetting_t phNxpNciRfSet = {false, {0}};
-
-phNxpNciMwEepromArea_t phNxpNciMwEepromArea = {false, {0}};
-
-/**************** local methods used in this file only ************************/
-static NFCSTATUS phNxpNciHal_fw_download(void);
-static void phNxpNciHal_open_complete(NFCSTATUS status);
-static void phNxpNciHal_write_complete(void* pContext,
-                                       phTmlNfc_TransactInfo_t* pInfo);
-static void phNxpNciHal_read_complete(void* pContext,
-                                      phTmlNfc_TransactInfo_t* pInfo);
-static void phNxpNciHal_close_complete(NFCSTATUS status);
-static void phNxpNciHal_core_initialized_complete(NFCSTATUS status);
-static void phNxpNciHal_pre_discover_complete(NFCSTATUS status);
-static void phNxpNciHal_power_cycle_complete(NFCSTATUS status);
-static void phNxpNciHal_kill_client_thread(
-    phNxpNciHal_Control_t* p_nxpncihal_ctrl);
-static void* phNxpNciHal_client_thread(void* arg);
-static void phNxpNciHal_get_clk_freq(void);
-static void phNxpNciHal_set_clock(void);
-static void phNxpNciHal_check_factory_reset(void);
-static void phNxpNciHal_print_res_status(uint8_t* p_rx_data, uint16_t* p_len);
-static NFCSTATUS phNxpNciHal_CheckValidFwVersion(void);
-static void phNxpNciHal_enable_i2c_fragmentation();
-static NFCSTATUS phNxpNciHal_get_mw_eeprom(void);
-static NFCSTATUS phNxpNciHal_set_mw_eeprom(void);
-static int phNxpNciHal_fw_mw_ver_check();
-NFCSTATUS phNxpNciHal_check_clock_config(void);
-NFCSTATUS phNxpNciHal_china_tianjin_rf_setting(void);
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-static NFCSTATUS phNxpNciHalRFConfigCmdRecSequence();
-static NFCSTATUS phNxpNciHal_CheckRFCmdRespStatus();
-#endif
-int check_config_parameter();
-
-/******************************************************************************
- * Function         phNxpNciHal_client_thread
- *
- * Description      This function is a thread handler which handles all TML and
- *                  NCI messages.
- *
- * Returns          void
- *
- ******************************************************************************/
-static void* phNxpNciHal_client_thread(void* arg) {
-  phNxpNciHal_Control_t* p_nxpncihal_ctrl = (phNxpNciHal_Control_t*)arg;
-  phLibNfc_Message_t msg;
-
-  NXPLOG_NCIHAL_D("thread started");
-
-  p_nxpncihal_ctrl->thread_running = 1;
-
-  while (p_nxpncihal_ctrl->thread_running == 1) {
-    /* Fetch next message from the NFC stack message queue */
-    if (phDal4Nfc_msgrcv(p_nxpncihal_ctrl->gDrvCfg.nClientId, &msg, 0, 0) ==
-        -1) {
-      NXPLOG_NCIHAL_E("NFC client received bad message");
-      continue;
-    }
-
-    if (p_nxpncihal_ctrl->thread_running == 0) {
-      break;
-    }
-
-    switch (msg.eMsgType) {
-      case PH_LIBNFC_DEFERREDCALL_MSG: {
-        phLibNfc_DeferredCall_t* deferCall =
-            (phLibNfc_DeferredCall_t*)(msg.pMsgData);
-
-        REENTRANCE_LOCK();
-        deferCall->pCallback(deferCall->pParameter);
-        REENTRANCE_UNLOCK();
-
-        break;
-      }
-
-      case NCI_HAL_OPEN_CPLT_MSG: {
-        REENTRANCE_LOCK();
-        if (nxpncihal_ctrl.p_nfc_stack_cback != NULL) {
-          /* Send the event */
-          (*nxpncihal_ctrl.p_nfc_stack_cback)(HAL_NFC_OPEN_CPLT_EVT,
-                                              HAL_NFC_STATUS_OK);
-        }
-        REENTRANCE_UNLOCK();
-        break;
-      }
-
-      case NCI_HAL_CLOSE_CPLT_MSG: {
-        REENTRANCE_LOCK();
-        if (nxpncihal_ctrl.p_nfc_stack_cback != NULL) {
-          /* Send the event */
-          (*nxpncihal_ctrl.p_nfc_stack_cback)(HAL_NFC_CLOSE_CPLT_EVT,
-                                              HAL_NFC_STATUS_OK);
-          phNxpNciHal_kill_client_thread(&nxpncihal_ctrl);
-        }
-        REENTRANCE_UNLOCK();
-        break;
-      }
-
-      case NCI_HAL_POST_INIT_CPLT_MSG: {
-        REENTRANCE_LOCK();
-        if (nxpncihal_ctrl.p_nfc_stack_cback != NULL) {
-          /* Send the event */
-          (*nxpncihal_ctrl.p_nfc_stack_cback)(HAL_NFC_POST_INIT_CPLT_EVT,
-                                              HAL_NFC_STATUS_OK);
-        }
-        REENTRANCE_UNLOCK();
-        break;
-      }
-
-      case NCI_HAL_PRE_DISCOVER_CPLT_MSG: {
-        REENTRANCE_LOCK();
-        if (nxpncihal_ctrl.p_nfc_stack_cback != NULL) {
-          /* Send the event */
-          (*nxpncihal_ctrl.p_nfc_stack_cback)(HAL_NFC_PRE_DISCOVER_CPLT_EVT,
-                                              HAL_NFC_STATUS_OK);
-        }
-        REENTRANCE_UNLOCK();
-        break;
-      }
-
-      case NCI_HAL_ERROR_MSG: {
-        REENTRANCE_LOCK();
-        if (nxpncihal_ctrl.p_nfc_stack_cback != NULL) {
-          /* Send the event */
-          (*nxpncihal_ctrl.p_nfc_stack_cback)(HAL_NFC_ERROR_EVT,
-                                              HAL_NFC_STATUS_FAILED);
-        }
-        REENTRANCE_UNLOCK();
-        break;
-      }
-
-      case NCI_HAL_RX_MSG: {
-        REENTRANCE_LOCK();
-        if (nxpncihal_ctrl.p_nfc_stack_data_cback != NULL) {
-          (*nxpncihal_ctrl.p_nfc_stack_data_cback)(nxpncihal_ctrl.rsp_len,
-                                                   nxpncihal_ctrl.p_rsp_data);
-        }
-        REENTRANCE_UNLOCK();
-        break;
-      }
-    }
-  }
-
-  NXPLOG_NCIHAL_D("NxpNciHal thread stopped");
-
-  return NULL;
-}
-
-/******************************************************************************
- * Function         phNxpNciHal_kill_client_thread
- *
- * Description      This function safely kill the client thread and clean all
- *                  resources.
- *
- * Returns          void.
- *
- ******************************************************************************/
-static void phNxpNciHal_kill_client_thread(
-    phNxpNciHal_Control_t* p_nxpncihal_ctrl) {
-  NXPLOG_NCIHAL_D("Terminating phNxpNciHal client thread...");
-
-  p_nxpncihal_ctrl->p_nfc_stack_cback = NULL;
-  p_nxpncihal_ctrl->p_nfc_stack_data_cback = NULL;
-  p_nxpncihal_ctrl->thread_running = 0;
-
-  return;
-}
-
-/******************************************************************************
- * Function         phNxpNciHal_fw_download
- *
- * Description      This function download the PN54X secure firmware to IC. If
- *                  firmware version in Android filesystem and firmware in the
- *                  IC is same then firmware download will return with success
- *                  without downloading the firmware.
- *
- * Returns          NFCSTATUS_SUCCESS if firmware download successful
- *                  NFCSTATUS_FAILED in case of failure
- *
- ******************************************************************************/
-static NFCSTATUS phNxpNciHal_fw_download(void) {
-  NFCSTATUS status = NFCSTATUS_FAILED;
-  /*NCI_RESET_CMD*/
-  static uint8_t cmd_reset_nci[] = {0x20, 0x00, 0x01, 0x00};
-
-  phNxpNciHal_get_clk_freq();
-  status = phTmlNfc_IoCtl(phTmlNfc_e_EnableDownloadMode);
-  if (NFCSTATUS_SUCCESS == status) {
-    /* Set the obtained device handle to download module */
-    phDnldNfc_SetHwDevHandle();
-    NXPLOG_NCIHAL_D("Calling Seq handler for FW Download \n");
-    status = phNxpNciHal_fw_download_seq(nxpprofile_ctrl.bClkSrcVal,
-                                         nxpprofile_ctrl.bClkFreqVal);
-    if (status != NFCSTATUS_SUCCESS) {
-      /* Abort any pending read and write */
-      phNxpNciHal_send_ext_cmd(sizeof(cmd_reset_nci), cmd_reset_nci);
-      phTmlNfc_ReadAbort();
-      phTmlNfc_WriteAbort();
-    }
-    phDnldNfc_ReSetHwDevHandle();
-  } else {
-    status = NFCSTATUS_FAILED;
-  }
-
-  return status;
-}
-
-/******************************************************************************
- * Function         phNxpNciHal_CheckValidFwVersion
- *
- * Description      This function checks the valid FW for Mobile device.
- *                  If the FW doesn't belong the Mobile device it further
- *                  checks nxp config file to override.
- *
- * Returns          NFCSTATUS_SUCCESS if valid fw version found
- *                  NFCSTATUS_NOT_ALLOWED in case of FW not valid for mobile
- *                  device
- *
- ******************************************************************************/
-static NFCSTATUS phNxpNciHal_CheckValidFwVersion(void) {
-  NFCSTATUS status = NFCSTATUS_NOT_ALLOWED;
-  const unsigned char sfw_infra_major_no = 0x02;
-  unsigned char ufw_current_major_no = 0x00;
-  unsigned long num = 0;
-  int isfound = 0;
-
-  /* extract the firmware's major no */
-  ufw_current_major_no = ((0x00FF) & (wFwVer >> 8U));
-
-  NXPLOG_NCIHAL_D("%s current_major_no = 0x%x", __FUNCTION__,
-                  ufw_current_major_no);
-  if ((ufw_current_major_no == FW_MOBILE_MAJOR_NUMBER) ||
-      ((ufw_current_major_no == FW_MOBILE_MAJOR_NUMBER_PN81A &&
-        (nxpncihal_ctrl.nci_info.nci_version == NCI_VERSION_2_0)))
-#if (NFC_NXP_CHIP_TYPE == PN553)
-      || ((rom_version == 0x00) &&
-          (ufw_current_major_no == FW_MOBILE_MAJOR_NUMBER_PN81A))
-#endif
-          )
-
-  {
-    status = NFCSTATUS_SUCCESS;
-  } else if (ufw_current_major_no == sfw_infra_major_no) {
-    if (rom_version == FW_MOBILE_ROM_VERSION_PN553 &&
-        nxpncihal_ctrl.nci_info.nci_version == NCI_VERSION_2_0) {
-      NXPLOG_NCIHAL_D(" PN81A  allow Fw download with major number =  0x%x",
-                      ufw_current_major_no);
-      status = NFCSTATUS_SUCCESS;
-    } else {
-      /* Check the nxp config file if still want to go for download */
-      /* By default NAME_NXP_FW_PROTECION_OVERRIDE will not be defined in config
-         file.
-         If user really want to override the Infra firmware over mobile
-         firmware, please
-         put "NXP_FW_PROTECION_OVERRIDE=0x01" in libnfc-nxp.conf file.
-         Please note once Infra firmware downloaded to Mobile device, The device
-         can never be updated to Mobile firmware*/
-      isfound =
-          GetNxpNumValue(NAME_NXP_FW_PROTECION_OVERRIDE, &num, sizeof(num));
-      if (isfound > 0) {
-        if (num == 0x01) {
-          NXPLOG_NCIHAL_D("Override Infra FW over Mobile");
-          status = NFCSTATUS_SUCCESS;
-        } else {
-          NXPLOG_NCIHAL_D(
-              "Firmware download not allowed (NXP_FW_PROTECION_OVERRIDE "
-              "invalid value)");
-        }
-      } else {
-        NXPLOG_NCIHAL_D(
-            "Firmware download not allowed (NXP_FW_PROTECION_OVERRIDE not "
-            "defined)");
-      }
-    }
-  }
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-  else if (gRecFWDwnld == TRUE) {
-    status = NFCSTATUS_SUCCESS;
-  }
-#endif
-  else if (wFwVerRsp == 0) {
-    NXPLOG_NCIHAL_E(
-        "FW Version not received by NCI command >>> Force Firmware download");
-    status = NFCSTATUS_SUCCESS;
-  } else {
-    NXPLOG_NCIHAL_E("Wrong FW Version >>> Firmware download not allowed");
-  }
-
-  return status;
-}
-
-static void phNxpNciHal_get_clk_freq(void) {
-  unsigned long num = 0;
-  int isfound = 0;
-
-  nxpprofile_ctrl.bClkSrcVal = 0;
-  nxpprofile_ctrl.bClkFreqVal = 0;
-  nxpprofile_ctrl.bTimeout = 0;
-
-  isfound = GetNxpNumValue(NAME_NXP_SYS_CLK_SRC_SEL, &num, sizeof(num));
-  if (isfound > 0) {
-    nxpprofile_ctrl.bClkSrcVal = num;
-  }
-
-  num = 0;
-  isfound = 0;
-  isfound = GetNxpNumValue(NAME_NXP_SYS_CLK_FREQ_SEL, &num, sizeof(num));
-  if (isfound > 0) {
-    nxpprofile_ctrl.bClkFreqVal = num;
-  }
-
-  num = 0;
-  isfound = 0;
-  isfound = GetNxpNumValue(NAME_NXP_SYS_CLOCK_TO_CFG, &num, sizeof(num));
-  if (isfound > 0) {
-    nxpprofile_ctrl.bTimeout = num;
-  }
-
-  NXPLOG_FWDNLD_D("gphNxpNciHal_fw_IoctlCtx.bClkSrcVal = 0x%x",
-                  nxpprofile_ctrl.bClkSrcVal);
-  NXPLOG_FWDNLD_D("gphNxpNciHal_fw_IoctlCtx.bClkFreqVal = 0x%x",
-                  nxpprofile_ctrl.bClkFreqVal);
-  NXPLOG_FWDNLD_D("gphNxpNciHal_fw_IoctlCtx.bClkFreqVal = 0x%x",
-                  nxpprofile_ctrl.bTimeout);
-
-  if ((nxpprofile_ctrl.bClkSrcVal < CLK_SRC_XTAL) ||
-      (nxpprofile_ctrl.bClkSrcVal > CLK_SRC_PLL)) {
-    NXPLOG_FWDNLD_E(
-        "Clock source value is wrong in config file, setting it as default");
-    nxpprofile_ctrl.bClkSrcVal = NXP_SYS_CLK_SRC_SEL;
-  }
-  if ((nxpprofile_ctrl.bClkFreqVal < CLK_FREQ_13MHZ) ||
-      (nxpprofile_ctrl.bClkFreqVal > CLK_FREQ_52MHZ)) {
-    NXPLOG_FWDNLD_E(
-        "Clock frequency value is wrong in config file, setting it as default");
-    nxpprofile_ctrl.bClkFreqVal = NXP_SYS_CLK_FREQ_SEL;
-  }
-  if ((nxpprofile_ctrl.bTimeout < CLK_TO_CFG_DEF) ||
-      (nxpprofile_ctrl.bTimeout > CLK_TO_CFG_MAX)) {
-    NXPLOG_FWDNLD_E(
-        "Clock timeout value is wrong in config file, setting it as default");
-    nxpprofile_ctrl.bTimeout = CLK_TO_CFG_DEF;
-  }
-}
-
-/******************************************************************************
- * Function         phNxpNciHal_open
- *
- * Description      This function is called by libnfc-nci during the
- *                  initialization of the NFCC. It opens the physical connection
- *                  with NFCC (PN54X) and creates required client thread for
- *                  operation.
- *                  After open is complete, status is informed to libnfc-nci
- *                  through callback function.
- *
- * Returns          This function return NFCSTATUS_SUCCES (0) in case of success
- *                  In case of failure returns other failure value.
- *
- ******************************************************************************/
-int phNxpNciHal_open(nfc_stack_callback_t* p_cback,
-                     nfc_stack_data_callback_t* p_data_cback) {
-  phOsalNfc_Config_t tOsalConfig;
-  phTmlNfc_Config_t tTmlConfig;
-  char* nfc_dev_node = NULL;
-  const uint16_t max_len = 260;
-  NFCSTATUS wConfigStatus = NFCSTATUS_SUCCESS;
-  NFCSTATUS status = NFCSTATUS_SUCCESS;
-  /*NCI_INIT_CMD*/
-  static uint8_t cmd_init_nci[] = {0x20, 0x01, 0x00};
-  /*NCI_RESET_CMD*/
-  static uint8_t cmd_reset_nci[] = {0x20, 0x00, 0x01, 0x00};
-  /*NCI2_0_INIT_CMD*/
-  static uint8_t cmd_init_nci2_0[] = {0x20, 0x01, 0x02, 0x00, 0x00};
-  if (nxpncihal_ctrl.halStatus == HAL_STATUS_OPEN) {
-    NXPLOG_NCIHAL_E("phNxpNciHal_open already open");
-    return NFCSTATUS_SUCCESS;
-  }
-  /* reset config cache */
-  resetNxpConfig();
-
-  int init_retry_cnt = 0;
-  int8_t ret_val = 0x00;
-
-  /* initialize trace level */
-  phNxpLog_InitializeLogLevel();
-
-  /*Create the timer for extns write response*/
-  timeoutTimerId = phOsalNfc_Timer_Create();
-
-  if (phNxpNciHal_init_monitor() == NULL) {
-    NXPLOG_NCIHAL_E("Init monitor failed");
-    return NFCSTATUS_FAILED;
-  }
-
-  CONCURRENCY_LOCK();
-  memset(&nxpncihal_ctrl, 0x00, sizeof(nxpncihal_ctrl));
-  memset(&tOsalConfig, 0x00, sizeof(tOsalConfig));
-  memset(&tTmlConfig, 0x00, sizeof(tTmlConfig));
-  memset(&nxpprofile_ctrl, 0, sizeof(phNxpNciProfile_Control_t));
-
-  /* By default HAL status is HAL_STATUS_OPEN */
-  nxpncihal_ctrl.halStatus = HAL_STATUS_OPEN;
-
-  nxpncihal_ctrl.p_nfc_stack_cback = p_cback;
-  nxpncihal_ctrl.p_nfc_stack_data_cback = p_data_cback;
-  /*nci version NCI_VERSION_UNKNOWN version by default*/
-  nxpncihal_ctrl.nci_info.nci_version = NCI_VERSION_UNKNOWN;
-  /* Read the nfc device node name */
-  nfc_dev_node = (char*)malloc(max_len * sizeof(char));
-  if (nfc_dev_node == NULL) {
-    NXPLOG_NCIHAL_E("malloc of nfc_dev_node failed ");
-    goto clean_and_return;
-  } else if (!GetNxpStrValue(NAME_NXP_NFC_DEV_NODE, nfc_dev_node,
-                             sizeof(nfc_dev_node))) {
-    NXPLOG_NCIHAL_E(
-        "Invalid nfc device node name keeping the default device node "
-        "/dev/pn54x");
-    strcpy(nfc_dev_node, "/dev/pn54x");
-  }
-
-  /* Configure hardware link */
-  nxpncihal_ctrl.gDrvCfg.nClientId = phDal4Nfc_msgget(0, 0600);
-  nxpncihal_ctrl.gDrvCfg.nLinkType = ENUM_LINK_TYPE_I2C; /* For PN54X */
-  tTmlConfig.pDevName = (int8_t*)nfc_dev_node;
-  tOsalConfig.dwCallbackThreadId = (uintptr_t)nxpncihal_ctrl.gDrvCfg.nClientId;
-  tOsalConfig.pLogFile = NULL;
-  tTmlConfig.dwGetMsgThreadId = (uintptr_t)nxpncihal_ctrl.gDrvCfg.nClientId;
-
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-  memset(discovery_cmd, 0, sizeof(discovery_cmd));
-  discovery_cmd_len = 0;
-#endif
-
-  /* Initialize TML layer */
-  wConfigStatus = phTmlNfc_Init(&tTmlConfig);
-  if (wConfigStatus != NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_E("phTmlNfc_Init Failed");
-    goto clean_and_return;
-  } else {
-    if (nfc_dev_node != NULL) {
-      free(nfc_dev_node);
-      nfc_dev_node = NULL;
-    }
-  }
-
-  /* Create the client thread */
-  pthread_attr_t attr;
-  pthread_attr_init(&attr);
-  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
-  ret_val = pthread_create(&nxpncihal_ctrl.client_thread, &attr,
-                           phNxpNciHal_client_thread, &nxpncihal_ctrl);
-  pthread_attr_destroy(&attr);
-  if (ret_val != 0) {
-    NXPLOG_NCIHAL_E("pthread_create failed");
-    wConfigStatus = phTmlNfc_Shutdown();
-    goto clean_and_return;
-  }
-
-  CONCURRENCY_UNLOCK();
-
-  /* call read pending */
-  status = phTmlNfc_Read(
-      nxpncihal_ctrl.p_cmd_data, NCI_MAX_DATA_LEN,
-      (pphTmlNfc_TransactCompletionCb_t)&phNxpNciHal_read_complete, NULL);
-  if (status != NFCSTATUS_PENDING) {
-    NXPLOG_NCIHAL_E("TML Read status error status = %x", status);
-    wConfigStatus = phTmlNfc_Shutdown();
-    wConfigStatus = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-
-init_retry:
-
-  phNxpNciHal_ext_init();
-
-  status = phNxpNciHal_send_ext_cmd(sizeof(cmd_reset_nci), cmd_reset_nci);
-  if ((status != NFCSTATUS_SUCCESS) &&
-      (nxpncihal_ctrl.retry_cnt >= MAX_RETRY_COUNT)) {
-    NXPLOG_NCIHAL_E("Force FW Download, NFCC not coming out from Standby");
-    wConfigStatus = NFCSTATUS_FAILED;
-    goto force_download;
-  } else if (status != NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_E("NCI_CORE_RESET: Failed");
-    if (init_retry_cnt < 3) {
-      init_retry_cnt++;
-      (void)phNxpNciHal_power_cycle();
-      goto init_retry;
-    } else
-      init_retry_cnt = 0;
-    wConfigStatus = phTmlNfc_Shutdown();
-    wConfigStatus = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-
-  status = phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci2_0), cmd_init_nci2_0);
-  if (status == NFCSTATUS_SUCCESS) {
-    if (nxpncihal_ctrl.nci_info.nci_version != NCI_VERSION_2_0) {
-      NXPLOG_NCIHAL_E("Chip is in NCI1.0 mode reset the chip again");
-      status = phNxpNciHal_send_ext_cmd(sizeof(cmd_reset_nci), cmd_reset_nci);
-      if (status == NFCSTATUS_SUCCESS) {
-        if (nxpncihal_ctrl.nci_info.nci_version == NCI_VERSION_2_0) {
-          status = phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci2_0),
-                                            cmd_init_nci2_0);
-        } else {
-          status = phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci), cmd_init_nci);
-        }
-      }
-    }
-  }
-  if (status != NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_E("NCI_CORE_INIT : Failed");
-    if (init_retry_cnt < 3) {
-      init_retry_cnt++;
-      (void)phNxpNciHal_power_cycle();
-      goto init_retry;
-    } else
-      init_retry_cnt = 0;
-    wConfigStatus = phTmlNfc_Shutdown();
-    wConfigStatus = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-  phNxpNciHal_enable_i2c_fragmentation();
-  /*Get FW version from device*/
-  status = phDnldNfc_InitImgInfo();
-  NXPLOG_NCIHAL_E("FW version for FW file = 0x%x", wFwVer);
-  NXPLOG_NCIHAL_E("FW version from device = 0x%x", wFwVerRsp);
-  if ((wFwVerRsp & 0x0000FFFF) == wFwVer) {
-    NXPLOG_NCIHAL_D("FW uptodate not required");
-    phDnldNfc_ReSetHwDevHandle();
-  } else {
-  force_download:
-    if (wFwVerRsp == 0) {
-      phDnldNfc_InitImgInfo();
-    }
-    if (NFCSTATUS_SUCCESS == phNxpNciHal_CheckValidFwVersion()) {
-      NXPLOG_NCIHAL_D("FW update required");
-      fw_download_success = 0;
-      status = phNxpNciHal_fw_download();
-      if (status != NFCSTATUS_SUCCESS) {
-        if (NFCSTATUS_SUCCESS != phNxpNciHal_fw_mw_ver_check()) {
-          NXPLOG_NCIHAL_D("Chip Version Middleware Version mismatch!!!!");
-          phOsalNfc_Timer_Cleanup();
-          phTmlNfc_Shutdown();
-          wConfigStatus = NFCSTATUS_FAILED;
-          goto clean_and_return;
-        }
-        NXPLOG_NCIHAL_E("FW Download failed - NFCC init will continue");
-      } else {
-        wConfigStatus = NFCSTATUS_SUCCESS;
-        fw_download_success = 1;
-        /* call read pending */
-        status = phTmlNfc_Read(
-            nxpncihal_ctrl.p_cmd_data, NCI_MAX_DATA_LEN,
-            (pphTmlNfc_TransactCompletionCb_t)&phNxpNciHal_read_complete, NULL);
-        if (status != NFCSTATUS_PENDING) {
-          NXPLOG_NCIHAL_E("TML Read status error status = %x", status);
-          wConfigStatus = phTmlNfc_Shutdown();
-          wConfigStatus = NFCSTATUS_FAILED;
-          goto clean_and_return;
-        }
-      }
-    } else {
-      if (wFwVerRsp == 0) phDnldNfc_ReSetHwDevHandle();
-    }
-  }
-  /* Call open complete */
-  phNxpNciHal_open_complete(wConfigStatus);
-
-  return wConfigStatus;
-
-clean_and_return:
-  CONCURRENCY_UNLOCK();
-  if (nfc_dev_node != NULL) {
-    free(nfc_dev_node);
-    nfc_dev_node = NULL;
-  }
-  /* Report error status */
-  (*nxpncihal_ctrl.p_nfc_stack_cback)(HAL_NFC_OPEN_CPLT_EVT,
-                                      HAL_NFC_STATUS_FAILED);
-
-  nxpncihal_ctrl.p_nfc_stack_cback = NULL;
-  nxpncihal_ctrl.p_nfc_stack_data_cback = NULL;
-  phNxpNciHal_cleanup_monitor();
-  nxpncihal_ctrl.halStatus = HAL_STATUS_CLOSE;
-  return NFCSTATUS_FAILED;
-}
-
-/******************************************************************************
- * Function         phNxpNciHal_fw_mw_check
- *
- * Description      This function inform the status of phNxpNciHal_fw_mw_check
- *                  function to libnfc-nci.
- *
- * Returns          int.
- *
- ******************************************************************************/
-int phNxpNciHal_fw_mw_ver_check() {
-  NFCSTATUS status = NFCSTATUS_FAILED;
-  if (!(strcmp(COMPILATION_MW, "PN553")) &&
-      (rom_version == FW_MOBILE_ROM_VERSION_PN553) &&
-      (fw_maj_ver == 0x01 || fw_maj_ver == 0x02)) {
-    status = NFCSTATUS_SUCCESS;
-  } else if (!strcmp(COMPILATION_MW, "PN551") &&
-             (rom_version == FW_MOBILE_ROM_VERSION_PN551) &&
-             (fw_maj_ver == 0x05)) {
-    status = NFCSTATUS_SUCCESS;
-  } else if (!strcmp(COMPILATION_MW, "PN548C2") &&
-             (rom_version == FW_MOBILE_ROM_VERSION_PN548AD) &&
-             (fw_maj_ver == 0x01)) {
-    status = NFCSTATUS_SUCCESS;
-  } else if (!strcmp(COMPILATION_MW, "PN547C2") &&
-             (rom_version == FW_MOBILE_ROM_VERSION_PN547C2) &&
-             (fw_maj_ver == 0x01)) {
-    status = NFCSTATUS_SUCCESS;
-  }
-  return status;
-}
-/******************************************************************************
- * Function         phNxpNciHal_open_complete
- *
- * Description      This function inform the status of phNxpNciHal_open
- *                  function to libnfc-nci.
- *
- * Returns          void.
- *
- ******************************************************************************/
-static void phNxpNciHal_open_complete(NFCSTATUS status) {
-  static phLibNfc_Message_t msg;
-
-  if (status == NFCSTATUS_SUCCESS) {
-    msg.eMsgType = NCI_HAL_OPEN_CPLT_MSG;
-    nxpncihal_ctrl.hal_open_status = true;
-  } else {
-    msg.eMsgType = NCI_HAL_ERROR_MSG;
-  }
-
-  msg.pMsgData = NULL;
-  msg.Size = 0;
-
-  phTmlNfc_DeferredCall(gpphTmlNfc_Context->dwCallbackThreadId,
-                        (phLibNfc_Message_t*)&msg);
-
-  return;
-}
-
-/******************************************************************************
- * Function         phNxpNciHal_write
- *
- * Description      This function write the data to NFCC through physical
- *                  interface (e.g. I2C) using the PN54X driver interface.
- *                  Before sending the data to NFCC, phNxpNciHal_write_ext
- *                  is called to check if there is any extension processing
- *                  is required for the NCI packet being sent out.
- *
- * Returns          It returns number of bytes successfully written to NFCC.
- *
- ******************************************************************************/
-int phNxpNciHal_write(uint16_t data_len, const uint8_t* p_data) {
-  NFCSTATUS status = NFCSTATUS_FAILED;
-  static phLibNfc_Message_t msg;
-  if (nxpncihal_ctrl.halStatus != HAL_STATUS_OPEN) {
-    return NFCSTATUS_FAILED;
-  }
-  /* Create local copy of cmd_data */
-  memcpy(nxpncihal_ctrl.p_cmd_data, p_data, data_len);
-  nxpncihal_ctrl.cmd_len = data_len;
-  if (nxpncihal_ctrl.cmd_len > NCI_MAX_DATA_LEN) {
-    NXPLOG_NCIHAL_D("cmd_len exceeds limit NCI_MAX_DATA_LEN");
-    goto clean_and_return;
-  }
-#ifdef P2P_PRIO_LOGIC_HAL_IMP
-  /* Specific logic to block RF disable when P2P priority logic is busy */
-  if (p_data[0] == 0x21 && p_data[1] == 0x06 && p_data[2] == 0x01 &&
-      EnableP2P_PrioLogic == true) {
-    NXPLOG_NCIHAL_D("P2P priority logic busy: Disable it.");
-    phNxpNciHal_clean_P2P_Prio();
-  }
-#endif
-
-  /* Check for NXP ext before sending write */
-  status =
-      phNxpNciHal_write_ext(&nxpncihal_ctrl.cmd_len, nxpncihal_ctrl.p_cmd_data,
-                            &nxpncihal_ctrl.rsp_len, nxpncihal_ctrl.p_rsp_data);
-  if (status != NFCSTATUS_SUCCESS) {
-    /* Do not send packet to PN54X, send response directly */
-    msg.eMsgType = NCI_HAL_RX_MSG;
-    msg.pMsgData = NULL;
-    msg.Size = 0;
-
-    phTmlNfc_DeferredCall(gpphTmlNfc_Context->dwCallbackThreadId,
-                          (phLibNfc_Message_t*)&msg);
-    goto clean_and_return;
-  }
-
-  CONCURRENCY_LOCK();
-  data_len = phNxpNciHal_write_unlocked(nxpncihal_ctrl.cmd_len,
-                                        nxpncihal_ctrl.p_cmd_data);
-  CONCURRENCY_UNLOCK();
-
-  if (icode_send_eof == 1) {
-    usleep(10000);
-    icode_send_eof = 2;
-    phNxpNciHal_send_ext_cmd(3, cmd_icode_eof);
-  }
-
-clean_and_return:
-  /* No data written */
-  return data_len;
-}
-
-/******************************************************************************
- * Function         phNxpNciHal_write_unlocked
- *
- * Description      This is the actual function which is being called by
- *                  phNxpNciHal_write. This function writes the data to NFCC.
- *                  It waits till write callback provide the result of write
- *                  process.
- *
- * Returns          It returns number of bytes successfully written to NFCC.
- *
- ******************************************************************************/
-int phNxpNciHal_write_unlocked(uint16_t data_len, const uint8_t* p_data) {
-  NFCSTATUS status = NFCSTATUS_INVALID_PARAMETER;
-  phNxpNciHal_Sem_t cb_data;
-  nxpncihal_ctrl.retry_cnt = 0;
-  static uint8_t reset_ntf[] = {0x60, 0x00, 0x06, 0xA0, 0x00,
-                                0xC7, 0xD4, 0x00, 0x00};
-
-  /* Create the local semaphore */
-  if (phNxpNciHal_init_cb_data(&cb_data, NULL) != NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_D("phNxpNciHal_write_unlocked Create cb data failed");
-    data_len = 0;
-    goto clean_and_return;
-  }
-
-  /* Create local copy of cmd_data */
-  memcpy(nxpncihal_ctrl.p_cmd_data, p_data, data_len);
-  nxpncihal_ctrl.cmd_len = data_len;
-
-retry:
-
-  data_len = nxpncihal_ctrl.cmd_len;
-
-  status = phTmlNfc_Write(
-      (uint8_t*)nxpncihal_ctrl.p_cmd_data, (uint16_t)nxpncihal_ctrl.cmd_len,
-      (pphTmlNfc_TransactCompletionCb_t)&phNxpNciHal_write_complete,
-      (void*)&cb_data);
-  if (status != NFCSTATUS_PENDING) {
-    NXPLOG_NCIHAL_E("write_unlocked status error");
-    data_len = 0;
-    goto clean_and_return;
-  }
-
-  /* Wait for callback response */
-  if (SEM_WAIT(cb_data)) {
-    NXPLOG_NCIHAL_E("write_unlocked semaphore error");
-    data_len = 0;
-    goto clean_and_return;
-  }
-
-  if (cb_data.status != NFCSTATUS_SUCCESS) {
-    data_len = 0;
-    if (nxpncihal_ctrl.retry_cnt++ < MAX_RETRY_COUNT) {
-      NXPLOG_NCIHAL_E(
-          "write_unlocked failed - PN54X Maybe in Standby Mode - Retry");
-      /* 10ms delay to give NFCC wake up delay */
-      usleep(1000 * 10);
-      goto retry;
-    } else {
-      NXPLOG_NCIHAL_E(
-          "write_unlocked failed - PN54X Maybe in Standby Mode (max count = "
-          "0x%x)",
-          nxpncihal_ctrl.retry_cnt);
-
-      status = phTmlNfc_IoCtl(phTmlNfc_e_ResetDevice);
-
-      if (NFCSTATUS_SUCCESS == status) {
-        NXPLOG_NCIHAL_D("PN54X Reset - SUCCESS\n");
-      } else {
-        NXPLOG_NCIHAL_D("PN54X Reset - FAILED\n");
-      }
-      if (nxpncihal_ctrl.p_nfc_stack_data_cback != NULL &&
-          nxpncihal_ctrl.p_rx_data != NULL &&
-          nxpncihal_ctrl.hal_open_status == true) {
-        NXPLOG_NCIHAL_D(
-            "Send the Core Reset NTF to upper layer, which will trigger the "
-            "recovery\n");
-        // Send the Core Reset NTF to upper layer, which will trigger the
-        // recovery.
-        nxpncihal_ctrl.rx_data_len = sizeof(reset_ntf);
-        memcpy(nxpncihal_ctrl.p_rx_data, reset_ntf, sizeof(reset_ntf));
-        (*nxpncihal_ctrl.p_nfc_stack_data_cback)(nxpncihal_ctrl.rx_data_len,
-                                                 nxpncihal_ctrl.p_rx_data);
-      }
-    }
-  }
-
-clean_and_return:
-  phNxpNciHal_cleanup_cb_data(&cb_data);
-  return data_len;
-}
-
-/******************************************************************************
- * Function         phNxpNciHal_write_complete
- *
- * Description      This function handles write callback.
- *
- * Returns          void.
- *
- ******************************************************************************/
-static void phNxpNciHal_write_complete(void* pContext,
-                                       phTmlNfc_TransactInfo_t* pInfo) {
-  phNxpNciHal_Sem_t* p_cb_data = (phNxpNciHal_Sem_t*)pContext;
-
-  if (pInfo->wStatus == NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_D("write successful status = 0x%x", pInfo->wStatus);
-  } else {
-    NXPLOG_NCIHAL_E("write error status = 0x%x", pInfo->wStatus);
-  }
-
-  p_cb_data->status = pInfo->wStatus;
-
-  SEM_POST(p_cb_data);
-
-  return;
-}
-
-/******************************************************************************
- * Function         phNxpNciHal_read_complete
- *
- * Description      This function is called whenever there is an NCI packet
- *                  received from NFCC. It could be RSP or NTF packet. This
- *                  function provide the received NCI packet to libnfc-nci
- *                  using data callback of libnfc-nci.
- *                  There is a pending read called from each
- *                  phNxpNciHal_read_complete so each a packet received from
- *                  NFCC can be provide to libnfc-nci.
- *
- * Returns          void.
- *
- ******************************************************************************/
-static void phNxpNciHal_read_complete(void* pContext,
-                                      phTmlNfc_TransactInfo_t* pInfo) {
-  NFCSTATUS status = NFCSTATUS_FAILED;
-  UNUSED(pContext);
-  if (nxpncihal_ctrl.read_retry_cnt == 1) {
-    nxpncihal_ctrl.read_retry_cnt = 0;
-  }
-
-  if (pInfo->wStatus == NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_D("read successful status = 0x%x", pInfo->wStatus);
-
-    nxpncihal_ctrl.p_rx_data = pInfo->pBuff;
-    nxpncihal_ctrl.rx_data_len = pInfo->wLength;
-
-    status = phNxpNciHal_process_ext_rsp(nxpncihal_ctrl.p_rx_data,
-                                         &nxpncihal_ctrl.rx_data_len);
-
-    phNxpNciHal_print_res_status(nxpncihal_ctrl.p_rx_data,
-                                 &nxpncihal_ctrl.rx_data_len);
-    /* Check if response should go to hal module only */
-    if (nxpncihal_ctrl.hal_ext_enabled == TRUE &&
-        (nxpncihal_ctrl.p_rx_data[0x00] & NCI_MT_MASK) == NCI_MT_RSP) {
-      if (status == NFCSTATUS_FAILED) {
-        NXPLOG_NCIHAL_D("enter into NFCC init recovery");
-        nxpncihal_ctrl.ext_cb_data.status = status;
-      }
-      /* Unlock semaphore only for responses*/
-      if ((nxpncihal_ctrl.p_rx_data[0x00] & NCI_MT_MASK) == NCI_MT_RSP ||
-          ((icode_detected == true) && (icode_send_eof == 3))) {
-        /* Unlock semaphore */
-        SEM_POST(&(nxpncihal_ctrl.ext_cb_data));
-      }
-    }  // Notification Checking
-    else if ((nxpncihal_ctrl.hal_ext_enabled == TRUE) &&
-             ((nxpncihal_ctrl.p_rx_data[0x00] & NCI_MT_MASK) == NCI_MT_NTF) &&
-             (nxpncihal_ctrl.nci_info.wait_for_ntf == TRUE)) {
-      /* Unlock semaphore waiting for only  ntf*/
-      SEM_POST(&(nxpncihal_ctrl.ext_cb_data));
-      nxpncihal_ctrl.nci_info.wait_for_ntf = FALSE;
-    }
-    /* Read successful send the event to higher layer */
-    else if ((nxpncihal_ctrl.p_nfc_stack_data_cback != NULL) &&
-             (status == NFCSTATUS_SUCCESS)) {
-      (*nxpncihal_ctrl.p_nfc_stack_data_cback)(nxpncihal_ctrl.rx_data_len,
-                                               nxpncihal_ctrl.p_rx_data);
-    }
-  } else {
-    NXPLOG_NCIHAL_E("read error status = 0x%x", pInfo->wStatus);
-  }
-
-  if (nxpncihal_ctrl.halStatus == HAL_STATUS_CLOSE &&
-      nxpncihal_ctrl.nci_info.wait_for_ntf == FALSE) {
-    NXPLOG_NCIHAL_E(" Ignoring read , HAL close triggered");
-    return;
-  }
-  /* Read again because read must be pending always.*/
-  status = phTmlNfc_Read(
-      Rx_data, NCI_MAX_DATA_LEN,
-      (pphTmlNfc_TransactCompletionCb_t)&phNxpNciHal_read_complete, NULL);
-  if (status != NFCSTATUS_PENDING) {
-    NXPLOG_NCIHAL_E("read status error status = %x", status);
-    /* TODO: Not sure how to handle this ? */
-  }
-
-  return;
-}
-
-void read_retry() {
-  /* Read again because read must be pending always.*/
-  NFCSTATUS status = phTmlNfc_Read(
-      Rx_data, NCI_MAX_DATA_LEN,
-      (pphTmlNfc_TransactCompletionCb_t)&phNxpNciHal_read_complete, NULL);
-  if (status != NFCSTATUS_PENDING) {
-    NXPLOG_NCIHAL_E("read status error status = %x", status);
-    /* TODO: Not sure how to handle this ? */
-  }
-}
-/******************************************************************************
- * Function         phNxpNciHal_core_initialized
- *
- * Description      This function is called by libnfc-nci after successful open
- *                  of NFCC. All proprietary setting for PN54X are done here.
- *                  After completion of proprietary settings notification is
- *                  provided to libnfc-nci through callback function.
- *
- * Returns          Always returns NFCSTATUS_SUCCESS (0).
- *
- ******************************************************************************/
-int phNxpNciHal_core_initialized(uint8_t* p_core_init_rsp_params) {
-  NFCSTATUS status = NFCSTATUS_SUCCESS;
-  static uint8_t p2p_listen_mode_routing_cmd[] = {0x21, 0x01, 0x07, 0x00, 0x01,
-                                                  0x01, 0x03, 0x00, 0x01, 0x05};
-
-  uint8_t swp_full_pwr_mode_on_cmd[] = {0x20, 0x02, 0x05, 0x01,
-                                        0xA0, 0xF1, 0x01, 0x01};
-
-  static uint8_t android_l_aid_matching_mode_on_cmd[] = {
-      0x20, 0x02, 0x05, 0x01, 0xA0, 0x91, 0x01, 0x01};
-  static uint8_t swp_switch_timeout_cmd[] = {0x20, 0x02, 0x06, 0x01, 0xA0,
-                                             0xF3, 0x02, 0x00, 0x00};
-  config_success = true;
-  uint8_t* buffer = NULL;
-  long bufflen = 260;
-  long retlen = 0;
-  int isfound;
-  /* Temp fix to re-apply the proper clock setting */
-  int temp_fix = 1;
-  unsigned long num = 0;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-  // initialize dummy FW recovery variables
-  gRecFwRetryCount = 0;
-  gRecFWDwnld = 0;
-#endif
-  // recovery --start
-  /*NCI_INIT_CMD*/
-  static uint8_t cmd_init_nci[] = {0x20, 0x01, 0x00};
-  /*NCI_RESET_CMD*/
-  static uint8_t cmd_reset_nci[] = {0x20, 0x00, 0x01,
-                                    0x00};  // keep configuration
-  static uint8_t cmd_init_nci2_0[] = {0x20, 0x01, 0x02, 0x00, 0x00};
-  /* reset config cache */
-  static uint8_t retry_core_init_cnt;
-  if (nxpncihal_ctrl.halStatus != HAL_STATUS_OPEN) {
-    return NFCSTATUS_FAILED;
-  }
-  if ((*p_core_init_rsp_params > 0) &&
-      (*p_core_init_rsp_params < 4))  // initializing for recovery.
-  {
-  retry_core_init:
-    config_access = false;
-    if (buffer != NULL) {
-      free(buffer);
-      buffer = NULL;
-    }
-    if (retry_core_init_cnt > 3) {
-      return NFCSTATUS_FAILED;
-    }
-
-    status = phTmlNfc_IoCtl(phTmlNfc_e_ResetDevice);
-    if (NFCSTATUS_SUCCESS == status) {
-      NXPLOG_NCIHAL_D("PN54X Reset - SUCCESS\n");
-    } else {
-      NXPLOG_NCIHAL_D("PN54X Reset - FAILED\n");
-    }
-
-    status = phNxpNciHal_send_ext_cmd(sizeof(cmd_reset_nci), cmd_reset_nci);
-    if ((status != NFCSTATUS_SUCCESS) &&
-        (nxpncihal_ctrl.retry_cnt >= MAX_RETRY_COUNT)) {
-      NXPLOG_NCIHAL_E("Force FW Download, NFCC not coming out from Standby");
-      retry_core_init_cnt++;
-      goto retry_core_init;
-    } else if (status != NFCSTATUS_SUCCESS) {
-      NXPLOG_NCIHAL_E("NCI_CORE_RESET: Failed");
-      retry_core_init_cnt++;
-      goto retry_core_init;
-    }
-
-    if (*p_core_init_rsp_params == 2) {
-      NXPLOG_NCIHAL_E(" Last command is CORE_RESET!!");
-      goto invoke_callback;
-    }
-    if (nxpncihal_ctrl.nci_info.nci_version == NCI_VERSION_2_0) {
-      status =
-          phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci2_0), cmd_init_nci2_0);
-    } else {
-      status = phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci), cmd_init_nci);
-    }
-    if (status != NFCSTATUS_SUCCESS) {
-      NXPLOG_NCIHAL_E("NCI_CORE_INIT : Failed");
-      retry_core_init_cnt++;
-      goto retry_core_init;
-    }
-
-    if (*p_core_init_rsp_params == 3) {
-      NXPLOG_NCIHAL_E(" Last command is CORE_INIT!!");
-      goto invoke_callback;
-    }
-  }
-  // recovery --end
-
-  buffer = (uint8_t*)malloc(bufflen * sizeof(uint8_t));
-  if (NULL == buffer) {
-    return NFCSTATUS_FAILED;
-  }
-  config_access = true;
-  retlen = 0;
-  isfound = GetNxpByteArrayValue(NAME_NXP_ACT_PROP_EXTN, (char*)buffer, bufflen,
-                                 &retlen);
-  if (retlen > 0) {
-    /* NXP ACT Proprietary Ext */
-    status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-    if (status != NFCSTATUS_SUCCESS) {
-      NXPLOG_NCIHAL_E("NXP ACT Proprietary Ext failed");
-      retry_core_init_cnt++;
-      goto retry_core_init;
-    }
-  }
-
-  // Check if firmware download success
-  status = phNxpNciHal_get_mw_eeprom();
-  if (status != NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_E("NXP GET MW EEPROM AREA Proprietary Ext failed");
-    retry_core_init_cnt++;
-    goto retry_core_init;
-  }
-
-  //
-  status = phNxpNciHal_check_clock_config();
-  if (status != NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_E("phNxpNciHal_check_clock_config failed");
-    retry_core_init_cnt++;
-    goto retry_core_init;
-  }
-
-#ifdef PN547C2_CLOCK_SETTING
-  if (isNxpConfigModified() || (fw_download_success == 1) ||
-      (phNxpNciClock.issetConfig)
-#if (NFC_NXP_HFO_SETTINGS == TRUE)
-      || temp_fix == 1
-#endif
-      ) {
-    // phNxpNciHal_get_clk_freq();
-    phNxpNciHal_set_clock();
-    phNxpNciClock.issetConfig = false;
-#if (NFC_NXP_HFO_SETTINGS == TRUE)
-    if (temp_fix == 1) {
-      NXPLOG_NCIHAL_D(
-          "Applying Default Clock setting and DPLL register at power on");
-      /*
-      # A0, 0D, 06, 06, 83, 55, 2A, 04, 00 RF_CLIF_CFG_TARGET CLIF_DPLL_GEAR_REG
-      # A0, 0D, 06, 06, 82, 33, 14, 17, 00 RF_CLIF_CFG_TARGET CLIF_DPLL_INIT_REG
-      # A0, 0D, 06, 06, 84, AA, 85, 00, 80 RF_CLIF_CFG_TARGET
-      CLIF_DPLL_INIT_FREQ_REG
-      # A0, 0D, 06, 06, 81, 63, 00, 00, 00 RF_CLIF_CFG_TARGET
-      CLIF_DPLL_CONTROL_REG
-      */
-      static uint8_t cmd_dpll_set_reg_nci[] = {
-          0x20, 0x02, 0x25, 0x04, 0xA0, 0x0D, 0x06, 0x06, 0x83, 0x55,
-          0x2A, 0x04, 0x00, 0xA0, 0x0D, 0x06, 0x06, 0x82, 0x33, 0x14,
-          0x17, 0x00, 0xA0, 0x0D, 0x06, 0x06, 0x84, 0xAA, 0x85, 0x00,
-          0x80, 0xA0, 0x0D, 0x06, 0x06, 0x81, 0x63, 0x00, 0x00, 0x00};
-
-      status = phNxpNciHal_send_ext_cmd(sizeof(cmd_dpll_set_reg_nci),
-                                        cmd_dpll_set_reg_nci);
-      if (status != NFCSTATUS_SUCCESS) {
-        NXPLOG_NCIHAL_E("NXP DPLL REG ACT Proprietary Ext failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
-      }
-      /* reset the NFCC after applying the clock setting and DPLL setting */
-      // phTmlNfc_IoCtl(phTmlNfc_e_ResetDevice);
-      temp_fix = 0;
-      goto retry_core_init;
-    }
-#endif
-  }
-#endif
-
-  phNxpNciHal_check_factory_reset();
-  retlen = 0;
-  config_access = true;
-  isfound = GetNxpByteArrayValue(NAME_NXP_NFC_PROFILE_EXTN, (char*)buffer,
-                                 bufflen, &retlen);
-  if (retlen > 0) {
-    /* NXP ACT Proprietary Ext */
-    status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-    if (status != NFCSTATUS_SUCCESS) {
-      NXPLOG_NCIHAL_E("NXP ACT Proprietary Ext failed");
-      retry_core_init_cnt++;
-      goto retry_core_init;
-    }
-  }
-
-  if (isNxpConfigModified() || (fw_download_success == 1)) {
-    retlen = 0;
-    fw_download_success = 0;
-
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-    NXPLOG_NCIHAL_D("Performing TVDD Settings");
-    isfound = GetNxpNumValue(NAME_NXP_EXT_TVDD_CFG, &num, sizeof(num));
-    if (isfound > 0) {
-      if (num == 1) {
-        isfound = GetNxpByteArrayValue(NAME_NXP_EXT_TVDD_CFG_1, (char*)buffer,
-                                       bufflen, &retlen);
-        if (retlen > 0) {
-          status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-          if (status != NFCSTATUS_SUCCESS) {
-            NXPLOG_NCIHAL_E("EXT TVDD CFG 1 Settings failed");
-            retry_core_init_cnt++;
-            goto retry_core_init;
-          }
-        }
-      } else if (num == 2) {
-        isfound = GetNxpByteArrayValue(NAME_NXP_EXT_TVDD_CFG_2, (char*)buffer,
-                                       bufflen, &retlen);
-        if (retlen > 0) {
-          status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-          if (status != NFCSTATUS_SUCCESS) {
-            NXPLOG_NCIHAL_E("EXT TVDD CFG 2 Settings failed");
-            retry_core_init_cnt++;
-            goto retry_core_init;
-          }
-        }
-      } else if (num == 3) {
-        isfound = GetNxpByteArrayValue(NAME_NXP_EXT_TVDD_CFG_3, (char*)buffer,
-                                       bufflen, &retlen);
-        if (retlen > 0) {
-          status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-          if (status != NFCSTATUS_SUCCESS) {
-            NXPLOG_NCIHAL_E("EXT TVDD CFG 3 Settings failed");
-            retry_core_init_cnt++;
-            goto retry_core_init;
-          }
-        }
-      } else {
-        NXPLOG_NCIHAL_E("Wrong Configuration Value %ld", num);
-      }
-    }
-#endif
-    retlen = 0;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-    config_access = false;
-#endif
-    NXPLOG_NCIHAL_D("Performing RF Settings BLK 1");
-    isfound = GetNxpByteArrayValue(NAME_NXP_RF_CONF_BLK_1, (char*)buffer,
-                                   bufflen, &retlen);
-    if (retlen > 0) {
-      status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-      if (status == NFCSTATUS_SUCCESS) {
-        status = phNxpNciHal_CheckRFCmdRespStatus();
-        /*STATUS INVALID PARAM 0x09*/
-        if (status == 0x09) {
-          phNxpNciHalRFConfigCmdRecSequence();
-          retry_core_init_cnt++;
-          goto retry_core_init;
-        }
-      } else
-#endif
-          if (status != NFCSTATUS_SUCCESS) {
-        NXPLOG_NCIHAL_E("RF Settings BLK 1 failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
-      }
-    }
-    retlen = 0;
-
-    NXPLOG_NCIHAL_D("Performing RF Settings BLK 2");
-    isfound = GetNxpByteArrayValue(NAME_NXP_RF_CONF_BLK_2, (char*)buffer,
-                                   bufflen, &retlen);
-    if (retlen > 0) {
-      status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-      if (status == NFCSTATUS_SUCCESS) {
-        status = phNxpNciHal_CheckRFCmdRespStatus();
-        /*STATUS INVALID PARAM 0x09*/
-        if (status == 0x09) {
-          phNxpNciHalRFConfigCmdRecSequence();
-          retry_core_init_cnt++;
-          goto retry_core_init;
-        }
-      } else
-#endif
-          if (status != NFCSTATUS_SUCCESS) {
-        NXPLOG_NCIHAL_E("RF Settings BLK 2 failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
-      }
-    }
-    retlen = 0;
-
-    NXPLOG_NCIHAL_D("Performing RF Settings BLK 3");
-    isfound = GetNxpByteArrayValue(NAME_NXP_RF_CONF_BLK_3, (char*)buffer,
-                                   bufflen, &retlen);
-    if (retlen > 0) {
-      status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-      if (status == NFCSTATUS_SUCCESS) {
-        status = phNxpNciHal_CheckRFCmdRespStatus();
-        /*STATUS INVALID PARAM 0x09*/
-        if (status == 0x09) {
-          phNxpNciHalRFConfigCmdRecSequence();
-          retry_core_init_cnt++;
-          goto retry_core_init;
-        }
-      } else
-#endif
-          if (status != NFCSTATUS_SUCCESS) {
-        NXPLOG_NCIHAL_E("RF Settings BLK 3 failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
-      }
-    }
-    retlen = 0;
-
-    NXPLOG_NCIHAL_D("Performing RF Settings BLK 4");
-    isfound = GetNxpByteArrayValue(NAME_NXP_RF_CONF_BLK_4, (char*)buffer,
-                                   bufflen, &retlen);
-    if (retlen > 0) {
-      status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-      if (status == NFCSTATUS_SUCCESS) {
-        status = phNxpNciHal_CheckRFCmdRespStatus();
-        /*STATUS INVALID PARAM 0x09*/
-        if (status == 0x09) {
-          phNxpNciHalRFConfigCmdRecSequence();
-          retry_core_init_cnt++;
-          goto retry_core_init;
-        }
-      } else
-#endif
-          if (status != NFCSTATUS_SUCCESS) {
-        NXPLOG_NCIHAL_E("RF Settings BLK 4 failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
-      }
-    }
-    retlen = 0;
-
-    NXPLOG_NCIHAL_D("Performing RF Settings BLK 5");
-    isfound = GetNxpByteArrayValue(NAME_NXP_RF_CONF_BLK_5, (char*)buffer,
-                                   bufflen, &retlen);
-    if (retlen > 0) {
-      status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-      if (status == NFCSTATUS_SUCCESS) {
-        status = phNxpNciHal_CheckRFCmdRespStatus();
-        /*STATUS INVALID PARAM 0x09*/
-        if (status == 0x09) {
-          phNxpNciHalRFConfigCmdRecSequence();
-          retry_core_init_cnt++;
-          goto retry_core_init;
-        }
-      } else
-#endif
-          if (status != NFCSTATUS_SUCCESS) {
-        NXPLOG_NCIHAL_E("RF Settings BLK 5 failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
-      }
-    }
-    retlen = 0;
-
-    NXPLOG_NCIHAL_D("Performing RF Settings BLK 6");
-    isfound = GetNxpByteArrayValue(NAME_NXP_RF_CONF_BLK_6, (char*)buffer,
-                                   bufflen, &retlen);
-    if (retlen > 0) {
-      status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-      if (status == NFCSTATUS_SUCCESS) {
-        status = phNxpNciHal_CheckRFCmdRespStatus();
-        /*STATUS INVALID PARAM 0x09*/
-        if (status == 0x09) {
-          phNxpNciHalRFConfigCmdRecSequence();
-          retry_core_init_cnt++;
-          goto retry_core_init;
-        }
-      } else
-#endif
-          if (status != NFCSTATUS_SUCCESS) {
-        NXPLOG_NCIHAL_E("RF Settings BLK 6 failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
-      }
-    }
-    retlen = 0;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-    config_access = true;
-#endif
-    NXPLOG_NCIHAL_D("Performing NAME_NXP_CORE_CONF_EXTN Settings");
-    isfound = GetNxpByteArrayValue(NAME_NXP_CORE_CONF_EXTN, (char*)buffer,
-                                   bufflen, &retlen);
-    if (retlen > 0) {
-      /* NXP ACT Proprietary Ext */
-      status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-      if (status != NFCSTATUS_SUCCESS) {
-        NXPLOG_NCIHAL_E("NXP Core configuration failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
-      }
-    }
-
-    retlen = 0;
-
-    isfound = GetNxpByteArrayValue(NAME_NXP_CORE_MFCKEY_SETTING, (char*)buffer,
-                                   bufflen, &retlen);
-    if (retlen > 0) {
-      /* NXP ACT Proprietary Ext */
-      status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-      if (status != NFCSTATUS_SUCCESS) {
-        NXPLOG_NCIHAL_E("Setting mifare keys failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
-      }
-    }
-
-    retlen = 0;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-    config_access = false;
-#endif
-    isfound = GetNxpByteArrayValue(NAME_NXP_CORE_RF_FIELD, (char*)buffer,
-                                   bufflen, &retlen);
-    if (retlen > 0) {
-      /* NXP ACT Proprietary Ext */
-      status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-      if (status == NFCSTATUS_SUCCESS) {
-        status = phNxpNciHal_CheckRFCmdRespStatus();
-        /*STATUS INVALID PARAM 0x09*/
-        if (status == 0x09) {
-          phNxpNciHalRFConfigCmdRecSequence();
-          retry_core_init_cnt++;
-          goto retry_core_init;
-        }
-      } else
-#endif
-          if (status != NFCSTATUS_SUCCESS) {
-        NXPLOG_NCIHAL_E("Setting NXP_CORE_RF_FIELD status failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
-      }
-    }
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-    config_access = true;
-#endif
-
-    retlen = 0;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-    /* NXP SWP switch timeout Setting*/
-    if (GetNxpNumValue(NAME_NXP_SWP_SWITCH_TIMEOUT, (void*)&retlen,
-                       sizeof(retlen))) {
-      // Check the permissible range [0 - 60]
-      if (0 <= retlen && retlen <= 60) {
-        if (0 < retlen) {
-          unsigned int timeout = retlen * 1000;
-          unsigned int timeoutHx = 0x0000;
-
-          char tmpbuffer[10] = {0};
-          snprintf((char*)tmpbuffer, 10, "%04x", timeout);
-          sscanf((char*)tmpbuffer, "%x", &timeoutHx);
-
-          swp_switch_timeout_cmd[7] = (timeoutHx & 0xFF);
-          swp_switch_timeout_cmd[8] = ((timeoutHx & 0xFF00) >> 8);
-        }
-
-        status = phNxpNciHal_send_ext_cmd(sizeof(swp_switch_timeout_cmd),
-                                          swp_switch_timeout_cmd);
-        if (status != NFCSTATUS_SUCCESS) {
-          NXPLOG_NCIHAL_E("SWP switch timeout Setting Failed");
-          retry_core_init_cnt++;
-          goto retry_core_init;
-        }
-      } else {
-        NXPLOG_NCIHAL_E("SWP switch timeout Setting Failed - out of range!");
-      }
-    }
-
-    status = phNxpNciHal_china_tianjin_rf_setting();
-    if (status != NFCSTATUS_SUCCESS) {
-      NXPLOG_NCIHAL_E("phNxpNciHal_china_tianjin_rf_setting failed");
-      return NFCSTATUS_FAILED;
-    }
-#endif
-    // Update eeprom value
-    status = phNxpNciHal_set_mw_eeprom();
-    if (status != NFCSTATUS_SUCCESS) {
-      NXPLOG_NCIHAL_E("NXP Update MW EEPROM Proprietary Ext failed");
-    }
-  }
-
-  retlen = 0;
-
-  isfound = GetNxpByteArrayValue(NAME_NXP_CORE_STANDBY, (char*)buffer, bufflen,
-                                 &retlen);
-  if (retlen > 0) {
-    /* NXP ACT Proprietary Ext */
-    status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-    if (status != NFCSTATUS_SUCCESS) {
-      NXPLOG_NCIHAL_E("Stand by mode enable failed");
-      retry_core_init_cnt++;
-      goto retry_core_init;
-    }
-  }
-  retlen = 0;
-
-  isfound =
-      GetNxpByteArrayValue(NAME_NXP_CORE_CONF, (char*)buffer, bufflen, &retlen);
-  if (retlen > 0) {
-    /* NXP ACT Proprietary Ext */
-    status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-    if (status != NFCSTATUS_SUCCESS) {
-      NXPLOG_NCIHAL_E("Core Set Config failed");
-      retry_core_init_cnt++;
-      goto retry_core_init;
-    }
-  }
-
-  config_access = false;
-  // if recovery mode and length of last command is 0 then only reset the P2P
-  // listen mode routing.
-  if ((*p_core_init_rsp_params > 0) && (*p_core_init_rsp_params < 4) &&
-      p_core_init_rsp_params[35] == 0) {
-    /* P2P listen mode routing */
-    status = phNxpNciHal_send_ext_cmd(sizeof(p2p_listen_mode_routing_cmd),
-                                      p2p_listen_mode_routing_cmd);
-    if (status != NFCSTATUS_SUCCESS) {
-      NXPLOG_NCIHAL_E("P2P listen mode routing failed");
-      retry_core_init_cnt++;
-      goto retry_core_init;
-    }
-  }
-
-  retlen = 0;
-
-  /* SWP FULL PWR MODE SETTING ON */
-  if (GetNxpNumValue(NAME_NXP_SWP_FULL_PWR_ON, (void*)&retlen,
-                     sizeof(retlen))) {
-    if (1 == retlen) {
-      status = phNxpNciHal_send_ext_cmd(sizeof(swp_full_pwr_mode_on_cmd),
-                                        swp_full_pwr_mode_on_cmd);
-      if (status != NFCSTATUS_SUCCESS) {
-        NXPLOG_NCIHAL_E("SWP FULL PWR MODE SETTING ON CMD FAILED");
-        retry_core_init_cnt++;
-        goto retry_core_init;
-      }
-    } else {
-      swp_full_pwr_mode_on_cmd[7] = 0x00;
-      status = phNxpNciHal_send_ext_cmd(sizeof(swp_full_pwr_mode_on_cmd),
-                                        swp_full_pwr_mode_on_cmd);
-      if (status != NFCSTATUS_SUCCESS) {
-        NXPLOG_NCIHAL_E("SWP FULL PWR MODE SETTING OFF CMD FAILED");
-        retry_core_init_cnt++;
-        goto retry_core_init;
-      }
-    }
-  }
-
-  /* Android L AID Matching Platform Setting*/
-  if (GetNxpNumValue(NAME_AID_MATCHING_PLATFORM, (void*)&retlen,
-                     sizeof(retlen))) {
-    if (1 == retlen) {
-      status =
-          phNxpNciHal_send_ext_cmd(sizeof(android_l_aid_matching_mode_on_cmd),
-                                   android_l_aid_matching_mode_on_cmd);
-      if (status != NFCSTATUS_SUCCESS) {
-        NXPLOG_NCIHAL_E("Android L AID Matching Platform Setting Failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
-      }
-    } else if (2 == retlen) {
-      android_l_aid_matching_mode_on_cmd[7] = 0x00;
-      status =
-          phNxpNciHal_send_ext_cmd(sizeof(android_l_aid_matching_mode_on_cmd),
-                                   android_l_aid_matching_mode_on_cmd);
-      if (status != NFCSTATUS_SUCCESS) {
-        NXPLOG_NCIHAL_E("Android L AID Matching Platform Setting Failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
-      }
-    }
-  }
-
-  if ((*p_core_init_rsp_params > 0) && (*p_core_init_rsp_params < 4)) {
-    static phLibNfc_Message_t msg;
-    uint16_t tmp_len = 0;
-    uint8_t uicc_set_mode[] = {0x22, 0x01, 0x02, 0x02, 0x01};
-    uint8_t set_screen_state[] = {0x2F, 0x15, 01, 00};  // SCREEN ON
-    uint8_t nfcc_core_conn_create[] = {0x20, 0x04, 0x06, 0x03, 0x01,
-                                       0x01, 0x02, 0x01, 0x01};
-    uint8_t nfcc_mode_set_on[] = {0x22, 0x01, 0x02, 0x01, 0x01};
-
-    NXPLOG_NCIHAL_E(
-        "Sending DH and NFCC core connection command as raw packet!!");
-    status = phNxpNciHal_send_ext_cmd(sizeof(nfcc_core_conn_create),
-                                      nfcc_core_conn_create);
-
-    if (status != NFCSTATUS_SUCCESS) {
-      NXPLOG_NCIHAL_E(
-          "Sending DH and NFCC core connection command as raw packet!! Failed");
-      retry_core_init_cnt++;
-      goto retry_core_init;
-    }
-
-    NXPLOG_NCIHAL_E("Sending DH and NFCC mode set as raw packet!!");
-    status =
-        phNxpNciHal_send_ext_cmd(sizeof(nfcc_mode_set_on), nfcc_mode_set_on);
-
-    if (status != NFCSTATUS_SUCCESS) {
-      NXPLOG_NCIHAL_E("Sending DH and NFCC mode set as raw packet!! Failed");
-      retry_core_init_cnt++;
-      goto retry_core_init;
-    }
-
-    NXPLOG_NCIHAL_E("Sending UICC Select Command as raw packet!!");
-    status = phNxpNciHal_send_ext_cmd(sizeof(uicc_set_mode), uicc_set_mode);
-    if (status != NFCSTATUS_SUCCESS) {
-      NXPLOG_NCIHAL_E("Sending UICC Select Command as raw packet!! Failed");
-      retry_core_init_cnt++;
-      goto retry_core_init;
-    }
-
-    if (*(p_core_init_rsp_params + 1) == 1)  // RF state is Discovery!!
-    {
-      NXPLOG_NCIHAL_E("Sending Set Screen ON State Command as raw packet!!");
-      status =
-          phNxpNciHal_send_ext_cmd(sizeof(set_screen_state), set_screen_state);
-      if (status != NFCSTATUS_SUCCESS) {
-        NXPLOG_NCIHAL_E(
-            "Sending Set Screen ON State Command as raw packet!! Failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
-      }
-
-      NXPLOG_NCIHAL_E("Sending discovery as raw packet!!");
-      status = phNxpNciHal_send_ext_cmd(p_core_init_rsp_params[2],
-                                        (uint8_t*)&p_core_init_rsp_params[3]);
-      if (status != NFCSTATUS_SUCCESS) {
-        NXPLOG_NCIHAL_E("Sending discovery as raw packet Failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
-      }
-
-    } else {
-      NXPLOG_NCIHAL_E("Sending Set Screen OFF State Command as raw packet!!");
-      set_screen_state[3] = 0x01;  // Screen OFF
-      status =
-          phNxpNciHal_send_ext_cmd(sizeof(set_screen_state), set_screen_state);
-      if (status != NFCSTATUS_SUCCESS) {
-        NXPLOG_NCIHAL_E(
-            "Sending Set Screen OFF State Command as raw packet!! Failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
-      }
-    }
-    NXPLOG_NCIHAL_E("Sending last command for Recovery ");
-
-    if (p_core_init_rsp_params[35] > 0) {  // if length of last command is 0
-                                           // then it doesn't need to send last
-                                           // command.
-      if (!(((p_core_init_rsp_params[36] == 0x21) &&
-             (p_core_init_rsp_params[37] == 0x03)) &&
-            (*(p_core_init_rsp_params + 1) == 1)) &&
-          !((p_core_init_rsp_params[36] == 0x21) &&
-            (p_core_init_rsp_params[37] == 0x06) &&
-            (p_core_init_rsp_params[39] == 0x00) &&
-            (*(p_core_init_rsp_params + 1) == 0x00)))
-      // if last command is discovery and RF status is also discovery state,
-      // then it doesn't need to execute or similarly
-      // if the last command is deactivate to idle and RF status is also idle ,
-      // no need to execute the command .
-      {
-        tmp_len = p_core_init_rsp_params[35];
-
-        /* Check for NXP ext before sending write */
-        status = phNxpNciHal_write_ext(
-            &tmp_len, (uint8_t*)&p_core_init_rsp_params[36],
-            &nxpncihal_ctrl.rsp_len, nxpncihal_ctrl.p_rsp_data);
-        if (status != NFCSTATUS_SUCCESS) {
-          if (buffer) {
-            free(buffer);
-            buffer = NULL;
-          }
-          /* Do not send packet to PN54X, send response directly */
-          msg.eMsgType = NCI_HAL_RX_MSG;
-          msg.pMsgData = NULL;
-          msg.Size = 0;
-
-          phTmlNfc_DeferredCall(gpphTmlNfc_Context->dwCallbackThreadId,
-                                (phLibNfc_Message_t*)&msg);
-          return NFCSTATUS_SUCCESS;
-        }
-
-        p_core_init_rsp_params[35] = (uint8_t)tmp_len;
-
-        status = phNxpNciHal_send_ext_cmd(
-            p_core_init_rsp_params[35], (uint8_t*)&p_core_init_rsp_params[36]);
-        if (status != NFCSTATUS_SUCCESS) {
-          NXPLOG_NCIHAL_E("Sending last command for Recovery Failed");
-          retry_core_init_cnt++;
-          goto retry_core_init;
-        }
-      }
-    }
-  }
-
-  retry_core_init_cnt = 0;
-
-  if (buffer) {
-    free(buffer);
-    buffer = NULL;
-  }
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-  // initialize dummy FW recovery variables
-  gRecFWDwnld = 0;
-  gRecFwRetryCount = 0;
-#endif
-  if (!((*p_core_init_rsp_params > 0) && (*p_core_init_rsp_params < 4)))
-    phNxpNciHal_core_initialized_complete(status);
-  else {
-  invoke_callback:
-    config_access = false;
-    if (nxpncihal_ctrl.p_nfc_stack_data_cback != NULL) {
-      *p_core_init_rsp_params = 0;
-      NXPLOG_NCIHAL_E("Invoking data callback!!");
-      (*nxpncihal_ctrl.p_nfc_stack_data_cback)(nxpncihal_ctrl.rx_data_len,
-                                               nxpncihal_ctrl.p_rx_data);
-    }
-  }
-
-  if (config_success == false) return NFCSTATUS_FAILED;
-#ifdef PN547C2_CLOCK_SETTING
-  if (isNxpConfigModified()) {
-    updateNxpConfigTimestamp();
-  }
-#endif
-  return NFCSTATUS_SUCCESS;
-}
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-/******************************************************************************
- * Function         phNxpNciHal_CheckRFCmdRespStatus
- *
- * Description      This function is called to check the resp status of
- *                  RF update commands.
- *
- * Returns          NFCSTATUS_SUCCESS           if successful,
- *                  NFCSTATUS_INVALID_PARAMETER if parameter is inavlid
- *                  NFCSTATUS_FAILED            if failed response
- *
- ******************************************************************************/
-NFCSTATUS phNxpNciHal_CheckRFCmdRespStatus() {
-  NFCSTATUS status = NFCSTATUS_SUCCESS;
-  static uint16_t INVALID_PARAM = 0x09;
-  if ((nxpncihal_ctrl.rx_data_len > 0) && (nxpncihal_ctrl.p_rx_data[2] > 0)) {
-    if (nxpncihal_ctrl.p_rx_data[3] == 0x09) {
-      status = INVALID_PARAM;
-    } else if (nxpncihal_ctrl.p_rx_data[3] != NFCSTATUS_SUCCESS) {
-      status = NFCSTATUS_FAILED;
-    }
-  }
-  return status;
-}
-/******************************************************************************
- * Function         phNxpNciHalRFConfigCmdRecSequence
- *
- * Description      This function is called to handle dummy FW recovery sequence
- *                  Whenever RF settings are failed to apply with invalid param
- *                  response, recovery mechanism includes dummy firmware
- *download
- *                  followed by firmware download and then config settings. The
- *dummy
- *                  firmware changes the major number of the firmware inside
- *NFCC.
- *                  Then actual firmware dowenload will be successful. This can
- *be
- *                  retried maximum three times.
- *
- * Returns          Always returns NFCSTATUS_SUCCESS
- *
- ******************************************************************************/
-NFCSTATUS phNxpNciHalRFConfigCmdRecSequence() {
-  NFCSTATUS status = NFCSTATUS_SUCCESS;
-  uint16_t recFWState = 1;
-  gRecFWDwnld = true;
-  gRecFwRetryCount++;
-  if (gRecFwRetryCount > 0x03) {
-    NXPLOG_NCIHAL_D("Max retry count for RF config FW recovery exceeded ");
-    gRecFWDwnld = false;
-    return NFCSTATUS_FAILED;
-  }
-  do {
-    status = phTmlNfc_IoCtl(phTmlNfc_e_ResetDevice);
-    phDnldNfc_InitImgInfo();
-    if (NFCSTATUS_SUCCESS == phNxpNciHal_CheckValidFwVersion()) {
-      fw_download_success = 0;
-      status = phNxpNciHal_fw_download();
-      if (status == NFCSTATUS_SUCCESS) {
-        fw_download_success = 1;
-      }
-      status = phTmlNfc_Read(
-          nxpncihal_ctrl.p_cmd_data, NCI_MAX_DATA_LEN,
-          (pphTmlNfc_TransactCompletionCb_t)&phNxpNciHal_read_complete, NULL);
-      if (status != NFCSTATUS_PENDING) {
-        NXPLOG_NCIHAL_E("TML Read status error status = %x", status);
-        phOsalNfc_Timer_Cleanup();
-        phTmlNfc_Shutdown();
-        status = NFCSTATUS_FAILED;
-      }
-      break;
-    }
-    gRecFWDwnld = false;
-  } while (recFWState--);
-  gRecFWDwnld = false;
-  return status;
-}
-#endif
-/******************************************************************************
- * Function         phNxpNciHal_core_initialized_complete
- *
- * Description      This function is called when phNxpNciHal_core_initialized
- *                  complete all proprietary command exchanges. This function
- *                  informs libnfc-nci about completion of core initialize
- *                  and result of that through callback.
- *
- * Returns          void.
- *
- ******************************************************************************/
-static void phNxpNciHal_core_initialized_complete(NFCSTATUS status) {
-  static phLibNfc_Message_t msg;
-
-  if (status == NFCSTATUS_SUCCESS) {
-    msg.eMsgType = NCI_HAL_POST_INIT_CPLT_MSG;
-  } else {
-    msg.eMsgType = NCI_HAL_ERROR_MSG;
-  }
-  msg.pMsgData = NULL;
-  msg.Size = 0;
-
-  phTmlNfc_DeferredCall(gpphTmlNfc_Context->dwCallbackThreadId,
-                        (phLibNfc_Message_t*)&msg);
-
-  return;
-}
-
-/******************************************************************************
- * Function         phNxpNciHal_pre_discover
- *
- * Description      This function is called by libnfc-nci to perform any
- *                  proprietary exchange before RF discovery. When proprietary
- *                  exchange is over completion is informed to libnfc-nci
- *                  through phNxpNciHal_pre_discover_complete function.
- *
- * Returns          It always returns NFCSTATUS_SUCCESS (0).
- *
- ******************************************************************************/
-int phNxpNciHal_pre_discover(void) {
-  /* Nothing to do here for initial version */
-  return NFCSTATUS_SUCCESS;
-}
-
-/******************************************************************************
- * Function         phNxpNciHal_pre_discover_complete
- *
- * Description      This function informs libnfc-nci about completion and
- *                  status of phNxpNciHal_pre_discover through callback.
- *
- * Returns          void.
- *
- ******************************************************************************/
-static void phNxpNciHal_pre_discover_complete(NFCSTATUS status) {
-  static phLibNfc_Message_t msg;
-
-  if (status == NFCSTATUS_SUCCESS) {
-    msg.eMsgType = NCI_HAL_PRE_DISCOVER_CPLT_MSG;
-  } else {
-    msg.eMsgType = NCI_HAL_ERROR_MSG;
-  }
-  msg.pMsgData = NULL;
-  msg.Size = 0;
-
-  phTmlNfc_DeferredCall(gpphTmlNfc_Context->dwCallbackThreadId, &msg);
-
-  return;
-}
-
-/******************************************************************************
- * Function         phNxpNciHal_close
- *
- * Description      This function close the NFCC interface and free all
- *                  resources.This is called by libnfc-nci on NFC service stop.
- *
- * Returns          Always return NFCSTATUS_SUCCESS (0).
- *
- ******************************************************************************/
-int phNxpNciHal_close(void) {
-  NFCSTATUS status;
-  /*NCI_RESET_CMD*/
-  static uint8_t cmd_reset_nci[] = {0x20, 0x00, 0x01, 0x00};
-
-  static uint8_t cmd_ce_disc_nci[] = {0x21, 0x03, 0x07, 0x03, 0x80,
-                                      0x01, 0x81, 0x01, 0x82, 0x01};
-
-  if (nxpncihal_ctrl.halStatus == HAL_STATUS_CLOSE) {
-    NXPLOG_NCIHAL_E("phNxpNciHal_close is already closed, ignoring close");
-    return NFCSTATUS_FAILED;
-  }
-  CONCURRENCY_LOCK();
-  status = phNxpNciHal_send_ext_cmd(sizeof(cmd_ce_disc_nci), cmd_ce_disc_nci);
-  if (status != NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_E("CMD_CE_DISC_NCI: Failed");
-  }
-
-  nxpncihal_ctrl.halStatus = HAL_STATUS_CLOSE;
-
-  status = phNxpNciHal_send_ext_cmd(sizeof(cmd_reset_nci), cmd_reset_nci);
-  if (status != NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_E("NCI_CORE_RESET: Failed");
-  }
-
-  if (NULL != gpphTmlNfc_Context->pDevHandle) {
-    phNxpNciHal_close_complete(NFCSTATUS_SUCCESS);
-    /* Abort any pending read and write */
-    status = phTmlNfc_ReadAbort();
-    status = phTmlNfc_WriteAbort();
-
-    phOsalNfc_Timer_Cleanup();
-
-    status = phTmlNfc_Shutdown();
-
-    phDal4Nfc_msgrelease(nxpncihal_ctrl.gDrvCfg.nClientId);
-
-    memset(&nxpncihal_ctrl, 0x00, sizeof(nxpncihal_ctrl));
-
-    NXPLOG_NCIHAL_D("phNxpNciHal_close - phOsalNfc_DeInit completed");
-  }
-
-  CONCURRENCY_UNLOCK();
-
-  phNxpNciHal_cleanup_monitor();
-
-  /* Return success always */
-  return NFCSTATUS_SUCCESS;
-}
-
-/******************************************************************************
- * Function         phNxpNciHal_close_complete
- *
- * Description      This function inform libnfc-nci about result of
- *                  phNxpNciHal_close.
- *
- * Returns          void.
- *
- ******************************************************************************/
-void phNxpNciHal_close_complete(NFCSTATUS status) {
-  static phLibNfc_Message_t msg;
-
-  if (status == NFCSTATUS_SUCCESS) {
-    msg.eMsgType = NCI_HAL_CLOSE_CPLT_MSG;
-  } else {
-    msg.eMsgType = NCI_HAL_ERROR_MSG;
-  }
-  msg.pMsgData = NULL;
-  msg.Size = 0;
-
-  phTmlNfc_DeferredCall(gpphTmlNfc_Context->dwCallbackThreadId, &msg);
-
-  return;
-}
-/******************************************************************************
- * Function         phNxpNciHal_notify_i2c_fragmentation
- *
- * Description      This function can be used by HAL to inform
- *                 libnfc-nci that i2c fragmentation is enabled/disabled
- *
- * Returns          void.
- *
- ******************************************************************************/
-void phNxpNciHal_notify_i2c_fragmentation(void) {
-  if (nxpncihal_ctrl.p_nfc_stack_cback != NULL) {
-    /*inform libnfc-nci that i2c fragmentation is enabled/disabled */
-    (*nxpncihal_ctrl.p_nfc_stack_cback)(HAL_NFC_ENABLE_I2C_FRAGMENTATION_EVT,
-                                        HAL_NFC_STATUS_OK);
-  }
-}
-/******************************************************************************
- * Function         phNxpNciHal_control_granted
- *
- * Description      Called by libnfc-nci when NFCC control is granted to HAL.
- *
- * Returns          Always returns NFCSTATUS_SUCCESS (0).
- *
- ******************************************************************************/
-int phNxpNciHal_control_granted(void) {
-  /* Take the concurrency lock so no other calls from upper layer
-   * will be allowed
-   */
-  CONCURRENCY_LOCK();
-
-  if (NULL != nxpncihal_ctrl.p_control_granted_cback) {
-    (*nxpncihal_ctrl.p_control_granted_cback)();
-  }
-  /* At the end concurrency unlock so calls from upper layer will
-   * be allowed
-   */
-  CONCURRENCY_UNLOCK();
-  return NFCSTATUS_SUCCESS;
-}
-
-/******************************************************************************
- * Function         phNxpNciHal_request_control
- *
- * Description      This function can be used by HAL to request control of
- *                  NFCC to libnfc-nci. When control is provided to HAL it is
- *                  notified through phNxpNciHal_control_granted.
- *
- * Returns          void.
- *
- ******************************************************************************/
-void phNxpNciHal_request_control(void) {
-  if (nxpncihal_ctrl.p_nfc_stack_cback != NULL) {
-    /* Request Control of NCI Controller from NCI NFC Stack */
-    (*nxpncihal_ctrl.p_nfc_stack_cback)(HAL_NFC_REQUEST_CONTROL_EVT,
-                                        HAL_NFC_STATUS_OK);
-  }
-
-  return;
-}
-
-/******************************************************************************
- * Function         phNxpNciHal_release_control
- *
- * Description      This function can be used by HAL to release the control of
- *                  NFCC back to libnfc-nci.
- *
- * Returns          void.
- *
- ******************************************************************************/
-void phNxpNciHal_release_control(void) {
-  if (nxpncihal_ctrl.p_nfc_stack_cback != NULL) {
-    /* Release Control of NCI Controller to NCI NFC Stack */
-    (*nxpncihal_ctrl.p_nfc_stack_cback)(HAL_NFC_RELEASE_CONTROL_EVT,
-                                        HAL_NFC_STATUS_OK);
-  }
-
-  return;
-}
-
-/******************************************************************************
- * Function         phNxpNciHal_power_cycle
- *
- * Description      This function is called by libnfc-nci when power cycling is
- *                  performed. When processing is complete it is notified to
- *                  libnfc-nci through phNxpNciHal_power_cycle_complete.
- *
- * Returns          Always return NFCSTATUS_SUCCESS (0).
- *
- ******************************************************************************/
-int phNxpNciHal_power_cycle(void) {
-  NXPLOG_NCIHAL_D("Power Cycle");
-  NFCSTATUS status = NFCSTATUS_FAILED;
-  if (nxpncihal_ctrl.halStatus != HAL_STATUS_OPEN) {
-    NXPLOG_NCIHAL_D("Power Cycle failed due to hal status not open");
-    return NFCSTATUS_FAILED;
-  }
-  status = phTmlNfc_IoCtl(phTmlNfc_e_ResetDevice);
-
-  if (NFCSTATUS_SUCCESS == status) {
-    NXPLOG_NCIHAL_D("PN54X Reset - SUCCESS\n");
-  } else {
-    NXPLOG_NCIHAL_D("PN54X Reset - FAILED\n");
-  }
-
-  phNxpNciHal_power_cycle_complete(NFCSTATUS_SUCCESS);
-  return NFCSTATUS_SUCCESS;
-}
-
-/******************************************************************************
- * Function         phNxpNciHal_power_cycle_complete
- *
- * Description      This function is called to provide the status of
- *                  phNxpNciHal_power_cycle to libnfc-nci through callback.
- *
- * Returns          void.
- *
- ******************************************************************************/
-static void phNxpNciHal_power_cycle_complete(NFCSTATUS status) {
-  static phLibNfc_Message_t msg;
-
-  if (status == NFCSTATUS_SUCCESS) {
-    msg.eMsgType = NCI_HAL_OPEN_CPLT_MSG;
-  } else {
-    msg.eMsgType = NCI_HAL_ERROR_MSG;
-  }
-  msg.pMsgData = NULL;
-  msg.Size = 0;
-
-  phTmlNfc_DeferredCall(gpphTmlNfc_Context->dwCallbackThreadId, &msg);
-
-  return;
-}
-
-/******************************************************************************
- * Function         phNxpNciHal_get_mw_eeprom
- *
- * Description      This function is called to retreive data in mw eeprom area
- *
- * Returns          NFCSTATUS.
- *
- ******************************************************************************/
-static NFCSTATUS phNxpNciHal_get_mw_eeprom(void) {
-  NFCSTATUS status = NFCSTATUS_SUCCESS;
-  uint8_t retry_cnt = 0;
-  static uint8_t get_mw_eeprom_cmd[] = {0x20, 0x03, 0x03, 0x01, 0xA0, 0x0F};
-  uint8_t bConfig;
-
-retry_send_ext:
-  if (retry_cnt > 3) {
-    return NFCSTATUS_FAILED;
-  }
-
-  phNxpNciMwEepromArea.isGetEepromArea = true;
-  status =
-      phNxpNciHal_send_ext_cmd(sizeof(get_mw_eeprom_cmd), get_mw_eeprom_cmd);
-  if (status != NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_E("unable to get the mw eeprom data");
-    phNxpNciMwEepromArea.isGetEepromArea = false;
-    retry_cnt++;
-    goto retry_send_ext;
-  }
-  phNxpNciMwEepromArea.isGetEepromArea = false;
-
-  if (phNxpNciMwEepromArea.p_rx_data[12]) {
-    fw_download_success = 1;
-  }
-  return status;
-}
-
-/******************************************************************************
- * Function         phNxpNciHal_set_mw_eeprom
- *
- * Description      This function is called to update data in mw eeprom area
- *
- * Returns          void.
- *
- ******************************************************************************/
-static NFCSTATUS phNxpNciHal_set_mw_eeprom(void) {
-  NFCSTATUS status = NFCSTATUS_SUCCESS;
-  uint8_t retry_cnt = 0;
-  uint8_t set_mw_eeprom_cmd[39] = {0};
-  uint8_t cmd_header[] = {0x20, 0x02, 0x24, 0x01, 0xA0, 0x0F, 0x20};
-
-  memcpy(set_mw_eeprom_cmd, cmd_header, sizeof(cmd_header));
-  phNxpNciMwEepromArea.p_rx_data[12] = 0;
-  memcpy(set_mw_eeprom_cmd + sizeof(cmd_header), phNxpNciMwEepromArea.p_rx_data,
-         sizeof(phNxpNciMwEepromArea.p_rx_data));
-
-retry_send_ext:
-  if (retry_cnt > 3) {
-    return NFCSTATUS_FAILED;
-  }
-
-  status =
-      phNxpNciHal_send_ext_cmd(sizeof(set_mw_eeprom_cmd), set_mw_eeprom_cmd);
-  if (status != NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_E("unable to update the mw eeprom data");
-    retry_cnt++;
-    goto retry_send_ext;
-  }
-  return status;
-}
-
-/******************************************************************************
- * Function         phNxpNciHal_set_clock
- *
- * Description      This function is called after successfull download
- *                  to apply the clock setting provided in config file
- *
- * Returns          void.
- *
- ******************************************************************************/
-static void phNxpNciHal_set_clock(void) {
-  NFCSTATUS status = NFCSTATUS_FAILED;
-  int retryCount = 0;
-
-retrySetclock:
-  phNxpNciClock.isClockSet = true;
-  if (nxpprofile_ctrl.bClkSrcVal == CLK_SRC_PLL) {
-    static uint8_t set_clock_cmd[] = {0x20, 0x02, 0x09, 0x02, 0xA0, 0x03,
-                                      0x01, 0x11, 0xA0, 0x04, 0x01, 0x01};
-#if (NFC_NXP_CHIP_TYPE == PN553)
-    uint8_t param_clock_src = 0x00;
-#else
-    uint8_t param_clock_src = CLK_SRC_PLL;
-    param_clock_src = param_clock_src << 3;
-#endif
-
-    if (nxpprofile_ctrl.bClkFreqVal == CLK_FREQ_13MHZ) {
-      param_clock_src |= 0x00;
-    } else if (nxpprofile_ctrl.bClkFreqVal == CLK_FREQ_19_2MHZ) {
-      param_clock_src |= 0x01;
-    } else if (nxpprofile_ctrl.bClkFreqVal == CLK_FREQ_24MHZ) {
-      param_clock_src |= 0x02;
-    } else if (nxpprofile_ctrl.bClkFreqVal == CLK_FREQ_26MHZ) {
-      param_clock_src |= 0x03;
-    } else if (nxpprofile_ctrl.bClkFreqVal == CLK_FREQ_38_4MHZ) {
-      param_clock_src |= 0x04;
-    } else if (nxpprofile_ctrl.bClkFreqVal == CLK_FREQ_52MHZ) {
-      param_clock_src |= 0x05;
-    } else {
-      NXPLOG_NCIHAL_E("Wrong clock freq, send default PLL@19.2MHz");
-#if (NFC_NXP_CHIP_TYPE == PN553)
-      param_clock_src = 0x01;
-#else
-      param_clock_src = 0x11;
-#endif
-    }
-
-    set_clock_cmd[7] = param_clock_src;
-    set_clock_cmd[11] = nxpprofile_ctrl.bTimeout;
-    status = phNxpNciHal_send_ext_cmd(sizeof(set_clock_cmd), set_clock_cmd);
-    if (status != NFCSTATUS_SUCCESS) {
-      NXPLOG_NCIHAL_E("PLL colck setting failed !!");
-    }
-  } else if (nxpprofile_ctrl.bClkSrcVal == CLK_SRC_XTAL) {
-    static uint8_t set_clock_cmd[] = {0x20, 0x02, 0x05, 0x01,
-                                      0xA0, 0x03, 0x01, 0x08};
-    status = phNxpNciHal_send_ext_cmd(sizeof(set_clock_cmd), set_clock_cmd);
-    if (status != NFCSTATUS_SUCCESS) {
-      NXPLOG_NCIHAL_E("XTAL colck setting failed !!");
-    }
-  } else {
-    NXPLOG_NCIHAL_E("Wrong clock source. Dont apply any modification")
-  }
-
-  // Checking for SET CONFG SUCCESS, re-send the command  if not.
-  phNxpNciClock.isClockSet = false;
-  if (phNxpNciClock.p_rx_data[3] != NFCSTATUS_SUCCESS) {
-    if (retryCount++ < 3) {
-      NXPLOG_NCIHAL_E("Set-clk failed retry again ");
-      goto retrySetclock;
-    } else {
-      NXPLOG_NCIHAL_D("Set clk  failed -  max count = 0x%x exceeded ",
-                      retryCount);
-      //            NXPLOG_NCIHAL_E("Set Config is failed for Clock Due to
-      //            elctrical disturbances, aborting the NFC process");
-      //            abort ();
-    }
-  }
-}
-
-/******************************************************************************
- * Function         phNxpNciHal_check_clock_config
- *
- * Description      This function is called after successfull download
- *                  to check if clock settings in config file and chip
- *                  is same
- *
- * Returns          void.
- *
- ******************************************************************************/
-NFCSTATUS phNxpNciHal_check_clock_config(void) {
-  NFCSTATUS status = NFCSTATUS_SUCCESS;
-  uint8_t param_clock_src;
-  static uint8_t get_clock_cmd[] = {0x20, 0x03, 0x07, 0x03, 0xA0,
-                                    0x02, 0xA0, 0x03, 0xA0, 0x04};
-  phNxpNciClock.isClockSet = true;
-  phNxpNciHal_get_clk_freq();
-  status = phNxpNciHal_send_ext_cmd(sizeof(get_clock_cmd), get_clock_cmd);
-
-  if (status != NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_E("unable to retrieve get_clk_src_sel");
-    return status;
-  }
-  param_clock_src = check_config_parameter();
-  if (phNxpNciClock.p_rx_data[12] == param_clock_src &&
-      phNxpNciClock.p_rx_data[16] == nxpprofile_ctrl.bTimeout) {
-    phNxpNciClock.issetConfig = false;
-  } else {
-    phNxpNciClock.issetConfig = true;
-  }
-  phNxpNciClock.isClockSet = false;
-
-  return status;
-}
-
-/******************************************************************************
- * Function         phNxpNciHal_china_tianjin_rf_setting
- *
- * Description      This function is called to check RF Setting
- *
- * Returns          Status.
- *
- ******************************************************************************/
-NFCSTATUS phNxpNciHal_china_tianjin_rf_setting(void) {
-  NFCSTATUS status = NFCSTATUS_SUCCESS;
-  int isfound = 0;
-  int rf_enable = false;
-  int rf_val = 0;
-  int send_flag;
-  uint8_t retry_cnt = 0;
-  int enable_bit = 0;
-  static uint8_t get_rf_cmd[] = {0x20, 0x03, 0x03, 0x01, 0xA0, 0x85};
-
-retry_send_ext:
-  if (retry_cnt > 3) {
-    return NFCSTATUS_FAILED;
-  }
-  send_flag = true;
-  phNxpNciRfSet.isGetRfSetting = true;
-  status = phNxpNciHal_send_ext_cmd(sizeof(get_rf_cmd), get_rf_cmd);
-  if (status != NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_E("unable to get the RF setting");
-    phNxpNciRfSet.isGetRfSetting = false;
-    retry_cnt++;
-    goto retry_send_ext;
-  }
-  phNxpNciRfSet.isGetRfSetting = false;
-  if (phNxpNciRfSet.p_rx_data[3] != 0x00) {
-    NXPLOG_NCIHAL_E("GET_CONFIG_RSP is FAILED for CHINA TIANJIN");
-    return status;
-  }
-  rf_val = phNxpNciRfSet.p_rx_data[10];
-  isfound = (GetNxpNumValue(NAME_NXP_CHINA_TIANJIN_RF_ENABLED,
-                            (void*)&rf_enable, sizeof(rf_enable)));
-  if (isfound > 0) {
-    enable_bit = rf_val & 0x40;
-    if ((enable_bit != 0x40) && (rf_enable == 1)) {
-      phNxpNciRfSet.p_rx_data[10] |= 0x40;  // Enable if it is disabled
-    } else if ((enable_bit == 0x40) && (rf_enable == 0)) {
-      phNxpNciRfSet.p_rx_data[10] &= 0xBF;  // Disable if it is Enabled
-    } else {
-      send_flag = false;  // No need to change in RF setting
-    }
-
-    if (send_flag == true) {
-      static uint8_t set_rf_cmd[] = {0x20, 0x02, 0x08, 0x01, 0xA0, 0x85,
-                                     0x04, 0x50, 0x08, 0x68, 0x00};
-      memcpy(&set_rf_cmd[4], &phNxpNciRfSet.p_rx_data[5], 7);
-      status = phNxpNciHal_send_ext_cmd(sizeof(set_rf_cmd), set_rf_cmd);
-      if (status != NFCSTATUS_SUCCESS) {
-        NXPLOG_NCIHAL_E("unable to set the RF setting");
-        retry_cnt++;
-        goto retry_send_ext;
-      }
-    }
-  }
-
-  return status;
-}
-
-int check_config_parameter() {
-  NFCSTATUS status = NFCSTATUS_FAILED;
-  uint8_t param_clock_src = CLK_SRC_PLL;
-  if (nxpprofile_ctrl.bClkSrcVal == CLK_SRC_PLL) {
-#if (NFC_NXP_CHIP_TYPE != PN553)
-    param_clock_src = param_clock_src << 3;
-#endif
-    if (nxpprofile_ctrl.bClkFreqVal == CLK_FREQ_13MHZ) {
-      param_clock_src |= 0x00;
-    } else if (nxpprofile_ctrl.bClkFreqVal == CLK_FREQ_19_2MHZ) {
-      param_clock_src |= 0x01;
-    } else if (nxpprofile_ctrl.bClkFreqVal == CLK_FREQ_24MHZ) {
-      param_clock_src |= 0x02;
-    } else if (nxpprofile_ctrl.bClkFreqVal == CLK_FREQ_26MHZ) {
-      param_clock_src |= 0x03;
-    } else if (nxpprofile_ctrl.bClkFreqVal == CLK_FREQ_38_4MHZ) {
-      param_clock_src |= 0x04;
-    } else if (nxpprofile_ctrl.bClkFreqVal == CLK_FREQ_52MHZ) {
-      param_clock_src |= 0x05;
-    } else {
-      NXPLOG_NCIHAL_E("Wrong clock freq, send default PLL@19.2MHz");
-      param_clock_src = 0x11;
-    }
-  } else if (nxpprofile_ctrl.bClkSrcVal == CLK_SRC_XTAL) {
-    param_clock_src = 0x08;
-
-  } else {
-    NXPLOG_NCIHAL_E("Wrong clock source. Dont apply any modification")
-  }
-  return param_clock_src;
-}
-/******************************************************************************
- * Function         phNxpNciHal_enable_i2c_fragmentation
- *
- * Description      This function is called to process the response status
- *                  and print the status byte.
- *
- * Returns          void.
- *
- ******************************************************************************/
-void phNxpNciHal_enable_i2c_fragmentation() {
-  NFCSTATUS status = NFCSTATUS_FAILED;
-  static uint8_t fragmentation_enable_config_cmd[] = {0x20, 0x02, 0x05, 0x01,
-                                                      0xA0, 0x05, 0x01, 0x10};
-  int isfound = 0;
-  long i2c_status = 0x00;
-  long config_i2c_vlaue = 0xff;
-  /*NCI_RESET_CMD*/
-  static uint8_t cmd_reset_nci[] = {0x20, 0x00, 0x01, 0x00};
-  /*NCI_INIT_CMD*/
-  static uint8_t cmd_init_nci[] = {0x20, 0x01, 0x00};
-  static uint8_t cmd_init_nci2_0[] = {0x20, 0x01, 0x02, 0x00, 0x00};
-  static uint8_t get_i2c_fragmentation_cmd[] = {0x20, 0x03, 0x03,
-                                                0x01, 0xA0, 0x05};
-  isfound = (GetNxpNumValue(NAME_NXP_I2C_FRAGMENTATION_ENABLED,
-                            (void*)&i2c_status, sizeof(i2c_status)));
-  status = phNxpNciHal_send_ext_cmd(sizeof(get_i2c_fragmentation_cmd),
-                                    get_i2c_fragmentation_cmd);
-  if (status != NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_E("unable to retrieve  get_i2c_fragmentation_cmd");
-  } else {
-    if (nxpncihal_ctrl.p_rx_data[8] == 0x10) {
-      config_i2c_vlaue = 0x01;
-      phNxpNciHal_notify_i2c_fragmentation();
-      phTmlNfc_set_fragmentation_enabled(I2C_FRAGMENTATION_ENABLED);
-    } else if (nxpncihal_ctrl.p_rx_data[8] == 0x00) {
-      config_i2c_vlaue = 0x00;
-    }
-    if (config_i2c_vlaue == i2c_status) {
-      NXPLOG_NCIHAL_E("i2c_fragmentation_status existing");
-    } else {
-      if (i2c_status == 0x01) {
-        /* NXP I2C fragmenation enabled*/
-        status =
-            phNxpNciHal_send_ext_cmd(sizeof(fragmentation_enable_config_cmd),
-                                     fragmentation_enable_config_cmd);
-        if (status != NFCSTATUS_SUCCESS) {
-          NXPLOG_NCIHAL_E("NXP fragmentation enable failed");
-        }
-      } else if (i2c_status == 0x00 || config_i2c_vlaue == 0xff) {
-        fragmentation_enable_config_cmd[7] = 0x00;
-        /* NXP I2C fragmentation disabled*/
-        status =
-            phNxpNciHal_send_ext_cmd(sizeof(fragmentation_enable_config_cmd),
-                                     fragmentation_enable_config_cmd);
-        if (status != NFCSTATUS_SUCCESS) {
-          NXPLOG_NCIHAL_E("NXP fragmentation disable failed");
-        }
-      }
-      status = phNxpNciHal_send_ext_cmd(sizeof(cmd_reset_nci), cmd_reset_nci);
-      if (status != NFCSTATUS_SUCCESS) {
-        NXPLOG_NCIHAL_E("NCI_CORE_RESET: Failed");
-      }
-      if (nxpncihal_ctrl.nci_info.nci_version == NCI_VERSION_2_0) {
-        status =
-            phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci2_0), cmd_init_nci2_0);
-      } else {
-        status = phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci), cmd_init_nci);
-      }
-      if (status != NFCSTATUS_SUCCESS) {
-        NXPLOG_NCIHAL_E("NCI_CORE_INIT : Failed");
-      } else if (i2c_status == 0x01) {
-        phNxpNciHal_notify_i2c_fragmentation();
-        phTmlNfc_set_fragmentation_enabled(I2C_FRAGMENTATION_ENABLED);
-      }
-    }
-  }
-}
-/******************************************************************************
- * Function         phNxpNciHal_check_factory_reset
- *
- * Description      This function is called at init time to check
- *                  the presence of ese related info. If file are not
- *                  present set the SWP_INT_SESSION_ID_CFG to FF to
- *                  force the NFCEE to re-run its initialization sequence.
- *
- * Returns          void.
- *
- ******************************************************************************/
-static void phNxpNciHal_check_factory_reset(void) {
-  struct stat st;
-  int ret = 0;
-  NFCSTATUS status = NFCSTATUS_FAILED;
-  const char config_eseinfo_path[] = "/data/nfc/nfaStorage.bin1";
-  static uint8_t reset_ese_session_identity_set[] = {
-      0x20, 0x02, 0x17, 0x02, 0xA0, 0xEA, 0x08, 0xFF, 0xFF,
-      0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xA0, 0xEB, 0x08,
-      0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
-#ifdef PN547C2_FACTORY_RESET_DEBUG
-  static uint8_t reset_ese_session_identity[] = {0x20, 0x03, 0x05, 0x02,
-                                                 0xA0, 0xEA, 0xA0, 0xEB};
-#endif
-  if (stat(config_eseinfo_path, &st) == -1) {
-    NXPLOG_NCIHAL_D("%s file not present = %s", __func__, config_eseinfo_path);
-    ret = -1;
-  } else {
-    ret = 0;
-  }
-
-  if (ret == -1) {
-#ifdef PN547C2_FACTORY_RESET_DEBUG
-    /* NXP ACT Proprietary Ext */
-    status = phNxpNciHal_send_ext_cmd(sizeof(reset_ese_session_identity),
-                                      reset_ese_session_identity);
-    if (status != NFCSTATUS_SUCCESS) {
-      NXPLOG_NCIHAL_E("NXP reset_ese_session_identity command failed");
-    }
-#endif
-    status = phNxpNciHal_send_ext_cmd(sizeof(reset_ese_session_identity_set),
-                                      reset_ese_session_identity_set);
-    if (status != NFCSTATUS_SUCCESS) {
-      NXPLOG_NCIHAL_E("NXP reset_ese_session_identity_set command failed");
-    }
-#ifdef PN547C2_FACTORY_RESET_DEBUG
-    /* NXP ACT Proprietary Ext */
-    status = phNxpNciHal_send_ext_cmd(sizeof(reset_ese_session_identity),
-                                      reset_ese_session_identity);
-    if (status != NFCSTATUS_SUCCESS) {
-      NXPLOG_NCIHAL_E("NXP reset_ese_session_identity command failed");
-    }
-#endif
-  }
-}
-
-/******************************************************************************
- * Function         phNxpNciHal_print_res_status
- *
- * Description      This function is called to process the response status
- *                  and print the status byte.
- *
- * Returns          void.
- *
- ******************************************************************************/
-static void phNxpNciHal_print_res_status(uint8_t* p_rx_data, uint16_t* p_len) {
-  static uint8_t response_buf[][30] = {"STATUS_OK",
-                                       "STATUS_REJECTED",
-                                       "STATUS_RF_FRAME_CORRUPTED",
-                                       "STATUS_FAILED",
-                                       "STATUS_NOT_INITIALIZED",
-                                       "STATUS_SYNTAX_ERROR",
-                                       "STATUS_SEMANTIC_ERROR",
-                                       "RFU",
-                                       "RFU",
-                                       "STATUS_INVALID_PARAM",
-                                       "STATUS_MESSAGE_SIZE_EXCEEDED",
-                                       "STATUS_UNDEFINED"};
-  int status_byte;
-  if (p_rx_data[0] == 0x40 && (p_rx_data[1] == 0x02 || p_rx_data[1] == 0x03)) {
-    if (p_rx_data[2] && p_rx_data[3] <= 10) {
-      status_byte = p_rx_data[CORE_RES_STATUS_BYTE];
-      NXPLOG_NCIHAL_D("%s: response status =%s", __func__,
-                      response_buf[status_byte]);
-    } else {
-      NXPLOG_NCIHAL_D("%s: response status =%s", __func__, response_buf[11]);
-    }
-    if (phNxpNciClock.isClockSet) {
-      int i;
-      for (i = 0; i < *p_len; i++) {
-        phNxpNciClock.p_rx_data[i] = p_rx_data[i];
-      }
-    }
-
-    else if (phNxpNciRfSet.isGetRfSetting) {
-      int i;
-      for (i = 0; i < *p_len; i++) {
-        phNxpNciRfSet.p_rx_data[i] = p_rx_data[i];
-        // NXPLOG_NCIHAL_D("%s: response status =0x%x",__func__,p_rx_data[i]);
-      }
-    } else if (phNxpNciMwEepromArea.isGetEepromArea) {
-      int i;
-      for (i = 8; i < *p_len; i++) {
-        phNxpNciMwEepromArea.p_rx_data[i - 8] = p_rx_data[i];
-      }
-    }
-  }
-
-  if (p_rx_data[2] && (config_access == true)) {
-    if (p_rx_data[3] != NFCSTATUS_SUCCESS) {
-      NXPLOG_NCIHAL_W("Invalid Data from config file.");
-      config_success = false;
-    }
-  }
-}
-
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-NFCSTATUS phNxpNciHal_core_reset_recovery() {
-  NFCSTATUS status = NFCSTATUS_FAILED;
-
-  uint8_t buffer[260];
-  long bufflen = 260;
-
-  /*NCI_INIT_CMD*/
-  static uint8_t cmd_init_nci[] = {0x20, 0x01, 0x00};
-  /*NCI_RESET_CMD*/
-  static uint8_t cmd_reset_nci[] = {0x20, 0x00, 0x01,
-                                    0x00};  // keep configuration
-  static uint8_t cmd_init_nci2_0[] = {0x20, 0x01, 0x02, 0x00, 0x00};
-  /* reset config cache */
-  uint8_t retry_core_init_cnt = 0;
-
-  if (discovery_cmd_len == 0) {
-    goto FAILURE;
-  }
-  NXPLOG_NCIHAL_D("%s: recovery", __func__);
-
-retry_core_init:
-  if (retry_core_init_cnt > 3) {
-    goto FAILURE;
-  }
-
-  status = phTmlNfc_IoCtl(phTmlNfc_e_ResetDevice);
-  if (status != NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_D("PN54X Reset - FAILED\n");
-    goto FAILURE;
-  }
-  status = phNxpNciHal_send_ext_cmd(sizeof(cmd_reset_nci), cmd_reset_nci);
-  if ((status != NFCSTATUS_SUCCESS) &&
-      (nxpncihal_ctrl.retry_cnt >= MAX_RETRY_COUNT)) {
-    retry_core_init_cnt++;
-    goto retry_core_init;
-  } else if (status != NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_D("NCI_CORE_RESET: Failed");
-    retry_core_init_cnt++;
-    goto retry_core_init;
-  }
-  if (nxpncihal_ctrl.nci_info.nci_version == NCI_VERSION_2_0) {
-    status = phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci2_0), cmd_init_nci2_0);
-  } else {
-    status = phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci), cmd_init_nci);
-  }
-  if (status != NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_D("NCI_CORE_INIT : Failed");
-    retry_core_init_cnt++;
-    goto retry_core_init;
-  }
-
-  status = phNxpNciHal_send_ext_cmd(discovery_cmd_len, discovery_cmd);
-  if (status != NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_D("RF_DISCOVERY : Failed");
-    retry_core_init_cnt++;
-    goto retry_core_init;
-  }
-
-  return NFCSTATUS_SUCCESS;
-FAILURE:
-  abort();
-}
-
-void phNxpNciHal_discovery_cmd_ext(uint8_t* p_cmd_data, uint16_t cmd_len) {
-  NXPLOG_NCIHAL_D("phNxpNciHal_discovery_cmd_ext");
-  if (cmd_len > 0 && cmd_len <= sizeof(discovery_cmd)) {
-    memcpy(discovery_cmd, p_cmd_data, cmd_len);
-    discovery_cmd_len = cmd_len;
-  }
-}
-#endif
diff --git a/halimpl/pn54x/hal/phNxpNciHal.h b/halimpl/pn54x/hal/phNxpNciHal.h
deleted file mode 100644
index 00ec236..0000000
--- a/halimpl/pn54x/hal/phNxpNciHal.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (C) 2010-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef _PHNXPNCIHAL_H_
-#define _PHNXPNCIHAL_H_
-
-#include <hardware/nfc.h>
-#include <phNxpNciHal_utils.h>
-
-/********************* Definitions and structures *****************************/
-#define MAX_RETRY_COUNT 5
-#define NCI_MAX_DATA_LEN 300
-#define NCI_POLL_DURATION 500
-#define HAL_NFC_ENABLE_I2C_FRAGMENTATION_EVT 0x07
-#undef P2P_PRIO_LOGIC_HAL_IMP
-#define NCI_VERSION_2_0 0x20
-#define NCI_VERSION_1_1 0x11
-#define NCI_VERSION_1_0 0x10
-#define NCI_VERSION_UNKNOWN 0x00
-typedef void(phNxpNciHal_control_granted_callback_t)();
-
-/*ROM CODE VERSION FW*/
-#define FW_MOBILE_ROM_VERSION_PN551 0x10
-#define FW_MOBILE_ROM_VERSION_PN553 0x11
-#define FW_MOBILE_ROM_VERSION_PN548AD 0x10
-#define FW_MOBILE_ROM_VERSION_PN547C2 0x08
-/* NCI Data */
-
-#define NCI_MT_CMD 0x20
-#define NCI_MT_RSP 0x40
-#define NCI_MT_NTF 0x60
-
-#define CORE_RESET_TRIGGER_TYPE_CORE_RESET_CMD_RECEIVED 0x02
-#define CORE_RESET_TRIGGER_TYPE_POWERED_ON 0x01
-#define NCI_MSG_CORE_RESET 0x00
-#define NCI_MSG_CORE_INIT 0x01
-#define NCI_MT_MASK 0xE0
-#define NCI_OID_MASK 0x3F
-typedef struct nci_data {
-  uint16_t len;
-  uint8_t p_data[NCI_MAX_DATA_LEN];
-} nci_data_t;
-
-typedef enum { HAL_STATUS_CLOSE = 0, HAL_STATUS_OPEN } phNxpNci_HalStatus;
-
-/* Macros to enable and disable extensions */
-#define HAL_ENABLE_EXT() (nxpncihal_ctrl.hal_ext_enabled = 1)
-#define HAL_DISABLE_EXT() (nxpncihal_ctrl.hal_ext_enabled = 0)
-typedef struct phNxpNciInfo {
-  uint8_t nci_version;
-  bool_t wait_for_ntf;
-} phNxpNciInfo_t;
-/* NCI Control structure */
-typedef struct phNxpNciHal_Control {
-  phNxpNci_HalStatus halStatus; /* Indicate if hal is open or closed */
-  pthread_t client_thread;      /* Integration thread handle */
-  uint8_t thread_running;       /* Thread running if set to 1, else set to 0 */
-  phLibNfc_sConfig_t gDrvCfg;   /* Driver config data */
-
-  /* Rx data */
-  uint8_t* p_rx_data;
-  uint16_t rx_data_len;
-
-  /* libnfc-nci callbacks */
-  nfc_stack_callback_t* p_nfc_stack_cback;
-  nfc_stack_data_callback_t* p_nfc_stack_data_cback;
-
-  /* control granted callback */
-  phNxpNciHal_control_granted_callback_t* p_control_granted_cback;
-
-  /* HAL open status */
-  bool_t hal_open_status;
-
-  /* HAL extensions */
-  uint8_t hal_ext_enabled;
-
-  /* Waiting semaphore */
-  phNxpNciHal_Sem_t ext_cb_data;
-
-  uint16_t cmd_len;
-  uint8_t p_cmd_data[NCI_MAX_DATA_LEN];
-  uint16_t rsp_len;
-  uint8_t p_rsp_data[NCI_MAX_DATA_LEN];
-
-  /* retry count used to force download */
-  uint16_t retry_cnt;
-  uint8_t read_retry_cnt;
-  phNxpNciInfo_t nci_info;
-} phNxpNciHal_Control_t;
-
-typedef struct phNxpNciClock {
-  bool_t isClockSet;
-  uint8_t p_rx_data[20];
-  bool_t issetConfig;
-} phNxpNciClock_t;
-
-typedef struct phNxpNciRfSetting {
-  bool_t isGetRfSetting;
-  uint8_t p_rx_data[20];
-} phNxpNciRfSetting_t;
-
-typedef struct phNxpNciMwEepromArea {
-  bool_t isGetEepromArea;
-  uint8_t p_rx_data[32];
-} phNxpNciMwEepromArea_t;
-
-typedef enum {
-  NFC_FORUM_PROFILE,
-  EMV_CO_PROFILE,
-  INVALID_PROFILe
-} phNxpNciProfile_t;
-/* NXP Poll Profile control structure */
-typedef struct phNxpNciProfile_Control {
-  phNxpNciProfile_t profile_type;
-  uint8_t bClkSrcVal; /* Holds the System clock source read from config file */
-  uint8_t
-      bClkFreqVal;  /* Holds the System clock frequency read from config file */
-  uint8_t bTimeout; /* Holds the Timeout Value */
-} phNxpNciProfile_Control_t;
-
-/* Internal messages to handle callbacks */
-#define NCI_HAL_OPEN_CPLT_MSG 0x411
-#define NCI_HAL_CLOSE_CPLT_MSG 0x412
-#define NCI_HAL_POST_INIT_CPLT_MSG 0x413
-#define NCI_HAL_PRE_DISCOVER_CPLT_MSG 0x414
-#define NCI_HAL_ERROR_MSG 0x415
-#define NCI_HAL_RX_MSG 0xF01
-
-#define NCIHAL_CMD_CODE_LEN_BYTE_OFFSET (2U)
-#define NCIHAL_CMD_CODE_BYTE_LEN (3U)
-
-/******************** NCI HAL exposed functions *******************************/
-
-void phNxpNciHal_request_control(void);
-void phNxpNciHal_release_control(void);
-int phNxpNciHal_write_unlocked(uint16_t data_len, const uint8_t* p_data);
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-NFCSTATUS phNxpNciHal_core_reset_recovery();
-void phNxpNciHal_discovery_cmd_ext(uint8_t* p_cmd_data, uint16_t cmd_len);
-#endif
-#endif /* _PHNXPNCIHAL_H_ */
diff --git a/halimpl/pn54x/hal/phNxpNciHal_NfcDepSWPrio.c b/halimpl/pn54x/hal/phNxpNciHal_NfcDepSWPrio.c
deleted file mode 100644
index 4243904..0000000
--- a/halimpl/pn54x/hal/phNxpNciHal_NfcDepSWPrio.c
+++ /dev/null
@@ -1,550 +0,0 @@
-/*
- * Copyright (C) 2012-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <phNxpLog.h>
-#include <phNxpNciHal.h>
-#include <phNxpNciHal_NfcDepSWPrio.h>
-
-/* Timeout value to wait for NFC-DEP detection.*/
-#define CUSTOM_POLL_TIMEOUT 160
-#define CLEAN_UP_TIMEOUT 250
-#define MAX_WRITE_RETRY 5
-
-/******************* Global variables *****************************************/
-extern phNxpNciHal_Control_t nxpncihal_ctrl;
-extern NFCSTATUS phNxpNciHal_send_ext_cmd(uint16_t cmd_len, uint8_t* p_cmd);
-static uint8_t cmd_stop_rf_discovery[] = {0x21, 0x06, 0x01, 0x00}; /* IDLE */
-static uint8_t cmd_resume_rf_discovery[] = {0x21, 0x06, 0x01,
-                                            0x03}; /* RF_DISCOVER */
-
-/*RF_DISCOVER_SELECT_CMD*/
-static uint8_t cmd_select_rf_discovery[] = {0x21, 0x04, 0x03, 0x01, 0x04, 0x02};
-
-static uint8_t cmd_poll[64];
-static uint8_t cmd_poll_len = 0;
-int discover_type = 0xFF;
-uint32_t cleanup_timer;
-
-/*PRIO LOGIC related dead functions undefined*/
-#ifdef P2P_PRIO_LOGIC_HAL_IMP
-
-static int iso_dep_detected = 0x00;
-static int poll_timer_fired = 0x00;
-static uint8_t bIgnorep2plogic = 0;
-static uint8_t* p_iso_ntf_buff = NULL; /* buffer to store second notification */
-static uint8_t bIgnoreIsoDep = 0;
-static uint32_t custom_poll_timer;
-
-/************** NFC-DEP SW PRIO functions *************************************/
-
-static NFCSTATUS phNxpNciHal_start_polling_loop(void);
-static NFCSTATUS phNxpNciHal_stop_polling_loop(void);
-static NFCSTATUS phNxpNciHal_resume_polling_loop(void);
-static void phNxpNciHal_NfcDep_store_ntf(uint8_t* p_cmd_data, uint16_t cmd_len);
-
-/*******************************************************************************
-**
-** Function         cleanup_timer_handler
-**
-** Description      Callback function for cleanup timer.
-**
-** Returns          None
-**
-*******************************************************************************/
-static void cleanup_timer_handler(uint32_t timerId, void* pContext) {
-  NXPLOG_NCIHAL_D(">> cleanup_timer_handler.");
-
-  NXPLOG_NCIHAL_D(
-      ">> cleanup_timer_handler. ISO_DEP not detected second time.");
-
-  phOsalNfc_Timer_Delete(cleanup_timer);
-  cleanup_timer = 0;
-  iso_dep_detected = 0x00;
-  EnableP2P_PrioLogic = false;
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         custom_poll_timer_handler
-**
-** Description      Callback function for custom poll timer.
-**
-** Returns          None
-**
-*******************************************************************************/
-static void custom_poll_timer_handler(uint32_t timerId, void* pContext) {
-  NXPLOG_NCIHAL_D(">> custom_poll_timer_handler.");
-
-  NXPLOG_NCIHAL_D(
-      ">> custom_poll_timer_handler. NFC_DEP not detected. so giving early "
-      "chance to ISO_DEP.");
-
-  phOsalNfc_Timer_Delete(custom_poll_timer);
-
-  if (iso_dep_detected == 0x01) {
-    poll_timer_fired = 0x01;
-
-    /*
-     * Restart polling loop.
-     * When the polling loop is stopped, polling will be restarted.
-     */
-    NXPLOG_NCIHAL_D(">> custom_poll_timer_handler - restart polling loop.");
-
-    phNxpNciHal_stop_polling_loop();
-  } else {
-    NXPLOG_NCIHAL_E(
-        ">> custom_poll_timer_handler - invalid flag state (iso_dep_detected)");
-  }
-
-  return;
-}
-/*******************************************************************************
-**
-** Function         phNxpNciHal_stop_polling_loop
-**
-** Description      Sends stop polling cmd to NFCC
-**
-** Returns          NFCSTATUS_SUCCESS if successful,otherwise NFCSTATUS_FAILED
-**
-*******************************************************************************/
-static NFCSTATUS phNxpNciHal_stop_polling_loop() {
-  NFCSTATUS status = NFCSTATUS_SUCCESS;
-  phNxpNciHal_Sem_t cb_data;
-  pthread_t pthread;
-  discover_type = STOP_POLLING;
-
-  pthread_attr_t attr;
-  pthread_attr_init(&attr);
-  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
-  if (pthread_create(&pthread, &attr, tmp_thread, (void*)&discover_type) != 0) {
-    NXPLOG_NCIHAL_E("fail to create pthread");
-  }
-  pthread_attr_destroy(&attr);
-  return status;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_resume_polling_loop
-**
-** Description      Sends resume polling cmd to NFCC
-**
-** Returns          NFCSTATUS_SUCCESS if successful,otherwise NFCSTATUS_FAILED
-**
-*******************************************************************************/
-static NFCSTATUS phNxpNciHal_resume_polling_loop() {
-  NFCSTATUS status = NFCSTATUS_SUCCESS;
-  phNxpNciHal_Sem_t cb_data;
-  pthread_t pthread;
-  discover_type = RESUME_POLLING;
-
-  pthread_attr_t attr;
-  pthread_attr_init(&attr);
-  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
-  if (pthread_create(&pthread, &attr, tmp_thread, (void*)&discover_type) != 0) {
-    NXPLOG_NCIHAL_E("fail to create pthread");
-  }
-  pthread_attr_destroy(&attr);
-  return status;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_start_polling_loop
-**
-** Description      Sends start polling cmd to NFCC
-**
-** Returns          NFCSTATUS_SUCCESS if successful,otherwise NFCSTATUS_FAILED
-**
-*******************************************************************************/
-NFCSTATUS phNxpNciHal_start_polling_loop() {
-  NFCSTATUS status = NFCSTATUS_FAILED;
-  phNxpNciHal_Sem_t cb_data;
-  pthread_t pthread;
-  discover_type = START_POLLING;
-
-  pthread_attr_t attr;
-  pthread_attr_init(&attr);
-  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
-  if (pthread_create(&pthread, &attr, tmp_thread, (void*)&discover_type) != 0) {
-    NXPLOG_NCIHAL_E("fail to create pthread");
-  }
-  pthread_attr_destroy(&attr);
-  return status;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_NfcDep_rsp_ext
-**
-** Description      Implements algorithm for NFC-DEP protocol priority over
-**                  ISO-DEP protocol.
-**                  Following the algorithm:
-**                  IF ISO-DEP detected first time,set the ISO-DEP detected flag
-**                  and resume polling loop with 60ms timeout value.
-**                      a) if than NFC-DEP detected than send the response to
-**                         libnfc-nci stack and stop the timer.
-**                      b) if NFC-DEP not detected with in 60ms, than restart
-**                         the polling loop to give early chance to ISO-DEP with
-**                         a cleanup timer.
-**                      c) if ISO-DEP detected second time send the response to
-**                         libnfc-nci stack and stop the cleanup timer.
-**                      d) if ISO-DEP not detected with in cleanup timeout, than
-**                         clear the ISO-DEP detection flag.
-**
-** Returns          NFCSTATUS_SUCCESS if successful,otherwise NFCSTATUS_FAILED
-**
-*******************************************************************************/
-NFCSTATUS phNxpNciHal_NfcDep_rsp_ext(uint8_t* p_ntf, uint16_t* p_len) {
-  NFCSTATUS status = NFCSTATUS_INVALID_PARAMETER;
-
-  NXPLOG_NCIHAL_D(">> p_ntf[0]=%02x , p_ntf[1]=%02x", p_ntf[0], p_ntf[1]);
-
-  if (p_ntf[0] == 0x41 && p_ntf[1] == 0x04) {
-    // Tag selected, Disable P2P Prio logic.
-    bIgnoreIsoDep = 1;
-    NXPLOG_NCIHAL_D(">> Tag selected, Disable P2P Prio logic.");
-
-  } else if (((p_ntf[0] == 0x61 && p_ntf[1] == 0x06) ||
-              (p_ntf[0] == 0x41 && p_ntf[1] == 0x06)) &&
-             bIgnoreIsoDep == 1) {
-    // Tag deselected, enable P2P Prio logic.
-    bIgnoreIsoDep = 0x00;
-    NXPLOG_NCIHAL_D(">> Tag deselected, enable P2P Prio logic.");
-  }
-  if (bIgnoreIsoDep == 0x00 && p_ntf[0] == 0x61 && p_ntf[1] == 0x05 &&
-      *p_len > 5) {
-    if (p_ntf[5] == 0x04 && p_ntf[6] < 0x80) {
-      NXPLOG_NCIHAL_D(">> ISO DEP detected.");
-
-      if (iso_dep_detected == 0x00) {
-        NXPLOG_NCIHAL_D(">> ISO DEP detected first time. Resume polling loop");
-
-        iso_dep_detected = 0x01;
-        status = phNxpNciHal_resume_polling_loop();
-
-        custom_poll_timer = phOsalNfc_Timer_Create();
-        NXPLOG_NCIHAL_D("custom poll timer started - %d", custom_poll_timer);
-
-        status = phOsalNfc_Timer_Start(custom_poll_timer, CUSTOM_POLL_TIMEOUT,
-                                       &custom_poll_timer_handler, NULL);
-
-        if (NFCSTATUS_SUCCESS == status) {
-          NXPLOG_NCIHAL_D("custom poll timer started");
-        } else {
-          NXPLOG_NCIHAL_E("custom poll timer not started!!!");
-          status = NFCSTATUS_FAILED;
-        }
-
-        status = NFCSTATUS_FAILED;
-      } else {
-        NXPLOG_NCIHAL_D(">> ISO DEP detected second time.");
-        /* Store notification */
-        phNxpNciHal_NfcDep_store_ntf(p_ntf, *p_len);
-
-        /* Stop Cleanup_timer */
-        phOsalNfc_Timer_Stop(cleanup_timer);
-        phOsalNfc_Timer_Delete(cleanup_timer);
-        cleanup_timer = 0;
-        EnableP2P_PrioLogic = false;
-        iso_dep_detected = 0;
-        status = NFCSTATUS_SUCCESS;
-      }
-    } else if (p_ntf[5] == 0x05) {
-      NXPLOG_NCIHAL_D(">> NFC-DEP Detected - stopping the custom poll timer");
-
-      phOsalNfc_Timer_Stop(custom_poll_timer);
-      phOsalNfc_Timer_Delete(custom_poll_timer);
-      EnableP2P_PrioLogic = false;
-      iso_dep_detected = 0;
-      status = NFCSTATUS_SUCCESS;
-    } else {
-      NXPLOG_NCIHAL_D(
-          ">>  detected other technology- stopping the custom poll timer");
-      phOsalNfc_Timer_Stop(custom_poll_timer);
-      phOsalNfc_Timer_Delete(custom_poll_timer);
-      EnableP2P_PrioLogic = false;
-      iso_dep_detected = 0;
-      status = NFCSTATUS_INVALID_PARAMETER;
-    }
-  } else if (bIgnoreIsoDep == 0x00 &&
-             ((p_ntf[0] == 0x41 && p_ntf[1] == 0x06) ||
-              (p_ntf[0] == 0x61 && p_ntf[1] == 0x06))) {
-    NXPLOG_NCIHAL_D(">> RF disabled");
-    if (poll_timer_fired == 0x01) {
-      poll_timer_fired = 0x00;
-
-      NXPLOG_NCIHAL_D(">>restarting polling loop.");
-
-      /* start polling loop */
-      phNxpNciHal_start_polling_loop();
-      EnableP2P_PrioLogic = false;
-      NXPLOG_NCIHAL_D(
-          ">> NFC DEP NOT  detected - custom poll timer expired - RF disabled");
-
-      cleanup_timer = phOsalNfc_Timer_Create();
-
-      /* Start cleanup_timer */
-      NFCSTATUS status = phOsalNfc_Timer_Start(cleanup_timer, CLEAN_UP_TIMEOUT,
-                                               &cleanup_timer_handler, NULL);
-
-      if (NFCSTATUS_SUCCESS == status) {
-        NXPLOG_NCIHAL_D("cleanup timer started");
-      } else {
-        NXPLOG_NCIHAL_E("cleanup timer not started!!!");
-        status = NFCSTATUS_FAILED;
-      }
-
-      status = NFCSTATUS_FAILED;
-    } else {
-      status = NFCSTATUS_SUCCESS;
-    }
-  }
-  if (bIgnoreIsoDep == 0x00 && iso_dep_detected == 1) {
-    if ((p_ntf[0] == 0x41 && p_ntf[1] == 0x06) ||
-        (p_ntf[0] == 0x61 && p_ntf[1] == 0x06)) {
-      NXPLOG_NCIHAL_D(">>iso_dep_detected Disconnect related notification");
-      status = NFCSTATUS_FAILED;
-    } else {
-      NXPLOG_NCIHAL_W("Never come here");
-    }
-  }
-
-  return status;
-}
-/*******************************************************************************
-**
-** Function         phNxpNciHal_NfcDep_store_ntf
-**
-** Description      Stores the iso dep notification locally.
-**
-** Returns          None
-**
-*******************************************************************************/
-static void phNxpNciHal_NfcDep_store_ntf(uint8_t* p_cmd_data,
-                                         uint16_t cmd_len) {
-  p_iso_ntf_buff = NULL;
-
-  p_iso_ntf_buff = malloc(sizeof(uint8_t) * cmd_len);
-  if (p_iso_ntf_buff == NULL) {
-    NXPLOG_NCIHAL_E("Error allocating memory (p_iso_ntf_buff)");
-    return;
-  }
-  memcpy(p_iso_ntf_buff, p_cmd_data, cmd_len);
-  bIgnorep2plogic = 1;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_NfcDep_comapre_ntf
-**
-** Description      Compare the notification with previous iso dep notification.
-**
-** Returns          NFCSTATUS_SUCCESS if successful,otherwise NFCSTATUS_FAILED
-**
-*******************************************************************************/
-NFCSTATUS phNxpNciHal_NfcDep_comapre_ntf(uint8_t* p_cmd_data,
-                                         uint16_t cmd_len) {
-  NFCSTATUS status = NFCSTATUS_FAILED;
-  int32_t ret_val = -1;
-
-  if (bIgnorep2plogic == 1) {
-    ret_val = memcmp(p_cmd_data, p_iso_ntf_buff, cmd_len);
-    if (ret_val != 0) {
-      NXPLOG_NCIHAL_E("Third notification is not equal to last");
-    } else {
-      NXPLOG_NCIHAL_E(
-          "Third notification is equal to last (disable p2p logic)");
-      status = NFCSTATUS_SUCCESS;
-    }
-    bIgnorep2plogic = 0;
-  }
-  if (p_iso_ntf_buff != NULL) {
-    free(p_iso_ntf_buff);
-    p_iso_ntf_buff = NULL;
-  }
-
-  return status;
-}
-
-extern NFCSTATUS phNxpNciHal_clean_P2P_Prio() {
-  NFCSTATUS status = NFCSTATUS_SUCCESS;
-
-  iso_dep_detected = 0x00;
-  EnableP2P_PrioLogic = false;
-  poll_timer_fired = 0x00;
-  bIgnorep2plogic = 0x00;
-  bIgnoreIsoDep = 0x00;
-
-  status = phOsalNfc_Timer_Stop(cleanup_timer);
-  status |= phOsalNfc_Timer_Delete(cleanup_timer);
-
-  status |= phOsalNfc_Timer_Stop(custom_poll_timer);
-  status |= phOsalNfc_Timer_Delete(custom_poll_timer);
-  cleanup_timer = 0;
-  return status;
-}
-
-#endif
-/*******************************************************************************
-**
-** Function         hal_write_cb
-**
-** Description      Callback function for hal write.
-**
-** Returns          None
-**
-*******************************************************************************/
-static void hal_write_cb(void* pContext, phTmlNfc_TransactInfo_t* pInfo) {
-  phNxpNciHal_Sem_t* p_cb_data = (phNxpNciHal_Sem_t*)pContext;
-
-  if (pInfo->wStatus == NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_D("hal_write_cb: write successful status = 0x%x",
-                    pInfo->wStatus);
-  } else {
-    NXPLOG_NCIHAL_E("hal_write_cb: write error status = 0x%x", pInfo->wStatus);
-  }
-
-  p_cb_data->status = pInfo->wStatus;
-
-  SEM_POST(p_cb_data);
-  return;
-}
-
-/*******************************************************************************
- **
- ** Function         tmp_thread
- **
- ** Description      Thread to execute custom poll commands .
- **
- ** Returns          None
- **
- *******************************************************************************/
-void* tmp_thread(void* tmp) {
-  NFCSTATUS status = NFCSTATUS_SUCCESS;
-  uint16_t data_len;
-  NXPLOG_NCIHAL_E("tmp_thread: enter type=0x0%x", *((int*)tmp));
-  usleep(10 * 1000);
-
-  switch (*((int*)tmp)) {
-    case START_POLLING: {
-      CONCURRENCY_LOCK();
-      data_len = phNxpNciHal_write_unlocked(cmd_poll_len, cmd_poll);
-      CONCURRENCY_UNLOCK();
-
-      if (data_len != cmd_poll_len) {
-        NXPLOG_NCIHAL_E("phNxpNciHal_start_polling_loop: data len mismatch");
-        status = NFCSTATUS_FAILED;
-      }
-    } break;
-
-    case RESUME_POLLING: {
-      CONCURRENCY_LOCK();
-      data_len = phNxpNciHal_write_unlocked(sizeof(cmd_resume_rf_discovery),
-                                            cmd_resume_rf_discovery);
-      CONCURRENCY_UNLOCK();
-
-      if (data_len != sizeof(cmd_resume_rf_discovery)) {
-        NXPLOG_NCIHAL_E("phNxpNciHal_resume_polling_loop: data len mismatch");
-        status = NFCSTATUS_FAILED;
-      }
-    } break;
-
-    case STOP_POLLING: {
-      CONCURRENCY_LOCK();
-      data_len = phNxpNciHal_write_unlocked(sizeof(cmd_stop_rf_discovery),
-                                            cmd_stop_rf_discovery);
-      CONCURRENCY_UNLOCK();
-
-      if (data_len != sizeof(cmd_stop_rf_discovery)) {
-        NXPLOG_NCIHAL_E("phNxpNciHal_stop_polling_loop: data len mismatch");
-        status = NFCSTATUS_FAILED;
-      }
-    } break;
-
-    case DISCOVER_SELECT: {
-      CONCURRENCY_LOCK();
-      data_len = phNxpNciHal_write_unlocked(sizeof(cmd_select_rf_discovery),
-                                            cmd_select_rf_discovery);
-      CONCURRENCY_UNLOCK();
-
-      if (data_len != sizeof(cmd_resume_rf_discovery)) {
-        NXPLOG_NCIHAL_E("phNxpNciHal_resume_polling_loop: data len mismatch");
-        status = NFCSTATUS_FAILED;
-      }
-    } break;
-
-    default:
-      NXPLOG_NCIHAL_E("No Matching case");
-      status = NFCSTATUS_FAILED;
-      break;
-  }
-
-  NXPLOG_NCIHAL_E("tmp_thread: exit");
-  return NULL;
-}
-/*******************************************************************************
- **
- ** Function         phNxpNciHal_select_RF_Discovery
- **
- ** Description     Sends RF_DISCOVER_SELECT_CMD
- ** Parameters    RfID ,  RfProtocolType
- ** Returns          NFCSTATUS_PENDING if success
- **
- *******************************************************************************/
-NFCSTATUS phNxpNciHal_select_RF_Discovery(unsigned int RfID,
-                                          unsigned int RfProtocolType) {
-  NFCSTATUS status = NFCSTATUS_SUCCESS;
-  phNxpNciHal_Sem_t cb_data;
-  pthread_t pthread;
-  discover_type = DISCOVER_SELECT;
-  cmd_select_rf_discovery[3] = RfID;
-  cmd_select_rf_discovery[4] = RfProtocolType;
-
-  pthread_attr_t attr;
-  pthread_attr_init(&attr);
-  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
-  if (pthread_create(&pthread, &attr, tmp_thread, (void*)&discover_type) != 0) {
-    NXPLOG_NCIHAL_E("fail to create pthread");
-  }
-  pthread_attr_destroy(&attr);
-  return status;
-}
-/*******************************************************************************
-**
-** Function         phNxpNciHal_NfcDep_cmd_ext
-**
-** Description      Stores the polling loop configuration locally.
-**
-** Returns          None
-**
-*******************************************************************************/
-void phNxpNciHal_NfcDep_cmd_ext(uint8_t* p_cmd_data, uint16_t* cmd_len) {
-  if (p_cmd_data[0] == 0x21 && p_cmd_data[1] == 0x03) {
-    if (*cmd_len == 6 && p_cmd_data[3] == 0x01 && p_cmd_data[4] == 0x02 &&
-        p_cmd_data[5] == 0x01) {
-      /* DO NOTHING */
-    } else {
-      /* Store the polling loop configuration */
-      cmd_poll_len = *cmd_len;
-      memset(&cmd_poll, 0, cmd_poll_len);
-      memcpy(&cmd_poll, p_cmd_data, cmd_poll_len);
-    }
-  }
-
-  return;
-}
diff --git a/halimpl/pn54x/hal/phNxpNciHal_NfcDepSWPrio.h b/halimpl/pn54x/hal/phNxpNciHal_NfcDepSWPrio.h
deleted file mode 100644
index 12bf9d4..0000000
--- a/halimpl/pn54x/hal/phNxpNciHal_NfcDepSWPrio.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2012-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef _PHNXPNCIHAL_NFCDEPSWPRIO_H_
-#define _PHNXPNCIHAL_NFCDEPSWPRIO_H_
-
-#include <phNxpNciHal.h>
-#include <phTmlNfc.h>
-#include <string.h>
-
-#define START_POLLING 0x00
-#define RESUME_POLLING 0x01
-#define STOP_POLLING 0x02
-#define DISCOVER_SELECT 0x03
-#define CLEAR_PIPE_RSP 0x04
-
-extern uint8_t EnableP2P_PrioLogic;
-
-extern NFCSTATUS phNxpNciHal_NfcDep_rsp_ext(uint8_t* p_ntf, uint16_t* p_len);
-extern void phNxpNciHal_NfcDep_cmd_ext(uint8_t* p_cmd_data, uint16_t* cmd_len);
-extern NFCSTATUS phNxpNciHal_NfcDep_comapre_ntf(uint8_t* p_cmd_data,
-                                                uint16_t cmd_len);
-extern NFCSTATUS phNxpNciHal_select_RF_Discovery(unsigned int RfID,
-                                                 unsigned int RfProtocolType);
-extern NFCSTATUS phNxpNciHal_clean_P2P_Prio();
-extern NFCSTATUS phNxpNciHal_send_clear_pipe_rsp(void);
-
-#endif /* _PHNXPNCIHAL_NFCDEPSWPRIO_H_ */
diff --git a/halimpl/pn54x/hal/phNxpNciHal_dta.c b/halimpl/pn54x/hal/phNxpNciHal_dta.c
deleted file mode 100644
index a6611ea..0000000
--- a/halimpl/pn54x/hal/phNxpNciHal_dta.c
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
-* Copyright (C) 2012-2014 NXP Semiconductors
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-*      http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-#include <phNxpConfig.h>
-#include <phNxpLog.h>
-#include <phNxpNciHal_dta.h>
-
-/*********************** Global Variables *************************************/
-static phNxpDta_Control_t nxpdta_ctrl = {0, 0, 0};
-
-/*******************************************************************************
-**
-** Function         phNxpEnable_DtaMode
-**
-** Description      This function configures
-**                  HAL in DTA mode
-**
-*******************************************************************************/
-void phNxpEnable_DtaMode(uint16_t pattern_no) {
-  nxpdta_ctrl.dta_ctrl_flag = false;
-  nxpdta_ctrl.dta_t1t_flag = false;
-  nxpdta_ctrl.dta_pattern_no = pattern_no;
-  ALOGD(">>>>DTA - Mode is enabled");
-  nxpdta_ctrl.dta_ctrl_flag = true;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpDisable_DtaMode
-**
-** Description      This function disable DTA mode
-**
-*******************************************************************************/
-void phNxpDisable_DtaMode(void) {
-  nxpdta_ctrl.dta_ctrl_flag = false;
-  nxpdta_ctrl.dta_t1t_flag = false;
-  NXPLOG_NCIHAL_D(">>>>DTA - Mode is Disabled");
-}
-
-/******************************************************************************
- * Function         phNxpDta_IsEnable
- *
- * Description      This function checks the DTA mode is enable or not.
- *
- * Returns          It returns TRUE if DTA enabled otherwise FALSE
- *
- ******************************************************************************/
-NFCSTATUS phNxpDta_IsEnable(void) { return nxpdta_ctrl.dta_ctrl_flag; }
-
-/******************************************************************************
- * Function         phNxpDta_T1TEnable
- *
- * Description      This function  enables  DTA mode for T1T tag.
- *
- *
- ******************************************************************************/
-void phNxpDta_T1TEnable(void) { nxpdta_ctrl.dta_t1t_flag = true; }
-/******************************************************************************
- * Function         phNxpNHal_DtaUpdate
- *
- * Description      This function changes the command and responses specific
- *                  to make DTA application success
- *
- * Returns          It return NFCSTATUS_SUCCESS then continue with send else
- *                  sends NFCSTATUS_FAILED direct response is prepared and
- *                  do not send anything to NFCC.
- *
- ******************************************************************************/
-
-NFCSTATUS phNxpNHal_DtaUpdate(uint16_t* cmd_len, uint8_t* p_cmd_data,
-                              uint16_t* rsp_len, uint8_t* p_rsp_data) {
-  NFCSTATUS status = NFCSTATUS_SUCCESS;
-
-  if (nxpdta_ctrl.dta_ctrl_flag == true) {
-    // Workaround for DTA, block the set config command with general bytes */
-    if (p_cmd_data[0] == 0x20 && p_cmd_data[1] == 0x02 &&
-        p_cmd_data[2] == 0x17 && p_cmd_data[3] == 0x01 &&
-        p_cmd_data[4] == 0x29 && p_cmd_data[5] == 0x14) {
-      *rsp_len = 5;
-      NXPLOG_NCIHAL_D(">>>>DTA - Block set config command");
-      phNxpNciHal_print_packet("DTASEND", p_cmd_data, *cmd_len);
-
-      p_rsp_data[0] = 0x40;
-      p_rsp_data[1] = 0x02;
-      p_rsp_data[2] = 0x02;
-      p_rsp_data[3] = 0x00;
-      p_rsp_data[4] = 0x00;
-
-      phNxpNciHal_print_packet("DTARECV", p_rsp_data, 5);
-
-      status = NFCSTATUS_FAILED;
-      NXPLOG_NCIHAL_D(
-          "Going through DTA workaround - Block set config command END");
-
-    } else if (p_cmd_data[0] == 0x21 && p_cmd_data[1] == 0x08 &&
-               p_cmd_data[2] == 0x04 && p_cmd_data[3] == 0xFF &&
-               p_cmd_data[4] == 0xFF) {
-      NXPLOG_NCIHAL_D(">>>>DTA Change Felica system code");
-      *rsp_len = 4;
-      p_rsp_data[0] = 0x41;
-      p_rsp_data[1] = 0x08;
-      p_rsp_data[2] = 0x01;
-      p_rsp_data[3] = 0x00;
-      status = NFCSTATUS_FAILED;
-
-      phNxpNciHal_print_packet("DTARECV", p_rsp_data, 4);
-    } else if (p_cmd_data[0] == 0x20 && p_cmd_data[1] == 0x02 &&
-               p_cmd_data[2] == 0x10 && p_cmd_data[3] == 0x05 &&
-               p_cmd_data[10] == 0x32 && p_cmd_data[12] == 0x00) {
-      NXPLOG_NCIHAL_D(">>>>DTA Update LA_SEL_INFO param");
-
-      p_cmd_data[12] = 0x40;
-      p_cmd_data[18] = 0x02;
-      status = NFCSTATUS_SUCCESS;
-    } else if (p_cmd_data[0] == 0x20 && p_cmd_data[1] == 0x02 &&
-               p_cmd_data[2] == 0x0D && p_cmd_data[3] == 0x04 &&
-               p_cmd_data[10] == 0x32 && p_cmd_data[12] == 0x00) {
-      NXPLOG_NCIHAL_D(">>>>DTA Blocking dirty set config");
-      *rsp_len = 5;
-      p_rsp_data[0] = 0x40;
-      p_rsp_data[1] = 0x02;
-      p_rsp_data[2] = 0x02;
-      p_rsp_data[3] = 0x00;
-      p_rsp_data[4] = 0x00;
-      status = NFCSTATUS_FAILED;
-      phNxpNciHal_print_packet("DTARECV", p_rsp_data, 5);
-    } else if (p_cmd_data[0] == 0x21 && p_cmd_data[1] == 0x03) {
-      NXPLOG_NCIHAL_D(">>>>DTA Add NFC-F listen tech params");
-      p_cmd_data[2] += 6;
-      p_cmd_data[3] += 3;
-      p_cmd_data[*cmd_len] = 0x80;
-      p_cmd_data[*cmd_len + 1] = 0x01;
-      p_cmd_data[*cmd_len + 2] = 0x82;
-      p_cmd_data[*cmd_len + 3] = 0x01;
-      p_cmd_data[*cmd_len + 4] = 0x85;
-      p_cmd_data[*cmd_len + 5] = 0x01;
-
-      *cmd_len += 6;
-      status = NFCSTATUS_SUCCESS;
-    } else if (p_cmd_data[0] == 0x20 && p_cmd_data[1] == 0x02 &&
-               p_cmd_data[2] == 0x0D && p_cmd_data[3] == 0x04 &&
-               p_cmd_data[10] == 0x32 && p_cmd_data[12] == 0x20 &&
-               nxpdta_ctrl.dta_pattern_no == 0x1000) {
-      NXPLOG_NCIHAL_D(">>>>DTA Blocking dirty set config for analog testing");
-      *rsp_len = 5;
-      p_rsp_data[0] = 0x40;
-      p_rsp_data[1] = 0x02;
-      p_rsp_data[2] = 0x02;
-      p_rsp_data[3] = 0x00;
-      p_rsp_data[4] = 0x00;
-      status = NFCSTATUS_FAILED;
-      phNxpNciHal_print_packet("DTARECV", p_rsp_data, 5);
-    } else if (p_cmd_data[0] == 0x20 && p_cmd_data[1] == 0x02 &&
-               p_cmd_data[2] == 0x0D && p_cmd_data[3] == 0x04 &&
-               p_cmd_data[4] == 0x32 && p_cmd_data[5] == 0x01 &&
-               p_cmd_data[6] == 0x00) {
-      NXPLOG_NCIHAL_D(">>>>DTA Blocking dirty set config");
-      *rsp_len = 5;
-      p_rsp_data[0] = 0x40;
-      p_rsp_data[1] = 0x02;
-      p_rsp_data[2] = 0x02;
-      p_rsp_data[3] = 0x00;
-      p_rsp_data[4] = 0x00;
-      status = NFCSTATUS_FAILED;
-      phNxpNciHal_print_packet("DTARECV", p_rsp_data, 5);
-    } else if (p_cmd_data[0] == 0x20 && p_cmd_data[1] == 0x02 &&
-               p_cmd_data[2] == 0x04 && p_cmd_data[3] == 0x01 &&
-               p_cmd_data[4] == 0x50 && p_cmd_data[5] == 0x01 &&
-               p_cmd_data[6] == 0x00 && nxpdta_ctrl.dta_pattern_no == 0x1000) {
-      NXPLOG_NCIHAL_D(">>>>DTA Blocking dirty set config for analog testing");
-      *rsp_len = 5;
-      p_rsp_data[0] = 0x40;
-      p_rsp_data[1] = 0x02;
-      p_rsp_data[2] = 0x02;
-      p_rsp_data[3] = 0x00;
-      p_rsp_data[4] = 0x00;
-      status = NFCSTATUS_FAILED;
-      phNxpNciHal_print_packet("DTARECV", p_rsp_data, 5);
-    } else {
-    }
-    if (nxpdta_ctrl.dta_t1t_flag == true) {
-      if (p_cmd_data[2] == 0x07 && p_cmd_data[3] == 0x78 &&
-          p_cmd_data[4] == 0x00 && p_cmd_data[5] == 0x00) {
-        /*if (nxpdta_ctrl.dta_pattern_no == 0)
-        {
-          NXPLOG_NCIHAL_D(">>>>DTA - T1T modification block RID command Custom
-        Response (pattern 0)");
-          phNxpNciHal_print_packet("DTASEND", p_cmd_data, *cmd_len);
-          *rsp_len = 10;
-          p_rsp_data[0] = 0x00;
-          p_rsp_data[1] = 0x00;
-          p_rsp_data[2] = 0x07;
-          p_rsp_data[3] = 0x12;
-          p_rsp_data[4] = 0x49;
-          p_rsp_data[5] = 0x00;
-          p_rsp_data[6] = 0x00;
-          p_rsp_data[7] = 0x00;
-          p_rsp_data[8] = 0x00;
-          p_rsp_data[9] = 0x00;
-
-          status = NFCSTATUS_FAILED;
-
-          phNxpNciHal_print_packet("DTARECV", p_rsp_data, *rsp_len);
-        }
-        else
-        {*/
-        NXPLOG_NCIHAL_D("Change RID command's UID echo bytes to 0");
-
-        nxpdta_ctrl.dta_t1t_flag = false;
-        p_cmd_data[6] = 0x00;
-        p_cmd_data[7] = 0x00;
-        p_cmd_data[8] = 0x00;
-        p_cmd_data[9] = 0x00;
-        status = NFCSTATUS_SUCCESS;
-        /*}*/
-      }
-    }
-  }
-  return status;
-}
diff --git a/halimpl/pn54x/hal/phNxpNciHal_dta.h b/halimpl/pn54x/hal/phNxpNciHal_dta.h
deleted file mode 100644
index ebcae1a..0000000
--- a/halimpl/pn54x/hal/phNxpNciHal_dta.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
-* Copyright (C) 2012-2014 NXP Semiconductors
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-*      http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-#ifndef _PHNXPNCIHAL_DTA_H_
-#define _PHNXPNCIHAL_DTA_H_
-
-#include <phNxpNciHal_utils.h>
-/* DTA Control structure */
-typedef struct phNxpDta_Control {
-  uint8_t dta_ctrl_flag;
-  uint16_t dta_pattern_no;
-  uint8_t dta_t1t_flag;
-} phNxpDta_Control_t;
-
-void phNxpEnable_DtaMode(uint16_t pattern_no);
-void phNxpDisable_DtaMode(void);
-NFCSTATUS phNxpDta_IsEnable(void);
-void phNxpDta_T1TEnable(void);
-NFCSTATUS phNxpNHal_DtaUpdate(uint16_t* cmd_len, uint8_t* p_cmd_data,
-                              uint16_t* rsp_len, uint8_t* p_rsp_data);
-
-#endif /* _PHNXPNICHAL_DTA_H_ */
diff --git a/halimpl/pn54x/hal/phNxpNciHal_ext.c b/halimpl/pn54x/hal/phNxpNciHal_ext.c
deleted file mode 100644
index 864f9ae..0000000
--- a/halimpl/pn54x/hal/phNxpNciHal_ext.c
+++ /dev/null
@@ -1,945 +0,0 @@
-/*
- * Copyright (C) 2012-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <log/log.h>
-#include <phDal4Nfc_messageQueueLib.h>
-#include <phNxpConfig.h>
-#include <phNxpLog.h>
-#include <phNxpNciHal.h>
-#include <phNxpNciHal_NfcDepSWPrio.h>
-#include <phNxpNciHal_ext.h>
-#include <phTmlNfc.h>
-
-/* Timeout value to wait for response from PN548AD */
-#define HAL_EXTNS_WRITE_RSP_TIMEOUT (1000)
-
-#undef P2P_PRIO_LOGIC_HAL_IMP
-
-/******************* Global variables *****************************************/
-extern phNxpNciHal_Control_t nxpncihal_ctrl;
-extern phNxpNciProfile_Control_t nxpprofile_ctrl;
-
-extern uint32_t cleanup_timer;
-uint8_t icode_detected = 0x00;
-uint8_t icode_send_eof = 0x00;
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-uint8_t nfcdep_detected = 0x00;
-#endif
-static uint8_t ee_disc_done = 0x00;
-uint8_t EnableP2P_PrioLogic = false;
-static uint32_t RfDiscID = 1;
-static uint32_t RfProtocolType = 4;
-/* NFCEE Set mode */
-static uint8_t setEEModeDone = 0x00;
-static uint8_t cmd_nfcee_setmode_enable[] = {0x22, 0x01, 0x02, 0x01, 0x01};
-
-/* External global variable to get FW version from NCI response*/
-extern uint32_t wFwVerRsp;
-/* External global variable to get FW version from FW file*/
-extern uint16_t wFwVer;
-
-uint16_t fw_maj_ver;
-uint16_t rom_version;
-/* local buffer to store CORE_INIT response */
-static uint32_t bCoreInitRsp[40];
-static uint32_t iCoreInitRspLen;
-
-extern uint32_t timeoutTimerId;
-
-extern NFCSTATUS read_retry();
-
-/************** HAL extension functions ***************************************/
-static void hal_extns_write_rsp_timeout_cb(uint32_t TimerId, void* pContext);
-
-/*Proprietary cmd sent to HAL to send reader mode flag
- * Last byte of 4 byte proprietary cmd data contains ReaderMode flag
- * If this flag is enabled, NFC-DEP protocol is modified to T3T protocol
- * if FrameRF interface is selected. This needs to be done as the FW
- * always sends Ntf for FrameRF with NFC-DEP even though FrameRF with T3T is
- * previously selected with DISCOVER_SELECT_CMD
- */
-#define PROPRIETARY_CMD_FELICA_READER_MODE 0xFE
-static uint8_t gFelicaReaderMode;
-
-static NFCSTATUS phNxpNciHal_ext_process_nfc_init_rsp(uint8_t* p_ntf,
-                                                      uint16_t* p_len);
-/*******************************************************************************
-**
-** Function         phNxpNciHal_ext_init
-**
-** Description      initialize extension function
-**
-*******************************************************************************/
-void phNxpNciHal_ext_init(void) {
-  icode_detected = 0x00;
-  icode_send_eof = 0x00;
-  setEEModeDone = 0x00;
-  EnableP2P_PrioLogic = false;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_process_ext_rsp
-**
-** Description      Process extension function response
-**
-** Returns          NFCSTATUS_SUCCESS if success
-**
-*******************************************************************************/
-NFCSTATUS phNxpNciHal_process_ext_rsp(uint8_t* p_ntf, uint16_t* p_len) {
-  NFCSTATUS status = NFCSTATUS_SUCCESS;
-  uint16_t rf_technology_length_param = 0;
-
-  if (p_ntf[0] == 0x61 && p_ntf[1] == 0x05 && *p_len < 14) {
-    if (*p_len <= 6) {
-      android_errorWriteLog(0x534e4554, "118152591");
-    }
-    NXPLOG_NCIHAL_E("RF_INTF_ACTIVATED_NTF length error!");
-    status = NFCSTATUS_FAILED;
-    return status;
-  }
-
-  if (p_ntf[0] == 0x61 && p_ntf[1] == 0x05 && p_ntf[4] == 0x03 &&
-      p_ntf[5] == 0x05 && nxpprofile_ctrl.profile_type == EMV_CO_PROFILE) {
-    p_ntf[4] = 0xFF;
-    p_ntf[5] = 0xFF;
-    p_ntf[6] = 0xFF;
-    NXPLOG_NCIHAL_D("Nfc-Dep Detect in EmvCo profile - Restart polling");
-  }
-
-  if (p_ntf[0] == 0x61 && p_ntf[1] == 0x05 && p_ntf[4] == 0x01 &&
-      p_ntf[5] == 0x05 && p_ntf[6] == 0x02 && gFelicaReaderMode) {
-    /*If FelicaReaderMode is enabled,Change Protocol to T3T from NFC-DEP
-         * when FrameRF interface is selected*/
-    p_ntf[5] = 0x03;
-    NXPLOG_NCIHAL_D("FelicaReaderMode:Activity 1.1");
-  }
-
-#ifdef P2P_PRIO_LOGIC_HAL_IMP
-  if (p_ntf[0] == 0x61 && p_ntf[1] == 0x05 && p_ntf[4] == 0x02 &&
-      p_ntf[5] == 0x04 && nxpprofile_ctrl.profile_type == NFC_FORUM_PROFILE) {
-    EnableP2P_PrioLogic = true;
-  }
-
-  NXPLOG_NCIHAL_D("Is EnableP2P_PrioLogic: 0x0%X", EnableP2P_PrioLogic);
-  if (phNxpDta_IsEnable() == false) {
-    if ((icode_detected != 1) && (EnableP2P_PrioLogic == true)) {
-      if (phNxpNciHal_NfcDep_comapre_ntf(p_ntf, *p_len) == NFCSTATUS_FAILED) {
-        status = phNxpNciHal_NfcDep_rsp_ext(p_ntf, p_len);
-        if (status != NFCSTATUS_INVALID_PARAMETER) {
-          return status;
-        }
-      }
-    }
-  }
-#endif
-
-  status = NFCSTATUS_SUCCESS;
-
-  if (p_ntf[0] == 0x61 && p_ntf[1] == 0x05) {
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-    if (nfcdep_detected) {
-      nfcdep_detected = 0x00;
-    }
-#endif
-
-    switch (p_ntf[4]) {
-      case 0x00:
-        NXPLOG_NCIHAL_D("NxpNci: RF Interface = NFCEE Direct RF");
-        break;
-      case 0x01:
-        NXPLOG_NCIHAL_D("NxpNci: RF Interface = Frame RF");
-        break;
-      case 0x02:
-        NXPLOG_NCIHAL_D("NxpNci: RF Interface = ISO-DEP");
-        break;
-      case 0x03:
-        NXPLOG_NCIHAL_D("NxpNci: RF Interface = NFC-DEP");
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-        nfcdep_detected = 0x01;
-#endif
-        break;
-      case 0x80:
-        NXPLOG_NCIHAL_D("NxpNci: RF Interface = MIFARE");
-        break;
-      default:
-        NXPLOG_NCIHAL_D("NxpNci: RF Interface = Unknown");
-        break;
-    }
-
-    switch (p_ntf[5]) {
-      case 0x01:
-        NXPLOG_NCIHAL_D("NxpNci: Protocol = T1T");
-        phNxpDta_T1TEnable();
-        break;
-      case 0x02:
-        NXPLOG_NCIHAL_D("NxpNci: Protocol = T2T");
-        break;
-      case 0x03:
-        NXPLOG_NCIHAL_D("NxpNci: Protocol = T3T");
-        break;
-      case 0x04:
-        NXPLOG_NCIHAL_D("NxpNci: Protocol = ISO-DEP");
-        break;
-      case 0x05:
-        NXPLOG_NCIHAL_D("NxpNci: Protocol = NFC-DEP");
-        break;
-      case 0x06:
-        NXPLOG_NCIHAL_D("NxpNci: Protocol = 15693");
-        break;
-      case 0x80:
-        NXPLOG_NCIHAL_D("NxpNci: Protocol = MIFARE");
-        break;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-      case 0x81:
-#else
-      case 0x8A:
-#endif
-        NXPLOG_NCIHAL_D("NxpNci: Protocol = Kovio");
-        break;
-      default:
-        NXPLOG_NCIHAL_D("NxpNci: Protocol = Unknown");
-        break;
-    }
-
-    switch (p_ntf[6]) {
-      case 0x00:
-        NXPLOG_NCIHAL_D("NxpNci: Mode = A Passive Poll");
-        break;
-      case 0x01:
-        NXPLOG_NCIHAL_D("NxpNci: Mode = B Passive Poll");
-        break;
-      case 0x02:
-        NXPLOG_NCIHAL_D("NxpNci: Mode = F Passive Poll");
-        break;
-      case 0x03:
-        NXPLOG_NCIHAL_D("NxpNci: Mode = A Active Poll");
-        break;
-      case 0x05:
-        NXPLOG_NCIHAL_D("NxpNci: Mode = F Active Poll");
-        break;
-      case 0x06:
-        NXPLOG_NCIHAL_D("NxpNci: Mode = 15693 Passive Poll");
-        break;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-      case 0x70:
-#else
-      case 0x77:
-#endif
-        NXPLOG_NCIHAL_D("NxpNci: Mode = Kovio");
-        break;
-      case 0x80:
-        NXPLOG_NCIHAL_D("NxpNci: Mode = A Passive Listen");
-        break;
-      case 0x81:
-        NXPLOG_NCIHAL_D("NxpNci: Mode = B Passive Listen");
-        break;
-      case 0x82:
-        NXPLOG_NCIHAL_D("NxpNci: Mode = F Passive Listen");
-        break;
-      case 0x83:
-        NXPLOG_NCIHAL_D("NxpNci: Mode = A Active Listen");
-        break;
-      case 0x85:
-        NXPLOG_NCIHAL_D("NxpNci: Mode = F Active Listen");
-        break;
-      case 0x86:
-        NXPLOG_NCIHAL_D("NxpNci: Mode = 15693 Passive Listen");
-        break;
-      default:
-        NXPLOG_NCIHAL_D("NxpNci: Mode = Unknown");
-        break;
-    }
-  }
-  phNxpNciHal_ext_process_nfc_init_rsp(p_ntf, p_len);
-
-  if (p_ntf[0] == 0x61 && p_ntf[1] == 0x05 && p_ntf[2] == 0x15 &&
-      p_ntf[4] == 0x01 && p_ntf[5] == 0x06 && p_ntf[6] == 0x06) {
-    NXPLOG_NCIHAL_D("> Going through workaround - notification of ISO 15693");
-    icode_detected = 0x01;
-    p_ntf[21] = 0x01;
-    p_ntf[22] = 0x01;
-  } else if (icode_detected == 1 && icode_send_eof == 2) {
-    icode_send_eof = 3;
-  } else if (p_ntf[0] == 0x00 && p_ntf[1] == 0x00 && icode_detected == 1) {
-    if (icode_send_eof == 3) {
-      icode_send_eof = 0;
-    }
-    if (nxpncihal_ctrl.nci_info.nci_version != NCI_VERSION_2_0) {
-      if (p_ntf[p_ntf[2] + 2] == 0x00) {
-        NXPLOG_NCIHAL_D("> Going through workaround - data of ISO 15693");
-        p_ntf[2]--;
-        (*p_len)--;
-      } else {
-        p_ntf[p_ntf[2] + 2] |= 0x01;
-      }
-    }
-  } else if (p_ntf[2] == 0x02 && p_ntf[1] == 0x00 && icode_detected == 1) {
-    NXPLOG_NCIHAL_D("> ICODE EOF response do not send to upper layer");
-  } else if (p_ntf[0] == 0x61 && p_ntf[1] == 0x06 && icode_detected == 1) {
-    NXPLOG_NCIHAL_D("> Polling Loop Re-Started");
-    icode_detected = 0;
-    icode_send_eof = 0;
-  } else if (*p_len == 4 && p_ntf[0] == 0x40 && p_ntf[1] == 0x02 &&
-             p_ntf[2] == 0x01 && p_ntf[3] == 0x06) {
-    NXPLOG_NCIHAL_D("> Deinit workaround for LLCP set_config 0x%x 0x%x 0x%x",
-                    p_ntf[21], p_ntf[22], p_ntf[23]);
-    p_ntf[0] = 0x40;
-    p_ntf[1] = 0x02;
-    p_ntf[2] = 0x02;
-    p_ntf[3] = 0x00;
-    p_ntf[4] = 0x00;
-    *p_len = 5;
-  }
-  // 4200 02 00 01
-  else if (p_ntf[0] == 0x42 && p_ntf[1] == 0x00 && ee_disc_done == 0x01) {
-    NXPLOG_NCIHAL_D("Going through workaround - NFCEE_DISCOVER_RSP");
-    if (p_ntf[4] == 0x01) {
-      p_ntf[4] = 0x00;
-
-      ee_disc_done = 0x00;
-    }
-    NXPLOG_NCIHAL_D("Going through workaround - NFCEE_DISCOVER_RSP - END");
-
-  } else if (p_ntf[0] == 0x61 && p_ntf[1] == 0x03 /*&& cleanup_timer!=0*/) {
-    if (cleanup_timer != 0) {
-      /* if RF Notification Type of RF_DISCOVER_NTF is Last Notification */
-      if (0 == (*(p_ntf + 2 + (*(p_ntf + 2))))) {
-        phNxpNciHal_select_RF_Discovery(RfDiscID, RfProtocolType);
-        status = NFCSTATUS_FAILED;
-        return status;
-      } else {
-        RfDiscID = p_ntf[3];
-        RfProtocolType = p_ntf[4];
-      }
-      status = NFCSTATUS_FAILED;
-      return status;
-    }
-  } else if (p_ntf[0] == 0x41 && p_ntf[1] == 0x04 && cleanup_timer != 0) {
-    status = NFCSTATUS_FAILED;
-    return status;
-  }
-#if (NFC_NXP_CHIP_TYPE == PN547C2)
-  else if (p_ntf[0] == 0x61 && p_ntf[1] == 0x05 && p_ntf[4] == 0x02 &&
-           p_ntf[5] == 0x80 && p_ntf[6] == 0x00) {
-    NXPLOG_NCIHAL_D(
-        "Going through workaround - iso-dep  interface  mifare protocol with "
-        "sak value not equal to 0x20");
-    rf_technology_length_param = p_ntf[9];
-    if ((p_ntf[9 + rf_technology_length_param] & 0x20) != 0x20) {
-      p_ntf[4] = 0x80;
-    }
-  }
-#endif
-  else if (*p_len == 4 && p_ntf[0] == 0x4F && p_ntf[1] == 0x11 &&
-           p_ntf[2] == 0x01) {
-    if (p_ntf[3] == 0x00) {
-      NXPLOG_NCIHAL_D(
-          ">  Workaround for ISO-DEP Presence Check, ignore response and wait "
-          "for notification");
-      p_ntf[0] = 0x60;
-      p_ntf[1] = 0x06;
-      p_ntf[2] = 0x03;
-      p_ntf[3] = 0x01;
-      p_ntf[4] = 0x00;
-      p_ntf[5] = 0x01;
-      *p_len = 6;
-    } else {
-      NXPLOG_NCIHAL_D(
-          ">  Workaround for ISO-DEP Presence Check, presence check return "
-          "failed");
-      p_ntf[0] = 0x60;
-      p_ntf[1] = 0x08;
-      p_ntf[2] = 0x02;
-      p_ntf[3] = 0xB2;
-      p_ntf[4] = 0x00;
-      *p_len = 5;
-    }
-  } else if (*p_len == 4 && p_ntf[0] == 0x6F && p_ntf[1] == 0x11 &&
-             p_ntf[2] == 0x01) {
-    if (p_ntf[3] == 0x01) {
-      NXPLOG_NCIHAL_D(
-          ">  Workaround for ISO-DEP Presence Check - Card still in field");
-      p_ntf[0] = 0x00;
-      p_ntf[1] = 0x00;
-      p_ntf[2] = 0x01;
-      p_ntf[3] = 0x7E;
-    } else {
-      NXPLOG_NCIHAL_D(
-          ">  Workaround for ISO-DEP Presence Check - Card not in field");
-      p_ntf[0] = 0x60;
-      p_ntf[1] = 0x08;
-      p_ntf[2] = 0x02;
-      p_ntf[3] = 0xB2;
-      p_ntf[4] = 0x00;
-      *p_len = 5;
-    }
-  }
-  /*
-  else if(p_ntf[0] == 0x61 && p_ntf[1] == 0x05 && p_ntf[4] == 0x01 && p_ntf[5]
-  == 0x00 && p_ntf[6] == 0x01)
-  {
-      NXPLOG_NCIHAL_D("Picopass type 3-B with undefined protocol is not
-  supported, disabling");
-      p_ntf[4] = 0xFF;
-      p_ntf[5] = 0xFF;
-      p_ntf[6] = 0xFF;
-  }*/
-
-  return status;
-}
-
-/******************************************************************************
- * Function         phNxpNciHal_ext_process_nfc_init_rsp
- *
- * Description      This function is used to process the HAL NFC core reset rsp
- *                  and ntf and core init rsp of NCI 1.0 or NCI2.0 and update
- *                  NCI version.
- *                  It also handles error response such as core_reset_ntf with
- *                  error status in both NCI2.0 and NCI1.0.
- *
- * Returns          Returns NFCSTATUS_SUCCESS if parsing response is successful
- *                  or returns failure.
- *
- *******************************************************************************/
-static NFCSTATUS phNxpNciHal_ext_process_nfc_init_rsp(uint8_t* p_ntf,
-                                                      uint16_t* p_len) {
-  NFCSTATUS status = NFCSTATUS_SUCCESS;
-  /* Parsing CORE_RESET_RSP and CORE_RESET_NTF to update NCI version.*/
-  if (p_ntf == NULL || *p_len == 0x00) {
-    return NFCSTATUS_FAILED;
-  }
-  if (p_ntf[0] == NCI_MT_RSP &&
-      ((p_ntf[1] & NCI_OID_MASK) == NCI_MSG_CORE_RESET)) {
-    if (p_ntf[2] == 0x01 && p_ntf[3] == 0x00) {
-      NXPLOG_NCIHAL_D("CORE_RESET_RSP NCI2.0");
-      if (nxpncihal_ctrl.hal_ext_enabled == TRUE) {
-        nxpncihal_ctrl.nci_info.wait_for_ntf = TRUE;
-      }
-    } else if (p_ntf[2] == 0x03 && p_ntf[3] == 0x00) {
-      NXPLOG_NCIHAL_D("CORE_RESET_RSP NCI1.0");
-      nxpncihal_ctrl.nci_info.nci_version = p_ntf[4];
-    }
-  } else if (p_ntf[0] == NCI_MT_NTF &&
-             ((p_ntf[1] & NCI_OID_MASK) == NCI_MSG_CORE_RESET)) {
-    if (p_ntf[3] == CORE_RESET_TRIGGER_TYPE_CORE_RESET_CMD_RECEIVED ||
-        p_ntf[3] == CORE_RESET_TRIGGER_TYPE_POWERED_ON) {
-      NXPLOG_NCIHAL_D("CORE_RESET_NTF NCI2.0 reason CORE_RESET_CMD received !");
-      nxpncihal_ctrl.nci_info.nci_version = p_ntf[5];
-      int len = p_ntf[2] + 2; /*include 2 byte header*/
-      wFwVerRsp = (((uint32_t)p_ntf[len - 2]) << 16U) |
-                  (((uint32_t)p_ntf[len - 1]) << 8U) | p_ntf[len];
-      NXPLOG_NCIHAL_D("NxpNci> FW Version: %x.%x.%x", p_ntf[len - 2],
-                      p_ntf[len - 1], p_ntf[len]);
-    } else {
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-      if (nfcdep_detected &&
-          !(p_ntf[2] == 0x06 && p_ntf[3] == 0xA0 && p_ntf[4] == 0x00 &&
-            ((p_ntf[5] == 0xC9 && p_ntf[6] == 0x95 && p_ntf[7] == 0x00 &&
-              p_ntf[8] == 0x00) ||
-             (p_ntf[5] == 0x07 && p_ntf[6] == 0x39 && p_ntf[7] == 0xF2 &&
-              p_ntf[8] == 0x00)))) {
-        nfcdep_detected = 0x00;
-      }
-#endif
-      phNxpNciHal_emergency_recovery();
-      status = NFCSTATUS_FAILED;
-    } /* Parsing CORE_INIT_RSP*/
-  } else if (p_ntf[0] == NCI_MT_RSP &&
-             ((p_ntf[1] & NCI_OID_MASK) == NCI_MSG_CORE_INIT)) {
-    if (nxpncihal_ctrl.nci_info.nci_version == NCI_VERSION_2_0) {
-      NXPLOG_NCIHAL_D("CORE_INIT_RSP NCI2.0 received !");
-    } else {
-      NXPLOG_NCIHAL_D("CORE_INIT_RSP NCI1.0 received !");
-      int len = p_ntf[2] + 2; /*include 2 byte header*/
-      wFwVerRsp = (((uint32_t)p_ntf[len - 2]) << 16U) |
-                  (((uint32_t)p_ntf[len - 1]) << 8U) | p_ntf[len];
-      if (wFwVerRsp == 0) status = NFCSTATUS_FAILED;
-      iCoreInitRspLen = *p_len;
-      memcpy(bCoreInitRsp, p_ntf, *p_len);
-      NXPLOG_NCIHAL_D("NxpNci> FW Version: %x.%x.%x", p_ntf[len - 2],
-                      p_ntf[len - 1], p_ntf[len]);
-      fw_maj_ver = p_ntf[len - 1];
-      rom_version = p_ntf[len - 2];
-    }
-  }
-  return status;
-}
-
-/******************************************************************************
- * Function         phNxpNciHal_process_ext_cmd_rsp
- *
- * Description      This function process the extension command response. It
- *                  also checks the received response to expected response.
- *
- * Returns          returns NFCSTATUS_SUCCESS if response is as expected else
- *                  returns failure.
- *
- ******************************************************************************/
-static NFCSTATUS phNxpNciHal_process_ext_cmd_rsp(uint16_t cmd_len,
-                                                 uint8_t* p_cmd) {
-  NFCSTATUS status = NFCSTATUS_FAILED;
-  uint16_t data_written = 0;
-
-  /* Create the local semaphore */
-  if (phNxpNciHal_init_cb_data(&nxpncihal_ctrl.ext_cb_data, NULL) !=
-      NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_D("Create ext_cb_data failed");
-    return NFCSTATUS_FAILED;
-  }
-
-  nxpncihal_ctrl.ext_cb_data.status = NFCSTATUS_SUCCESS;
-
-  /* Send ext command */
-  data_written = phNxpNciHal_write_unlocked(cmd_len, p_cmd);
-  if (data_written != cmd_len) {
-    NXPLOG_NCIHAL_D("phNxpNciHal_write failed for hal ext");
-    goto clean_and_return;
-  }
-
-  /* Start timer */
-  status = phOsalNfc_Timer_Start(timeoutTimerId, HAL_EXTNS_WRITE_RSP_TIMEOUT,
-                                 &hal_extns_write_rsp_timeout_cb, NULL);
-  if (NFCSTATUS_SUCCESS == status) {
-    NXPLOG_NCIHAL_D("Response timer started");
-  } else {
-    NXPLOG_NCIHAL_E("Response timer not started!!!");
-    status = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-
-  /* Wait for rsp */
-  NXPLOG_NCIHAL_D("Waiting after ext cmd sent");
-  if (SEM_WAIT(nxpncihal_ctrl.ext_cb_data)) {
-    NXPLOG_NCIHAL_E("p_hal_ext->ext_cb_data.sem semaphore error");
-    goto clean_and_return;
-  }
-
-  /* Stop Timer */
-  status = phOsalNfc_Timer_Stop(timeoutTimerId);
-  if (NFCSTATUS_SUCCESS == status) {
-    NXPLOG_NCIHAL_D("Response timer stopped");
-  } else {
-    NXPLOG_NCIHAL_E("Response timer stop ERROR!!!");
-    status = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-  /* Start timer to wait for NTF*/
-  if (nxpncihal_ctrl.nci_info.wait_for_ntf == TRUE) {
-    status = phOsalNfc_Timer_Start(timeoutTimerId, HAL_EXTNS_WRITE_RSP_TIMEOUT,
-                                   &hal_extns_write_rsp_timeout_cb, NULL);
-    if (NFCSTATUS_SUCCESS == status) {
-      NXPLOG_NCIHAL_D("Response timer started");
-    } else {
-      NXPLOG_NCIHAL_E("Response timer not started!!!");
-      status = NFCSTATUS_FAILED;
-      goto clean_and_return;
-    }
-    if (SEM_WAIT(nxpncihal_ctrl.ext_cb_data)) {
-      NXPLOG_NCIHAL_E("p_hal_ext->ext_cb_data.sem semaphore error");
-      /* Stop Timer */
-      status = phOsalNfc_Timer_Stop(timeoutTimerId);
-      goto clean_and_return;
-    }
-    status = phOsalNfc_Timer_Stop(timeoutTimerId);
-    if (NFCSTATUS_SUCCESS == status) {
-      NXPLOG_NCIHAL_D("Response timer stopped");
-    } else {
-      NXPLOG_NCIHAL_E("Response timer stop ERROR!!!");
-      status = NFCSTATUS_FAILED;
-      goto clean_and_return;
-    }
-  }
-
-  if (nxpncihal_ctrl.ext_cb_data.status != NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_E(
-        "Callback Status is failed!! Timer Expired!! Couldn't read it! 0x%x",
-        nxpncihal_ctrl.ext_cb_data.status);
-    status = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-
-  NXPLOG_NCIHAL_D("Checking response");
-  status = NFCSTATUS_SUCCESS;
-
-clean_and_return:
-  phNxpNciHal_cleanup_cb_data(&nxpncihal_ctrl.ext_cb_data);
-  nxpncihal_ctrl.nci_info.wait_for_ntf = FALSE;
-  return status;
-}
-
-/******************************************************************************
- * Function         phNxpNciHal_write_ext
- *
- * Description      This function inform the status of phNxpNciHal_open
- *                  function to libnfc-nci.
- *
- * Returns          It return NFCSTATUS_SUCCESS then continue with send else
- *                  sends NFCSTATUS_FAILED direct response is prepared and
- *                  do not send anything to NFCC.
- *
- ******************************************************************************/
-
-NFCSTATUS phNxpNciHal_write_ext(uint16_t* cmd_len, uint8_t* p_cmd_data,
-                                uint16_t* rsp_len, uint8_t* p_rsp_data) {
-  NFCSTATUS status = NFCSTATUS_SUCCESS;
-
-  unsigned long retval = 0;
-  int isfound =
-      GetNxpNumValue(NAME_MIFARE_READER_ENABLE, &retval, sizeof(unsigned long));
-
-  phNxpNciHal_NfcDep_cmd_ext(p_cmd_data, cmd_len);
-
-  if (phNxpDta_IsEnable() == true) {
-    status = phNxpNHal_DtaUpdate(cmd_len, p_cmd_data, rsp_len, p_rsp_data);
-  }
-
-  if (p_cmd_data[0] == PROPRIETARY_CMD_FELICA_READER_MODE &&
-      p_cmd_data[1] == PROPRIETARY_CMD_FELICA_READER_MODE &&
-      p_cmd_data[2] == PROPRIETARY_CMD_FELICA_READER_MODE) {
-    NXPLOG_NCIHAL_D("Received proprietary command to set Felica Reader mode:%d",
-                    p_cmd_data[3]);
-    gFelicaReaderMode = p_cmd_data[3];
-    /* frame the dummy response */
-    *rsp_len = 4;
-    p_rsp_data[0] = 0x00;
-    p_rsp_data[1] = 0x00;
-    p_rsp_data[2] = 0x00;
-    p_rsp_data[3] = 0x00;
-    status = NFCSTATUS_FAILED;
-  } else if (p_cmd_data[0] == 0x20 && p_cmd_data[1] == 0x02 &&
-             p_cmd_data[2] == 0x05 && p_cmd_data[3] == 0x01 &&
-             p_cmd_data[4] == 0xA0 && p_cmd_data[5] == 0x44 &&
-             p_cmd_data[6] == 0x01 && p_cmd_data[7] == 0x01) {
-    nxpprofile_ctrl.profile_type = EMV_CO_PROFILE;
-    NXPLOG_NCIHAL_D("EMV_CO_PROFILE mode - Enabled");
-    status = NFCSTATUS_SUCCESS;
-  } else if (p_cmd_data[0] == 0x20 && p_cmd_data[1] == 0x02 &&
-             p_cmd_data[2] == 0x05 && p_cmd_data[3] == 0x01 &&
-             p_cmd_data[4] == 0xA0 && p_cmd_data[5] == 0x44 &&
-             p_cmd_data[6] == 0x01 && p_cmd_data[7] == 0x00) {
-    NXPLOG_NCIHAL_D("NFC_FORUM_PROFILE mode - Enabled");
-    nxpprofile_ctrl.profile_type = NFC_FORUM_PROFILE;
-    status = NFCSTATUS_SUCCESS;
-  }
-
-  if (nxpprofile_ctrl.profile_type == EMV_CO_PROFILE) {
-    if (p_cmd_data[0] == 0x21 && p_cmd_data[1] == 0x06 &&
-        p_cmd_data[2] == 0x01 && p_cmd_data[3] == 0x03) {
-#if 0
-            //Needs clarification whether to keep it or not
-            NXPLOG_NCIHAL_D ("EmvCo Poll mode - RF Deactivate discard");
-            phNxpNciHal_print_packet("SEND", p_cmd_data, *cmd_len);
-            *rsp_len = 4;
-            p_rsp_data[0] = 0x41;
-            p_rsp_data[1] = 0x06;
-            p_rsp_data[2] = 0x01;
-            p_rsp_data[3] = 0x00;
-            phNxpNciHal_print_packet("RECV", p_rsp_data, 4);
-            status = NFCSTATUS_FAILED;
-#endif
-    } else if (p_cmd_data[0] == 0x21 && p_cmd_data[1] == 0x03) {
-      NXPLOG_NCIHAL_D("EmvCo Poll mode - Discover map only for A and B");
-      p_cmd_data[2] = 0x05;
-      p_cmd_data[3] = 0x02;
-      p_cmd_data[4] = 0x00;
-      p_cmd_data[5] = 0x01;
-      p_cmd_data[6] = 0x01;
-      p_cmd_data[7] = 0x01;
-      *cmd_len = 8;
-    }
-  }
-
-  if (retval == 0x01 && p_cmd_data[0] == 0x21 && p_cmd_data[1] == 0x00) {
-    NXPLOG_NCIHAL_D("Going through extns - Adding Mifare in RF Discovery");
-    p_cmd_data[2] += 3;
-    p_cmd_data[3] += 1;
-    p_cmd_data[*cmd_len] = 0x80;
-    p_cmd_data[*cmd_len + 1] = 0x01;
-    p_cmd_data[*cmd_len + 2] = 0x80;
-    *cmd_len += 3;
-    status = NFCSTATUS_SUCCESS;
-    NXPLOG_NCIHAL_D(
-        "Going through extns - Adding Mifare in RF Discovery - END");
-  } else if (p_cmd_data[3] == 0x81 && p_cmd_data[4] == 0x01 &&
-             p_cmd_data[5] == 0x03) {
-    NXPLOG_NCIHAL_D("> Going through workaround - set host list");
-
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-    *cmd_len = 8;
-
-    p_cmd_data[2] = 0x05;
-    p_cmd_data[6] = 0x02;
-    p_cmd_data[7] = 0xC0;
-#else
-    *cmd_len = 7;
-
-    p_cmd_data[2] = 0x04;
-    p_cmd_data[6] = 0xC0;
-#endif
-
-    NXPLOG_NCIHAL_D("> Going through workaround - set host list - END");
-    status = NFCSTATUS_SUCCESS;
-  } else if (icode_detected) {
-    if ((p_cmd_data[3] & 0x40) == 0x40 &&
-        (p_cmd_data[4] == 0x21 || p_cmd_data[4] == 0x22 ||
-         p_cmd_data[4] == 0x24 || p_cmd_data[4] == 0x27 ||
-         p_cmd_data[4] == 0x28 || p_cmd_data[4] == 0x29 ||
-         p_cmd_data[4] == 0x2a)) {
-      NXPLOG_NCIHAL_D("> Send EOF set");
-      icode_send_eof = 1;
-    }
-
-    if (p_cmd_data[3] == 0x20 || p_cmd_data[3] == 0x24 ||
-        p_cmd_data[3] == 0x60) {
-      NXPLOG_NCIHAL_D("> NFC ISO_15693 Proprietary CMD ");
-      p_cmd_data[3] += 0x02;
-    }
-  } else if (p_cmd_data[0] == 0x21 && p_cmd_data[1] == 0x03) {
-    NXPLOG_NCIHAL_D("> Polling Loop Started");
-    icode_detected = 0;
-    icode_send_eof = 0;
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-    // Cache discovery cmd for recovery
-    phNxpNciHal_discovery_cmd_ext(p_cmd_data, *cmd_len);
-#endif
-  }
-  // 22000100
-  else if (p_cmd_data[0] == 0x22 && p_cmd_data[1] == 0x00 &&
-           p_cmd_data[2] == 0x01 && p_cmd_data[3] == 0x00) {
-    // ee_disc_done = 0x01;//Reader Over SWP event getting
-    *rsp_len = 0x05;
-    p_rsp_data[0] = 0x42;
-    p_rsp_data[1] = 0x00;
-    p_rsp_data[2] = 0x02;
-    p_rsp_data[3] = 0x00;
-    p_rsp_data[4] = 0x00;
-    phNxpNciHal_print_packet("RECV", p_rsp_data, 5);
-    status = NFCSTATUS_FAILED;
-  }
-  // 2002 0904 3000 3100 3200 5000
-  else if ((p_cmd_data[0] == 0x20 && p_cmd_data[1] == 0x02) &&
-           ((p_cmd_data[2] == 0x09 && p_cmd_data[3] == 0x04) /*||
-            (p_cmd_data[2] == 0x0D && p_cmd_data[3] == 0x04)*/
-            )) {
-    *cmd_len += 0x01;
-    p_cmd_data[2] += 0x01;
-    p_cmd_data[9] = 0x01;
-    p_cmd_data[10] = 0x40;
-    p_cmd_data[11] = 0x50;
-    p_cmd_data[12] = 0x00;
-
-    NXPLOG_NCIHAL_D("> Going through workaround - Dirty Set Config ");
-    //        phNxpNciHal_print_packet("SEND", p_cmd_data, *cmd_len);
-    NXPLOG_NCIHAL_D("> Going through workaround - Dirty Set Config - End ");
-  }
-  //    20020703300031003200
-  //    2002 0301 3200
-  else if ((p_cmd_data[0] == 0x20 && p_cmd_data[1] == 0x02) &&
-           ((p_cmd_data[2] == 0x07 && p_cmd_data[3] == 0x03) ||
-            (p_cmd_data[2] == 0x03 && p_cmd_data[3] == 0x01 &&
-             p_cmd_data[4] == 0x32))) {
-    NXPLOG_NCIHAL_D("> Going through workaround - Dirty Set Config ");
-    phNxpNciHal_print_packet("SEND", p_cmd_data, *cmd_len);
-    *rsp_len = 5;
-    p_rsp_data[0] = 0x40;
-    p_rsp_data[1] = 0x02;
-    p_rsp_data[2] = 0x02;
-    p_rsp_data[3] = 0x00;
-    p_rsp_data[4] = 0x00;
-
-    phNxpNciHal_print_packet("RECV", p_rsp_data, 5);
-    status = NFCSTATUS_FAILED;
-    NXPLOG_NCIHAL_D("> Going through workaround - Dirty Set Config - End ");
-  }
-
-  // 2002 0D04 300104 310100 320100 500100
-  // 2002 0401 320100
-  else if ((p_cmd_data[0] == 0x20 && p_cmd_data[1] == 0x02) &&
-           (
-               /*(p_cmd_data[2] == 0x0D && p_cmd_data[3] == 0x04)*/
-               (p_cmd_data[2] == 0x04 && p_cmd_data[3] == 0x01 &&
-                p_cmd_data[4] == 0x32 && p_cmd_data[5] == 0x00))) {
-    //        p_cmd_data[12] = 0x40;
-
-    NXPLOG_NCIHAL_D("> Going through workaround - Dirty Set Config ");
-    phNxpNciHal_print_packet("SEND", p_cmd_data, *cmd_len);
-    p_cmd_data[6] = 0x60;
-
-    phNxpNciHal_print_packet("RECV", p_rsp_data, 5);
-    //        status = NFCSTATUS_FAILED;
-    NXPLOG_NCIHAL_D("> Going through workaround - Dirty Set Config - End ");
-  } else if (p_cmd_data[0] == 0x21 && p_cmd_data[1] == 0x00) {
-    NXPLOG_NCIHAL_D(
-        "> Going through workaround - Add Mifare Classic in Discovery Map");
-    p_cmd_data[*cmd_len] = 0x80;
-    p_cmd_data[*cmd_len + 1] = 0x01;
-    p_cmd_data[*cmd_len + 2] = 0x80;
-    p_cmd_data[5] = 0x01;
-    p_cmd_data[6] = 0x01;
-    p_cmd_data[2] += 3;
-    p_cmd_data[3] += 1;
-    *cmd_len += 3;
-  } else if (*cmd_len == 3 && p_cmd_data[0] == 0x00 && p_cmd_data[1] == 0x00 &&
-             p_cmd_data[2] == 0x00) {
-    NXPLOG_NCIHAL_D("> Going through workaround - ISO-DEP Presence Check ");
-    p_cmd_data[0] = 0x2F;
-    p_cmd_data[1] = 0x11;
-    p_cmd_data[2] = 0x00;
-    status = NFCSTATUS_SUCCESS;
-    NXPLOG_NCIHAL_D(
-        "> Going through workaround - ISO-DEP Presence Check - End");
-  }
-#if 0
-    else if ( (p_cmd_data[0] == 0x20 && p_cmd_data[1] == 0x02 ) &&
-                 ((p_cmd_data[2] == 0x09 && p_cmd_data[3] == 0x04) ||
-                     (p_cmd_data[2] == 0x0B && p_cmd_data[3] == 0x05) ||
-                     (p_cmd_data[2] == 0x07 && p_cmd_data[3] == 0x02) ||
-                     (p_cmd_data[2] == 0x0A && p_cmd_data[3] == 0x03) ||
-                     (p_cmd_data[2] == 0x0A && p_cmd_data[3] == 0x04) ||
-                     (p_cmd_data[2] == 0x05 && p_cmd_data[3] == 0x02))
-             )
-    {
-        NXPLOG_NCIHAL_D ("> Going through workaround - Dirty Set Config ");
-        phNxpNciHal_print_packet("SEND", p_cmd_data, *cmd_len);
-        *rsp_len = 5;
-        p_rsp_data[0] = 0x40;
-        p_rsp_data[1] = 0x02;
-        p_rsp_data[2] = 0x02;
-        p_rsp_data[3] = 0x00;
-        p_rsp_data[4] = 0x00;
-
-        phNxpNciHal_print_packet("RECV", p_rsp_data, 5);
-        status = NFCSTATUS_FAILED;
-        NXPLOG_NCIHAL_D ("> Going through workaround - Dirty Set Config - End ");
-    }
-
-    else if((p_cmd_data[0] == 0x20 && p_cmd_data[1] == 0x02) &&
-           ((p_cmd_data[3] == 0x00) ||
-           ((*cmd_len >= 0x06) && (p_cmd_data[5] == 0x00)))) /*If the length of the first param id is zero don't allow*/
-    {
-        NXPLOG_NCIHAL_D ("> Going through workaround - Dirty Set Config ");
-        phNxpNciHal_print_packet("SEND", p_cmd_data, *cmd_len);
-        *rsp_len = 5;
-        p_rsp_data[0] = 0x40;
-        p_rsp_data[1] = 0x02;
-        p_rsp_data[2] = 0x02;
-        p_rsp_data[3] = 0x00;
-        p_rsp_data[4] = 0x00;
-
-        phNxpNciHal_print_packet("RECV", p_rsp_data, 5);
-        status = NFCSTATUS_FAILED;
-        NXPLOG_NCIHAL_D ("> Going through workaround - Dirty Set Config - End ");
-    }
-#endif
-  else if ((wFwVerRsp & 0x0000FFFF) == wFwVer) {
-    /* skip CORE_RESET and CORE_INIT from Brcm */
-    if (p_cmd_data[0] == 0x20 && p_cmd_data[1] == 0x00 &&
-        p_cmd_data[2] == 0x01 && p_cmd_data[3] == 0x01) {
-      //            *rsp_len = 6;
-      //
-      //            NXPLOG_NCIHAL_D("> Going - core reset optimization");
-      //
-      //            p_rsp_data[0] = 0x40;
-      //            p_rsp_data[1] = 0x00;
-      //            p_rsp_data[2] = 0x03;
-      //            p_rsp_data[3] = 0x00;
-      //            p_rsp_data[4] = 0x10;
-      //            p_rsp_data[5] = 0x01;
-      //
-      //            status = NFCSTATUS_FAILED;
-      //            NXPLOG_NCIHAL_D("> Going - core reset optimization - END");
-    }
-    /* CORE_INIT */
-    else if (p_cmd_data[0] == 0x20 && p_cmd_data[1] == 0x01 &&
-             p_cmd_data[2] == 0x00) {
-      //            NXPLOG_NCIHAL_D("> Going - core init optimization");
-      //            *rsp_len = iCoreInitRspLen;
-      //            memcpy(p_rsp_data, bCoreInitRsp, iCoreInitRspLen);
-      //            status = NFCSTATUS_FAILED;
-      //            NXPLOG_NCIHAL_D("> Going - core init optimization - END");
-    }
-  }
-
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-  if (p_cmd_data[0] == 0x20 && p_cmd_data[1] == 0x02) {
-    uint8_t temp;
-    uint8_t* p = p_cmd_data + 4;
-    uint8_t* end = p_cmd_data + *cmd_len;
-    while (p < end) {
-      if (*p == 0x53)  // LF_T3T_FLAGS
-      {
-        NXPLOG_NCIHAL_D("> Going through workaround - LF_T3T_FLAGS swap");
-        temp = *(p + 3);
-        *(p + 3) = *(p + 2);
-        *(p + 2) = temp;
-        NXPLOG_NCIHAL_D("> Going through workaround - LF_T3T_FLAGS - End");
-        status = NFCSTATUS_SUCCESS;
-        break;
-      }
-      if (*p == 0xA0) {
-        p += *(p + 2) + 3;
-      } else {
-        p += *(p + 1) + 2;
-      }
-    }
-  }
-#endif
-
-  return status;
-}
-
-/******************************************************************************
- * Function         phNxpNciHal_send_ext_cmd
- *
- * Description      This function send the extension command to NFCC. No
- *                  response is checked by this function but it waits for
- *                  the response to come.
- *
- * Returns          Returns NFCSTATUS_SUCCESS if sending cmd is successful and
- *                  response is received.
- *
- ******************************************************************************/
-NFCSTATUS phNxpNciHal_send_ext_cmd(uint16_t cmd_len, uint8_t* p_cmd) {
-  NFCSTATUS status = NFCSTATUS_FAILED;
-
-  HAL_ENABLE_EXT();
-  nxpncihal_ctrl.cmd_len = cmd_len;
-  memcpy(nxpncihal_ctrl.p_cmd_data, p_cmd, cmd_len);
-  status = phNxpNciHal_process_ext_cmd_rsp(nxpncihal_ctrl.cmd_len,
-                                           nxpncihal_ctrl.p_cmd_data);
-  HAL_DISABLE_EXT();
-
-  return status;
-}
-
-/******************************************************************************
- * Function         hal_extns_write_rsp_timeout_cb
- *
- * Description      Timer call back function
- *
- * Returns          None
- *
- ******************************************************************************/
-static void hal_extns_write_rsp_timeout_cb(uint32_t timerId, void* pContext) {
-  UNUSED(timerId);
-  UNUSED(pContext);
-  NXPLOG_NCIHAL_E("hal_extns_write_rsp_timeout_cb - write timeout!!!");
-  nxpncihal_ctrl.ext_cb_data.status = NFCSTATUS_FAILED;
-  usleep(1);
-  SEM_POST(&(nxpncihal_ctrl.ext_cb_data));
-
-  return;
-}
diff --git a/halimpl/pn54x/hal/phNxpNciHal_ext.h b/halimpl/pn54x/hal/phNxpNciHal_ext.h
deleted file mode 100644
index 72387e9..0000000
--- a/halimpl/pn54x/hal/phNxpNciHal_ext.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2012-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef _PHNXPNCIHAL_EXT_H_
-#define _PHNXPNCIHAL_EXT_H_
-
-#include <phNxpNciHal.h>
-#include <phNxpNciHal_dta.h>
-#include <string.h>
-
-void phNxpNciHal_ext_init(void);
-NFCSTATUS phNxpNciHal_process_ext_rsp(uint8_t* p_ntf, uint16_t* p_len);
-NFCSTATUS phNxpNciHal_send_ext_cmd(uint16_t cmd_len, uint8_t* p_cmd);
-NFCSTATUS phNxpNciHal_write_ext(uint16_t* cmd_len, uint8_t* p_cmd_data,
-                                uint16_t* rsp_len, uint8_t* p_rsp_data);
-
-#endif /* _PHNXPNICHAL_EXT_H_ */
diff --git a/halimpl/pn54x/inc/phNxpNciHal_Adaptation.h b/halimpl/pn54x/inc/phNxpNciHal_Adaptation.h
deleted file mode 100644
index b4d5566..0000000
--- a/halimpl/pn54x/inc/phNxpNciHal_Adaptation.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2012-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PHNXPNCIHAL_ADAPTATION_H_
-#define _PHNXPNCIHAL_ADAPTATION_H_
-
-#include <hardware/hardware.h>
-#include <hardware/nfc.h>
-
-typedef struct {
-  struct nfc_nci_device nci_device;
-
-  /* Local definitions */
-} pn547_dev_t;
-
-/* NXP HAL functions */
-
-int phNxpNciHal_open(nfc_stack_callback_t* p_cback,
-                     nfc_stack_data_callback_t* p_data_cback);
-int phNxpNciHal_write(uint16_t data_len, const uint8_t* p_data);
-int phNxpNciHal_core_initialized(uint8_t* p_core_init_rsp_params);
-int phNxpNciHal_pre_discover(void);
-int phNxpNciHal_close(void);
-int phNxpNciHal_control_granted(void);
-int phNxpNciHal_power_cycle(void);
-
-#endif /* _PHNXPNCIHAL_ADAPTATION_H_ */
diff --git a/halimpl/pn54x/inc/phNxpNciHal_Api.h b/halimpl/pn54x/inc/phNxpNciHal_Api.h
deleted file mode 100644
index e1e0649..0000000
--- a/halimpl/pn54x/inc/phNxpNciHal_Api.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2012-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef _PHNXPNCIHAL_API_H_
-#define _PHNXPNCIHAL_API_H_
-
-#include <phNfcStatus.h>
-#include <phNxpNciHal.h>
-#include <phTmlNfc.h>
-
-/*******************************************************************************
- **
- ** Function         phNxpNciHal_get_version
- **
- ** Description      Function to get the HW, FW and SW versions.
- **
- ** Returns          NFCSTATUS_SUCCESS if successful,otherwise NFCSTATUS_FAILED.
- **
- ******************************************************************************/
-
-NFCSTATUS phNxpNciHal_get_version(uint32_t* hw_ver, uint32_t* fw_ver,
-                                  uint32_t* sw_ver);
-
-#endif /* _PHNXPNCIHAL_API_H_ */
diff --git a/halimpl/pn54x/inc/phNxpNciHal_SelfTest.h b/halimpl/pn54x/inc/phNxpNciHal_SelfTest.h
deleted file mode 100644
index ee7c8d6..0000000
--- a/halimpl/pn54x/inc/phNxpNciHal_SelfTest.h
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Copyright (C) 2012-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef _PHNXPNCIHAL_SELFTEST_H_
-#define _PHNXPNCIHAL_SELFTEST_H_
-
-#ifdef NXP_HW_SELF_TEST
-
-#include <phNfcStatus.h>
-#include <phNxpNciHal.h>
-#include <phTmlNfc.h>
-
-/* PRBS Generation type  */
-typedef enum {
-  NFC_FW_PRBS, /* FW software would generate the PRBS */
-  NFC_HW_PRBS  /* Hardware would generate the PRBS */
-} phNxpNfc_PrbsType_t;
-
-/* Different HW PRBS types */
-typedef enum { NFC_HW_PRBS9, NFC_HW_PRBS15 } phNxpNfc_PrbsHwType_t;
-/* RF Technology */
-typedef enum {
-  NFC_RF_TECHNOLOGY_A,
-  NFC_RF_TECHNOLOGY_B,
-  NFC_RF_TECHNOLOGY_F,
-} phNxpNfc_Tech_t;
-
-/* Bit rates */
-typedef enum {
-  NFC_BIT_RATE_106,
-  NFC_BIT_RATE_212,
-  NFC_BIT_RATE_424,
-  NFC_BIT_RATE_848,
-} phNxpNfc_Bitrate_t;
-
-typedef struct phAntenna_St_Resp {
-  /* Txdo Raw Value*/
-  uint16_t wTxdoRawValue;
-  uint16_t wTxdoMeasuredRangeMin;            /*Txdo Measured Range Max */
-  uint16_t wTxdoMeasuredRangeMax;            /*Txdo Measured Range Min */
-  uint16_t wTxdoMeasuredTolerance;           /*Txdo Measured Range Tolerance */
-                                             /* Agc Values */
-  uint16_t wAgcValue;                        /*Agc Min Value*/
-  uint16_t wAgcValueTolerance;               /*Txdo Measured Range*/
-                                             /* Agc value with NFCLD */
-  uint16_t wAgcValuewithfixedNFCLD;          /*Agc Value with Fixed NFCLD Max */
-  uint16_t wAgcValuewithfixedNFCLDTolerance; /*Agc Value with Fixed NFCLD
-                                                Tolerance */
-  /* Agc Differential Values With Open/Short RM */
-  uint16_t wAgcDifferentialWithOpen1;          /*Agc Differential With Open 1*/
-  uint16_t wAgcDifferentialWithOpenTolerance1; /*Agc Differential With Open
-                                                  Tolerance 1*/
-  uint16_t wAgcDifferentialWithOpen2;          /*Agc Differential With Open 2*/
-  uint16_t wAgcDifferentialWithOpenTolerance2; /*Agc Differential With Open
-                                                  Tolerance 2*/
-} phAntenna_St_Resp_t; /* Instance of Transaction structure */
-
-/*******************************************************************************
- **
- ** Function         phNxpNciHal_TestMode_open
- **
- ** Description      It opens the physical connection with NFCC (pn547) and
- **                  creates required client thread for operation.
- **
- ** Returns          NFCSTATUS_SUCCESS if successful,otherwise NFCSTATUS_FAILED.
- **
- ******************************************************************************/
-
-NFCSTATUS phNxpNciHal_TestMode_open(void);
-
-/*******************************************************************************
- **
- ** Function         phNxpNciHal_TestMode_close
- **
- ** Description      This function close the NFCC interface and free all
- **                  resources.
- **
- ** Returns          None.
- **
- ******************************************************************************/
-
-void phNxpNciHal_TestMode_close(void);
-
-/*******************************************************************************
- **
- ** Function         phNxpNciHal_SwpTest
- **
- ** Description      Test function to validate the SWP line. SWP line number is
- **                  is sent as parameter to the API.
- **
- ** Returns          NFCSTATUS_SUCCESS if successful,otherwise NFCSTATUS_FAILED.
- **
- ******************************************************************************/
-
-NFCSTATUS phNxpNciHal_SwpTest(uint8_t swp_line);
-
-/*******************************************************************************
- **
- ** Function         phNxpNciHal_PrbsTestStart
- **
- ** Description      Test function start RF generation for RF technology and bit
- **                  rate. RF technology and bit rate are sent as parameter to
- **                  the API.
- **
- ** Returns          NFCSTATUS_SUCCESS if RF generation successful,
- **                  otherwise NFCSTATUS_FAILED.
- **
- ******************************************************************************/
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-NFCSTATUS phNxpNciHal_PrbsTestStart(phNxpNfc_PrbsType_t prbs_type,
-                                    phNxpNfc_PrbsHwType_t hw_prbs_type,
-                                    phNxpNfc_Tech_t tech,
-                                    phNxpNfc_Bitrate_t bitrate);
-#else
-NFCSTATUS phNxpNciHal_PrbsTestStart(phNxpNfc_Tech_t tech,
-                                    phNxpNfc_Bitrate_t bitrate);
-#endif
-/*******************************************************************************
- **
- ** Function         phNxpNciHal_PrbsTestStop
- **
- ** Description      Test function stop RF generation for RF technology started
- **                  by phNxpNciHal_PrbsTestStart.
- **
- ** Returns          NFCSTATUS_SUCCESS if operation successful,
- **                  otherwise NFCSTATUS_FAILED.
- **
- ******************************************************************************/
-
-NFCSTATUS phNxpNciHal_PrbsTestStop();
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_AntennaSelfTest
-**
-** Description      Test function to validate the Antenna's discrete
-**                  components connection.
-**
-** Returns          NFCSTATUS_SUCCESS if successful,otherwise NFCSTATUS_FAILED.
-**
-*******************************************************************************/
-
-NFCSTATUS phNxpNciHal_AntennaSelfTest(phAntenna_St_Resp_t* phAntenna_St_Resp);
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_RfFieldTest
-**
-** Description      Test function performs RF filed test.
-**
-** Returns          NFCSTATUS_SUCCESS if successful,otherwise NFCSTATUS_FAILED.
-**
-*******************************************************************************/
-
-NFCSTATUS phNxpNciHal_RfFieldTest(uint8_t on);
-
-/*******************************************************************************
- **
- ** Function         phNxpNciHal_DownloadPinTest
- **
- ** Description      Test function to validate the FW download pin connection.
- **
- ** Returns          NFCSTATUS_SUCCESS if successful,otherwise NFCSTATUS_FAILED.
- **
- ******************************************************************************/
-
-NFCSTATUS phNxpNciHal_DownloadPinTest(void);
-
-#endif /* _NXP_HW_SELF_TEST_H_ */
-#endif /* _PHNXPNCIHAL_SELFTEST_H_ */
diff --git a/halimpl/pn54x/libnfc-brcm.conf b/halimpl/pn54x/libnfc-brcm.conf
deleted file mode 100644
index 14c6912..0000000
--- a/halimpl/pn54x/libnfc-brcm.conf
+++ /dev/null
@@ -1,400 +0,0 @@
-###################### Start of libnfc-brcm.conf #######################
-
-###############################################################################
-# Application options
-APPL_TRACE_LEVEL=0xFF
-PROTOCOL_TRACE_LEVEL=0xFFFFFFFF
-
-###############################################################################
-# performance measurement
-# Change this setting to control how often USERIAL log the performance (throughput)
-# data on read/write/poll
-# defailt is to log performance dara for every 100 read or write
-#REPORT_PERFORMANCE_MEASURE=100
-
-###############################################################################
-# File used for NFA storage
-NFA_STORAGE="/data/nfc"
-
-###############################################################################
-# Snooze Mode Settings
-#
-#  By default snooze mode is enabled.  Set SNOOZE_MODE_CFG byte[0] to 0
-#  to disable.
-#
-#  If SNOOZE_MODE_CFG is not provided, the default settings are used:
-#  They are as follows:
-#       8             Sleep Mode (0=Disabled 1=UART 8=SPI/I2C)
-#       0             Idle Threshold Host
-#       0             Idle Threshold HC
-#       0             NFC Wake active mode (0=ActiveLow 1=ActiveHigh)
-#       1             Host Wake active mode (0=ActiveLow 1=ActiveHigh)
-#
-#SNOOZE_MODE_CFG={08:00:00:00:01}
-
-###############################################################################
-# Insert a delay in milliseconds after NFC_WAKE and before write to NFCC
-#NFC_WAKE_DELAY=20
-
-###############################################################################
-# Various Delay settings (in ms) used in USERIAL
-#  POWER_ON_DELAY
-#    Delay after turning on chip, before writing to transport (default 300)
-#  PRE_POWER_OFF_DELAY
-#    Delay after deasserting NFC-Wake before turn off chip (default 0)
-#  POST_POWER_OFF_DELAY
-#    Delay after turning off chip, before USERIAL_close returns (default 0)
-#
-#POWER_ON_DELAY=300
-#PRE_POWER_OFF_DELAY=0
-#POST_POWER_OFF_DELAY=0
-
-###############################################################################
-# Maximum time (ms) to wait for RESET NTF after setting REG_PU to high
-# The default is 1000.
-#NFCC_ENABLE_TIMEOUT=0
-
-###############################################################################
-# LPTD mode configuration
-#  byte[0] is the length of the remaining bytes in this value
-#     if set to 0, LPTD params will NOT be sent to NFCC (i.e. disabled).
-#  byte[1] is the param id it should be set to B9.
-#  byte[2] is the length of the LPTD parameters
-#  byte[3] indicates if LPTD is enabled
-#     if set to 0, LPTD will be disabled (parameters will still be sent).
-#  byte[4-n] are the LPTD parameters.
-#  By default, LPTD is enabled and default settings are used.
-#  See nfc_hal_dm_cfg.c for defaults
-#LPTD_CFG={23:B9:21:01:02:FF:FF:04:A0:0F:40:00:80:02:02:10:00:00:00:31:0C:30:00:00:00:00:00:00:00:00:00:00:00:00:00:00}
-
-###############################################################################
-# Startup Configuration (100 bytes maximum)
-#
-# For the 0xCA parameter, byte[9] (marked by 'AA') is for UICC0, and byte[10] (marked by BB) is
-#    for UICC1.  The values are defined as:
-#   0 : UICCx only supports ISO_DEP in low power mode.
-#   2 : UICCx only supports Mifare in low power mode.
-#   3 : UICCx supports both ISO_DEP and Mifare in low power mode.
-#
-#                                                                          AA BB
-#NFA_DM_START_UP_CFG={1F:CB:01:01:A5:01:01:CA:14:00:00:00:00:06:E8:03:00:00:00:00:00:00:00:00:00:00:00:00:00:80:01:01}
-
-###############################################################################
-# Startup Vendor Specific Configuration (100 bytes maximum);
-#  byte[0] TLV total len = 0x5
-#  byte[1] NCI_MTS_CMD|NCI_GID_PROP = 0x2f
-#  byte[2] NCI_MSG_FRAME_LOG = 0x9
-#  byte[3] 2
-#  byte[4] 0=turn off RF frame logging; 1=turn on
-#  byte[5] 0=turn off SWP frame logging; 1=turn on
-#  NFA_DM_START_UP_VSC_CFG={05:2F:09:02:01:01}
-
-###############################################################################
-# Antenna Configuration - This data is used when setting 0xC8 config item
-# at startup (before discovery is started).  If not used, no value is sent.
-#
-# The settings for this value are documented here:
-# http://wcgbu.broadcom.com/wpan/PM/Project%20Document%20Library/bcm20791B0/
-#   Design/Doc/PHY%20register%20settings/BCM20791-B2-1027-02_PHY_Recommended_Reg_Settings.xlsx
-# This document is maintained by Paul Forshaw.
-#
-# The values marked as ?? should be tweaked per antenna or customer/app:
-# {20:C8:1E:06:??:00:??:??:??:00:??:24:00:1C:00:75:00:77:00:76:00:1C:00:03:00:0A:00:??:01:00:00:40:04}
-# array[0] = 0x20 is length of the payload from array[1] to the end
-# array[1] = 0xC8 is PREINIT_DSP_CFG
-#PREINIT_DSP_CFG={20:C8:1E:06:1F:00:0F:03:3C:00:04:24:00:1C:00:75:00:77:00:76:00:1C:00:03:00:0A:00:48:01:00:00:40:04}
-
-###############################################################################
-# Configure crystal frequency when internal LPO can't detect the frequency.
-#XTAL_FREQUENCY=0
-###############################################################################
-# Configure the default Destination Gate used by HCI (the default is 4, which
-# is the ETSI loopback gate.
-NFA_HCI_DEFAULT_DEST_GATE=0xF0
-
-###############################################################################
-# Configure the single default SE to use.  The default is to use the first
-# SE that is detected by the stack.  This value might be used when the phone
-# supports multiple SE (e.g. 0xF3 and 0xF4) but you want to force it to use
-# one of them (e.g. 0xF4).
-#ACTIVE_SE=0xF3
-
-###############################################################################
-# Configure the default NfcA/IsoDep techology and protocol route. Can be
-# either a secure element (e.g. 0xF4) or the host (0x00)
-#DEFAULT_ISODEP_ROUTE=0x00
-
-###############################################################################
-# Configure the NFC Extras to open and use a static pipe.  If the value is
-# not set or set to 0, then the default is use a dynamic pipe based on a
-# destination gate (see NFA_HCI_DEFAULT_DEST_GATE).  Note there is a value
-# for each UICC (where F3="UICC0" and F4="UICC1")
-#NFA_HCI_STATIC_PIPE_ID_F3=0x70
-#NFA_HCI_STATIC_PIPE_ID_01=0x19
-NFA_HCI_STATIC_PIPE_ID_C0=0x19
-###############################################################################
-# When disconnecting from Oberthur secure element, perform a warm-reset of
-# the secure element to deselect the applet.
-# The default hex value of the command is 0x3.  If this variable is undefined,
-# then this feature is not used.
-#OBERTHUR_WARM_RESET_COMMAND=0x03
-
-###############################################################################
-# Force UICC to only listen to the following technology(s).
-# The bits are defined as tNFA_TECHNOLOGY_MASK in nfa_api.h.
-# Default is NFA_TECHNOLOGY_MASK_A | NFA_TECHNOLOGY_MASK_B | NFA_TECHNOLOGY_MASK_F
-UICC_LISTEN_TECH_MASK=0x07
-
-###############################################################################
-# Force HOST listen feature enable or disable.
-# 0: Disable
-# 1: Enable
-HOST_LISTEN_ENABLE=0x01
-
-###############################################################################
-# Enabling/Disabling Forward functionality
-# Disable           0x00
-# Enable            0x01
-NXP_FWD_FUNCTIONALITY_ENABLE=0x01
-
-###############################################################################
-# Allow UICC to be powered off if there is no traffic.
-# Timeout is in ms. If set to 0, then UICC will not be powered off.
-#UICC_IDLE_TIMEOUT=30000
-UICC_IDLE_TIMEOUT=0
-
-###############################################################################
-# AID for Empty Select command
-# If specified, this AID will be substituted when an Empty SELECT command is
-# detected.  The first byte is the length of the AID.  Maximum length is 16.
-AID_FOR_EMPTY_SELECT={08:A0:00:00:01:51:00:00:00}
-###############################################################################
-# Maximum Number of Credits to be allowed by the NFCC
-#   This value overrides what the NFCC specifices allowing the host to have
-#   the control to work-around transport limitations.  If this value does
-#   not exist or is set to 0, the NFCC will provide the number of credits.
-MAX_RF_DATA_CREDITS=1
-
-###############################################################################
-# This setting allows you to disable registering the T4t Virtual SE that causes
-# the NFCC to send PPSE requests to the DH.
-# The default setting is enabled (i.e. T4t Virtual SE is registered).
-#REGISTER_VIRTUAL_SE=1
-
-###############################################################################
-# When screen is turned off, specify the desired power state of the controller.
-# 0: power-off-sleep state; DEFAULT
-# 1: full-power state
-# 2: screen-off card-emulation (CE4/CE3/CE1 modes are used)
-SCREEN_OFF_POWER_STATE=1
-
-###############################################################################
-# Firmware patch file
-#  If the value is not set then patch download is disabled.
-#FW_PATCH="/vendor/firmware/bcm2079x_firmware.ncd"
-
-###############################################################################
-# Firmware pre-patch file (sent before the above patch file)
-#  If the value is not set then pre-patch is not used.
-#FW_PRE_PATCH="/vendor/firmware/bcm2079x_pre_firmware.ncd"
-
-###############################################################################
-# Firmware patch format
-#   1 = HCD
-#   2 = NCD (default)
-#NFA_CONFIG_FORMAT=2
-
-###############################################################################
-# SPD Debug mode
-#  If set to 1, any failure of downloading a patch will trigger a hard-stop
-#SPD_DEBUG=0
-
-###############################################################################
-# SPD Max Retry Count
-#  The number of attempts to download a patch before giving up (defualt is 3).
-#  Note, this resets after a power-cycle.
-#SPD_MAX_RETRY_COUNT=3
-
-###############################################################################
-# transport driver
-#
-# TRANSPORT_DRIVER=<driver>
-#
-#  where <driver> can be, for example:
-#    "/dev/ttyS"        (UART)
-#    "/dev/bcmi2cnfc"   (I2C)
-#    "hwtun"            (HW Tunnel)
-#    "/dev/bcmspinfc"   (SPI)
-#    "/dev/btusb0"      (BT USB)
-#TRANSPORT_DRIVER="/dev/bcm2079x-i2c"
-
-###############################################################################
-# power control driver
-# Specify a kernel driver that support ioctl commands to control NFC_EN and
-# NFC_WAKE gpio signals.
-#
-# POWER_CONTRL_DRIVER=<driver>
-#  where <driver> can be, for example:
-#    "/dev/nfcpower"
-#    "/dev/bcmi2cnfc"   (I2C)
-#    "/dev/bcmspinfc"   (SPI)
-#    i2c and spi driver may be used to control NFC_EN and NFC_WAKE signal
-#POWER_CONTROL_DRIVER="/dev/bcm2079x-i2c"
-
-###############################################################################
-# I2C transport driver options
-# Mako does not support 10-bit I2C addresses
-# Revert to 7-bit address
-#BCMI2CNFC_ADDRESS=0x77
-
-###############################################################################
-# I2C transport driver try to read multiple packets in read() if data is available
-# remove the comment below to enable this feature
-#READ_MULTIPLE_PACKETS=1
-
-###############################################################################
-# SPI transport driver options
-#SPI_NEGOTIATION={0A:F0:00:01:00:00:00:FF:FF:00:00}
-
-###############################################################################
-# UART transport driver options
-#
-# PORT=1,2,3,...
-# BAUD=115200, 19200, 9600, 4800,
-# DATABITS=8, 7, 6, 5
-# PARITY="even" | "odd" | "none"
-# STOPBITS="0" | "1" | "1.5" | "2"
-
-#UART_PORT=2
-#UART_BAUD=115200
-#UART_DATABITS=8
-#UART_PARITY="none"
-#UART_STOPBITS="1"
-
-###############################################################################
-# Insert a delay in microseconds per byte after a write to NFCC.
-# after writing a block of data to the NFCC, delay this an amopunt of time before
-# writing next block of data.  the delay is calculated as below
-#   NFC_WRITE_DELAY * (number of byte written) / 1000 milliseconds
-# e.g. after 259 bytes is written, delay (259 * 20 / 1000) 5 ms before next write
-#NFC_WRITE_DELAY=20
-
-###############################################################################
-# Maximum Number of Credits to be allowed by the NFCC
-#   This value overrides what the NFCC specifices allowing the host to have
-#   the control to work-around transport limitations.  If this value does
-#   not exist or is set to 0, the NFCC will provide the number of credits.
-MAX_RF_DATA_CREDITS=1
-
-###############################################################################
-# Default poll duration (in ms)
-#  The defualt is 500ms if not set (see nfc_target.h)
-#NFA_DM_DISC_DURATION_POLL=333
-###############################################################################
-# Antenna Configuration - This data is used when setting 0xC8 config item
-# at startup (before discovery is started).  If not used, no value is sent.
-#
-# The settings for this value are documented here:
-# http://wcgbu.broadcom.com/wpan/PM/Project%20Document%20Library/bcm20791B0/
-#   Design/Doc/PHY%20register%20settings/BCM20791-B2-1027-02_PHY_Recommended_Reg_Settings.xlsx
-# This document is maintained by Paul Forshaw.
-#
-# The values marked as ?? should be tweaked per antenna or customer/app:
-# {20:C8:1E:06:??:00:??:??:??:00:??:24:00:1C:00:75:00:77:00:76:00:1C:00:03:00:0A:00:??:01:00:00:40:04}
-# array[0] = 0x20 is length of the payload from array[1] to the end
-# array[1] = 0xC8 is PREINIT_DSP_CFG
-#PREINIT_DSP_CFG={20:C8:1E:06:1F:00:0F:03:3C:00:04:24:00:1C:00:75:00:77:00:76:00:1C:00:03:00:0A:00:48:01:00:00:40:04}
-
-###############################################################################
-# Choose the presence-check algorithm for type-4 tag.  If not defined, the default value is 1.
-# 0  NFA_RW_PRES_CHK_DEFAULT; Let stack selects an algorithm
-# 1  NFA_RW_PRES_CHK_I_BLOCK; ISO-DEP protocol's empty I-block
-# 2  NFA_RW_PRES_CHK_RESET; Deactivate to Sleep, then re-activate
-# 3  NFA_RW_PRES_CHK_RB_CH0; Type-4 tag protocol's ReadBinary command on channel 0
-# 4  NFA_RW_PRES_CHK_RB_CH3; Type-4 tag protocol's ReadBinary command on channel 3
-PRESENCE_CHECK_ALGORITHM=1
-
-###############################################################################
-# Force tag polling for the following technology(s).
-# The bits are defined as tNFA_TECHNOLOGY_MASK in nfa_api.h.
-# Default is NFA_TECHNOLOGY_MASK_A | NFA_TECHNOLOGY_MASK_B |
-#            NFA_TECHNOLOGY_MASK_F | NFA_TECHNOLOGY_MASK_ISO15693 |
-#            NFA_TECHNOLOGY_MASK_B_PRIME | NFA_TECHNOLOGY_MASK_KOVIO |
-#            NFA_TECHNOLOGY_MASK_A_ACTIVE | NFA_TECHNOLOGY_MASK_F_ACTIVE.
-#
-# Notable bits:
-# NFA_TECHNOLOGY_MASK_A             0x01    /* NFC Technology A             */
-# NFA_TECHNOLOGY_MASK_B             0x02    /* NFC Technology B             */
-# NFA_TECHNOLOGY_MASK_F             0x04    /* NFC Technology F             */
-# NFA_TECHNOLOGY_MASK_ISO15693      0x08    /* Proprietary Technology       */
-# NFA_TECHNOLOGY_MASK_KOVIO         0x20    /* Proprietary Technology       */
-# NFA_TECHNOLOGY_MASK_A_ACTIVE      0x40    /* NFC Technology A active mode */
-# NFA_TECHNOLOGY_MASK_F_ACTIVE      0x80    /* NFC Technology F active mode */
-POLLING_TECH_MASK=0xEF
-
-###############################################################################
-# Force P2P to only listen for the following technology(s).
-# The bits are defined as tNFA_TECHNOLOGY_MASK in nfa_api.h.
-# Default is NFA_TECHNOLOGY_MASK_A | NFA_TECHNOLOGY_MASK_F |
-#            NFA_TECHNOLOGY_MASK_A_ACTIVE | NFA_TECHNOLOGY_MASK_F_ACTIVE
-#
-# Notable bits:
-# NFA_TECHNOLOGY_MASK_A             0x01    /* NFC Technology A             */
-# NFA_TECHNOLOGY_MASK_F             0x04    /* NFC Technology F             */
-# NFA_TECHNOLOGY_MASK_A_ACTIVE      0x40    /* NFC Technology A active mode */
-# NFA_TECHNOLOGY_MASK_F_ACTIVE      0x80    /* NFC Technology F active mode */
-P2P_LISTEN_TECH_MASK=0xC5
-
-PRESERVE_STORAGE=0x01
-
-###############################################################################
-# Override the stack default for NFA_EE_MAX_EE_SUPPORTED set in nfc_target.h.
-# The value is set to 3 by default as it assumes we will discover 0xF2,
-# 0xF3, and 0xF4. If a platform will exclude and SE, this value can be reduced
-# so that the stack will not wait any longer than necessary.
-
-# Maximum EE supported number
-# NXP PN547C2 0x02
-# NXP PN65T 0x03
-# NXP PN548C2 0x02
-# NXP PN66T 0x03
-NFA_MAX_EE_SUPPORTED=0x02
-
-###############################################################################
-# NCI Hal Module name
-NCI_HAL_MODULE="nfc_nci"
-
-##############################################################################
-# Deactivate notification wait time out in seconds used in ETSI Reader mode
-# 0 - Infinite wait
-#NFA_DM_DISC_NTF_TIMEOUT=0
-
-###############################################################################
-# AID_MATCHING constants
-# AID_MATCHING_EXACT_ONLY 0x00
-# AID_MATCHING_EXACT_OR_PREFIX 0x01
-# AID_MATCHING_PREFIX_ONLY 0x02
-AID_MATCHING_MODE=0x01
-
-###############################################################################
-# Default Secure Element route id
-DEFAULT_OFFHOST_ROUTE=0x02
-
-###############################################################################
-# Vendor Specific Proprietary Protocol & Discovery Configuration
-# Set to 0xFF if unsupported
-#  byte[0] NCI_PROTOCOL_18092_ACTIVE
-#  byte[1] NCI_PROTOCOL_B_PRIME
-#  byte[2] NCI_PROTOCOL_DUAL
-#  byte[3] NCI_PROTOCOL_15693
-#  byte[4] NCI_PROTOCOL_KOVIO
-#  byte[5] NCI_PROTOCOL_MIFARE
-#  byte[6] NCI_DISCOVERY_TYPE_POLL_KOVIO
-#  byte[7] NCI_DISCOVERY_TYPE_POLL_B_PRIME
-#  byte[8] NCI_DISCOVERY_TYPE_LISTEN_B_PRIME
-NFA_PROPRIETARY_CFG={05:FF:FF:06:81:80:70:FF:FF}
-
-###############################################################################
-# Bail out mode
-#  If set to 1, NFCC is using bail out mode for either Type A or Type B poll.
-NFA_POLL_BAIL_OUT_MODE=0x01
diff --git a/halimpl/pn54x/libnfc-brcm_NCI2_0.conf b/halimpl/pn54x/libnfc-brcm_NCI2_0.conf
deleted file mode 100644
index a4d3290..0000000
--- a/halimpl/pn54x/libnfc-brcm_NCI2_0.conf
+++ /dev/null
@@ -1,407 +0,0 @@
-###################### Start of libnfc-brcm.conf #######################
-
-###############################################################################
-# Application options
-APPL_TRACE_LEVEL=0xFF
-PROTOCOL_TRACE_LEVEL=0xFFFFFFFF
-
-###############################################################################
-# performance measurement
-# Change this setting to control how often USERIAL log the performance (throughput)
-# data on read/write/poll
-# defailt is to log performance dara for every 100 read or write
-#REPORT_PERFORMANCE_MEASURE=100
-
-###############################################################################
-# File used for NFA storage
-NFA_STORAGE="/data/nfc"
-
-###############################################################################
-# Snooze Mode Settings
-#
-#  By default snooze mode is enabled.  Set SNOOZE_MODE_CFG byte[0] to 0
-#  to disable.
-#
-#  If SNOOZE_MODE_CFG is not provided, the default settings are used:
-#  They are as follows:
-#       8             Sleep Mode (0=Disabled 1=UART 8=SPI/I2C)
-#       0             Idle Threshold Host
-#       0             Idle Threshold HC
-#       0             NFC Wake active mode (0=ActiveLow 1=ActiveHigh)
-#       1             Host Wake active mode (0=ActiveLow 1=ActiveHigh)
-#
-#SNOOZE_MODE_CFG={08:00:00:00:01}
-
-###############################################################################
-# Insert a delay in milliseconds after NFC_WAKE and before write to NFCC
-#NFC_WAKE_DELAY=20
-
-###############################################################################
-# Various Delay settings (in ms) used in USERIAL
-#  POWER_ON_DELAY
-#    Delay after turning on chip, before writing to transport (default 300)
-#  PRE_POWER_OFF_DELAY
-#    Delay after deasserting NFC-Wake before turn off chip (default 0)
-#  POST_POWER_OFF_DELAY
-#    Delay after turning off chip, before USERIAL_close returns (default 0)
-#
-#POWER_ON_DELAY=300
-#PRE_POWER_OFF_DELAY=0
-#POST_POWER_OFF_DELAY=0
-
-###############################################################################
-# Maximum time (ms) to wait for RESET NTF after setting REG_PU to high
-# The default is 1000.
-#NFCC_ENABLE_TIMEOUT=0
-
-###############################################################################
-# LPTD mode configuration
-#  byte[0] is the length of the remaining bytes in this value
-#     if set to 0, LPTD params will NOT be sent to NFCC (i.e. disabled).
-#  byte[1] is the param id it should be set to B9.
-#  byte[2] is the length of the LPTD parameters
-#  byte[3] indicates if LPTD is enabled
-#     if set to 0, LPTD will be disabled (parameters will still be sent).
-#  byte[4-n] are the LPTD parameters.
-#  By default, LPTD is enabled and default settings are used.
-#  See nfc_hal_dm_cfg.c for defaults
-#LPTD_CFG={23:B9:21:01:02:FF:FF:04:A0:0F:40:00:80:02:02:10:00:00:00:31:0C:30:00:00:00:00:00:00:00:00:00:00:00:00:00:00}
-
-###############################################################################
-# Startup Configuration (100 bytes maximum)
-#
-# For the 0xCA parameter, byte[9] (marked by 'AA') is for UICC0, and byte[10] (marked by BB) is
-#    for UICC1.  The values are defined as:
-#   0 : UICCx only supports ISO_DEP in low power mode.
-#   2 : UICCx only supports Mifare in low power mode.
-#   3 : UICCx supports both ISO_DEP and Mifare in low power mode.
-#
-#                                                                          AA BB
-#NFA_DM_START_UP_CFG={1F:CB:01:01:A5:01:01:CA:14:00:00:00:00:06:E8:03:00:00:00:00:00:00:00:00:00:00:00:00:00:80:01:01}
-
-###############################################################################
-# Startup Vendor Specific Configuration (100 bytes maximum);
-#  byte[0] TLV total len = 0x5
-#  byte[1] NCI_MTS_CMD|NCI_GID_PROP = 0x2f
-#  byte[2] NCI_MSG_FRAME_LOG = 0x9
-#  byte[3] 2
-#  byte[4] 0=turn off RF frame logging; 1=turn on
-#  byte[5] 0=turn off SWP frame logging; 1=turn on
-#  NFA_DM_START_UP_VSC_CFG={05:2F:09:02:01:01}
-
-###############################################################################
-# Antenna Configuration - This data is used when setting 0xC8 config item
-# at startup (before discovery is started).  If not used, no value is sent.
-#
-# The settings for this value are documented here:
-# http://wcgbu.broadcom.com/wpan/PM/Project%20Document%20Library/bcm20791B0/
-#   Design/Doc/PHY%20register%20settings/BCM20791-B2-1027-02_PHY_Recommended_Reg_Settings.xlsx
-# This document is maintained by Paul Forshaw.
-#
-# The values marked as ?? should be tweaked per antenna or customer/app:
-# {20:C8:1E:06:??:00:??:??:??:00:??:24:00:1C:00:75:00:77:00:76:00:1C:00:03:00:0A:00:??:01:00:00:40:04}
-# array[0] = 0x20 is length of the payload from array[1] to the end
-# array[1] = 0xC8 is PREINIT_DSP_CFG
-#PREINIT_DSP_CFG={20:C8:1E:06:1F:00:0F:03:3C:00:04:24:00:1C:00:75:00:77:00:76:00:1C:00:03:00:0A:00:48:01:00:00:40:04}
-
-###############################################################################
-# Configure crystal frequency when internal LPO can't detect the frequency.
-#XTAL_FREQUENCY=0
-###############################################################################
-# Configure the default Destination Gate used by HCI (the default is 4, which
-# is the ETSI loopback gate.
-NFA_HCI_DEFAULT_DEST_GATE=0xF0
-
-###############################################################################
-# Configure the single default SE to use.  The default is to use the first
-# SE that is detected by the stack.  This value might be used when the phone
-# supports multiple SE (e.g. 0xF3 and 0xF4) but you want to force it to use
-# one of them (e.g. 0xF4).
-#ACTIVE_SE=0xF3
-
-###############################################################################
-# Configure the default NfcA/IsoDep techology and protocol route. Can be
-# either a secure element (e.g. 0xF4) or the host (0x00)
-#DEFAULT_ISODEP_ROUTE=0x00
-
-###############################################################################
-# Configure the NFC Extras to open and use a static pipe.  If the value is
-# not set or set to 0, then the default is use a dynamic pipe based on a
-# destination gate (see NFA_HCI_DEFAULT_DEST_GATE).  Note there is a value
-# for each UICC (where F3="UICC0" and F4="UICC1")
-#NFA_HCI_STATIC_PIPE_ID_F3=0x70
-#NFA_HCI_STATIC_PIPE_ID_01=0x19
-NFA_HCI_STATIC_PIPE_ID_C0=0x19
-###############################################################################
-# When disconnecting from Oberthur secure element, perform a warm-reset of
-# the secure element to deselect the applet.
-# The default hex value of the command is 0x3.  If this variable is undefined,
-# then this feature is not used.
-#OBERTHUR_WARM_RESET_COMMAND=0x03
-
-###############################################################################
-# Force UICC to only listen to the following technology(s).
-# The bits are defined as tNFA_TECHNOLOGY_MASK in nfa_api.h.
-# Default is NFA_TECHNOLOGY_MASK_A | NFA_TECHNOLOGY_MASK_B | NFA_TECHNOLOGY_MASK_F
-UICC_LISTEN_TECH_MASK=0x07
-
-###############################################################################
-# Force HOST listen feature enable or disable.
-# 0: Disable
-# 1: Enable
-HOST_LISTEN_ENABLE=0x01
-
-###############################################################################
-# Enabling/Disabling Forward functionality
-# Disable           0x00
-# Enable            0x01
-NXP_FWD_FUNCTIONALITY_ENABLE=0x01
-
-###############################################################################
-# Allow UICC to be powered off if there is no traffic.
-# Timeout is in ms. If set to 0, then UICC will not be powered off.
-#UICC_IDLE_TIMEOUT=30000
-UICC_IDLE_TIMEOUT=0
-
-###############################################################################
-# AID for Empty Select command
-# If specified, this AID will be substituted when an Empty SELECT command is
-# detected.  The first byte is the length of the AID.  Maximum length is 16.
-AID_FOR_EMPTY_SELECT={08:A0:00:00:01:51:00:00:00}
-###############################################################################
-# Maximum Number of Credits to be allowed by the NFCC
-#   This value overrides what the NFCC specifices allowing the host to have
-#   the control to work-around transport limitations.  If this value does
-#   not exist or is set to 0, the NFCC will provide the number of credits.
-MAX_RF_DATA_CREDITS=1
-
-###############################################################################
-# This setting allows you to disable registering the T4t Virtual SE that causes
-# the NFCC to send PPSE requests to the DH.
-# The default setting is enabled (i.e. T4t Virtual SE is registered).
-#REGISTER_VIRTUAL_SE=1
-
-###############################################################################
-# When screen is turned off, specify the desired power state of the controller.
-# 0: power-off-sleep state; DEFAULT
-# 1: full-power state
-# 2: screen-off card-emulation (CE4/CE3/CE1 modes are used)
-SCREEN_OFF_POWER_STATE=1
-
-###############################################################################
-# Firmware patch file
-#  If the value is not set then patch download is disabled.
-#FW_PATCH="/vendor/firmware/bcm2079x_firmware.ncd"
-
-###############################################################################
-# Firmware pre-patch file (sent before the above patch file)
-#  If the value is not set then pre-patch is not used.
-#FW_PRE_PATCH="/vendor/firmware/bcm2079x_pre_firmware.ncd"
-
-###############################################################################
-# Firmware patch format
-#   1 = HCD
-#   2 = NCD (default)
-#NFA_CONFIG_FORMAT=2
-
-###############################################################################
-# SPD Debug mode
-#  If set to 1, any failure of downloading a patch will trigger a hard-stop
-#SPD_DEBUG=0
-
-###############################################################################
-# SPD Max Retry Count
-#  The number of attempts to download a patch before giving up (defualt is 3).
-#  Note, this resets after a power-cycle.
-#SPD_MAX_RETRY_COUNT=3
-
-###############################################################################
-# transport driver
-#
-# TRANSPORT_DRIVER=<driver>
-#
-#  where <driver> can be, for example:
-#    "/dev/ttyS"        (UART)
-#    "/dev/bcmi2cnfc"   (I2C)
-#    "hwtun"            (HW Tunnel)
-#    "/dev/bcmspinfc"   (SPI)
-#    "/dev/btusb0"      (BT USB)
-#TRANSPORT_DRIVER="/dev/bcm2079x-i2c"
-
-###############################################################################
-# power control driver
-# Specify a kernel driver that support ioctl commands to control NFC_EN and
-# NFC_WAKE gpio signals.
-#
-# POWER_CONTRL_DRIVER=<driver>
-#  where <driver> can be, for example:
-#    "/dev/nfcpower"
-#    "/dev/bcmi2cnfc"   (I2C)
-#    "/dev/bcmspinfc"   (SPI)
-#    i2c and spi driver may be used to control NFC_EN and NFC_WAKE signal
-#POWER_CONTROL_DRIVER="/dev/bcm2079x-i2c"
-
-###############################################################################
-# I2C transport driver options
-# Mako does not support 10-bit I2C addresses
-# Revert to 7-bit address
-#BCMI2CNFC_ADDRESS=0x77
-
-###############################################################################
-# I2C transport driver try to read multiple packets in read() if data is available
-# remove the comment below to enable this feature
-#READ_MULTIPLE_PACKETS=1
-
-###############################################################################
-# SPI transport driver options
-#SPI_NEGOTIATION={0A:F0:00:01:00:00:00:FF:FF:00:00}
-
-###############################################################################
-# UART transport driver options
-#
-# PORT=1,2,3,...
-# BAUD=115200, 19200, 9600, 4800,
-# DATABITS=8, 7, 6, 5
-# PARITY="even" | "odd" | "none"
-# STOPBITS="0" | "1" | "1.5" | "2"
-
-#UART_PORT=2
-#UART_BAUD=115200
-#UART_DATABITS=8
-#UART_PARITY="none"
-#UART_STOPBITS="1"
-
-###############################################################################
-# Insert a delay in microseconds per byte after a write to NFCC.
-# after writing a block of data to the NFCC, delay this an amopunt of time before
-# writing next block of data.  the delay is calculated as below
-#   NFC_WRITE_DELAY * (number of byte written) / 1000 milliseconds
-# e.g. after 259 bytes is written, delay (259 * 20 / 1000) 5 ms before next write
-#NFC_WRITE_DELAY=20
-
-###############################################################################
-# Maximum Number of Credits to be allowed by the NFCC
-#   This value overrides what the NFCC specifices allowing the host to have
-#   the control to work-around transport limitations.  If this value does
-#   not exist or is set to 0, the NFCC will provide the number of credits.
-MAX_RF_DATA_CREDITS=1
-
-###############################################################################
-# Default poll duration (in ms)
-#  The defualt is 500ms if not set (see nfc_target.h)
-#NFA_DM_DISC_DURATION_POLL=333
-###############################################################################
-# Antenna Configuration - This data is used when setting 0xC8 config item
-# at startup (before discovery is started).  If not used, no value is sent.
-#
-# The settings for this value are documented here:
-# http://wcgbu.broadcom.com/wpan/PM/Project%20Document%20Library/bcm20791B0/
-#   Design/Doc/PHY%20register%20settings/BCM20791-B2-1027-02_PHY_Recommended_Reg_Settings.xlsx
-# This document is maintained by Paul Forshaw.
-#
-# The values marked as ?? should be tweaked per antenna or customer/app:
-# {20:C8:1E:06:??:00:??:??:??:00:??:24:00:1C:00:75:00:77:00:76:00:1C:00:03:00:0A:00:??:01:00:00:40:04}
-# array[0] = 0x20 is length of the payload from array[1] to the end
-# array[1] = 0xC8 is PREINIT_DSP_CFG
-#PREINIT_DSP_CFG={20:C8:1E:06:1F:00:0F:03:3C:00:04:24:00:1C:00:75:00:77:00:76:00:1C:00:03:00:0A:00:48:01:00:00:40:04}
-
-###############################################################################
-# Choose the presence-check algorithm for type-4 tag.  If not defined, the default value is 1.
-# 0  NFA_RW_PRES_CHK_DEFAULT; Let stack selects an algorithm
-# 1  NFA_RW_PRES_CHK_I_BLOCK; ISO-DEP protocol's empty I-block
-# 2  NFA_RW_PRES_CHK_RESET; Deactivate to Sleep, then re-activate
-# 3  NFA_RW_PRES_CHK_RB_CH0; Type-4 tag protocol's ReadBinary command on channel 0
-# 4  NFA_RW_PRES_CHK_RB_CH3; Type-4 tag protocol's ReadBinary command on channel 3
-# 5  NFA_RW_PRES_CHK_ISO_DEP_NAK; Type - 4 tag protocol iso-dep nak presence check
-#    command is sent waiting for rsp and ntf.
-PRESENCE_CHECK_ALGORITHM=5
-
-###############################################################################
-# Force tag polling for the following technology(s).
-# The bits are defined as tNFA_TECHNOLOGY_MASK in nfa_api.h.
-# Default is NFA_TECHNOLOGY_MASK_A | NFA_TECHNOLOGY_MASK_B |
-#            NFA_TECHNOLOGY_MASK_F | NFA_TECHNOLOGY_MASK_ISO15693 |
-#            NFA_TECHNOLOGY_MASK_B_PRIME | NFA_TECHNOLOGY_MASK_KOVIO |
-#NFA_TECHNOLOGY_MASK_ACTIVE
-#
-# Notable bits:
-# NFA_TECHNOLOGY_MASK_A             0x01    /* NFC Technology A             */
-# NFA_TECHNOLOGY_MASK_B             0x02    /* NFC Technology B             */
-# NFA_TECHNOLOGY_MASK_F             0x04    /* NFC Technology F             */
-# NFA_TECHNOLOGY_MASK_ISO15693      0x08    /* Proprietary Technology       */
-# NFA_TECHNOLOGY_MASK_KOVIO         0x20    /* Proprietary Technology       */
-# NFA_TECHNOLOGY_MASK_ACTIVE        0x40    /* NFC Technology Active        */
-POLLING_TECH_MASK=0x6F
-
-###############################################################################
-# Force P2P to only listen for the following technology(s).
-# The bits are defined as tNFA_TECHNOLOGY_MASK in nfa_api.h.
-# Default is NFA_TECHNOLOGY_MASK_A | NFA_TECHNOLOGY_MASK_F |
-#NFA_TECHNOLOGY_MASK_ACTIVE
-#
-# Notable bits:
-# NFA_TECHNOLOGY_MASK_A             0x01    /* NFC Technology A             */
-# NFA_TECHNOLOGY_MASK_F             0x04    /* NFC Technology F             */
-#NFA_TECHNOLOGY_MASK_ACTIVE         0x40    /* NFC Technology Active        */
-P2P_LISTEN_TECH_MASK=0x45
-
-PRESERVE_STORAGE=0x01
-
-###############################################################################
-# Override the stack default for NFA_EE_MAX_EE_SUPPORTED set in nfc_target.h.
-# The value is set to 3 by default as it assumes we will discover 0xF2,
-# 0xF3, and 0xF4. If a platform will exclude and SE, this value can be reduced
-# so that the stack will not wait any longer than necessary.
-
-# Maximum EE supported number
-# NXP PN547C2 0x02
-# NXP PN65T 0x03
-# NXP PN548C2 0x02
-# NXP PN66T 0x03
-NFA_MAX_EE_SUPPORTED=0x02
-
-###############################################################################
-# NCI Hal Module name
-NCI_HAL_MODULE="nfc_nci"
-
-##############################################################################
-# Deactivate notification wait time out in seconds used in ETSI Reader mode
-# 0 - Infinite wait
-#NFA_DM_DISC_NTF_TIMEOUT=0
-
-###############################################################################
-# AID_MATCHING constants
-# AID_MATCHING_EXACT_ONLY 0x00
-# AID_MATCHING_EXACT_OR_PREFIX 0x01
-# AID_MATCHING_PREFIX_ONLY 0x02
-# AID_MATCHING_EXACT_OR_SUBSET_OR_PREFIX 0x03
-AID_MATCHING_MODE=0x03
-
-###############################################################################
-# Default Secure Element route id
-DEFAULT_OFFHOST_ROUTE=0x02
-
-###############################################################################
-# Vendor Specific Proprietary Protocol & Discovery Configuration
-# Set to 0xFF if unsupported
-#  byte[0] NCI_PROTOCOL_18092_ACTIVE
-#  byte[1] NCI_PROTOCOL_B_PRIME
-#  byte[2] NCI_PROTOCOL_DUAL
-#  byte[3] NCI_PROTOCOL_15693
-#  byte[4] NCI_PROTOCOL_KOVIO
-#  byte[5] NCI_PROTOCOL_MIFARE
-#  byte[6] NCI_DISCOVERY_TYPE_POLL_KOVIO
-#  byte[7] NCI_DISCOVERY_TYPE_POLL_B_PRIME
-#  byte[8] NCI_DISCOVERY_TYPE_LISTEN_B_PRIME
-NFA_PROPRIETARY_CFG={05:FF:FF:06:81:80:70:FF:FF}
-
-###############################################################################
-# Bail out mode
-#  If set to 1, NFCC is using bail out mode for either Type A or Type B poll.
-NFA_POLL_BAIL_OUT_MODE=0x01
-###############################################################################
-# Enable/Disable Block Route feature.
-# Block Route will restrict routing to first matched rule
-# Block Route enable   0x01
-# Block Route disable  0x00
-NFA_BLOCK_ROUTE=0x00
diff --git a/halimpl/pn54x/libnfc-nxp-PN547C2_example.conf b/halimpl/pn54x/libnfc-nxp-PN547C2_example.conf
deleted file mode 100644
index 913030f..0000000
--- a/halimpl/pn54x/libnfc-nxp-PN547C2_example.conf
+++ /dev/null
@@ -1,224 +0,0 @@
-## This file is used by NFC NXP NCI HAL(external/libnfc-nci/halimpl/pn54x)
-## and NFC Service Java Native Interface Extensions (packages/apps/Nfc/nci/jni/extns/pn54x)
-
-###############################################################################
-# Application options
-# Logging Levels
-# NXPLOG_DEFAULT_LOGLEVEL    0x01
-# ANDROID_LOG_DEBUG          0x03
-# ANDROID_LOG_WARN           0x02
-# ANDROID_LOG_ERROR          0x01
-# ANDROID_LOG_SILENT         0x00
-#
-NXPLOG_EXTNS_LOGLEVEL=0x03
-NXPLOG_NCIHAL_LOGLEVEL=0x03
-NXPLOG_NCIX_LOGLEVEL=0x03
-NXPLOG_NCIR_LOGLEVEL=0x03
-NXPLOG_FWDNLD_LOGLEVEL=0x03
-NXPLOG_TML_LOGLEVEL=0x03
-
-###############################################################################
-# Nfc Device Node name
-NXP_NFC_DEV_NODE="/dev/pn54x"
-
-###############################################################################
-# Extension for Mifare reader enable
-MIFARE_READER_ENABLE=0x01
-
-###############################################################################
-# Vzw Feature enable
-VZW_FEATURE_ENABLE=0x01
-###############################################################################
-# File name for Firmware
-NXP_FW_NAME="libpn547_fw.so"
-
-###############################################################################
-# System clock source selection configuration
-#define CLK_SRC_XTAL       1
-#define CLK_SRC_PLL        2
-
-NXP_SYS_CLK_SRC_SEL=0x01
-
-###############################################################################
-# System clock frequency selection configuration
-#define CLK_FREQ_13MHZ         1
-#define CLK_FREQ_19_2MHZ       2
-#define CLK_FREQ_24MHZ         3
-#define CLK_FREQ_26MHZ         4
-#define CLK_FREQ_38_4MHZ       5
-#define CLK_FREQ_52MHZ         6
-
-NXP_SYS_CLK_FREQ_SEL=0x00
-
-###############################################################################
-# The timeout value to be used for clock request acknowledgment
-# min value = 0x01 to max = 0x06
-
-NXP_SYS_CLOCK_TO_CFG=0x01
-
-###############################################################################
-# NXP proprietary settings
-NXP_ACT_PROP_EXTN={2F, 02, 00}
-
-###############################################################################
-# NFC forum profile settings
-NXP_NFC_PROFILE_EXTN={20, 02, 05, 01, A0, 44, 01, 00}
-
-###############################################################################
-# Standby enable settings
-#NXP_CORE_STANDBY={2F, 00, 01, 01}
-
-###############################################################################
-#Atonomous Mode
-#Enable 0x01
-#Disable 0x00
-NXP_CORE_SCRN_OFF_AUTONOMOUS_ENABLE=0x00
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-# NXP_RF_CONF_BLK_1={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_2={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_3={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_4={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_5={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_6={
-#}
-
-###############################################################################
-# Core configuration extensions
-# It includes
-# Wired mode settings A0ED, A0EE
-# Tag Detector A040, A041, A043
-# Low Power mode A007
-# Clock settings A002, A003
-# PbF settings A008
-NXP_CORE_CONF_EXTN={20, 02, 16, 04,
-    A0, EC, 01, 01,
-    A0, ED, 01, 01,
-    A0, 5E, 01, 01,
-    A0, 0D, 06, 3E, 2D, 15, 88, 15, 00
-    }
-
-###############################################################################
-# Core configuration rf field filter settings to enable set to 01 to disable set to 00 last bit
-NXP_CORE_RF_FIELD={ 20, 02, 05, 01, A0, 62, 01, 01
-        }
-
-###############################################################################
-# To enable i2c fragmentation set i2c fragmentation enable 0x01 to disable set to 0x00
-NXP_I2C_FRAGMENTATION_ENABLED=0x00
-
-###############################################################################
-# Core configuration settings
-NXP_CORE_CONF={ 20, 02, 2B, 0D,
-        28, 01, 00,
-        21, 01, 00,
-        30, 01, 08,
-        31, 01, 03,
-        33, 04, 01, 02, 03, 04,
-        54, 01, 06,
-        50, 01, 02,
-        5B, 01, 00,
-        60, 01, 0E,
-        80, 01, 01,
-        81, 01, 01,
-        82, 01, 0E,
-        18, 01, 01
-        }
-
-###############################################################################
-# Mifare Classic Key settings
-#NXP_CORE_MFCKEY_SETTING={20, 02, 25,04, A0, 51, 06, A0, A1, A2, A3, A4, A5,
-#                                     A0, 52, 06, D3, F7, D3, F7, D3, F7,
-#                                     A0, 53, 06, FF, FF, FF, FF, FF, FF,
-#                                     A0, 54, 06, 00, 00, 00, 00, 00, 00}
-
-###############################################################################
-# Default SE Options
-# No secure element 0x00
-# eSE               0x01
-# UICC              0x02
-
-NXP_DEFAULT_SE=0x02
-
-NXP_DEFAULT_NFCEE_TIMEOUT=0x06
-
-###############################################################################
-#Enable SWP full power mode when phone is power off
-NXP_SWP_FULL_PWR_ON=0x01
-
-###############################################################################
-#Set the default AID route Location :
-#This settings will be used when application does not set this parameter
-# host 0x00
-# eSE  0x01
-# UICC 0x02
-DEFAULT_AID_ROUTE=0x00
-
-###############################################################################
-#Set the Mifare Desfire route Location :
-#This settings will be used when application does not set this parameter
-# host 0x00
-# eSE  0x01
-# UICC 0x02
-DEFAULT_DESFIRE_ROUTE=0x02
-
-###############################################################################
-#Set the Mifare CLT route Location :
-#This settings will be used when application does not set this parameter
-# host 0x00
-# eSE  0x01
-# UICC 0x02
-DEFAULT_MIFARE_CLT_ROUTE=0x02
-
-##############################################################################
-#### Select the CHIP ####
-#PN547C2            0x01
-#PN65T              0x02
-#PN548AD            0x03
-#PN66T              0x04
-
-NXP_NFC_CHIP=0x01
-
-#Timeout in secs
-NXP_SWP_RD_START_TIMEOUT=0x0A
-#Timeout in secs
-NXP_SWP_RD_TAG_OP_TIMEOUT=0x01
-
-###############################################################################
-# CE when Screen state is locked
-# Disable           0x00
-# Enable            0x01
-NXP_CE_ROUTE_STRICT_DISABLE=0x01
-
-###############################################################################
-# AID Matching platform options
-# AID_MATCHING_L 0x01
-# AID_MATCHING_K 0x02
-AID_MATCHING_PLATFORM=0x01
diff --git a/halimpl/pn54x/libnfc-nxp-PN548AD_example.conf b/halimpl/pn54x/libnfc-nxp-PN548AD_example.conf
deleted file mode 100644
index 53121b2..0000000
--- a/halimpl/pn54x/libnfc-nxp-PN548AD_example.conf
+++ /dev/null
@@ -1,271 +0,0 @@
-## This file is used by NFC NXP NCI HAL(external/libnfc-nci/halimpl/pn54x)
-## and NFC Service Java Native Interface Extensions (packages/apps/Nfc/nci/jni/extns/pn54x)
-
-###############################################################################
-# Application options
-# Logging Levels
-# NXPLOG_DEFAULT_LOGLEVEL    0x01
-# ANDROID_LOG_DEBUG          0x03
-# ANDROID_LOG_WARN           0x02
-# ANDROID_LOG_ERROR          0x01
-# ANDROID_LOG_SILENT         0x00
-#
-NXPLOG_EXTNS_LOGLEVEL=0x03
-NXPLOG_NCIHAL_LOGLEVEL=0x03
-NXPLOG_NCIX_LOGLEVEL=0x03
-NXPLOG_NCIR_LOGLEVEL=0x03
-NXPLOG_FWDNLD_LOGLEVEL=0x03
-NXPLOG_TML_LOGLEVEL=0x03
-
-###############################################################################
-# Nfc Device Node name
-NXP_NFC_DEV_NODE="/dev/pn54x"
-
-###############################################################################
-# Extension for Mifare reader enable
-MIFARE_READER_ENABLE=0x01
-
-###############################################################################
-# Vzw Feature enable
-VZW_FEATURE_ENABLE=0x01
-
-###############################################################################
-# File name for Firmware
-NXP_FW_NAME="libpn548ad_fw.so"
-
-###############################################################################
-# System clock source selection configuration
-#define CLK_SRC_XTAL       1
-#define CLK_SRC_PLL        2
-
-NXP_SYS_CLK_SRC_SEL=0x02
-
-###############################################################################
-# System clock frequency selection configuration
-#define CLK_FREQ_13MHZ         1
-#define CLK_FREQ_19_2MHZ       2
-#define CLK_FREQ_24MHZ         3
-#define CLK_FREQ_26MHZ         4
-#define CLK_FREQ_38_4MHZ       5
-#define CLK_FREQ_52MHZ         6
-
-NXP_SYS_CLK_FREQ_SEL=0x02
-
-###############################################################################
-# The timeout value to be used for clock request acknowledgment
-# min value = 0x01 to max = 0x06
-
-NXP_SYS_CLOCK_TO_CFG=0x01
-
-###############################################################################
-# NXP proprietary settings
-NXP_ACT_PROP_EXTN={2F, 02, 00}
-
-###############################################################################
-# NFC forum profile settings
-NXP_NFC_PROFILE_EXTN={20, 02, 05, 01, A0, 44, 01, 00}
-
-###############################################################################
-# NFCC Configuration Control
-# Allow NFCC to manage RF Config       0x01
-# Don't allow NFCC to manage RF Config 0x00
-NXP_NFC_MERGE_RF_PARAMS={20, 02, 04, 01, 85, 01, 01}
-
-###############################################################################
-# Standby enable settings
-#NXP_CORE_STANDBY={2F, 00, 01, 01}
-
-###############################################################################
-# NXP TVDD configurations settings
-# Allow NFCC to configure External TVDD, There are currently three
-#configurations (1, 2 and 3) are supported, out of them only one can be
-#supported.
-
-NXP_EXT_TVDD_CFG=0x01
-
-###############################################################################
-#config1:SLALM, 3.3V for both RM and CM
-NXP_EXT_TVDD_CFG_1={20, 02, 0B, 02, A0, 66, 01, 00, A0, 0E, 03, 02, 09, 00}
-
-###############################################################################
-#config2: use DCDC in CE, use Tx_Pwr_Req, set CFG2 mode, SLALM,
-#monitoring 5V from DCDC, 4.7V for both RM and CM, DCDCWaitTime=4.2ms
-NXP_EXT_TVDD_CFG_2={20, 02, 0B, 02, A0, 66, 01, 00, A0, 0E, 03, 56, 64, 0A}
-
-###############################################################################
-#config3: use DCDC in CE, use Tx_Pwr_Req, SLALM, monitoring 5V from DCDC,
-#DCDCWaitTime=4.2ms
-NXP_EXT_TVDD_CFG_3={20, 02, 0B, 02, A0, 66, 01, 01, A0, 0E, 03, 52, 64, 0A}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_1={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_2={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_3={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_4={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_5={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_6={
-#}
-
-###############################################################################
-# Core configuration extensions
-# It includes
-# Wired mode settings A0ED, A0EE
-# Tag Detector A040, A041, A043
-# Low Power mode A007
-# Clock settings A002, A003
-# PbF settings A008
-NXP_CORE_CONF_EXTN={20, 02, 19, 06,
-    A0, EC, 01, 01,
-    A0, ED, 01, 00,
-    A0, 5E, 01, 01,
-    A0, 40, 01, 01,
-    A0, DD, 01, 2D,
-    A0, 96, 01, 01
-    }
-
-###############################################################################
-# Core configuration rf field filter settings to enable set to 01 to disable set to 00 last bit
-NXP_CORE_RF_FIELD={ 20, 02, 05, 01, A0, 62, 01, 01
-        }
-
-###############################################################################
-# To enable i2c fragmentation set i2c fragmentation enable 0x01 to disable set to 0x00
-NXP_I2C_FRAGMENTATION_ENABLED=0x00
-
-###############################################################################
-# Core configuration settings
-NXP_CORE_CONF={ 20, 02, 2E, 0E,
-        28, 01, 00,
-        21, 01, 00,
-        30, 01, 08,
-        31, 01, 03,
-        32, 01, 60,
-        38, 01, 01,
-        33, 04, 01, 02, 03, 04,
-        54, 01, 06,
-        50, 01, 02,
-        5B, 01, 00,
-        80, 01, 01,
-        81, 01, 01,
-        82, 01, 0E,
-        18, 01, 01
-        }
-
-###############################################################################
-# Mifare Classic Key settings
-#NXP_CORE_MFCKEY_SETTING={20, 02, 25,04, A0, 51, 06, A0, A1, A2, A3, A4, A5,
-#                                     A0, 52, 06, D3, F7, D3, F7, D3, F7,
-#                                     A0, 53, 06, FF, FF, FF, FF, FF, FF,
-#                                     A0, 54, 06, 00, 00, 00, 00, 00, 00}
-
-###############################################################################
-# Default SE Options
-# No secure element 0x00
-# eSE               0x01
-# UICC              0x02
-
-NXP_DEFAULT_SE=0x03
-
-###############################################################################
-#Enable SWP full power mode when phone is power off
-NXP_SWP_FULL_PWR_ON=0x00
-
-###############################################################################
-#### Select the CHIP ####
-#PN547C2            0x01
-#PN65T              0x02
-#PN548AD            0x03
-#PN66T              0x04
-
-NXP_NFC_CHIP=0x03
-
-###############################################################################
-# CE when Screen state is locked
-# Disable           0x00
-# Enable            0x01
-NXP_CE_ROUTE_STRICT_DISABLE=0x01
-
-###############################################################################
-#Timeout in secs to get NFCEE Discover notification
-NXP_DEFAULT_NFCEE_DISC_TIMEOUT=20
-
-NXP_DEFAULT_NFCEE_TIMEOUT=0x06
-
-###############################################################################
-#Timeout in secs
-NXP_SWP_RD_START_TIMEOUT=0x0A
-
-###############################################################################
-#Timeout in secs
-NXP_SWP_RD_TAG_OP_TIMEOUT=0x01
-
-###############################################################################
-#Set the default AID route Location :
-#This settings will be used when application does not set this parameter
-# host 0x00
-# eSE  0x01
-# UICC 0x02
-DEFAULT_AID_ROUTE=0x00
-
-###############################################################################
-#Set the Mifare Desfire route Location :
-#This settings will be used when application does not set this parameter
-# host 0x00
-# eSE  0x01
-# UICC 0x02
-DEFAULT_DESFIRE_ROUTE=0x02
-
-###############################################################################
-#Set the Mifare CLT route Location :
-#This settings will be used when application does not set this parameter
-# host 0x00
-# eSE  0x01
-# UICC 0x02
-DEFAULT_MIFARE_CLT_ROUTE=0x02
-
-###############################################################################
-# AID Matching platform options
-# AID_MATCHING_L 0x01
-# AID_MATCHING_K 0x02
-AID_MATCHING_PLATFORM=0x01
-
-###############################################################################
-#CHINA_TIANJIN_RF_SETTING
-#Enable  0x01
-#Disable 0x00
-NXP_CHINA_TIANJIN_RF_ENABLED=0x01
-
-###############################################################################
-#SWP_SWITCH_TIMEOUT_SETTING
-# Allowed range of swp timeout setting is 0x00 to 0x3C [0 - 60].
-# Timeout in milliseconds, for example
-# No Timeout  0x00
-# 10 millisecond timeout 0x0A
-NXP_SWP_SWITCH_TIMEOUT=0x0A
diff --git a/halimpl/pn54x/libnfc-nxp-PN551_example.conf b/halimpl/pn54x/libnfc-nxp-PN551_example.conf
deleted file mode 100644
index ba42b20..0000000
--- a/halimpl/pn54x/libnfc-nxp-PN551_example.conf
+++ /dev/null
@@ -1,273 +0,0 @@
-## This file is used by NFC NXP NCI HAL(external/libnfc-nci/halimpl/pn54x)
-## and NFC Service Java Native Interface Extensions (packages/apps/Nfc/nci/jni/extns/pn54x)
-
-###############################################################################
-# Application options
-# Logging Levels
-# NXPLOG_DEFAULT_LOGLEVEL    0x01
-# ANDROID_LOG_DEBUG          0x03
-# ANDROID_LOG_WARN           0x02
-# ANDROID_LOG_ERROR          0x01
-# ANDROID_LOG_SILENT         0x00
-#
-NXPLOG_EXTNS_LOGLEVEL=0x03
-NXPLOG_NCIHAL_LOGLEVEL=0x03
-NXPLOG_NCIX_LOGLEVEL=0x03
-NXPLOG_NCIR_LOGLEVEL=0x03
-NXPLOG_FWDNLD_LOGLEVEL=0x03
-NXPLOG_TML_LOGLEVEL=0x03
-
-###############################################################################
-# Nfc Device Node name
-NXP_NFC_DEV_NODE="/dev/pn544"
-
-###############################################################################
-# Extension for Mifare reader enable
-MIFARE_READER_ENABLE=0x01
-
-###############################################################################
-# Vzw Feature enable
-VZW_FEATURE_ENABLE=0x01
-
-###############################################################################
-# File name for Firmware
-NXP_FW_NAME="libpn551_fw.so"
-
-###############################################################################
-# System clock source selection configuration
-#define CLK_SRC_XTAL       1
-#define CLK_SRC_PLL        2
-
-NXP_SYS_CLK_SRC_SEL=0x02
-
-###############################################################################
-# System clock frequency selection configuration
-#define CLK_FREQ_13MHZ         1
-#define CLK_FREQ_19_2MHZ       2
-#define CLK_FREQ_24MHZ         3
-#define CLK_FREQ_26MHZ         4
-#define CLK_FREQ_38_4MHZ       5
-#define CLK_FREQ_52MHZ         6
-
-NXP_SYS_CLK_FREQ_SEL=0x02
-
-###############################################################################
-# The timeout value to be used for clock request acknowledgment
-# min value = 0x01 to max = 0x06
-
-NXP_SYS_CLOCK_TO_CFG=0x06
-
-###############################################################################
-# NXP proprietary settings
-NXP_ACT_PROP_EXTN={2F, 02, 00}
-
-###############################################################################
-# NFC forum profile settings
-NXP_NFC_PROFILE_EXTN={20, 02, 05, 01, A0, 44, 01, 00}
-
-###############################################################################
-# NFCC Configuration Control
-# Allow NFCC to manage RF Config       0x01
-# Don't allow NFCC to manage RF Config 0x00
-NXP_NFC_MERGE_RF_PARAMS={20, 02, 04, 01, 85, 01, 01}
-
-###############################################################################
-# Standby enable settings
-#NXP_CORE_STANDBY={2F, 00, 01, 01}
-
-###############################################################################
-# NXP TVDD configurations settings
-# Allow NFCC to configure External TVDD, There are currently three
-#configurations (1, 2 and 3) are supported, out of them only one can be
-#supported.
-
-NXP_EXT_TVDD_CFG=0x01
-
-###############################################################################
-#config1:SLALM, 3.3V for both RM and CM
-NXP_EXT_TVDD_CFG_1={20, 02, 0B, 02, A0, 66, 01, 00, A0, 0E, 03, 02, 09, 00}
-
-###############################################################################
-#config2: use DCDC in CE, use Tx_Pwr_Req, set CFG2 mode, SLALM,
-#monitoring 5V from DCDC, 3.3V for both RM and CM, DCDCWaitTime=4.2ms
-NXP_EXT_TVDD_CFG_2={20, 02, 0B, 02, A0, 66, 01, 00, A0, 0E, 03, 56, 24, 08 }
-
-###############################################################################
-#config3: use DCDC in CE, use Tx_Pwr_Req, SLALM, monitoring 5V from DCDC,
-#DCDCWaitTime=4.2ms
-NXP_EXT_TVDD_CFG_3={20, 02, 0B, 02, A0, 66, 01, 01, A0, 0E, 03, 52, 40, 0A}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_1={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_2={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_3={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_4={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_5={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_6={
-#}
-
-###############################################################################
-# Core configuration extensions
-# It includes
-# Wired mode settings A0ED, A0EE
-# Tag Detector A040, A041, A043
-# Low Power mode A007
-# Clock settings A002, A003
-# PbF settings A008
-NXP_CORE_CONF_EXTN={20, 02, 19, 06,
-    A0, EC, 01, 01,
-    A0, ED, 01, 00,
-    A0, 5E, 01, 01,
-    A0, 40, 01, 01,
-    A0, DD, 01, 2D,
-    A0, 96, 01, 01
-    }
-
-###############################################################################
-# Core configuration rf field filter settings to enable set to 01 to disable set to 00 last bit
-NXP_CORE_RF_FIELD={ 20, 02, 05, 01, A0, 62, 01, 01
-        }
-
-###############################################################################
-# To enable i2c fragmentation set i2c fragmentation enable 0x01 to disable set to 0x00
-NXP_I2C_FRAGMENTATION_ENABLED=0x00
-
-###############################################################################
-# Core configuration settings
-NXP_CORE_CONF={ 20, 02, 2E, 0E,
-        28, 01, 00,
-        21, 01, 00,
-        30, 01, 08,
-        31, 01, 03,
-        32, 01, 60,
-        38, 01, 01,
-        33, 04, 01, 02, 03, 04,
-        54, 01, 06,
-        50, 01, 02,
-        5B, 01, 00,
-        80, 01, 01,
-        81, 01, 01,
-        82, 01, 0E,
-        18, 01, 01
-        }
-
-###############################################################################
-# Mifare Classic Key settings
-#NXP_CORE_MFCKEY_SETTING={20, 02, 25,04, A0, 51, 06, A0, A1, A2, A3, A4, A5,
-#                                     A0, 52, 06, D3, F7, D3, F7, D3, F7,
-#                                     A0, 53, 06, FF, FF, FF, FF, FF, FF,
-#                                     A0, 54, 06, 00, 00, 00, 00, 00, 00}
-
-###############################################################################
-# Default SE Options
-# No secure element 0x00
-# eSE               0x01
-# UICC              0x02
-
-NXP_DEFAULT_SE=0x03
-
-###############################################################################
-#Enable SWP full power mode when phone is power off
-NXP_SWP_FULL_PWR_ON=0x00
-
-###############################################################################
-#### Select the CHIP ####
-#PN547C2            0x01
-#PN65T              0x02
-#PN548AD            0x03
-#PN66T              0x04
-#PN551              0x05
-#PN67T              0x06
-
-NXP_NFC_CHIP=0x05
-
-###############################################################################
-# CE when Screen state is locked
-# Disable           0x00
-# Enable            0x01
-NXP_CE_ROUTE_STRICT_DISABLE=0x01
-
-###############################################################################
-#Timeout in secs to get NFCEE Discover notification
-NXP_DEFAULT_NFCEE_DISC_TIMEOUT=20
-
-NXP_DEFAULT_NFCEE_TIMEOUT=0x06
-
-###############################################################################
-#Timeout in secs
-NXP_SWP_RD_START_TIMEOUT=0x0A
-
-###############################################################################
-#Timeout in secs
-NXP_SWP_RD_TAG_OP_TIMEOUT=0x01
-
-###############################################################################
-#Set the default AID route Location :
-#This settings will be used when application does not set this parameter
-# host 0x00
-# eSE  0x01
-# UICC 0x02
-DEFAULT_AID_ROUTE=0x00
-
-###############################################################################
-#Set the Mifare Desfire route Location :
-#This settings will be used when application does not set this parameter
-# host 0x00
-# eSE  0x01
-# UICC 0x02
-DEFAULT_DESFIRE_ROUTE=0x02
-
-###############################################################################
-#Set the Mifare CLT route Location :
-#This settings will be used when application does not set this parameter
-# host 0x00
-# eSE  0x01
-# UICC 0x02
-DEFAULT_MIFARE_CLT_ROUTE=0x02
-
-###############################################################################
-# AID Matching platform options
-# AID_MATCHING_L 0x01
-# AID_MATCHING_K 0x02
-AID_MATCHING_PLATFORM=0x01
-
-###############################################################################
-#CHINA_TIANJIN_RF_SETTING
-#Enable  0x01
-#Disable 0x00
-NXP_CHINA_TIANJIN_RF_ENABLED=0x01
-
-###############################################################################
-#SWP_SWITCH_TIMEOUT_SETTING
-# Allowed range of swp timeout setting is 0x00 to 0x3C [0 - 60].
-# Timeout in milliseconds, for example
-# No Timeout  0x00
-# 10 millisecond timeout 0x0A
-NXP_SWP_SWITCH_TIMEOUT=0x0A
diff --git a/halimpl/pn54x/libnfc-nxp-PN553_example.conf b/halimpl/pn54x/libnfc-nxp-PN553_example.conf
deleted file mode 100644
index 818e473..0000000
--- a/halimpl/pn54x/libnfc-nxp-PN553_example.conf
+++ /dev/null
@@ -1,447 +0,0 @@
-## This file is used by NFC NXP NCI HAL(external/libnfc-nci/halimpl/pn547)
-## and NFC Service Java Native Interface Extensions (packages/apps/Nfc/nci/jni/extns/pn547)
-###############################################################################
-# Application options
-# Logging Levels
-# NXPLOG_DEFAULT_LOGLEVEL    0x01
-# ANDROID_LOG_DEBUG          0x03
-# ANDROID_LOG_WARN           0x02
-# ANDROID_LOG_ERROR          0x01
-# ANDROID_LOG_SILENT         0x00
-NXPLOG_EXTNS_LOGLEVEL=0x03
-NXPLOG_NCIHAL_LOGLEVEL=0x03
-NXPLOG_NCIX_LOGLEVEL=0x03
-NXPLOG_NCIR_LOGLEVEL=0x03
-NXPLOG_FWDNLD_LOGLEVEL=0x03
-NXPLOG_TML_LOGLEVEL=0x03
-
-###############################################################################
-# Nfc Device Node name
-NXP_NFC_DEV_NODE="/dev/pn553"
-
-###############################################################################
-# Extension for Mifare reader enable
-MIFARE_READER_ENABLE=0x01
-
-###############################################################################
-# Vzw Feature enable
-VZW_FEATURE_ENABLE=0x01
-
-###############################################################################
-# File name for Firmware
-NXP_FW_NAME="libpn553_fw.so"
-
-###############################################################################
-# System clock source selection configuration
-#define CLK_SRC_XTAL       1
-#define CLK_SRC_PLL        2
-NXP_SYS_CLK_SRC_SEL=0x02
-
-###############################################################################
-# System clock frequency selection configuration
-#define CLK_FREQ_13MHZ         1
-#define CLK_FREQ_19_2MHZ       2
-#define CLK_FREQ_24MHZ         3
-#define CLK_FREQ_26MHZ         4
-#define CLK_FREQ_38_4MHZ       5
-#define CLK_FREQ_52MHZ         6
-NXP_SYS_CLK_FREQ_SEL=0x02
-
-###############################################################################
-# The timeout value to be used for clock request acknowledgment
-# min value = 0x01 to max = 0x06
-NXP_SYS_CLOCK_TO_CFG=0x01
-
-###############################################################################
-# NXP proprietary settings
-NXP_ACT_PROP_EXTN={2F, 02, 00}
-
-###############################################################################
-# NFC forum profile settings
-NXP_NFC_PROFILE_EXTN={20, 02, 05, 01, A0, 44, 01, 00}
-
-###############################################################################
-# NFCC Configuration Control
-# Allow NFCC to manage RF Config       0x01
-# Don't allow NFCC to manage RF Config 0x00
-NXP_NFC_MERGE_RF_PARAMS={20, 02, 04, 01, 85, 01, 01}
-
-###############################################################################
-# Standby enable settings
-#NXP_CORE_STANDBY={2F, 00, 01, 01}
-
-###############################################################################
-# NXP TVDD configurations settings
-# Allow NFCC to configure External TVDD, two configurations (1 and 2) supported,
-# out of them only one can be configured at a time.
-NXP_EXT_TVDD_CFG=0x02
-
-###############################################################################
-#config1:SLALM, 3.3V for both RM and CM
-NXP_EXT_TVDD_CFG_1={20, 02, 0F, 01, A0, 0E, 0B, 31, 01, 01, 31, 00, 00, 00, 01, 00, D0, 0C}
-
-###############################################################################
-#config2: use DCDC in CE, use Tx_Pwr_Req, set CFG2 mode, SLALM,
-#monitoring 5V from DCDC, 3.3V for both RM and CM, DCDCWaitTime=4.2ms
-NXP_EXT_TVDD_CFG_2={20, 02, 0F, 01, A0, 0E, 0B, 11, 01, C2, B2, 00, B2, 1E, 1F, 00, D0, 0C}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_1={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_2={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_3={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_4={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_5={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_6={
-#}
-
-###############################################################################
-# Set configuration optimization decision setting
-# Enable    = 0x01
-# Disable   = 0x00
-NXP_SET_CONFIG_ALWAYS=0x00
-
-###############################################################################
-# Core configuration extensions
-# It includes
-# Wired mode settings A0ED, A0EE
-# Tag Detector A040, A041, A043
-# Low Power mode A007
-# Clock settings A002, A003
-# PbF settings A008
-# Clock timeout settings A004
-# eSE (SVDD) PWR REQ settings A0F2
-# How eSE connected to PN553 A012
-# UICC2 bit rate A0D1
-# SWP1A interface A0D4
-# DWP intf behavior config, SVDD Load activated by default if set to 0x31 - A037
-NXP_CORE_CONF_EXTN={20, 02, 25, 09,
-    A0, EC, 01, 01,
-    A0, ED, 01, 00,
-    A0, 5E, 01, 01,
-    A0, 12, 01, 02,
-    A0, 40, 01, 01,
-    A0, DD, 01, 2D,
-    A0, D1, 01, 02,
-    A0, D4, 01, 01,
-    A0, 37, 01, 35
-   }
-#       A0, F2, 01, 01,
-#       A0, 40, 01, 01,
-#       A0, 41, 01, 02,
-#       A0, 43, 01, 04,
-#       A0, 02, 01, 01,
-#       A0, 03, 01, 11,
-#       A0, 07, 01, 03,
-#       A0, 08, 01, 01
-#       }
-
-###############################################################################
-# Core configuration rf field filter settings to enable set to 01 to disable set
-# to 00 last bit
-NXP_CORE_RF_FIELD={ 20, 02, 05, 01, A0, 62, 01, 00 }
-
-###############################################################################
-# To enable i2c fragmentation set i2c fragmentation enable 0x01 to disable set
-# to 0x00
-NXP_I2C_FRAGMENTATION_ENABLED=0x00
-
-###############################################################################
-# Core configuration settings
-NXP_CORE_CONF={ 20, 02, 2E, 0E,
-        28, 01, 00,
-        21, 01, 00,
-        30, 01, 08,
-        31, 01, 03,
-        32, 01, 60,
-        38, 01, 01,
-        33, 04, 01, 02, 03, 04,
-        54, 01, 06,
-        50, 01, 02,
-        5B, 01, 00,
-        80, 01, 01,
-        81, 01, 01,
-        82, 01, 0E,
-        18, 01, 01
-        }
-
-###############################################################################
-# Mifare Classic Key settings
-#NXP_CORE_MFCKEY_SETTING={20, 02, 25,04, A0, 51, 06, A0, A1, A2, A3, A4, A5,
-#                                     A0, 52, 06, D3, F7, D3, F7, D3, F7,
-#                                     A0, 53, 06, FF, FF, FF, FF, FF, FF,
-#                                     A0, 54, 06, 00, 00, 00, 00, 00, 00}
-
-
-###############################################################################
-# Default SE Options
-# No secure element 0x00
-# eSE               0x01
-# UICC              0x02
-# UICC2             0x04
-
-NXP_DEFAULT_SE=0x07
-
-###############################################################################
-#Enable SWP full power mode when phone is power off
-NXP_SWP_FULL_PWR_ON=0x00
-
-###############################################################################
-#### Select the CHIP ####
-#PN547C2            0x01
-#PN65T              0x02
-#PN548AD            0x03
-#PN66T              0x04
-#PN551              0x05
-#PN67T              0x06
-#PN553              0x07
-#PN80T              0x08
-NXP_NFC_CHIP=0x07
-
-###############################################################################
-# CE when Screen state is locked
-# This setting is for DEFAULT_AID_ROUTE,
-# DEFAULT_DESFIRE_ROUTE and DEFAULT_MIFARE_CLT_ROUTE
-# Disable           0x00
-# Enable            0x01
-NXP_CE_ROUTE_STRICT_DISABLE=0x01
-
-###############################################################################
-#Timeout in secs to get NFCEE Discover notification
-NXP_DEFAULT_NFCEE_DISC_TIMEOUT=20
-
-###############################################################################
-NXP_DEFAULT_NFCEE_TIMEOUT=20
-
-###############################################################################
-#Timeout in secs
-NXP_SWP_RD_START_TIMEOUT=0x0A
-
-###############################################################################
-#Timeout in secs
-NXP_SWP_RD_TAG_OP_TIMEOUT=0x01
-
-###############################################################################
-#Set the default AID route Location :
-#This settings will be used when application does not set this parameter
-# host  0x00
-# eSE   0x01
-# UICC  0x02
-# UICC2 0x03
-DEFAULT_AID_ROUTE=0x00
-
-###############################################################################
-#Set the Mifare Desfire route Location :
-#This settings will be used when application does not set this parameter
-# host  0x00
-# eSE   0x01
-# UICC  0x02
-# UICC2 0x03
-DEFAULT_DESFIRE_ROUTE=0x02
-
-###############################################################################
-#Set the Mifare CLT route Location :
-#This settings will be used when application does not set this parameter
-# host  0x00
-# eSE   0x01
-# UICC  0x02
-# UICC2 0x03
-DEFAULT_MIFARE_CLT_ROUTE=0x02
-
-###############################################################################
-#Set the default AID Power state :
-#This settings will be used when application does not set this parameter
-# bit pos 0 = Switch On
-# bit pos 1 = Switch Off
-# bit pos 2 = Battery Off
-# bit pos 3 = Screen Lock
-# bit pos 4 = Screen Off
-DEFAULT_AID_PWR_STATE=0x19
-
-###############################################################################
-#Set the Mifare Desfire Power state :
-#This settings will be used when application does not set this parameter
-# bit pos 0 = Switch On
-# bit pos 1 = Switch Off
-# bit pos 2 = Battery Off
-# bit pos 3 = Screen Lock
-# bit pos 4 = Screen Off
-DEFAULT_DESFIRE_PWR_STATE=0x1B
-
-###############################################################################
-#Set the Mifare CLT Power state :
-#This settings will be used when application does not set this parameter
-# bit pos 0 = Switch On
-# bit pos 1 = Switch Off
-# bit pos 2 = Battery Off
-# bit pos 3 = Screen Lock
-# bit pos 4 = Screen Off
-DEFAULT_MIFARE_CLT_PWR_STATE=0x1B
-
-###############################################################################
-#Set the Felica CLT route Location :
-#This settings will be used when application does not set this parameter
-# eSE  0x01
-# UICC 0x02
-# UICC2 0x03
-DEFAULT_FELICA_CLT_ROUTE=0x01
-
-###############################################################################
-#Set the Felica CLT Power state :
-#This settings will be used when application does not set this parameter
-# bit pos 0 = Switch On
-# bit pos 1 = Switch Off
-# bit pos 2 = Battery Off
-# bit pos 3 = Screen Lock
-# bit pos 4 = Screen Off
-DEFAULT_FELICA_CLT_PWR_STATE=0x1B
-
-###############################################################################
-# AID Matching platform options
-# AID_MATCHING_L 0x01
-# AID_MATCHING_K 0x02
-AID_MATCHING_PLATFORM=0x01
-
-###############################################################################
-# P61 interface options
-# NFC 0x01
-# SPI 0x02
-NXP_P61_LS_DEFAULT_INTERFACE=0x01
-
-###############################################################################
-# P61 LTSM interface options
-# NFC 0x01
-# SPI 0x02
-NXP_P61_LTSM_DEFAULT_INTERFACE=0x01
-
-###############################################################################
-#CHINA_TIANJIN_RF_SETTING
-#Enable  0x01
-#Disable  0x00
-NXP_CHINA_TIANJIN_RF_ENABLED=0x01
-
-###############################################################################
-#SWP_SWITCH_TIMEOUT_SETTING
-# Allowed range of swp timeout setting is 0x00 to 0x3C [0 - 60].
-# Timeout in milliseconds, for example
-# No Timeout  0x00
-# 10 millisecond timeout 0x0A
-NXP_SWP_SWITCH_TIMEOUT=0x0A
-
-###############################################################################
-# P61 interface options for JCOP Download
-# NFC 0x01
-# SPI 0x02
-NXP_P61_JCOP_DEFAULT_INTERFACE=0x01
-
-###############################################################################
-# P61 JCOP OS download  options
-# FRAMEWORK API BY APPLICATION 0x00
-# AT BOOT_TIME 0x01
-NXP_JCOPDL_AT_BOOT_ENABLE=0x00
-
-###############################################################################
-# Loader service version
-# NFC service checks for LS version 2.0 or 2.1
-# LS2.0 0x20
-# LS2.1 0x21
-# LS2.2 0x22
-# AT NFC service intialization
-NXP_LOADER_SERVICE_VERSION=0x22
-
-###############################################################################
-#Timeout value  in milliseconds for NFCC standby mode.The range is between 5000
-#msec to 20000 msec and zero is to disable.
-NXP_NFCC_STANDBY_TIMEOUT=20000
-
-###############################################################################
-#Dynamic RSSI feature enable
-# Disable           0x00
-# Enable            0x01
-NXP_AGC_DEBUG_ENABLE=0x00
-
-###############################################################################
-#Virtual Mode ESE and Wired Mode ongoing delay Wired Mode
-# For Technology routing to ESE Technology Mask = 4
-# For ISO-DEP Protocol routing to ESE Mask      = 2
-# It can also take TECH|PROTO    = 6
-# To ignore the delay set mask to = 0
-NXP_ESE_WIRED_PRT_MASK=0x00
-
-###############################################################################
-#Virtual Mode UICC and Wired Mode  ongoing delay Wired Mode
-#For Technology routing to UICC Technology Mask = 4
-#For ISO-DEP Protocol routing to UICC set Mask  = 2
-#For Select AID Routing to UICC       set Mask  = 1
-#It can also take values TECH|PROTO|SELECT_AID  = 7 , 6 , 5 ,3 .To ignore delay
-#set mask = 0
-NXP_UICC_WIRED_PRT_MASK=0x00
-
-###############################################################################
-#RF field true delay Wired Mode
-# delay wired mode = 1
-# allow wired mode = 0
-NXP_WIRED_MODE_RF_FIELD_ENABLE=0x00
-
-###############################################################################
-#Config to allow adding aids
-#NFC on/off is required after this config
-#1 = enabling adding aid  to NFCC routing table.
-#0 = disabling adding aid to NFCC routing table.
-NXP_ENABLE_ADD_AID=0x01
-
-###############################################################################
-# JCOP-3.3 continuous process timeout in msec and value should be in Hexadecimal
-# JCOP CP TIMEOUT
-NXP_CP_TIMEOUT={00, 77}
-
-###############################################################################
-# Enable/Disable checking default proto SE Id
-# Disable           0x00
-# Enable            0x01
-NXP_CHECK_DEFAULT_PROTO_SE_ID=0x01
-
-###############################################################################
-#NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE
-#Enable/Disable block number checks for china transit use case
-#Enable  0x01
-#Disable  0x00
-NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE=0x01
-
-###############################################################################
-# Restrict routing to first matched rule only.
-# Blacklist enable   0x01
-# Blacklist disable  0x00
-NXP_PROP_BLACKLIST_ROUTING=0x00
-
-###############################################################################
-# Timeout value in milliseconds to send response for Felica command received
-NXP_HCEF_CMD_RSP_TIMEOUT_VALUE=5000
-
-###############################################################################
\ No newline at end of file
diff --git a/halimpl/pn54x/libnfc-nxp-PN553_example_NCI2_0.conf b/halimpl/pn54x/libnfc-nxp-PN553_example_NCI2_0.conf
deleted file mode 100644
index 3dca16e..0000000
--- a/halimpl/pn54x/libnfc-nxp-PN553_example_NCI2_0.conf
+++ /dev/null
@@ -1,449 +0,0 @@
-## This file is used by NFC NXP NCI HAL(external/libnfc-nci/halimpl/pn547)
-## and NFC Service Java Native Interface Extensions (packages/apps/Nfc/nci/jni/extns/pn547)
-###############################################################################
-# Application options
-# Logging Levels
-# NXPLOG_DEFAULT_LOGLEVEL    0x01
-# ANDROID_LOG_DEBUG          0x03
-# ANDROID_LOG_WARN           0x02
-# ANDROID_LOG_ERROR          0x01
-# ANDROID_LOG_SILENT         0x00
-NXPLOG_EXTNS_LOGLEVEL=0x03
-NXPLOG_NCIHAL_LOGLEVEL=0x03
-NXPLOG_NCIX_LOGLEVEL=0x03
-NXPLOG_NCIR_LOGLEVEL=0x03
-NXPLOG_FWDNLD_LOGLEVEL=0x03
-NXPLOG_TML_LOGLEVEL=0x03
-
-###############################################################################
-# Nfc Device Node name
-NXP_NFC_DEV_NODE="/dev/pn553"
-
-###############################################################################
-# Extension for Mifare reader enable
-MIFARE_READER_ENABLE=0x01
-
-###############################################################################
-# Vzw Feature enable
-VZW_FEATURE_ENABLE=0x01
-
-###############################################################################
-# File name for Firmware
-NXP_FW_NAME="libpn553_fw.so"
-
-###############################################################################
-# System clock source selection configuration
-#define CLK_SRC_XTAL       1
-#define CLK_SRC_PLL        2
-NXP_SYS_CLK_SRC_SEL=0x02
-
-###############################################################################
-# System clock frequency selection configuration
-#define CLK_FREQ_13MHZ         1
-#define CLK_FREQ_19_2MHZ       2
-#define CLK_FREQ_24MHZ         3
-#define CLK_FREQ_26MHZ         4
-#define CLK_FREQ_38_4MHZ       5
-#define CLK_FREQ_52MHZ         6
-NXP_SYS_CLK_FREQ_SEL=0x02
-
-###############################################################################
-# The timeout value to be used for clock request acknowledgment
-# min value = 0x01 to max = 0x06
-NXP_SYS_CLOCK_TO_CFG=0x01
-
-###############################################################################
-# NXP proprietary settings
-NXP_ACT_PROP_EXTN={2F, 02, 00}
-
-###############################################################################
-# NFC forum profile settings
-NXP_NFC_PROFILE_EXTN={20, 02, 05, 01, A0, 44, 01, 00}
-
-###############################################################################
-# NFCC Configuration Control
-# Allow NFCC to manage RF Config       0x01
-# Don't allow NFCC to manage RF Config 0x00
-NXP_NFC_MERGE_RF_PARAMS={20, 02, 04, 01, 85, 01, 01}
-
-###############################################################################
-# Standby enable settings
-#NXP_CORE_STANDBY={2F, 00, 01, 01}
-
-###############################################################################
-# NXP TVDD configurations settings
-# Allow NFCC to configure External TVDD, two configurations (1 and 2) supported,
-# out of them only one can be configured at a time.
-NXP_EXT_TVDD_CFG=0x02
-
-###############################################################################
-#config1:SLALM, 3.3V for both RM and CM
-NXP_EXT_TVDD_CFG_1={20, 02, 0F, 01, A0, 0E, 0B, 31, 01, 01, 31, 00, 00, 00, 01, 00, D0, 0C}
-
-###############################################################################
-#config2: use DCDC in CE, use Tx_Pwr_Req, set CFG2 mode, SLALM,
-#monitoring 5V from DCDC, 3.3V for both RM and CM, DCDCWaitTime=4.2ms
-NXP_EXT_TVDD_CFG_2={20, 02, 0F, 01, A0, 0E, 0B, 11, 01, C2, B2, 00, B2, 1E, 1F, 00, D0, 0C}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_1={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_2={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_3={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_4={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_5={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_6={
-#}
-
-###############################################################################
-# Set configuration optimization decision setting
-# Enable    = 0x01
-# Disable   = 0x00
-NXP_SET_CONFIG_ALWAYS=0x00
-
-###############################################################################
-# Core configuration extensions
-# It includes
-# Wired mode settings A0ED, A0EE
-# Tag Detector A040, A041, A043
-# Low Power mode A007
-# Clock settings A002, A003
-# PbF settings A008
-# Clock timeout settings A004
-# eSE (SVDD) PWR REQ settings A0F2
-# How eSE connected to PN553 A012
-# UICC2 bit rate A0D1
-# SWP1A interface A0D4
-# DWP intf behavior config, SVDD Load activated by default if set to 0x31 - A037
-NXP_CORE_CONF_EXTN={20, 02, 25, 09,
-    A0, EC, 01, 01,
-    A0, ED, 01, 00,
-    A0, 5E, 01, 01,
-    A0, 12, 01, 02,
-    A0, 40, 01, 01,
-    A0, DD, 01, 2D,
-    A0, D1, 01, 02,
-    A0, D4, 01, 01,
-    A0, 37, 01, 35
-   }
-#       A0, F2, 01, 01,
-#       A0, 40, 01, 01,
-#       A0, 41, 01, 02,
-#       A0, 43, 01, 04,
-#       A0, 02, 01, 01,
-#       A0, 03, 01, 11,
-#       A0, 07, 01, 03,
-#       A0, 08, 01, 01
-#       }
-
-###############################################################################
-# Core configuration rf field filter settings to enable set to 01 to disable set
-# to 00 last bit
-NXP_CORE_RF_FIELD={ 20, 02, 05, 01, A0, 62, 01, 00 }
-
-###############################################################################
-# To enable i2c fragmentation set i2c fragmentation enable 0x01 to disable set
-# to 0x00
-NXP_I2C_FRAGMENTATION_ENABLED=0x00
-
-###############################################################################
-# Core configuration settings
-NXP_CORE_CONF={ 20, 02, 34, 10,
-        85, 01, 01,
-        28, 01, 00,
-        21, 01, 00,
-        30, 01, 08,
-        31, 01, 03,
-        32, 01, 60,
-        38, 01, 01,
-        33, 04, 01, 02, 03, 04,
-        54, 01, 06,
-        50, 01, 02,
-        5B, 01, 00,
-        80, 01, 01,
-        81, 01, 01,
-        82, 01, 0E,
-        18, 01, 01,
-        68, 01, 00
-        }
-
-###############################################################################
-# Mifare Classic Key settings
-#NXP_CORE_MFCKEY_SETTING={20, 02, 25,04, A0, 51, 06, A0, A1, A2, A3, A4, A5,
-#                                     A0, 52, 06, D3, F7, D3, F7, D3, F7,
-#                                     A0, 53, 06, FF, FF, FF, FF, FF, FF,
-#                                     A0, 54, 06, 00, 00, 00, 00, 00, 00}
-
-
-###############################################################################
-# Default SE Options
-# No secure element 0x00
-# eSE               0x01
-# UICC              0x02
-# UICC2             0x04
-
-NXP_DEFAULT_SE=0x07
-
-###############################################################################
-#Enable SWP full power mode when phone is power off
-NXP_SWP_FULL_PWR_ON=0x00
-
-###############################################################################
-#### Select the CHIP ####
-#PN547C2            0x01
-#PN65T              0x02
-#PN548AD            0x03
-#PN66T              0x04
-#PN551              0x05
-#PN67T              0x06
-#PN553              0x07
-#PN80T              0x08
-NXP_NFC_CHIP=0x07
-
-###############################################################################
-# CE when Screen state is locked
-# This setting is for DEFAULT_AID_ROUTE,
-# DEFAULT_DESFIRE_ROUTE and DEFAULT_MIFARE_CLT_ROUTE
-# Disable           0x00
-# Enable            0x01
-NXP_CE_ROUTE_STRICT_DISABLE=0x01
-
-###############################################################################
-#Timeout in secs to get NFCEE Discover notification
-NXP_DEFAULT_NFCEE_DISC_TIMEOUT=20
-
-###############################################################################
-NXP_DEFAULT_NFCEE_TIMEOUT=20
-
-###############################################################################
-#Timeout in secs
-NXP_SWP_RD_START_TIMEOUT=0x0A
-
-###############################################################################
-#Timeout in secs
-NXP_SWP_RD_TAG_OP_TIMEOUT=0x01
-
-###############################################################################
-#Set the default AID route Location :
-#This settings will be used when application does not set this parameter
-# host  0x00
-# eSE   0x01
-# UICC  0x02
-# UICC2 0x03
-DEFAULT_AID_ROUTE=0x00
-
-###############################################################################
-#Set the Mifare Desfire route Location :
-#This settings will be used when application does not set this parameter
-# host  0x00
-# eSE   0x01
-# UICC  0x02
-# UICC2 0x03
-DEFAULT_DESFIRE_ROUTE=0x02
-
-###############################################################################
-#Set the Mifare CLT route Location :
-#This settings will be used when application does not set this parameter
-# host  0x00
-# eSE   0x01
-# UICC  0x02
-# UICC2 0x03
-DEFAULT_MIFARE_CLT_ROUTE=0x02
-
-###############################################################################
-#Set the default AID Power state :
-#This settings will be used when application does not set this parameter
-# bit pos 0 = Switch On
-# bit pos 1 = Switch Off
-# bit pos 2 = Battery Off
-# bit pos 3 = Screen Lock
-# bit pos 4 = Screen Off
-DEFAULT_AID_PWR_STATE=0x19
-
-###############################################################################
-#Set the Mifare Desfire Power state :
-#This settings will be used when application does not set this parameter
-# bit pos 0 = Switch On
-# bit pos 1 = Switch Off
-# bit pos 2 = Battery Off
-# bit pos 3 = Screen Lock
-# bit pos 4 = Screen Off
-DEFAULT_DESFIRE_PWR_STATE=0x1B
-
-###############################################################################
-#Set the Mifare CLT Power state :
-#This settings will be used when application does not set this parameter
-# bit pos 0 = Switch On
-# bit pos 1 = Switch Off
-# bit pos 2 = Battery Off
-# bit pos 3 = Screen Lock
-# bit pos 4 = Screen Off
-DEFAULT_MIFARE_CLT_PWR_STATE=0x1B
-
-###############################################################################
-#Set the Felica CLT route Location :
-#This settings will be used when application does not set this parameter
-# eSE  0x01
-# UICC 0x02
-# UICC2 0x03
-DEFAULT_FELICA_CLT_ROUTE=0x01
-
-###############################################################################
-#Set the Felica CLT Power state :
-#This settings will be used when application does not set this parameter
-# bit pos 0 = Switch On
-# bit pos 1 = Switch Off
-# bit pos 2 = Battery Off
-# bit pos 3 = Screen Lock
-# bit pos 4 = Screen Off
-DEFAULT_FELICA_CLT_PWR_STATE=0x1B
-
-###############################################################################
-# AID Matching platform options
-# AID_MATCHING_L 0x01
-# AID_MATCHING_K 0x02
-AID_MATCHING_PLATFORM=0x01
-
-###############################################################################
-# P61 interface options
-# NFC 0x01
-# SPI 0x02
-NXP_P61_LS_DEFAULT_INTERFACE=0x01
-
-###############################################################################
-# P61 LTSM interface options
-# NFC 0x01
-# SPI 0x02
-NXP_P61_LTSM_DEFAULT_INTERFACE=0x01
-
-###############################################################################
-#CHINA_TIANJIN_RF_SETTING
-#Enable  0x01
-#Disable  0x00
-NXP_CHINA_TIANJIN_RF_ENABLED=0x01
-
-###############################################################################
-#SWP_SWITCH_TIMEOUT_SETTING
-# Allowed range of swp timeout setting is 0x00 to 0x3C [0 - 60].
-# Timeout in milliseconds, for example
-# No Timeout  0x00
-# 10 millisecond timeout 0x0A
-NXP_SWP_SWITCH_TIMEOUT=0x0A
-
-###############################################################################
-# P61 interface options for JCOP Download
-# NFC 0x01
-# SPI 0x02
-NXP_P61_JCOP_DEFAULT_INTERFACE=0x01
-
-###############################################################################
-# P61 JCOP OS download  options
-# FRAMEWORK API BY APPLICATION 0x00
-# AT BOOT_TIME 0x01
-NXP_JCOPDL_AT_BOOT_ENABLE=0x00
-
-###############################################################################
-# Loader service version
-# NFC service checks for LS version 2.0 or 2.1
-# LS2.0 0x20
-# LS2.1 0x21
-# LS2.2 0x22
-# AT NFC service intialization
-NXP_LOADER_SERVICE_VERSION=0x22
-
-###############################################################################
-#Timeout value  in milliseconds for NFCC standby mode.The range is between 5000
-#msec to 20000 msec and zero is to disable.
-NXP_NFCC_STANDBY_TIMEOUT=20000
-
-###############################################################################
-#Dynamic RSSI feature enable
-# Disable           0x00
-# Enable            0x01
-NXP_AGC_DEBUG_ENABLE=0x00
-
-###############################################################################
-#Virtual Mode ESE and Wired Mode ongoing delay Wired Mode
-# For Technology routing to ESE Technology Mask = 4
-# For ISO-DEP Protocol routing to ESE Mask      = 2
-# It can also take TECH|PROTO    = 6
-# To ignore the delay set mask to = 0
-NXP_ESE_WIRED_PRT_MASK=0x00
-
-###############################################################################
-#Virtual Mode UICC and Wired Mode  ongoing delay Wired Mode
-#For Technology routing to UICC Technology Mask = 4
-#For ISO-DEP Protocol routing to UICC set Mask  = 2
-#For Select AID Routing to UICC       set Mask  = 1
-#It can also take values TECH|PROTO|SELECT_AID  = 7 , 6 , 5 ,3 .To ignore delay
-#set mask = 0
-NXP_UICC_WIRED_PRT_MASK=0x00
-
-###############################################################################
-#RF field true delay Wired Mode
-# delay wired mode = 1
-# allow wired mode = 0
-NXP_WIRED_MODE_RF_FIELD_ENABLE=0x00
-
-###############################################################################
-#Config to allow adding aids
-#NFC on/off is required after this config
-#1 = enabling adding aid  to NFCC routing table.
-#0 = disabling adding aid to NFCC routing table.
-NXP_ENABLE_ADD_AID=0x01
-
-###############################################################################
-# JCOP-3.3 continuous process timeout in msec and value should be in Hexadecimal
-# JCOP CP TIMEOUT
-NXP_CP_TIMEOUT={00, 77}
-
-###############################################################################
-# Enable/Disable checking default proto SE Id
-# Disable           0x00
-# Enable            0x01
-NXP_CHECK_DEFAULT_PROTO_SE_ID=0x01
-
-###############################################################################
-#NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE
-#Enable/Disable block number checks for china transit use case
-#Enable  0x01
-#Disable  0x00
-NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE=0x01
-
-###############################################################################
-# Restrict routing to first matched rule only.
-# Blacklist enable   0x01
-# Blacklist disable  0x00
-NXP_PROP_BLACKLIST_ROUTING=0x00
-
-###############################################################################
-# Timeout value in milliseconds to send response for Felica command received
-NXP_HCEF_CMD_RSP_TIMEOUT_VALUE=5000
-
-###############################################################################
\ No newline at end of file
diff --git a/halimpl/pn54x/libnfc-nxp-PN65T_example.conf b/halimpl/pn54x/libnfc-nxp-PN65T_example.conf
deleted file mode 100644
index 317776c..0000000
--- a/halimpl/pn54x/libnfc-nxp-PN65T_example.conf
+++ /dev/null
@@ -1,273 +0,0 @@
-## This file is used by NFC NXP NCI HAL(external/libnfc-nci/halimpl/pn54x)
-## and NFC Service Java Native Interface Extensions (packages/apps/Nfc/nci/jni/extns/pn54x)
-
-###############################################################################
-# Application options
-# Logging Levels
-# NXPLOG_DEFAULT_LOGLEVEL    0x01
-# ANDROID_LOG_DEBUG          0x03
-# ANDROID_LOG_WARN           0x02
-# ANDROID_LOG_ERROR          0x01
-# ANDROID_LOG_SILENT         0x00
-#
-NXPLOG_EXTNS_LOGLEVEL=0x03
-NXPLOG_NCIHAL_LOGLEVEL=0x03
-NXPLOG_NCIX_LOGLEVEL=0x03
-NXPLOG_NCIR_LOGLEVEL=0x03
-NXPLOG_FWDNLD_LOGLEVEL=0x03
-NXPLOG_TML_LOGLEVEL=0x03
-
-###############################################################################
-# Nfc Device Node name
-NXP_NFC_DEV_NODE="/dev/pn54x"
-
-###############################################################################
-# Extension for Mifare reader enable
-MIFARE_READER_ENABLE=0x01
-
-###############################################################################
-# Vzw Feature enable
-VZW_FEATURE_ENABLE=0x01
-
-###############################################################################
-# File name for Firmware
-NXP_FW_NAME="libpn547_fw.so"
-
-###############################################################################
-# System clock source selection configuration
-#define CLK_SRC_XTAL       1
-#define CLK_SRC_PLL        2
-
-NXP_SYS_CLK_SRC_SEL=0x01
-
-###############################################################################
-# System clock frequency selection configuration
-#define CLK_FREQ_13MHZ         1
-#define CLK_FREQ_19_2MHZ       2
-#define CLK_FREQ_24MHZ         3
-#define CLK_FREQ_26MHZ         4
-#define CLK_FREQ_38_4MHZ       5
-#define CLK_FREQ_52MHZ         6
-
-NXP_SYS_CLK_FREQ_SEL=0x00
-
-###############################################################################
-# The timeout value to be used for clock request acknowledgment
-# min value = 0x01 to max = 0x06
-
-NXP_SYS_CLOCK_TO_CFG=0x01
-
-###############################################################################
-# NXP proprietary settings
-NXP_ACT_PROP_EXTN={2F, 02, 00}
-
-###############################################################################
-# NFC forum profile settings
-NXP_NFC_PROFILE_EXTN={20, 02, 05, 01, A0, 44, 01, 00}
-
-###############################################################################
-# Standby enable settings
-NXP_CORE_STANDBY={2F, 00, 01, 01}
-
-###############################################################################
-#Atonomous Mode
-#Enable 0x01
-#Disable 0x00
-NXP_CORE_SCRN_OFF_AUTONOMOUS_ENABLE=0x00
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-# NXP_RF_CONF_BLK_1={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_2={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_3={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_4={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_5={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_6={
-#}
-
-###############################################################################
-# Core configuration extensions
-# It includes
-# Wired mode settings A0ED, A0EE
-# Tag Detector A040, A041, A043
-# Low Power mode A007
-# Clock settings A002, A003
-# PbF settings A008
-NXP_CORE_CONF_EXTN={20, 02, 1A, 05,
-    A0, EC, 01, 01,
-    A0, ED, 01, 01,
-    A0, 5E, 01, 01,
-    A0, 12, 01, 02,
-    A0, 0D, 06, 3E, 2D, 15, 88, 15, 00
-    }
-
-###############################################################################
-# Core configuration rf field filter settings to enable set to 01 to disable set to 00 last bit
-NXP_CORE_RF_FIELD={ 20, 02, 05, 01, A0, 62, 01, 01
-        }
-
-###############################################################################
-# To enable i2c fragmentation set i2c fragmentation enable 0x01 to disable set to 0x00
-NXP_I2C_FRAGMENTATION_ENABLED=0x00
-
-###############################################################################
-# Core configuration settings
-NXP_CORE_CONF={ 20, 02, 2B, 0D,
-        28, 01, 00,
-        21, 01, 00,
-        30, 01, 08,
-        31, 01, 03,
-        33, 04, 01, 02, 03, 04,
-        54, 01, 06,
-        50, 01, 02,
-        5B, 01, 00,
-        60, 01, 0E,
-        80, 01, 01,
-        81, 01, 01,
-        82, 01, 0E,
-        18, 01, 01
-        }
-
-###############################################################################
-# Mifare Classic Key settings
-#NXP_CORE_MFCKEY_SETTING={20, 02, 25,04, A0, 51, 06, A0, A1, A2, A3, A4, A5,
-#                                     A0, 52, 06, D3, F7, D3, F7, D3, F7,
-#                                     A0, 53, 06, FF, FF, FF, FF, FF, FF,
-#                                     A0, 54, 06, 00, 00, 00, 00, 00, 00}
-
-###############################################################################
-# Default SE Options
-# No secure element 0x00
-# eSE               0x01
-# UICC              0x02
-
-NXP_DEFAULT_SE=0x02
-
-NXP_DEFAULT_NFCEE_TIMEOUT=0x06
-
-###############################################################################
-#Enable SWP full power mode when phone is power off
-NXP_SWP_FULL_PWR_ON=0x01
-
-###############################################################################
-#Set the default AID route Location :
-#This settings will be used when application does not set this parameter
-# host 0x00
-# eSE  0x01
-# UICC 0x02
-DEFAULT_AID_ROUTE=0x00
-
-###############################################################################
-#Set the Mifare Desfire route Location :
-#This settings will be used when application does not set this parameter
-# host 0x00
-# eSE  0x01
-# UICC 0x02
-DEFAULT_DESFIRE_ROUTE=0x02
-
-###############################################################################
-#Set the Mifare CLT route Location :
-#This settings will be used when application does not set this parameter
-# host 0x00
-# eSE  0x01
-# UICC 0x02
-DEFAULT_MIFARE_CLT_ROUTE=0x02
-
-##############################################################################
-#### Select the CHIP ####
-#PN547C2            0x01
-#PN65T              0x02
-#PN548AD            0x03
-#PN66T              0x04
-
-NXP_NFC_CHIP=0x02
-
-#Timeout in secs
-NXP_SWP_RD_START_TIMEOUT=0xFF
-#Timeout in secs
-NXP_SWP_RD_TAG_OP_TIMEOUT=0xFF
-
-###############################################################################
-# CE when Screen state is locked
-# Disable           0x00
-# Enable            0x01
-NXP_CE_ROUTE_STRICT_DISABLE=0x01
-
-###############################################################################
-# AID Matching platform options
-# AID_MATCHING_L 0x01
-# AID_MATCHING_K 0x02
-AID_MATCHING_PLATFORM=0x01
-
-###############################################################################
-# P61 interface options
-# NFC 0x01
-# SPI 0x02
-NXP_P61_LS_DEFAULT_INTERFACE=0x01
-
-###############################################################################
-# P61 LTSM interface options
-# NFC 0x01
-# SPI 0x02
-NXP_P61_LTSM_DEFAULT_INTERFACE=0x01
-
-###############################################################################
-#CHINA_TIANJIN_RF_SETTING
-#Enable  0x01
-#Disable 0x00
-NXP_CHINA_TIANJIN_RF_ENABLED=0x01
-
-###############################################################################
-#SWP_SWITCH_TIMEOUT_SETTING
-# Allowed range of swp timeout setting is 0x00 to 0x3C [0 - 60].
-# Timeout in milliseconds, for example
-# No Timeout  0x00
-# 10 millisecond timeout 0x0A
-NXP_SWP_SWITCH_TIMEOUT=0x0A
-
-###############################################################################
-# P61 interface options for JCOP Download
-# NFC 0x01
-# SPI 0x02
-NXP_P61_JCOP_DEFAULT_INTERFACE=0x01
-
-###############################################################################
-# P61 JCOP OS download  options
-# FRAMEWORK API BY APPLICATION 0x00
-# AT BOOT_TIME 0x01
-NXP_JCOPDL_AT_BOOT_ENABLE=0x00
-
-###############################################################################
-# Loader service version
-# NFC service checks for LS version 2.0 or 2.1
-# LS2.0 0x20
-# LS2.1 0x21
-# LS2.2 0x22
-# AT NFC service intialization
-NXP_LOADER_SERVICE_VERSION=0x21
diff --git a/halimpl/pn54x/libnfc-nxp-PN66T_example.conf b/halimpl/pn54x/libnfc-nxp-PN66T_example.conf
deleted file mode 100644
index d63881f..0000000
--- a/halimpl/pn54x/libnfc-nxp-PN66T_example.conf
+++ /dev/null
@@ -1,305 +0,0 @@
-## This file is used by NFC NXP NCI HAL(external/libnfc-nci/halimpl/pn54x)
-## and NFC Service Java Native Interface Extensions (packages/apps/Nfc/nci/jni/extns/pn54x)
-
-###############################################################################
-# Application options
-# Logging Levels
-# NXPLOG_DEFAULT_LOGLEVEL    0x01
-# ANDROID_LOG_DEBUG          0x03
-# ANDROID_LOG_WARN           0x02
-# ANDROID_LOG_ERROR          0x01
-# ANDROID_LOG_SILENT         0x00
-#
-NXPLOG_EXTNS_LOGLEVEL=0x03
-NXPLOG_NCIHAL_LOGLEVEL=0x03
-NXPLOG_NCIX_LOGLEVEL=0x03
-NXPLOG_NCIR_LOGLEVEL=0x03
-NXPLOG_FWDNLD_LOGLEVEL=0x03
-NXPLOG_TML_LOGLEVEL=0x03
-###############################################################################
-# Nfc Device Node name
-NXP_NFC_DEV_NODE="/dev/pn54x"
-
-###############################################################################
-# Extension for Mifare reader enable
-MIFARE_READER_ENABLE=0x01
-
-###############################################################################
-# Vzw Feature enable
-VZW_FEATURE_ENABLE=0x01
-
-###############################################################################
-# File name for Firmware
-NXP_FW_NAME="libpn548ad_fw.so"
-
-###############################################################################
-# System clock source selection configuration
-#define CLK_SRC_XTAL       1
-#define CLK_SRC_PLL        2
-
-NXP_SYS_CLK_SRC_SEL=0x02
-
-###############################################################################
-# System clock frequency selection configuration
-#define CLK_FREQ_13MHZ         1
-#define CLK_FREQ_19_2MHZ       2
-#define CLK_FREQ_24MHZ         3
-#define CLK_FREQ_26MHZ         4
-#define CLK_FREQ_38_4MHZ       5
-#define CLK_FREQ_52MHZ         6
-
-NXP_SYS_CLK_FREQ_SEL=0x02
-
-###############################################################################
-# The timeout value to be used for clock request acknowledgment
-# min value = 0x01 to max = 0x06
-
-NXP_SYS_CLOCK_TO_CFG=0x01
-
-###############################################################################
-# NXP proprietary settings
-NXP_ACT_PROP_EXTN={2F, 02, 00}
-
-###############################################################################
-# NFC forum profile settings
-NXP_NFC_PROFILE_EXTN={20, 02, 05, 01, A0, 44, 01, 00}
-
-###############################################################################
-# NFCC Configuration Control
-# Allow NFCC to manage RF Config       0x01
-# Don't allow NFCC to manage RF Config 0x00
-NXP_NFC_MERGE_RF_PARAMS={20, 02, 04, 01, 85, 01, 01}
-
-###############################################################################
-# Standby enable settings
-NXP_CORE_STANDBY={2F, 00, 01, 01}
-
-###############################################################################
-# NXP TVDD configurations settings
-# Allow NFCC to configure External TVDD, There are currently three
-#configurations (1, 2 and 3) are supported, out of them only one can be
-#supported.
-
-NXP_EXT_TVDD_CFG=0x01
-
-###############################################################################
-#config1:SLALM, 3.3V for both RM and CM
-NXP_EXT_TVDD_CFG_1={20, 02, 0B, 02, A0, 66, 01, 00, A0, 0E, 03, 02, 09, 00}
-
-###############################################################################
-#config2: use DCDC in CE, use Tx_Pwr_Req, set CFG2 mode, SLALM,
-#monitoring 5V from DCDC, 4.7V for both RM and CM, DCDCWaitTime=4.2ms
-NXP_EXT_TVDD_CFG_2={20, 02, 0B, 02, A0, 66, 01, 00, A0, 0E, 03, 56, 64, 0A}
-
-###############################################################################
-#config3: use DCDC in CE, use Tx_Pwr_Req, SLALM, monitoring 5V from DCDC,
-#DCDCWaitTime=4.2ms
-NXP_EXT_TVDD_CFG_3={20, 02, 0B, 02, A0, 66, 01, 01, A0, 0E, 03, 52, 64, 0A}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_1={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_2={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_3={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_4={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_5={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_6={
-#}
-
-###############################################################################
-# Core configuration extensions
-# It includes
-# Wired mode settings A0ED, A0EE
-# Tag Detector A040, A041, A043
-# Low Power mode A007
-# Clock settings A002, A003
-# PbF settings A008
-# Clock timeout settings A004
-NXP_CORE_CONF_EXTN={20, 02, 1D, 07,
-    A0, EC, 01, 01,
-    A0, ED, 01, 03,
-    A0, 5E, 01, 01,
-    A0, 12, 01, 02,
-    A0, 40, 01, 01,
-    A0, DD, 01, 2D,
-    A0, F2, 01, 01
-    }
-
-###############################################################################
-# Core configuration rf field filter settings to enable set to 01 to disable set to 00 last bit
-NXP_CORE_RF_FIELD={ 20, 02, 05, 01, A0, 62, 01, 01
-        }
-
-###############################################################################
-# To enable i2c fragmentation set i2c fragmentation enable 0x01 to disable set to 0x00
-NXP_I2C_FRAGMENTATION_ENABLED=0x00
-
-###############################################################################
-# Core configuration settings
-NXP_CORE_CONF={ 20, 02, 2E, 0E,
-        28, 01, 00,
-        21, 01, 00,
-        30, 01, 08,
-        31, 01, 03,
-        32, 01, 60,
-        38, 01, 01,
-        33, 04, 01, 02, 03, 04,
-        54, 01, 06,
-        50, 01, 02,
-        5B, 01, 00,
-        80, 01, 01,
-        81, 01, 01,
-        82, 01, 0E,
-        18, 01, 01
-        }
-
-###############################################################################
-# Mifare Classic Key settings
-#NXP_CORE_MFCKEY_SETTING={20, 02, 25,04, A0, 51, 06, A0, A1, A2, A3, A4, A5,
-#                                     A0, 52, 06, D3, F7, D3, F7, D3, F7,
-#                                     A0, 53, 06, FF, FF, FF, FF, FF, FF,
-#                                     A0, 54, 06, 00, 00, 00, 00, 00, 00}
-
-###############################################################################
-# Default SE Options
-# No secure element 0x00
-# eSE               0x01
-# UICC              0x02
-
-NXP_DEFAULT_SE=0x03
-
-###############################################################################
-#Enable SWP full power mode when phone is power off
-NXP_SWP_FULL_PWR_ON=0x00
-
-###############################################################################
-#### Select the CHIP ####
-#PN547C2            0x01
-#PN65T              0x02
-#PN548AD            0x03
-#PN66T              0x04
-
-NXP_NFC_CHIP=0x04
-
-###############################################################################
-# CE when Screen state is locked
-# Disable           0x00
-# Enable            0x01
-NXP_CE_ROUTE_STRICT_DISABLE=0x01
-
-###############################################################################
-#Timeout in secs to get NFCEE Discover notification
-NXP_DEFAULT_NFCEE_DISC_TIMEOUT=20
-
-NXP_DEFAULT_NFCEE_TIMEOUT=0x06
-
-###############################################################################
-#Timeout in secs
-NXP_SWP_RD_START_TIMEOUT=0x0A
-
-###############################################################################
-#Timeout in secs
-NXP_SWP_RD_TAG_OP_TIMEOUT=0x01
-
-###############################################################################
-#Set the default AID route Location :
-#This settings will be used when application does not set this parameter
-# host 0x00
-# eSE  0x01
-# UICC 0x02
-DEFAULT_AID_ROUTE=0x00
-
-###############################################################################
-#Set the Mifare Desfire route Location :
-#This settings will be used when application does not set this parameter
-# host 0x00
-# eSE  0x01
-# UICC 0x02
-DEFAULT_DESFIRE_ROUTE=0x02
-
-###############################################################################
-#Set the Mifare CLT route Location :
-#This settings will be used when application does not set this parameter
-# host 0x00
-# eSE  0x01
-# UICC 0x02
-DEFAULT_MIFARE_CLT_ROUTE=0x02
-
-###############################################################################
-# AID Matching platform options
-# AID_MATCHING_L 0x01
-# AID_MATCHING_K 0x02
-AID_MATCHING_PLATFORM=0x01
-
-###############################################################################
-# P61 interface options
-# NFC 0x01
-# SPI 0x02
-NXP_P61_LS_DEFAULT_INTERFACE=0x01
-
-###############################################################################
-# P61 LTSM interface options
-# NFC 0x01
-# SPI 0x02
-NXP_P61_LTSM_DEFAULT_INTERFACE=0x01
-
-###############################################################################
-#CHINA_TIANJIN_RF_SETTING
-#Enable  0x01
-#Disable 0x00
-NXP_CHINA_TIANJIN_RF_ENABLED=0x01
-
-###############################################################################
-#SWP_SWITCH_TIMEOUT_SETTING
-# Allowed range of swp timeout setting is 0x00 to 0x3C [0 - 60].
-# Timeout in milliseconds, for example
-# No Timeout  0x00
-# 10 millisecond timeout 0x0A
-NXP_SWP_SWITCH_TIMEOUT=0x0A
-
-###############################################################################
-# P61 interface options for JCOP Download
-# NFC 0x01
-# SPI 0x02
-NXP_P61_JCOP_DEFAULT_INTERFACE=0x01
-
-###############################################################################
-# P61 JCOP OS download  options
-# FRAMEWORK API BY APPLICATION 0x00
-# AT BOOT_TIME 0x01
-NXP_JCOPDL_AT_BOOT_ENABLE=0x00
-
-###############################################################################
-# Loader service version
-# NFC service checks for LS version 2.0 or 2.1
-# LS2.0 0x20
-# LS2.1 0x21
-# LS2.2 0x22
-# AT NFC service intialization
-NXP_LOADER_SERVICE_VERSION=0x21
diff --git a/halimpl/pn54x/libnfc-nxp-PN80T_example.conf b/halimpl/pn54x/libnfc-nxp-PN80T_example.conf
deleted file mode 100644
index 45d276c..0000000
--- a/halimpl/pn54x/libnfc-nxp-PN80T_example.conf
+++ /dev/null
@@ -1,487 +0,0 @@
-## This file is used by NFC NXP NCI HAL(external/libnfc-nci/halimpl/pn547)
-## and NFC Service Java Native Interface Extensions (packages/apps/Nfc/nci/jni/extns/pn547)
-###############################################################################
-# Application options
-# Logging Levels
-# NXPLOG_DEFAULT_LOGLEVEL    0x01
-# ANDROID_LOG_DEBUG          0x03
-# ANDROID_LOG_WARN           0x02
-# ANDROID_LOG_ERROR          0x01
-# ANDROID_LOG_SILENT         0x00
-NXPLOG_EXTNS_LOGLEVEL=0x03
-NXPLOG_NCIHAL_LOGLEVEL=0x03
-NXPLOG_NCIX_LOGLEVEL=0x03
-NXPLOG_NCIR_LOGLEVEL=0x03
-NXPLOG_FWDNLD_LOGLEVEL=0x03
-NXPLOG_TML_LOGLEVEL=0x03
-
-###############################################################################
-# Nfc Device Node name
-NXP_NFC_DEV_NODE="/dev/pn553"
-
-###############################################################################
-# Extension for Mifare reader enable
-MIFARE_READER_ENABLE=0x01
-
-###############################################################################
-# Vzw Feature enable
-VZW_FEATURE_ENABLE=0x01
-
-###############################################################################
-# File name for Firmware
-NXP_FW_NAME="libpn553_fw.so"
-
-###############################################################################
-# System clock source selection configuration
-#define CLK_SRC_XTAL       1
-#define CLK_SRC_PLL        2
-NXP_SYS_CLK_SRC_SEL=0x02
-
-###############################################################################
-# System clock frequency selection configuration
-#define CLK_FREQ_13MHZ         1
-#define CLK_FREQ_19_2MHZ       2
-#define CLK_FREQ_24MHZ         3
-#define CLK_FREQ_26MHZ         4
-#define CLK_FREQ_38_4MHZ       5
-#define CLK_FREQ_52MHZ         6
-NXP_SYS_CLK_FREQ_SEL=0x02
-
-###############################################################################
-# The timeout value to be used for clock request acknowledgment
-# min value = 0x01 to max = 0x06
-NXP_SYS_CLOCK_TO_CFG=0x06
-
-###############################################################################
-# NXP proprietary settings
-NXP_ACT_PROP_EXTN={2F, 02, 00}
-
-###############################################################################
-# NFC forum profile settings
-NXP_NFC_PROFILE_EXTN={20, 02, 05, 01, A0, 44, 01, 00}
-
-###############################################################################
-# NFCC Configuration Control
-# Allow NFCC to manage RF Config       0x01
-# Don't allow NFCC to manage RF Config 0x00
-NXP_NFC_MERGE_RF_PARAMS={20, 02, 04, 01, 85, 01, 01}
-
-###############################################################################
-# Standby enable settings
-#NXP_CORE_STANDBY={2F, 00, 01, 01}
-
-###############################################################################
-# NXP TVDD configurations settings
-# Allow NFCC to configure External TVDD, two configurations (1 and 2) supported,
-# out of them only one can be configured at a time.
-NXP_EXT_TVDD_CFG=0x02
-
-###############################################################################
-#config1:SLALM, 3.3V for both RM and CM
-NXP_EXT_TVDD_CFG_1={20, 02, 0F, 01, A0, 0E, 0B, 31, 01, 01, 31, 00, 00, 00, 01, 00, D0, 0C}
-
-###############################################################################
-#config2: use DCDC in CE, use Tx_Pwr_Req, set CFG2 mode, SLALM,
-#monitoring 5V from DCDC, 3.3V for both RM and CM, DCDCWaitTime=4.2ms
-NXP_EXT_TVDD_CFG_2={20, 02, 0F, 01, A0, 0E, 0B, 11, 01, C2, B2, 00, B2, 1E, 1F, 00, D0, 0C}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_1={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_2={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_3={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_4={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_5={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_6={
-#}
-
-###############################################################################
-# Set configuration optimization decision setting
-# Enable    = 0x01
-# Disable   = 0x00
-NXP_SET_CONFIG_ALWAYS=0x00
-
-###############################################################################
-# Core configuration extensions
-# It includes
-# Wired mode settings A0ED, A0EE
-# Tag Detector A040, A041, A043
-# Low Power mode A007
-# Clock settings A002, A003
-# PbF settings A008
-# Clock timeout settings A004
-# eSE (SVDD) PWR REQ settings A0F2
-# Window size A0D8
-# DWP Speed   A0D5
-# How eSE connected to PN553 A012
-# UICC2 bit rate A0D1
-# SWP1A interface A0D4
-# DWP intf behavior config, SVDD Load activated by default if set to 0x31 A037
-NXP_CORE_CONF_EXTN={20, 02, 29, 0A,
-    A0, EC, 01, 01,
-    A0, ED, 01, 01,
-    A0, 5E, 01, 01,
-    A0, 12, 01, 02,
-    A0, 40, 01, 01,
-    A0, D1, 01, 02,
-    A0, D4, 01, 01,
-    A0, 37, 01, 35,
-    A0, D8, 01, 02,
-    A0, D5, 01, 0A
-   }
-#       A0, F2, 01, 01,
-#       A0, 40, 01, 01,
-#       A0, 41, 01, 02,
-#       A0, 43, 01, 04,
-#       A0, 02, 01, 01,
-#       A0, 03, 01, 11,
-#       A0, 07, 01, 03,
-#       A0, 08, 01, 01
-#       }
-
-###############################################################################
-# Core configuration rf field filter settings to enable set to 01 to disable set
-# to 00 last bit
-NXP_CORE_RF_FIELD={ 20, 02, 05, 01, A0, 62, 01, 00 }
-
-###############################################################################
-# To enable i2c fragmentation set i2c fragmentation enable 0x01 to disable set
-# to 0x00
-NXP_I2C_FRAGMENTATION_ENABLED=0x00
-
-###############################################################################
-# Core configuration settings
-NXP_CORE_CONF={ 20, 02, 2E, 0E,
-        28, 01, 00,
-        21, 01, 00,
-        30, 01, 08,
-        31, 01, 03,
-        32, 01, 60,
-        38, 01, 01,
-        33, 04, 01, 02, 03, 04,
-        54, 01, 06,
-        50, 01, 02,
-        5B, 01, 00,
-        80, 01, 01,
-        81, 01, 01,
-        82, 01, 0E,
-        18, 01, 01
-        }
-
-###############################################################################
-# Mifare Classic Key settings
-#NXP_CORE_MFCKEY_SETTING={20, 02, 25,04, A0, 51, 06, A0, A1, A2, A3, A4, A5,
-#                                     A0, 52, 06, D3, F7, D3, F7, D3, F7,
-#                                     A0, 53, 06, FF, FF, FF, FF, FF, FF,
-#                                     A0, 54, 06, 00, 00, 00, 00, 00, 00}
-
-###############################################################################
-# Default SE Options
-# No secure element 0x00
-# eSE               0x01
-# UICC              0x02
-# UICC2             0x04
-NXP_DEFAULT_SE=0x07
-
-###############################################################################
-#Enable SWP full power mode when phone is power off
-NXP_SWP_FULL_PWR_ON=0x00
-
-###############################################################################
-#### Select the CHIP ####
-#PN547C2            0x01
-#PN65T              0x02
-#PN548AD            0x03
-#PN66T              0x04
-#PN551              0x05
-#PN67T              0x06
-#PN553              0x07
-#PN80T              0x08
-NXP_NFC_CHIP=0x08
-
-###############################################################################
-# CE when Screen state is locked
-# This setting is for DEFAULT_AID_ROUTE,
-# DEFAULT_DESFIRE_ROUTE and DEFAULT_MIFARE_CLT_ROUTE
-# Disable           0x00
-# Enable            0x01
-NXP_CE_ROUTE_STRICT_DISABLE=0x01
-
-###############################################################################
-#Timeout in secs to get NFCEE Discover notification
-NXP_DEFAULT_NFCEE_DISC_TIMEOUT=20
-
-###############################################################################
-NXP_DEFAULT_NFCEE_TIMEOUT=20
-
-###############################################################################
-#Timeout in secs
-NXP_SWP_RD_START_TIMEOUT=0x0A
-
-###############################################################################
-#Timeout in secs
-NXP_SWP_RD_TAG_OP_TIMEOUT=0x01
-
-###############################################################################
-#Set the default AID route Location :
-#This settings will be used when application does not set this parameter
-# host  0x00
-# eSE   0x01
-# UICC  0x02
-# UICC2 0x03
-DEFAULT_AID_ROUTE=0x00
-
-###############################################################################
-#Set the Mifare Desfire route Location :
-#This settings will be used when application does not set this parameter
-# host  0x00
-# eSE   0x01
-# UICC  0x02
-# UICC2 0x03
-DEFAULT_DESFIRE_ROUTE=0x02
-
-###############################################################################
-#Set the Mifare CLT route Location :
-#This settings will be used when application does not set this parameter
-# host  0x00
-# eSE   0x01
-# UICC  0x02
-# UICC2 0x03
-DEFAULT_MIFARE_CLT_ROUTE=0x02
-
-###############################################################################
-#Set the Felica CLT route Location :
-#This settings will be used when application does not set this parameter
-# eSE   0x01
-# UICC  0x02
-# UICC2 0x03
-DEFAULT_FELICA_CLT_ROUTE=0x01
-
-###############################################################################
-#Set the default AID Power state :
-#This settings will be used when application does not set this parameter
-# bit pos 0 = Switch On
-# bit pos 1 = Switch Off
-# bit pos 2 = Battery Off
-# bit pos 3 = Screen Lock
-# bit pos 4 = Screen Off
-DEFAULT_AID_PWR_STATE=0x19
-
-###############################################################################
-#Set the Mifare Desfire Power state :
-#This settings will be used when application does not set this parameter
-# bit pos 0 = Switch On
-# bit pos 1 = Switch Off
-# bit pos 2 = Battery Off
-# bit pos 3 = Screen Lock
-# bit pos 4 = Screen Off
-DEFAULT_DESFIRE_PWR_STATE=0x1B
-
-###############################################################################
-#Set the Mifare CLT Power state :
-#This settings will be used when application does not set this parameter
-# bit pos 0 = Switch On
-# bit pos 1 = Switch Off
-# bit pos 2 = Battery Off
-# bit pos 3 = Screen Lock
-# bit pos 4 = Screen Off
-DEFAULT_MIFARE_CLT_PWR_STATE=0x1B
-
-###############################################################################
-#Set the Felica CLT Power state :
-#This settings will be used when application does not set this parameter
-# bit pos 0 = Switch On
-# bit pos 1 = Switch Off
-# bit pos 2 = Battery Off
-# bit pos 3 = Screen Lock
-# bit pos 4 = Screen Off
-DEFAULT_FELICA_CLT_PWR_STATE=0x1B
-
-###############################################################################
-# AID Matching platform options
-# AID_MATCHING_L 0x01
-# AID_MATCHING_K 0x02
-AID_MATCHING_PLATFORM=0x01
-
-###############################################################################
-# P61 interface options
-# NFC 0x01
-# SPI 0x02
-NXP_P61_LS_DEFAULT_INTERFACE=0x01
-
-###############################################################################
-# P61 LTSM interface options
-# NFC 0x01
-# SPI 0x02
-NXP_P61_LTSM_DEFAULT_INTERFACE=0x01
-
-###############################################################################
-#CHINA_TIANJIN_RF_SETTING
-#Enable  0x01
-#Disable  0x00
-NXP_CHINA_TIANJIN_RF_ENABLED=0x01
-
-###############################################################################
-#SWP_SWITCH_TIMEOUT_SETTING
-# Allowed range of swp timeout setting is 0x00 to 0x3C [0 - 60].
-# Timeout in milliseconds, for example
-# No Timeout  0x00
-# 10 millisecond timeout 0x0A
-NXP_SWP_SWITCH_TIMEOUT=0x0A
-
-###############################################################################
-# P61 interface options for JCOP Download
-# NFC 0x01
-# SPI 0x02
-NXP_P61_JCOP_DEFAULT_INTERFACE=0x01
-
-###############################################################################
-# P61 JCOP OS download  options
-# FRAMEWORK API BY APPLICATION 0x00
-# AT BOOT_TIME 0x01
-NXP_JCOPDL_AT_BOOT_ENABLE=0x00
-
-###############################################################################
-# Loader service version
-# NFC service checks for LS version 2.0 or 2.1
-# LS2.0 0x20
-# LS2.1 0x21
-# LS2.2 0x22
-# AT NFC service intialization
-NXP_LOADER_SERVICE_VERSION=0x22
-
-###############################################################################
-#Timeout value  in milliseconds for NFCC standby mode.The range is between 5000
-#msec to 20000 msec and zero is to disable.
-NXP_NFCC_STANDBY_TIMEOUT=20000
-
-###############################################################################
-#Dynamic RSSI feature enable
-# Disable           0x00
-# Enable            0x01
-NXP_AGC_DEBUG_ENABLE=0x00
-
-###############################################################################
-#Virtual Mode ESE and Wired Mode ongoing delay Wired Mode
-# For Technology routing to ESE Technology Mask = 4
-# For ISO-DEP Protocol routing to ESE Mask      = 2
-# It can also take TECH|PROTO    = 6
-# To ignore the delay set mask to = 0
-NXP_ESE_WIRED_PRT_MASK=0x00
-
-###############################################################################
-#Virtual Mode UICC and Wired Mode  ongoing delay Wired Mode
-#For Technology routing to UICC Technology Mask = 4
-#For ISO-DEP Protocol routing to UICC set Mask  = 2
-#For Select AID Routing to UICC       set Mask  = 1
-#It can also take values TECH|PROTO|SELECT_AID  = 7 , 6 , 5 ,3 .To ignore delay
-#set mask = 0
-NXP_UICC_WIRED_PRT_MASK=0x00
-
-################################################################################
-#RF field true delay Wired Mode
-# delay wired mode = 1
-# allow wired mode = 0
-NXP_WIRED_MODE_RF_FIELD_ENABLE=0x00
-
-###############################################################################
-#Config to allow adding aids
-#NFC on/off is required after this config
-#1 = enabling adding aid  to NFCC routing table.
-#0 = disabling adding aid to NFCC routing table.
-NXP_ENABLE_ADD_AID=0x01
-
-###############################################################################
-# JCOP-3.3 continuous process timeout in msec and value should be in Hexadecimal
-# JCOP CP TIMEOUT
-NXP_CP_TIMEOUT={00, 77}
-
-###############################################################################
-# Enable/Disable checking default proto SE Id
-# Disable           0x00
-# Enable            0x01
-NXP_CHECK_DEFAULT_PROTO_SE_ID=0x01
-
-###############################################################################
-#NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE
-#Enable/Disable block number checks for china transit use case
-#Enable  0x01
-#Disable  0x00
-NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE=0x01
-
-###############################################################################
-# Wired mode resume timeout vaule in wired mode resume feature enable
-# DWP resume time out in ms( 4 bytes hex value and LSB first)
-#example 1000 = 0x03E8
-#exmaple 2000 = 0x07D0
-#example 500 = 0x01F4
-NXP_WIREDMODE_RESUME_TIMEOUT={E8,03,00,00}
-###############################################################################
-# Power to eSE is controlled by DH or PMU depending on following configurations
-#define DH_PWR_CONTROL         1
-#define PMU_PWR_CONTROL        2
-NXP_ESE_POWER_DH_CONTROL=1
-
-###############################################################################
-# Timeout value in milliseconds for wired mode resume after RF field event timeout
-NXP_NFCC_RF_FIELD_EVENT_TIMEOUT=3000
-
-###############################################################################
-# NXP PMU Support configuration is sent if PMU_PWR_CONTROL is configured
-# External PMU available in phone ON and phone OFF case if NXP_ESE_POWER_EXT_PMU=1
-# External PMU available only in phone ON case if NXP_ESE_POWER_EXT_PMU=2
-NXP_ESE_POWER_EXT_PMU=2
-
-###############################################################################
-# Whether to allow wired mode in desfire and mifare CLT
-# Disable           0x00
-# Enable            0x01
-NXP_ALLOW_WIRED_IN_MIFARE_DESFIRE_CLT=0x00
-
-###############################################################################
-# Restrict routing to first matched rule only.
-# Blacklist enable   0x01
-# Blacklist disable  0x00
-NXP_PROP_BLACKLIST_ROUTING=0x00
-
-###############################################################################
-# Send DWP interface reset command as part of SE open
-# Disable           0x00
-# Enable            0x01
-NXP_DWP_INTF_RESET_ENABLE=0x01
-
-###############################################################################
-# Timeout value in milliseconds for JCOP OS download to complete
-OS_DOWNLOAD_TIMEOUT_VALUE=60000
-
-###############################################################################
-# Timeout value in milliseconds to send response for Felica command received
-NXP_HCEF_CMD_RSP_TIMEOUT_VALUE=5000
-
-###############################################################################
\ No newline at end of file
diff --git a/halimpl/pn54x/libnfc-nxp-PN80T_example_NCI2_0.conf b/halimpl/pn54x/libnfc-nxp-PN80T_example_NCI2_0.conf
deleted file mode 100644
index 1f64ec7..0000000
--- a/halimpl/pn54x/libnfc-nxp-PN80T_example_NCI2_0.conf
+++ /dev/null
@@ -1,488 +0,0 @@
-## This file is used by NFC NXP NCI HAL(external/libnfc-nci/halimpl/pn547)
-## and NFC Service Java Native Interface Extensions (packages/apps/Nfc/nci/jni/extns/pn547)
-###############################################################################
-# Application options
-# Logging Levels
-# NXPLOG_DEFAULT_LOGLEVEL    0x01
-# ANDROID_LOG_DEBUG          0x03
-# ANDROID_LOG_WARN           0x02
-# ANDROID_LOG_ERROR          0x01
-# ANDROID_LOG_SILENT         0x00
-NXPLOG_EXTNS_LOGLEVEL=0x03
-NXPLOG_NCIHAL_LOGLEVEL=0x03
-NXPLOG_NCIX_LOGLEVEL=0x03
-NXPLOG_NCIR_LOGLEVEL=0x03
-NXPLOG_FWDNLD_LOGLEVEL=0x03
-NXPLOG_TML_LOGLEVEL=0x03
-
-###############################################################################
-# Nfc Device Node name
-NXP_NFC_DEV_NODE="/dev/pn553"
-
-###############################################################################
-# Extension for Mifare reader enable
-MIFARE_READER_ENABLE=0x01
-
-###############################################################################
-# Vzw Feature enable
-VZW_FEATURE_ENABLE=0x01
-
-###############################################################################
-# File name for Firmware
-NXP_FW_NAME="libpn553_fw.so"
-
-###############################################################################
-# System clock source selection configuration
-#define CLK_SRC_XTAL       1
-#define CLK_SRC_PLL        2
-NXP_SYS_CLK_SRC_SEL=0x02
-
-###############################################################################
-# System clock frequency selection configuration
-#define CLK_FREQ_13MHZ         1
-#define CLK_FREQ_19_2MHZ       2
-#define CLK_FREQ_24MHZ         3
-#define CLK_FREQ_26MHZ         4
-#define CLK_FREQ_38_4MHZ       5
-#define CLK_FREQ_52MHZ         6
-NXP_SYS_CLK_FREQ_SEL=0x02
-
-###############################################################################
-# The timeout value to be used for clock request acknowledgment
-# min value = 0x01 to max = 0x06
-NXP_SYS_CLOCK_TO_CFG=0x06
-
-###############################################################################
-# NXP proprietary settings
-NXP_ACT_PROP_EXTN={2F, 02, 00}
-
-###############################################################################
-# NFC forum profile settings
-NXP_NFC_PROFILE_EXTN={20, 02, 05, 01, A0, 44, 01, 00}
-
-###############################################################################
-# NFCC Configuration Control
-# Allow NFCC to manage RF Config       0x01
-# Don't allow NFCC to manage RF Config 0x00
-NXP_NFC_MERGE_RF_PARAMS={20, 02, 04, 01, 85, 01, 01}
-
-###############################################################################
-# Standby enable settings
-#NXP_CORE_STANDBY={2F, 00, 01, 01}
-
-###############################################################################
-# NXP TVDD configurations settings
-# Allow NFCC to configure External TVDD, two configurations (1 and 2) supported,
-# out of them only one can be configured at a time.
-NXP_EXT_TVDD_CFG=0x02
-
-###############################################################################
-#config1:SLALM, 3.3V for both RM and CM
-NXP_EXT_TVDD_CFG_1={20, 02, 0F, 01, A0, 0E, 0B, 31, 01, 01, 31, 00, 00, 00, 01, 00, D0, 0C}
-
-###############################################################################
-#config2: use DCDC in CE, use Tx_Pwr_Req, set CFG2 mode, SLALM,
-#monitoring 5V from DCDC, 3.3V for both RM and CM, DCDCWaitTime=4.2ms
-NXP_EXT_TVDD_CFG_2={20, 02, 0F, 01, A0, 0E, 0B, 11, 01, C2, B2, 00, B2, 1E, 1F, 00, D0, 0C}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_1={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_2={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_3={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_4={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_5={
-#}
-
-###############################################################################
-# NXP RF configuration ALM/PLM settings
-# This section needs to be updated with the correct values based on the platform
-#NXP_RF_CONF_BLK_6={
-#}
-
-###############################################################################
-# Set configuration optimization decision setting
-# Enable    = 0x01
-# Disable   = 0x00
-NXP_SET_CONFIG_ALWAYS=0x00
-
-###############################################################################
-# Core configuration extensions
-# It includes
-# Wired mode settings A0ED, A0EE
-# Tag Detector A040, A041, A043
-# Low Power mode A007
-# Clock settings A002, A003
-# PbF settings A008
-# Clock timeout settings A004
-# eSE (SVDD) PWR REQ settings A0F2
-# Window size A0D8
-# DWP Speed   A0D5
-# How eSE connected to PN553 A012
-# UICC2 bit rate A0D1
-# SWP1A interface A0D4
-# DWP intf behavior config, SVDD Load activated by default if set to 0x31 A037
-NXP_CORE_CONF_EXTN={20, 02, 29, 0A,
-    A0, EC, 01, 01,
-    A0, ED, 01, 01,
-    A0, 5E, 01, 01,
-    A0, 12, 01, 02,
-    A0, 40, 01, 01,
-    A0, D1, 01, 02,
-    A0, D4, 01, 01,
-    A0, 37, 01, 35,
-    A0, D8, 01, 02,
-    A0, D5, 01, 0A
-   }
-#       A0, F2, 01, 01,
-#       A0, 40, 01, 01,
-#       A0, 41, 01, 02,
-#       A0, 43, 01, 04,
-#       A0, 02, 01, 01,
-#       A0, 03, 01, 11,
-#       A0, 07, 01, 03,
-#       A0, 08, 01, 01
-#       }
-
-###############################################################################
-# Core configuration rf field filter settings to enable set to 01 to disable set
-# to 00 last bit
-NXP_CORE_RF_FIELD={ 20, 02, 05, 01, A0, 62, 01, 00 }
-
-###############################################################################
-# To enable i2c fragmentation set i2c fragmentation enable 0x01 to disable set
-# to 0x00
-NXP_I2C_FRAGMENTATION_ENABLED=0x00
-
-###############################################################################
-# Core configuration settings
-NXP_CORE_CONF={ 20, 02, 31, 0F,
-        85, 01, 01,
-        28, 01, 00,
-        21, 01, 00,
-        30, 01, 08,
-        31, 01, 03,
-        32, 01, 60,
-        38, 01, 01,
-        33, 04, 01, 02, 03, 04,
-        54, 01, 06,
-        50, 01, 02,
-        5B, 01, 00,
-        80, 01, 01,
-        81, 01, 01,
-        82, 01, 0E,
-        18, 01, 01
-        }
-
-###############################################################################
-# Mifare Classic Key settings
-#NXP_CORE_MFCKEY_SETTING={20, 02, 25,04, A0, 51, 06, A0, A1, A2, A3, A4, A5,
-#                                     A0, 52, 06, D3, F7, D3, F7, D3, F7,
-#                                     A0, 53, 06, FF, FF, FF, FF, FF, FF,
-#                                     A0, 54, 06, 00, 00, 00, 00, 00, 00}
-
-###############################################################################
-# Default SE Options
-# No secure element 0x00
-# eSE               0x01
-# UICC              0x02
-# UICC2             0x04
-NXP_DEFAULT_SE=0x07
-
-###############################################################################
-#Enable SWP full power mode when phone is power off
-NXP_SWP_FULL_PWR_ON=0x00
-
-###############################################################################
-#### Select the CHIP ####
-#PN547C2            0x01
-#PN65T              0x02
-#PN548AD            0x03
-#PN66T              0x04
-#PN551              0x05
-#PN67T              0x06
-#PN553              0x07
-#PN80T              0x08
-NXP_NFC_CHIP=0x08
-
-###############################################################################
-# CE when Screen state is locked
-# This setting is for DEFAULT_AID_ROUTE,
-# DEFAULT_DESFIRE_ROUTE and DEFAULT_MIFARE_CLT_ROUTE
-# Disable           0x00
-# Enable            0x01
-NXP_CE_ROUTE_STRICT_DISABLE=0x01
-
-###############################################################################
-#Timeout in secs to get NFCEE Discover notification
-NXP_DEFAULT_NFCEE_DISC_TIMEOUT=20
-
-###############################################################################
-NXP_DEFAULT_NFCEE_TIMEOUT=20
-
-###############################################################################
-#Timeout in secs
-NXP_SWP_RD_START_TIMEOUT=0x0A
-
-###############################################################################
-#Timeout in secs
-NXP_SWP_RD_TAG_OP_TIMEOUT=0x01
-
-###############################################################################
-#Set the default AID route Location :
-#This settings will be used when application does not set this parameter
-# host  0x00
-# eSE   0x01
-# UICC  0x02
-# UICC2 0x03
-DEFAULT_AID_ROUTE=0x00
-
-###############################################################################
-#Set the Mifare Desfire route Location :
-#This settings will be used when application does not set this parameter
-# host  0x00
-# eSE   0x01
-# UICC  0x02
-# UICC2 0x03
-DEFAULT_DESFIRE_ROUTE=0x02
-
-###############################################################################
-#Set the Mifare CLT route Location :
-#This settings will be used when application does not set this parameter
-# host  0x00
-# eSE   0x01
-# UICC  0x02
-# UICC2 0x03
-DEFAULT_MIFARE_CLT_ROUTE=0x02
-
-###############################################################################
-#Set the Felica CLT route Location :
-#This settings will be used when application does not set this parameter
-# eSE   0x01
-# UICC  0x02
-# UICC2 0x03
-DEFAULT_FELICA_CLT_ROUTE=0x01
-
-###############################################################################
-#Set the default AID Power state :
-#This settings will be used when application does not set this parameter
-# bit pos 0 = Switch On
-# bit pos 1 = Switch Off
-# bit pos 2 = Battery Off
-# bit pos 3 = Screen Lock
-# bit pos 4 = Screen Off
-DEFAULT_AID_PWR_STATE=0x19
-
-###############################################################################
-#Set the Mifare Desfire Power state :
-#This settings will be used when application does not set this parameter
-# bit pos 0 = Switch On
-# bit pos 1 = Switch Off
-# bit pos 2 = Battery Off
-# bit pos 3 = Screen Lock
-# bit pos 4 = Screen Off
-DEFAULT_DESFIRE_PWR_STATE=0x1B
-
-###############################################################################
-#Set the Mifare CLT Power state :
-#This settings will be used when application does not set this parameter
-# bit pos 0 = Switch On
-# bit pos 1 = Switch Off
-# bit pos 2 = Battery Off
-# bit pos 3 = Screen Lock
-# bit pos 4 = Screen Off
-DEFAULT_MIFARE_CLT_PWR_STATE=0x1B
-
-###############################################################################
-#Set the Felica CLT Power state :
-#This settings will be used when application does not set this parameter
-# bit pos 0 = Switch On
-# bit pos 1 = Switch Off
-# bit pos 2 = Battery Off
-# bit pos 3 = Screen Lock
-# bit pos 4 = Screen Off
-DEFAULT_FELICA_CLT_PWR_STATE=0x1B
-
-###############################################################################
-# AID Matching platform options
-# AID_MATCHING_L 0x01
-# AID_MATCHING_K 0x02
-AID_MATCHING_PLATFORM=0x01
-
-###############################################################################
-# P61 interface options
-# NFC 0x01
-# SPI 0x02
-NXP_P61_LS_DEFAULT_INTERFACE=0x01
-
-###############################################################################
-# P61 LTSM interface options
-# NFC 0x01
-# SPI 0x02
-NXP_P61_LTSM_DEFAULT_INTERFACE=0x01
-
-###############################################################################
-#CHINA_TIANJIN_RF_SETTING
-#Enable  0x01
-#Disable  0x00
-NXP_CHINA_TIANJIN_RF_ENABLED=0x01
-
-###############################################################################
-#SWP_SWITCH_TIMEOUT_SETTING
-# Allowed range of swp timeout setting is 0x00 to 0x3C [0 - 60].
-# Timeout in milliseconds, for example
-# No Timeout  0x00
-# 10 millisecond timeout 0x0A
-NXP_SWP_SWITCH_TIMEOUT=0x0A
-
-###############################################################################
-# P61 interface options for JCOP Download
-# NFC 0x01
-# SPI 0x02
-NXP_P61_JCOP_DEFAULT_INTERFACE=0x01
-
-###############################################################################
-# P61 JCOP OS download  options
-# FRAMEWORK API BY APPLICATION 0x00
-# AT BOOT_TIME 0x01
-NXP_JCOPDL_AT_BOOT_ENABLE=0x00
-
-###############################################################################
-# Loader service version
-# NFC service checks for LS version 2.0 or 2.1
-# LS2.0 0x20
-# LS2.1 0x21
-# LS2.2 0x22
-# AT NFC service intialization
-NXP_LOADER_SERVICE_VERSION=0x22
-
-###############################################################################
-#Timeout value  in milliseconds for NFCC standby mode.The range is between 5000
-#msec to 20000 msec and zero is to disable.
-NXP_NFCC_STANDBY_TIMEOUT=20000
-
-###############################################################################
-#Dynamic RSSI feature enable
-# Disable           0x00
-# Enable            0x01
-NXP_AGC_DEBUG_ENABLE=0x00
-
-###############################################################################
-#Virtual Mode ESE and Wired Mode ongoing delay Wired Mode
-# For Technology routing to ESE Technology Mask = 4
-# For ISO-DEP Protocol routing to ESE Mask      = 2
-# It can also take TECH|PROTO    = 6
-# To ignore the delay set mask to = 0
-NXP_ESE_WIRED_PRT_MASK=0x00
-
-###############################################################################
-#Virtual Mode UICC and Wired Mode  ongoing delay Wired Mode
-#For Technology routing to UICC Technology Mask = 4
-#For ISO-DEP Protocol routing to UICC set Mask  = 2
-#For Select AID Routing to UICC       set Mask  = 1
-#It can also take values TECH|PROTO|SELECT_AID  = 7 , 6 , 5 ,3 .To ignore delay
-#set mask = 0
-NXP_UICC_WIRED_PRT_MASK=0x00
-
-################################################################################
-#RF field true delay Wired Mode
-# delay wired mode = 1
-# allow wired mode = 0
-NXP_WIRED_MODE_RF_FIELD_ENABLE=0x00
-
-###############################################################################
-#Config to allow adding aids
-#NFC on/off is required after this config
-#1 = enabling adding aid  to NFCC routing table.
-#0 = disabling adding aid to NFCC routing table.
-NXP_ENABLE_ADD_AID=0x01
-
-###############################################################################
-# JCOP-3.3 continuous process timeout in msec and value should be in Hexadecimal
-# JCOP CP TIMEOUT
-NXP_CP_TIMEOUT={00, 77}
-
-###############################################################################
-# Enable/Disable checking default proto SE Id
-# Disable           0x00
-# Enable            0x01
-NXP_CHECK_DEFAULT_PROTO_SE_ID=0x01
-
-###############################################################################
-#NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE
-#Enable/Disable block number checks for china transit use case
-#Enable  0x01
-#Disable  0x00
-NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE=0x01
-
-###############################################################################
-# Wired mode resume timeout vaule in wired mode resume feature enable
-# DWP resume time out in ms( 4 bytes hex value and LSB first)
-#example 1000 = 0x03E8
-#exmaple 2000 = 0x07D0
-#example 500 = 0x01F4
-NXP_WIREDMODE_RESUME_TIMEOUT={E8,03,00,00}
-###############################################################################
-# Power to eSE is controlled by DH or PMU depending on following configurations
-#define DH_PWR_CONTROL         1
-#define PMU_PWR_CONTROL        2
-NXP_ESE_POWER_DH_CONTROL=1
-
-###############################################################################
-# Timeout value in milliseconds for wired mode resume after RF field event timeout
-NXP_NFCC_RF_FIELD_EVENT_TIMEOUT=3000
-
-###############################################################################
-# NXP PMU Support configuration is sent if PMU_PWR_CONTROL is configured
-# External PMU available in phone ON and phone OFF case if NXP_ESE_POWER_EXT_PMU=1
-# External PMU available only in phone ON case if NXP_ESE_POWER_EXT_PMU=2
-NXP_ESE_POWER_EXT_PMU=2
-
-###############################################################################
-# Whether to allow wired mode in desfire and mifare CLT
-# Disable           0x00
-# Enable            0x01
-NXP_ALLOW_WIRED_IN_MIFARE_DESFIRE_CLT=0x00
-
-###############################################################################
-# Restrict routing to first matched rule only.
-# Blacklist enable   0x01
-# Blacklist disable  0x00
-NXP_PROP_BLACKLIST_ROUTING=0x00
-
-###############################################################################
-# Send DWP interface reset command as part of SE open
-# Disable           0x00
-# Enable            0x01
-NXP_DWP_INTF_RESET_ENABLE=0x01
-
-###############################################################################
-# Timeout value in milliseconds for JCOP OS download to complete
-OS_DOWNLOAD_TIMEOUT_VALUE=60000
-
-###############################################################################
-# Timeout value in milliseconds to send response for Felica command received
-NXP_HCEF_CMD_RSP_TIMEOUT_VALUE=5000
-
-###############################################################################
\ No newline at end of file
diff --git a/halimpl/pn54x/log/phNxpLog.c b/halimpl/pn54x/log/phNxpLog.c
deleted file mode 100644
index 49d6911..0000000
--- a/halimpl/pn54x/log/phNxpLog.c
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * Copyright (C) 2010-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdio.h>
-#include <string.h>
-#if !defined(NXPLOG__H_INCLUDED)
-#include "phNxpConfig.h"
-#include "phNxpLog.h"
-#endif
-#include <cutils/properties.h>
-
-const char* NXPLOG_ITEM_EXTNS = "NxpExtns";
-const char* NXPLOG_ITEM_NCIHAL = "NxpHal";
-const char* NXPLOG_ITEM_NCIX = "NxpNciX";
-const char* NXPLOG_ITEM_NCIR = "NxpNciR";
-const char* NXPLOG_ITEM_FWDNLD = "NxpFwDnld";
-const char* NXPLOG_ITEM_TML = "NxpTml";
-
-#ifdef NXP_HCI_REQ
-const char* NXPLOG_ITEM_HCPX = "NxpHcpX";
-const char* NXPLOG_ITEM_HCPR = "NxpHcpR";
-#endif /*NXP_HCI_REQ*/
-
-/* global log level structure */
-nci_log_level_t gLog_level;
-
-/*******************************************************************************
- *
- * Function         phNxpLog_SetGlobalLogLevel
- *
- * Description      Sets the global log level for all modules.
- *                  This value is set by Android property
- *nfc.nxp_log_level_global.
- *                  If value can be overridden by module log level.
- *
- * Returns          The value of global log level
- *
- ******************************************************************************/
-static uint8_t phNxpLog_SetGlobalLogLevel(void) {
-  uint8_t level = NXPLOG_DEFAULT_LOGLEVEL;
-  unsigned long num = 0;
-  char valueStr[PROPERTY_VALUE_MAX] = {0};
-
-  int len = property_get(PROP_NAME_NXPLOG_GLOBAL_LOGLEVEL, valueStr, "");
-  if (len > 0) {
-    /* let Android property override .conf variable */
-    sscanf(valueStr, "%lu", &num);
-    level = (unsigned char)num;
-  }
-  memset(&gLog_level, level, sizeof(nci_log_level_t));
-  return level;
-}
-
-/*******************************************************************************
- *
- * Function         phNxpLog_SetHALLogLevel
- *
- * Description      Sets the HAL layer log level.
- *
- * Returns          void
- *
- ******************************************************************************/
-static void phNxpLog_SetHALLogLevel(uint8_t level) {
-  unsigned long num = 0;
-  int len;
-  char valueStr[PROPERTY_VALUE_MAX] = {0};
-
-  if (GetNxpNumValue(NAME_NXPLOG_HAL_LOGLEVEL, &num, sizeof(num))) {
-    gLog_level.hal_log_level =
-        (level > (unsigned char)num) ? level : (unsigned char)num;
-    ;
-  }
-
-  len = property_get(PROP_NAME_NXPLOG_HAL_LOGLEVEL, valueStr, "");
-  if (len > 0) {
-    /* let Android property override .conf variable */
-    sscanf(valueStr, "%lu", &num);
-    gLog_level.hal_log_level = (unsigned char)num;
-  }
-}
-
-/*******************************************************************************
- *
- * Function         phNxpLog_SetExtnsLogLevel
- *
- * Description      Sets the Extensions layer log level.
- *
- * Returns          void
- *
- ******************************************************************************/
-static void phNxpLog_SetExtnsLogLevel(uint8_t level) {
-  unsigned long num = 0;
-  int len;
-  char valueStr[PROPERTY_VALUE_MAX] = {0};
-  if (GetNxpNumValue(NAME_NXPLOG_EXTNS_LOGLEVEL, &num, sizeof(num))) {
-    gLog_level.extns_log_level =
-        (level > (unsigned char)num) ? level : (unsigned char)num;
-    ;
-  }
-
-  len = property_get(PROP_NAME_NXPLOG_EXTNS_LOGLEVEL, valueStr, "");
-  if (len > 0) {
-    /* let Android property override .conf variable */
-    sscanf(valueStr, "%lu", &num);
-    gLog_level.extns_log_level = (unsigned char)num;
-  }
-}
-
-/*******************************************************************************
- *
- * Function         phNxpLog_SetTmlLogLevel
- *
- * Description      Sets the Tml layer log level.
- *
- * Returns          void
- *
- ******************************************************************************/
-static void phNxpLog_SetTmlLogLevel(uint8_t level) {
-  unsigned long num = 0;
-  int len;
-  char valueStr[PROPERTY_VALUE_MAX] = {0};
-  if (GetNxpNumValue(NAME_NXPLOG_TML_LOGLEVEL, &num, sizeof(num))) {
-    gLog_level.tml_log_level =
-        (level > (unsigned char)num) ? level : (unsigned char)num;
-    ;
-  }
-
-  len = property_get(PROP_NAME_NXPLOG_TML_LOGLEVEL, valueStr, "");
-  if (len > 0) {
-    /* let Android property override .conf variable */
-    sscanf(valueStr, "%lu", &num);
-    gLog_level.tml_log_level = (unsigned char)num;
-  }
-}
-
-/*******************************************************************************
- *
- * Function         phNxpLog_SetDnldLogLevel
- *
- * Description      Sets the FW download layer log level.
- *
- * Returns          void
- *
- ******************************************************************************/
-static void phNxpLog_SetDnldLogLevel(uint8_t level) {
-  unsigned long num = 0;
-  int len;
-  char valueStr[PROPERTY_VALUE_MAX] = {0};
-  if (GetNxpNumValue(NAME_NXPLOG_FWDNLD_LOGLEVEL, &num, sizeof(num))) {
-    gLog_level.dnld_log_level =
-        (level > (unsigned char)num) ? level : (unsigned char)num;
-    ;
-  }
-
-  len = property_get(PROP_NAME_NXPLOG_FWDNLD_LOGLEVEL, valueStr, "");
-  if (len > 0) {
-    /* let Android property override .conf variable */
-    sscanf(valueStr, "%lu", &num);
-    gLog_level.dnld_log_level = (unsigned char)num;
-  }
-}
-
-/*******************************************************************************
- *
- * Function         phNxpLog_SetNciTxLogLevel
- *
- * Description      Sets the NCI transaction layer log level.
- *
- * Returns          void
- *
- ******************************************************************************/
-static void phNxpLog_SetNciTxLogLevel(uint8_t level) {
-  unsigned long num = 0;
-  int len;
-  char valueStr[PROPERTY_VALUE_MAX] = {0};
-  if (GetNxpNumValue(NAME_NXPLOG_NCIX_LOGLEVEL, &num, sizeof(num))) {
-    gLog_level.ncix_log_level =
-        (level > (unsigned char)num) ? level : (unsigned char)num;
-  }
-  if (GetNxpNumValue(NAME_NXPLOG_NCIR_LOGLEVEL, &num, sizeof(num))) {
-    gLog_level.ncir_log_level =
-        (level > (unsigned char)num) ? level : (unsigned char)num;
-    ;
-  }
-
-  len = property_get(PROP_NAME_NXPLOG_NCI_LOGLEVEL, valueStr, "");
-  if (len > 0) {
-    /* let Android property override .conf variable */
-    sscanf(valueStr, "%lu", &num);
-    gLog_level.ncix_log_level = (unsigned char)num;
-    gLog_level.ncir_log_level = (unsigned char)num;
-  }
-}
-
-/******************************************************************************
- * Function         phNxpLog_InitializeLogLevel
- *
- * Description      Initialize and get log level of module from libnfc-nxp.conf
- *or
- *                  Android runtime properties.
- *                  The Android property nfc.nxp_global_log_level is to
- *                  define log level for all modules. Modules log level will
- *overwide global level.
- *                  The Android property will overwide the level
- *                  in libnfc-nxp.conf
- *
- *                  Android property names:
- *                      nfc.nxp_log_level_global    * defines log level for all
- *modules
- *                      nfc.nxp_log_level_extns     * extensions module log
- *                      nfc.nxp_log_level_hal       * Hal module log
- *                      nfc.nxp_log_level_dnld      * firmware download module
- *log
- *                      nfc.nxp_log_level_tml       * TML module log
- *                      nfc.nxp_log_level_nci       * NCI transaction log
- *
- *                  Log Level values:
- *                      NXPLOG_LOG_SILENT_LOGLEVEL  0        * No trace to show
- *                      NXPLOG_LOG_ERROR_LOGLEVEL   1        * Show Error trace
- *only
- *                      NXPLOG_LOG_WARN_LOGLEVEL    2        * Show Warning
- *trace and Error trace
- *                      NXPLOG_LOG_DEBUG_LOGLEVEL   3        * Show all traces
- *
- * Returns          void
- *
- ******************************************************************************/
-void phNxpLog_InitializeLogLevel(void) {
-  uint8_t level = phNxpLog_SetGlobalLogLevel();
-  phNxpLog_SetHALLogLevel(level);
-  phNxpLog_SetExtnsLogLevel(level);
-  phNxpLog_SetTmlLogLevel(level);
-  phNxpLog_SetDnldLogLevel(level);
-  phNxpLog_SetNciTxLogLevel(level);
-
-  ALOGD(
-      "%s: global =%u, Fwdnld =%u, extns =%u, \
-                hal =%u, tml =%u, ncir =%u, \
-                ncix =%u",
-      __func__, gLog_level.global_log_level, gLog_level.dnld_log_level,
-      gLog_level.extns_log_level, gLog_level.hal_log_level,
-      gLog_level.tml_log_level, gLog_level.ncir_log_level,
-      gLog_level.ncix_log_level);
-}
diff --git a/halimpl/pn54x/log/phNxpLog.h b/halimpl/pn54x/log/phNxpLog.h
deleted file mode 100644
index 5037a4c..0000000
--- a/halimpl/pn54x/log/phNxpLog.h
+++ /dev/null
@@ -1,352 +0,0 @@
-/*
- * Copyright (C) 2010-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#if !defined(NXPLOG__H_INCLUDED)
-#define NXPLOG__H_INCLUDED
-
-#include <log/log.h>
-
-typedef struct nci_log_level {
-  uint8_t global_log_level;
-  uint8_t extns_log_level;
-  uint8_t hal_log_level;
-  uint8_t dnld_log_level;
-  uint8_t tml_log_level;
-  uint8_t ncix_log_level;
-  uint8_t ncir_log_level;
-} nci_log_level_t;
-
-/* global log level Ref */
-extern nci_log_level_t gLog_level;
-
-/* define log module included when compile */
-#define ENABLE_EXTNS_TRACES TRUE
-#define ENABLE_HAL_TRACES TRUE
-#define ENABLE_TML_TRACES TRUE
-#define ENABLE_FWDNLD_TRACES TRUE
-#define ENABLE_NCIX_TRACES TRUE
-#define ENABLE_NCIR_TRACES TRUE
-
-#define ENABLE_HCPX_TRACES FALSE
-#define ENABLE_HCPR_TRACES FALSE
-
-/* ####################### Set the log module name in .conf file
- * ########################## */
-#define NAME_NXPLOG_EXTNS_LOGLEVEL "NXPLOG_EXTNS_LOGLEVEL"
-#define NAME_NXPLOG_HAL_LOGLEVEL "NXPLOG_NCIHAL_LOGLEVEL"
-#define NAME_NXPLOG_NCIX_LOGLEVEL "NXPLOG_NCIX_LOGLEVEL"
-#define NAME_NXPLOG_NCIR_LOGLEVEL "NXPLOG_NCIR_LOGLEVEL"
-#define NAME_NXPLOG_FWDNLD_LOGLEVEL "NXPLOG_FWDNLD_LOGLEVEL"
-#define NAME_NXPLOG_TML_LOGLEVEL "NXPLOG_TML_LOGLEVEL"
-
-/* ####################### Set the log module name by Android property
- * ########################## */
-#define PROP_NAME_NXPLOG_GLOBAL_LOGLEVEL "nfc.nxp_log_level_global"
-#define PROP_NAME_NXPLOG_EXTNS_LOGLEVEL "nfc.nxp_log_level_extns"
-#define PROP_NAME_NXPLOG_HAL_LOGLEVEL "nfc.nxp_log_level_hal"
-#define PROP_NAME_NXPLOG_NCI_LOGLEVEL "nfc.nxp_log_level_nci"
-#define PROP_NAME_NXPLOG_FWDNLD_LOGLEVEL "nfc.nxp_log_level_dnld"
-#define PROP_NAME_NXPLOG_TML_LOGLEVEL "nfc.nxp_log_level_tml"
-
-/* ####################### Set the logging level for EVERY COMPONENT here
- * ######################## :START: */
-#define NXPLOG_LOG_SILENT_LOGLEVEL 0x00
-#define NXPLOG_LOG_ERROR_LOGLEVEL 0x01
-#define NXPLOG_LOG_WARN_LOGLEVEL 0x02
-#define NXPLOG_LOG_DEBUG_LOGLEVEL 0x03
-/* ####################### Set the default logging level for EVERY COMPONENT
- * here ########################## :END: */
-
-/* The Default log level for all the modules. */
-#define NXPLOG_DEFAULT_LOGLEVEL NXPLOG_LOG_ERROR_LOGLEVEL
-
-/* ################################################################################################################
- */
-/* ############################################### Component Names
- * ################################################ */
-/* ################################################################################################################
- */
-
-extern const char* NXPLOG_ITEM_EXTNS;  /* Android logging tag for NxpExtns  */
-extern const char* NXPLOG_ITEM_NCIHAL; /* Android logging tag for NxpNciHal */
-extern const char* NXPLOG_ITEM_NCIX;   /* Android logging tag for NxpNciX   */
-extern const char* NXPLOG_ITEM_NCIR;   /* Android logging tag for NxpNciR   */
-extern const char* NXPLOG_ITEM_FWDNLD; /* Android logging tag for NxpFwDnld */
-extern const char* NXPLOG_ITEM_TML;    /* Android logging tag for NxpTml    */
-
-#ifdef NXP_HCI_REQ
-extern const char* NXPLOG_ITEM_HCPX; /* Android logging tag for NxpHcpX   */
-extern const char* NXPLOG_ITEM_HCPR; /* Android logging tag for NxpHcpR   */
-#endif                               /*NXP_HCI_REQ*/
-
-/* ######################################## Defines used for Logging data
- * ######################################### */
-#ifdef NXP_VRBS_REQ
-#define NXPLOG_FUNC_ENTRY(COMP) \
-  LOG_PRI(ANDROID_LOG_VERBOSE, (COMP), "+:%s", (__func__))
-#define NXPLOG_FUNC_EXIT(COMP) \
-  LOG_PRI(ANDROID_LOG_VERBOSE, (COMP), "-:%s", (__func__))
-#endif /*NXP_VRBS_REQ*/
-
-/* ################################################################################################################
- */
-/* ######################################## Logging APIs of actual modules
- * ######################################## */
-/* ################################################################################################################
- */
-/* Logging APIs used by NxpExtns module */
-#if (ENABLE_EXTNS_TRACES == TRUE)
-#define NXPLOG_EXTNS_D(...)                                       \
-  {                                                               \
-    if (gLog_level.extns_log_level >= NXPLOG_LOG_DEBUG_LOGLEVEL)  \
-      LOG_PRI(ANDROID_LOG_DEBUG, NXPLOG_ITEM_EXTNS, __VA_ARGS__); \
-  }
-#define NXPLOG_EXTNS_W(...)                                      \
-  {                                                              \
-    if (gLog_level.extns_log_level >= NXPLOG_LOG_WARN_LOGLEVEL)  \
-      LOG_PRI(ANDROID_LOG_WARN, NXPLOG_ITEM_EXTNS, __VA_ARGS__); \
-  }
-#define NXPLOG_EXTNS_E(...)                                       \
-  {                                                               \
-    if (gLog_level.extns_log_level >= NXPLOG_LOG_ERROR_LOGLEVEL)  \
-      LOG_PRI(ANDROID_LOG_ERROR, NXPLOG_ITEM_EXTNS, __VA_ARGS__); \
-  }
-#else
-#define NXPLOG_EXTNS_D(...)
-#define NXPLOG_EXTNS_W(...)
-#define NXPLOG_EXTNS_E(...)
-#endif /* Logging APIs used by NxpExtns module */
-
-/* Logging APIs used by NxpNciHal module */
-#if (ENABLE_HAL_TRACES == TRUE)
-#define NXPLOG_NCIHAL_D(...)                                       \
-  {                                                                \
-    if (gLog_level.hal_log_level >= NXPLOG_LOG_DEBUG_LOGLEVEL)     \
-      LOG_PRI(ANDROID_LOG_DEBUG, NXPLOG_ITEM_NCIHAL, __VA_ARGS__); \
-  }
-#define NXPLOG_NCIHAL_W(...)                                      \
-  {                                                               \
-    if (gLog_level.hal_log_level >= NXPLOG_LOG_WARN_LOGLEVEL)     \
-      LOG_PRI(ANDROID_LOG_WARN, NXPLOG_ITEM_NCIHAL, __VA_ARGS__); \
-  }
-#define NXPLOG_NCIHAL_E(...)                                       \
-  {                                                                \
-    if (gLog_level.hal_log_level >= NXPLOG_LOG_ERROR_LOGLEVEL)     \
-      LOG_PRI(ANDROID_LOG_ERROR, NXPLOG_ITEM_NCIHAL, __VA_ARGS__); \
-  }
-#else
-#define NXPLOG_NCIHAL_D(...)
-#define NXPLOG_NCIHAL_W(...)
-#define NXPLOG_NCIHAL_E(...)
-#endif /* Logging APIs used by HAL module */
-
-/* Logging APIs used by NxpNciX module */
-#if (ENABLE_NCIX_TRACES == TRUE)
-#define NXPLOG_NCIX_D(...)                                       \
-  {                                                              \
-    if (gLog_level.ncix_log_level >= NXPLOG_LOG_DEBUG_LOGLEVEL)  \
-      LOG_PRI(ANDROID_LOG_DEBUG, NXPLOG_ITEM_NCIX, __VA_ARGS__); \
-  }
-#define NXPLOG_NCIX_W(...)                                      \
-  {                                                             \
-    if (gLog_level.ncix_log_level >= NXPLOG_LOG_WARN_LOGLEVEL)  \
-      LOG_PRI(ANDROID_LOG_WARN, NXPLOG_ITEM_NCIX, __VA_ARGS__); \
-  }
-#define NXPLOG_NCIX_E(...)                                       \
-  {                                                              \
-    if (gLog_level.ncix_log_level >= NXPLOG_LOG_ERROR_LOGLEVEL)  \
-      LOG_PRI(ANDROID_LOG_ERROR, NXPLOG_ITEM_NCIX, __VA_ARGS__); \
-  }
-#else
-#define NXPLOG_NCIX_D(...)
-#define NXPLOG_NCIX_W(...)
-#define NXPLOG_NCIX_E(...)
-#endif /* Logging APIs used by NCIx module */
-
-/* Logging APIs used by NxpNciR module */
-#if (ENABLE_NCIR_TRACES == TRUE)
-#define NXPLOG_NCIR_D(...)                                       \
-  {                                                              \
-    if (gLog_level.ncir_log_level >= NXPLOG_LOG_DEBUG_LOGLEVEL)  \
-      LOG_PRI(ANDROID_LOG_DEBUG, NXPLOG_ITEM_NCIR, __VA_ARGS__); \
-  }
-#define NXPLOG_NCIR_W(...)                                      \
-  {                                                             \
-    if (gLog_level.ncir_log_level >= NXPLOG_LOG_WARN_LOGLEVEL)  \
-      LOG_PRI(ANDROID_LOG_WARN, NXPLOG_ITEM_NCIR, __VA_ARGS__); \
-  }
-#define NXPLOG_NCIR_E(...)                                       \
-  {                                                              \
-    if (gLog_level.ncir_log_level >= NXPLOG_LOG_ERROR_LOGLEVEL)  \
-      LOG_PRI(ANDROID_LOG_ERROR, NXPLOG_ITEM_NCIR, __VA_ARGS__); \
-  }
-#else
-#define NXPLOG_NCIR_D(...)
-#define NXPLOG_NCIR_W(...)
-#define NXPLOG_NCIR_E(...)
-#endif /* Logging APIs used by NCIR module */
-
-/* Logging APIs used by NxpFwDnld module */
-#if (ENABLE_FWDNLD_TRACES == TRUE)
-#define NXPLOG_FWDNLD_D(...)                                       \
-  {                                                                \
-    if (gLog_level.dnld_log_level >= NXPLOG_LOG_DEBUG_LOGLEVEL)    \
-      LOG_PRI(ANDROID_LOG_DEBUG, NXPLOG_ITEM_FWDNLD, __VA_ARGS__); \
-  }
-#define NXPLOG_FWDNLD_W(...)                                      \
-  {                                                               \
-    if (gLog_level.dnld_log_level >= NXPLOG_LOG_WARN_LOGLEVEL)    \
-      LOG_PRI(ANDROID_LOG_WARN, NXPLOG_ITEM_FWDNLD, __VA_ARGS__); \
-  }
-#define NXPLOG_FWDNLD_E(...)                                       \
-  {                                                                \
-    if (gLog_level.dnld_log_level >= NXPLOG_LOG_ERROR_LOGLEVEL)    \
-      LOG_PRI(ANDROID_LOG_ERROR, NXPLOG_ITEM_FWDNLD, __VA_ARGS__); \
-  }
-#else
-#define NXPLOG_FWDNLD_D(...)
-#define NXPLOG_FWDNLD_W(...)
-#define NXPLOG_FWDNLD_E(...)
-#endif /* Logging APIs used by NxpFwDnld module */
-
-/* Logging APIs used by NxpTml module */
-#if (ENABLE_TML_TRACES == TRUE)
-#define NXPLOG_TML_D(...)                                       \
-  {                                                             \
-    if (gLog_level.tml_log_level >= NXPLOG_LOG_DEBUG_LOGLEVEL)  \
-      LOG_PRI(ANDROID_LOG_DEBUG, NXPLOG_ITEM_TML, __VA_ARGS__); \
-  }
-#define NXPLOG_TML_W(...)                                      \
-  {                                                            \
-    if (gLog_level.tml_log_level >= NXPLOG_LOG_WARN_LOGLEVEL)  \
-      LOG_PRI(ANDROID_LOG_WARN, NXPLOG_ITEM_TML, __VA_ARGS__); \
-  }
-#define NXPLOG_TML_E(...)                                       \
-  {                                                             \
-    if (gLog_level.tml_log_level >= NXPLOG_LOG_ERROR_LOGLEVEL)  \
-      LOG_PRI(ANDROID_LOG_ERROR, NXPLOG_ITEM_TML, __VA_ARGS__); \
-  }
-#else
-#define NXPLOG_TML_D(...)
-#define NXPLOG_TML_W(...)
-#define NXPLOG_TML_E(...)
-#endif /* Logging APIs used by NxpTml module */
-
-#ifdef NXP_HCI_REQ
-/* Logging APIs used by NxpHcpX module */
-#if (ENABLE_HCPX_TRACES == TRUE)
-#define NXPLOG_HCPX_D(...)                                         \
-  {                                                                \
-    if (gLog_level.dnld_log_level >= NXPLOG_LOG_DEBUG_LOGLEVEL)    \
-      LOG_PRI(ANDROID_LOG_DEBUG, NXPLOG_ITEM_FWDNLD, __VA_ARGS__); \
-  }
-#define NXPLOG_HCPX_W(...)                                        \
-  {                                                               \
-    if (gLog_level.dnld_log_level >= NXPLOG_LOG_WARN_LOGLEVEL)    \
-      LOG_PRI(ANDROID_LOG_WARN, NXPLOG_ITEM_FWDNLD, __VA_ARGS__); \
-  }
-#define NXPLOG_HCPX_E(...)                                         \
-  {                                                                \
-    if (gLog_level.dnld_log_level >= NXPLOG_LOG_ERROR_LOGLEVEL)    \
-      LOG_PRI(ANDROID_LOG_ERROR, NXPLOG_ITEM_FWDNLD, __VA_ARGS__); \
-  }
-#else
-#define NXPLOG_HCPX_D(...)
-#define NXPLOG_HCPX_W(...)
-#define NXPLOG_HCPX_E(...)
-#endif /* Logging APIs used by NxpHcpX module */
-
-/* Logging APIs used by NxpHcpR module */
-#if (ENABLE_HCPR_TRACES == TRUE)
-#define NXPLOG_HCPR_D(...)                                         \
-  {                                                                \
-    if (gLog_level.dnld_log_level >= NXPLOG_LOG_DEBUG_LOGLEVEL)    \
-      LOG_PRI(ANDROID_LOG_DEBUG, NXPLOG_ITEM_FWDNLD, __VA_ARGS__); \
-  }
-#define NXPLOG_HCPR_W(...)                                        \
-  {                                                               \
-    if (gLog_level.dnld_log_level >= NXPLOG_LOG_WARN_LOGLEVEL)    \
-      LOG_PRI(ANDROID_LOG_WARN, NXPLOG_ITEM_FWDNLD, __VA_ARGS__); \
-  }
-#define NXPLOG_HCPR_E(...)                                         \
-  {                                                                \
-    if (gLog_level.dnld_log_level >= NXPLOG_LOG_ERROR_LOGLEVEL)    \
-      LOG_PRI(ANDROID_LOG_ERROR, NXPLOG_ITEM_FWDNLD, __VA_ARGS__); \
-  }
-#else
-#define NXPLOG_HCPR_D(...)
-#define NXPLOG_HCPR_W(...)
-#define NXPLOG_HCPR_E(...)
-#endif /* Logging APIs used by NxpHcpR module */
-#endif /* NXP_HCI_REQ */
-
-#ifdef NXP_VRBS_REQ
-#if (ENABLE_EXTNS_TRACES == TRUE)
-#define NXPLOG_EXTNS_ENTRY() NXPLOG_FUNC_ENTRY(NXPLOG_ITEM_EXTNS)
-#define NXPLOG_EXTNS_EXIT() NXPLOG_FUNC_EXIT(NXPLOG_ITEM_EXTNS)
-#else
-#define NXPLOG_EXTNS_ENTRY()
-#define NXPLOG_EXTNS_EXIT()
-#endif
-
-#if (ENABLE_HAL_TRACES == TRUE)
-#define NXPLOG_NCIHAL_ENTRY() NXPLOG_FUNC_ENTRY(NXPLOG_ITEM_NCIHAL)
-#define NXPLOG_NCIHAL_EXIT() NXPLOG_FUNC_EXIT(NXPLOG_ITEM_NCIHAL)
-#else
-#define NXPLOG_NCIHAL_ENTRY()
-#define NXPLOG_NCIHAL_EXIT()
-#endif
-
-#if (ENABLE_NCIX_TRACES == TRUE)
-#define NXPLOG_NCIX_ENTRY() NXPLOG_FUNC_ENTRY(NXPLOG_ITEM_NCIX)
-#define NXPLOG_NCIX_EXIT() NXPLOG_FUNC_EXIT(NXPLOG_ITEM_NCIX)
-#else
-#define NXPLOG_NCIX_ENTRY()
-#define NXPLOG_NCIX_EXIT()
-#endif
-
-#if (ENABLE_NCIR_TRACES == TRUE)
-#define NXPLOG_NCIR_ENTRY() NXPLOG_FUNC_ENTRY(NXPLOG_ITEM_NCIR)
-#define NXPLOG_NCIR_EXIT() NXPLOG_FUNC_EXIT(NXPLOG_ITEM_NCIR)
-#else
-#define NXPLOG_NCIR_ENTRY()
-#define NXPLOG_NCIR_EXIT()
-#endif
-
-#ifdef NXP_HCI_REQ
-
-#if (ENABLE_HCPX_TRACES == TRUE)
-#define NXPLOG_HCPX_ENTRY() NXPLOG_FUNC_ENTRY(NXPLOG_ITEM_HCPX)
-#define NXPLOG_HCPX_EXIT() NXPLOG_FUNC_EXIT(NXPLOG_ITEM_HCPX)
-#else
-#define NXPLOG_HCPX_ENTRY()
-#define NXPLOG_HCPX_EXIT()
-#endif
-
-#if (ENABLE_HCPR_TRACES == TRUE)
-#define NXPLOG_HCPR_ENTRY() NXPLOG_FUNC_ENTRY(NXPLOG_ITEM_HCPR)
-#define NXPLOG_HCPR_EXIT() NXPLOG_FUNC_EXIT(NXPLOG_ITEM_HCPR)
-#else
-#define NXPLOG_HCPR_ENTRY()
-#define NXPLOG_HCPR_EXIT()
-#endif
-#endif /* NXP_HCI_REQ */
-
-#endif /* NXP_VRBS_REQ */
-
-void phNxpLog_InitializeLogLevel(void);
-
-#endif /* NXPLOG__H_INCLUDED */
diff --git a/halimpl/pn54x/nfc_nci.c b/halimpl/pn54x/nfc_nci.c
deleted file mode 100644
index 611c83c..0000000
--- a/halimpl/pn54x/nfc_nci.c
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * Copyright (C) 2012-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_TAG "NxpNfcNciHal"
-
-#include <errno.h>
-#include <hardware/hardware.h>
-#include <hardware/nfc.h>
-#include <log/log.h>
-#include <phNxpNciHal_Adaptation.h>
-#include <stdlib.h>
-#include <string.h>
-
-/*****************************************************************************
- * NXP NCI HAL Function implementations.
- *****************************************************************************/
-
-/*******************************************************************************
-**
-** Function         hal_open
-**
-** Description      It opens and initialzes the physical connection with NFCC.
-**
-** Returns          0 if successful
-**
-*******************************************************************************/
-static int hal_open(const struct nfc_nci_device* p_dev,
-                    nfc_stack_callback_t p_hal_cback,
-                    nfc_stack_data_callback_t* p_hal_data_callback) {
-  int retval = 0;
-
-  pn547_dev_t* dev = (pn547_dev_t*)p_dev;
-  retval = phNxpNciHal_open(p_hal_cback, p_hal_data_callback);
-
-  return retval;
-}
-
-/*******************************************************************************
-**
-** Function         hal_write
-**
-** Description      Write the data to NFCC.
-**
-** Returns          Number of bytes successfully written to NFCC.
-**
-*******************************************************************************/
-static int hal_write(const struct nfc_nci_device* p_dev, uint16_t data_len,
-                     const uint8_t* p_data) {
-  int retval = 0;
-  pn547_dev_t* dev = (pn547_dev_t*)p_dev;
-
-  retval = phNxpNciHal_write(data_len, p_data);
-  return retval;
-}
-
-/*******************************************************************************
-**
-** Function         hal_core_initialized
-**
-** Description      Notify NFCC after successful initialization of NFCC.
-**                  All proprietary settings can be done here.
-**
-** Returns          0 if successful
-**
-*******************************************************************************/
-static int hal_core_initialized(const struct nfc_nci_device* p_dev,
-                                uint8_t* p_core_init_rsp_params) {
-  int retval = 0;
-  pn547_dev_t* dev = (pn547_dev_t*)p_dev;
-
-  retval = phNxpNciHal_core_initialized(p_core_init_rsp_params);
-  return retval;
-}
-
-/*******************************************************************************
-**
-** Function         hal_pre_discover
-**
-** Description      Notify NFCC before start discovery.
-**
-** Returns          0 if successful
-**
-*******************************************************************************/
-static int hal_pre_discover(const struct nfc_nci_device* p_dev) {
-  int retval = 0;
-  pn547_dev_t* dev = (pn547_dev_t*)p_dev;
-
-  retval = phNxpNciHal_pre_discover();
-  return retval;
-}
-
-/*******************************************************************************
-**
-** Function         hal_close
-**
-** Description      Close the NFCC interface and free all resources.
-**
-** Returns          0 if successful
-**
-*******************************************************************************/
-static int hal_close(const struct nfc_nci_device* p_dev) {
-  int retval = 0;
-  pn547_dev_t* dev = (pn547_dev_t*)p_dev;
-
-  retval = phNxpNciHal_close();
-  return retval;
-}
-
-/*******************************************************************************
-**
-** Function         hal_control_granted
-**
-** Description      Notify NFCC that control is granted to HAL.
-**
-** Returns          0 if successful
-**
-*******************************************************************************/
-static int hal_control_granted(const struct nfc_nci_device* p_dev) {
-  int retval = 0;
-  pn547_dev_t* dev = (pn547_dev_t*)p_dev;
-
-  retval = phNxpNciHal_control_granted();
-  return retval;
-}
-
-/*******************************************************************************
-**
-** Function         hal_power_cycle
-**
-** Description      Notify power cycling has performed.
-**
-** Returns          0 if successful
-**
-*******************************************************************************/
-static int hal_power_cycle(const struct nfc_nci_device* p_dev) {
-  int retval = 0;
-  pn547_dev_t* dev = (pn547_dev_t*)p_dev;
-
-  retval = phNxpNciHal_power_cycle();
-  return retval;
-}
-
-/*************************************
- * Generic device handling.
- *************************************/
-
-/*******************************************************************************
-**
-** Function         nfc_close
-**
-** Description      Close the nfc device instance.
-**
-** Returns          0 if successful
-**
-*******************************************************************************/
-static int nfc_close(hw_device_t* dev) {
-  int retval = 0;
-  free(dev);
-  return retval;
-}
-
-/*******************************************************************************
-**
-** Function         nfc_open
-**
-** Description      Open the nfc device instance.
-**
-** Returns          0 if successful
-**
-*******************************************************************************/
-static int nfc_open(const hw_module_t* module, const char* name,
-                    hw_device_t** device) {
-  ALOGD("%s: enter; name=%s", __func__, name);
-  int retval = 0; /* 0 is ok; -1 is error */
-
-  if (strcmp(name, NFC_NCI_CONTROLLER) == 0) {
-    pn547_dev_t* dev = calloc(1, sizeof(pn547_dev_t));
-
-    /* Common hw_device_t fields */
-    dev->nci_device.common.tag = HARDWARE_DEVICE_TAG;
-    dev->nci_device.common.version =
-        0x00010000; /* [31:16] major, [15:0] minor */
-    dev->nci_device.common.module = (struct hw_module_t*)module;
-    dev->nci_device.common.close = nfc_close;
-
-    /* NCI HAL method pointers */
-    dev->nci_device.open = hal_open;
-    dev->nci_device.write = hal_write;
-    dev->nci_device.core_initialized = hal_core_initialized;
-    dev->nci_device.pre_discover = hal_pre_discover;
-    dev->nci_device.close = hal_close;
-    dev->nci_device.control_granted = hal_control_granted;
-    dev->nci_device.power_cycle = hal_power_cycle;
-
-    *device = (hw_device_t*)dev;
-  } else {
-    retval = -EINVAL;
-  }
-
-  ALOGD("%s: exit %d", __func__, retval);
-  return retval;
-}
-
-/* Android hardware module definition */
-static struct hw_module_methods_t nfc_module_methods = {
-    .open = nfc_open,
-};
-
-/* NFC module definition */
-struct nfc_nci_module_t HAL_MODULE_INFO_SYM = {
-    .common =
-        {
-            .tag = HARDWARE_MODULE_TAG,
-            .module_api_version = 0x0100, /* [15:8] major, [7:0] minor (1.0) */
-            .hal_api_version = 0x00,      /* 0 is only valid value */
-            .id = NFC_NCI_HARDWARE_MODULE_ID,
-            .name = "NXP PN54X NFC NCI HW HAL",
-            .author = "NXP Semiconductors",
-            .methods = &nfc_module_methods,
-        },
-};
diff --git a/halimpl/pn54x/self-test/phNxpNciHal_SelfTest.c b/halimpl/pn54x/self-test/phNxpNciHal_SelfTest.c
deleted file mode 100644
index 37d6a3e..0000000
--- a/halimpl/pn54x/self-test/phNxpNciHal_SelfTest.c
+++ /dev/null
@@ -1,1847 +0,0 @@
-/*
- * Copyright (C) 2012-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifdef NXP_HW_SELF_TEST
-
-#include <phNxpConfig.h>
-#include <phNxpLog.h>
-#include <phNxpNciHal_SelfTest.h>
-#include <phOsalNfc_Timer.h>
-#include <pthread.h>
-
-/* Timeout value to wait for response from PN54X */
-#define HAL_WRITE_RSP_TIMEOUT (2000)
-#define HAL_WRITE_MAX_RETRY (10)
-
-/******************* Structures and definitions *******************************/
-
-typedef uint8_t (*st_validator_t)(nci_data_t* exp,
-                                  phTmlNfc_TransactInfo_t* act);
-
-phAntenna_St_Resp_t phAntenna_resp;
-
-typedef struct nci_test_data {
-  nci_data_t cmd;
-  nci_data_t exp_rsp;
-  nci_data_t exp_ntf;
-  st_validator_t rsp_validator;
-  st_validator_t ntf_validator;
-
-} nci_test_data_t;
-
-/******************* Global variables *****************************************/
-
-static int thread_running = 0;
-static uint32_t timeoutTimerId = 0;
-static int hal_write_timer_fired = 0;
-
-/* TML Context */
-extern phTmlNfc_Context_t* gpphTmlNfc_Context;
-
-/* Global HAL Ref */
-extern phNxpNciHal_Control_t nxpncihal_ctrl;
-
-/* Driver parameters */
-phLibNfc_sConfig_t gDrvCfg;
-
-NFCSTATUS gtxldo_status = NFCSTATUS_FAILED;
-NFCSTATUS gagc_value_status = NFCSTATUS_FAILED;
-NFCSTATUS gagc_nfcld_status = NFCSTATUS_FAILED;
-NFCSTATUS gagc_differential_status = NFCSTATUS_FAILED;
-
-static uint8_t st_validator_testEquals(nci_data_t* exp,
-                                       phTmlNfc_TransactInfo_t* act);
-static uint8_t st_validator_null(nci_data_t* exp, phTmlNfc_TransactInfo_t* act);
-static uint8_t st_validator_testSWP1_vltg(nci_data_t* exp,
-                                          phTmlNfc_TransactInfo_t* act);
-static uint8_t st_validator_testAntenna_Txldo(nci_data_t* exp,
-                                              phTmlNfc_TransactInfo_t* act);
-static uint8_t st_validator_testAntenna_AgcVal(nci_data_t* exp,
-                                               phTmlNfc_TransactInfo_t* act);
-static uint8_t st_validator_testAntenna_AgcVal_FixedNfcLd(
-    nci_data_t* exp, phTmlNfc_TransactInfo_t* act);
-static uint8_t st_validator_testAntenna_AgcVal_Differential(
-    nci_data_t* exp, phTmlNfc_TransactInfo_t* act);
-
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-NFCSTATUS phNxpNciHal_getPrbsCmd(phNxpNfc_PrbsType_t prbs_type,
-                                 phNxpNfc_PrbsHwType_t hw_prbs_type,
-                                 uint8_t tech, uint8_t bitrate,
-                                 uint8_t* prbs_cmd, uint8_t prbs_cmd_len);
-#else
-NFCSTATUS phNxpNciHal_getPrbsCmd(uint8_t tech, uint8_t bitrate,
-                                 uint8_t* prbs_cmd, uint8_t prbs_cmd_len);
-#endif
-/* Test data to validate SWP line 2*/
-static nci_test_data_t swp2_test_data[] = {
-    {{
-         0x04, {0x20, 0x00, 0x01, 0x00} /* cmd */
-     },
-     {
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-         0x06, {0x40, 0x00, 0x03, 0x00, 0x11, 0x00} /* exp_rsp */
-#else
-         0x06, {0x40, 0x00, 0x03, 0x00, 0x10, 0x00} /* exp_rsp */
-#endif
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testEquals, /* validator */
-     st_validator_null},
-    {{
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-         0x05, {0x20, 0x01, 0x02, 0x00, 0x00} /* cmd */
-#else
-         0x03, {0x20, 0x01, 0x00}
-#endif
-     },
-     {
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-         0x4, {0x40, 0x01, 0x19, 0x00} /* exp_rsp */
-#else
-         0x4, {0x40, 0x01, 0x17, 0x00}
-#endif
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testEquals, /* validator */
-     st_validator_null},
-    {{
-         0x03, {0x2F, 0x02, 0x00} /* cmd */
-     },
-     {
-         0x04, {0x4F, 0x02, 0x05, 0x00} /* exp_rsp */
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testEquals, /* validator */
-     st_validator_null},
-    {{
-         0x04, {0x2F, 0x3E, 0x01, 0x01} /* cmd */
-     },
-     {
-         0x04, {0x4F, 0x3E, 0x01, 0x00} /* exp_rsp */
-     },
-     {
-         0x04, {0x6F, 0x3E, 0x02, 0x00} /* ext_ntf */
-     },
-     st_validator_testEquals, /* validator */
-     st_validator_testEquals},
-
-};
-
-/* Test data to validate SWP line 1*/
-static nci_test_data_t swp1_test_data[] = {
-
-    {{
-         0x04, {0x20, 0x00, 0x01, 0x00} /* cmd */
-     },
-     {
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-         0x06, {0x40, 0x00, 0x03, 0x00, 0x11, 0x00} /* exp_rsp */
-#else
-         0x06, {0x40, 0x00, 0x03, 0x00, 0x10, 0x00} /* exp_rsp */
-#endif
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testEquals, /* validator */
-     st_validator_null},
-    {{
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-         0x05, {0x20, 0x01, 0x02, 0x00, 0x00} /* cmd */
-#else
-         0x03, {0x20, 0x01, 0x00}
-#endif
-     },
-     {
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-         0x4, {0x40, 0x01, 0x19, 0x00} /* exp_rsp */
-#else
-         0x4, {0x40, 0x01, 0x17, 0x00}
-#endif
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testEquals, /* validator */
-     st_validator_null},
-    {{
-         0x03, {0x2F, 0x02, 0x00} /* cmd */
-     },
-     {
-         0x04, {0x4F, 0x02, 0x05, 0x00} /* exp_rsp */
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testEquals, /* validator */
-     st_validator_null},
-    {{
-         0x04, {0x2F, 0x3E, 0x01, 0x00} /* cmd */
-     },
-     {
-         0x04, {0x4F, 0x3E, 0x01, 0x00} /* exp_rsp */
-     },
-     {
-         0x04, {0x6F, 0x3E, 0x02, 0x00} /* ext_ntf */
-     },
-
-     st_validator_testEquals, /* validator */
-     st_validator_testSWP1_vltg},
-};
-
-static nci_test_data_t prbs_test_data[] = {
-    {{
-         0x04, {0x20, 0x00, 0x01, 0x00} /* cmd */
-     },
-     {
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-         0x06, {0x40, 0x00, 0x03, 0x00, 0x11, 0x00} /* exp_rsp */
-#else
-         0x06, {0x40, 0x00, 0x03, 0x00, 0x10, 0x00}             /* exp_rsp */
-#endif
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testEquals, /* validator */
-     st_validator_null},
-    {{
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-         0x05, {0x20, 0x01, 0x02, 0x00, 0x00} /* cmd */
-#else
-         0x03, {0x20, 0x01, 0x00}                               /* cmd */
-#endif
-     },
-     {
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-         0x4, {0x40, 0x01, 0x19, 0x00} /* exp_rsp */
-#else
-         0x4, {0x40, 0x01, 0x17, 0x00}                          /* exp_rsp */
-#endif
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testEquals, /* validator */
-     st_validator_null
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-    },
-    {{
-         0x04, {0x2F, 0x00, 0x01, 0x00} /* cmd */
-     },
-     {
-         0x04, {0x4F, 0x00, 0x01, 0x00} /* exp_rsp */
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testEquals, /* validator */
-     st_validator_null
-#endif
-    }};
-
-/* for rf field test, first requires to disable the standby mode */
-static nci_test_data_t rf_field_on_test_data[] = {
-    {{
-         0x04, {0x20, 0x00, 0x01, 0x00} /* cmd */
-     },
-     {
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-         0x06, {0x40, 0x00, 0x03, 0x00, 0x11, 0x00} /* exp_rsp */
-#else
-         0x06, {0x40, 0x00, 0x03, 0x00, 0x10, 0x00}             /* exp_rsp */
-#endif
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testEquals, /* validator */
-     st_validator_null},
-    {{
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-         0x05, {0x20, 0x01, 0x02, 0x00, 0x00} /* cmd */
-#else
-         0x03, {0x20, 0x01, 0x00}                               /* cmd */
-#endif
-     },
-     {
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-         0x4, {0x40, 0x01, 0x19, 0x00} /* exp_rsp */
-#else
-         0x4, {0x40, 0x01, 0x17, 0x00}                          /* exp_rsp */
-#endif
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testEquals, /* validator */
-     st_validator_null},
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-    {{
-         0x03, {0x2F, 0x02, 0x00} /* cmd */
-     },
-     {
-         0x04, {0x4F, 0x02, 0x05, 0x00} /* exp_rsp */
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testEquals, /* validator */
-     st_validator_null},
-    {{
-         0x04, {0x2F, 0x00, 0x01, 0x00} /* cmd */
-     },
-     {
-         0x04, {0x4F, 0x00, 0x01, 0x00} /* exp_rsp */
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testEquals, /* validator */
-     st_validator_null},
-#endif
-    {{
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-         0x05, {0x2F, 0x3D, 0x02, 0x20, 0x01} /* cmd */
-#else
-         0x08, {0x2F, 0x3D, 0x05, 0x20, 0x01, 0x00, 0x00, 0x00} /* cmd */
-#endif
-     },
-     {
-         0x04, {0x4F, 0x3D, 0x05, 0x00} /* exp_rsp */
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testEquals, /* validator */
-     st_validator_null
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-    },
-    {{
-         0x04, {0x2F, 0x00, 0x01, 0x01} /* cmd */
-     },
-     {
-         0x04, {0x4F, 0x00, 0x01, 0x00} /* exp_rsp */
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testEquals, /* validator */
-     st_validator_null
-#endif
-    }};
-
-static nci_test_data_t rf_field_off_test_data[] = {
-    {{
-         0x04, {0x20, 0x00, 0x01, 0x00} /* cmd */
-     },
-     {
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-         0x06, {0x40, 0x00, 0x03, 0x00, 0x11, 0x00} /* exp_rsp */
-#else
-         0x06, {0x40, 0x00, 0x03, 0x00, 0x10, 0x00}             /* exp_rsp */
-#endif
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testEquals, /* validator */
-     st_validator_null},
-    {{
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-         0x05, {0x20, 0x01, 0x02, 0x00, 0x00} /* cmd */
-#else
-         0x03, {0x20, 0x01, 0x00}                               /* cmd */
-#endif
-     },
-     {
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-         0x4, {0x40, 0x01, 0x19, 0x00} /* exp_rsp */
-#else
-         0x4, {0x40, 0x01, 0x17, 0x00}                          /* exp_rsp */
-#endif
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testEquals, /* validator */
-     st_validator_null},
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-    {{
-         0x03, {0x2F, 0x02, 0x00} /* cmd */
-     },
-     {
-         0x04, {0x4F, 0x02, 0x05, 0x00} /* exp_rsp */
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testEquals, /* validator */
-     st_validator_null},
-    {{
-         0x04, {0x2F, 0x00, 0x01, 0x00} /* cmd */
-     },
-     {
-         0x04, {0x4F, 0x00, 0x01, 0x00} /* exp_rsp */
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testEquals, /* validator */
-     st_validator_null},
-#endif
-    {{
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-         0x05, {0x2F, 0x3D, 0x02, 0x20, 0x00} /* cmd */
-#else
-         0x08, {0x2F, 0x3D, 0x05, 0x20, 0x00, 0x00, 0x00, 0x00} /* cmd */
-#endif
-     },
-     {
-         0x04, {0x4F, 0x3D, 0x05, 0x00} /* exp_rsp */
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testEquals, /* validator */
-     st_validator_null
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-    },
-    {{
-         0x04, {0x2F, 0x00, 0x01, 0x01} /* cmd */
-     },
-     {
-         0x04, {0x4F, 0x00, 0x01, 0x00} /* exp_rsp */
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testEquals, /* validator */
-     st_validator_null
-#endif
-    }};
-
-/* Download pin test data 1 */
-static nci_test_data_t download_pin_test_data1[] = {
-    {{
-         0x04, {0x20, 0x00, 0x01, 0x00} /* cmd */
-     },
-     {
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-         0x06, {0x40, 0x00, 0x03, 0x00, 0x11, 0x00} /* exp_rsp */
-#else
-         0x06, {0x40, 0x00, 0x03, 0x00, 0x10, 0x00}             /* exp_rsp */
-#endif
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testEquals, /* validator */
-     st_validator_null},
-};
-
-/* Download pin test data 2 */
-static nci_test_data_t download_pin_test_data2[] = {
-    {{
-         0x08, {0x00, 0x04, 0xD0, 0x11, 0x00, 0x00, 0x5B, 0x46} /* cmd */
-     },
-     {
-         0x08, {0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x87, 0x16} /* exp_rsp */
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testEquals, /* validator */
-     st_validator_null},
-};
-/* Antenna self test data*/
-static nci_test_data_t antenna_self_test_data[] = {
-    {{
-         0x04, {0x20, 0x00, 0x01, 0x00} /* cmd */
-     },
-     {
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-         0x06, {0x40, 0x00, 0x03, 0x00, 0x11, 0x00} /* exp_rsp */
-#else
-         0x06, {0x40, 0x00, 0x03, 0x00, 0x10, 0x00}             /* exp_rsp */
-#endif
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testEquals, /* validator */
-     st_validator_null},
-    {{
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-         0x05, {0x20, 0x01, 0x02, 0x00, 0x00} /* cmd */
-#else
-         0x03, {0x20, 0x01, 0x00}                               /* cmd */
-#endif
-     },
-     {
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-         0x4, {0x40, 0x01, 0x19, 0x00} /* exp_rsp */
-#else
-         0x4, {0x40, 0x01, 0x17, 0x00}                          /* exp_rsp */
-#endif
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testEquals, /* validator */
-     st_validator_null},
-    {{
-         0x03, {0x2F, 0x02, 0x00} /* cmd */
-     },
-     {
-         0x04, {0x4F, 0x02, 0x05, 0x00} /* exp_rsp */
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testEquals, /* validator */
-     st_validator_null},
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-    {{
-         0x04, {0x2F, 0x00, 0x01, 0x00} /* cmd */
-     },
-     {
-         0x04, {0x4F, 0x00, 0x01, 0x00} /* exp_rsp */
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testEquals, /* validator */
-     st_validator_null},
-#endif
-    {{
-         0x05,
-         {0x2F, 0x3D, 0x02, 0x01, 0x80} /* TxLDO cureent measurement cmd */
-     },
-     {
-         0x03, {0x4F, 0x3D, 05} /* exp_rsp */
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testAntenna_Txldo,
-     st_validator_null},
-    {{
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-         0x07,
-         {0x2F, 0x3D, 0x04, 0x02, 0xC8, 0x60, 0x03} /* AGC measurement cmd */
-#else
-         0x07,
-         {0x2F, 0x3D, 0x04, 0x02, 0xCD, 0x60, 0x03} /* AGC measurement cmd */
-#endif
-     },
-     {
-         0x03, {0x4F, 0x3D, 05} /* exp_rsp */
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testAntenna_AgcVal,
-     st_validator_null},
-    {{
-         0x07,
-         {0x2F, 0x3D, 0x04, 0x04, 0x20, 0x08,
-          0x20} /* AGC with NFCLD measurement cmd */
-     },
-     {
-         0x03, {0x4F, 0x3D, 05} /* exp_rsp */
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testAntenna_AgcVal_FixedNfcLd,
-     st_validator_null},
-    {{
-         0x07,
-         {0x2F, 0x3D, 0x04, 0x08, 0x8C, 0x60,
-          0x03} /* AGC with NFCLD measurement cmd */
-     },
-     {
-         0x03, {0x4F, 0x3D, 05} /* exp_rsp */
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testAntenna_AgcVal_Differential,
-     st_validator_null
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-    },
-    {{
-         0x04, {0x2F, 0x00, 0x01, 0x01} /* cmd */
-     },
-     {
-         0x04, {0x4F, 0x00, 0x01, 0x00} /* exp_rsp */
-     },
-     {
-         0x00, {0x00} /* ext_ntf */
-     },
-     st_validator_testEquals, /* validator */
-     st_validator_null
-#endif
-    }};
-
-/************** Self test functions ***************************************/
-
-static uint8_t st_validator_testEquals(nci_data_t* exp,
-                                       phTmlNfc_TransactInfo_t* act);
-static void hal_write_cb(void* pContext, phTmlNfc_TransactInfo_t* pInfo);
-static void hal_write_rsp_timeout_cb(uint32_t TimerId, void* pContext);
-static void hal_read_cb(void* pContext, phTmlNfc_TransactInfo_t* pInfo);
-
-/*******************************************************************************
-**
-** Function         st_validator_null
-**
-** Description      Null Validator
-**
-** Returns          One
-**
-*******************************************************************************/
-static uint8_t st_validator_null(nci_data_t* exp,
-                                 phTmlNfc_TransactInfo_t* act) {
-  UNUSED(exp);
-  UNUSED(act);
-  return 1;
-}
-
-/*******************************************************************************
-**
-** Function         st_validator_testSWP1_vltg
-**
-** Description      Validator function to validate swp1 connection.
-**
-** Returns          One if successful otherwise Zero.
-**
-*******************************************************************************/
-static uint8_t st_validator_testSWP1_vltg(nci_data_t* exp,
-                                          phTmlNfc_TransactInfo_t* act) {
-  uint8_t result = 0;
-
-  if (NULL == exp || NULL == act) {
-    return result;
-  }
-
-  if ((act->wLength == 0x05) &&
-      (memcmp(exp->p_data, act->pBuff, exp->len) == 0)) {
-    if (act->pBuff[4] == 0x01 || act->pBuff[4] == 0x02) {
-      result = 1;
-    }
-  }
-
-  return result;
-}
-
-/*******************************************************************************
-**
-** Function         st_validator_testAntenna_Txldo
-**
-** Description      Validator function to validate Antenna TxLDO current
-**                  measurement.
-**
-** Returns          One if successful otherwise Zero.
-**
-*******************************************************************************/
-static uint8_t st_validator_testAntenna_Txldo(nci_data_t* exp,
-                                              phTmlNfc_TransactInfo_t* act) {
-  uint8_t result = 0;
-  uint8_t mesuredrange = 0;
-  long measured_val = 0;
-  int tolerance = 0;
-
-  if (NULL == exp || NULL == act) {
-    return result;
-  }
-
-  NXPLOG_NCIHAL_D("st_validator_testAntenna_Txldo = 0x%x", act->pBuff[3]);
-  if (0x05 == act->pBuff[2]) {
-    if (NFCSTATUS_SUCCESS == act->pBuff[3]) {
-      result = 1;
-      NXPLOG_NCIHAL_D("Antenna: TxLDO current measured raw value in mA : 0x%x",
-                      act->pBuff[4]);
-      if (0x00 == act->pBuff[5]) {
-        NXPLOG_NCIHAL_D("Measured range : 0x00 = 50 - 100 mA");
-        measured_val = ((0.40 * act->pBuff[4]) + 50);
-        NXPLOG_NCIHAL_D("TxLDO current absolute value in mA = %ld",
-                        measured_val);
-      } else {
-        NXPLOG_NCIHAL_D("Measured range : 0x01 = 20 - 70 mA");
-        measured_val = ((0.40 * act->pBuff[4]) + 20);
-        NXPLOG_NCIHAL_D("TxLDO current absolute value in mA = %ld",
-                        measured_val);
-      }
-
-      tolerance = (phAntenna_resp.wTxdoMeasuredRangeMax *
-                   phAntenna_resp.wTxdoMeasuredTolerance) /
-                  100;
-      if ((measured_val <= phAntenna_resp.wTxdoMeasuredRangeMax + tolerance)) {
-        tolerance = (phAntenna_resp.wTxdoMeasuredRangeMin *
-                     phAntenna_resp.wTxdoMeasuredTolerance) /
-                    100;
-        if ((measured_val >=
-             phAntenna_resp.wTxdoMeasuredRangeMin - tolerance)) {
-          gtxldo_status = NFCSTATUS_SUCCESS;
-          NXPLOG_NCIHAL_E("Test Antenna Response for TxLDO measurement PASS");
-        } else {
-          gtxldo_status = NFCSTATUS_FAILED;
-          NXPLOG_NCIHAL_E("Test Antenna Response for TxLDO measurement FAIL");
-        }
-      } else {
-        gtxldo_status = NFCSTATUS_FAILED;
-        NXPLOG_NCIHAL_E("Test Antenna Response for TxLDO measurement FAIL");
-      }
-    } else {
-      gtxldo_status = NFCSTATUS_FAILED;
-      NXPLOG_NCIHAL_E(
-          "Test Antenna Response for TxLDO measurement failed: Invalid status");
-    }
-
-  } else {
-    gtxldo_status = NFCSTATUS_FAILED;
-    NXPLOG_NCIHAL_E(
-        "Test Antenna Response for TxLDO measurement failed: Invalid payload "
-        "length");
-  }
-
-  return result;
-}
-
-/*******************************************************************************
-**
-** Function         st_validator_testAntenna_AgcVal
-**
-** Description      Validator function reads AGC value of antenna and print the
-**                  info
-**
-** Returns          One if successful otherwise Zero.
-**
-*******************************************************************************/
-static uint8_t st_validator_testAntenna_AgcVal(nci_data_t* exp,
-                                               phTmlNfc_TransactInfo_t* act) {
-  uint8_t result = 0;
-  int agc_tolerance = 0;
-  long agc_val = 0;
-
-  if (NULL == exp || NULL == act) {
-    return result;
-  }
-
-  if (0x05 == act->pBuff[2]) {
-    if (NFCSTATUS_SUCCESS == act->pBuff[3]) {
-      result = 1;
-      agc_tolerance =
-          (phAntenna_resp.wAgcValue * phAntenna_resp.wAgcValueTolerance) / 100;
-      agc_val = ((act->pBuff[5] << 8) | (act->pBuff[4]));
-      NXPLOG_NCIHAL_D("AGC value : %ld", agc_val);
-      if (((phAntenna_resp.wAgcValue - agc_tolerance) <= agc_val) &&
-          (agc_val <= (phAntenna_resp.wAgcValue + agc_tolerance))) {
-        gagc_value_status = NFCSTATUS_SUCCESS;
-        NXPLOG_NCIHAL_E("Test Antenna Response for AGC Values  PASS");
-      } else {
-        gagc_value_status = NFCSTATUS_FAILED;
-        NXPLOG_NCIHAL_E("Test Antenna Response for AGC Values  FAIL");
-      }
-    } else {
-      gagc_value_status = NFCSTATUS_FAILED;
-      NXPLOG_NCIHAL_E("Test Antenna Response for AGC Values  FAIL");
-    }
-  } else {
-    gagc_value_status = NFCSTATUS_FAILED;
-    NXPLOG_NCIHAL_E(
-        "Test Antenna Response for AGC value failed: Invalid payload length");
-  }
-
-  return result;
-}
-/*******************************************************************************
-**
-** Function         st_validator_testAntenna_AgcVal_FixedNfcLd
-**
-** Description      Validator function reads and print AGC value of
-**                  antenna with fixed NFCLD
-**
-** Returns          One if successful otherwise Zero.
-**
-*******************************************************************************/
-static uint8_t st_validator_testAntenna_AgcVal_FixedNfcLd(
-    nci_data_t* exp, phTmlNfc_TransactInfo_t* act) {
-  uint8_t result = 0;
-  int agc_nfcld_tolerance = 0;
-  long agc_nfcld = 0;
-
-  if (NULL == exp || NULL == act) {
-    return result;
-  }
-
-  if (0x05 == act->pBuff[2]) {
-    if (NFCSTATUS_SUCCESS == act->pBuff[3]) {
-      result = 1;
-      agc_nfcld_tolerance = (phAntenna_resp.wAgcValuewithfixedNFCLD *
-                             phAntenna_resp.wAgcValuewithfixedNFCLDTolerance) /
-                            100;
-      agc_nfcld = ((act->pBuff[5] << 8) | (act->pBuff[4]));
-      NXPLOG_NCIHAL_D("AGC value with Fixed Nfcld  : %ld", agc_nfcld);
-
-      if (((phAntenna_resp.wAgcValuewithfixedNFCLD - agc_nfcld_tolerance) <=
-           agc_nfcld) &&
-          (agc_nfcld <=
-           (phAntenna_resp.wAgcValuewithfixedNFCLD + agc_nfcld_tolerance))) {
-        gagc_nfcld_status = NFCSTATUS_SUCCESS;
-        NXPLOG_NCIHAL_E(
-            "Test Antenna Response for AGC value with fixed NFCLD PASS");
-      } else {
-        gagc_nfcld_status = NFCSTATUS_FAILED;
-        NXPLOG_NCIHAL_E(
-            "Test Antenna Response for AGC value with fixed NFCLD FAIL");
-      }
-    } else {
-      gagc_nfcld_status = NFCSTATUS_FAILED;
-      NXPLOG_NCIHAL_E(
-          "Test Antenna Response for AGC value with fixed NFCLD failed: "
-          "Invalid status");
-    }
-  } else {
-    gagc_nfcld_status = NFCSTATUS_FAILED;
-    NXPLOG_NCIHAL_E(
-        "Test Antenna Response for AGC value with fixed NFCLD failed: Invalid "
-        "payload length");
-  }
-
-  return result;
-}
-
-/*******************************************************************************
-**
-** Function         st_validator_testAntenna_AgcVal_Differential
-**
-** Description      Reads the AGC value with open/short RM from buffer and print
-**
-** Returns          One if successful otherwise Zero.
-**
-*******************************************************************************/
-static uint8_t st_validator_testAntenna_AgcVal_Differential(
-    nci_data_t* exp, phTmlNfc_TransactInfo_t* act) {
-  uint8_t result = 0;
-  int agc_toleranceopne1 = 0;
-  int agc_toleranceopne2 = 0;
-  long agc_differentialOpne1 = 0;
-  long agc_differentialOpne2 = 0;
-
-  if (NULL == exp || NULL == act) {
-    return result;
-  }
-
-  if (0x05 == act->pBuff[2]) {
-    if (NFCSTATUS_SUCCESS == act->pBuff[3]) {
-      result = 1;
-      agc_toleranceopne1 = (phAntenna_resp.wAgcDifferentialWithOpen1 *
-                            phAntenna_resp.wAgcDifferentialWithOpenTolerance1) /
-                           100;
-      agc_toleranceopne2 = (phAntenna_resp.wAgcDifferentialWithOpen2 *
-                            phAntenna_resp.wAgcDifferentialWithOpenTolerance2) /
-                           100;
-      agc_differentialOpne1 = ((act->pBuff[5] << 8) | (act->pBuff[4]));
-      agc_differentialOpne2 = ((act->pBuff[7] << 8) | (act->pBuff[6]));
-      NXPLOG_NCIHAL_D("AGC value differential Opne 1  : %ld",
-                      agc_differentialOpne1);
-      NXPLOG_NCIHAL_D("AGC value differentialOpne  2 : %ld",
-                      agc_differentialOpne2);
-
-      if (((agc_differentialOpne1 >=
-            phAntenna_resp.wAgcDifferentialWithOpen1 - agc_toleranceopne1) &&
-           (agc_differentialOpne1 <=
-            phAntenna_resp.wAgcDifferentialWithOpen1 + agc_toleranceopne1)) &&
-          ((agc_differentialOpne2 >=
-            phAntenna_resp.wAgcDifferentialWithOpen2 - agc_toleranceopne2) &&
-           (agc_differentialOpne2 <=
-            phAntenna_resp.wAgcDifferentialWithOpen2 + agc_toleranceopne2))) {
-        gagc_differential_status = NFCSTATUS_SUCCESS;
-        NXPLOG_NCIHAL_E("Test Antenna Response for AGC Differential Open PASS");
-      } else {
-        gagc_differential_status = NFCSTATUS_FAILED;
-        NXPLOG_NCIHAL_E(
-            "Test Antenna Response for AGC Differential Open  FAIL");
-      }
-    } else {
-      NXPLOG_NCIHAL_E(
-          "Test Antenna Response for AGC Differential failed: Invalid status");
-      gagc_differential_status = NFCSTATUS_FAILED;
-    }
-
-  } else {
-    NXPLOG_NCIHAL_E(
-        "Test Antenna Response for AGC Differential failed: Invalid payload "
-        "length");
-    gagc_differential_status = NFCSTATUS_FAILED;
-  }
-
-  return result;
-}
-/*******************************************************************************
-**
-** Function         st_validator_testEquals
-**
-** Description      Validator function to validate for equality between actual
-**                  and expected values.
-**
-** Returns          One if successful otherwise Zero.
-**
-*******************************************************************************/
-static uint8_t st_validator_testEquals(nci_data_t* exp,
-                                       phTmlNfc_TransactInfo_t* act) {
-  uint8_t result = 0;
-
-  if (NULL == exp || NULL == act) {
-    return result;
-  }
-  if (exp->len <= act->wLength &&
-      (memcmp(exp->p_data, act->pBuff, exp->len) == 0)) {
-    result = 1;
-  }
-
-  return result;
-}
-
-/*******************************************************************************
-**
-** Function         hal_write_rsp_timeout_cb
-**
-** Description      Callback function for hal write response timer.
-**
-** Returns          None
-**
-*******************************************************************************/
-static void hal_write_rsp_timeout_cb(uint32_t timerId, void* pContext) {
-  UNUSED(timerId);
-  NXPLOG_NCIHAL_E("hal_write_rsp_timeout_cb - write timeout!!!");
-  hal_write_timer_fired = 1;
-  hal_read_cb(pContext, NULL);
-}
-
-/*******************************************************************************
-**
-** Function         hal_write_cb
-**
-** Description      Callback function for hal write.
-**
-** Returns          None
-**
-*******************************************************************************/
-static void hal_write_cb(void* pContext, phTmlNfc_TransactInfo_t* pInfo) {
-  phNxpNciHal_Sem_t* p_cb_data = (phNxpNciHal_Sem_t*)pContext;
-
-  if (pInfo->wStatus == NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_D("write successful status = 0x%x", pInfo->wStatus);
-  } else {
-    NXPLOG_NCIHAL_E("write error status = 0x%x", pInfo->wStatus);
-  }
-
-  p_cb_data->status = pInfo->wStatus;
-  SEM_POST(p_cb_data);
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         hal_read_cb
-**
-** Description      Callback function for hal read.
-**
-** Returns          None
-**
-*******************************************************************************/
-static void hal_read_cb(void* pContext, phTmlNfc_TransactInfo_t* pInfo) {
-  phNxpNciHal_Sem_t* p_cb_data = (phNxpNciHal_Sem_t*)pContext;
-  NFCSTATUS status;
-  if (hal_write_timer_fired == 1) {
-    NXPLOG_NCIHAL_D("hal_read_cb - response timeout occurred");
-
-    hal_write_timer_fired = 0;
-    p_cb_data->status = NFCSTATUS_RESPONSE_TIMEOUT;
-    status = phTmlNfc_ReadAbort();
-  } else {
-    NFCSTATUS status = phOsalNfc_Timer_Stop(timeoutTimerId);
-
-    if (NFCSTATUS_SUCCESS == status) {
-      NXPLOG_NCIHAL_D("Response timer stopped");
-    } else {
-      NXPLOG_NCIHAL_E("Response timer stop ERROR!!!");
-      p_cb_data->status = NFCSTATUS_FAILED;
-    }
-    if (pInfo == NULL) {
-      NXPLOG_NCIHAL_E("Empty TransactInfo");
-      p_cb_data->status = NFCSTATUS_FAILED;
-    } else {
-      if (pInfo->wStatus == NFCSTATUS_SUCCESS) {
-        NXPLOG_NCIHAL_D("hal_read_cb successful status = 0x%x", pInfo->wStatus);
-        p_cb_data->status = NFCSTATUS_SUCCESS;
-      } else {
-        NXPLOG_NCIHAL_E("hal_read_cb error status = 0x%x", pInfo->wStatus);
-        p_cb_data->status = NFCSTATUS_FAILED;
-      }
-
-      p_cb_data->status = pInfo->wStatus;
-      nci_test_data_t* test_data = (nci_test_data_t*)p_cb_data->pContext;
-
-      if (test_data->exp_rsp.len == 0) {
-        /* Compare the actual notification with expected notification.*/
-        if (test_data->ntf_validator(&(test_data->exp_ntf), pInfo) == 1) {
-          p_cb_data->status = NFCSTATUS_SUCCESS;
-        } else {
-          p_cb_data->status = NFCSTATUS_FAILED;
-        }
-      }
-
-      /* Compare the actual response with expected response.*/
-      else if (test_data->rsp_validator(&(test_data->exp_rsp), pInfo) == 1) {
-        p_cb_data->status = NFCSTATUS_SUCCESS;
-      } else {
-        p_cb_data->status = NFCSTATUS_FAILED;
-      }
-
-      test_data->exp_rsp.len = 0;
-    }
-  }
-
-  SEM_POST(p_cb_data);
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_test_rx_thread
-**
-** Description      Thread to fetch and process messages from message queue.
-**
-** Returns          NULL
-**
-*******************************************************************************/
-static void* phNxpNciHal_test_rx_thread(void* arg) {
-  phLibNfc_Message_t msg;
-  UNUSED(arg);
-  NXPLOG_NCIHAL_D("Self test thread started");
-
-  thread_running = 1;
-
-  while (thread_running == 1) {
-    /* Fetch next message from the NFC stack message queue */
-    if (phDal4Nfc_msgrcv(gDrvCfg.nClientId, &msg, 0, 0) == -1) {
-      NXPLOG_NCIHAL_E("Received bad message");
-      continue;
-    }
-
-    if (thread_running == 0) {
-      break;
-    }
-
-    switch (msg.eMsgType) {
-      case PH_LIBNFC_DEFERREDCALL_MSG: {
-        phLibNfc_DeferredCall_t* deferCall =
-            (phLibNfc_DeferredCall_t*)(msg.pMsgData);
-
-        REENTRANCE_LOCK();
-        deferCall->pCallback(deferCall->pParameter);
-        REENTRANCE_UNLOCK();
-
-        break;
-      }
-    }
-  }
-
-  NXPLOG_NCIHAL_D("Self test thread stopped");
-
-  return NULL;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_readLocked
-**
-** Description      Reads response and notification from NFCC and waits for
-**                  read completion, for a definitive timeout value.
-**
-** Returns          NFCSTATUS_SUCCESS if successful,otherwise NFCSTATUS_FAILED,
-**                  NFCSTATUS_RESPONSE_TIMEOUT in case of timeout.
-**
-*******************************************************************************/
-static NFCSTATUS phNxpNciHal_readLocked(nci_test_data_t* pData) {
-  NFCSTATUS status = NFCSTATUS_SUCCESS;
-  phNxpNciHal_Sem_t cb_data;
-  uint16_t read_len = 16;
-  /* RX Buffer */
-  uint32_t rx_data[NCI_MAX_DATA_LEN];
-
-  /* Create the local semaphore */
-  if (phNxpNciHal_init_cb_data(&cb_data, pData) != NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_D("phTmlNfc_Read Create cb data failed");
-    status = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-
-  /* call read pending */
-  status =
-      phTmlNfc_Read((uint8_t*)rx_data, (uint16_t)read_len,
-                    (pphTmlNfc_TransactCompletionCb_t)&hal_read_cb, &cb_data);
-
-  if (status != NFCSTATUS_PENDING) {
-    NXPLOG_NCIHAL_E("TML Read status error status = %x", status);
-    status = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-
-  status = phOsalNfc_Timer_Start(timeoutTimerId, HAL_WRITE_RSP_TIMEOUT,
-                                 &hal_write_rsp_timeout_cb, &cb_data);
-
-  if (NFCSTATUS_SUCCESS == status) {
-    NXPLOG_NCIHAL_D("Response timer started");
-  } else {
-    NXPLOG_NCIHAL_E("Response timer not started");
-    status = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-
-  /* Wait for callback response */
-  if (SEM_WAIT(cb_data)) {
-    NXPLOG_NCIHAL_E("phTmlNfc_Read semaphore error");
-    status = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-
-  if (cb_data.status == NFCSTATUS_RESPONSE_TIMEOUT) {
-    NXPLOG_NCIHAL_E("Response timeout!!!");
-    status = NFCSTATUS_RESPONSE_TIMEOUT;
-    goto clean_and_return;
-  }
-
-  if (cb_data.status != NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_E("phTmlNfc_Read failed  ");
-    status = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-
-clean_and_return:
-  phNxpNciHal_cleanup_cb_data(&cb_data);
-
-  return status;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_writeLocked
-**
-** Description      Send command to NFCC and waits for cmd write completion, for
-**                  a definitive timeout value.
-**
-** Returns          NFCSTATUS_SUCCESS if successful,otherwise NFCSTATUS_FAILED,
-**                  NFCSTATUS_RESPONSE_TIMEOUT in case of timeout.
-**
-*******************************************************************************/
-static NFCSTATUS phNxpNciHal_writeLocked(nci_test_data_t* pData) {
-  NFCSTATUS status = NFCSTATUS_SUCCESS;
-
-  phNxpNciHal_Sem_t cb_data;
-  int retryCnt = 0;
-
-  /* Create the local semaphore */
-  if (phNxpNciHal_init_cb_data(&cb_data, NULL) != NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_D("phTmlNfc_Write Create cb data failed");
-    goto clean_and_return;
-  }
-
-retry:
-  status =
-      phTmlNfc_Write(pData->cmd.p_data, pData->cmd.len,
-                     (pphTmlNfc_TransactCompletionCb_t)&hal_write_cb, &cb_data);
-
-  if (status != NFCSTATUS_PENDING) {
-    NXPLOG_NCIHAL_E("phTmlNfc_Write status error");
-    goto clean_and_return;
-  }
-
-  /* Wait for callback response */
-  if (SEM_WAIT(cb_data)) {
-    NXPLOG_NCIHAL_E("write_unlocked semaphore error");
-    status = NFCSTATUS_FAILED;
-    goto clean_and_return;
-  }
-
-  if (cb_data.status != NFCSTATUS_SUCCESS && retryCnt < HAL_WRITE_MAX_RETRY) {
-    retryCnt++;
-    NXPLOG_NCIHAL_E(
-        "write_unlocked failed - PN54X Maybe in Standby Mode - Retry %d",
-        retryCnt);
-    goto retry;
-  }
-
-  status = cb_data.status;
-
-clean_and_return:
-  phNxpNciHal_cleanup_cb_data(&cb_data);
-
-  return status;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_performTest
-**
-** Description      Performs a single cycle of command,response and
-**                  notification.
-**
-** Returns          NFCSTATUS_SUCCESS if successful,otherwise NFCSTATUS_FAILED,
-**
-*******************************************************************************/
-NFCSTATUS phNxpNciHal_performTest(nci_test_data_t* pData) {
-  NFCSTATUS status = NFCSTATUS_SUCCESS;
-
-  if (NULL == pData) {
-    return NFCSTATUS_FAILED;
-  }
-
-  CONCURRENCY_LOCK();
-
-  status = phNxpNciHal_writeLocked(pData);
-
-  if (status == NFCSTATUS_RESPONSE_TIMEOUT) {
-    goto clean_and_return;
-  }
-  if (status != NFCSTATUS_SUCCESS) {
-    goto clean_and_return;
-  }
-
-  status = phNxpNciHal_readLocked(pData);
-
-  if (status != NFCSTATUS_SUCCESS) {
-    goto clean_and_return;
-  }
-
-  if (0 != pData->exp_ntf.len) {
-    status = phNxpNciHal_readLocked(pData);
-
-    if (status != NFCSTATUS_SUCCESS) {
-      goto clean_and_return;
-    }
-  }
-
-clean_and_return:
-  CONCURRENCY_UNLOCK();
-  return status;
-}
-
-/*******************************************************************************
- **
- ** Function         phNxpNciHal_TestMode_open
- **
- ** Description      It opens the physical connection with NFCC (PN54X) and
- **                  creates required client thread for operation.
- **
- ** Returns          NFCSTATUS_SUCCESS if successful,otherwise NFCSTATUS_FAILED.
- **
- ******************************************************************************/
-NFCSTATUS phNxpNciHal_TestMode_open(void) {
-  /* Thread */
-  pthread_t test_rx_thread;
-
-  phOsalNfc_Config_t tOsalConfig;
-  phTmlNfc_Config_t tTmlConfig;
-  char* nfc_dev_node = NULL;
-  const uint16_t max_len = 260;
-  NFCSTATUS status = NFCSTATUS_SUCCESS;
-  uint16_t read_len = 255;
-  int8_t ret_val = 0x00;
-  /* initialize trace level */
-  phNxpLog_InitializeLogLevel();
-
-  if (phNxpNciHal_init_monitor() == NULL) {
-    NXPLOG_NCIHAL_E("Init monitor failed");
-    return NFCSTATUS_FAILED;
-  }
-
-  CONCURRENCY_LOCK();
-
-  memset(&tOsalConfig, 0x00, sizeof(tOsalConfig));
-  memset(&tTmlConfig, 0x00, sizeof(tTmlConfig));
-
-  /* Read the nfc device node name */
-  nfc_dev_node = (char*)malloc(max_len * sizeof(char));
-  if (nfc_dev_node == NULL) {
-    NXPLOG_NCIHAL_E("malloc of nfc_dev_node failed ");
-    goto clean_and_return;
-  } else if (!GetNxpStrValue(NAME_NXP_NFC_DEV_NODE, nfc_dev_node,
-                             sizeof(nfc_dev_node))) {
-    NXPLOG_NCIHAL_E(
-        "Invalid nfc device node name keeping the default device node "
-        "/dev/pn54x");
-    strcpy(nfc_dev_node, "/dev/pn54x");
-  }
-
-  gDrvCfg.nClientId = phDal4Nfc_msgget(0, 0600);
-  gDrvCfg.nLinkType = ENUM_LINK_TYPE_I2C; /* For PN54X */
-  tTmlConfig.pDevName = (int8_t*)nfc_dev_node;
-  tOsalConfig.dwCallbackThreadId = (uintptr_t)gDrvCfg.nClientId;
-  tOsalConfig.pLogFile = NULL;
-  tTmlConfig.dwGetMsgThreadId = (uintptr_t)gDrvCfg.nClientId;
-  nxpncihal_ctrl.gDrvCfg.nClientId = (uintptr_t)gDrvCfg.nClientId;
-
-  /* Initialize TML layer */
-  status = phTmlNfc_Init(&tTmlConfig);
-  if (status != NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_E("phTmlNfc_Init Failed");
-    goto clean_and_return;
-  } else {
-    if (nfc_dev_node != NULL) {
-      free(nfc_dev_node);
-      nfc_dev_node = NULL;
-    }
-  }
-
-  pthread_attr_t attr;
-  pthread_attr_init(&attr);
-  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
-  ret_val =
-      pthread_create(&test_rx_thread, &attr, phNxpNciHal_test_rx_thread, NULL);
-  pthread_attr_destroy(&attr);
-  if (ret_val != 0) {
-    NXPLOG_NCIHAL_E("pthread_create failed");
-    phTmlNfc_Shutdown();
-    goto clean_and_return;
-  }
-
-  timeoutTimerId = phOsalNfc_Timer_Create();
-
-  if (timeoutTimerId == 0xFFFF) {
-    NXPLOG_NCIHAL_E("phOsalNfc_Timer_Create failed");
-  } else {
-    NXPLOG_NCIHAL_D("phOsalNfc_Timer_Create SUCCESS");
-  }
-  CONCURRENCY_UNLOCK();
-
-  return NFCSTATUS_SUCCESS;
-
-clean_and_return:
-  CONCURRENCY_UNLOCK();
-  if (nfc_dev_node != NULL) {
-    free(nfc_dev_node);
-    nfc_dev_node = NULL;
-  }
-  phNxpNciHal_cleanup_monitor();
-  return NFCSTATUS_FAILED;
-}
-
-/*******************************************************************************
- **
- ** Function         phNxpNciHal_TestMode_close
- **
- ** Description      This function close the NFCC interface and free all
- **                  resources.
- **
- ** Returns          None.
- **
- ******************************************************************************/
-
-void phNxpNciHal_TestMode_close() {
-  NFCSTATUS status = NFCSTATUS_SUCCESS;
-
-  CONCURRENCY_LOCK();
-
-  if (NULL != gpphTmlNfc_Context->pDevHandle) {
-    /* Abort any pending read and write */
-    status = phTmlNfc_ReadAbort();
-    status = phTmlNfc_WriteAbort();
-
-    phOsalNfc_Timer_Cleanup();
-
-    status = phTmlNfc_Shutdown();
-
-    NXPLOG_NCIHAL_D("phNxpNciHal_close return status = %d", status);
-
-    thread_running = 0;
-
-    phDal4Nfc_msgrelease(gDrvCfg.nClientId);
-
-    status = phOsalNfc_Timer_Delete(timeoutTimerId);
-  }
-
-  CONCURRENCY_UNLOCK();
-
-  phNxpNciHal_cleanup_monitor();
-
-  /* Return success always */
-  return;
-}
-
-/*******************************************************************************
- **
- ** Function         phNxpNciHal_SwpTest
- **
- ** Description      Test function to validate the SWP line. SWP line number is
- **                  is sent as parameter to the API.
- **
- ** Returns          NFCSTATUS_SUCCESS if successful,otherwise NFCSTATUS_FAILED.
- **
- ******************************************************************************/
-
-NFCSTATUS phNxpNciHal_SwpTest(uint8_t swp_line) {
-  NFCSTATUS status = NFCSTATUS_SUCCESS;
-  int len = 0;
-  int cnt = 0;
-
-  NXPLOG_NCIHAL_D("phNxpNciHal_SwpTest - start\n");
-
-  if (swp_line == 0x01) {
-    len = (sizeof(swp1_test_data) / sizeof(swp1_test_data[0]));
-
-    for (cnt = 0; cnt < len; cnt++) {
-      status = phNxpNciHal_performTest(&(swp1_test_data[cnt]));
-      if (status == NFCSTATUS_RESPONSE_TIMEOUT || status == NFCSTATUS_FAILED) {
-        break;
-      }
-    }
-  } else if (swp_line == 0x02) {
-    len = (sizeof(swp2_test_data) / sizeof(swp2_test_data[0]));
-
-    for (cnt = 0; cnt < len; cnt++) {
-      status = phNxpNciHal_performTest(&(swp2_test_data[cnt]));
-      if (status == NFCSTATUS_RESPONSE_TIMEOUT || status == NFCSTATUS_FAILED) {
-        break;
-      }
-    }
-  } else {
-    status = NFCSTATUS_FAILED;
-  }
-
-  if (status == NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_D("phNxpNciHal_SwpTest - SUCCESSS\n");
-  } else {
-    NXPLOG_NCIHAL_D("phNxpNciHal_SwpTest - FAILED\n");
-  }
-
-  NXPLOG_NCIHAL_D("phNxpNciHal_SwpTest - end\n");
-
-  return status;
-}
-
-/*******************************************************************************
- **
- ** Function         phNxpNciHal_PrbsTestStart
- **
- ** Description      Test function start RF generation for RF technology and bit
- **                  rate. RF technology and bit rate are sent as parameter to
- **                  the API.
- **
- ** Returns          NFCSTATUS_SUCCESS if RF generation successful,
- **                  otherwise NFCSTATUS_FAILED.
- **
- ******************************************************************************/
-
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-NFCSTATUS phNxpNciHal_PrbsTestStart(phNxpNfc_PrbsType_t prbs_type,
-                                    phNxpNfc_PrbsHwType_t hw_prbs_type,
-                                    phNxpNfc_Tech_t tech,
-                                    phNxpNfc_Bitrate_t bitrate)
-#else
-NFCSTATUS phNxpNciHal_PrbsTestStart(phNxpNfc_Tech_t tech,
-                                    phNxpNfc_Bitrate_t bitrate)
-#endif
-{
-  NFCSTATUS status = NFCSTATUS_FAILED;
-
-  nci_test_data_t prbs_cmd_data;
-
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-  uint8_t rsp_cmd_info[] = {0x4F, 0x30, 0x01, 0x00};
-  prbs_cmd_data.cmd.len = 0x09;
-#else
-  uint8_t rsp_cmd_info[] = {0x4F, 0x30, 0x01, 0x00};
-  prbs_cmd_data.cmd.len = 0x07;
-#endif
-
-  memcpy(prbs_cmd_data.exp_rsp.p_data, &rsp_cmd_info[0], sizeof(rsp_cmd_info));
-  prbs_cmd_data.exp_rsp.len = sizeof(rsp_cmd_info);
-
-  // prbs_cmd_data.exp_rsp.len = 0x00;
-  prbs_cmd_data.exp_ntf.len = 0x00;
-  prbs_cmd_data.rsp_validator = st_validator_testEquals;
-  prbs_cmd_data.ntf_validator = st_validator_null;
-
-  uint8_t len = 0;
-  uint8_t cnt = 0;
-
-//    [NCI] -> [0x2F 0x30 0x04 0x00 0x00 0x01 0xFF]
-
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-  status =
-      phNxpNciHal_getPrbsCmd(prbs_type, hw_prbs_type, tech, bitrate,
-                             prbs_cmd_data.cmd.p_data, prbs_cmd_data.cmd.len);
-#else
-  status = phNxpNciHal_getPrbsCmd(tech, bitrate, prbs_cmd_data.cmd.p_data,
-                                  prbs_cmd_data.cmd.len);
-#endif
-
-  if (status == NFCSTATUS_FAILED) {
-    // Invalid Param.
-    NXPLOG_NCIHAL_D("phNxpNciHal_PrbsTestStart - INVALID_PARAM\n");
-
-    goto clean_and_return;
-  }
-
-  len = (sizeof(prbs_test_data) / sizeof(prbs_test_data[0]));
-
-  for (cnt = 0; cnt < len; cnt++) {
-    status = phNxpNciHal_performTest(&(prbs_test_data[cnt]));
-    if (status == NFCSTATUS_RESPONSE_TIMEOUT || status == NFCSTATUS_FAILED) {
-      break;
-    }
-  }
-
-  /* Ignoring status, as there will be no response - Applicable till FW version
-   * 8.1.1*/
-  status = phNxpNciHal_performTest(&prbs_cmd_data);
-clean_and_return:
-
-  if (status == NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_D("phNxpNciHal_PrbsTestStart - SUCCESSS\n");
-  } else {
-    NXPLOG_NCIHAL_D("phNxpNciHal_PrbsTestStart - FAILED\n");
-  }
-
-  NXPLOG_NCIHAL_D("phNxpNciHal_PrbsTestStart - end\n");
-
-  return status;
-}
-
-/*******************************************************************************
- **
- ** Function         phNxpNciHal_PrbsTestStop
- **
- ** Description      Test function stop RF generation for RF technology started
- **                  by phNxpNciHal_PrbsTestStart.
- **
- ** Returns          NFCSTATUS_SUCCESS if operation successful,
- **                  otherwise NFCSTATUS_FAILED.
- **
- ******************************************************************************/
-
-NFCSTATUS phNxpNciHal_PrbsTestStop() {
-  NXPLOG_NCIHAL_D("phNxpNciHal_PrbsTestStop - Start\n");
-
-  NFCSTATUS status = NFCSTATUS_SUCCESS;
-
-  status = phTmlNfc_IoCtl(phTmlNfc_e_ResetDevice);
-
-  if (NFCSTATUS_SUCCESS == status) {
-    NXPLOG_NCIHAL_D("phNxpNciHal_PrbsTestStop - SUCCESS\n");
-  } else {
-    NXPLOG_NCIHAL_D("phNxpNciHal_PrbsTestStop - FAILED\n");
-  }
-  NXPLOG_NCIHAL_D("phNxpNciHal_PrbsTestStop - end\n");
-
-  return status;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_getPrbsCmd
-**
-** Description      Test function frames the PRBS command.
-**
-** Returns          NFCSTATUS_SUCCESS if successful,otherwise NFCSTATUS_FAILED.
-**
-*******************************************************************************/
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-NFCSTATUS phNxpNciHal_getPrbsCmd(phNxpNfc_PrbsType_t prbs_type,
-                                 phNxpNfc_PrbsHwType_t hw_prbs_type,
-                                 uint8_t tech, uint8_t bitrate,
-                                 uint8_t* prbs_cmd, uint8_t prbs_cmd_len)
-#else
-NFCSTATUS phNxpNciHal_getPrbsCmd(uint8_t tech, uint8_t bitrate,
-                                 uint8_t* prbs_cmd, uint8_t prbs_cmd_len)
-#endif
-{
-  NFCSTATUS status = NFCSTATUS_SUCCESS;
-  int position_tech_param = 0;
-  int position_bit_param = 0;
-
-  NXPLOG_NCIHAL_D("phNxpNciHal_getPrbsCmd - tech 0x%x bitrate = 0x%x", tech,
-                  bitrate);
-  if (NULL == prbs_cmd ||
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-      prbs_cmd_len != 0x09)
-#else
-      prbs_cmd_len != 0x07)
-#endif
-  {
-    return status;
-  }
-
-  prbs_cmd[0] = 0x2F;
-  prbs_cmd[1] = 0x30;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-  prbs_cmd[2] = 0x06;
-  prbs_cmd[3] = (uint8_t)prbs_type;
-  // 0xFF Error value used for validation.
-  prbs_cmd[4] = (uint8_t)hw_prbs_type;
-  prbs_cmd[5] = 0xFF;  // TECH
-  prbs_cmd[6] = 0xFF;  // BITRATE
-  prbs_cmd[7] = 0x01;
-  prbs_cmd[8] = 0xFF;
-  position_tech_param = 5;
-  position_bit_param = 6;
-#else
-  prbs_cmd[2] = 0x04;
-  // 0xFF Error value used for validation.
-  prbs_cmd[3] = 0xFF;  // TECH
-  // 0xFF Error value used for validation.
-  prbs_cmd[4] = 0xFF;  // BITRATE
-  prbs_cmd[5] = 0x01;
-  prbs_cmd[6] = 0xFF;
-  position_tech_param = 3;
-  position_bit_param = 4;
-#endif
-
-  switch (tech) {
-    case NFC_RF_TECHNOLOGY_A:
-      NXPLOG_NCIHAL_D("phNxpNciHal_getPrbsCmd - NFC_RF_TECHNOLOGY_A");
-      prbs_cmd[position_tech_param] = 0x00;
-      break;
-    case NFC_RF_TECHNOLOGY_B:
-      NXPLOG_NCIHAL_D("phNxpNciHal_getPrbsCmd - NFC_RF_TECHNOLOGY_B");
-      prbs_cmd[position_tech_param] = 0x01;
-      break;
-    case NFC_RF_TECHNOLOGY_F:
-      NXPLOG_NCIHAL_D("phNxpNciHal_getPrbsCmd - NFC_RF_TECHNOLOGY_F");
-      prbs_cmd[position_tech_param] = 0x02;
-      break;
-    default:
-      break;
-  }
-
-  switch (bitrate) {
-    case NFC_BIT_RATE_106:
-      NXPLOG_NCIHAL_D("phNxpNciHal_getPrbsCmd - NFC_BIT_RATE_106");
-      if (prbs_cmd[position_tech_param] != 0x02) {
-        prbs_cmd[position_bit_param] = 0x00;
-      }
-      break;
-    case NFC_BIT_RATE_212:
-      NXPLOG_NCIHAL_D("phNxpNciHal_getPrbsCmd - NFC_BIT_RATE_212");
-      prbs_cmd[position_bit_param] = 0x01;
-      break;
-    case NFC_BIT_RATE_424:
-      NXPLOG_NCIHAL_D("phNxpNciHal_getPrbsCmd - NFC_BIT_RATE_424");
-      prbs_cmd[position_bit_param] = 0x02;
-      break;
-    case NFC_BIT_RATE_848:
-      NXPLOG_NCIHAL_D("phNxpNciHal_getPrbsCmd - NFC_BIT_RATE_848");
-      if (prbs_cmd[position_tech_param] != 0x02) {
-        prbs_cmd[position_bit_param] = 0x03;
-      }
-      break;
-    default:
-      break;
-  }
-
-  if (prbs_cmd[position_tech_param] == 0xFF ||
-      prbs_cmd[position_bit_param] == 0xFF) {
-    // Invalid Param.
-    status = NFCSTATUS_FAILED;
-  }
-
-  return status;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_RfFieldTest
-**
-** Description      Test function performs RF filed test.
-**
-** Returns          NFCSTATUS_SUCCESS if successful,otherwise NFCSTATUS_FAILED.
-**
-*******************************************************************************/
-NFCSTATUS phNxpNciHal_RfFieldTest(uint8_t on) {
-  NFCSTATUS status = NFCSTATUS_SUCCESS;
-  int len = 0;
-  int cnt = 0;
-
-  NXPLOG_NCIHAL_D("phNxpNciHal_RfFieldTest - start %x\n", on);
-
-  if (on == 0x01) {
-    len = (sizeof(rf_field_on_test_data) / sizeof(rf_field_on_test_data[0]));
-
-    for (cnt = 0; cnt < len; cnt++) {
-      status = phNxpNciHal_performTest(&(rf_field_on_test_data[cnt]));
-      if (status == NFCSTATUS_RESPONSE_TIMEOUT || status == NFCSTATUS_FAILED) {
-        break;
-      }
-    }
-  } else if (on == 0x00) {
-    len = (sizeof(rf_field_off_test_data) / sizeof(rf_field_off_test_data[0]));
-
-    for (cnt = 0; cnt < len; cnt++) {
-      status = phNxpNciHal_performTest(&(rf_field_off_test_data[cnt]));
-      if (status == NFCSTATUS_RESPONSE_TIMEOUT || status == NFCSTATUS_FAILED) {
-        break;
-      }
-    }
-  } else {
-    status = NFCSTATUS_FAILED;
-  }
-
-  if (status == NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_D("phNxpNciHal_RfFieldTest - SUCCESSS\n");
-  } else {
-    NXPLOG_NCIHAL_D("phNxpNciHal_RfFieldTest - FAILED\n");
-  }
-
-  NXPLOG_NCIHAL_D("phNxpNciHal_RfFieldTest - end\n");
-
-  return status;
-}
-
-/*******************************************************************************
- **
- ** Function         phNxpNciHal_AntennaTest
- **
- ** Description
- **
- ** Returns
- **
- ******************************************************************************/
-NFCSTATUS phNxpNciHal_AntennaTest() {
-  NFCSTATUS status = NFCSTATUS_FAILED;
-
-  return status;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_DownloadPinTest
-**
-** Description      Test function to validate the FW download pin connection.
-**
-** Returns          NFCSTATUS_SUCCESS if successful,otherwise NFCSTATUS_FAILED.
-**
-*******************************************************************************/
-NFCSTATUS phNxpNciHal_DownloadPinTest(void) {
-  NFCSTATUS status = NFCSTATUS_FAILED;
-  int len = 0;
-  int cnt = 0;
-
-  NXPLOG_NCIHAL_D("phNxpNciHal_DownloadPinTest - start\n");
-
-  len = (sizeof(download_pin_test_data1) / sizeof(download_pin_test_data1[0]));
-
-  for (cnt = 0; cnt < len; cnt++) {
-    status = phNxpNciHal_performTest(&(download_pin_test_data1[cnt]));
-    if (status == NFCSTATUS_RESPONSE_TIMEOUT || status == NFCSTATUS_FAILED) {
-      break;
-    }
-  }
-
-  if (status != NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_D("phNxpNciHal_DownloadPinTest - FAILED\n");
-    return status;
-  }
-
-  status = NFCSTATUS_FAILED;
-  status = phTmlNfc_IoCtl(phTmlNfc_e_EnableDownloadMode);
-  if (NFCSTATUS_SUCCESS != status) {
-    NXPLOG_NCIHAL_D("phNxpNciHal_DownloadPinTest - FAILED\n");
-    return status;
-  }
-
-  status = NFCSTATUS_FAILED;
-  len = (sizeof(download_pin_test_data2) / sizeof(download_pin_test_data2[0]));
-
-  for (cnt = 0; cnt < len; cnt++) {
-    status = phNxpNciHal_performTest(&(download_pin_test_data2[cnt]));
-    if (status == NFCSTATUS_RESPONSE_TIMEOUT || status == NFCSTATUS_FAILED) {
-      break;
-    }
-  }
-
-  if (status == NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_D("phNxpNciHal_DownloadPinTest - SUCCESSS\n");
-  } else {
-    NXPLOG_NCIHAL_D("phNxpNciHal_DownloadPinTest - FAILED\n");
-  }
-
-  NXPLOG_NCIHAL_D("phNxpNciHal_DownloadPinTest - end\n");
-
-  return status;
-}
-/*******************************************************************************
-**
-** Function         phNxpNciHal_AntennaSelfTest
-**
-** Description      Test function to validate the Antenna's discrete
-**                  components connection.
-**
-** Returns          NFCSTATUS_SUCCESS if successful,otherwise NFCSTATUS_FAILED.
-**
-*******************************************************************************/
-NFCSTATUS phNxpNciHal_AntennaSelfTest(phAntenna_St_Resp_t* phAntenna_St_Resp) {
-  NFCSTATUS status = NFCSTATUS_FAILED;
-  NFCSTATUS antenna_st_status = NFCSTATUS_FAILED;
-  int len = 0;
-  int cnt = 0;
-
-  NXPLOG_NCIHAL_D("phNxpNciHal_AntennaSelfTest - start\n");
-  memcpy(&phAntenna_resp, phAntenna_St_Resp, sizeof(phAntenna_St_Resp_t));
-  len = (sizeof(antenna_self_test_data) / sizeof(antenna_self_test_data[0]));
-
-  for (cnt = 0; cnt < len; cnt++) {
-    status = phNxpNciHal_performTest(&(antenna_self_test_data[cnt]));
-    if (status == NFCSTATUS_RESPONSE_TIMEOUT || status == NFCSTATUS_FAILED) {
-      NXPLOG_NCIHAL_E(
-          "phNxpNciHal_AntennaSelfTest: commnad execution - FAILED\n");
-      break;
-    }
-  }
-
-  if (status == NFCSTATUS_SUCCESS) {
-    if ((gtxldo_status == NFCSTATUS_SUCCESS) &&
-        (gagc_value_status == NFCSTATUS_SUCCESS) &&
-        (gagc_nfcld_status == NFCSTATUS_SUCCESS) &&
-        (gagc_differential_status == NFCSTATUS_SUCCESS)) {
-      antenna_st_status = NFCSTATUS_SUCCESS;
-      NXPLOG_NCIHAL_D("phNxpNciHal_AntennaSelfTest - SUCESS\n");
-    } else {
-      NXPLOG_NCIHAL_D("phNxpNciHal_AntennaSelfTest - FAILED\n");
-    }
-  } else {
-    NXPLOG_NCIHAL_D("phNxpNciHal_AntennaSelfTest - FAILED\n");
-  }
-
-  NXPLOG_NCIHAL_D("phNxpNciHal_AntennaSelfTest - end\n");
-
-  return antenna_st_status;
-}
-
-#endif /*#ifdef NXP_HW_SELF_TEST*/
diff --git a/halimpl/pn54x/tml/phDal4Nfc_messageQueueLib.c b/halimpl/pn54x/tml/phDal4Nfc_messageQueueLib.c
deleted file mode 100644
index f43774d..0000000
--- a/halimpl/pn54x/tml/phDal4Nfc_messageQueueLib.c
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * Copyright (C) 2010-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * DAL independent message queue implementation for Android (can be used under
- * Linux too)
- */
-
-#include <errno.h>
-#include <linux/ipc.h>
-#include <phDal4Nfc_messageQueueLib.h>
-#include <phNxpLog.h>
-#include <pthread.h>
-#include <semaphore.h>
-
-typedef struct phDal4Nfc_message_queue_item {
-  phLibNfc_Message_t nMsg;
-  struct phDal4Nfc_message_queue_item* pPrev;
-  struct phDal4Nfc_message_queue_item* pNext;
-} phDal4Nfc_message_queue_item_t;
-
-typedef struct phDal4Nfc_message_queue {
-  phDal4Nfc_message_queue_item_t* pItems;
-  pthread_mutex_t nCriticalSectionMutex;
-  sem_t nProcessSemaphore;
-
-} phDal4Nfc_message_queue_t;
-
-/*******************************************************************************
-**
-** Function         phDal4Nfc_msgget
-**
-** Description      Allocates message queue
-**
-** Parameters       Ignored, included only for Linux queue API compatibility
-**
-** Returns          (int) value of pQueue if successful
-**                  -1, if failed to allocate memory or to init mutex
-**
-*******************************************************************************/
-intptr_t phDal4Nfc_msgget(key_t key, int msgflg) {
-  phDal4Nfc_message_queue_t* pQueue;
-  UNUSED(key);
-  UNUSED(msgflg);
-  pQueue =
-      (phDal4Nfc_message_queue_t*)malloc(sizeof(phDal4Nfc_message_queue_t));
-  if (pQueue == NULL) return -1;
-  memset(pQueue, 0, sizeof(phDal4Nfc_message_queue_t));
-  if (pthread_mutex_init(&pQueue->nCriticalSectionMutex, NULL) == -1) {
-    free(pQueue);
-    return -1;
-  }
-  if (sem_init(&pQueue->nProcessSemaphore, 0, 0) == -1) {
-    free(pQueue);
-    return -1;
-  }
-
-  return ((intptr_t)pQueue);
-}
-
-/*******************************************************************************
-**
-** Function         phDal4Nfc_msgrelease
-**
-** Description      Releases message queue
-**
-** Parameters       msqid - message queue handle
-**
-** Returns          None
-**
-*******************************************************************************/
-void phDal4Nfc_msgrelease(intptr_t msqid) {
-  phDal4Nfc_message_queue_t* pQueue = (phDal4Nfc_message_queue_t*)msqid;
-
-  if (pQueue != NULL) {
-    sem_post(&pQueue->nProcessSemaphore);
-    usleep(3000);
-    if (sem_destroy(&pQueue->nProcessSemaphore)) {
-      NXPLOG_TML_E("Failed to destroy semaphore (errno=0x%08x)", errno);
-    }
-    pthread_mutex_destroy(&pQueue->nCriticalSectionMutex);
-
-    free(pQueue);
-  }
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phDal4Nfc_msgctl
-**
-** Description      Destroys message queue
-**
-** Parameters       msqid - message queue handle
-**                  cmd, buf - ignored, included only for Linux queue API
-**                  compatibility
-**
-** Returns          0,  if successful
-**                  -1, if invalid handle is passed
-**
-*******************************************************************************/
-int phDal4Nfc_msgctl(intptr_t msqid, int cmd, void* buf) {
-  phDal4Nfc_message_queue_t* pQueue;
-  phDal4Nfc_message_queue_item_t* p;
-  UNUSED(cmd);
-  UNUSED(buf);
-  if (msqid == 0) return -1;
-
-  pQueue = (phDal4Nfc_message_queue_t*)msqid;
-  pthread_mutex_lock(&pQueue->nCriticalSectionMutex);
-  if (pQueue->pItems != NULL) {
-    p = pQueue->pItems;
-    while (p->pNext != NULL) {
-      p = p->pNext;
-    }
-    while (p->pPrev != NULL) {
-      p = p->pPrev;
-      free(p->pNext);
-      p->pNext = NULL;
-    }
-    free(p);
-  }
-  pQueue->pItems = NULL;
-  pthread_mutex_unlock(&pQueue->nCriticalSectionMutex);
-  pthread_mutex_destroy(&pQueue->nCriticalSectionMutex);
-  free(pQueue);
-
-  return 0;
-}
-
-/*******************************************************************************
-**
-** Function         phDal4Nfc_msgsnd
-**
-** Description      Sends a message to the queue. The message will be added at
-**                  the end of the queue as appropriate for FIFO policy
-**
-** Parameters       msqid  - message queue handle
-**                  msgp   - message to be sent
-**                  msgsz  - message size
-**                  msgflg - ignored
-**
-** Returns          0,  if successful
-**                  -1, if invalid parameter passed or failed to allocate memory
-**
-*******************************************************************************/
-intptr_t phDal4Nfc_msgsnd(intptr_t msqid, phLibNfc_Message_t* msg, int msgflg) {
-  phDal4Nfc_message_queue_t* pQueue;
-  phDal4Nfc_message_queue_item_t* p;
-  phDal4Nfc_message_queue_item_t* pNew;
-  UNUSED(msgflg);
-  if ((msqid == 0) || (msg == NULL)) return -1;
-
-  pQueue = (phDal4Nfc_message_queue_t*)msqid;
-  pNew = (phDal4Nfc_message_queue_item_t*)malloc(
-      sizeof(phDal4Nfc_message_queue_item_t));
-  if (pNew == NULL) return -1;
-  memset(pNew, 0, sizeof(phDal4Nfc_message_queue_item_t));
-  memcpy(&pNew->nMsg, msg, sizeof(phLibNfc_Message_t));
-  pthread_mutex_lock(&pQueue->nCriticalSectionMutex);
-
-  if (pQueue->pItems != NULL) {
-    p = pQueue->pItems;
-    while (p->pNext != NULL) {
-      p = p->pNext;
-    }
-    p->pNext = pNew;
-    pNew->pPrev = p;
-  } else {
-    pQueue->pItems = pNew;
-  }
-  pthread_mutex_unlock(&pQueue->nCriticalSectionMutex);
-
-  sem_post(&pQueue->nProcessSemaphore);
-
-  return 0;
-}
-
-/*******************************************************************************
-**
-** Function         phDal4Nfc_msgrcv
-**
-** Description      Gets the oldest message from the queue.
-**                  If the queue is empty the function waits (blocks on a mutex)
-**                  until a message is posted to the queue with phDal4Nfc_msgsnd
-**
-** Parameters       msqid  - message queue handle
-**                  msgp   - message to be received
-**                  msgsz  - message size
-**                  msgtyp - ignored
-**                  msgflg - ignored
-**
-** Returns          0,  if successful
-**                  -1, if invalid parameter passed
-**
-*******************************************************************************/
-int phDal4Nfc_msgrcv(intptr_t msqid, phLibNfc_Message_t* msg, long msgtyp,
-                     int msgflg) {
-  phDal4Nfc_message_queue_t* pQueue;
-  phDal4Nfc_message_queue_item_t* p;
-  UNUSED(msgflg);
-  UNUSED(msgtyp);
-  if ((msqid == 0) || (msg == NULL)) return -1;
-
-  pQueue = (phDal4Nfc_message_queue_t*)msqid;
-
-  sem_wait(&pQueue->nProcessSemaphore);
-
-  pthread_mutex_lock(&pQueue->nCriticalSectionMutex);
-
-  if (pQueue->pItems != NULL) {
-    memcpy(msg, &(pQueue->pItems)->nMsg, sizeof(phLibNfc_Message_t));
-    p = pQueue->pItems->pNext;
-    free(pQueue->pItems);
-    pQueue->pItems = p;
-  }
-  pthread_mutex_unlock(&pQueue->nCriticalSectionMutex);
-
-  return 0;
-}
diff --git a/halimpl/pn54x/tml/phDal4Nfc_messageQueueLib.h b/halimpl/pn54x/tml/phDal4Nfc_messageQueueLib.h
deleted file mode 100644
index 1e0ede2..0000000
--- a/halimpl/pn54x/tml/phDal4Nfc_messageQueueLib.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2010-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * DAL independent message queue implementation for Android
- */
-
-#ifndef PHDAL4NFC_MESSAGEQUEUE_H
-#define PHDAL4NFC_MESSAGEQUEUE_H
-
-#include <linux/ipc.h>
-#include <phNfcTypes.h>
-
-intptr_t phDal4Nfc_msgget(key_t key, int msgflg);
-void phDal4Nfc_msgrelease(intptr_t msqid);
-int phDal4Nfc_msgctl(intptr_t msqid, int cmd, void* buf);
-intptr_t phDal4Nfc_msgsnd(intptr_t msqid, phLibNfc_Message_t* msg, int msgflg);
-int phDal4Nfc_msgrcv(intptr_t msqid, phLibNfc_Message_t* msg, long msgtyp,
-                     int msgflg);
-
-#endif /*  PHDAL4NFC_MESSAGEQUEUE_H  */
diff --git a/halimpl/pn54x/tml/phOsalNfc_Timer.c b/halimpl/pn54x/tml/phOsalNfc_Timer.c
deleted file mode 100644
index 3f5269d..0000000
--- a/halimpl/pn54x/tml/phOsalNfc_Timer.c
+++ /dev/null
@@ -1,444 +0,0 @@
-/*
- * Copyright (C) 2010-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * OSAL Implementation for Timers.
- */
-
-#include <phNfcCommon.h>
-#include <phNfcTypes.h>
-#include <phNxpLog.h>
-#include <phNxpNciHal.h>
-#include <phOsalNfc_Timer.h>
-#include <signal.h>
-
-#define PH_NFC_MAX_TIMER (5U)
-static phOsalNfc_TimerHandle_t apTimerInfo[PH_NFC_MAX_TIMER];
-
-extern phNxpNciHal_Control_t nxpncihal_ctrl;
-
-/*
- * Defines the base address for generating timerid.
- */
-#define PH_NFC_TIMER_BASE_ADDRESS (100U)
-
-/*
- *  Defines the value for invalid timerid returned during timeSetEvent
- */
-#define PH_NFC_TIMER_ID_ZERO (0x00)
-
-/*
- * Invalid timer ID type. This ID used indicate timer creation is failed */
-#define PH_NFC_TIMER_ID_INVALID (0xFFFF)
-
-/* Forward declarations */
-static void phOsalNfc_PostTimerMsg(phLibNfc_Message_t* pMsg);
-static void phOsalNfc_DeferredCall(void* pParams);
-static void phOsalNfc_Timer_Expired(union sigval sv);
-
-/*
- *************************** Function Definitions ******************************
- */
-
-/*******************************************************************************
-**
-** Function         phOsalNfc_Timer_Create
-**
-** Description      Creates a timer which shall call back the specified function
-**                  when the timer expires. Fails if OSAL module is not
-**                  initialized or timers are already occupied
-**
-** Parameters       None
-**
-** Returns          TimerId
-**                  TimerId value of PH_OSALNFC_TIMER_ID_INVALID indicates that
-**                  timer is not created
-**
-*******************************************************************************/
-uint32_t phOsalNfc_Timer_Create(void) {
-  /* dwTimerId is also used as an index at which timer object can be stored */
-  uint32_t dwTimerId = PH_OSALNFC_TIMER_ID_INVALID;
-  static struct sigevent se;
-  phOsalNfc_TimerHandle_t* pTimerHandle;
-  /* Timer needs to be initialized for timer usage */
-
-  se.sigev_notify = SIGEV_THREAD;
-  se.sigev_notify_function = phOsalNfc_Timer_Expired;
-  se.sigev_notify_attributes = NULL;
-  dwTimerId = phUtilNfc_CheckForAvailableTimer();
-
-  /* Check whether timers are available, if yes create a timer handle structure
-   */
-  if ((PH_NFC_TIMER_ID_ZERO != dwTimerId) && (dwTimerId <= PH_NFC_MAX_TIMER)) {
-    pTimerHandle = (phOsalNfc_TimerHandle_t*)&apTimerInfo[dwTimerId - 1];
-    /* Build the Timer Id to be returned to Caller Function */
-    dwTimerId += PH_NFC_TIMER_BASE_ADDRESS;
-    se.sigev_value.sival_int = (int)dwTimerId;
-    /* Create POSIX timer */
-    if (timer_create(CLOCK_REALTIME, &se, &(pTimerHandle->hTimerHandle)) ==
-        -1) {
-      dwTimerId = PH_NFC_TIMER_ID_INVALID;
-    } else {
-      /* Set the state to indicate timer is ready */
-      pTimerHandle->eState = eTimerIdle;
-      /* Store the Timer Id which shall act as flag during check for timer
-       * availability */
-      pTimerHandle->TimerId = dwTimerId;
-    }
-  } else {
-    dwTimerId = PH_NFC_TIMER_ID_INVALID;
-  }
-
-  /* Timer ID invalid can be due to Uninitialized state,Non availability of
-   * Timer */
-  return dwTimerId;
-}
-
-/*******************************************************************************
-**
-** Function         phOsalNfc_Timer_Start
-**
-** Description      Starts the requested, already created, timer.
-**                  If the timer is already running, timer stops and restarts
-**                  with the new timeout value and new callback function in case
-**                  any ??????
-**                  Creates a timer which shall call back the specified function
-**                  when the timer expires
-**
-** Parameters       dwTimerId - valid timer ID obtained during timer creation
-**                  dwRegTimeCnt - requested timeout in milliseconds
-**                  pApplication_callback - application callback interface to be
-**                                          called when timer expires
-**                  pContext - caller context, to be passed to the application
-**                             callback function
-**
-** Returns          NFC status:
-**                  NFCSTATUS_SUCCESS - the operation was successful
-**                  NFCSTATUS_NOT_INITIALISED - OSAL Module is not initialized
-**                  NFCSTATUS_INVALID_PARAMETER - invalid parameter passed to
-**                                                the function
-**                  PH_OSALNFC_TIMER_START_ERROR - timer could not be created
-**                                                 due to system error
-**
-*******************************************************************************/
-NFCSTATUS phOsalNfc_Timer_Start(uint32_t dwTimerId, uint32_t dwRegTimeCnt,
-                                pphOsalNfc_TimerCallbck_t pApplication_callback,
-                                void* pContext) {
-  NFCSTATUS wStartStatus = NFCSTATUS_SUCCESS;
-
-  struct itimerspec its;
-  uint32_t dwIndex;
-  phOsalNfc_TimerHandle_t* pTimerHandle;
-  /* Retrieve the index at which the timer handle structure is stored */
-  dwIndex = dwTimerId - PH_NFC_TIMER_BASE_ADDRESS - 0x01;
-  pTimerHandle = (phOsalNfc_TimerHandle_t*)&apTimerInfo[dwIndex];
-  /* OSAL Module needs to be initialized for timer usage */
-  /* Check whether the handle provided by user is valid */
-  if ((dwIndex < PH_NFC_MAX_TIMER) && (0x00 != pTimerHandle->TimerId) &&
-      (NULL != pApplication_callback)) {
-    its.it_interval.tv_sec = 0;
-    its.it_interval.tv_nsec = 0;
-    its.it_value.tv_sec = dwRegTimeCnt / 1000;
-    its.it_value.tv_nsec = 1000000 * (dwRegTimeCnt % 1000);
-    if (its.it_value.tv_sec == 0 && its.it_value.tv_nsec == 0) {
-      /* This would inadvertently stop the timer*/
-      its.it_value.tv_nsec = 1;
-    }
-    pTimerHandle->Application_callback = pApplication_callback;
-    pTimerHandle->pContext = pContext;
-    pTimerHandle->eState = eTimerRunning;
-    /* Arm the timer */
-    if ((timer_settime(pTimerHandle->hTimerHandle, 0, &its, NULL)) == -1) {
-      wStartStatus = PHNFCSTVAL(CID_NFC_OSAL, PH_OSALNFC_TIMER_START_ERROR);
-    }
-  } else {
-    wStartStatus = PHNFCSTVAL(CID_NFC_OSAL, NFCSTATUS_INVALID_PARAMETER);
-  }
-
-  return wStartStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phOsalNfc_Timer_Stop
-**
-** Description      Stops already started timer
-**                  Allows to stop running timer. In case timer is stopped,
-**                  timer callback will not be notified any more
-**
-** Parameters       dwTimerId - valid timer ID obtained during timer creation
-**
-** Returns          NFC status:
-**                  NFCSTATUS_SUCCESS - the operation was successful
-**                  NFCSTATUS_NOT_INITIALISED - OSAL Module is not initialized
-**                  NFCSTATUS_INVALID_PARAMETER - invalid parameter passed to
-**                                                the function
-**                  PH_OSALNFC_TIMER_STOP_ERROR - timer could not be stopped due
-**                                                to system error
-**
-*******************************************************************************/
-NFCSTATUS phOsalNfc_Timer_Stop(uint32_t dwTimerId) {
-  NFCSTATUS wStopStatus = NFCSTATUS_SUCCESS;
-  static struct itimerspec its = {{0, 0}, {0, 0}};
-
-  uint32_t dwIndex;
-  phOsalNfc_TimerHandle_t* pTimerHandle;
-  dwIndex = dwTimerId - PH_NFC_TIMER_BASE_ADDRESS - 0x01;
-  pTimerHandle = (phOsalNfc_TimerHandle_t*)&apTimerInfo[dwIndex];
-  /* OSAL Module and Timer needs to be initialized for timer usage */
-  /* Check whether the TimerId provided by user is valid */
-  if ((dwIndex < PH_NFC_MAX_TIMER) && (0x00 != pTimerHandle->TimerId) &&
-      (pTimerHandle->eState != eTimerIdle)) {
-    /* Stop the timer only if the callback has not been invoked */
-    if (pTimerHandle->eState == eTimerRunning) {
-      if ((timer_settime(pTimerHandle->hTimerHandle, 0, &its, NULL)) == -1) {
-        wStopStatus = PHNFCSTVAL(CID_NFC_OSAL, PH_OSALNFC_TIMER_STOP_ERROR);
-      } else {
-        /* Change the state of timer to Stopped */
-        pTimerHandle->eState = eTimerStopped;
-      }
-    }
-  } else {
-    wStopStatus = PHNFCSTVAL(CID_NFC_OSAL, NFCSTATUS_INVALID_PARAMETER);
-  }
-
-  return wStopStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phOsalNfc_Timer_Delete
-**
-** Description      Deletes previously created timer
-**                  Allows to delete previously created timer. In case timer is
-**                  running, it is first stopped and then deleted
-**
-** Parameters       dwTimerId - valid timer ID obtained during timer creation
-**
-** Returns          NFC status:
-**                  NFCSTATUS_SUCCESS - the operation was successful
-**                  NFCSTATUS_NOT_INITIALISED - OSAL Module is not initialized
-**                  NFCSTATUS_INVALID_PARAMETER - invalid parameter passed to
-**                                                the function
-**                  PH_OSALNFC_TIMER_DELETE_ERROR - timer could not be stopped
-**                                                  due to system error
-**
-*******************************************************************************/
-NFCSTATUS phOsalNfc_Timer_Delete(uint32_t dwTimerId) {
-  NFCSTATUS wDeleteStatus = NFCSTATUS_SUCCESS;
-
-  uint32_t dwIndex;
-  phOsalNfc_TimerHandle_t* pTimerHandle;
-  dwIndex = dwTimerId - PH_NFC_TIMER_BASE_ADDRESS - 0x01;
-  pTimerHandle = (phOsalNfc_TimerHandle_t*)&apTimerInfo[dwIndex];
-  /* OSAL Module and Timer needs to be initialized for timer usage */
-
-  /* Check whether the TimerId passed by user is valid and Deregistering of
-   * timer is successful */
-  if ((dwIndex < PH_NFC_MAX_TIMER) && (0x00 != pTimerHandle->TimerId) &&
-      (NFCSTATUS_SUCCESS == phOsalNfc_CheckTimerPresence(pTimerHandle))) {
-    /* Cancel the timer before deleting */
-    if (timer_delete(pTimerHandle->hTimerHandle) == -1) {
-      wDeleteStatus = PHNFCSTVAL(CID_NFC_OSAL, PH_OSALNFC_TIMER_DELETE_ERROR);
-    }
-    /* Clear Timer structure used to store timer related data */
-    memset(pTimerHandle, (uint8_t)0x00, sizeof(phOsalNfc_TimerHandle_t));
-  } else {
-    wDeleteStatus = PHNFCSTVAL(CID_NFC_OSAL, NFCSTATUS_INVALID_PARAMETER);
-  }
-  return wDeleteStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phOsalNfc_Timer_Cleanup
-**
-** Description      Deletes all previously created timers
-**                  Allows to delete previously created timers. In case timer is
-**                  running, it is first stopped and then deleted
-**
-** Parameters       None
-**
-** Returns          None
-**
-*******************************************************************************/
-void phOsalNfc_Timer_Cleanup(void) {
-  /* Delete all timers */
-  uint32_t dwIndex;
-  phOsalNfc_TimerHandle_t* pTimerHandle;
-  for (dwIndex = 0; dwIndex < PH_NFC_MAX_TIMER; dwIndex++) {
-    pTimerHandle = (phOsalNfc_TimerHandle_t*)&apTimerInfo[dwIndex];
-    /* OSAL Module and Timer needs to be initialized for timer usage */
-
-    /* Check whether the TimerId passed by user is valid and Deregistering of
-     * timer is successful */
-    if ((0x00 != pTimerHandle->TimerId) &&
-        (NFCSTATUS_SUCCESS == phOsalNfc_CheckTimerPresence(pTimerHandle))) {
-      /* Cancel the timer before deleting */
-      if (timer_delete(pTimerHandle->hTimerHandle) == -1) {
-        NXPLOG_TML_E("timer %d delete error!", dwIndex);
-      }
-      /* Clear Timer structure used to store timer related data */
-      memset(pTimerHandle, (uint8_t)0x00, sizeof(phOsalNfc_TimerHandle_t));
-    }
-  }
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phOsalNfc_DeferredCall
-**
-** Description      Invokes the timer callback function after timer expiration.
-**                  Shall invoke the callback function registered by the timer
-**                  caller function
-**
-** Parameters       pParams - parameters indicating the ID of the timer
-**
-** Returns          None                -
-**
-*******************************************************************************/
-static void phOsalNfc_DeferredCall(void* pParams) {
-  /* Retrieve the timer id from the parameter */
-  uint32_t dwIndex;
-  phOsalNfc_TimerHandle_t* pTimerHandle;
-  if (NULL != pParams) {
-    /* Retrieve the index at which the timer handle structure is stored */
-    dwIndex = (uintptr_t)pParams - PH_NFC_TIMER_BASE_ADDRESS - 0x01;
-    pTimerHandle = (phOsalNfc_TimerHandle_t*)&apTimerInfo[dwIndex];
-    if (pTimerHandle->Application_callback != NULL) {
-      /* Invoke the callback function with osal Timer ID */
-      pTimerHandle->Application_callback((uintptr_t)pParams,
-                                         pTimerHandle->pContext);
-    }
-  }
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phOsalNfc_PostTimerMsg
-**
-** Description      Posts message on the user thread
-**                  Shall be invoked upon expiration of a timer
-**                  Shall post message on user thread through which timer
-**                  callback function shall be invoked
-**
-** Parameters       pMsg - pointer to the message structure posted on user
-**                         thread
-**
-** Returns          None
-**
-*******************************************************************************/
-static void phOsalNfc_PostTimerMsg(phLibNfc_Message_t* pMsg) {
-  (void)phDal4Nfc_msgsnd(
-      nxpncihal_ctrl.gDrvCfg
-          .nClientId /*gpphOsalNfc_Context->dwCallbackThreadID*/,
-      pMsg, 0);
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phOsalNfc_Timer_Expired
-**
-** Description      posts message upon expiration of timer
-**                  Shall be invoked when any one timer is expired
-**                  Shall post message on user thread to invoke respective
-**                  callback function provided by the caller of Timer function
-**
-** Returns          None
-**
-*******************************************************************************/
-static void phOsalNfc_Timer_Expired(union sigval sv) {
-  uint32_t dwIndex;
-  phOsalNfc_TimerHandle_t* pTimerHandle;
-
-  dwIndex = ((uint32_t)(sv.sival_int)) - PH_NFC_TIMER_BASE_ADDRESS - 0x01;
-  pTimerHandle = (phOsalNfc_TimerHandle_t*)&apTimerInfo[dwIndex];
-  /* Timer is stopped when callback function is invoked */
-  pTimerHandle->eState = eTimerStopped;
-
-  pTimerHandle->tDeferedCallInfo.pDeferedCall = &phOsalNfc_DeferredCall;
-  pTimerHandle->tDeferedCallInfo.pParam = (void*)((intptr_t)(sv.sival_int));
-
-  pTimerHandle->tOsalMessage.eMsgType = PH_LIBNFC_DEFERREDCALL_MSG;
-  pTimerHandle->tOsalMessage.pMsgData = (void*)&pTimerHandle->tDeferedCallInfo;
-
-  /* Post a message on the queue to invoke the function */
-  phOsalNfc_PostTimerMsg((phLibNfc_Message_t*)&pTimerHandle->tOsalMessage);
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phUtilNfc_CheckForAvailableTimer
-**
-** Description      Find an available timer id
-**
-** Parameters       void
-**
-** Returns          Available timer id
-**
-*******************************************************************************/
-uint32_t phUtilNfc_CheckForAvailableTimer(void) {
-  /* Variable used to store the index at which the object structure details
-     can be stored. Initialize it as not available. */
-  uint32_t dwIndex = 0x00;
-  uint32_t dwRetval = 0x00;
-
-  /* Check whether Timer object can be created */
-  for (dwIndex = 0x00; ((dwIndex < PH_NFC_MAX_TIMER) && (0x00 == dwRetval));
-       dwIndex++) {
-    if (!(apTimerInfo[dwIndex].TimerId)) {
-      dwRetval = (dwIndex + 0x01);
-    }
-  }
-
-  return (dwRetval);
-}
-
-/*******************************************************************************
-**
-** Function         phOsalNfc_CheckTimerPresence
-**
-** Description      Checks the requested timer is present or not
-**
-** Parameters       pObjectHandle - timer context
-**
-** Returns          NFCSTATUS_SUCCESS if found
-**                  Other value if not found
-**
-*******************************************************************************/
-NFCSTATUS phOsalNfc_CheckTimerPresence(void* pObjectHandle) {
-  uint32_t dwIndex;
-  NFCSTATUS wRegisterStatus = NFCSTATUS_INVALID_PARAMETER;
-
-  for (dwIndex = 0x00;
-       ((dwIndex < PH_NFC_MAX_TIMER) && (wRegisterStatus != NFCSTATUS_SUCCESS));
-       dwIndex++) {
-    /* For Timer, check whether the requested handle is present or not */
-    if (((&apTimerInfo[dwIndex]) == (phOsalNfc_TimerHandle_t*)pObjectHandle) &&
-        (apTimerInfo[dwIndex].TimerId)) {
-      wRegisterStatus = NFCSTATUS_SUCCESS;
-    }
-  }
-  return wRegisterStatus;
-}
diff --git a/halimpl/pn54x/tml/phOsalNfc_Timer.h b/halimpl/pn54x/tml/phOsalNfc_Timer.h
deleted file mode 100644
index 5315455..0000000
--- a/halimpl/pn54x/tml/phOsalNfc_Timer.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (C) 2010-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * OSAL header files related to Timer functions.
- */
-
-#ifndef PHOSALNFC_TIMER_H
-#define PHOSALNFC_TIMER_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
-************************* Include Files ****************************************
-*/
-
-/*
- * Timer callback interface which will be called once registered timer
- * time out expires.
- *        TimerId  - Timer Id for which callback is called.
- *        pContext - Parameter to be passed to the callback function
- */
-typedef void (*pphOsalNfc_TimerCallbck_t)(uint32_t TimerId, void* pContext);
-
-/*
- * The Timer could not be created due to a
- * system error */
-#define PH_OSALNFC_TIMER_CREATE_ERROR (0X00E0)
-
-/*
- * The Timer could not be started due to a
- * system error or invalid handle */
-#define PH_OSALNFC_TIMER_START_ERROR (0X00E1)
-
-/*
- * The Timer could not be stopped due to a
- * system error or invalid handle */
-#define PH_OSALNFC_TIMER_STOP_ERROR (0X00E2)
-
-/*
- * The Timer could not be deleted due to a
- * system error or invalid handle */
-#define PH_OSALNFC_TIMER_DELETE_ERROR (0X00E3)
-
-/*
- * Invalid timer ID type.This ID used indicate timer creation is failed */
-#define PH_OSALNFC_TIMER_ID_INVALID (0xFFFF)
-
-/*
- * OSAL timer message .This message type will be posted to
- * calling application thread.*/
-#define PH_OSALNFC_TIMER_MSG (0x315)
-
-/*
-***************************Globals,Structure and Enumeration ******************
-*/
-
-uint32_t phOsalNfc_Timer_Create(void);
-NFCSTATUS phOsalNfc_Timer_Start(uint32_t dwTimerId, uint32_t dwRegTimeCnt,
-                                pphOsalNfc_TimerCallbck_t pApplication_callback,
-                                void* pContext);
-NFCSTATUS phOsalNfc_Timer_Stop(uint32_t dwTimerId);
-NFCSTATUS phOsalNfc_Timer_Delete(uint32_t dwTimerId);
-void phOsalNfc_Timer_Cleanup(void);
-uint32_t phUtilNfc_CheckForAvailableTimer(void);
-NFCSTATUS phOsalNfc_CheckTimerPresence(void* pObjectHandle);
-
-#ifdef __cplusplus
-}
-#endif /*  C++ Compilation guard */
-#endif /* PHOSALNFC_TIMER_H */
diff --git a/halimpl/pn54x/tml/phTmlNfc.c b/halimpl/pn54x/tml/phTmlNfc.c
deleted file mode 100644
index 8aad810..0000000
--- a/halimpl/pn54x/tml/phTmlNfc.c
+++ /dev/null
@@ -1,949 +0,0 @@
-/*
- * Copyright (C) 2010-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * TML Implementation.
- */
-
-#include <phDal4Nfc_messageQueueLib.h>
-#include <phNxpLog.h>
-#include <phNxpNciHal_utils.h>
-#include <phOsalNfc_Timer.h>
-#include <phTmlNfc.h>
-#include <phTmlNfc_i2c.h>
-
-/*
- * Duration of Timer to wait after sending an Nci packet
- */
-#define PHTMLNFC_MAXTIME_RETRANSMIT (200U)
-#define MAX_WRITE_RETRY_COUNT 0x03
-/* Retry Count = Standby Recovery time of NFCC / Retransmission time + 1 */
-static uint8_t bCurrentRetryCount = (2000 / PHTMLNFC_MAXTIME_RETRANSMIT) + 1;
-
-/* Value to reset variables of TML  */
-#define PH_TMLNFC_RESET_VALUE (0x00)
-
-/* Indicates a Initial or offset value */
-#define PH_TMLNFC_VALUE_ONE (0x01)
-
-/* Initialize Context structure pointer used to access context structure */
-phTmlNfc_Context_t* gpphTmlNfc_Context = NULL;
-phTmlNfc_i2cfragmentation_t fragmentation_enabled = I2C_FRAGMENATATION_DISABLED;
-/* Local Function prototypes */
-static NFCSTATUS phTmlNfc_StartThread(void);
-static void phTmlNfc_CleanUp(void);
-static void phTmlNfc_ReadDeferredCb(void* pParams);
-static void phTmlNfc_WriteDeferredCb(void* pParams);
-static void phTmlNfc_TmlThread(void* pParam);
-static void phTmlNfc_TmlWriterThread(void* pParam);
-static void phTmlNfc_ReTxTimerCb(uint32_t dwTimerId, void* pContext);
-static NFCSTATUS phTmlNfc_InitiateTimer(void);
-
-/* Function definitions */
-
-/*******************************************************************************
-**
-** Function         phTmlNfc_Init
-**
-** Description      Provides initialization of TML layer and hardware interface
-**                  Configures given hardware interface and sends handle to the
-**                  caller
-**
-** Parameters       pConfig - TML configuration details as provided by the upper
-**                            layer
-**
-** Returns          NFC status:
-**                  NFCSTATUS_SUCCESS - initialization successful
-**                  NFCSTATUS_INVALID_PARAMETER - at least one parameter is
-**                                                invalid
-**                  NFCSTATUS_FAILED - initialization failed (for example,
-**                                     unable to open hardware interface)
-**                  NFCSTATUS_INVALID_DEVICE - device has not been opened or has
-**                                             been disconnected
-**
-*******************************************************************************/
-NFCSTATUS phTmlNfc_Init(pphTmlNfc_Config_t pConfig) {
-  NFCSTATUS wInitStatus = NFCSTATUS_SUCCESS;
-
-  /* Check if TML layer is already Initialized */
-  if (NULL != gpphTmlNfc_Context) {
-    /* TML initialization is already completed */
-    wInitStatus = PHNFCSTVAL(CID_NFC_TML, NFCSTATUS_ALREADY_INITIALISED);
-  }
-  /* Validate Input parameters */
-  else if ((NULL == pConfig) ||
-           (PH_TMLNFC_RESET_VALUE == pConfig->dwGetMsgThreadId)) {
-    /*Parameters passed to TML init are wrong */
-    wInitStatus = PHNFCSTVAL(CID_NFC_TML, NFCSTATUS_INVALID_PARAMETER);
-  } else {
-    /* Allocate memory for TML context */
-    gpphTmlNfc_Context = malloc(sizeof(phTmlNfc_Context_t));
-
-    if (NULL == gpphTmlNfc_Context) {
-      wInitStatus = PHNFCSTVAL(CID_NFC_TML, NFCSTATUS_FAILED);
-    } else {
-      /* Initialise all the internal TML variables */
-      memset(gpphTmlNfc_Context, PH_TMLNFC_RESET_VALUE,
-             sizeof(phTmlNfc_Context_t));
-      /* Make sure that the thread runs once it is created */
-      gpphTmlNfc_Context->bThreadDone = 1;
-
-      /* Open the device file to which data is read/written */
-      wInitStatus = phTmlNfc_i2c_open_and_configure(
-          pConfig, &(gpphTmlNfc_Context->pDevHandle));
-
-      if (NFCSTATUS_SUCCESS != wInitStatus) {
-        wInitStatus = PHNFCSTVAL(CID_NFC_TML, NFCSTATUS_INVALID_DEVICE);
-        gpphTmlNfc_Context->pDevHandle = NULL;
-      } else {
-        gpphTmlNfc_Context->tReadInfo.bEnable = 0;
-        gpphTmlNfc_Context->tWriteInfo.bEnable = 0;
-        gpphTmlNfc_Context->tReadInfo.bThreadBusy = false;
-        gpphTmlNfc_Context->tWriteInfo.bThreadBusy = false;
-
-        if (0 != sem_init(&gpphTmlNfc_Context->rxSemaphore, 0, 0)) {
-          wInitStatus = NFCSTATUS_FAILED;
-        } else if (0 != sem_init(&gpphTmlNfc_Context->txSemaphore, 0, 0)) {
-          wInitStatus = NFCSTATUS_FAILED;
-        } else if (0 != sem_init(&gpphTmlNfc_Context->postMsgSemaphore, 0, 0)) {
-          wInitStatus = NFCSTATUS_FAILED;
-        } else {
-          sem_post(&gpphTmlNfc_Context->postMsgSemaphore);
-          /* Start TML thread (to handle write and read operations) */
-          if (NFCSTATUS_SUCCESS != phTmlNfc_StartThread()) {
-            wInitStatus = PHNFCSTVAL(CID_NFC_TML, NFCSTATUS_FAILED);
-          } else {
-            /* Create Timer used for Retransmission of NCI packets */
-            gpphTmlNfc_Context->dwTimerId = phOsalNfc_Timer_Create();
-            if (PH_OSALNFC_TIMER_ID_INVALID != gpphTmlNfc_Context->dwTimerId) {
-              /* Store the Thread Identifier to which Message is to be posted */
-              gpphTmlNfc_Context->dwCallbackThreadId =
-                  pConfig->dwGetMsgThreadId;
-              /* Enable retransmission of Nci packet & set retry count to
-               * default */
-              gpphTmlNfc_Context->eConfig = phTmlNfc_e_DisableRetrans;
-              /* Retry Count = Standby Recovery time of NFCC / Retransmission
-               * time + 1 */
-              gpphTmlNfc_Context->bRetryCount =
-                  (2000 / PHTMLNFC_MAXTIME_RETRANSMIT) + 1;
-              gpphTmlNfc_Context->bWriteCbInvoked = false;
-            } else {
-              wInitStatus = PHNFCSTVAL(CID_NFC_TML, NFCSTATUS_FAILED);
-            }
-          }
-        }
-      }
-    }
-  }
-  /* Clean up all the TML resources if any error */
-  if (NFCSTATUS_SUCCESS != wInitStatus) {
-    /* Clear all handles and memory locations initialized during init */
-    phTmlNfc_CleanUp();
-  }
-
-  return wInitStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phTmlNfc_ConfigNciPktReTx
-**
-** Description      Provides Enable/Disable Retransmission of NCI packets
-**                  Needed in case of Timeout between Transmission and Reception
-**                  of NCI packets. Retransmission can be enabled only if
-**                  standby mode is enabled
-**
-** Parameters       eConfig - values from phTmlNfc_ConfigRetrans_t
-**                  bRetryCount - Number of times Nci packets shall be
-**                                retransmitted (default = 3)
-**
-** Returns          None
-**
-*******************************************************************************/
-void phTmlNfc_ConfigNciPktReTx(phTmlNfc_ConfigRetrans_t eConfiguration,
-                               uint8_t bRetryCounter) {
-  /* Enable/Disable Retransmission */
-
-  gpphTmlNfc_Context->eConfig = eConfiguration;
-  if (phTmlNfc_e_EnableRetrans == eConfiguration) {
-    /* Check whether Retry counter passed is valid */
-    if (0 != bRetryCounter) {
-      gpphTmlNfc_Context->bRetryCount = bRetryCounter;
-    }
-    /* Set retry counter to its default value */
-    else {
-      /* Retry Count = Standby Recovery time of NFCC / Retransmission time + 1
-       */
-      gpphTmlNfc_Context->bRetryCount =
-          (2000 / PHTMLNFC_MAXTIME_RETRANSMIT) + 1;
-    }
-  }
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phTmlNfc_StartThread
-**
-** Description      Initializes comport, reader and writer threads
-**
-** Parameters       None
-**
-** Returns          NFC status:
-**                  NFCSTATUS_SUCCESS - threads initialized successfully
-**                  NFCSTATUS_FAILED - initialization failed due to system error
-**
-*******************************************************************************/
-static NFCSTATUS phTmlNfc_StartThread(void) {
-  NFCSTATUS wStartStatus = NFCSTATUS_SUCCESS;
-  void* h_threadsEvent = 0x00;
-  uint32_t dwEvent;
-  int pthread_create_status = 0;
-
-  /* Create Reader and Writer threads */
-  pthread_create_status =
-      pthread_create(&gpphTmlNfc_Context->readerThread, NULL,
-                     (void*)&phTmlNfc_TmlThread, (void*)h_threadsEvent);
-  if (0 != pthread_create_status) {
-    wStartStatus = NFCSTATUS_FAILED;
-  } else {
-    /*Start Writer Thread*/
-    pthread_create_status =
-        pthread_create(&gpphTmlNfc_Context->writerThread, NULL,
-                       (void*)&phTmlNfc_TmlWriterThread, (void*)h_threadsEvent);
-    if (0 != pthread_create_status) {
-      wStartStatus = NFCSTATUS_FAILED;
-    }
-  }
-
-  return wStartStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phTmlNfc_ReTxTimerCb
-**
-** Description      This is the timer callback function after timer expiration.
-**
-** Parameters       dwThreadId  - id of the thread posting message
-**                  pContext    - context provided by upper layer
-**
-** Returns          None
-**
-*******************************************************************************/
-static void phTmlNfc_ReTxTimerCb(uint32_t dwTimerId, void* pContext) {
-  if ((gpphTmlNfc_Context->dwTimerId == dwTimerId) && (NULL == pContext)) {
-    /* If Retry Count has reached its limit,Retransmit Nci
-       packet */
-    if (0 == bCurrentRetryCount) {
-      /* Since the count has reached its limit,return from timer callback
-         Upper layer Timeout would have happened */
-    } else {
-      bCurrentRetryCount--;
-      gpphTmlNfc_Context->tWriteInfo.bThreadBusy = true;
-      gpphTmlNfc_Context->tWriteInfo.bEnable = 1;
-    }
-    sem_post(&gpphTmlNfc_Context->txSemaphore);
-  }
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phTmlNfc_InitiateTimer
-**
-** Description      Start a timer for Tx and Rx thread.
-**
-** Parameters       void
-**
-** Returns          NFC status
-**
-*******************************************************************************/
-static NFCSTATUS phTmlNfc_InitiateTimer(void) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-
-  /* Start Timer once Nci packet is sent */
-  wStatus = phOsalNfc_Timer_Start(gpphTmlNfc_Context->dwTimerId,
-                                  (uint32_t)PHTMLNFC_MAXTIME_RETRANSMIT,
-                                  phTmlNfc_ReTxTimerCb, NULL);
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phTmlNfc_TmlThread
-**
-** Description      Read the data from the lower layer driver
-**
-** Parameters       pParam  - parameters for Writer thread function
-**
-** Returns          None
-**
-*******************************************************************************/
-static void phTmlNfc_TmlThread(void* pParam) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  int32_t dwNoBytesWrRd = PH_TMLNFC_RESET_VALUE;
-  uint8_t temp[260];
-  /* Transaction info buffer to be passed to Callback Thread */
-  static phTmlNfc_TransactInfo_t tTransactionInfo;
-  /* Structure containing Tml callback function and parameters to be invoked
-     by the callback thread */
-  static phLibNfc_DeferredCall_t tDeferredInfo;
-  /* Initialize Message structure to post message onto Callback Thread */
-  static phLibNfc_Message_t tMsg;
-  UNUSED(pParam);
-  NXPLOG_TML_D("PN54X - Tml Reader Thread Started................\n");
-
-  /* Writer thread loop shall be running till shutdown is invoked */
-  while (gpphTmlNfc_Context->bThreadDone) {
-    /* If Tml write is requested */
-    /* Set the variable to success initially */
-    wStatus = NFCSTATUS_SUCCESS;
-    sem_wait(&gpphTmlNfc_Context->rxSemaphore);
-
-    /* If Tml read is requested */
-    if (1 == gpphTmlNfc_Context->tReadInfo.bEnable) {
-      NXPLOG_TML_D("PN54X - Read requested.....\n");
-      /* Set the variable to success initially */
-      wStatus = NFCSTATUS_SUCCESS;
-
-      /* Variable to fetch the actual number of bytes read */
-      dwNoBytesWrRd = PH_TMLNFC_RESET_VALUE;
-
-      /* Read the data from the file onto the buffer */
-      if (NULL != gpphTmlNfc_Context->pDevHandle) {
-        NXPLOG_TML_D("PN54X - Invoking I2C Read.....\n");
-        dwNoBytesWrRd =
-            phTmlNfc_i2c_read(gpphTmlNfc_Context->pDevHandle, temp, 260);
-
-        if (-1 == dwNoBytesWrRd) {
-          NXPLOG_TML_E("PN54X - Error in I2C Read.....\n");
-          sem_post(&gpphTmlNfc_Context->rxSemaphore);
-        } else if (dwNoBytesWrRd > 260) {
-          NXPLOG_TML_E("Numer of bytes read exceeds the limit 260.....\n");
-          sem_post(&gpphTmlNfc_Context->rxSemaphore);
-        } else {
-          memcpy(gpphTmlNfc_Context->tReadInfo.pBuffer, temp, dwNoBytesWrRd);
-
-          NXPLOG_TML_D("PN54X - I2C Read successful.....\n");
-          /* This has to be reset only after a successful read */
-          gpphTmlNfc_Context->tReadInfo.bEnable = 0;
-          if ((phTmlNfc_e_EnableRetrans == gpphTmlNfc_Context->eConfig) &&
-              (0x00 != (gpphTmlNfc_Context->tReadInfo.pBuffer[0] & 0xE0))) {
-            NXPLOG_TML_D("PN54X - Retransmission timer stopped.....\n");
-            /* Stop Timer to prevent Retransmission */
-            uint32_t timerStatus =
-                phOsalNfc_Timer_Stop(gpphTmlNfc_Context->dwTimerId);
-            if (NFCSTATUS_SUCCESS != timerStatus) {
-              NXPLOG_TML_E("PN54X - timer stopped returned failure.....\n");
-            } else {
-              gpphTmlNfc_Context->bWriteCbInvoked = false;
-            }
-          }
-          if (gpphTmlNfc_Context->tWriteInfo.bThreadBusy) {
-            NXPLOG_TML_D("Delay Read if write thread is busy");
-            usleep(2000); /*2ms delay to give prio to write complete */
-          }
-          /* Update the actual number of bytes read including header */
-          gpphTmlNfc_Context->tReadInfo.wLength = (uint16_t)(dwNoBytesWrRd);
-          phNxpNciHal_print_packet("RECV",
-                                   gpphTmlNfc_Context->tReadInfo.pBuffer,
-                                   gpphTmlNfc_Context->tReadInfo.wLength);
-
-          dwNoBytesWrRd = PH_TMLNFC_RESET_VALUE;
-
-          /* Fill the Transaction info structure to be passed to Callback
-           * Function */
-          tTransactionInfo.wStatus = wStatus;
-          tTransactionInfo.pBuff = gpphTmlNfc_Context->tReadInfo.pBuffer;
-          /* Actual number of bytes read is filled in the structure */
-          tTransactionInfo.wLength = gpphTmlNfc_Context->tReadInfo.wLength;
-
-          /* Read operation completed successfully. Post a Message onto Callback
-           * Thread*/
-          /* Prepare the message to be posted on User thread */
-          tDeferredInfo.pCallback = &phTmlNfc_ReadDeferredCb;
-          tDeferredInfo.pParameter = &tTransactionInfo;
-          tMsg.eMsgType = PH_LIBNFC_DEFERREDCALL_MSG;
-          tMsg.pMsgData = &tDeferredInfo;
-          tMsg.Size = sizeof(tDeferredInfo);
-          NXPLOG_TML_D("PN54X - Posting read message.....\n");
-          phTmlNfc_DeferredCall(gpphTmlNfc_Context->dwCallbackThreadId, &tMsg);
-        }
-      } else {
-        NXPLOG_TML_D("PN54X -gpphTmlNfc_Context->pDevHandle is NULL");
-      }
-    } else {
-      NXPLOG_TML_D("PN54X - read request NOT enabled");
-      usleep(10 * 1000);
-    }
-  } /* End of While loop */
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phTmlNfc_TmlWriterThread
-**
-** Description      Writes the requested data onto the lower layer driver
-**
-** Parameters       pParam  - context provided by upper layer
-**
-** Returns          None
-**
-*******************************************************************************/
-static void phTmlNfc_TmlWriterThread(void* pParam) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  int32_t dwNoBytesWrRd = PH_TMLNFC_RESET_VALUE;
-  /* Transaction info buffer to be passed to Callback Thread */
-  static phTmlNfc_TransactInfo_t tTransactionInfo;
-  /* Structure containing Tml callback function and parameters to be invoked
-     by the callback thread */
-  static phLibNfc_DeferredCall_t tDeferredInfo;
-  /* Initialize Message structure to post message onto Callback Thread */
-  static phLibNfc_Message_t tMsg;
-  /* In case of I2C Write Retry */
-  static uint16_t retry_cnt;
-  UNUSED(pParam);
-  NXPLOG_TML_D("PN54X - Tml Writer Thread Started................\n");
-
-  /* Writer thread loop shall be running till shutdown is invoked */
-  while (gpphTmlNfc_Context->bThreadDone) {
-    NXPLOG_TML_D("PN54X - Tml Writer Thread Running................\n");
-    sem_wait(&gpphTmlNfc_Context->txSemaphore);
-    /* If Tml write is requested */
-    if (1 == gpphTmlNfc_Context->tWriteInfo.bEnable) {
-      NXPLOG_TML_D("PN54X - Write requested.....\n");
-      /* Set the variable to success initially */
-      wStatus = NFCSTATUS_SUCCESS;
-      if (NULL != gpphTmlNfc_Context->pDevHandle) {
-      retry:
-        gpphTmlNfc_Context->tWriteInfo.bEnable = 0;
-        /* Variable to fetch the actual number of bytes written */
-        dwNoBytesWrRd = PH_TMLNFC_RESET_VALUE;
-        /* Write the data in the buffer onto the file */
-        NXPLOG_TML_D("PN54X - Invoking I2C Write.....\n");
-        dwNoBytesWrRd =
-            phTmlNfc_i2c_write(gpphTmlNfc_Context->pDevHandle,
-                               gpphTmlNfc_Context->tWriteInfo.pBuffer,
-                               gpphTmlNfc_Context->tWriteInfo.wLength);
-
-        /* Try I2C Write Five Times, if it fails : Raju */
-        if (-1 == dwNoBytesWrRd) {
-          if (getDownloadFlag() == true) {
-            if (retry_cnt++ < MAX_WRITE_RETRY_COUNT) {
-              NXPLOG_NCIHAL_E("PN54X - Error in I2C Write  - Retry 0x%x",
-                              retry_cnt);
-              // Add a 10 ms delay to ensure NFCC is not still in stand by mode.
-              usleep(10 * 1000);
-              goto retry;
-            }
-          }
-          NXPLOG_TML_E("PN54X - Error in I2C Write.....\n");
-          wStatus = PHNFCSTVAL(CID_NFC_TML, NFCSTATUS_FAILED);
-        } else {
-          phNxpNciHal_print_packet("SEND",
-                                   gpphTmlNfc_Context->tWriteInfo.pBuffer,
-                                   gpphTmlNfc_Context->tWriteInfo.wLength);
-        }
-        retry_cnt = 0;
-        if (NFCSTATUS_SUCCESS == wStatus) {
-          NXPLOG_TML_D("PN54X - I2C Write successful.....\n");
-          dwNoBytesWrRd = PH_TMLNFC_VALUE_ONE;
-        }
-        /* Fill the Transaction info structure to be passed to Callback Function
-         */
-        tTransactionInfo.wStatus = wStatus;
-        tTransactionInfo.pBuff = gpphTmlNfc_Context->tWriteInfo.pBuffer;
-        /* Actual number of bytes written is filled in the structure */
-        tTransactionInfo.wLength = (uint16_t)dwNoBytesWrRd;
-
-        /* Prepare the message to be posted on the User thread */
-        tDeferredInfo.pCallback = &phTmlNfc_WriteDeferredCb;
-        tDeferredInfo.pParameter = &tTransactionInfo;
-        /* Write operation completed successfully. Post a Message onto Callback
-         * Thread*/
-        tMsg.eMsgType = PH_LIBNFC_DEFERREDCALL_MSG;
-        tMsg.pMsgData = &tDeferredInfo;
-        tMsg.Size = sizeof(tDeferredInfo);
-
-        /* Check whether Retransmission needs to be started,
-         * If yes, Post message only if
-         * case 1. Message is not posted &&
-         * case 11. Write status is success ||
-         * case 12. Last retry of write is also failure
-         */
-        if ((phTmlNfc_e_EnableRetrans == gpphTmlNfc_Context->eConfig) &&
-            (0x00 != (gpphTmlNfc_Context->tWriteInfo.pBuffer[0] & 0xE0))) {
-          if (gpphTmlNfc_Context->bWriteCbInvoked == false) {
-            if ((NFCSTATUS_SUCCESS == wStatus) || (bCurrentRetryCount == 0)) {
-              NXPLOG_TML_D("PN54X - Posting Write message.....\n");
-              phTmlNfc_DeferredCall(gpphTmlNfc_Context->dwCallbackThreadId,
-                                    &tMsg);
-              gpphTmlNfc_Context->bWriteCbInvoked = true;
-            }
-          }
-        } else {
-          NXPLOG_TML_D("PN54X - Posting Fresh Write message.....\n");
-          phTmlNfc_DeferredCall(gpphTmlNfc_Context->dwCallbackThreadId, &tMsg);
-        }
-      } else {
-        NXPLOG_TML_D("PN54X - gpphTmlNfc_Context->pDevHandle is NULL");
-      }
-
-      /* If Data packet is sent, then NO retransmission */
-      if ((phTmlNfc_e_EnableRetrans == gpphTmlNfc_Context->eConfig) &&
-          (0x00 != (gpphTmlNfc_Context->tWriteInfo.pBuffer[0] & 0xE0))) {
-        NXPLOG_TML_D("PN54X - Starting timer for Retransmission case");
-        wStatus = phTmlNfc_InitiateTimer();
-        if (NFCSTATUS_SUCCESS != wStatus) {
-          /* Reset Variables used for Retransmission */
-          NXPLOG_TML_D("PN54X - Retransmission timer initiate failed");
-          gpphTmlNfc_Context->tWriteInfo.bEnable = 0;
-          bCurrentRetryCount = 0;
-        }
-      }
-    } else {
-      NXPLOG_TML_D("PN54X - Write request NOT enabled");
-      usleep(10000);
-    }
-
-  } /* End of While loop */
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phTmlNfc_CleanUp
-**
-** Description      Clears all handles opened during TML initialization
-**
-** Parameters       None
-**
-** Returns          None
-**
-*******************************************************************************/
-static void phTmlNfc_CleanUp(void) {
-  NFCSTATUS wRetval = NFCSTATUS_SUCCESS;
-
-  if (NULL == gpphTmlNfc_Context) {
-    return;
-  }
-  if (NULL != gpphTmlNfc_Context->pDevHandle) {
-    (void)phTmlNfc_i2c_reset(gpphTmlNfc_Context->pDevHandle, 0);
-    gpphTmlNfc_Context->bThreadDone = 0;
-  }
-  sem_destroy(&gpphTmlNfc_Context->rxSemaphore);
-  sem_destroy(&gpphTmlNfc_Context->txSemaphore);
-  sem_destroy(&gpphTmlNfc_Context->postMsgSemaphore);
-  phTmlNfc_i2c_close(gpphTmlNfc_Context->pDevHandle);
-  gpphTmlNfc_Context->pDevHandle = NULL;
-  /* Clear memory allocated for storing Context variables */
-  free((void*)gpphTmlNfc_Context);
-  /* Set the pointer to NULL to indicate De-Initialization */
-  gpphTmlNfc_Context = NULL;
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phTmlNfc_Shutdown
-**
-** Description      Uninitializes TML layer and hardware interface
-**
-** Parameters       None
-**
-** Returns          NFC status:
-**                  NFCSTATUS_SUCCESS - TML configuration released successfully
-**                  NFCSTATUS_INVALID_PARAMETER - at least one parameter is
-**                                                invalid
-**                  NFCSTATUS_FAILED - un-initialization failed (example: unable
-**                                     to close interface)
-**
-*******************************************************************************/
-NFCSTATUS phTmlNfc_Shutdown(void) {
-  NFCSTATUS wShutdownStatus = NFCSTATUS_SUCCESS;
-
-  /* Check whether TML is Initialized */
-  if (NULL != gpphTmlNfc_Context) {
-    /* Reset thread variable to terminate the thread */
-    gpphTmlNfc_Context->bThreadDone = 0;
-    usleep(1000);
-    /* Clear All the resources allocated during initialization */
-    sem_post(&gpphTmlNfc_Context->rxSemaphore);
-    usleep(1000);
-    sem_post(&gpphTmlNfc_Context->txSemaphore);
-    usleep(1000);
-    sem_post(&gpphTmlNfc_Context->postMsgSemaphore);
-    usleep(1000);
-    sem_post(&gpphTmlNfc_Context->postMsgSemaphore);
-    usleep(1000);
-    if (0 != pthread_join(gpphTmlNfc_Context->readerThread, (void**)NULL)) {
-      NXPLOG_TML_E("Fail to kill reader thread!");
-    }
-    if (0 != pthread_join(gpphTmlNfc_Context->writerThread, (void**)NULL)) {
-      NXPLOG_TML_E("Fail to kill writer thread!");
-    }
-    NXPLOG_TML_D("bThreadDone == 0");
-
-    phTmlNfc_CleanUp();
-  } else {
-    wShutdownStatus = PHNFCSTVAL(CID_NFC_TML, NFCSTATUS_NOT_INITIALISED);
-  }
-
-  return wShutdownStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phTmlNfc_Write
-**
-** Description      Asynchronously writes given data block to hardware
-**                  interface/driver. Enables writer thread if there are no
-**                  write requests pending. Returns successfully once writer
-**                  thread completes write operation. Notifies upper layer using
-**                  callback mechanism.
-**
-**                  NOTE:
-**                  * it is important to post a message with id
-**                    PH_TMLNFC_WRITE_MESSAGE to IntegrationThread after data
-**                    has been written to PN54X
-**                  * if CRC needs to be computed, then input buffer should be
-**                    capable to store two more bytes apart from length of
-**                    packet
-**
-** Parameters       pBuffer - data to be sent
-**                  wLength - length of data buffer
-**                  pTmlWriteComplete - pointer to the function to be invoked
-**                                      upon completion
-**                  pContext - context provided by upper layer
-**
-** Returns          NFC status:
-**                  NFCSTATUS_PENDING - command is yet to be processed
-**                  NFCSTATUS_INVALID_PARAMETER - at least one parameter is
-**                                                invalid
-**                  NFCSTATUS_BUSY - write request is already in progress
-**
-*******************************************************************************/
-NFCSTATUS phTmlNfc_Write(uint8_t* pBuffer, uint16_t wLength,
-                         pphTmlNfc_TransactCompletionCb_t pTmlWriteComplete,
-                         void* pContext) {
-  NFCSTATUS wWriteStatus;
-
-  /* Check whether TML is Initialized */
-
-  if (NULL != gpphTmlNfc_Context) {
-    if ((NULL != gpphTmlNfc_Context->pDevHandle) && (NULL != pBuffer) &&
-        (PH_TMLNFC_RESET_VALUE != wLength) && (NULL != pTmlWriteComplete)) {
-      if (!gpphTmlNfc_Context->tWriteInfo.bThreadBusy) {
-        /* Setting the flag marks beginning of a Write Operation */
-        gpphTmlNfc_Context->tWriteInfo.bThreadBusy = true;
-        /* Copy the buffer, length and Callback function,
-           This shall be utilized while invoking the Callback function in thread
-           */
-        gpphTmlNfc_Context->tWriteInfo.pBuffer = pBuffer;
-        gpphTmlNfc_Context->tWriteInfo.wLength = wLength;
-        gpphTmlNfc_Context->tWriteInfo.pThread_Callback = pTmlWriteComplete;
-        gpphTmlNfc_Context->tWriteInfo.pContext = pContext;
-
-        wWriteStatus = NFCSTATUS_PENDING;
-        // FIXME: If retry is going on. Stop the retry thread/timer
-        if (phTmlNfc_e_EnableRetrans == gpphTmlNfc_Context->eConfig) {
-          /* Set retry count to default value */
-          // FIXME: If the timer expired there, and meanwhile we have created
-          // a new request. The expired timer will think that retry is still
-          // ongoing.
-          bCurrentRetryCount = gpphTmlNfc_Context->bRetryCount;
-          gpphTmlNfc_Context->bWriteCbInvoked = false;
-        }
-        /* Set event to invoke Writer Thread */
-        gpphTmlNfc_Context->tWriteInfo.bEnable = 1;
-        sem_post(&gpphTmlNfc_Context->txSemaphore);
-      } else {
-        wWriteStatus = PHNFCSTVAL(CID_NFC_TML, NFCSTATUS_BUSY);
-      }
-    } else {
-      wWriteStatus = PHNFCSTVAL(CID_NFC_TML, NFCSTATUS_INVALID_PARAMETER);
-    }
-  } else {
-    wWriteStatus = PHNFCSTVAL(CID_NFC_TML, NFCSTATUS_NOT_INITIALISED);
-  }
-
-  return wWriteStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phTmlNfc_Read
-**
-** Description      Asynchronously reads data from the driver
-**                  Number of bytes to be read and buffer are passed by upper
-**                  layer.
-**                  Enables reader thread if there are no read requests pending
-**                  Returns successfully once read operation is completed
-**                  Notifies upper layer using callback mechanism
-**
-** Parameters       pBuffer - location to send read data to the upper layer via
-**                            callback
-**                  wLength - length of read data buffer passed by upper layer
-**                  pTmlReadComplete - pointer to the function to be invoked
-**                                     upon completion of read operation
-**                  pContext - context provided by upper layer
-**
-** Returns          NFC status:
-**                  NFCSTATUS_PENDING - command is yet to be processed
-**                  NFCSTATUS_INVALID_PARAMETER - at least one parameter is
-**                                                invalid
-**                  NFCSTATUS_BUSY - read request is already in progress
-**
-*******************************************************************************/
-NFCSTATUS phTmlNfc_Read(uint8_t* pBuffer, uint16_t wLength,
-                        pphTmlNfc_TransactCompletionCb_t pTmlReadComplete,
-                        void* pContext) {
-  NFCSTATUS wReadStatus;
-
-  /* Check whether TML is Initialized */
-  if (NULL != gpphTmlNfc_Context) {
-    if ((gpphTmlNfc_Context->pDevHandle != NULL) && (NULL != pBuffer) &&
-        (PH_TMLNFC_RESET_VALUE != wLength) && (NULL != pTmlReadComplete)) {
-      if (!gpphTmlNfc_Context->tReadInfo.bThreadBusy) {
-        /* Setting the flag marks beginning of a Read Operation */
-        gpphTmlNfc_Context->tReadInfo.bThreadBusy = true;
-        /* Copy the buffer, length and Callback function,
-           This shall be utilized while invoking the Callback function in thread
-           */
-        gpphTmlNfc_Context->tReadInfo.pBuffer = pBuffer;
-        gpphTmlNfc_Context->tReadInfo.wLength = wLength;
-        gpphTmlNfc_Context->tReadInfo.pThread_Callback = pTmlReadComplete;
-        gpphTmlNfc_Context->tReadInfo.pContext = pContext;
-        wReadStatus = NFCSTATUS_PENDING;
-
-        /* Set event to invoke Reader Thread */
-        gpphTmlNfc_Context->tReadInfo.bEnable = 1;
-        sem_post(&gpphTmlNfc_Context->rxSemaphore);
-      } else {
-        wReadStatus = PHNFCSTVAL(CID_NFC_TML, NFCSTATUS_BUSY);
-      }
-    } else {
-      wReadStatus = PHNFCSTVAL(CID_NFC_TML, NFCSTATUS_INVALID_PARAMETER);
-    }
-  } else {
-    wReadStatus = PHNFCSTVAL(CID_NFC_TML, NFCSTATUS_NOT_INITIALISED);
-  }
-
-  return wReadStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phTmlNfc_ReadAbort
-**
-** Description      Aborts pending read request (if any)
-**
-** Parameters       None
-**
-** Returns          NFC status:
-**                  NFCSTATUS_SUCCESS - ongoing read operation aborted
-**                  NFCSTATUS_INVALID_PARAMETER - at least one parameter is
-**                                                invalid
-**                  NFCSTATUS_NOT_INITIALIZED - TML layer is not initialized
-**                  NFCSTATUS_BOARD_COMMUNICATION_ERROR - unable to cancel read
-**                                                        operation
-**
-*******************************************************************************/
-NFCSTATUS phTmlNfc_ReadAbort(void) {
-  NFCSTATUS wStatus = NFCSTATUS_INVALID_PARAMETER;
-  gpphTmlNfc_Context->tReadInfo.bEnable = 0;
-
-  /*Reset the flag to accept another Read Request */
-  gpphTmlNfc_Context->tReadInfo.bThreadBusy = false;
-  wStatus = NFCSTATUS_SUCCESS;
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phTmlNfc_WriteAbort
-**
-** Description      Aborts pending write request (if any)
-**
-** Parameters       None
-**
-** Returns          NFC status:
-**                  NFCSTATUS_SUCCESS - ongoing write operation aborted
-**                  NFCSTATUS_INVALID_PARAMETER - at least one parameter is
-**                                                invalid
-**                  NFCSTATUS_NOT_INITIALIZED - TML layer is not initialized
-**                  NFCSTATUS_BOARD_COMMUNICATION_ERROR - unable to cancel write
-**                                                        operation
-**
-*******************************************************************************/
-NFCSTATUS phTmlNfc_WriteAbort(void) {
-  NFCSTATUS wStatus = NFCSTATUS_INVALID_PARAMETER;
-
-  gpphTmlNfc_Context->tWriteInfo.bEnable = 0;
-  /* Stop if any retransmission is in progress */
-  bCurrentRetryCount = 0;
-
-  /* Reset the flag to accept another Write Request */
-  gpphTmlNfc_Context->tWriteInfo.bThreadBusy = false;
-  wStatus = NFCSTATUS_SUCCESS;
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phTmlNfc_IoCtl
-**
-** Description      Resets device when insisted by upper layer
-**                  Number of bytes to be read and buffer are passed by upper
-**                  layer
-**                  Enables reader thread if there are no read requests pending
-**                  Returns successfully once read operation is completed
-**                  Notifies upper layer using callback mechanism
-**
-** Parameters       eControlCode       - control code for a specific operation
-**
-** Returns          NFC status:
-**                  NFCSTATUS_SUCCESS  - ioctl command completed successfully
-**                  NFCSTATUS_FAILED   - ioctl command request failed
-**
-*******************************************************************************/
-NFCSTATUS phTmlNfc_IoCtl(phTmlNfc_ControlCode_t eControlCode) {
-  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-
-  if (NULL == gpphTmlNfc_Context) {
-    wStatus = NFCSTATUS_FAILED;
-  } else {
-    switch (eControlCode) {
-      case phTmlNfc_e_ResetDevice: {
-        /*Reset PN54X*/
-        phTmlNfc_i2c_reset(gpphTmlNfc_Context->pDevHandle, 1);
-        usleep(100 * 1000);
-        phTmlNfc_i2c_reset(gpphTmlNfc_Context->pDevHandle, 0);
-        usleep(100 * 1000);
-        phTmlNfc_i2c_reset(gpphTmlNfc_Context->pDevHandle, 1);
-        break;
-      }
-      case phTmlNfc_e_EnableNormalMode: {
-        /*Reset PN54X*/
-        phTmlNfc_i2c_reset(gpphTmlNfc_Context->pDevHandle, 0);
-        usleep(10 * 1000);
-        phTmlNfc_i2c_reset(gpphTmlNfc_Context->pDevHandle, 1);
-        usleep(100 * 1000);
-        break;
-      }
-      case phTmlNfc_e_EnableDownloadMode: {
-        phTmlNfc_ConfigNciPktReTx(phTmlNfc_e_DisableRetrans, 0);
-        (void)phTmlNfc_i2c_reset(gpphTmlNfc_Context->pDevHandle, 2);
-        usleep(100 * 1000);
-        break;
-      }
-      default: {
-        wStatus = NFCSTATUS_INVALID_PARAMETER;
-        break;
-      }
-    }
-  }
-
-  return wStatus;
-}
-
-/*******************************************************************************
-**
-** Function         phTmlNfc_DeferredCall
-**
-** Description      Posts message on upper layer thread
-**                  upon successful read or write operation
-**
-** Parameters       dwThreadId  - id of the thread posting message
-**                  ptWorkerMsg - message to be posted
-**
-** Returns          None
-**
-*******************************************************************************/
-void phTmlNfc_DeferredCall(uintptr_t dwThreadId,
-                           phLibNfc_Message_t* ptWorkerMsg) {
-  intptr_t bPostStatus;
-  UNUSED(dwThreadId);
-  /* Post message on the user thread to invoke the callback function */
-  sem_wait(&gpphTmlNfc_Context->postMsgSemaphore);
-  bPostStatus =
-      phDal4Nfc_msgsnd(gpphTmlNfc_Context->dwCallbackThreadId, ptWorkerMsg, 0);
-  sem_post(&gpphTmlNfc_Context->postMsgSemaphore);
-}
-
-/*******************************************************************************
-**
-** Function         phTmlNfc_ReadDeferredCb
-**
-** Description      Read thread call back function
-**
-** Parameters       pParams - context provided by upper layer
-**
-** Returns          None
-**
-*******************************************************************************/
-static void phTmlNfc_ReadDeferredCb(void* pParams) {
-  /* Transaction info buffer to be passed to Callback Function */
-  phTmlNfc_TransactInfo_t* pTransactionInfo = (phTmlNfc_TransactInfo_t*)pParams;
-
-  /* Reset the flag to accept another Read Request */
-  gpphTmlNfc_Context->tReadInfo.bThreadBusy = false;
-  gpphTmlNfc_Context->tReadInfo.pThread_Callback(
-      gpphTmlNfc_Context->tReadInfo.pContext, pTransactionInfo);
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phTmlNfc_WriteDeferredCb
-**
-** Description      Write thread call back function
-**
-** Parameters       pParams - context provided by upper layer
-**
-** Returns          None
-**
-*******************************************************************************/
-static void phTmlNfc_WriteDeferredCb(void* pParams) {
-  /* Transaction info buffer to be passed to Callback Function */
-  phTmlNfc_TransactInfo_t* pTransactionInfo = (phTmlNfc_TransactInfo_t*)pParams;
-
-  /* Reset the flag to accept another Write Request */
-  gpphTmlNfc_Context->tWriteInfo.bThreadBusy = false;
-  gpphTmlNfc_Context->tWriteInfo.pThread_Callback(
-      gpphTmlNfc_Context->tWriteInfo.pContext, pTransactionInfo);
-
-  return;
-}
-
-void phTmlNfc_set_fragmentation_enabled(phTmlNfc_i2cfragmentation_t result) {
-  fragmentation_enabled = result;
-}
-
-phTmlNfc_i2cfragmentation_t phTmlNfc_get_fragmentation_enabled() {
-  return fragmentation_enabled;
-}
diff --git a/halimpl/pn54x/tml/phTmlNfc.h b/halimpl/pn54x/tml/phTmlNfc.h
deleted file mode 100644
index 3955354..0000000
--- a/halimpl/pn54x/tml/phTmlNfc.h
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Copyright (C) 2010-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * Transport Mapping Layer header files containing APIs related to initializing,
- * reading
- * and writing data into files provided by the driver interface.
- *
- * API listed here encompasses Transport Mapping Layer interfaces required to be
- * mapped
- * to different Interfaces and Platforms.
- *
- */
-
-#ifndef PHTMLNFC_H
-#define PHTMLNFC_H
-
-#include <phNfcCommon.h>
-
-/*
- * Message posted by Reader thread upon
- * completion of requested operation
- */
-#define PH_TMLNFC_READ_MESSAGE (0xAA)
-
-/*
- * Message posted by Writer thread upon
- * completion of requested operation
- */
-#define PH_TMLNFC_WRITE_MESSAGE (0x55)
-
-/*
- * Value indicates to reset device
- */
-#define PH_TMLNFC_RESETDEVICE (0x00008001)
-
-/*
-***************************Globals,Structure and Enumeration ******************
-*/
-
-/*
- * Transaction (Tx/Rx) completion information structure of TML
- *
- * This structure holds the completion callback information of the
- * transaction passed from the TML layer to the Upper layer
- * along with the completion callback.
- *
- * The value of field wStatus can be interpreted as:
- *
- *     - NFCSTATUS_SUCCESS                    Transaction performed
- * successfully.
- *     - NFCSTATUS_FAILED                     Failed to wait on Read/Write
- * operation.
- *     - NFCSTATUS_INSUFFICIENT_STORAGE       Not enough memory to store data in
- * case of read.
- *     - NFCSTATUS_BOARD_COMMUNICATION_ERROR  Failure to Read/Write from the
- * file or timeout.
- */
-
-typedef struct phTmlNfc_TransactInfo {
-  NFCSTATUS wStatus;       /* Status of the Transaction Completion*/
-  uint8_t* pBuff;          /* Response Data of the Transaction*/
-  uint16_t wLength;        /* Data size of the Transaction*/
-} phTmlNfc_TransactInfo_t; /* Instance of Transaction structure */
-
-/*
- * TML transreceive completion callback to Upper Layer
- *
- * pContext - Context provided by upper layer
- * pInfo    - Transaction info. See phTmlNfc_TransactInfo
- */
-typedef void (*pphTmlNfc_TransactCompletionCb_t)(
-    void* pContext, phTmlNfc_TransactInfo_t* pInfo);
-
-/*
- * TML Deferred callback interface structure invoked by upper layer
- *
- * This could be used for read/write operations
- *
- * dwMsgPostedThread Message source identifier
- * pParams Parameters for the deferred call processing
- */
-typedef void (*pphTmlNfc_DeferFuncPointer_t)(uint32_t dwMsgPostedThread,
-                                             void* pParams);
-
-/*
- * Enum definition contains  supported ioctl control codes.
- *
- * phTmlNfc_IoCtl
- */
-typedef enum {
-  phTmlNfc_e_Invalid = 0,
-  phTmlNfc_e_ResetDevice = PH_TMLNFC_RESETDEVICE, /* Reset the device */
-  phTmlNfc_e_EnableDownloadMode, /* Do the hardware setting to enter into
-                                    download mode */
-  phTmlNfc_e_EnableNormalMode /* Hardware setting for normal mode of operation
-                                 */
-} phTmlNfc_ControlCode_t;     /* Control code for IOCTL call */
-
-/*
- * Enable / Disable Re-Transmission of Packets
- *
- * phTmlNfc_ConfigNciPktReTx
- */
-typedef enum {
-  phTmlNfc_e_EnableRetrans = 0x00, /*Enable retransmission of Nci packet */
-  phTmlNfc_e_DisableRetrans = 0x01 /*Disable retransmission of Nci packet */
-} phTmlNfc_ConfigRetrans_t;        /* Configuration for Retransmission */
-
-/*
- * Structure containing details related to read and write operations
- *
- */
-typedef struct phTmlNfc_ReadWriteInfo {
-  volatile uint8_t bEnable; /*This flag shall decide whether to perform
-                               Write/Read operation */
-  uint8_t
-      bThreadBusy; /*Flag to indicate thread is busy on respective operation */
-  /* Transaction completion Callback function */
-  pphTmlNfc_TransactCompletionCb_t pThread_Callback;
-  void* pContext;        /*Context passed while invocation of operation */
-  uint8_t* pBuffer;      /*Buffer passed while invocation of operation */
-  uint16_t wLength;      /*Length of data read/written */
-  NFCSTATUS wWorkStatus; /*Status of the transaction performed */
-} phTmlNfc_ReadWriteInfo_t;
-
-/*
- *Base Context Structure containing members required for entire session
- */
-typedef struct phTmlNfc_Context {
-  pthread_t readerThread; /*Handle to the thread which handles write and read
-                             operations */
-  pthread_t writerThread;
-  volatile uint8_t
-      bThreadDone; /*Flag to decide whether to run or abort the thread */
-  phTmlNfc_ConfigRetrans_t
-      eConfig;             /*Retransmission of Nci Packet during timeout */
-  uint8_t bRetryCount;     /*Number of times retransmission shall happen */
-  uint8_t bWriteCbInvoked; /* Indicates whether write callback is invoked during
-                              retransmission */
-  uint32_t dwTimerId;      /* Timer used to retransmit nci packet */
-  phTmlNfc_ReadWriteInfo_t tReadInfo;  /*Pointer to Reader Thread Structure */
-  phTmlNfc_ReadWriteInfo_t tWriteInfo; /*Pointer to Writer Thread Structure */
-  void* pDevHandle;                    /* Pointer to Device Handle */
-  uintptr_t dwCallbackThreadId; /* Thread ID to which message to be posted */
-  uint8_t bEnableCrc;           /*Flag to validate/not CRC for input buffer */
-  sem_t rxSemaphore;
-  sem_t txSemaphore;      /* Lock/Aquire txRx Semaphore */
-  sem_t postMsgSemaphore; /* Semaphore to post message atomically by Reader &
-                             writer thread */
-} phTmlNfc_Context_t;
-
-/*
- * TML Configuration exposed to upper layer.
- */
-typedef struct phTmlNfc_Config {
-  /* Port name connected to PN54X
-   *
-   * Platform specific canonical device name to which PN54X is connected.
-   *
-   * e.g. On Linux based systems this would be /dev/PN54X
-   */
-  int8_t* pDevName;
-  /* Callback Thread ID
-   *
-   * This is the thread ID on which the Reader & Writer thread posts message. */
-  uintptr_t dwGetMsgThreadId;
-  /* Communication speed between DH and PN54X
-   *
-   * This is the baudrate of the bus for communication between DH and PN54X */
-  uint32_t dwBaudRate;
-} phTmlNfc_Config_t, *pphTmlNfc_Config_t; /* pointer to phTmlNfc_Config_t */
-
-/*
- * TML Deferred Callback structure used to invoke Upper layer Callback function.
- */
-typedef struct {
-  /* Deferred callback function to be invoked */
-  pphTmlNfc_DeferFuncPointer_t pDef_call;
-  /* Source identifier
-   *
-   * Identifier of the source which posted the message
-   */
-  uint32_t dwMsgPostedThread;
-  /** Actual Message
-   *
-   * This is passed as a parameter passed to the deferred callback function
-   * pDef_call. */
-  void* pParams;
-} phTmlNfc_DeferMsg_t; /* DeferMsg structure passed to User Thread */
-
-typedef enum {
-  I2C_FRAGMENATATION_DISABLED, /*i2c fragmentation_disabled           */
-  I2C_FRAGMENTATION_ENABLED    /*i2c_fragmentation_enabled          */
-} phTmlNfc_i2cfragmentation_t;
-/* Function declarations */
-NFCSTATUS phTmlNfc_Init(pphTmlNfc_Config_t pConfig);
-NFCSTATUS phTmlNfc_Shutdown(void);
-NFCSTATUS phTmlNfc_Write(uint8_t* pBuffer, uint16_t wLength,
-                         pphTmlNfc_TransactCompletionCb_t pTmlWriteComplete,
-                         void* pContext);
-NFCSTATUS phTmlNfc_Read(uint8_t* pBuffer, uint16_t wLength,
-                        pphTmlNfc_TransactCompletionCb_t pTmlReadComplete,
-                        void* pContext);
-NFCSTATUS phTmlNfc_WriteAbort(void);
-NFCSTATUS phTmlNfc_ReadAbort(void);
-NFCSTATUS phTmlNfc_IoCtl(phTmlNfc_ControlCode_t eControlCode);
-void phTmlNfc_DeferredCall(uintptr_t dwThreadId,
-                           phLibNfc_Message_t* ptWorkerMsg);
-void phTmlNfc_ConfigNciPktReTx(phTmlNfc_ConfigRetrans_t eConfig,
-                               uint8_t bRetryCount);
-void phTmlNfc_set_fragmentation_enabled(phTmlNfc_i2cfragmentation_t enable);
-phTmlNfc_i2cfragmentation_t phTmlNfc_get_fragmentation_enabled();
-#endif /*  PHTMLNFC_H  */
diff --git a/halimpl/pn54x/tml/phTmlNfc_i2c.c b/halimpl/pn54x/tml/phTmlNfc_i2c.c
deleted file mode 100644
index 781f19b..0000000
--- a/halimpl/pn54x/tml/phTmlNfc_i2c.c
+++ /dev/null
@@ -1,315 +0,0 @@
-/*
- * Copyright (C) 2010-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * DAL I2C port implementation for linux
- *
- * Project: Trusted NFC Linux
- *
- */
-#include <errno.h>
-#include <fcntl.h>
-#include <hardware/nfc.h>
-#include <stdlib.h>
-#include <sys/ioctl.h>
-#include <sys/select.h>
-#include <termios.h>
-#include <unistd.h>
-
-#include <phNfcStatus.h>
-#include <phNxpLog.h>
-#include <phTmlNfc_i2c.h>
-#include <string.h>
-#include "phNxpNciHal_utils.h"
-
-#define CRC_LEN 2
-#define NORMAL_MODE_HEADER_LEN 3
-#define FW_DNLD_HEADER_LEN 2
-#define FW_DNLD_LEN_OFFSET 1
-#define NORMAL_MODE_LEN_OFFSET 2
-#define FRAGMENTSIZE_MAX PHNFC_I2C_FRAGMENT_SIZE
-static bool_t bFwDnldFlag = false;
-extern phTmlNfc_i2cfragmentation_t fragmentation_enabled;
-
-/*******************************************************************************
-**
-** Function         phTmlNfc_i2c_close
-**
-** Description      Closes PN54X device
-**
-** Parameters       pDevHandle - device handle
-**
-** Returns          None
-**
-*******************************************************************************/
-void phTmlNfc_i2c_close(void* pDevHandle) {
-  if (NULL != pDevHandle) {
-    close((intptr_t)pDevHandle);
-  }
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phTmlNfc_i2c_open_and_configure
-**
-** Description      Open and configure PN54X device
-**
-** Parameters       pConfig     - hardware information
-**                  pLinkHandle - device handle
-**
-** Returns          NFC status:
-**                  NFCSTATUS_SUCCESS - open_and_configure operation success
-**                  NFCSTATUS_INVALID_DEVICE - device open operation failure
-**
-*******************************************************************************/
-NFCSTATUS phTmlNfc_i2c_open_and_configure(pphTmlNfc_Config_t pConfig,
-                                          void** pLinkHandle) {
-  int nHandle;
-
-  NXPLOG_TML_D("Opening port=%s\n", pConfig->pDevName);
-  /* open port */
-  nHandle = open((const char*)pConfig->pDevName, O_RDWR);
-  if (nHandle < 0) {
-    NXPLOG_TML_E("_i2c_open() Failed: retval %x", nHandle);
-    *pLinkHandle = NULL;
-    return NFCSTATUS_INVALID_DEVICE;
-  }
-
-  *pLinkHandle = (void*)((intptr_t)nHandle);
-
-  /*Reset PN54X*/
-  phTmlNfc_i2c_reset((void*)((intptr_t)nHandle), 0);
-  usleep(10 * 1000);
-  phTmlNfc_i2c_reset((void*)((intptr_t)nHandle), 1);
-
-  return NFCSTATUS_SUCCESS;
-}
-
-/*******************************************************************************
-**
-** Function         phTmlNfc_i2c_read
-**
-** Description      Reads requested number of bytes from PN54X device into given
-**                  buffer
-**
-** Parameters       pDevHandle       - valid device handle
-**                  pBuffer          - buffer for read data
-**                  nNbBytesToRead   - number of bytes requested to be read
-**
-** Returns          numRead   - number of successfully read bytes
-**                  -1        - read operation failure
-**
-*******************************************************************************/
-int phTmlNfc_i2c_read(void* pDevHandle, uint8_t* pBuffer, int nNbBytesToRead) {
-  int ret_Read;
-  int ret_Select;
-  int numRead = 0;
-  struct timeval tv;
-  fd_set rfds;
-  uint16_t totalBtyesToRead = 0;
-
-  int i;
-  UNUSED(nNbBytesToRead);
-  if (NULL == pDevHandle) {
-    return -1;
-  }
-
-  if (bFwDnldFlag == false) {
-    totalBtyesToRead = NORMAL_MODE_HEADER_LEN;
-  } else {
-    totalBtyesToRead = FW_DNLD_HEADER_LEN;
-  }
-
-  /* Read with 2 second timeout, so that the read thread can be aborted
-     when the PN54X does not respond and we need to switch to FW download
-     mode. This should be done via a control socket instead. */
-  FD_ZERO(&rfds);
-  FD_SET((intptr_t)pDevHandle, &rfds);
-  tv.tv_sec = 2;
-  tv.tv_usec = 1;
-
-  ret_Select =
-      select((int)((intptr_t)pDevHandle + (int)1), &rfds, NULL, NULL, &tv);
-  if (ret_Select < 0) {
-    NXPLOG_TML_E("i2c select() errno : %x", errno);
-    return -1;
-  } else if (ret_Select == 0) {
-    NXPLOG_TML_E("i2c select() Timeout");
-    return -1;
-  } else {
-    ret_Read = read((intptr_t)pDevHandle, pBuffer, totalBtyesToRead - numRead);
-    if (ret_Read > 0) {
-      numRead += ret_Read;
-    } else if (ret_Read == 0) {
-      NXPLOG_TML_E("_i2c_read() [hdr]EOF");
-      return -1;
-    } else {
-      NXPLOG_TML_E("_i2c_read() [hdr] errno : %x", errno);
-      return -1;
-    }
-
-    if (bFwDnldFlag == false) {
-      totalBtyesToRead = NORMAL_MODE_HEADER_LEN;
-    } else {
-      totalBtyesToRead = FW_DNLD_HEADER_LEN;
-    }
-
-    if (numRead < totalBtyesToRead) {
-      ret_Read =
-          read((intptr_t)pDevHandle, pBuffer, totalBtyesToRead - numRead);
-      if (ret_Read != totalBtyesToRead - numRead) {
-        NXPLOG_TML_E("_i2c_read() [hdr] errno : %x", errno);
-        return -1;
-      } else {
-        numRead += ret_Read;
-      }
-    }
-    if (bFwDnldFlag == true) {
-      totalBtyesToRead =
-          pBuffer[FW_DNLD_LEN_OFFSET] + FW_DNLD_HEADER_LEN + CRC_LEN;
-    } else {
-      totalBtyesToRead =
-          pBuffer[NORMAL_MODE_LEN_OFFSET] + NORMAL_MODE_HEADER_LEN;
-    }
-    if ((totalBtyesToRead - numRead) != 0) {
-      ret_Read = read((intptr_t)pDevHandle, (pBuffer + numRead),
-                      totalBtyesToRead - numRead);
-      if (ret_Read > 0) {
-        numRead += ret_Read;
-      } else if (ret_Read == 0) {
-        NXPLOG_TML_E("_i2c_read() [pyld] EOF");
-        return -1;
-      } else {
-        if (bFwDnldFlag == false) {
-          NXPLOG_TML_E("_i2c_read() [hdr] received");
-          phNxpNciHal_print_packet("RECV", pBuffer, NORMAL_MODE_HEADER_LEN);
-        }
-        NXPLOG_TML_E("_i2c_read() [pyld] errno : %x", errno);
-        return -1;
-      }
-    } else {
-      NXPLOG_TML_E("_>>>>> Empty packet recieved !!");
-    }
-  }
-  return numRead;
-}
-
-/*******************************************************************************
-**
-** Function         phTmlNfc_i2c_write
-**
-** Description      Writes requested number of bytes from given buffer into
-**                  PN54X device
-**
-** Parameters       pDevHandle       - valid device handle
-**                  pBuffer          - buffer for read data
-**                  nNbBytesToWrite  - number of bytes requested to be written
-**
-** Returns          numWrote   - number of successfully written bytes
-**                  -1         - write operation failure
-**
-*******************************************************************************/
-int phTmlNfc_i2c_write(void* pDevHandle, uint8_t* pBuffer,
-                       int nNbBytesToWrite) {
-  int ret;
-  int numWrote = 0;
-  int i;
-  int numBytes = nNbBytesToWrite;
-  if (NULL == pDevHandle) {
-    return -1;
-  }
-  if (fragmentation_enabled == I2C_FRAGMENATATION_DISABLED &&
-      nNbBytesToWrite > FRAGMENTSIZE_MAX) {
-    NXPLOG_TML_E(
-        "i2c_write() data larger than maximum I2C  size,enable I2C "
-        "fragmentation");
-    return -1;
-  }
-  while (numWrote < nNbBytesToWrite) {
-    if (fragmentation_enabled == I2C_FRAGMENTATION_ENABLED &&
-        nNbBytesToWrite > FRAGMENTSIZE_MAX) {
-      if (nNbBytesToWrite - numWrote > FRAGMENTSIZE_MAX) {
-        numBytes = numWrote + FRAGMENTSIZE_MAX;
-      } else {
-        numBytes = nNbBytesToWrite;
-      }
-    }
-    ret = write((intptr_t)pDevHandle, pBuffer + numWrote, numBytes - numWrote);
-    if (ret > 0) {
-      numWrote += ret;
-      if (fragmentation_enabled == I2C_FRAGMENTATION_ENABLED &&
-          numWrote < nNbBytesToWrite) {
-        usleep(500);
-      }
-    } else if (ret == 0) {
-      NXPLOG_TML_E("_i2c_write() EOF");
-      return -1;
-    } else {
-      NXPLOG_TML_E("_i2c_write() errno : %x", errno);
-      if (errno == EINTR || errno == EAGAIN) {
-        continue;
-      }
-      return -1;
-    }
-  }
-
-  return numWrote;
-}
-
-/*******************************************************************************
-**
-** Function         phTmlNfc_i2c_reset
-**
-** Description      Reset PN54X device, using VEN pin
-**
-** Parameters       pDevHandle     - valid device handle
-**                  level          - reset level
-**
-** Returns           0   - reset operation success
-**                  -1   - reset operation failure
-**
-*******************************************************************************/
-#define PN544_SET_PWR _IOW(0xe9, 0x01, unsigned int)
-int phTmlNfc_i2c_reset(void* pDevHandle, long level) {
-  int ret;
-  NXPLOG_TML_D("phTmlNfc_i2c_reset(), VEN level %ld", level);
-
-  if (NULL == pDevHandle) {
-    return -1;
-  }
-
-  ret = ioctl((intptr_t)pDevHandle, PN544_SET_PWR, level);
-  if (level == 2 && ret == 0) {
-    bFwDnldFlag = true;
-  } else {
-    bFwDnldFlag = false;
-  }
-  return ret;
-}
-
-/*******************************************************************************
-**
-** Function         getDownloadFlag
-**
-** Description      Returns the current mode
-**
-** Parameters       none
-**
-** Returns           Current mode download/NCI
-*******************************************************************************/
-bool_t getDownloadFlag(void) { return bFwDnldFlag; }
diff --git a/halimpl/pn54x/tml/phTmlNfc_i2c.h b/halimpl/pn54x/tml/phTmlNfc_i2c.h
deleted file mode 100644
index 0949a72..0000000
--- a/halimpl/pn54x/tml/phTmlNfc_i2c.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2010-2014 NXP Semiconductors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * TML I2C port implementation for linux
- */
-
-/* Basic type definitions */
-#include <phNfcTypes.h>
-#include <phTmlNfc.h>
-
-/* Function declarations */
-void phTmlNfc_i2c_close(void* pDevHandle);
-NFCSTATUS phTmlNfc_i2c_open_and_configure(pphTmlNfc_Config_t pConfig,
-                                          void** pLinkHandle);
-int phTmlNfc_i2c_read(void* pDevHandle, uint8_t* pBuffer, int nNbBytesToRead);
-int phTmlNfc_i2c_write(void* pDevHandle, uint8_t* pBuffer, int nNbBytesToWrite);
-int phTmlNfc_i2c_reset(void* pDevHandle, long level);
-bool_t getDownloadFlag(void);
diff --git a/halimpl/pn54x/utils/phNxpConfig.cpp b/halimpl/pn54x/utils/phNxpConfig.cpp
deleted file mode 100644
index 9e8c7cb..0000000
--- a/halimpl/pn54x/utils/phNxpConfig.cpp
+++ /dev/null
@@ -1,865 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2011-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  The original Work has been changed by NXP Semiconductors.
- *
- *  Copyright (C) 2013-2014 NXP Semiconductors
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-#include <stdio.h>
-#include <sys/stat.h>
-#include <list>
-#include <string>
-#include <vector>
-
-#include <phNxpConfig.h>
-#include <phNxpLog.h>
-#include "sparse_crc32.h"
-
-#if GENERIC_TARGET
-const char alternative_config_path[] = "/data/vendor/nfc/";
-#else
-const char alternative_config_path[] = "";
-#endif
-
-#if 1
-const char* transport_config_paths[] = {"/odm/etc/", "/vendor/etc/", "/etc/"};
-#else
-const char* transport_config_paths[] = {"res/"};
-#endif
-const int transport_config_path_size =
-    (sizeof(transport_config_paths) / sizeof(transport_config_paths[0]));
-
-#define config_name "libnfc-nxp.conf"
-#define extra_config_base "libnfc-nxp-"
-#define extra_config_ext ".conf"
-#define IsStringValue 0x80000000
-
-const char config_timestamp_path[] =
-    "/data/vendor/nfc/libnfc-nxpConfigState.bin";
-
-namespace {
-
-size_t readConfigFile(const char* fileName, uint8_t** p_data) {
-  FILE* fd = fopen(fileName, "rb");
-  if (fd == nullptr) return 0;
-
-  fseek(fd, 0L, SEEK_END);
-  const size_t file_size = ftell(fd);
-  rewind(fd);
-
-  uint8_t* buffer = new uint8_t[file_size];
-  size_t read = fread(buffer, file_size, 1, fd);
-  fclose(fd);
-
-  if (read == 1) {
-    *p_data = buffer;
-    return file_size;
-  }
-
-  return 0;
-}
-
-}  // namespace
-
-using namespace ::std;
-
-class CNfcParam : public string {
- public:
-  CNfcParam();
-  CNfcParam(const char* name, const string& value);
-  CNfcParam(const char* name, unsigned long value);
-  virtual ~CNfcParam();
-  unsigned long numValue() const { return m_numValue; }
-  const char* str_value() const { return m_str_value.c_str(); }
-  size_t str_len() const { return m_str_value.length(); }
-
- private:
-  string m_str_value;
-  unsigned long m_numValue;
-};
-
-class CNfcConfig : public vector<const CNfcParam*> {
- public:
-  virtual ~CNfcConfig();
-  static CNfcConfig& GetInstance();
-  friend void readOptionalConfig(const char* optional);
-  bool isModified();
-  void resetModified();
-
-  bool getValue(const char* name, char* pValue, size_t len) const;
-  bool getValue(const char* name, unsigned long& rValue) const;
-  bool getValue(const char* name, unsigned short& rValue) const;
-  bool getValue(const char* name, char* pValue, long len, long* readlen) const;
-  const CNfcParam* find(const char* p_name) const;
-  void clean();
-
- private:
-  CNfcConfig();
-  bool readConfig(const char* name, bool bResetContent);
-  void moveFromList();
-  void moveToList();
-  void add(const CNfcParam* pParam);
-  list<const CNfcParam*> m_list;
-  bool mValidFile;
-  uint32_t config_crc32_;
-
-  unsigned long state;
-
-  inline bool Is(unsigned long f) { return (state & f) == f; }
-  inline void Set(unsigned long f) { state |= f; }
-  inline void Reset(unsigned long f) { state &= ~f; }
-};
-
-/*******************************************************************************
-**
-** Function:    isPrintable()
-**
-** Description: determine if 'c' is printable
-**
-** Returns:     1, if printable, otherwise 0
-**
-*******************************************************************************/
-inline bool isPrintable(char c) {
-  return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') ||
-         (c >= '0' && c <= '9') || c == '/' || c == '_' || c == '-' || c == '.';
-}
-
-/*******************************************************************************
-**
-** Function:    isDigit()
-**
-** Description: determine if 'c' is numeral digit
-**
-** Returns:     true, if numerical digit
-**
-*******************************************************************************/
-inline bool isDigit(char c, int base) {
-  if ('0' <= c && c <= '9') return true;
-  if (base == 16) {
-    if (('A' <= c && c <= 'F') || ('a' <= c && c <= 'f')) return true;
-  }
-  return false;
-}
-
-/*******************************************************************************
-**
-** Function:    getDigitValue()
-**
-** Description: return numerical value of a decimal or hex char
-**
-** Returns:     numerical value if decimal or hex char, otherwise 0
-**
-*******************************************************************************/
-inline int getDigitValue(char c, int base) {
-  if ('0' <= c && c <= '9') return c - '0';
-  if (base == 16) {
-    if ('A' <= c && c <= 'F')
-      return c - 'A' + 10;
-    else if ('a' <= c && c <= 'f')
-      return c - 'a' + 10;
-  }
-  return 0;
-}
-
-/*******************************************************************************
-**
-** Function:    findConfigFilePathFromTransportConfigPaths()
-**
-** Description: find a config file path with a given config name from transport
-**              config paths
-**
-** Returns:     none
-**
-*******************************************************************************/
-void findConfigFilePathFromTransportConfigPaths(const string& configName,
-                                                string& filePath) {
-  for (int i = 0; i < transport_config_path_size - 1; i++) {
-    filePath.assign(transport_config_paths[i]);
-    filePath += configName;
-    struct stat file_stat;
-    if (stat(filePath.c_str(), &file_stat) == 0 && S_ISREG(file_stat.st_mode)) {
-      return;
-    }
-  }
-  filePath.assign(transport_config_paths[transport_config_path_size - 1]);
-  filePath += configName;
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::readConfig()
-**
-** Description: read Config settings and parse them into a linked list
-**              move the element from linked list to a array at the end
-**
-** Returns:     1, if there are any config data, 0 otherwise
-**
-*******************************************************************************/
-bool CNfcConfig::readConfig(const char* name, bool bResetContent) {
-  enum {
-    BEGIN_LINE = 1,
-    TOKEN,
-    STR_VALUE,
-    NUM_VALUE,
-    BEGIN_HEX,
-    BEGIN_QUOTE,
-    END_LINE
-  };
-
-  uint8_t* p_config = nullptr;
-  size_t config_size = readConfigFile(name, &p_config);
-  if (p_config == nullptr) {
-    ALOGE("%s Cannot open config file %s\n", __func__, name);
-    if (bResetContent) {
-      ALOGE("%s Using default value for all settings\n", __func__);
-      mValidFile = false;
-    }
-    return false;
-  }
-
-  string token;
-  string strValue;
-  unsigned long numValue = 0;
-  CNfcParam* pParam = NULL;
-  int i = 0;
-  int base = 0;
-  char c;
-  int bflag = 0;
-  state = BEGIN_LINE;
-
-  config_crc32_ = sparse_crc32(0, p_config, config_size);
-  mValidFile = true;
-  if (size() > 0) {
-    if (bResetContent)
-      clean();
-    else
-      moveToList();
-  }
-
-  for (size_t offset = 0; offset != config_size; ++offset) {
-    c = p_config[offset];
-    switch (state & 0xff) {
-      case BEGIN_LINE:
-        if (c == '#')
-          state = END_LINE;
-        else if (isPrintable(c)) {
-          i = 0;
-          token.erase();
-          strValue.erase();
-          state = TOKEN;
-          token.push_back(c);
-        }
-        break;
-      case TOKEN:
-        if (c == '=') {
-          token.push_back('\0');
-          state = BEGIN_QUOTE;
-        } else if (isPrintable(c))
-          token.push_back(c);
-        else
-          state = END_LINE;
-        break;
-      case BEGIN_QUOTE:
-        if (c == '"') {
-          state = STR_VALUE;
-          base = 0;
-        } else if (c == '0')
-          state = BEGIN_HEX;
-        else if (isDigit(c, 10)) {
-          state = NUM_VALUE;
-          base = 10;
-          numValue = getDigitValue(c, base);
-          i = 0;
-        } else if (c == '{') {
-          state = NUM_VALUE;
-          bflag = 1;
-          base = 16;
-          i = 0;
-          Set(IsStringValue);
-        } else
-          state = END_LINE;
-        break;
-      case BEGIN_HEX:
-        if (c == 'x' || c == 'X') {
-          state = NUM_VALUE;
-          base = 16;
-          numValue = 0;
-          i = 0;
-          break;
-        } else if (isDigit(c, 10)) {
-          state = NUM_VALUE;
-          base = 10;
-          numValue = getDigitValue(c, base);
-          break;
-        } else if (c != '\n' && c != '\r') {
-          state = END_LINE;
-          break;
-        }
-      // fall through to numValue to handle numValue
-
-      case NUM_VALUE:
-        if (isDigit(c, base)) {
-          numValue *= base;
-          numValue += getDigitValue(c, base);
-          ++i;
-        } else if (bflag == 1 &&
-                   (c == ' ' || c == '\r' || c == '\n' || c == '\t')) {
-          break;
-        } else if (base == 16 &&
-                   (c == ',' || c == ':' || c == '-' || c == ' ' || c == '}')) {
-          if (c == '}') {
-            bflag = 0;
-          }
-          if (i > 0) {
-            int n = (i + 1) / 2;
-            while (n-- > 0) {
-              numValue = numValue >> (n * 8);
-              unsigned char c = (numValue)&0xFF;
-              strValue.push_back(c);
-            }
-          }
-
-          Set(IsStringValue);
-          numValue = 0;
-          i = 0;
-        } else {
-          if (c == '\n' || c == '\r') {
-            if (bflag == 0) {
-              state = BEGIN_LINE;
-            }
-          } else {
-            if (bflag == 0) {
-              state = END_LINE;
-            }
-          }
-          if (Is(IsStringValue) && base == 16 && i > 0) {
-            int n = (i + 1) / 2;
-            while (n-- > 0) strValue.push_back(((numValue >> (n * 8)) & 0xFF));
-          }
-          if (strValue.length() > 0)
-            pParam = new CNfcParam(token.c_str(), strValue);
-          else
-            pParam = new CNfcParam(token.c_str(), numValue);
-          add(pParam);
-          strValue.erase();
-          numValue = 0;
-        }
-        break;
-      case STR_VALUE:
-        if (c == '"') {
-          strValue.push_back('\0');
-          state = END_LINE;
-          pParam = new CNfcParam(token.c_str(), strValue);
-          add(pParam);
-        } else if (isPrintable(c))
-          strValue.push_back(c);
-        break;
-      case END_LINE:
-        if (c == '\n' || c == '\r') state = BEGIN_LINE;
-        break;
-      default:
-        break;
-    }
-  }
-
-  delete[] p_config;
-
-  moveFromList();
-  return size() > 0;
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::CNfcConfig()
-**
-** Description: class constructor
-**
-** Returns:     none
-**
-*******************************************************************************/
-CNfcConfig::CNfcConfig() : mValidFile(true), state(0) {}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::~CNfcConfig()
-**
-** Description: class destructor
-**
-** Returns:     none
-**
-*******************************************************************************/
-CNfcConfig::~CNfcConfig() {}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::GetInstance()
-**
-** Description: get class singleton object
-**
-** Returns:     none
-**
-*******************************************************************************/
-CNfcConfig& CNfcConfig::GetInstance() {
-  static CNfcConfig theInstance;
-
-  if (theInstance.size() == 0 && theInstance.mValidFile) {
-    string strPath;
-    if (alternative_config_path[0] != '\0') {
-      strPath.assign(alternative_config_path);
-      strPath += config_name;
-      theInstance.readConfig(strPath.c_str(), true);
-      if (!theInstance.empty()) {
-        return theInstance;
-      }
-    }
-    findConfigFilePathFromTransportConfigPaths(config_name, strPath);
-    theInstance.readConfig(strPath.c_str(), true);
-  }
-
-  return theInstance;
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::getValue()
-**
-** Description: get a string value of a setting
-**
-** Returns:     true if setting exists
-**              false if setting does not exist
-**
-*******************************************************************************/
-bool CNfcConfig::getValue(const char* name, char* pValue, size_t len) const {
-  const CNfcParam* pParam = find(name);
-  if (pParam == NULL) return false;
-
-  if (pParam->str_len() > 0) {
-    memset(pValue, 0, len);
-    memcpy(pValue, pParam->str_value(), pParam->str_len());
-    return true;
-  }
-  return false;
-}
-
-bool CNfcConfig::getValue(const char* name, char* pValue, long len,
-                          long* readlen) const {
-  const CNfcParam* pParam = find(name);
-  if (pParam == NULL) return false;
-
-  if (pParam->str_len() > 0) {
-    if (pParam->str_len() <= (unsigned long)len) {
-      memset(pValue, 0, len);
-      memcpy(pValue, pParam->str_value(), pParam->str_len());
-      *readlen = pParam->str_len();
-    } else {
-      *readlen = -1;
-    }
-
-    return true;
-  }
-  return false;
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::getValue()
-**
-** Description: get a long numerical value of a setting
-**
-** Returns:     true if setting exists
-**              false if setting does not exist
-**
-*******************************************************************************/
-bool CNfcConfig::getValue(const char* name, unsigned long& rValue) const {
-  const CNfcParam* pParam = find(name);
-  if (pParam == NULL) return false;
-
-  if (pParam->str_len() == 0) {
-    rValue = static_cast<unsigned long>(pParam->numValue());
-    return true;
-  }
-  return false;
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::getValue()
-**
-** Description: get a short numerical value of a setting
-**
-** Returns:     true if setting exists
-**              false if setting does not exist
-**
-*******************************************************************************/
-bool CNfcConfig::getValue(const char* name, unsigned short& rValue) const {
-  const CNfcParam* pParam = find(name);
-  if (pParam == NULL) return false;
-
-  if (pParam->str_len() == 0) {
-    rValue = static_cast<unsigned short>(pParam->numValue());
-    return true;
-  }
-  return false;
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::find()
-**
-** Description: search if a setting exist in the setting array
-**
-** Returns:     pointer to the setting object
-**
-*******************************************************************************/
-const CNfcParam* CNfcConfig::find(const char* p_name) const {
-  if (size() == 0) return NULL;
-
-  for (const_iterator it = begin(), itEnd = end(); it != itEnd; ++it) {
-    if (**it < p_name) {
-      continue;
-    } else if (**it == p_name) {
-      if ((*it)->str_len() > 0) {
-        NXPLOG_EXTNS_D("%s found %s=%s\n", __func__, p_name,
-                       (*it)->str_value());
-      } else {
-        NXPLOG_EXTNS_D("%s found %s=(0x%lx)\n", __func__, p_name,
-                       (*it)->numValue());
-      }
-      return *it;
-    } else
-      break;
-  }
-  return NULL;
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::clean()
-**
-** Description: reset the setting array
-**
-** Returns:     none
-**
-*******************************************************************************/
-void CNfcConfig::clean() {
-  if (size() == 0) return;
-
-  for (iterator it = begin(), itEnd = end(); it != itEnd; ++it) delete *it;
-  clear();
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::Add()
-**
-** Description: add a setting object to the list
-**
-** Returns:     none
-**
-*******************************************************************************/
-void CNfcConfig::add(const CNfcParam* pParam) {
-  if (m_list.size() == 0) {
-    m_list.push_back(pParam);
-    return;
-  }
-  for (list<const CNfcParam *>::iterator it = m_list.begin(),
-                                         itEnd = m_list.end();
-       it != itEnd; ++it) {
-    if (**it < pParam->c_str()) continue;
-    m_list.insert(it, pParam);
-    return;
-  }
-  m_list.push_back(pParam);
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::moveFromList()
-**
-** Description: move the setting object from list to array
-**
-** Returns:     none
-**
-*******************************************************************************/
-void CNfcConfig::moveFromList() {
-  if (m_list.size() == 0) return;
-
-  for (list<const CNfcParam *>::iterator it = m_list.begin(),
-                                         itEnd = m_list.end();
-       it != itEnd; ++it)
-    push_back(*it);
-  m_list.clear();
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::moveToList()
-**
-** Description: move the setting object from array to list
-**
-** Returns:     none
-**
-*******************************************************************************/
-void CNfcConfig::moveToList() {
-  if (m_list.size() != 0) m_list.clear();
-
-  for (iterator it = begin(), itEnd = end(); it != itEnd; ++it)
-    m_list.push_back(*it);
-  clear();
-}
-
-bool CNfcConfig::isModified() {
-  FILE* fd = fopen(config_timestamp_path, "r+");
-  if (fd == nullptr) {
-    ALOGE("%s Unable to open file '%s' - assuming modified", __func__,
-          config_timestamp_path);
-    return true;
-  }
-
-  uint32_t stored_crc32 = 0;
-  fread(&stored_crc32, sizeof(uint32_t), 1, fd);
-  fclose(fd);
-
-  return stored_crc32 != config_crc32_;
-}
-
-void CNfcConfig::resetModified() {
-  FILE* fd = fopen(config_timestamp_path, "w+");
-  if (fd == nullptr) {
-    ALOGE("%s Unable to open file '%s' for writing", __func__,
-          config_timestamp_path);
-    return;
-  }
-
-  fwrite(&config_crc32_, sizeof(uint32_t), 1, fd);
-  fclose(fd);
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcParam::CNfcParam()
-**
-** Description: class constructor
-**
-** Returns:     none
-**
-*******************************************************************************/
-CNfcParam::CNfcParam() : m_numValue(0) {}
-
-/*******************************************************************************
-**
-** Function:    CNfcParam::~CNfcParam()
-**
-** Description: class destructor
-**
-** Returns:     none
-**
-*******************************************************************************/
-CNfcParam::~CNfcParam() {}
-
-/*******************************************************************************
-**
-** Function:    CNfcParam::CNfcParam()
-**
-** Description: class copy constructor
-**
-** Returns:     none
-**
-*******************************************************************************/
-CNfcParam::CNfcParam(const char* name, const string& value)
-    : string(name), m_str_value(value), m_numValue(0) {}
-
-/*******************************************************************************
-**
-** Function:    CNfcParam::CNfcParam()
-**
-** Description: class copy constructor
-**
-** Returns:     none
-**
-*******************************************************************************/
-CNfcParam::CNfcParam(const char* name, unsigned long value)
-    : string(name), m_numValue(value) {}
-
-/*******************************************************************************
-**
-** Function:    GetStrValue
-**
-** Description: API function for getting a string value of a setting
-**
-** Returns:     True if found, otherwise False.
-**
-*******************************************************************************/
-extern "C" int GetNxpStrValue(const char* name, char* pValue,
-                              unsigned long len) {
-  CNfcConfig& rConfig = CNfcConfig::GetInstance();
-
-  return rConfig.getValue(name, pValue, len);
-}
-
-/*******************************************************************************
-**
-** Function:    GetByteArrayValue()
-**
-** Description: Read byte array value from the config file.
-**
-** Parameters:
-**              name - name of the config param to read.
-**              pValue  - pointer to input buffer.
-**              bufflen - input buffer length.
-**              len - out parameter to return the number of bytes read from
-**                    config file, return -1 in case bufflen is not enough.
-**
-** Returns:     TRUE[1] if config param name is found in the config file, else
-**              FALSE[0]
-**
-*******************************************************************************/
-extern "C" int GetNxpByteArrayValue(const char* name, char* pValue,
-                                    long bufflen, long* len) {
-  CNfcConfig& rConfig = CNfcConfig::GetInstance();
-
-  return rConfig.getValue(name, pValue, bufflen, len);
-}
-
-/*******************************************************************************
-**
-** Function:    GetNumValue
-**
-** Description: API function for getting a numerical value of a setting
-**
-** Returns:     true, if successful
-**
-*******************************************************************************/
-extern "C" int GetNxpNumValue(const char* name, void* pValue,
-                              unsigned long len) {
-  if (!pValue) return false;
-
-  CNfcConfig& rConfig = CNfcConfig::GetInstance();
-  const CNfcParam* pParam = rConfig.find(name);
-
-  if (pParam == NULL) return false;
-  unsigned long v = pParam->numValue();
-  if (v == 0 && pParam->str_len() > 0 && pParam->str_len() < 4) {
-    const unsigned char* p = (const unsigned char*)pParam->str_value();
-    for (unsigned int i = 0; i < pParam->str_len(); ++i) {
-      v *= 256;
-      v += *p++;
-    }
-  }
-  switch (len) {
-    case sizeof(unsigned long):
-      *(static_cast<unsigned long*>(pValue)) = (unsigned long)v;
-      break;
-    case sizeof(unsigned short):
-      *(static_cast<unsigned short*>(pValue)) = (unsigned short)v;
-      break;
-    case sizeof(unsigned char):
-      *(static_cast<unsigned char*>(pValue)) = (unsigned char)v;
-      break;
-    default:
-      return false;
-  }
-  return true;
-}
-
-/*******************************************************************************
-**
-** Function:    resetConfig
-**
-** Description: reset settings array
-**
-** Returns:     none
-**
-*******************************************************************************/
-extern "C" void resetNxpConfig()
-
-{
-  CNfcConfig& rConfig = CNfcConfig::GetInstance();
-
-  rConfig.clean();
-}
-
-/*******************************************************************************
-**
-** Function:    readOptionalConfig()
-**
-** Description: read Config settings from an optional conf file
-**
-** Returns:     none
-**
-*******************************************************************************/
-void readOptionalConfig(const char* extra) {
-  string strPath;
-  string configName(extra_config_base);
-  configName += extra;
-  configName += extra_config_ext;
-
-  if (alternative_config_path[0] != '\0') {
-    strPath.assign(alternative_config_path);
-    strPath += configName;
-  } else {
-    findConfigFilePathFromTransportConfigPaths(configName, strPath);
-  }
-
-  CNfcConfig::GetInstance().readConfig(strPath.c_str(), false);
-}
-
-/*******************************************************************************
-**
-** Function:    isNxpConfigModified()
-**
-** Description: check if config file has modified
-**
-** Returns:     0 if not modified, 1 otherwise.
-**
-*******************************************************************************/
-extern "C" int isNxpConfigModified() {
-  CNfcConfig& rConfig = CNfcConfig::GetInstance();
-  return rConfig.isModified();
-}
-
-/*******************************************************************************
-**
-** Function:    updateNxpConfigTimestamp()
-**
-** Description: update if config file has modified
-**
-** Returns:     0 if not modified, 1 otherwise.
-**
-*******************************************************************************/
-extern "C" int updateNxpConfigTimestamp() {
-  CNfcConfig& rConfig = CNfcConfig::GetInstance();
-  rConfig.resetModified();
-  return 0;
-}
diff --git a/halimpl/pn54x/utils/phNxpConfig.h b/halimpl/pn54x/utils/phNxpConfig.h
deleted file mode 100644
index 9488ecc..0000000
--- a/halimpl/pn54x/utils/phNxpConfig.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 1999-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  The original Work has been changed by NXP Semiconductors.
- *
- *  Copyright (C) 2013-2014 NXP Semiconductors
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-#ifndef __CONFIG_H
-#define __CONFIG_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int GetNxpStrValue(const char* name, char* p_value, unsigned long len);
-int GetNxpNumValue(const char* name, void* p_value, unsigned long len);
-int GetNxpByteArrayValue(const char* name, char* pValue, long bufflen,
-                         long* len);
-void resetNxpConfig(void);
-int isNxpConfigModified();
-int updateNxpConfigTimestamp();
-
-#ifdef __cplusplus
-};
-#endif
-
-#define NAME_NXPLOG_EXTNS_LOGLEVEL "NXPLOG_EXTNS_LOGLEVEL"
-#define NAME_NXPLOG_NCIHAL_LOGLEVEL "NXPLOG_NCIHAL_LOGLEVEL"
-#define NAME_NXPLOG_NCIX_LOGLEVEL "NXPLOG_NCIX_LOGLEVEL"
-#define NAME_NXPLOG_NCIR_LOGLEVEL "NXPLOG_NCIR_LOGLEVEL"
-#define NAME_NXPLOG_FWDNLD_LOGLEVEL "NXPLOG_FWDNLD_LOGLEVEL"
-#define NAME_NXPLOG_TML_LOGLEVEL "NXPLOG_TML_LOGLEVEL"
-
-#define NAME_MIFARE_READER_ENABLE "MIFARE_READER_ENABLE"
-#define NAME_FW_STORAGE "FW_STORAGE"
-#define NAME_NXP_NFC_DEV_NODE "NXP_NFC_DEV_NODE"
-#define NAME_NXP_FW_NAME "NXP_FW_NAME"
-#define NAME_NXP_FW_PROTECION_OVERRIDE "NXP_FW_PROTECION_OVERRIDE"
-#define NAME_NXP_SYS_CLK_SRC_SEL "NXP_SYS_CLK_SRC_SEL"
-#define NAME_NXP_SYS_CLK_FREQ_SEL "NXP_SYS_CLK_FREQ_SEL"
-#define NAME_NXP_SYS_CLOCK_TO_CFG "NXP_SYS_CLOCK_TO_CFG"
-#define NAME_NXP_ACT_PROP_EXTN "NXP_ACT_PROP_EXTN"
-#define NAME_NXP_EXT_TVDD_CFG "NXP_EXT_TVDD_CFG"
-#define NAME_NXP_EXT_TVDD_CFG_1 "NXP_EXT_TVDD_CFG_1"
-#define NAME_NXP_EXT_TVDD_CFG_2 "NXP_EXT_TVDD_CFG_2"
-#define NAME_NXP_EXT_TVDD_CFG_3 "NXP_EXT_TVDD_CFG_3"
-#define NAME_NXP_RF_CONF_BLK_1 "NXP_RF_CONF_BLK_1"
-#define NAME_NXP_RF_CONF_BLK_2 "NXP_RF_CONF_BLK_2"
-#define NAME_NXP_RF_CONF_BLK_3 "NXP_RF_CONF_BLK_3"
-#define NAME_NXP_RF_CONF_BLK_4 "NXP_RF_CONF_BLK_4"
-#define NAME_NXP_RF_CONF_BLK_5 "NXP_RF_CONF_BLK_5"
-#define NAME_NXP_RF_CONF_BLK_6 "NXP_RF_CONF_BLK_6"
-#define NAME_NXP_CORE_CONF_EXTN "NXP_CORE_CONF_EXTN"
-#define NAME_NXP_CORE_CONF "NXP_CORE_CONF"
-#define NAME_NXP_CORE_MFCKEY_SETTING "NXP_CORE_MFCKEY_SETTING"
-#define NAME_NXP_CORE_STANDBY "NXP_CORE_STANDBY"
-#define NAME_NXP_NFC_PROFILE_EXTN "NXP_NFC_PROFILE_EXTN"
-#define NAME_NXP_CHINA_TIANJIN_RF_ENABLED "NXP_CHINA_TIANJIN_RF_ENABLED"
-#define NAME_NXP_SWP_SWITCH_TIMEOUT "NXP_SWP_SWITCH_TIMEOUT"
-#define NAME_NXP_SWP_FULL_PWR_ON "NXP_SWP_FULL_PWR_ON"
-#define NAME_NXP_CORE_RF_FIELD "NXP_CORE_RF_FIELD"
-#define NAME_NXP_NFC_MERGE_RF_PARAMS "NXP_NFC_MERGE_RF_PARAMS"
-#define NAME_NXP_I2C_FRAGMENTATION_ENABLED "NXP_I2C_FRAGMENTATION_ENABLED"
-#define NAME_AID_MATCHING_PLATFORM "AID_MATCHING_PLATFORM"
-
-/* default configuration */
-#define default_storage_location "/data/vendor/nfc"
-
-#endif
diff --git a/halimpl/pn54x/utils/phNxpNciHal_utils.c b/halimpl/pn54x/utils/phNxpNciHal_utils.c
deleted file mode 100644
index 46e4908..0000000
--- a/halimpl/pn54x/utils/phNxpNciHal_utils.c
+++ /dev/null
@@ -1,477 +0,0 @@
-/*
- *
- *  Copyright (C) 2013-2014 NXP Semiconductors
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-#include <errno.h>
-#include <pthread.h>
-
-#include <phNxpLog.h>
-#include <phNxpNciHal.h>
-#include <phNxpNciHal_utils.h>
-
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-extern uint8_t discovery_cmd[50];
-extern uint8_t discovery_cmd_len;
-extern uint8_t nfcdep_detected;
-#endif
-
-/*********************** Link list functions **********************************/
-
-/*******************************************************************************
-**
-** Function         listInit
-**
-** Description      List initialization
-**
-** Returns          1, if list initialized, 0 otherwise
-**
-*******************************************************************************/
-int listInit(struct listHead* pList) {
-  pList->pFirst = NULL;
-  if (pthread_mutex_init(&pList->mutex, NULL) == -1) {
-    NXPLOG_NCIHAL_E("Mutex creation failed (errno=0x%08x)", errno);
-    return 0;
-  }
-
-  return 1;
-}
-
-/*******************************************************************************
-**
-** Function         listDestroy
-**
-** Description      List destruction
-**
-** Returns          1, if list destroyed, 0 if failed
-**
-*******************************************************************************/
-int listDestroy(struct listHead* pList) {
-  int bListNotEmpty = 1;
-  while (bListNotEmpty) {
-    bListNotEmpty = listGetAndRemoveNext(pList, NULL);
-  }
-
-  if (pthread_mutex_destroy(&pList->mutex) == -1) {
-    NXPLOG_NCIHAL_E("Mutex destruction failed (errno=0x%08x)", errno);
-    return 0;
-  }
-
-  return 1;
-}
-
-/*******************************************************************************
-**
-** Function         listAdd
-**
-** Description      Add a node to the list
-**
-** Returns          1, if added, 0 if otherwise
-**
-*******************************************************************************/
-int listAdd(struct listHead* pList, void* pData) {
-  struct listNode* pNode;
-  struct listNode* pLastNode;
-  int result;
-
-  /* Create node */
-  pNode = (struct listNode*)malloc(sizeof(struct listNode));
-  if (pNode == NULL) {
-    result = 0;
-    NXPLOG_NCIHAL_E("Failed to malloc");
-    goto clean_and_return;
-  }
-  pNode->pData = pData;
-  pNode->pNext = NULL;
-
-  pthread_mutex_lock(&pList->mutex);
-
-  /* Add the node to the list */
-  if (pList->pFirst == NULL) {
-    /* Set the node as the head */
-    pList->pFirst = pNode;
-  } else {
-    /* Seek to the end of the list */
-    pLastNode = pList->pFirst;
-    while (pLastNode->pNext != NULL) {
-      pLastNode = pLastNode->pNext;
-    }
-
-    /* Add the node to the current list */
-    pLastNode->pNext = pNode;
-  }
-
-  result = 1;
-
-clean_and_return:
-  pthread_mutex_unlock(&pList->mutex);
-  return result;
-}
-
-/*******************************************************************************
-**
-** Function         listRemove
-**
-** Description      Remove node from the list
-**
-** Returns          1, if removed, 0 if otherwise
-**
-*******************************************************************************/
-int listRemove(struct listHead* pList, void* pData) {
-  struct listNode* pNode;
-  struct listNode* pRemovedNode;
-  int result;
-
-  pthread_mutex_lock(&pList->mutex);
-
-  if (pList->pFirst == NULL) {
-    /* Empty list */
-    NXPLOG_NCIHAL_E("Failed to deallocate (list empty)");
-    result = 0;
-    goto clean_and_return;
-  }
-
-  pNode = pList->pFirst;
-  if (pList->pFirst->pData == pData) {
-    /* Get the removed node */
-    pRemovedNode = pNode;
-
-    /* Remove the first node */
-    pList->pFirst = pList->pFirst->pNext;
-  } else {
-    while (pNode->pNext != NULL) {
-      if (pNode->pNext->pData == pData) {
-        /* Node found ! */
-        break;
-      }
-      pNode = pNode->pNext;
-    }
-
-    if (pNode->pNext == NULL) {
-      /* Node not found */
-      result = 0;
-      NXPLOG_NCIHAL_E("Failed to deallocate (not found %8p)", pData);
-      goto clean_and_return;
-    }
-
-    /* Get the removed node */
-    pRemovedNode = pNode->pNext;
-
-    /* Remove the node from the list */
-    pNode->pNext = pNode->pNext->pNext;
-  }
-
-  /* Deallocate the node */
-  free(pRemovedNode);
-
-  result = 1;
-
-clean_and_return:
-  pthread_mutex_unlock(&pList->mutex);
-  return result;
-}
-
-/*******************************************************************************
-**
-** Function         listGetAndRemoveNext
-**
-** Description      Get next node on the list and remove it
-**
-** Returns          1, if successful, 0 if otherwise
-**
-*******************************************************************************/
-int listGetAndRemoveNext(struct listHead* pList, void** ppData) {
-  struct listNode* pNode;
-  int result;
-
-  pthread_mutex_lock(&pList->mutex);
-
-  if (pList->pFirst == NULL) {
-    /* Empty list */
-    NXPLOG_NCIHAL_D("Failed to deallocate (list empty)");
-    result = 0;
-    goto clean_and_return;
-  }
-
-  /* Work on the first node */
-  pNode = pList->pFirst;
-
-  /* Return the data */
-  if (ppData != NULL) {
-    *ppData = pNode->pData;
-  }
-
-  /* Remove and deallocate the node */
-  pList->pFirst = pNode->pNext;
-  free(pNode);
-
-  result = 1;
-
-clean_and_return:
-  listDump(pList);
-  pthread_mutex_unlock(&pList->mutex);
-  return result;
-}
-
-/*******************************************************************************
-**
-** Function         listDump
-**
-** Description      Dump list information
-**
-** Returns          None
-**
-*******************************************************************************/
-void listDump(struct listHead* pList) {
-  struct listNode* pNode = pList->pFirst;
-
-  NXPLOG_NCIHAL_D("Node dump:");
-  while (pNode != NULL) {
-    NXPLOG_NCIHAL_D("- %8p (%8p)", pNode, pNode->pData);
-    pNode = pNode->pNext;
-  }
-
-  return;
-}
-
-/* END Linked list source code */
-
-/****************** Semaphore and mutex helper functions **********************/
-
-static phNxpNciHal_Monitor_t* nxpncihal_monitor = NULL;
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_init_monitor
-**
-** Description      Initialize the semaphore monitor
-**
-** Returns          Pointer to monitor, otherwise NULL if failed
-**
-*******************************************************************************/
-phNxpNciHal_Monitor_t* phNxpNciHal_init_monitor(void) {
-  NXPLOG_NCIHAL_D("Entering phNxpNciHal_init_monitor");
-
-  if (nxpncihal_monitor == NULL) {
-    nxpncihal_monitor =
-        (phNxpNciHal_Monitor_t*)malloc(sizeof(phNxpNciHal_Monitor_t));
-  }
-
-  if (nxpncihal_monitor != NULL) {
-    memset(nxpncihal_monitor, 0x00, sizeof(phNxpNciHal_Monitor_t));
-
-    if (pthread_mutex_init(&nxpncihal_monitor->reentrance_mutex, NULL) == -1) {
-      NXPLOG_NCIHAL_E("reentrance_mutex creation returned 0x%08x", errno);
-      goto clean_and_return;
-    }
-
-    if (pthread_mutex_init(&nxpncihal_monitor->concurrency_mutex, NULL) == -1) {
-      NXPLOG_NCIHAL_E("concurrency_mutex creation returned 0x%08x", errno);
-      pthread_mutex_destroy(&nxpncihal_monitor->reentrance_mutex);
-      goto clean_and_return;
-    }
-
-    if (listInit(&nxpncihal_monitor->sem_list) != 1) {
-      NXPLOG_NCIHAL_E("Semaphore List creation failed");
-      pthread_mutex_destroy(&nxpncihal_monitor->concurrency_mutex);
-      pthread_mutex_destroy(&nxpncihal_monitor->reentrance_mutex);
-      goto clean_and_return;
-    }
-  } else {
-    NXPLOG_NCIHAL_E("nxphal_monitor creation failed");
-    goto clean_and_return;
-  }
-
-  NXPLOG_NCIHAL_D("Returning with SUCCESS");
-
-  return nxpncihal_monitor;
-
-clean_and_return:
-  NXPLOG_NCIHAL_D("Returning with FAILURE");
-
-  if (nxpncihal_monitor != NULL) {
-    free(nxpncihal_monitor);
-    nxpncihal_monitor = NULL;
-  }
-
-  return NULL;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_cleanup_monitor
-**
-** Description      Clean up semaphore monitor
-**
-** Returns          None
-**
-*******************************************************************************/
-void phNxpNciHal_cleanup_monitor(void) {
-  if (nxpncihal_monitor != NULL) {
-    pthread_mutex_destroy(&nxpncihal_monitor->concurrency_mutex);
-    REENTRANCE_UNLOCK();
-    pthread_mutex_destroy(&nxpncihal_monitor->reentrance_mutex);
-    phNxpNciHal_releaseall_cb_data();
-    listDestroy(&nxpncihal_monitor->sem_list);
-  }
-
-  free(nxpncihal_monitor);
-  nxpncihal_monitor = NULL;
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_get_monitor
-**
-** Description      Get monitor
-**
-** Returns          Pointer to monitor
-**
-*******************************************************************************/
-phNxpNciHal_Monitor_t* phNxpNciHal_get_monitor(void) {
-  return nxpncihal_monitor;
-}
-
-/* Initialize the callback data */
-NFCSTATUS phNxpNciHal_init_cb_data(phNxpNciHal_Sem_t* pCallbackData,
-                                   void* pContext) {
-  /* Create semaphore */
-  if (sem_init(&pCallbackData->sem, 0, 0) == -1) {
-    NXPLOG_NCIHAL_E("Semaphore creation failed (errno=0x%08x)", errno);
-    return NFCSTATUS_FAILED;
-  }
-
-  /* Set default status value */
-  pCallbackData->status = NFCSTATUS_FAILED;
-
-  /* Copy the context */
-  pCallbackData->pContext = pContext;
-
-  /* Add to active semaphore list */
-  if (listAdd(&phNxpNciHal_get_monitor()->sem_list, pCallbackData) != 1) {
-    NXPLOG_NCIHAL_E("Failed to add the semaphore to the list");
-  }
-
-  return NFCSTATUS_SUCCESS;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_cleanup_cb_data
-**
-** Description      Clean up callback data
-**
-** Returns          None
-**
-*******************************************************************************/
-void phNxpNciHal_cleanup_cb_data(phNxpNciHal_Sem_t* pCallbackData) {
-  /* Destroy semaphore */
-  if (sem_destroy(&pCallbackData->sem)) {
-    NXPLOG_NCIHAL_E(
-        "phNxpNciHal_cleanup_cb_data: Failed to destroy semaphore "
-        "(errno=0x%08x)",
-        errno);
-  }
-
-  /* Remove from active semaphore list */
-  if (listRemove(&phNxpNciHal_get_monitor()->sem_list, pCallbackData) != 1) {
-    NXPLOG_NCIHAL_E(
-        "phNxpNciHal_cleanup_cb_data: Failed to remove semaphore from the "
-        "list");
-  }
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_releaseall_cb_data
-**
-** Description      Release all callback data
-**
-** Returns          None
-**
-*******************************************************************************/
-void phNxpNciHal_releaseall_cb_data(void) {
-  phNxpNciHal_Sem_t* pCallbackData;
-
-  while (listGetAndRemoveNext(&phNxpNciHal_get_monitor()->sem_list,
-                              (void**)&pCallbackData)) {
-    pCallbackData->status = NFCSTATUS_FAILED;
-    sem_post(&pCallbackData->sem);
-  }
-
-  return;
-}
-
-/* END Semaphore and mutex helper functions */
-
-/**************************** Other functions *********************************/
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_print_packet
-**
-** Description      Print packet
-**
-** Returns          None
-**
-*******************************************************************************/
-void phNxpNciHal_print_packet(const char* pString, const uint8_t* p_data,
-                              uint16_t len) {
-  uint32_t i, j;
-  char print_buffer[len * 3 + 1];
-
-  memset(print_buffer, 0, sizeof(print_buffer));
-  for (i = 0; i < len; i++) {
-    snprintf(&print_buffer[i * 2], 3, "%02X", p_data[i]);
-  }
-  if (0 == memcmp(pString, "SEND", 0x04)) {
-    NXPLOG_NCIX_D("len = %3d > %s", len, print_buffer);
-  } else if (0 == memcmp(pString, "RECV", 0x04)) {
-    NXPLOG_NCIR_D("len = %3d > %s", len, print_buffer);
-  }
-
-  return;
-}
-
-/*******************************************************************************
-**
-** Function         phNxpNciHal_emergency_recovery
-**
-** Description      Emergency recovery in case of no other way out
-**
-** Returns          None
-**
-*******************************************************************************/
-
-void phNxpNciHal_emergency_recovery(void) {
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-  if (nfcdep_detected && discovery_cmd_len != 0) {
-    pthread_t pthread;
-    pthread_attr_t attr;
-    pthread_attr_init(&attr);
-    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
-    if (pthread_create(&pthread, &attr, (void*)phNxpNciHal_core_reset_recovery,
-                       NULL) == 0) {
-      return;
-    }
-  }
-#endif
-  NXPLOG_NCIHAL_E("%s: abort()", __func__);
-  abort();
-}
diff --git a/halimpl/pn54x/utils/phNxpNciHal_utils.h b/halimpl/pn54x/utils/phNxpNciHal_utils.h
deleted file mode 100644
index 3ea33e4..0000000
--- a/halimpl/pn54x/utils/phNxpNciHal_utils.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- *
- *  Copyright (C) 2013-2014 NXP Semiconductors
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-#ifndef _PHNXPNCIHAL_UTILS_H_
-#define _PHNXPNCIHAL_UTILS_H_
-
-#include <assert.h>
-#include <phNfcStatus.h>
-#include <pthread.h>
-#include <semaphore.h>
-
-/********************* Definitions and structures *****************************/
-
-/* List structures */
-struct listNode {
-  void* pData;
-  struct listNode* pNext;
-};
-
-struct listHead {
-  struct listNode* pFirst;
-  pthread_mutex_t mutex;
-};
-
-/* Semaphore handling structure */
-typedef struct phNxpNciHal_Sem {
-  /* Semaphore used to wait for callback */
-  sem_t sem;
-
-  /* Used to store the status sent by the callback */
-  NFCSTATUS status;
-
-  /* Used to provide a local context to the callback */
-  void* pContext;
-
-} phNxpNciHal_Sem_t;
-
-/* Semaphore helper macros */
-#define SEM_WAIT(cb_data) sem_wait(&((cb_data).sem))
-#define SEM_POST(p_cb_data) sem_post(&((p_cb_data)->sem))
-
-/* Semaphore and mutex monitor */
-typedef struct phNxpNciHal_Monitor {
-  /* Mutex protecting native library against reentrance */
-  pthread_mutex_t reentrance_mutex;
-
-  /* Mutex protecting native library against concurrency */
-  pthread_mutex_t concurrency_mutex;
-
-  /* List used to track pending semaphores waiting for callback */
-  struct listHead sem_list;
-
-} phNxpNciHal_Monitor_t;
-
-/************************ Exposed functions ***********************************/
-/* List functions */
-int listInit(struct listHead* pList);
-int listDestroy(struct listHead* pList);
-int listAdd(struct listHead* pList, void* pData);
-int listRemove(struct listHead* pList, void* pData);
-int listGetAndRemoveNext(struct listHead* pList, void** ppData);
-void listDump(struct listHead* pList);
-
-/* NXP NCI HAL utility functions */
-phNxpNciHal_Monitor_t* phNxpNciHal_init_monitor(void);
-void phNxpNciHal_cleanup_monitor(void);
-phNxpNciHal_Monitor_t* phNxpNciHal_get_monitor(void);
-NFCSTATUS phNxpNciHal_init_cb_data(phNxpNciHal_Sem_t* pCallbackData,
-                                   void* pContext);
-void phNxpNciHal_cleanup_cb_data(phNxpNciHal_Sem_t* pCallbackData);
-void phNxpNciHal_releaseall_cb_data(void);
-void phNxpNciHal_print_packet(const char* pString, const uint8_t* p_data,
-                              uint16_t len);
-void phNxpNciHal_emergency_recovery(void);
-
-/* Lock unlock helper macros */
-/* Lock unlock helper macros */
-#define REENTRANCE_LOCK()        \
-  if (phNxpNciHal_get_monitor()) \
-  pthread_mutex_lock(&phNxpNciHal_get_monitor()->reentrance_mutex)
-#define REENTRANCE_UNLOCK()      \
-  if (phNxpNciHal_get_monitor()) \
-  pthread_mutex_unlock(&phNxpNciHal_get_monitor()->reentrance_mutex)
-#define CONCURRENCY_LOCK()       \
-  if (phNxpNciHal_get_monitor()) \
-  pthread_mutex_lock(&phNxpNciHal_get_monitor()->concurrency_mutex)
-#define CONCURRENCY_UNLOCK()     \
-  if (phNxpNciHal_get_monitor()) \
-  pthread_mutex_unlock(&phNxpNciHal_get_monitor()->concurrency_mutex)
-
-#endif /* _PHNXPNCIHAL_UTILS_H_ */
diff --git a/halimpl/pn54x/utils/sparse_crc32.c b/halimpl/pn54x/utils/sparse_crc32.c
deleted file mode 100644
index 1ce4c63..0000000
--- a/halimpl/pn54x/utils/sparse_crc32.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/*-
- *  COPYRIGHT (C) 1986 Gary S. Brown.  You may use this program, or
- *  code or tables extracted from it, as desired without restriction.
- */
-
-/*
- *  First, the polynomial itself and its table of feedback terms.  The
- *  polynomial is
- *  X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0
- *
- *  Note that we take it "backwards" and put the highest-order term in
- *  the lowest-order bit.  The X^32 term is "implied"; the LSB is the
- *  X^31 term, etc.  The X^0 term (usually shown as "+1") results in
- *  the MSB being 1
- *
- *  Note that the usual hardware shift register implementation, which
- *  is what we're using (we're merely optimizing it by doing eight-bit
- *  chunks at a time) shifts bits into the lowest-order term.  In our
- *  implementation, that means shifting towards the right.  Why do we
- *  do it this way?  Because the calculated CRC must be transmitted in
- *  order from highest-order term to lowest-order term.  UARTs transmit
- *  characters in order from LSB to MSB.  By storing the CRC this way
- *  we hand it to the UART in the order low-byte to high-byte; the UART
- *  sends each low-bit to hight-bit; and the result is transmission bit
- *  by bit from highest- to lowest-order term without requiring any bit
- *  shuffling on our part.  Reception works similarly
- *
- *  The feedback terms table consists of 256, 32-bit entries.  Notes
- *
- *      The table can be generated at runtime if desired; code to do so
- *      is shown later.  It might not be obvious, but the feedback
- *      terms simply represent the results of eight shift/xor opera
- *      tions for all combinations of data and CRC register values
- *
- *      The values must be right-shifted by eight bits by the "updcrc
- *      logic; the shift must be unsigned (bring in zeroes).  On some
- *      hardware you could probably optimize the shift in assembler by
- *      using byte-swap instructions
- *      polynomial $edb88320
- *
- *
- * CRC32 code derived from work by Gary S. Brown.
- */
-
-/* Code taken from FreeBSD 8 */
-#include <stdint.h>
-
-static uint32_t crc32_tab[] = {
-    0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
-    0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
-    0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
-    0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
-    0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
-    0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
-    0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,
-    0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
-    0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
-    0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
-    0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,
-    0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
-    0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
-    0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
-    0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
-    0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
-    0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
-    0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
-    0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
-    0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
-    0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
-    0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
-    0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
-    0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
-    0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
-    0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
-    0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,
-    0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
-    0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
-    0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
-    0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,
-    0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
-    0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,
-    0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
-    0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
-    0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
-    0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
-    0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
-    0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
-    0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
-    0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,
-    0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
-    0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d};
-
-/*
- * A function that calculates the CRC-32 based on the table above is
- * given below for documentation purposes. An equivalent implementation
- * of this function that's actually used in the kernel can be found
- * in sys/libkern.h, where it can be inlined.
- */
-
-uint32_t sparse_crc32(uint32_t crc_in, const void* buf, int size) {
-  const uint8_t* p = buf;
-  uint32_t crc;
-
-  crc = crc_in ^ ~0U;
-  while (size--) crc = crc32_tab[(crc ^ *p++) & 0xFF] ^ (crc >> 8);
-  return crc ^ ~0U;
-}
diff --git a/halimpl/pn54x/utils/sparse_crc32.h b/halimpl/pn54x/utils/sparse_crc32.h
deleted file mode 100644
index a776921..0000000
--- a/halimpl/pn54x/utils/sparse_crc32.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _LIBSPARSE_SPARSE_CRC32_H_
-#define _LIBSPARSE_SPARSE_CRC32_H_
-
-#include <stdint.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-uint32_t sparse_crc32(uint32_t crc, const void* buf, size_t size);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/run_unit_tests.sh b/run_unit_tests.sh
new file mode 100755
index 0000000..c2c9904
--- /dev/null
+++ b/run_unit_tests.sh
@@ -0,0 +1,125 @@
+#!/bin/sh
+
+known_tests=(
+  nfc_test_utils
+)
+
+known_remote_tests=(
+)
+
+
+usage() {
+  binary="$(basename "$0")"
+  echo "Usage: ${binary} --help"
+  echo "       ${binary} [-i <iterations>] [-s <specific device>] [--all] [<test name>[.<filter>] ...] [--<arg> ...]"
+  echo
+  echo "Unknown long arguments are passed to the test."
+  echo
+  echo "Known test names:"
+
+  for name in "${known_tests[@]}"
+  do
+    echo "    ${name}"
+  done
+
+  echo
+  echo "Known tests that need a remote device:"
+  for name in "${known_remote_tests[@]}"
+  do
+    echo "    ${name}"
+  done
+}
+
+iterations=1
+device=
+tests=()
+test_args=()
+while [ $# -gt 0 ]
+do
+  case "$1" in
+    -h|--help)
+      usage
+      exit 0
+      ;;
+    -i)
+      shift
+      if [ $# -eq 0 ]; then
+        echo "error: number of iterations expected" 1>&2
+        usage
+        exit 2
+      fi
+      iterations=$(( $1 ))
+      shift
+      ;;
+    -s)
+      shift
+      if [ $# -eq 0 ]; then
+        echo "error: no device specified" 1>&2
+        usage
+        exit 2
+      fi
+      device="$1"
+      shift
+      ;;
+    --all)
+      tests+=( "${known_tests[@]}" )
+      shift
+      ;;
+    --*)
+      test_args+=( "$1" )
+      shift
+      ;;
+    *)
+      tests+=( "$1" )
+      shift
+      ;;
+  esac
+done
+
+if [ "${#tests[@]}" -eq 0 ]; then
+  tests+=( "${known_tests[@]}" )
+fi
+
+adb=( "adb" )
+if [ -n "${device}" ]; then
+  adb+=( "-s" "${device}" )
+fi
+
+failed_tests=()
+for spec in "${tests[@]}"
+do
+  name="${spec%%.*}"
+  binary="/data/nativetest/${name}/${name}"
+
+  push_command=( "${adb[@]}" push {"${ANDROID_PRODUCT_OUT}",}"${binary}" )
+  test_command=( "${adb[@]}" shell "${binary}" )
+  if [ "${name}" != "${spec}" ]; then
+    filter="${spec#*.}"
+    test_command+=( "--gtest_filter=${filter}" )
+  fi
+  test_command+=( "${test_args[@]}" )
+
+  echo "--- ${name} ---"
+  echo "pushing..."
+  "${push_command[@]}"
+  echo "running..."
+  failed_count=0
+  for i in $(seq 1 ${iterations})
+  do
+    "${test_command[@]}" || failed_count=$(( $failed_count + 1 ))
+  done
+
+  if [ $failed_count != 0 ]; then
+    failed_tests+=( "${name} ${failed_count}/${iterations}" )
+  fi
+done
+
+if [ "${#failed_tests[@]}" -ne 0 ]; then
+  for failed_test in "${failed_tests[@]}"
+  do
+    echo "!!! FAILED TEST: ${failed_test} !!!"
+  done
+  exit 1
+fi
+
+exit 0
diff --git a/src/Android.bp b/src/Android.bp
index 39d3007..0db231d 100644
--- a/src/Android.bp
+++ b/src/Android.bp
@@ -13,6 +13,8 @@
         "libmetricslogger",
         "libpower",
         "libz",
+        "libchrome",
+        "libbase",
 
         // Treble configuration
         "libhidlbase",
@@ -20,45 +22,45 @@
         "libhwbinder",
         "libutils",
         "android.hardware.nfc@1.0",
+        "android.hardware.nfc@1.1",
+    ],
+    static_libs: [
+        "libnfcutils",
     ],
     cflags: [
         "-DBUILDCFG=1",
-        "-Wno-deprecated-register",
-        "-Wno-unused-parameter",
-        "-Wno-missing-field-initializers",
+        "-Wall",
+        "-Werror",
     ],
     local_include_dirs: [
         "include",
         "gki/ulinux",
         "gki/common",
-        "hal/include",
-        "hal/int",
         "nfa/include",
-        "nfa/int",
         "nfc/include",
-        "nfc/int",
     ],
     srcs: [
-        "nfa/ce/*.c",
-        "nfa/dm/*.c",
-        "nfa/ee/*.c",
-        "nfa/hci/*.c",
-        "nfa/int/*.c",
-        "nfa/p2p/*.c",
-        "nfa/rw/*.c",
-        "nfa/sys/*.c",
-        "nfc/int/*.c",
-        "nfc/llcp/*.c",
-        "nfc/nci/*.c",
-        "nfc/ndef/*.c",
-        "nfc/nfc/*.c",
+        "nfa/ce/*.cc",
+        "nfa/dm/*.cc",
+        "nfa/ee/*.cc",
+        "nfa/hci/*.cc",
+        "nfa/p2p/*.cc",
+        "nfa/rw/*.cc",
+        "nfa/sys/*.cc",
+        "nfc/llcp/*.cc",
+        "nfc/nci/*.cc",
+        "nfc/ndef/*.cc",
         "nfc/nfc/*.cc",
-        "nfc/tags/*.c",
-        "adaptation/*.c",
-        "adaptation/*.cpp",
+        "nfc/tags/*.cc",
         "adaptation/*.cc",
-        "gki/common/*.c",
-        "gki/ulinux/*.c",
-        "nfca_version.c",
+        "gki/common/*.cc",
+        "gki/ulinux/*.cc",
     ],
+    product_variables: {
+        debuggable: {
+            cflags: [
+                "-DDCHECK_ALWAYS_ON"
+            ],
+        },
+    },
 }
diff --git a/src/adaptation/CrcChecksum.cpp b/src/adaptation/CrcChecksum.cc
similarity index 87%
rename from src/adaptation/CrcChecksum.cpp
rename to src/adaptation/CrcChecksum.cc
index af20f6e..a94879e 100644
--- a/src/adaptation/CrcChecksum.cpp
+++ b/src/adaptation/CrcChecksum.cc
@@ -16,16 +16,17 @@
  *
  ******************************************************************************/
 #include "CrcChecksum.h"
-#include <errno.h>
+
 #include <fcntl.h>
-#include <sys/stat.h>
-#include <sys/types.h>
 #include <unistd.h>
 #include <string>
-#include "_OverrideLog.h"
 
-#undef LOG_TAG
-#define LOG_TAG "NfcNciHal"
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 static const unsigned short crctab[256] = {
     0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241, 0xc601,
@@ -69,9 +70,9 @@
 **
 *******************************************************************************/
 unsigned short crcChecksumCompute(const unsigned char* buffer, int bufferLen) {
-  register unsigned short crc = 0;
-  const register unsigned char* cp = buffer;
-  register int cnt = bufferLen;
+  unsigned short crc = 0;
+  const unsigned char* cp = buffer;
+  int cnt = bufferLen;
 
   while (cnt--) {
     crc = ((crc >> 8) & 0xff) ^ crctab[(crc & 0xff) ^ *cp++];
@@ -90,8 +91,9 @@
 **
 *******************************************************************************/
 bool crcChecksumVerifyIntegrity(const char* filename) {
-  ALOGD("%s: filename=%s", __func__, filename);
-  bool isGood = FALSE;
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("%s: filename=%s", __func__, filename);
+  bool isGood = false;
   int fileStream = open(filename, O_RDONLY);
   if (fileStream >= 0) {
     unsigned short checksum = 0;
@@ -107,15 +109,16 @@
     }
     close(fileStream);
     if ((actualReadCrc == sizeof(checksum)) && (data.size() > 0)) {
-      ALOGD("%s: data size=%zu", __func__, data.size());
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("%s: data size=%zu", __func__, data.size());
       if (checksum ==
           crcChecksumCompute((const unsigned char*)data.data(), data.size()))
-        isGood = TRUE;
+        isGood = true;
       else
-        ALOGE("%s: checksum mismatch", __func__);
+        LOG(ERROR) << StringPrintf("%s: checksum mismatch", __func__);
     } else
-      ALOGE("%s: invalid length", __func__);
+      LOG(ERROR) << StringPrintf("%s: invalid length", __func__);
   } else
-    isGood = TRUE;  // assume file does not exist
+    isGood = true;  // assume file does not exist
   return isGood;
 }
diff --git a/src/adaptation/NfcAdaptation.cpp b/src/adaptation/NfcAdaptation.cc
old mode 100644
new mode 100755
similarity index 65%
rename from src/adaptation/NfcAdaptation.cpp
rename to src/adaptation/NfcAdaptation.cc
index 42bf55f..528bdd7
--- a/src/adaptation/NfcAdaptation.cpp
+++ b/src/adaptation/NfcAdaptation.cc
@@ -15,43 +15,41 @@
  *  limitations under the License.
  *
  ******************************************************************************/
-#include "_OverrideLog.h"
-
-#include <android/hardware/nfc/1.0/INfc.h>
-#include <android/hardware/nfc/1.0/INfcClientCallback.h>
+#include <android-base/stringprintf.h>
+#include <android/hardware/nfc/1.1/INfc.h>
+#include <base/command_line.h>
+#include <base/logging.h>
+#include <cutils/properties.h>
 #include <hwbinder/ProcessState.h>
-#include <pthread.h>
+
 #include "NfcAdaptation.h"
-#include "debug_nfcsnoop.h"
-#include "nfc_target.h"
-
-extern "C" {
-#include "gki.h"
-#include "nfa_api.h"
-#include "nfc_int.h"
-#include "vendor_cfg.h"
-}
 #include "android_logmsg.h"
-#include "config.h"
-
-#undef LOG_TAG
-#define LOG_TAG "NfcAdaptation"
+#include "debug_nfcsnoop.h"
+#include "nfa_api.h"
+#include "nfa_rw_api.h"
+#include "nfc_config.h"
+#include "nfc_int.h"
 
 using android::OK;
 using android::sp;
 using android::status_t;
 
+using android::base::StringPrintf;
 using android::hardware::ProcessState;
 using android::hardware::Return;
 using android::hardware::Void;
 using android::hardware::nfc::V1_0::INfc;
-using android::hardware::nfc::V1_0::INfcClientCallback;
+using android::hardware::nfc::V1_1::PresenceCheckAlgorithm;
+using INfcV1_1 = android::hardware::nfc::V1_1::INfc;
+using NfcVendorConfig = android::hardware::nfc::V1_1::NfcConfig;
+using android::hardware::nfc::V1_1::INfcClientCallback;
 using android::hardware::hidl_vec;
 
-extern "C" void GKI_shutdown();
-extern void resetConfig();
-extern "C" void verify_stack_non_volatile_store();
-extern "C" void delete_stack_non_volatile_store(bool forceDelete);
+extern bool nfc_debug_enabled;
+
+extern void GKI_shutdown();
+extern void verify_stack_non_volatile_store();
+extern void delete_stack_non_volatile_store(bool forceDelete);
 
 NfcAdaptation* NfcAdaptation::mpInstance = NULL;
 ThreadMutex NfcAdaptation::sLock;
@@ -60,25 +58,43 @@
 ThreadCondVar NfcAdaptation::mHalOpenCompletedEvent;
 ThreadCondVar NfcAdaptation::mHalCloseCompletedEvent;
 sp<INfc> NfcAdaptation::mHal;
+sp<INfcV1_1> NfcAdaptation::mHal_1_1;
 INfcClientCallback* NfcAdaptation::mCallback;
 
-uint32_t ScrProtocolTraceFlag = SCR_PROTO_TRACE_ALL;  // 0x017F00;
-uint8_t appl_trace_level = 0xff;
+bool nfc_debug_enabled = false;
+std::string nfc_storage_path;
 uint8_t appl_dta_mode_flag = 0x00;
-char bcm_nfc_location[120];
 
-static uint8_t nfa_dm_cfg[sizeof(tNFA_DM_CFG)];
-static uint8_t nfa_proprietary_cfg[sizeof(tNFA_PROPRIETARY_CFG)];
-extern tNFA_DM_CFG* p_nfa_dm_cfg;
-extern tNFA_PROPRIETARY_CFG* p_nfa_proprietary_cfg;
+extern tNFA_DM_CFG nfa_dm_cfg;
+extern tNFA_PROPRIETARY_CFG nfa_proprietary_cfg;
+extern tNFA_HCI_CFG nfa_hci_cfg;
 extern uint8_t nfa_ee_max_ee_cfg;
-extern const uint8_t nfca_version_string[];
-extern const uint8_t nfa_version_string[];
-static uint8_t deviceHostWhiteList[NFA_HCI_MAX_HOST_IN_NETWORK];
-static tNFA_HCI_CFG jni_nfa_hci_cfg;
-extern tNFA_HCI_CFG* p_nfa_hci_cfg;
 extern bool nfa_poll_bail_out_mode;
 
+// Whitelist for hosts allowed to create a pipe
+// See ADM_CREATE_PIPE command in the ETSI test specification
+// ETSI TS 102 622, section 6.1.3.1
+static std::vector<uint8_t> host_whitelist;
+
+namespace {
+void initializeGlobalDebugEnabledFlag() {
+  nfc_debug_enabled =
+      (NfcConfig::getUnsigned(NAME_NFC_DEBUG_ENABLED, 0) != 0) ? true : false;
+
+  char valueStr[PROPERTY_VALUE_MAX] = {0};
+  int len = property_get("nfc.debug_enabled", valueStr, "");
+  if (len > 0) {
+    // let Android property override .conf variable
+    unsigned debug_enabled = 0;
+    sscanf(valueStr, "%u", &debug_enabled);
+    nfc_debug_enabled = (debug_enabled == 0) ? false : true;
+  }
+
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("%s: level=%u", __func__, nfc_debug_enabled);
+}
+}  // namespace
+
 class NfcClientCallback : public INfcClientCallback {
  public:
   NfcClientCallback(tHAL_NFC_CBACK* eventCallback,
@@ -87,6 +103,12 @@
     mDataCallback = dataCallback;
   };
   virtual ~NfcClientCallback() = default;
+  Return<void> sendEvent_1_1(
+      ::android::hardware::nfc::V1_1::NfcEvent event,
+      ::android::hardware::nfc::V1_0::NfcStatus event_status) override {
+    mEventCallback((uint8_t)event, (tHAL_NFC_STATUS)event_status);
+    return Void();
+  };
   Return<void> sendEvent(
       ::android::hardware::nfc::V1_0::NfcEvent event,
       ::android::hardware::nfc::V1_0::NfcStatus event_status) override {
@@ -141,10 +163,61 @@
 NfcAdaptation& NfcAdaptation::GetInstance() {
   AutoThreadMutex a(sLock);
 
-  if (!mpInstance) mpInstance = new NfcAdaptation;
+  if (!mpInstance) {
+    mpInstance = new NfcAdaptation;
+    mpInstance->InitializeHalDeviceContext();
+  }
   return *mpInstance;
 }
 
+void NfcAdaptation::GetVendorConfigs(
+    std::map<std::string, ConfigValue>& configMap) {
+  if (mHal_1_1) {
+    mHal_1_1->getConfig([&configMap](NfcVendorConfig config) {
+      std::vector<uint8_t> nfaPropCfg = {
+          config.nfaProprietaryCfg.protocol18092Active,
+          config.nfaProprietaryCfg.protocolBPrime,
+          config.nfaProprietaryCfg.protocolDual,
+          config.nfaProprietaryCfg.protocol15693,
+          config.nfaProprietaryCfg.protocolKovio,
+          config.nfaProprietaryCfg.protocolMifare,
+          config.nfaProprietaryCfg.discoveryPollKovio,
+          config.nfaProprietaryCfg.discoveryPollBPrime,
+          config.nfaProprietaryCfg.discoveryListenBPrime};
+      configMap.emplace(NAME_NFA_PROPRIETARY_CFG, ConfigValue(nfaPropCfg));
+      configMap.emplace(NAME_NFA_POLL_BAIL_OUT_MODE,
+                        ConfigValue(config.nfaPollBailOutMode ? 1 : 0));
+      configMap.emplace(NAME_DEFAULT_OFFHOST_ROUTE,
+                        ConfigValue(config.defaultOffHostRoute));
+      configMap.emplace(NAME_DEFAULT_ROUTE, ConfigValue(config.defaultRoute));
+      configMap.emplace(NAME_DEFAULT_NFCF_ROUTE,
+                        ConfigValue(config.defaultOffHostRouteFelica));
+      configMap.emplace(NAME_DEFAULT_SYS_CODE_ROUTE,
+                        ConfigValue(config.defaultSystemCodeRoute));
+      configMap.emplace(NAME_DEFAULT_SYS_CODE_PWR_STATE,
+                        ConfigValue(config.defaultSystemCodePowerState));
+      configMap.emplace(NAME_OFF_HOST_SIM_PIPE_ID,
+                        ConfigValue(config.offHostSIMPipeId));
+      configMap.emplace(NAME_OFF_HOST_ESE_PIPE_ID,
+                        ConfigValue(config.offHostESEPipeId));
+      configMap.emplace(NAME_ISO_DEP_MAX_TRANSCEIVE,
+                        ConfigValue(config.maxIsoDepTransceiveLength));
+      if (config.hostWhitelist.size() != 0) {
+        configMap.emplace(NAME_DEVICE_HOST_WHITE_LIST,
+                          ConfigValue(config.hostWhitelist));
+      }
+      /* For Backwards compatibility */
+      if (config.presenceCheckAlgorithm ==
+          PresenceCheckAlgorithm::ISO_DEP_NAK) {
+        configMap.emplace(NAME_PRESENCE_CHECK_ALGORITHM,
+                          ConfigValue((uint32_t)NFA_RW_PRES_CHK_ISO_DEP_NAK));
+      } else {
+        configMap.emplace(NAME_PRESENCE_CHECK_ALGORITHM,
+                          ConfigValue((uint32_t)config.presenceCheckAlgorithm));
+      }
+    });
+  }
+}
 /*******************************************************************************
 **
 ** Function:    NfcAdaptation::Initialize()
@@ -156,64 +229,82 @@
 *******************************************************************************/
 void NfcAdaptation::Initialize() {
   const char* func = "NfcAdaptation::Initialize";
-  ALOGD("%s: enter", func);
-  ALOGE("%s: ver=%s nfa=%s", func, nfca_version_string, nfa_version_string);
-  unsigned long num;
+  const char* argv[] = {"libnfc_nci"};
+  // Init log tag
+  base::CommandLine::Init(1, argv);
 
-  if (GetNumValue(NAME_USE_RAW_NCI_TRACE, &num, sizeof(num))) {
-    if (num == 1) {
-      // display protocol traces in raw format
-      ProtoDispAdapterUseRawOutput(TRUE);
-      ALOGD("%s: logging protocol in raw format", func);
-    }
-  }
-  if (!GetStrValue(NAME_NFA_STORAGE, bcm_nfc_location,
-                   sizeof(bcm_nfc_location))) {
-    strlcpy(bcm_nfc_location, "/data/nfc", sizeof(bcm_nfc_location));
+  // Android already logs thread_id, proc_id, timestamp, so disable those.
+  logging::SetLogItems(false, false, false, false);
+
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s: enter", func);
+
+  nfc_storage_path = NfcConfig::getString(NAME_NFA_STORAGE, "/data/nfc");
+
+  if (NfcConfig::hasKey(NAME_NFA_DM_CFG)) {
+    std::vector<uint8_t> dm_config = NfcConfig::getBytes(NAME_NFA_DM_CFG);
+    if (dm_config.size() > 0) nfa_dm_cfg.auto_detect_ndef = dm_config[0];
+    if (dm_config.size() > 1) nfa_dm_cfg.auto_read_ndef = dm_config[1];
+    if (dm_config.size() > 2) nfa_dm_cfg.auto_presence_check = dm_config[2];
+    if (dm_config.size() > 3) nfa_dm_cfg.presence_check_option = dm_config[3];
+    // NOTE: The timeout value is not configurable here because the endianess
+    // of a byte array is ambiguous and needlessly difficult to configure.
+    // If this value needs to be configgurable, a numeric config option should
+    // be used.
   }
 
-  initializeProtocolLogLevel();
-
-  if (GetStrValue(NAME_NFA_DM_CFG, (char*)nfa_dm_cfg, sizeof(nfa_dm_cfg)))
-    p_nfa_dm_cfg = (tNFA_DM_CFG*)&nfa_dm_cfg[0];
-
-  if (GetNumValue(NAME_NFA_MAX_EE_SUPPORTED, &num, sizeof(num))) {
-    nfa_ee_max_ee_cfg = num;
-    ALOGD("%s: Overriding NFA_EE_MAX_EE_SUPPORTED to use %d", func,
-          nfa_ee_max_ee_cfg);
-  }
-  if (GetNumValue(NAME_NFA_POLL_BAIL_OUT_MODE, &num, sizeof(num))) {
-    nfa_poll_bail_out_mode = num;
-    ALOGD("%s: Overriding NFA_POLL_BAIL_OUT_MODE to use %d", func,
-          nfa_poll_bail_out_mode);
+  if (NfcConfig::hasKey(NAME_NFA_MAX_EE_SUPPORTED)) {
+    nfa_ee_max_ee_cfg = NfcConfig::getUnsigned(NAME_NFA_MAX_EE_SUPPORTED);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("%s: Overriding NFA_EE_MAX_EE_SUPPORTED to use %d",
+                        func, nfa_ee_max_ee_cfg);
   }
 
-  if (GetStrValue(NAME_NFA_PROPRIETARY_CFG, (char*)nfa_proprietary_cfg,
-                  sizeof(tNFA_PROPRIETARY_CFG))) {
-    p_nfa_proprietary_cfg = (tNFA_PROPRIETARY_CFG*)&nfa_proprietary_cfg[0];
+  if (NfcConfig::hasKey(NAME_NFA_POLL_BAIL_OUT_MODE)) {
+    nfa_poll_bail_out_mode =
+        NfcConfig::getUnsigned(NAME_NFA_POLL_BAIL_OUT_MODE);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("%s: Overriding NFA_POLL_BAIL_OUT_MODE to use %d", func,
+                        nfa_poll_bail_out_mode);
   }
 
-  // configure device host whitelist of HCI host ID's; see specification ETSI TS
-  // 102 622 V11.1.10
-  //(2012-10), section 6.1.3.1
-  num = GetStrValue(NAME_DEVICE_HOST_WHITE_LIST, (char*)deviceHostWhiteList,
-                    sizeof(deviceHostWhiteList));
-  if (num) {
-    memmove(&jni_nfa_hci_cfg, p_nfa_hci_cfg, sizeof(jni_nfa_hci_cfg));
-    jni_nfa_hci_cfg.num_whitelist_host =
-        (uint8_t)num;  // number of HCI host ID's in the whitelist
-    jni_nfa_hci_cfg.p_whitelist = deviceHostWhiteList;  // array of HCI host
-                                                        // ID's
-    p_nfa_hci_cfg = &jni_nfa_hci_cfg;
+  if (NfcConfig::hasKey(NAME_NFA_PROPRIETARY_CFG)) {
+    std::vector<uint8_t> p_config =
+        NfcConfig::getBytes(NAME_NFA_PROPRIETARY_CFG);
+    if (p_config.size() > 0)
+      nfa_proprietary_cfg.pro_protocol_18092_active = p_config[0];
+    if (p_config.size() > 1)
+      nfa_proprietary_cfg.pro_protocol_b_prime = p_config[1];
+    if (p_config.size() > 2)
+      nfa_proprietary_cfg.pro_protocol_dual = p_config[2];
+    if (p_config.size() > 3)
+      nfa_proprietary_cfg.pro_protocol_15693 = p_config[3];
+    if (p_config.size() > 4)
+      nfa_proprietary_cfg.pro_protocol_kovio = p_config[4];
+    if (p_config.size() > 5) nfa_proprietary_cfg.pro_protocol_mfc = p_config[5];
+    if (p_config.size() > 6)
+      nfa_proprietary_cfg.pro_discovery_kovio_poll = p_config[6];
+    if (p_config.size() > 7)
+      nfa_proprietary_cfg.pro_discovery_b_prime_poll = p_config[7];
+    if (p_config.size() > 8)
+      nfa_proprietary_cfg.pro_discovery_b_prime_listen = p_config[8];
   }
 
-  initializeGlobalAppLogLevel();
+  // Configure whitelist of HCI host ID's
+  // See specification: ETSI TS 102 622, section 6.1.3.1
+  if (NfcConfig::hasKey(NAME_DEVICE_HOST_WHITE_LIST)) {
+    host_whitelist = NfcConfig::getBytes(NAME_DEVICE_HOST_WHITE_LIST);
+    nfa_hci_cfg.num_whitelist_host = host_whitelist.size();
+    nfa_hci_cfg.p_whitelist = &host_whitelist[0];
+  }
+
+  initializeGlobalDebugEnabledFlag();
 
   verify_stack_non_volatile_store();
-  if (GetNumValue(NAME_PRESERVE_STORAGE, (char*)&num, sizeof(num)) &&
-      (num == 1))
-    ALOGD("%s: preserve stack NV store", __func__);
-  else {
+  if (NfcConfig::hasKey(NAME_PRESERVE_STORAGE) &&
+      NfcConfig::getUnsigned(NAME_PRESERVE_STORAGE) == 1) {
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("%s: preserve stack NV store", __func__);
+  } else {
     delete_stack_non_volatile_store(FALSE);
   }
 
@@ -228,11 +319,8 @@
     mCondVar.wait();
   }
 
-  mHalCallback = NULL;
-  memset(&mHalEntryFuncs, 0, sizeof(mHalEntryFuncs));
-  InitializeHalDeviceContext();
   debug_nfcsnoop_init();
-  ALOGD("%s: exit", func);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s: exit", func);
 }
 
 /*******************************************************************************
@@ -248,18 +336,27 @@
   const char* func = "NfcAdaptation::Finalize";
   AutoThreadMutex a(sLock);
 
-  ALOGD("%s: enter", func);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s: enter", func);
   GKI_shutdown();
 
-  resetConfig();
+  NfcConfig::clear();
 
-  mCallback = NULL;
-  memset(&mHalEntryFuncs, 0, sizeof(mHalEntryFuncs));
-
-  ALOGD("%s: exit", func);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s: exit", func);
   delete this;
 }
 
+void NfcAdaptation::FactoryReset() {
+  if (mHal_1_1 != nullptr) {
+    mHal_1_1->factoryReset();
+  }
+}
+
+void NfcAdaptation::DeviceShutdown() {
+  if (mHal_1_1 != nullptr) {
+    mHal_1_1->closeForPowerOffCase();
+  }
+}
+
 /*******************************************************************************
 **
 ** Function:    NfcAdaptation::Dump
@@ -291,11 +388,11 @@
 ** Returns:     none
 **
 *******************************************************************************/
-uint32_t NfcAdaptation::NFCA_TASK(uint32_t arg) {
+uint32_t NfcAdaptation::NFCA_TASK(__attribute__((unused)) uint32_t arg) {
   const char* func = "NfcAdaptation::NFCA_TASK";
-  ALOGD("%s: enter", func);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s: enter", func);
   GKI_run(0);
-  ALOGD("%s: exit", func);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s: exit", func);
   return 0;
 }
 
@@ -308,9 +405,9 @@
 ** Returns:     none
 **
 *******************************************************************************/
-uint32_t NfcAdaptation::Thread(uint32_t arg) {
+uint32_t NfcAdaptation::Thread(__attribute__((unused)) uint32_t arg) {
   const char* func = "NfcAdaptation::Thread";
-  ALOGD("%s: enter", func);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s: enter", func);
 
   {
     ThreadCondVar CondVar;
@@ -323,7 +420,7 @@
   NfcAdaptation::GetInstance().signal();
 
   GKI_exit_task(GKI_get_taskid());
-  ALOGD("%s: exit", func);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s: exit", func);
   return 0;
 }
 
@@ -349,8 +446,6 @@
 *******************************************************************************/
 void NfcAdaptation::InitializeHalDeviceContext() {
   const char* func = "NfcAdaptation::InitializeHalDeviceContext";
-  ALOGD("%s: enter", func);
-  int ret = 0;  // 0 means success
 
   mHalEntryFuncs.initialize = HalInitialize;
   mHalEntryFuncs.terminate = HalTerminate;
@@ -362,12 +457,15 @@
   mHalEntryFuncs.control_granted = HalControlGranted;
   mHalEntryFuncs.power_cycle = HalPowerCycle;
   mHalEntryFuncs.get_max_ee = HalGetMaxNfcee;
-  ALOGI("%s: INfc::getService()", func);
-  mHal = INfc::getService();
+  LOG(INFO) << StringPrintf("%s: INfc::getService()", func);
+  mHal = mHal_1_1 = INfcV1_1::getService();
+  if (mHal_1_1 == nullptr) {
+    mHal = INfc::getService();
+  }
   LOG_FATAL_IF(mHal == nullptr, "Failed to retrieve the NFC HAL!");
-  ALOGI("%s: INfc::getService() returned %p (%s)", func, mHal.get(),
-        (mHal->isRemote() ? "remote" : "local"));
-  ALOGD("%s: exit", func);
+  LOG(INFO) << StringPrintf("%s: INfc::getService() returned %p (%s)", func,
+                            mHal.get(),
+                            (mHal->isRemote() ? "remote" : "local"));
 }
 
 /*******************************************************************************
@@ -382,7 +480,7 @@
 *******************************************************************************/
 void NfcAdaptation::HalInitialize() {
   const char* func = "NfcAdaptation::HalInitialize";
-  ALOGD("%s", func);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s", func);
 }
 
 /*******************************************************************************
@@ -397,7 +495,7 @@
 *******************************************************************************/
 void NfcAdaptation::HalTerminate() {
   const char* func = "NfcAdaptation::HalTerminate";
-  ALOGD("%s", func);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s", func);
 }
 
 /*******************************************************************************
@@ -412,9 +510,13 @@
 void NfcAdaptation::HalOpen(tHAL_NFC_CBACK* p_hal_cback,
                             tHAL_NFC_DATA_CBACK* p_data_cback) {
   const char* func = "NfcAdaptation::HalOpen";
-  ALOGD("%s", func);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s", func);
   mCallback = new NfcClientCallback(p_hal_cback, p_data_cback);
-  mHal->open(mCallback);
+  if (mHal_1_1 != nullptr) {
+    mHal_1_1->open_1_1(mCallback);
+  } else {
+    mHal->open(mCallback);
+  }
 }
 
 /*******************************************************************************
@@ -428,7 +530,7 @@
 *******************************************************************************/
 void NfcAdaptation::HalClose() {
   const char* func = "NfcAdaptation::HalClose";
-  ALOGD("%s", func);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s", func);
   mHal->close();
 }
 
@@ -445,7 +547,7 @@
 void NfcAdaptation::HalDeviceContextCallback(nfc_event_t event,
                                              nfc_status_t event_status) {
   const char* func = "NfcAdaptation::HalDeviceContextCallback";
-  ALOGD("%s: event=%u", func, event);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s: event=%u", func, event);
   if (mHalCallback) mHalCallback(event, (tHAL_NFC_STATUS)event_status);
 }
 
@@ -462,7 +564,8 @@
 void NfcAdaptation::HalDeviceContextDataCallback(uint16_t data_len,
                                                  uint8_t* p_data) {
   const char* func = "NfcAdaptation::HalDeviceContextDataCallback";
-  ALOGD("%s: len=%u", func, data_len);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("%s: len=%u", func, data_len);
   if (mHalDataCallback) mHalDataCallback(data_len, p_data);
 }
 
@@ -477,7 +580,7 @@
 *******************************************************************************/
 void NfcAdaptation::HalWrite(uint16_t data_len, uint8_t* p_data) {
   const char* func = "NfcAdaptation::HalWrite";
-  ALOGD("%s", func);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s", func);
   ::android::hardware::nfc::V1_0::NfcData data;
   data.setToExternal(p_data, data_len);
   mHal->write(data);
@@ -495,7 +598,7 @@
 void NfcAdaptation::HalCoreInitialized(uint16_t data_len,
                                        uint8_t* p_core_init_rsp_params) {
   const char* func = "NfcAdaptation::HalCoreInitialized";
-  ALOGD("%s", func);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s", func);
   hidl_vec<uint8_t> data;
   data.setToExternal(p_core_init_rsp_params, data_len);
 
@@ -518,7 +621,7 @@
 *******************************************************************************/
 bool NfcAdaptation::HalPrediscover() {
   const char* func = "NfcAdaptation::HalPrediscover";
-  ALOGD("%s", func);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s", func);
   bool retval = FALSE;
   mHal->prediscover();
   return retval;
@@ -539,7 +642,7 @@
 *******************************************************************************/
 void NfcAdaptation::HalControlGranted() {
   const char* func = "NfcAdaptation::HalControlGranted";
-  ALOGD("%s", func);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s", func);
   mHal->controlGranted();
 }
 
@@ -554,7 +657,7 @@
 *******************************************************************************/
 void NfcAdaptation::HalPowerCycle() {
   const char* func = "NfcAdaptation::HalPowerCycle";
-  ALOGD("%s", func);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s", func);
   mHal->powerCycle();
 }
 
@@ -569,8 +672,7 @@
 *******************************************************************************/
 uint8_t NfcAdaptation::HalGetMaxNfcee() {
   const char* func = "NfcAdaptation::HalPowerCycle";
-  uint8_t maxNfcee = 0;
-  ALOGD("%s", func);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s", func);
 
   return nfa_ee_max_ee_cfg;
 }
@@ -586,21 +688,21 @@
 *******************************************************************************/
 void NfcAdaptation::DownloadFirmware() {
   const char* func = "NfcAdaptation::DownloadFirmware";
-  ALOGD("%s: enter", func);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s: enter", func);
   HalInitialize();
 
   mHalOpenCompletedEvent.lock();
-  ALOGD("%s: try open HAL", func);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s: try open HAL", func);
   HalOpen(HalDownloadFirmwareCallback, HalDownloadFirmwareDataCallback);
   mHalOpenCompletedEvent.wait();
 
   mHalCloseCompletedEvent.lock();
-  ALOGD("%s: try close HAL", func);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s: try close HAL", func);
   HalClose();
   mHalCloseCompletedEvent.wait();
 
   HalTerminate();
-  ALOGD("%s: exit", func);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s: exit", func);
 }
 
 /*******************************************************************************
@@ -613,17 +715,21 @@
 **
 *******************************************************************************/
 void NfcAdaptation::HalDownloadFirmwareCallback(nfc_event_t event,
+                                                __attribute__((unused))
                                                 nfc_status_t event_status) {
   const char* func = "NfcAdaptation::HalDownloadFirmwareCallback";
-  ALOGD("%s: event=0x%X", func, event);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("%s: event=0x%X", func, event);
   switch (event) {
     case HAL_NFC_OPEN_CPLT_EVT: {
-      ALOGD("%s: HAL_NFC_OPEN_CPLT_EVT", func);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("%s: HAL_NFC_OPEN_CPLT_EVT", func);
       mHalOpenCompletedEvent.signal();
       break;
     }
     case HAL_NFC_CLOSE_CPLT_EVT: {
-      ALOGD("%s: HAL_NFC_CLOSE_CPLT_EVT", func);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("%s: HAL_NFC_CLOSE_CPLT_EVT", func);
       mHalCloseCompletedEvent.signal();
       break;
     }
@@ -639,7 +745,9 @@
 ** Returns:     None.
 **
 *******************************************************************************/
-void NfcAdaptation::HalDownloadFirmwareDataCallback(uint16_t data_len,
+void NfcAdaptation::HalDownloadFirmwareDataCallback(__attribute__((unused))
+                                                    uint16_t data_len,
+                                                    __attribute__((unused))
                                                     uint8_t* p_data) {}
 
 /*******************************************************************************
diff --git a/src/adaptation/OverrideLog.cpp b/src/adaptation/OverrideLog.cpp
deleted file mode 100644
index 81beafc..0000000
--- a/src/adaptation/OverrideLog.cpp
+++ /dev/null
@@ -1,100 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  Override the ALOGD(), ALOGE(), and other logging macros from
- *  /system/core/include/cutils/log.h
- *
- ******************************************************************************/
-#include <cutils/properties.h>
-#include <string.h>
-#include "_OverrideLog.h"
-#include "android_logmsg.h"
-#include "config.h"
-
-#undef LOG_TAG
-#define LOG_TAG "BrcmNfcJni"
-
-/*******************************************************************************
-**
-** Function:        initializeGlobalAppLogLevel
-**
-** Description:     Initialize and get global logging level from .conf or
-**                  Android property nfc.app_log_level.  The Android property
-**                  overrides .conf variable.
-**
-** Returns:         Global log level:
-**                  BT_TRACE_LEVEL_NONE    0 * No trace messages to be generated
-**                  BT_TRACE_LEVEL_ERROR   1 * Error condition trace messages
-**                  BT_TRACE_LEVEL_WARNING 2 * Warning condition trace messages
-**                  BT_TRACE_LEVEL_API     3 * API traces
-**                  BT_TRACE_LEVEL_EVENT   4 * Debug messages for events
-**                  BT_TRACE_LEVEL_DEBUG   5 * Debug messages (general)
-**
-*******************************************************************************/
-unsigned char initializeGlobalAppLogLevel() {
-  unsigned long num = 0;
-  char valueStr[PROPERTY_VALUE_MAX] = {0};
-
-  num = 1;
-  if (GetNumValue(NAME_APPL_TRACE_LEVEL, &num, sizeof(num)))
-    appl_trace_level = (unsigned char)num;
-
-  int len = property_get("nfc.app_log_level", valueStr, "");
-  if (len > 0) {
-    // let Android property override .conf variable
-    sscanf(valueStr, "%lu", &num);
-    appl_trace_level = (unsigned char)num;
-  }
-
-  // 0xFF is a special value used by the stack to query the current
-  // trace level; it does not change any trace level
-  if (appl_trace_level == 0xFF) appl_trace_level = BT_TRACE_LEVEL_DEBUG;
-  ALOGD("%s: level=%u", __func__, appl_trace_level);
-
-  if (appl_trace_level < BT_TRACE_LEVEL_DEBUG) {
-    // display protocol traces in raw format
-    ProtoDispAdapterUseRawOutput(TRUE);
-  }
-  return appl_trace_level;
-}
-
-uint32_t initializeProtocolLogLevel() {
-  uint32_t num = 0;
-  char valueStr[PROPERTY_VALUE_MAX] = {0};
-
-  if (GetNumValue(NAME_PROTOCOL_TRACE_LEVEL, &num, sizeof(num)))
-    ScrProtocolTraceFlag = num;
-
-  int len = property_get("nfc.enable_protocol_log", valueStr, "");
-  if (len > 0) {
-    if (strncmp("0", valueStr, 1) == 0) {
-      ScrProtocolTraceFlag = 0;
-    } else {
-      ScrProtocolTraceFlag = ~0;
-    }
-  }
-
-  return ScrProtocolTraceFlag;
-}
-
-void initializeGlobalAppDtaMode() {
-  appl_dta_mode_flag = 0x01;
-  ALOGD("%s: DTA Enabled", __func__);
-}
diff --git a/src/adaptation/android_logmsg.cc b/src/adaptation/android_logmsg.cc
new file mode 100644
index 0000000..bdfe3b9
--- /dev/null
+++ b/src/adaptation/android_logmsg.cc
@@ -0,0 +1,108 @@
+/******************************************************************************
+ *
+ *  Copyright (C) 1999-2012 Broadcom Corporation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at:
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ ******************************************************************************/
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+#include <cutils/log.h>
+
+#include "android_logmsg.h"
+#include "buildcfg.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
+
+#define MAX_NCI_PACKET_SIZE 259
+#define BTE_LOG_BUF_SIZE 1024
+#define BTE_LOG_MAX_SIZE (BTE_LOG_BUF_SIZE - 12)
+#define MAX_LOGCAT_LINE 4096
+#define PRINT(s) __android_log_write(ANDROID_LOG_DEBUG, "BrcmNci", s)
+static char log_line[MAX_LOGCAT_LINE];
+static const char* sTable = "0123456789abcdef";
+
+static void ToHex(const uint8_t* data, uint16_t len, char* hexString,
+                  uint16_t hexStringSize);
+
+void ProtoDispAdapterDisplayNciPacket(uint8_t* nciPacket, uint16_t nciPacketLen,
+                                      bool is_recv) {
+  if (!nfc_debug_enabled) return;
+
+  char line_buf[(MAX_NCI_PACKET_SIZE * 2) + 1];
+  ToHex(nciPacket, nciPacketLen, line_buf, sizeof(line_buf));
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("%s:%s", is_recv ? "NciR" : "NciX", line_buf);
+}
+
+void ToHex(const uint8_t* data, uint16_t len, char* hexString,
+           uint16_t hexStringSize) {
+  int i = 0, j = 0;
+  for (i = 0, j = 0; i < len && j < hexStringSize - 3; i++) {
+    hexString[j++] = sTable[(*data >> 4) & 0xf];
+    hexString[j++] = sTable[*data & 0xf];
+    data++;
+  }
+  hexString[j] = '\0';
+}
+
+inline void byte2hex(const char* data, char** str) {
+  **str = sTable[(*data >> 4) & 0xf];
+  ++*str;
+  **str = sTable[*data & 0xf];
+  ++*str;
+}
+
+/***************************************************************************
+**
+** Function         DispLLCP
+**
+** Description      Log LLCP packet as hex-ascii bytes.
+**
+** Returns          None.
+**
+***************************************************************************/
+void DispLLCP(NFC_HDR* p_buf, bool is_recv) {
+  if (!nfc_debug_enabled) return;
+
+  uint32_t nBytes = ((NFC_HDR_SIZE + p_buf->offset + p_buf->len) * 2) + 1;
+  if (nBytes > sizeof(log_line)) return;
+
+  uint8_t* data = (uint8_t*)p_buf;
+  int data_len = NFC_HDR_SIZE + p_buf->offset + p_buf->len;
+  ToHex(data, data_len, log_line, sizeof(log_line));
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("%s:%s", is_recv ? "LlcpR" : "LlcpX", log_line);
+}
+
+/***************************************************************************
+**
+** Function         DispHcp
+**
+** Description      Log raw HCP packet as hex-ascii bytes
+**
+** Returns          None.
+**
+***************************************************************************/
+void DispHcp(uint8_t* data, uint16_t len, bool is_recv) {
+  if (!nfc_debug_enabled) return;
+
+  uint32_t nBytes = (len * 2) + 1;
+  if (nBytes > sizeof(log_line)) return;
+
+  ToHex(data, len, log_line, sizeof(log_line));
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("%s:%s", is_recv ? "HcpR" : "HcpX", log_line);
+}
diff --git a/src/adaptation/android_logmsg.cpp b/src/adaptation/android_logmsg.cpp
deleted file mode 100644
index c7a7250..0000000
--- a/src/adaptation/android_logmsg.cpp
+++ /dev/null
@@ -1,302 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 1999-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-#include "_OverrideLog.h"
-
-#include <cutils/log.h>
-#include "android_logmsg.h"
-#include "buildcfg.h"
-#include "nfc_target.h"
-
-extern uint32_t ScrProtocolTraceFlag;
-#define MAX_NCI_PACKET_SIZE 259
-#define BTE_LOG_BUF_SIZE 1024
-#define BTE_LOG_MAX_SIZE (BTE_LOG_BUF_SIZE - 12)
-#define MAX_LOGCAT_LINE 4096
-#define PRINT(s) __android_log_write(ANDROID_LOG_DEBUG, "BrcmNci", s)
-static char log_line[MAX_LOGCAT_LINE];
-static const char* sTable = "0123456789abcdef";
-static bool sIsUseRaw = FALSE;
-static void ToHex(const uint8_t* data, uint16_t len, char* hexString,
-                  uint16_t hexStringSize);
-static void dumpbin(const char* data, int size, uint32_t trace_layer,
-                    uint32_t trace_type);
-static inline void word2hex(const char* data, char** hex);
-static inline void byte2char(const char* data, char** str);
-static inline void byte2hex(const char* data, char** str);
-
-void BTDISP_LOCK_LOG() {}
-
-void BTDISP_UNLOCK_LOG() {}
-
-void BTDISP_INIT_LOCK() {}
-
-void BTDISP_UNINIT_LOCK() {}
-
-void ProtoDispAdapterUseRawOutput(bool isUseRaw) { sIsUseRaw = isUseRaw; }
-
-void ProtoDispAdapterDisplayNciPacket(uint8_t* nciPacket, uint16_t nciPacketLen,
-                                      bool is_recv) {
-  // Protocol decoder is not available, so decode NCI packet into hex numbers.
-  if (!(ScrProtocolTraceFlag & SCR_PROTO_TRACE_NCI)) return;
-  char line_buf[(MAX_NCI_PACKET_SIZE * 2) + 1];
-  ToHex(nciPacket, nciPacketLen, line_buf, sizeof(line_buf));
-  __android_log_write(ANDROID_LOG_DEBUG, (is_recv) ? "BrcmNciR" : "BrcmNciX",
-                      line_buf);
-}
-
-void ToHex(const uint8_t* data, uint16_t len, char* hexString,
-           uint16_t hexStringSize) {
-  int i = 0, j = 0;
-  for (i = 0, j = 0; i < len && j < hexStringSize - 3; i++) {
-    hexString[j++] = sTable[(*data >> 4) & 0xf];
-    hexString[j++] = sTable[*data & 0xf];
-    data++;
-  }
-  hexString[j] = '\0';
-}
-
-// Protodisp code calls ScrLog() to print decoded texts.
-void ScrLog(uint32_t trace_set_mask, const char* fmt_str, ...) {
-  static char buffer[BTE_LOG_BUF_SIZE];
-  va_list ap;
-
-  va_start(ap, fmt_str);
-  vsnprintf(buffer, BTE_LOG_MAX_SIZE, fmt_str, ap);
-  va_end(ap);
-  __android_log_write(ANDROID_LOG_INFO, "BrcmNci", buffer);
-}
-
-uint8_t* scru_dump_hex(uint8_t* p, char* pTitle, uint32_t len, uint32_t layer,
-                       uint32_t type) {
-  if (pTitle && *pTitle) PRINT(pTitle);
-  dumpbin((char*)p, len, layer, type);
-  return p;
-}
-
-void dumpbin(const char* data, int size, uint32_t trace_layer,
-             uint32_t trace_type) {
-  char line_buff[256];
-  char* line;
-  int i, j, addr;
-  const int width = 16;
-  if (size <= 0) return;
-  for (i = 0; i < size / width; i++) {
-    line = line_buff;
-    // write address:
-    addr = i * width;
-    word2hex((const char*)&addr, &line);
-    *line++ = ':';
-    *line++ = ' ';
-    // write hex of data
-    for (j = 0; j < width; j++) {
-      byte2hex(&data[j], &line);
-      *line++ = ' ';
-    }
-    // write char of data
-    for (j = 0; j < width; j++) byte2char(data++, &line);
-    // wirte the end of line
-    *line = 0;
-    // output the line
-    PRINT(line_buff);
-  }
-  // last line of left over if any
-  int leftover = size % width;
-  if (leftover > 0) {
-    line = line_buff;
-    // write address:
-    addr = i * width;
-    word2hex((const char*)&addr, &line);
-    *line++ = ':';
-    *line++ = ' ';
-    // write hex of data
-    for (j = 0; j < leftover; j++) {
-      byte2hex(&data[j], &line);
-      *line++ = ' ';
-    }
-    // write hex padding
-    for (; j < width; j++) {
-      *line++ = ' ';
-      *line++ = ' ';
-      *line++ = ' ';
-    }
-    // write char of data
-    for (j = 0; j < leftover; j++) byte2char(data++, &line);
-    // write the end of line
-    *line = 0;
-    // output the line
-    PRINT(line_buff);
-  }
-}
-
-inline void word2hex(const char* data, char** hex) {
-  byte2hex(&data[1], hex);
-  byte2hex(&data[0], hex);
-}
-
-inline void byte2char(const char* data, char** str) {
-  **str = *data < ' ' ? '.' : *data > '~' ? '.' : *data;
-  ++(*str);
-}
-
-inline void byte2hex(const char* data, char** str) {
-  **str = sTable[(*data >> 4) & 0xf];
-  ++*str;
-  **str = sTable[*data & 0xf];
-  ++*str;
-}
-
-// Decode a few Bluetooth HCI packets into hex numbers.
-void DispHciCmd(NFC_HDR* p_buf) {
-  uint32_t nBytes = ((NFC_HDR_SIZE + p_buf->offset + p_buf->len) * 2) + 1;
-  uint8_t* data = (uint8_t*)p_buf;
-  int data_len = NFC_HDR_SIZE + p_buf->offset + p_buf->len;
-
-  if (appl_trace_level < BT_TRACE_LEVEL_DEBUG) return;
-
-  if (nBytes > sizeof(log_line)) return;
-
-  ToHex(data, data_len, log_line, sizeof(log_line));
-  __android_log_write(ANDROID_LOG_DEBUG, "BrcmHciX", log_line);
-}
-
-// Decode a few Bluetooth HCI packets into hex numbers.
-void DispHciEvt(NFC_HDR* p_buf) {
-  uint32_t nBytes = ((NFC_HDR_SIZE + p_buf->offset + p_buf->len) * 2) + 1;
-  uint8_t* data = (uint8_t*)p_buf;
-  int data_len = NFC_HDR_SIZE + p_buf->offset + p_buf->len;
-
-  if (appl_trace_level < BT_TRACE_LEVEL_DEBUG) return;
-
-  if (nBytes > sizeof(log_line)) return;
-
-  ToHex(data, data_len, log_line, sizeof(log_line));
-  __android_log_write(ANDROID_LOG_DEBUG, "BrcmHciR", log_line);
-}
-
-/***************************************************************************
-**
-** Function         DispLLCP
-**
-** Description      Log LLCP packet as hex-ascii bytes.
-**
-** Returns          None.
-**
-***************************************************************************/
-void DispLLCP(NFC_HDR* p_buf, bool is_recv) {
-  uint32_t nBytes = ((NFC_HDR_SIZE + p_buf->offset + p_buf->len) * 2) + 1;
-  uint8_t* data = (uint8_t*)p_buf;
-  int data_len = NFC_HDR_SIZE + p_buf->offset + p_buf->len;
-
-  if (appl_trace_level < BT_TRACE_LEVEL_DEBUG) return;
-
-  if (nBytes > sizeof(log_line)) return;
-
-  ToHex(data, data_len, log_line, sizeof(log_line));
-  __android_log_write(ANDROID_LOG_DEBUG, (is_recv) ? "BrcmLlcpR" : "BrcmLlcpX",
-                      log_line);
-}
-
-/***************************************************************************
-**
-** Function         DispHcp
-**
-** Description      Log raw HCP packet as hex-ascii bytes
-**
-** Returns          None.
-**
-***************************************************************************/
-void DispHcp(uint8_t* data, uint16_t len, bool is_recv) {
-  uint32_t nBytes = (len * 2) + 1;
-
-  if (appl_trace_level < BT_TRACE_LEVEL_DEBUG) return;
-
-  // Only trace HCP if we're tracing HCI as well
-  if (!(ScrProtocolTraceFlag & SCR_PROTO_TRACE_HCI_SUMMARY)) return;
-
-  if (nBytes > sizeof(log_line)) return;
-
-  ToHex(data, len, log_line, sizeof(log_line));
-  __android_log_write(ANDROID_LOG_DEBUG, (is_recv) ? "BrcmHcpR" : "BrcmHcpX",
-                      log_line);
-}
-
-void DispSNEP(uint8_t local_sap, uint8_t remote_sap, NFC_HDR* p_buf,
-              bool is_first, bool is_rx) {}
-void DispCHO(uint8_t* pMsg, uint32_t MsgLen, bool is_rx) {}
-void DispT3TagMessage(NFC_HDR* p_msg, bool is_rx) {}
-void DispRWT4Tags(NFC_HDR* p_buf, bool is_rx) {}
-void DispCET4Tags(NFC_HDR* p_buf, bool is_rx) {}
-void DispRWI93Tag(NFC_HDR* p_buf, bool is_rx, uint8_t command_to_respond) {}
-void DispNDEFMsg(uint8_t* pMsg, uint32_t MsgLen, bool is_recv) {}
-
-/*******************************************************************************
-**
-** Function:        LogMsg
-**
-** Description:     Print messages from NFC stack.
-**
-** Returns:         None.
-**
-*******************************************************************************/
-void LogMsg(uint32_t trace_set_mask, const char* fmt_str, ...) {
-  static char buffer[BTE_LOG_BUF_SIZE];
-  va_list ap;
-  uint32_t trace_type =
-      trace_set_mask & 0x07;  // lower 3 bits contain trace type
-  int android_log_type = ANDROID_LOG_INFO;
-
-  va_start(ap, fmt_str);
-  vsnprintf(buffer, BTE_LOG_MAX_SIZE, fmt_str, ap);
-  va_end(ap);
-  if (trace_type == TRACE_TYPE_ERROR) android_log_type = ANDROID_LOG_ERROR;
-  __android_log_write(android_log_type, LOGMSG_TAG_NAME, buffer);
-}
-
-void LogMsg_0(uint32_t maskTraceSet, const char* p_str) {
-  LogMsg(maskTraceSet, p_str);
-}
-
-void LogMsg_1(uint32_t maskTraceSet, const char* fmt_str, uintptr_t p1) {
-  LogMsg(maskTraceSet, fmt_str, p1);
-}
-
-void LogMsg_2(uint32_t maskTraceSet, const char* fmt_str, uintptr_t p1,
-              uintptr_t p2) {
-  LogMsg(maskTraceSet, fmt_str, p1, p2);
-}
-
-void LogMsg_3(uint32_t maskTraceSet, const char* fmt_str, uintptr_t p1,
-              uintptr_t p2, uintptr_t p3) {
-  LogMsg(maskTraceSet, fmt_str, p1, p2, p3);
-}
-
-void LogMsg_4(uint32_t maskTraceSet, const char* fmt_str, uintptr_t p1,
-              uintptr_t p2, uintptr_t p3, uintptr_t p4) {
-  LogMsg(maskTraceSet, fmt_str, p1, p2, p3, p4);
-}
-
-void LogMsg_5(uint32_t maskTraceSet, const char* fmt_str, uintptr_t p1,
-              uintptr_t p2, uintptr_t p3, uintptr_t p4, uintptr_t p5) {
-  LogMsg(maskTraceSet, fmt_str, p1, p2, p3, p4, p5);
-}
-
-void LogMsg_6(uint32_t maskTraceSet, const char* fmt_str, uintptr_t p1,
-              uintptr_t p2, uintptr_t p3, uintptr_t p4, uintptr_t p5,
-              uintptr_t p6) {
-  LogMsg(maskTraceSet, fmt_str, p1, p2, p3, p4, p5, p6);
-}
diff --git a/src/adaptation/config.cpp b/src/adaptation/config.cpp
deleted file mode 100644
index 8085daa..0000000
--- a/src/adaptation/config.cpp
+++ /dev/null
@@ -1,683 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2011-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-#include "config.h"
-#include <stdio.h>
-#include <sys/stat.h>
-#include <list>
-#include <string>
-#include <vector>
-#include "_OverrideLog.h"
-
-#undef LOG_TAG
-#define LOG_TAG "NfcAdaptation"
-
-const char* transport_config_paths[] = {"/odm/etc/", "/vendor/etc/", "/etc/"};
-const int transport_config_path_size =
-    (sizeof(transport_config_paths) / sizeof(transport_config_paths[0]));
-
-#define config_name "libnfc-brcm.conf"
-#define extra_config_base "libnfc-brcm-"
-#define extra_config_ext ".conf"
-#define IsStringValue 0x80000000
-
-using namespace ::std;
-
-class CNfcParam : public string {
- public:
-  CNfcParam();
-  CNfcParam(const char* name, const string& value);
-  CNfcParam(const char* name, unsigned long value);
-  virtual ~CNfcParam();
-  unsigned long numValue() const { return m_numValue; }
-  const char* str_value() const { return m_str_value.c_str(); }
-  size_t str_len() const { return m_str_value.length(); }
-
- private:
-  string m_str_value;
-  unsigned long m_numValue;
-};
-
-class CNfcConfig : public vector<const CNfcParam*> {
- public:
-  virtual ~CNfcConfig();
-  static CNfcConfig& GetInstance();
-  friend void readOptionalConfig(const char* optional);
-
-  bool getValue(const char* name, char* pValue, size_t& len) const;
-  bool getValue(const char* name, unsigned long& rValue) const;
-  bool getValue(const char* name, unsigned short& rValue) const;
-  const CNfcParam* find(const char* p_name) const;
-  void clean();
-
- private:
-  CNfcConfig();
-  bool readConfig(const char* name, bool bResetContent);
-  void moveFromList();
-  void moveToList();
-  void add(const CNfcParam* pParam);
-  list<const CNfcParam*> m_list;
-  bool mValidFile;
-
-  unsigned long state;
-
-  inline bool Is(unsigned long f) { return (state & f) == f; }
-  inline void Set(unsigned long f) { state |= f; }
-  inline void Reset(unsigned long f) { state &= ~f; }
-};
-
-/*******************************************************************************
-**
-** Function:    isPrintable()
-**
-** Description: detremine if a char is printable
-**
-** Returns:     none
-**
-*******************************************************************************/
-inline bool isPrintable(char c) {
-  return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') ||
-         (c >= '0' && c <= '9') || c == '/' || c == '_' || c == '-' || c == '.';
-}
-
-/*******************************************************************************
-**
-** Function:    isDigit()
-**
-** Description: detremine if a char is numeral digit
-**
-** Returns:     none
-**
-*******************************************************************************/
-inline bool isDigit(char c, int base) {
-  if ('0' <= c && c <= '9') return true;
-  if (base == 16) {
-    if (('A' <= c && c <= 'F') || ('a' <= c && c <= 'f')) return true;
-  }
-  return false;
-}
-
-/*******************************************************************************
-**
-** Function:    getDigitValue()
-**
-** Description: return numercal value of a char
-**
-** Returns:     none
-**
-*******************************************************************************/
-inline int getDigitValue(char c, int base) {
-  if ('0' <= c && c <= '9') return c - '0';
-  if (base == 16) {
-    if ('A' <= c && c <= 'F')
-      return c - 'A' + 10;
-    else if ('a' <= c && c <= 'f')
-      return c - 'a' + 10;
-  }
-  return 0;
-}
-
-/*******************************************************************************
-**
-** Function:    findConfigFilePathFromTransportConfigPaths()
-**
-** Description: find a config file path with a given config name from transport
-**              config paths
-**
-** Returns:     none
-**
-*******************************************************************************/
-void findConfigFilePathFromTransportConfigPaths(const string& configName,
-                                                string& filePath) {
-  for (int i = 0; i < transport_config_path_size - 1; i++) {
-    filePath.assign(transport_config_paths[i]);
-    filePath += configName;
-    struct stat file_stat;
-    if (stat(filePath.c_str(), &file_stat) == 0 && S_ISREG(file_stat.st_mode)) {
-      return;
-    }
-  }
-  filePath.assign(transport_config_paths[transport_config_path_size - 1]);
-  filePath += configName;
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::readConfig()
-**
-** Description: read Config settings and parse them into a linked list
-**              move the element from linked list to a array at the end
-**
-** Returns:     none
-**
-*******************************************************************************/
-bool CNfcConfig::readConfig(const char* name, bool bResetContent) {
-  enum {
-    BEGIN_LINE = 1,
-    TOKEN,
-    STR_VALUE,
-    NUM_VALUE,
-    BEGIN_HEX,
-    BEGIN_QUOTE,
-    END_LINE
-  };
-
-  FILE* fd = NULL;
-  string token;
-  string strValue;
-  unsigned long numValue = 0;
-  CNfcParam* pParam = NULL;
-  int i = 0;
-  int base = 0;
-  char c = 0;
-
-  state = BEGIN_LINE;
-  /* open config file, read it into a buffer */
-  if ((fd = fopen(name, "rb")) == NULL) {
-    ALOGD("%s Cannot open config file %s\n", __func__, name);
-    if (bResetContent) {
-      ALOGD("%s Using default value for all settings\n", __func__);
-      mValidFile = false;
-    }
-    return false;
-  }
-  ALOGD("%s Opened %s config %s\n", __func__,
-        (bResetContent ? "base" : "optional"), name);
-
-  mValidFile = true;
-  if (size() > 0) {
-    if (bResetContent)
-      clean();
-    else
-      moveToList();
-  }
-
-  for (;;) {
-    if (feof(fd) || fread(&c, 1, 1, fd) != 1) {
-      if (state == BEGIN_LINE) break;
-
-      // got to the EOF but not in BEGIN_LINE state so the file
-      // probably does not end with a newline, so the parser has
-      // not processed current line, simulate a newline in the file
-      c = '\n';
-    }
-
-    switch (state & 0xff) {
-      case BEGIN_LINE:
-        if (c == '#')
-          state = END_LINE;
-        else if (isPrintable(c)) {
-          i = 0;
-          token.erase();
-          strValue.erase();
-          state = TOKEN;
-          token.push_back(c);
-        }
-        break;
-      case TOKEN:
-        if (c == '=') {
-          token.push_back('\0');
-          state = BEGIN_QUOTE;
-        } else if (isPrintable(c))
-          token.push_back(c);
-        else
-          state = END_LINE;
-        break;
-      case BEGIN_QUOTE:
-        if (c == '"') {
-          state = STR_VALUE;
-          base = 0;
-        } else if (c == '0')
-          state = BEGIN_HEX;
-        else if (isDigit(c, 10)) {
-          state = NUM_VALUE;
-          base = 10;
-          numValue = getDigitValue(c, base);
-          i = 0;
-        } else if (c == '{') {
-          state = NUM_VALUE;
-          base = 16;
-          i = 0;
-          Set(IsStringValue);
-        } else
-          state = END_LINE;
-        break;
-      case BEGIN_HEX:
-        if (c == 'x' || c == 'X') {
-          state = NUM_VALUE;
-          base = 16;
-          numValue = 0;
-          i = 0;
-          break;
-        } else if (isDigit(c, 10)) {
-          state = NUM_VALUE;
-          base = 10;
-          numValue = getDigitValue(c, base);
-          break;
-        } else if (c != '\n' && c != '\r') {
-          state = END_LINE;
-          break;
-        }
-      // fal through to numValue to handle numValue
-
-      case NUM_VALUE:
-        if (isDigit(c, base)) {
-          numValue *= base;
-          numValue += getDigitValue(c, base);
-          ++i;
-        } else if (base == 16 &&
-                   (c == ':' || c == '-' || c == ' ' || c == '}')) {
-          if (i > 0) {
-            int n = (i + 1) / 2;
-            while (n-- > 0) {
-              unsigned char c = (numValue >> (n * 8)) & 0xFF;
-              strValue.push_back(c);
-            }
-          }
-          Set(IsStringValue);
-          numValue = 0;
-          i = 0;
-        } else {
-          if (c == '\n' || c == '\r')
-            state = BEGIN_LINE;
-          else
-            state = END_LINE;
-          if (Is(IsStringValue) && base == 16 && i > 0) {
-            int n = (i + 1) / 2;
-            while (n-- > 0) strValue.push_back(((numValue >> (n * 8)) & 0xFF));
-          }
-          if (strValue.length() > 0)
-            pParam = new CNfcParam(token.c_str(), strValue);
-          else
-            pParam = new CNfcParam(token.c_str(), numValue);
-          add(pParam);
-          strValue.erase();
-          numValue = 0;
-        }
-        break;
-      case STR_VALUE:
-        if (c == '"') {
-          strValue.push_back('\0');
-          state = END_LINE;
-          pParam = new CNfcParam(token.c_str(), strValue);
-          add(pParam);
-        } else if (isPrintable(c))
-          strValue.push_back(c);
-        break;
-      case END_LINE:
-        if (c == '\n' || c == '\r') state = BEGIN_LINE;
-        break;
-      default:
-        break;
-    }
-
-    if (feof(fd)) break;
-  }
-
-  fclose(fd);
-
-  moveFromList();
-  return size() > 0;
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::CNfcConfig()
-**
-** Description: class constructor
-**
-** Returns:     none
-**
-*******************************************************************************/
-CNfcConfig::CNfcConfig() : mValidFile(true), state(0) {}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::~CNfcConfig()
-**
-** Description: class destructor
-**
-** Returns:     none
-**
-*******************************************************************************/
-CNfcConfig::~CNfcConfig() {}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::GetInstance()
-**
-** Description: get class singleton object
-**
-** Returns:     none
-**
-*******************************************************************************/
-CNfcConfig& CNfcConfig::GetInstance() {
-  static CNfcConfig theInstance;
-
-  if (theInstance.size() == 0 && theInstance.mValidFile) {
-    string strPath;
-    findConfigFilePathFromTransportConfigPaths(config_name, strPath);
-    theInstance.readConfig(strPath.c_str(), true);
-  }
-
-  return theInstance;
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::getValue()
-**
-** Description: get a string value of a setting
-**
-** Returns:     true if setting exists
-**              false if setting does not exist
-**
-*******************************************************************************/
-bool CNfcConfig::getValue(const char* name, char* pValue, size_t& len) const {
-  const CNfcParam* pParam = find(name);
-  if (pParam == NULL) return false;
-
-  if (pParam->str_len() > 0) {
-    memset(pValue, 0, len);
-    if (len > pParam->str_len()) len = pParam->str_len();
-    memcpy(pValue, pParam->str_value(), len);
-    return true;
-  }
-  return false;
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::getValue()
-**
-** Description: get a long numerical value of a setting
-**
-** Returns:     true if setting exists
-**              false if setting does not exist
-**
-*******************************************************************************/
-bool CNfcConfig::getValue(const char* name, unsigned long& rValue) const {
-  const CNfcParam* pParam = find(name);
-  if (pParam == NULL) return false;
-
-  if (pParam->str_len() == 0) {
-    rValue = static_cast<unsigned long>(pParam->numValue());
-    return true;
-  }
-  return false;
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::getValue()
-**
-** Description: get a short numerical value of a setting
-**
-** Returns:     true if setting exists
-**              false if setting does not exist
-**
-*******************************************************************************/
-bool CNfcConfig::getValue(const char* name, unsigned short& rValue) const {
-  const CNfcParam* pParam = find(name);
-  if (pParam == NULL) return false;
-
-  if (pParam->str_len() == 0) {
-    rValue = static_cast<unsigned short>(pParam->numValue());
-    return true;
-  }
-  return false;
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::find()
-**
-** Description: search if a setting exist in the setting array
-**
-** Returns:     pointer to the setting object
-**
-*******************************************************************************/
-const CNfcParam* CNfcConfig::find(const char* p_name) const {
-  if (size() == 0) return NULL;
-
-  for (const_iterator it = begin(), itEnd = end(); it != itEnd; ++it) {
-    if (**it < p_name)
-      continue;
-    else if (**it == p_name) {
-      if ((*it)->str_len() > 0)
-        ALOGD("%s found %s=%s\n", __func__, p_name, (*it)->str_value());
-      else
-        ALOGD("%s found %s=(0x%lX)\n", __func__, p_name, (*it)->numValue());
-      return *it;
-    } else
-      break;
-  }
-  return NULL;
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::clean()
-**
-** Description: reset the setting array
-**
-** Returns:     none
-**
-*******************************************************************************/
-void CNfcConfig::clean() {
-  if (size() == 0) return;
-
-  for (iterator it = begin(), itEnd = end(); it != itEnd; ++it) delete *it;
-  clear();
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::Add()
-**
-** Description: add a setting object to the list
-**
-** Returns:     none
-**
-*******************************************************************************/
-void CNfcConfig::add(const CNfcParam* pParam) {
-  if (m_list.size() == 0) {
-    m_list.push_back(pParam);
-    return;
-  }
-  for (list<const CNfcParam *>::iterator it = m_list.begin(),
-                                         itEnd = m_list.end();
-       it != itEnd; ++it) {
-    if (**it < pParam->c_str()) continue;
-    m_list.insert(it, pParam);
-    return;
-  }
-  m_list.push_back(pParam);
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::moveFromList()
-**
-** Description: move the setting object from list to array
-**
-** Returns:     none
-**
-*******************************************************************************/
-void CNfcConfig::moveFromList() {
-  if (m_list.size() == 0) return;
-
-  for (list<const CNfcParam *>::iterator it = m_list.begin(),
-                                         itEnd = m_list.end();
-       it != itEnd; ++it)
-    push_back(*it);
-  m_list.clear();
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcConfig::moveToList()
-**
-** Description: move the setting object from array to list
-**
-** Returns:     none
-**
-*******************************************************************************/
-void CNfcConfig::moveToList() {
-  if (m_list.size() != 0) m_list.clear();
-
-  for (iterator it = begin(), itEnd = end(); it != itEnd; ++it)
-    m_list.push_back(*it);
-  clear();
-}
-
-/*******************************************************************************
-**
-** Function:    CNfcParam::CNfcParam()
-**
-** Description: class constructor
-**
-** Returns:     none
-**
-*******************************************************************************/
-CNfcParam::CNfcParam() : m_numValue(0) {}
-
-/*******************************************************************************
-**
-** Function:    CNfcParam::~CNfcParam()
-**
-** Description: class destructor
-**
-** Returns:     none
-**
-*******************************************************************************/
-CNfcParam::~CNfcParam() {}
-
-/*******************************************************************************
-**
-** Function:    CNfcParam::CNfcParam()
-**
-** Description: class copy constructor
-**
-** Returns:     none
-**
-*******************************************************************************/
-CNfcParam::CNfcParam(const char* name, const string& value)
-    : string(name), m_str_value(value), m_numValue(0) {}
-
-/*******************************************************************************
-**
-** Function:    CNfcParam::CNfcParam()
-**
-** Description: class copy constructor
-**
-** Returns:     none
-**
-*******************************************************************************/
-CNfcParam::CNfcParam(const char* name, unsigned long value)
-    : string(name), m_numValue(value) {}
-
-/*******************************************************************************
-**
-** Function:    GetStrValue
-**
-** Description: API function for getting a string value of a setting
-**
-** Returns:     none
-**
-*******************************************************************************/
-extern "C" int GetStrValue(const char* name, char* pValue, unsigned long l) {
-  size_t len = l;
-  CNfcConfig& rConfig = CNfcConfig::GetInstance();
-
-  bool b = rConfig.getValue(name, pValue, len);
-  return b ? len : 0;
-}
-
-/*******************************************************************************
-**
-** Function:    GetNumValue
-**
-** Description: API function for getting a numerical value of a setting
-**
-** Returns:     none
-**
-*******************************************************************************/
-extern "C" int GetNumValue(const char* name, void* pValue, unsigned long len) {
-  if (!pValue) return false;
-
-  CNfcConfig& rConfig = CNfcConfig::GetInstance();
-  const CNfcParam* pParam = rConfig.find(name);
-
-  if (pParam == NULL) return false;
-  unsigned long v = pParam->numValue();
-  if (v == 0 && pParam->str_len() > 0 && pParam->str_len() < 4) {
-    const unsigned char* p = (const unsigned char*)pParam->str_value();
-    for (size_t i = 0; i < pParam->str_len(); ++i) {
-      v *= 256;
-      v += *p++;
-    }
-  }
-  switch (len) {
-    case sizeof(unsigned long):
-      *(static_cast<unsigned long*>(pValue)) = (unsigned long)v;
-      break;
-    case sizeof(unsigned short):
-      *(static_cast<unsigned short*>(pValue)) = (unsigned short)v;
-      break;
-    case sizeof(unsigned char):
-      *(static_cast<unsigned char*>(pValue)) = (unsigned char)v;
-      break;
-    default:
-      return false;
-  }
-  return true;
-}
-
-/*******************************************************************************
-**
-** Function:    resetConfig
-**
-** Description: reset settings array
-**
-** Returns:     none
-**
-*******************************************************************************/
-extern void resetConfig() {
-  CNfcConfig& rConfig = CNfcConfig::GetInstance();
-
-  rConfig.clean();
-}
-
-/*******************************************************************************
-**
-** Function:    readOptionalConfig()
-**
-** Description: read Config settings from an optional conf file
-**
-** Returns:     none
-**
-*******************************************************************************/
-void readOptionalConfig(const char* extra) {
-  string strPath;
-  string configName(extra_config_base);
-  configName += extra;
-  configName += extra_config_ext;
-
-  findConfigFilePathFromTransportConfigPaths(configName, strPath);
-  CNfcConfig::GetInstance().readConfig(strPath.c_str(), false);
-}
diff --git a/src/adaptation/debug_nfcsnoop.cc b/src/adaptation/debug_nfcsnoop.cc
index b7229d6..9466b9f 100644
--- a/src/adaptation/debug_nfcsnoop.cc
+++ b/src/adaptation/debug_nfcsnoop.cc
@@ -16,16 +16,16 @@
  *
  ******************************************************************************/
 
-#include <assert.h>
+#include <android-base/logging.h>
 #include <resolv.h>
 #include <zlib.h>
 #include <mutex>
 
+#include <ringbuffer.h>
+
 #include "bt_types.h"
 #include "include/debug_nfcsnoop.h"
-#include "include/ringbuffer.h"
 #include "nfc_int.h"
-#include "nfc_types.h"
 
 #define USEC_PER_SEC 1000000ULL
 
@@ -60,8 +60,13 @@
   // Insert data
   header.length = length;
   header.is_received = is_received ? 1 : 0;
-  header.delta_time_ms =
-      last_timestamp_ms ? timestamp_us - last_timestamp_ms : 0;
+
+  uint64_t delta_time_ms = 0;
+  if (last_timestamp_ms) {
+    __builtin_sub_overflow(timestamp_us, last_timestamp_ms, &delta_time_ms);
+  }
+  header.delta_time_ms = delta_time_ms;
+
   last_timestamp_ms = timestamp_us;
 
   ringbuffer_insert(buffer, (uint8_t*)&header, sizeof(nfcsnooz_header_t));
@@ -69,8 +74,8 @@
 }
 
 static bool nfcsnoop_compress(ringbuffer_t* rb_dst, ringbuffer_t* rb_src) {
-  assert(rb_dst != NULL);
-  assert(rb_src != NULL);
+  CHECK(rb_dst != NULL);
+  CHECK(rb_src != NULL);
 
   z_stream zs;
   zs.zalloc = Z_NULL;
diff --git a/src/adaptation/libmain.c b/src/adaptation/libmain.cc
similarity index 61%
rename from src/adaptation/libmain.c
rename to src/adaptation/libmain.cc
index bc78e6c..eb9a9f1 100644
--- a/src/adaptation/libmain.c
+++ b/src/adaptation/libmain.cc
@@ -15,22 +15,26 @@
  *  limitations under the License.
  *
  ******************************************************************************/
-#include "_OverrideLog.h"
-
-#include <errno.h>
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
 #include <fcntl.h>
-#include <malloc.h>
-#include <sys/stat.h>
-#include <sys/types.h>
+#include <vector>
+
 #include "CrcChecksum.h"
-#include "buildcfg.h"
-#include "config.h"
 #include "nfa_nv_ci.h"
-#include "nfa_nv_co.h"
 #include "nfc_hal_nv_co.h"
-#include "nfc_hal_target.h"
-extern char bcm_nfc_location[];
-static const char* sNfaStorageBin = "/nfaStorage.bin";
+
+using android::base::StringPrintf;
+
+extern std::string nfc_storage_path;
+extern bool nfc_debug_enabled;
+
+namespace {
+std::string getFilenameForBlock(const unsigned block) {
+  std::string bin = "nfaStorage.bin";
+  return StringPrintf("%s/%s%u", nfc_storage_path.c_str(), bin.c_str(), block);
+}
+}  // namespace
 
 /*******************************************************************************
 **
@@ -78,34 +82,27 @@
 **
 *******************************************************************************/
 extern void nfa_nv_co_read(uint8_t* pBuffer, uint16_t nbytes, uint8_t block) {
-  char filename[256], filename2[256];
+  std::string filename = getFilenameForBlock(block);
 
-  memset(filename, 0, sizeof(filename));
-  memset(filename2, 0, sizeof(filename2));
-  strcpy(filename2, bcm_nfc_location);
-  strncat(filename2, sNfaStorageBin, sizeof(filename2) - strlen(filename2) - 1);
-  if (strlen(filename2) > 200) {
-    ALOGE("%s: filename too long", __func__);
-    return;
-  }
-  sprintf(filename, "%s%u", filename2, block);
-
-  ALOGD("%s: buffer len=%u; file=%s", __func__, nbytes, filename);
-  int fileStream = open(filename, O_RDONLY);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "%s: buffer len=%u; file=%s", __func__, nbytes, filename.c_str());
+  int fileStream = open(filename.c_str(), O_RDONLY);
   if (fileStream >= 0) {
     unsigned short checksum = 0;
-    size_t actualReadCrc = read(fileStream, &checksum, sizeof(checksum));
+    read(fileStream, &checksum, sizeof(checksum));
     size_t actualReadData = read(fileStream, pBuffer, nbytes);
     close(fileStream);
     if (actualReadData > 0) {
-      ALOGD("%s: data size=%zu", __func__, actualReadData);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("%s: data size=%zu", __func__, actualReadData);
       nfa_nv_ci_read(actualReadData, NFA_NV_CO_OK, block);
     } else {
-      ALOGE("%s: fail to read", __func__);
+      LOG(ERROR) << StringPrintf("%s: fail to read", __func__);
       nfa_nv_ci_read(0, NFA_NV_CO_FAIL, block);
     }
   } else {
-    ALOGD("%s: fail to open", __func__);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("%s: fail to open", __func__);
     nfa_nv_ci_read(0, NFA_NV_CO_FAIL, block);
   }
 }
@@ -131,37 +128,29 @@
 *******************************************************************************/
 extern void nfa_nv_co_write(const uint8_t* pBuffer, uint16_t nbytes,
                             uint8_t block) {
-  char filename[256], filename2[256];
+  std::string filename = getFilenameForBlock(block);
 
-  memset(filename, 0, sizeof(filename));
-  memset(filename2, 0, sizeof(filename2));
-  strcpy(filename2, bcm_nfc_location);
-  strncat(filename2, sNfaStorageBin, sizeof(filename2) - strlen(filename2) - 1);
-  if (strlen(filename2) > 200) {
-    ALOGE("%s: filename too long", __func__);
-    return;
-  }
-  sprintf(filename, "%s%u", filename2, block);
-  ALOGD("%s: bytes=%u; file=%s", __func__, nbytes, filename);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "%s: bytes=%u; file=%s", __func__, nbytes, filename.c_str());
 
-  int fileStream = 0;
-
-  fileStream = open(filename, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
+  int fileStream =
+      open(filename.c_str(), O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
   if (fileStream >= 0) {
     unsigned short checksum = crcChecksumCompute(pBuffer, nbytes);
     size_t actualWrittenCrc = write(fileStream, &checksum, sizeof(checksum));
     size_t actualWrittenData = write(fileStream, pBuffer, nbytes);
-    ALOGD("%s: %zu bytes written", __func__, actualWrittenData);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("%s: %zu bytes written", __func__, actualWrittenData);
     if ((actualWrittenData == nbytes) &&
         (actualWrittenCrc == sizeof(checksum))) {
       nfa_nv_ci_write(NFA_NV_CO_OK);
     } else {
-      ALOGE("%s: fail to write", __func__);
+      LOG(ERROR) << StringPrintf("%s: fail to write", __func__);
       nfa_nv_ci_write(NFA_NV_CO_FAIL);
     }
     close(fileStream);
   } else {
-    ALOGE("%s: fail to open, error = %d", __func__, errno);
+    LOG(ERROR) << StringPrintf("%s: fail to open, error = %d", __func__, errno);
     nfa_nv_ci_write(NFA_NV_CO_FAIL);
   }
 }
@@ -179,31 +168,17 @@
 *******************************************************************************/
 void delete_stack_non_volatile_store(bool forceDelete) {
   static bool firstTime = true;
-  char filename[256], filename2[256];
 
   if ((firstTime == false) && (forceDelete == false)) return;
   firstTime = false;
 
-  ALOGD("%s", __func__);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s", __func__);
 
-  memset(filename, 0, sizeof(filename));
-  memset(filename2, 0, sizeof(filename2));
-  strcpy(filename2, bcm_nfc_location);
-  strncat(filename2, sNfaStorageBin, sizeof(filename2) - strlen(filename2) - 1);
-  if (strlen(filename2) > 200) {
-    ALOGE("%s: filename too long", __func__);
-    return;
-  }
-  sprintf(filename, "%s%u", filename2, DH_NV_BLOCK);
-  remove(filename);
-  sprintf(filename, "%s%u", filename2, HC_F3_NV_BLOCK);
-  remove(filename);
-  sprintf(filename, "%s%u", filename2, HC_F4_NV_BLOCK);
-  remove(filename);
-  sprintf(filename, "%s%u", filename2, HC_F2_NV_BLOCK);
-  remove(filename);
-  sprintf(filename, "%s%u", filename2, HC_F5_NV_BLOCK);
-  remove(filename);
+  remove(getFilenameForBlock(DH_NV_BLOCK).c_str());
+  remove(getFilenameForBlock(HC_F2_NV_BLOCK).c_str());
+  remove(getFilenameForBlock(HC_F3_NV_BLOCK).c_str());
+  remove(getFilenameForBlock(HC_F4_NV_BLOCK).c_str());
+  remove(getFilenameForBlock(HC_F5_NV_BLOCK).c_str());
 }
 
 /*******************************************************************************
@@ -218,33 +193,17 @@
 **
 *******************************************************************************/
 void verify_stack_non_volatile_store() {
-  ALOGD("%s", __func__);
-  char filename[256], filename2[256];
-  bool isValid = false;
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s", __func__);
 
-  memset(filename, 0, sizeof(filename));
-  memset(filename2, 0, sizeof(filename2));
-  strcpy(filename2, bcm_nfc_location);
-  strncat(filename2, sNfaStorageBin, sizeof(filename2) - strlen(filename2) - 1);
-  if (strlen(filename2) > 200) {
-    ALOGE("%s: filename too long", __func__);
-    return;
+  const std::vector<unsigned> verify_blocks = {DH_NV_BLOCK, HC_F2_NV_BLOCK,
+                                               HC_F3_NV_BLOCK, HC_F4_NV_BLOCK,
+                                               HC_F5_NV_BLOCK};
+
+  size_t verified = 0;
+  for (auto block : verify_blocks) {
+    if (!crcChecksumVerifyIntegrity(getFilenameForBlock(block).c_str())) break;
+    ++verified;
   }
 
-  sprintf(filename, "%s%u", filename2, DH_NV_BLOCK);
-  if (crcChecksumVerifyIntegrity(filename)) {
-    sprintf(filename, "%s%u", filename2, HC_F3_NV_BLOCK);
-    if (crcChecksumVerifyIntegrity(filename)) {
-      sprintf(filename, "%s%u", filename2, HC_F4_NV_BLOCK);
-      if (crcChecksumVerifyIntegrity(filename)) {
-        sprintf(filename, "%s%u", filename2, HC_F2_NV_BLOCK);
-        if (crcChecksumVerifyIntegrity(filename)) {
-          sprintf(filename, "%s%u", filename2, HC_F5_NV_BLOCK);
-          if (crcChecksumVerifyIntegrity(filename)) isValid = true;
-        }
-      }
-    }
-  }
-
-  if (isValid == false) delete_stack_non_volatile_store(true);
+  if (verified != verify_blocks.size()) delete_stack_non_volatile_store(true);
 }
diff --git a/src/adaptation/nfc_config.cc b/src/adaptation/nfc_config.cc
new file mode 100644
index 0000000..5891cc4
--- /dev/null
+++ b/src/adaptation/nfc_config.cc
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "nfc_config.h"
+#include "NfcAdaptation.h"
+
+#include <android-base/file.h>
+#include <android-base/logging.h>
+#include <android-base/parseint.h>
+#include <android-base/strings.h>
+
+#include <config.h>
+
+using namespace ::std;
+using namespace ::android::base;
+
+namespace {
+
+std::string findConfigPath() {
+  const vector<string> search_path = {"/odm/etc/", "/vendor/etc/",
+                                      "/product/etc/", "/etc/"};
+  const string file_name = "libnfc-nci.conf";
+
+  for (string path : search_path) {
+    path.append(file_name);
+    struct stat file_stat;
+    if (stat(path.c_str(), &file_stat) != 0) continue;
+    if (S_ISREG(file_stat.st_mode)) return path;
+  }
+  return "";
+}
+
+}  // namespace
+
+void NfcConfig::loadConfig() {
+  string config_path = findConfigPath();
+  CHECK(config_path != "");
+  config_.parseFromFile(config_path);
+  /* Read vendor specific configs */
+  NfcAdaptation& theInstance = NfcAdaptation::GetInstance();
+  std::map<std::string, ConfigValue> configMap;
+  theInstance.GetVendorConfigs(configMap);
+  for (auto config : configMap) {
+    config_.addConfig(config.first, config.second);
+  }
+}
+
+NfcConfig::NfcConfig() { loadConfig(); }
+
+NfcConfig& NfcConfig::getInstance() {
+  static NfcConfig theInstance;
+  if (theInstance.config_.isEmpty()) {
+    theInstance.loadConfig();
+  }
+  return theInstance;
+}
+
+bool NfcConfig::hasKey(const std::string& key) {
+  return getInstance().config_.hasKey(key);
+}
+
+std::string NfcConfig::getString(const std::string& key) {
+  return getInstance().config_.getString(key);
+}
+
+std::string NfcConfig::getString(const std::string& key,
+                                 std::string default_value) {
+  if (hasKey(key)) return getString(key);
+  return default_value;
+}
+
+unsigned NfcConfig::getUnsigned(const std::string& key) {
+  return getInstance().config_.getUnsigned(key);
+}
+
+unsigned NfcConfig::getUnsigned(const std::string& key,
+                                unsigned default_value) {
+  if (hasKey(key)) return getUnsigned(key);
+  return default_value;
+}
+
+std::vector<uint8_t> NfcConfig::getBytes(const std::string& key) {
+  return getInstance().config_.getBytes(key);
+}
+
+void NfcConfig::clear() { getInstance().config_.clear(); }
diff --git a/src/gki/common/gki.h b/src/gki/common/gki.h
index 1458e32..a6aa2e3 100644
--- a/src/gki/common/gki.h
+++ b/src/gki/common/gki.h
@@ -26,6 +26,8 @@
 #define NFC_STANDALONE FALSE
 #endif
 
+#include <string>
+
 #include "bt_types.h"
 #include "gki_target.h"
 
@@ -40,9 +42,7 @@
 ** send buffers to the task.
 */
 #define TASK_MBOX_0 0
-#define TASK_MBOX_1 1
 #define TASK_MBOX_2 2
-#define TASK_MBOX_3 3
 
 #define NUM_TASK_MBOX 4
 
@@ -53,7 +53,6 @@
 ** There are 4 reserved events used to signal timeout events.
 ** There are 8 general purpose events available for applications.
 */
-#define MAX_EVENTS 16
 
 #define TASK_MBOX_0_EVT_MASK 0x0001
 #define TASK_MBOX_1_EVT_MASK 0x0002
@@ -71,12 +70,6 @@
 #define TIMER_3_EVT_MASK 0x0080
 
 #define APPL_EVT_0 8
-#define APPL_EVT_1 9
-#define APPL_EVT_2 10
-#define APPL_EVT_3 11
-#define APPL_EVT_4 12
-#define APPL_EVT_5 13
-#define APPL_EVT_6 14
 #define APPL_EVT_7 15
 
 #define EVENT_MASK(evt) ((uint16_t)(0x0001 << (evt)))
@@ -301,19 +294,20 @@
 
 /* Timer list entry callback type
 */
-typedef void(TIMER_CBACK)(void* p_tle);
+struct TIMER_LIST_ENT;
+typedef void(TIMER_CBACK)(TIMER_LIST_ENT* p_tle);
 
 /* Define a timer list entry
 */
-typedef struct _tle {
-  struct _tle* p_next;
-  struct _tle* p_prev;
+struct TIMER_LIST_ENT {
+  TIMER_LIST_ENT* p_next;
+  TIMER_LIST_ENT* p_prev;
   TIMER_CBACK* p_cback;
   int32_t ticks;
   uintptr_t param;
   uint16_t event;
   uint8_t in_use;
-} TIMER_LIST_ENT;
+};
 
 /* Define a timer list queue
 */
@@ -332,26 +326,19 @@
   uint16_t count;
 } BUFFER_Q;
 
-#define GKI_IS_QUEUE_EMPTY(p_q) ((p_q)->count == 0)
-
 /* Task constants
 */
 #ifndef TASKPTR
-typedef void (*TASKPTR)(uint32_t);
+typedef uint32_t (*TASKPTR)(uint32_t);
 #endif
 
 /* General pool accessible to GKI_getbuf() */
-#define GKI_PUBLIC_POOL 0
 #define GKI_RESTRICTED_POOL 1 /* Inaccessible pool to GKI_getbuf() */
 
 /***********************************************************************
 ** Function prototypes
 */
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 /* Task management
 */
 extern uint8_t GKI_create_task(TASKPTR, uint8_t, int8_t*, uint16_t*, uint16_t,
@@ -364,7 +351,6 @@
 extern void GKI_run(void*);
 extern void GKI_stop(void);
 extern uint8_t GKI_suspend_task(uint8_t);
-extern uint8_t GKI_is_task_running(uint8_t);
 
 /* memory management
 */
@@ -454,10 +440,6 @@
 
 /* Exception handling
 */
-extern void GKI_exception(uint16_t, char*);
-
-#ifdef __cplusplus
-}
-#endif
+extern void GKI_exception(uint16_t, std::string);
 
 #endif
diff --git a/src/gki/common/gki_buffer.c b/src/gki/common/gki_buffer.cc
similarity index 95%
rename from src/gki/common/gki_buffer.c
rename to src/gki/common/gki_buffer.cc
index 3f95093..b14f6c8 100644
--- a/src/gki/common/gki_buffer.c
+++ b/src/gki/common/gki_buffer.cc
@@ -15,7 +15,8 @@
  *  limitations under the License.
  *
  ******************************************************************************/
-#include <stdio.h>
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
 #include "gki_int.h"
 
 #if (GKI_NUM_TOTAL_BUF_POOLS > 16)
@@ -27,6 +28,8 @@
 static void gki_remove_from_pool_list(uint8_t pool_id);
 #endif /*  BTU_STACK_LITE_ENABLED == FALSE */
 
+using android::base::StringPrintf;
+
 /*******************************************************************************
 **
 ** Function         gki_init_free_queue
@@ -94,7 +97,7 @@
   if (Q->p_first == 0) {
     void* p_mem = GKI_os_malloc((Q->size + BUFFER_PADDING_SIZE) * Q->total);
     if (p_mem) {
-// re-initialize the queue with allocated memory
+      // re-initialize the queue with allocated memory
       gki_init_free_queue(id, Q->size, Q->total, p_mem);
       return true;
     }
@@ -248,8 +251,7 @@
 ** Returns          A pointer to the buffer, or NULL if none available
 **
 *******************************************************************************/
-void* GKI_getbuf(uint16_t size)
-{
+void* GKI_getbuf(uint16_t size) {
   uint8_t i;
   FREE_QUEUE_T* Q;
   BUFFER_HDR_T* p_hdr;
@@ -282,14 +284,14 @@
     Q = &p_cb->freeq[p_cb->pool_list[i]];
     if (Q->cur_cnt < Q->total) {
       if (Q->p_first == 0 && gki_alloc_free_queue(i) != true) {
-        GKI_TRACE_ERROR_0("GKI_getbuf() out of buffer");
+        LOG(ERROR) << StringPrintf("out of buffer");
         GKI_enable();
         return NULL;
       }
 
       if (Q->p_first == 0) {
         /* gki_alloc_free_queue() failed to alloc memory */
-        GKI_TRACE_ERROR_0("GKI_getbuf() fail alloc free queue");
+        LOG(ERROR) << StringPrintf("fail alloc free queue");
         GKI_enable();
         return NULL;
       }
@@ -312,7 +314,7 @@
     }
   }
 
-  GKI_TRACE_ERROR_0("GKI_getbuf() unable to allocate buffer!!!!!");
+  LOG(ERROR) << StringPrintf("unable to allocate buffer!!!!!");
 
   GKI_enable();
 
@@ -335,8 +337,7 @@
 ** Returns          A pointer to the buffer, or NULL if none available
 **
 *******************************************************************************/
-void* GKI_getpoolbuf(uint8_t pool_id)
-{
+void* GKI_getpoolbuf(uint8_t pool_id) {
   FREE_QUEUE_T* Q;
   BUFFER_HDR_T* p_hdr;
   tGKI_COM_CB* p_cb = &gki_cb.com;
@@ -352,7 +353,7 @@
 
     if (Q->p_first == 0) {
       /* gki_alloc_free_queue() failed to alloc memory */
-      GKI_TRACE_ERROR_0("GKI_getpoolbuf() fail alloc free queue");
+      LOG(ERROR) << StringPrintf("fail alloc free queue");
       return NULL;
     }
 
@@ -454,7 +455,7 @@
 
   p_hdr = (BUFFER_HDR_T*)((uint8_t*)p_buf - BUFFER_HDR_SIZE);
 
-  if ((uint32_t)p_hdr & 1) return (0);
+  if ((uintptr_t)p_hdr & 1) return (0);
 
   if (p_hdr->q_id < GKI_NUM_TOTAL_BUF_POOLS) {
     return (gki_cb.com.freeq[p_hdr->q_id].size);
@@ -478,7 +479,7 @@
   uint32_t* magic;
   magic = (uint32_t*)((uint8_t*)p_buf + GKI_get_buf_size(p_buf));
 
-  if ((uint32_t)magic & 1) return true;
+  if ((uintptr_t)magic & 1) return true;
 
   if (*magic == MAGIC_NO) return false;
 
@@ -975,45 +976,6 @@
 
 /*******************************************************************************
 **
-** Function         GKI_igetpoolbuf
-**
-** Description      Called by an interrupt service routine to get a free buffer
-**                  from a specific buffer pool.
-**
-** Parameters       pool_id - (input) pool ID to get a buffer out of.
-**
-** Returns          A pointer to the buffer, or NULL if none available
-**
-*******************************************************************************/
-void* GKI_igetpoolbuf(uint8_t pool_id) {
-  FREE_QUEUE_T* Q;
-  BUFFER_HDR_T* p_hdr;
-
-  if (pool_id >= GKI_NUM_TOTAL_BUF_POOLS) return (NULL);
-
-  Q = &gki_cb.com.freeq[pool_id];
-  if (Q->cur_cnt < Q->total) {
-    p_hdr = Q->p_first;
-    Q->p_first = p_hdr->p_next;
-
-    if (!Q->p_first) Q->p_last = NULL;
-
-    if (++Q->cur_cnt > Q->max_cnt) Q->max_cnt = Q->cur_cnt;
-
-    p_hdr->task_id = GKI_get_taskid();
-
-    p_hdr->status = BUF_STATUS_UNLINKED;
-    p_hdr->p_next = NULL;
-    p_hdr->Type = 0;
-
-    return ((void*)((uint8_t*)p_hdr + BUFFER_HDR_SIZE));
-  }
-
-  return (NULL);
-}
-
-/*******************************************************************************
-**
 ** Function         GKI_poolcount
 **
 ** Description      Called by an application to get the total number of buffers
diff --git a/src/gki/common/gki_common.h b/src/gki/common/gki_common.h
index 8f0cc7a..5cf7028 100644
--- a/src/gki/common/gki_common.h
+++ b/src/gki/common/gki_common.h
@@ -23,9 +23,6 @@
 /* Task States: (For OSRdyTbl) */
 #define TASK_DEAD 0    /* b0000 */
 #define TASK_READY 1   /* b0001 */
-#define TASK_WAIT 2    /* b0010 */
-#define TASK_DELAY 4   /* b0100 */
-#define TASK_SUSPEND 8 /* b1000 */
 
 /********************************************************************
 **  Internal Error codes
@@ -40,14 +37,12 @@
 #define GKI_ERROR_DELETE_POOL_BAD_QID 0xFFF8
 #define GKI_ERROR_BUF_SIZE_TOOBIG 0xFFF7
 #define GKI_ERROR_BUF_SIZE_ZERO 0xFFF6
-#define GKI_ERROR_ADDR_NOT_IN_BUF 0xFFF5
 
 /********************************************************************
 **  Misc constants
 *********************************************************************/
 
 #define GKI_MAX_INT32 (0x7fffffffL)
-#define GKI_MAX_TIMESTAMP (0xffffffffL)
 
 /********************************************************************
 **  Buffer Management Data Structures
@@ -275,10 +270,6 @@
 
 } tGKI_COM_CB;
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 /* Internal GKI function prototypes
 */
 extern bool gki_chk_buf_damage(void*);
@@ -287,15 +278,4 @@
 extern void gki_timers_init(void);
 extern void gki_adjust_timer_count(int32_t);
 
-extern void OSStartRdy(void);
-extern void OSCtxSw(void);
-extern void OSIntCtxSw(void);
-extern void OSSched(void);
-extern void OSIntEnter(void);
-extern void OSIntExit(void);
-
-#ifdef __cplusplus
-}
-#endif
-
 #endif
diff --git a/src/gki/common/gki_inet.h b/src/gki/common/gki_inet.h
index 079dfe3..720f17f 100644
--- a/src/gki/common/gki_inet.h
+++ b/src/gki/common/gki_inet.h
@@ -20,12 +20,6 @@
 
 #include "data_types.h"
 
-#define htons ntohs
-#define htonl ntohl
-
-#define htonets nettohs
-#define htonetl nettohl
-
 #if (BIG_ENDIAN == TRUE)
 #define ntohs(n) (n)
 #define ntohl(n) (n)
diff --git a/src/gki/common/gki_time.c b/src/gki/common/gki_time.cc
similarity index 97%
rename from src/gki/common/gki_time.c
rename to src/gki/common/gki_time.cc
index 2cb136b..ac9a649 100644
--- a/src/gki/common/gki_time.c
+++ b/src/gki/common/gki_time.cc
@@ -15,12 +15,10 @@
  *  limitations under the License.
  *
  ******************************************************************************/
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
 #include "gki_int.h"
 
-#ifndef BT_ERROR_TRACE_0
-#define BT_ERROR_TRACE_0(l, m)
-#endif
-
 /* Make sure that this has been defined in target.h */
 #ifndef GKI_NUM_TIMERS
 #error NO TIMERS: Must define at least 1 timer in the system!
@@ -32,6 +30,10 @@
 #define GKI_UNUSED_LIST_ENTRY (0x80000000L)
 #define GKI_MAX_INT32 (0x7fffffffL)
 
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
+
 /*******************************************************************************
 **
 ** Function         gki_timers_init
@@ -714,13 +716,13 @@
     if (p_tle == p_target_tle) {
       rem_ticks += p_tle->ticks;
     } else {
-      BT_ERROR_TRACE_0(TRACE_LAYER_GKI,
-                       "GKI_get_remaining_ticks: No timer entry in the list");
+      LOG(ERROR) << StringPrintf(
+          "GKI_get_remaining_ticks: No timer entry in the list");
       return (0);
     }
   } else {
-    BT_ERROR_TRACE_0(TRACE_LAYER_GKI,
-                     "GKI_get_remaining_ticks: timer entry is not active");
+    LOG(ERROR) << StringPrintf(
+        "GKI_get_remaining_ticks: timer entry is not active");
   }
 
   return (rem_ticks);
@@ -749,8 +751,9 @@
   uint8_t tt;
   TIMER_LIST_ENT* p_temp;
   if (p_tle == NULL || p_timer_listq == NULL) {
-    GKI_TRACE_3("%s: invalid argument %x, %x****************************<<",
-                __func__, p_timer_listq, p_tle);
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "%s: invalid argument %p, %p****************************<<", __func__,
+        p_timer_listq, p_tle);
     return;
   }
 
diff --git a/src/gki/ulinux/data_types.h b/src/gki/ulinux/data_types.h
index 892b798..727cd3c 100644
--- a/src/gki/ulinux/data_types.h
+++ b/src/gki/ulinux/data_types.h
@@ -29,14 +29,10 @@
 #define FALSE 0
 #endif
 
-typedef uint32_t TIME_STAMP;
-
 #ifndef TRUE
 #define TRUE (!FALSE)
 #endif
 
-typedef unsigned char UBYTE;
-
 #ifdef __arm
 #define PACKED __packed
 #define INLINE __inline
@@ -49,7 +45,4 @@
 #define BIG_ENDIAN FALSE
 #endif
 
-#define UINT16_LOW_BYTE(x) ((x)&0xff)
-#define UINT16_HI_BYTE(x) ((x) >> 8)
-
 #endif
diff --git a/src/gki/ulinux/gki_int.h b/src/gki/ulinux/gki_int.h
index 4d3f121..27ff76e 100644
--- a/src/gki/ulinux/gki_int.h
+++ b/src/gki/ulinux/gki_int.h
@@ -54,14 +54,6 @@
   tGKI_COM_CB com;
 } tGKI_CB;
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 extern tGKI_CB gki_cb;
 
-#ifdef __cplusplus
-}
-#endif
-
 #endif
diff --git a/src/gki/ulinux/gki_ulinux.c b/src/gki/ulinux/gki_ulinux.cc
similarity index 85%
rename from src/gki/ulinux/gki_ulinux.c
rename to src/gki/ulinux/gki_ulinux.cc
index 31bdcd6..01ba892 100644
--- a/src/gki/ulinux/gki_ulinux.c
+++ b/src/gki/ulinux/gki_ulinux.cc
@@ -17,19 +17,20 @@
  ******************************************************************************/
 #include <errno.h>
 #include <malloc.h>
-#include <stdarg.h>
-#include <stdio.h>
-
 #include <pthread.h> /* must be 1st header defined  */
-#include <time.h>
-#include "bt_trace.h"
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "gki_int.h"
-#include "gki_target.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 /* Temp android logging...move to android tgt config file */
 
 #ifndef LINUX_NATIVE
-#include <cutils/log.h>
 #else
 #define LOGV(format, ...) fprintf(stdout, LOG_TAG format, ##__VA_ARGS__)
 #define LOGE(format, ...) fprintf(stderr, LOG_TAG format, ##__VA_ARGS__)
@@ -53,10 +54,6 @@
 #define LINUX_SEC (1000 / TICKS_PER_SEC)
 // #define GKI_TICK_TIMER_DEBUG
 
-#define LOCK(m) pthread_mutex_lock(&m)
-#define UNLOCK(m) pthread_mutex_unlock(&m)
-#define INIT(m) pthread_mutex_init(&m, NULL)
-
 /* this kind of mutex go into tGKI_OS control block!!!! */
 /* static pthread_mutex_t GKI_sched_mutex; */
 /*static pthread_mutex_t thread_delay_mutex;
@@ -86,39 +83,26 @@
 ** Returns          void
 **
 *******************************************************************************/
-void gki_task_entry(uintptr_t params) {
+void* gki_task_entry(void* params) {
   pthread_t thread_id = pthread_self();
   gki_pthread_info_t* p_pthread_info = (gki_pthread_info_t*)params;
-  GKI_TRACE_5("gki_task_entry task_id=%i, thread_id=%x/%x, pCond/pMutex=%x/%x",
-              p_pthread_info->task_id,
-              gki_cb.os.thread_id[p_pthread_info->task_id], pthread_self(),
-              p_pthread_info->pCond, p_pthread_info->pMutex);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "gki_task_entry task_id=%i, thread_id=%lx/%lx, pCond/pMutex=%p/%p",
+      p_pthread_info->task_id, gki_cb.os.thread_id[p_pthread_info->task_id],
+      pthread_self(), p_pthread_info->pCond, p_pthread_info->pMutex);
 
   gki_cb.os.thread_id[p_pthread_info->task_id] = thread_id;
   /* Call the actual thread entry point */
   (p_pthread_info->task_entry)(p_pthread_info->params);
 
-  GKI_TRACE_ERROR_1("gki_task task_id=%i terminating", p_pthread_info->task_id);
+  LOG(ERROR) << StringPrintf("gki_task task_id=%i terminating",
+                             p_pthread_info->task_id);
   gki_cb.os.thread_id[p_pthread_info->task_id] = 0;
 
-  return;
+  return NULL;
 }
 /* end android */
 
-#ifndef ANDROID
-void GKI_TRACE(char* fmt, ...) {
-  LOCK(gki_cb.os.GKI_trace_mutex);
-  va_list ap;
-
-  va_start(ap, fmt);
-  vfprintf(stderr, fmt, ap);
-  fprintf(stderr, "\n");
-
-  va_end(ap);
-  UNLOCK(gki_cb.os.GKI_trace_mutex);
-}
-#endif
-
 /*******************************************************************************
 **
 ** Function         GKI_init
@@ -147,7 +131,7 @@
 #endif
   p_os = &gki_cb.os;
   pthread_mutex_init(&p_os->GKI_mutex, &attr);
-/* pthread_mutex_init(&GKI_sched_mutex, NULL); */
+  /* pthread_mutex_init(&GKI_sched_mutex, NULL); */
   /* pthread_mutex_init(&thread_delay_mutex, NULL); */ /* used in GKI_delay */
   /* pthread_cond_init (&thread_delay_cond, NULL); */
 
@@ -200,8 +184,6 @@
 uint8_t GKI_create_task(TASKPTR task_entry, uint8_t task_id, int8_t* taskname,
                         uint16_t* stack, uint16_t stacksize, void* pCondVar,
                         void* pMutex) {
-  uint16_t i;
-  uint8_t* p;
   struct sched_param param;
   int policy, ret = 0;
   pthread_condattr_t attr;
@@ -209,12 +191,13 @@
 
   pthread_condattr_init(&attr);
   pthread_condattr_setclock(&attr, CLOCK_MONOTONIC);
-  GKI_TRACE_5(
-      "GKI_create_task func=0x%x  id=%d  name=%s  stack=0x%x  stackSize=%d",
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "GKI_create_task func=0x%p  id=%d  name=%s  stack=0x%p  stackSize=%d",
       task_entry, task_id, taskname, stack, stacksize);
 
   if (task_id >= GKI_MAX_TASKS) {
-    GKI_TRACE_0("Error! task ID > max task allowed");
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Error! task ID > max task allowed");
     return (GKI_FAILURE);
   }
 
@@ -234,10 +217,11 @@
 #if (FALSE == GKI_PTHREAD_JOINABLE)
   pthread_attr_setdetachstate(&attr1, PTHREAD_CREATE_DETACHED);
 
-  GKI_TRACE_3("GKI creating task %i, pCond/pMutex=%x/%x", task_id, pCondVar,
-              pMutex);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "GKI creating task %i, pCond/pMutex=%p/%p", task_id, pCondVar, pMutex);
 #else
-  GKI_TRACE_1("GKI creating JOINABLE task %i", task_id);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("GKI creating JOINABLE task %i", task_id);
 #endif
 
   /* On Android, the new tasks starts running before
@@ -250,11 +234,12 @@
   gki_pthread_info[task_id].pCond = (pthread_cond_t*)pCondVar;
   gki_pthread_info[task_id].pMutex = (pthread_mutex_t*)pMutex;
 
-  ret = pthread_create(&gki_cb.os.thread_id[task_id], &attr1,
-                       (void*)gki_task_entry, &gki_pthread_info[task_id]);
+  ret = pthread_create(&gki_cb.os.thread_id[task_id], &attr1, gki_task_entry,
+                       &gki_pthread_info[task_id]);
 
   if (ret != 0) {
-    GKI_TRACE_2("pthread_create failed(%d), %s!", ret, taskname);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("pthread_create failed(%d), %s!", ret, taskname);
     return GKI_FAILURE;
   }
 
@@ -262,7 +247,8 @@
       0) {
 #if (PBS_SQL_TASK == TRUE)
     if (task_id == PBS_SQL_TASK) {
-      GKI_TRACE_0("PBS SQL lowest priority task");
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("PBS SQL lowest priority task");
       policy = SCHED_NORMAL;
     } else
 #endif
@@ -273,8 +259,9 @@
     pthread_setschedparam(gki_cb.os.thread_id[task_id], policy, &param);
   }
 
-  GKI_TRACE_6("Leaving GKI_create_task %x %d %x %s %x %d", task_entry, task_id,
-              gki_cb.os.thread_id[task_id], taskname, stack, stacksize);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "Leaving GKI_create_task %p %d %lx %s %p %d", task_entry, task_id,
+      gki_cb.os.thread_id[task_id], taskname, stack, stacksize);
 
   return (GKI_SUCCESS);
 }
@@ -293,8 +280,8 @@
 *******************************************************************************/
 #define WAKE_LOCK_ID "brcm_nfca"
 #define PARTIAL_WAKE_LOCK 1
-extern int acquire_wake_lock(int lock, const char* id);
-extern int release_wake_lock(const char* id);
+extern "C" int acquire_wake_lock(int lock, const char* id);
+extern "C" int release_wake_lock(const char* id);
 
 void GKI_shutdown(void) {
   uint8_t task_id;
@@ -328,10 +315,12 @@
       /* wait for proper Arnold Schwarzenegger task state */
       result = pthread_join(gki_cb.os.thread_id[task_id - 1], NULL);
       if (result < 0) {
-        GKI_TRACE_1("pthread_join() FAILED: result: %d", result);
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("FAILED: result: %d", result);
       }
 #endif
-      GKI_TRACE_1("GKI_shutdown(): task %s dead", gki_cb.com.OSTName[task_id]);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("task %s dead", gki_cb.com.OSTName[task_id]);
       GKI_exit_task(task_id - 1);
     }
   }
@@ -349,7 +338,8 @@
   shutdown_timer = 1;
 #endif
   if (gki_cb.os.gki_timer_wake_lock_on) {
-    GKI_TRACE_0("GKI_shutdown :  release_wake_lock(brcm_btld)");
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("GKI_shutdown :  release_wake_lock(brcm_btld)");
     release_wake_lock(WAKE_LOCK_ID);
     gki_cb.os.gki_timer_wake_lock_on = 0;
   }
@@ -373,7 +363,9 @@
 void gki_system_tick_start_stop_cback(bool start) {
   tGKI_OS* p_os = &gki_cb.os;
   volatile int* p_run_cond = &p_os->no_timer_suspend;
+#ifdef GKI_TICK_TIMER_DEBUG
   static volatile int wake_lock_count;
+#endif
   if (start == false) {
     /* this can lead to a race condition. however as we only read this variable
      * in the timer loop
@@ -383,9 +375,8 @@
     *p_run_cond = GKI_TIMER_TICK_STOP_COND;
 /* GKI_enable(); */
 #ifdef GKI_TICK_TIMER_DEBUG
-    BT_TRACE_1(TRACE_LAYER_HCI, TRACE_TYPE_DEBUG,
-               ">>> STOP GKI_timer_update(), wake_lock_count:%d",
-               --wake_lock_count);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf(">>> STOP wake_lock_count:%d", --wake_lock_count);
 #endif
     release_wake_lock(WAKE_LOCK_ID);
     gki_cb.os.gki_timer_wake_lock_on = 0;
@@ -399,9 +390,8 @@
     pthread_mutex_unlock(&p_os->gki_timer_mutex);
 
 #ifdef GKI_TICK_TIMER_DEBUG
-    BT_TRACE_1(TRACE_LAYER_HCI, TRACE_TYPE_DEBUG,
-               ">>> START GKI_timer_update(), wake_lock_count:%d",
-               ++wake_lock_count);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf(">>> START wake_lock_count:%d", ++wake_lock_count);
 #endif
   }
 }
@@ -419,7 +409,7 @@
 *******************************************************************************/
 #ifdef NO_GKI_RUN_RETURN
 void timer_thread(signed long id) {
-  GKI_TRACE_1("%s enter", __func__);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s enter", __func__);
   struct timespec delay;
   int timeout = 1000; /* 10  ms per system tick  */
   int err;
@@ -436,7 +426,7 @@
 
     GKI_timer_update(1);
   }
-  GKI_TRACE_ERROR_1("%s exit", __func__);
+  LOG(ERROR) << StringPrintf("%s exit", __func__);
   return;
 }
 #endif
@@ -456,8 +446,8 @@
 **                  one step, If your OS does it in one step, this function
 **                  should be empty.
 *******************************************************************************/
-void GKI_run(void* p_task_id) {
-  GKI_TRACE_1("%s enter", __func__);
+void GKI_run(__attribute__((unused)) void* p_task_id) {
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s enter", __func__);
   struct timespec delay;
   int err = 0;
   volatile int* p_run_cond = &gki_cb.os.no_timer_suspend;
@@ -467,11 +457,13 @@
    * timers are
    * in any GKI/BTA/BTU this should save power when BTLD is idle! */
   GKI_timer_queue_register_callback(gki_system_tick_start_stop_cback);
-  APPL_TRACE_DEBUG0("GKI_run(): Start/Stop GKI_timer_update_registered!");
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("Start/Stop GKI_timer_update_registered!");
 #endif
 
 #ifdef NO_GKI_RUN_RETURN
-  GKI_TRACE_0("GKI_run == NO_GKI_RUN_RETURN");
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("GKI_run == NO_GKI_RUN_RETURN");
   pthread_attr_t timer_attr;
 
   shutdown_timer = 0;
@@ -479,11 +471,13 @@
   pthread_attr_init(&timer_attr);
   pthread_attr_setdetachstate(&timer_attr, PTHREAD_CREATE_DETACHED);
   if (pthread_create(&timer_thread_id, &timer_attr, timer_thread, NULL) != 0) {
-    GKI_TRACE_0("GKI_run: pthread_create failed to create timer_thread!");
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "GKI_run: pthread_create failed to create timer_thread!");
     return GKI_FAILURE;
   }
 #else
-  GKI_TRACE_2("GKI_run, run_cond(%x)=%d ", p_run_cond, *p_run_cond);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("GKI_run, run_cond(%p)=%d ", p_run_cond, *p_run_cond);
   for (; GKI_TIMER_TICK_EXIT_COND != *p_run_cond;) {
     do {
       /* adjust hear bit tick in btld by changning TICKS_PER_SEC!!!!! this
@@ -504,33 +498,28 @@
        * e.g. power saving you may want to provide more ticks
        */
       GKI_timer_update(1);
-      /* BT_TRACE_2( TRACE_LAYER_HCI, TRACE_TYPE_DEBUG, "update: tv_sec: %d,
-       * tv_nsec: %d", delay.tv_sec, delay.tv_nsec ); */
     } while (GKI_TIMER_TICK_RUN_COND == *p_run_cond);
 
 /* currently on reason to exit above loop is no_timer_suspend ==
  * GKI_TIMER_TICK_STOP_COND
  * block timer main thread till re-armed by  */
 #ifdef GKI_TICK_TIMER_DEBUG
-    BT_TRACE_0(TRACE_LAYER_HCI, TRACE_TYPE_DEBUG,
-               ">>> SUSPENDED GKI_timer_update()");
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(">>> SUSPENDED");
 #endif
     if (GKI_TIMER_TICK_EXIT_COND != *p_run_cond) {
-      GKI_TRACE_1("%s waiting timer mutex", __func__);
       pthread_mutex_lock(&gki_cb.os.gki_timer_mutex);
       pthread_cond_wait(&gki_cb.os.gki_timer_cond, &gki_cb.os.gki_timer_mutex);
       pthread_mutex_unlock(&gki_cb.os.gki_timer_mutex);
-      GKI_TRACE_1("%s exited timer mutex", __func__);
     }
 /* potentially we need to adjust os gki_cb.com.OSTicks */
 
 #ifdef GKI_TICK_TIMER_DEBUG
-    BT_TRACE_1(TRACE_LAYER_HCI, TRACE_TYPE_DEBUG,
-               ">>> RESTARTED GKI_timer_update(): run_cond: %d", *p_run_cond);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf(">>> RESTARTED run_cond: %d", *p_run_cond);
 #endif
   } /* for */
 #endif
-  GKI_TRACE_1("%s exit", __func__);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s exit", __func__);
 }
 
 /*******************************************************************************
@@ -584,18 +573,18 @@
   int nano_sec;
 
   rtask = GKI_get_taskid();
-  GKI_TRACE_3("GKI_wait %d %x %d", rtask, flag, timeout);
   if (rtask >= GKI_MAX_TASKS) {
-    GKI_TRACE_ERROR_3("%s() Exiting thread; rtask %d >= %d", __func__, rtask,
-                      GKI_MAX_TASKS);
+    LOG(ERROR) << StringPrintf("%s() Exiting thread; rtask %d >= %d", __func__,
+                               rtask, GKI_MAX_TASKS);
     return EVENT_MASK(GKI_SHUTDOWN_EVT);
   }
 
   gki_pthread_info_t* p_pthread_info = &gki_pthread_info[rtask];
   if (p_pthread_info->pCond != NULL && p_pthread_info->pMutex != NULL) {
     int ret;
-    GKI_TRACE_3("GKI_wait task=%i, pCond/pMutex = %x/%x", rtask,
-                p_pthread_info->pCond, p_pthread_info->pMutex);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("GKI_wait task=%i, pCond/pMutex = %p/%p", rtask,
+                        p_pthread_info->pCond, p_pthread_info->pMutex);
     ret = pthread_mutex_lock(p_pthread_info->pMutex);
     ret = pthread_cond_signal(p_pthread_info->pCond);
     ret = pthread_mutex_unlock(p_pthread_info->pMutex);
@@ -674,7 +663,8 @@
       /* unlock thread_evt_mutex as pthread_cond_wait() does auto lock when cond
        * is met */
       pthread_mutex_unlock(&gki_cb.os.thread_evt_mutex[rtask]);
-      GKI_TRACE_ERROR_1("GKI TASK_DEAD received. exit thread %d...", rtask);
+      LOG(ERROR) << StringPrintf("GKI TASK_DEAD received. exit thread %d...",
+                                 rtask);
 
       gki_cb.os.thread_id[rtask] = 0;
       return (EVENT_MASK(GKI_SHUTDOWN_EVT));
@@ -693,8 +683,6 @@
   /* unlock thread_evt_mutex as pthread_cond_wait() does auto lock mutex when
    * cond is met */
   pthread_mutex_unlock(&gki_cb.os.thread_evt_mutex[rtask]);
-  GKI_TRACE_4("GKI_wait %d %x %d %x resumed", rtask, flag, timeout, evt);
-
   return (evt);
 }
 
@@ -717,7 +705,8 @@
   struct timespec delay;
   int err;
 
-  GKI_TRACE_2("GKI_delay %d %d", rtask, timeout);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("GKI_delay %d %d", rtask, timeout);
 
   delay.tv_sec = timeout / 1000;
   delay.tv_nsec = 1000 * 1000 * (timeout % 1000);
@@ -736,7 +725,8 @@
   if (rtask && gki_cb.com.OSRdyTbl[rtask] == TASK_DEAD) {
   }
 
-  GKI_TRACE_2("GKI_delay %d %d done", rtask, timeout);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("GKI_delay %d %d done", rtask, timeout);
   return;
 }
 
@@ -756,8 +746,6 @@
 **
 *******************************************************************************/
 uint8_t GKI_send_event(uint8_t task_id, uint16_t event) {
-  GKI_TRACE_2("GKI_send_event %d %x", task_id, event);
-
   /* use efficient coding to avoid pipeline stalls */
   if (task_id < GKI_MAX_TASKS) {
     /* protect OSWaitEvt[task_id] from manipulation in GKI_wait() */
@@ -770,7 +758,6 @@
 
     pthread_mutex_unlock(&gki_cb.os.thread_evt_mutex[task_id]);
 
-    GKI_TRACE_2("GKI_send_event %d %x done", task_id, event);
     return (GKI_SUCCESS);
   }
   return (GKI_FAILURE);
@@ -797,8 +784,10 @@
 **
 *******************************************************************************/
 uint8_t GKI_isend_event(uint8_t task_id, uint16_t event) {
-  GKI_TRACE_2("GKI_isend_event %d %x", task_id, event);
-  GKI_TRACE_2("GKI_isend_event %d %x done", task_id, event);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("GKI_isend_event %d %x", task_id, event);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("GKI_isend_event %d %x done", task_id, event);
   return GKI_send_event(task_id, event);
 }
 
@@ -818,17 +807,12 @@
 *******************************************************************************/
 uint8_t GKI_get_taskid(void) {
   int i;
-
   pthread_t thread_id = pthread_self();
   for (i = 0; i < GKI_MAX_TASKS; i++) {
     if (gki_cb.os.thread_id[i] == thread_id) {
-      GKI_TRACE_2("GKI_get_taskid %x %d done", thread_id, i);
       return (i);
     }
   }
-
-  GKI_TRACE_1("GKI_get_taskid: thread id = %x, task id = -1", thread_id);
-
   return (-1);
 }
 
@@ -850,11 +834,12 @@
 **
 *******************************************************************************/
 int8_t* GKI_map_taskname(uint8_t task_id) {
-  GKI_TRACE_1("GKI_map_taskname %d", task_id);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("GKI_map_taskname %d", task_id);
 
   if (task_id < GKI_MAX_TASKS) {
-    GKI_TRACE_2("GKI_map_taskname %d %s done", task_id,
-                gki_cb.com.OSTName[task_id]);
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "GKI_map_taskname %d %s done", task_id, gki_cb.com.OSTName[task_id]);
     return (gki_cb.com.OSTName[task_id]);
   } else if (task_id == GKI_MAX_TASKS) {
     return (gki_cb.com.OSTName[GKI_get_taskid()]);
@@ -873,11 +858,9 @@
 **
 *******************************************************************************/
 void GKI_enable(void) {
-  GKI_TRACE_0("GKI_enable");
   pthread_mutex_unlock(&gki_cb.os.GKI_mutex);
   /* 	pthread_mutex_xx is nesting save, no need for this: already_disabled =
    * 0; */
-  GKI_TRACE_0("Leaving GKI_enable");
   return;
 }
 
@@ -892,14 +875,16 @@
 *******************************************************************************/
 
 void GKI_disable(void) {
-  // GKI_TRACE_0("GKI_disable");
+  // DLOG_IF(INFO, nfc_debug_enabled) <<
+  // StringPrintf("GKI_disable");
 
   /*	pthread_mutex_xx is nesting save, no need for this: if
      (!already_disabled) {
       already_disabled = 1; */
   pthread_mutex_lock(&gki_cb.os.GKI_mutex);
   /*  } */
-  // GKI_TRACE_0("Leaving GKI_disable");
+  // DLOG_IF(INFO, nfc_debug_enabled) <<
+  // StringPrintf("Leaving GKI_disable");
   return;
 }
 
@@ -917,26 +902,25 @@
 **
 *******************************************************************************/
 
-void GKI_exception(uint16_t code, char* msg) {
+void GKI_exception(uint16_t code, std::string msg) {
   uint8_t task_id;
-  int i = 0;
 
-  GKI_TRACE_ERROR_0("GKI_exception(): Task State Table");
+  LOG(ERROR) << StringPrintf("Task State Table");
 
   for (task_id = 0; task_id < GKI_MAX_TASKS; task_id++) {
-    GKI_TRACE_ERROR_3("TASK ID [%d] task name [%s] state [%d]", task_id,
-                      gki_cb.com.OSTName[task_id],
-                      gki_cb.com.OSRdyTbl[task_id]);
+    LOG(ERROR) << StringPrintf("TASK ID [%d] task name [%s] state [%d]",
+                               task_id, gki_cb.com.OSTName[task_id],
+                               gki_cb.com.OSRdyTbl[task_id]);
   }
 
-  GKI_TRACE_ERROR_2("GKI_exception %d %s", code, msg);
-  GKI_TRACE_ERROR_0(
+  LOG(ERROR) << StringPrintf("%d %s", code, msg.c_str());
+  LOG(ERROR) << StringPrintf(
       "********************************************************************");
-  GKI_TRACE_ERROR_2("* GKI_exception(): %d %s", code, msg);
-  GKI_TRACE_ERROR_0(
+  LOG(ERROR) << StringPrintf("* %d %s", code, msg.c_str());
+  LOG(ERROR) << StringPrintf(
       "********************************************************************");
 
-  GKI_TRACE_ERROR_2("GKI_exception %d %s done", code, msg);
+  LOG(ERROR) << StringPrintf("%d %s done", code, msg.c_str());
 
   return;
 }
@@ -1064,9 +1048,11 @@
 **
 *******************************************************************************/
 uint8_t GKI_suspend_task(uint8_t task_id) {
-  GKI_TRACE_1("GKI_suspend_task %d - NOT implemented", task_id);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("GKI_suspend_task %d - NOT implemented", task_id);
 
-  GKI_TRACE_1("GKI_suspend_task %d done", task_id);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("GKI_suspend_task %d done", task_id);
 
   return (GKI_SUCCESS);
 }
@@ -1087,9 +1073,11 @@
 **
 *******************************************************************************/
 uint8_t GKI_resume_task(uint8_t task_id) {
-  GKI_TRACE_1("GKI_resume_task %d - NOT implemented", task_id);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("GKI_resume_task %d - NOT implemented", task_id);
 
-  GKI_TRACE_1("GKI_resume_task %d done", task_id);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("GKI_resume_task %d done", task_id);
 
   return (GKI_SUCCESS);
 }
@@ -1110,6 +1098,9 @@
 **
 *******************************************************************************/
 void GKI_exit_task(uint8_t task_id) {
+  if (task_id >= GKI_MAX_TASKS) {
+    return;
+  }
   GKI_disable();
   gki_cb.com.OSRdyTbl[task_id] = TASK_DEAD;
 
@@ -1123,7 +1114,8 @@
 
   // GKI_send_event(task_id, EVENT_MASK(GKI_SHUTDOWN_EVT));
 
-  GKI_TRACE_1("GKI_exit_task %d done", task_id);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("GKI_exit_task %d done", task_id);
   return;
 }
 
@@ -1142,7 +1134,7 @@
 **
 *******************************************************************************/
 void GKI_sched_lock(void) {
-  GKI_TRACE_0("GKI_sched_lock");
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("GKI_sched_lock");
   GKI_disable();
   return;
 }
@@ -1162,7 +1154,7 @@
 **
 *******************************************************************************/
 void GKI_sched_unlock(void) {
-  GKI_TRACE_0("GKI_sched_unlock");
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("GKI_sched_unlock");
   GKI_enable();
 }
 
@@ -1174,9 +1166,9 @@
 **
 *******************************************************************************/
 void GKI_shiftdown(uint8_t* p_mem, uint32_t len, uint32_t shift_amount) {
-  register uint8_t* ps = p_mem + len - 1;
-  register uint8_t* pd = ps + shift_amount;
-  register uint32_t xx;
+  uint8_t* ps = p_mem + len - 1;
+  uint8_t* pd = ps + shift_amount;
+  uint32_t xx;
 
   for (xx = 0; xx < len; xx++) *pd-- = *ps--;
 }
@@ -1189,9 +1181,9 @@
 **
 *******************************************************************************/
 void GKI_shiftup(uint8_t* p_dest, uint8_t* p_src, uint32_t len) {
-  register uint8_t* ps = p_src;
-  register uint8_t* pd = p_dest;
-  register uint32_t xx;
+  uint8_t* ps = p_src;
+  uint8_t* pd = p_dest;
+  uint32_t xx;
 
   for (xx = 0; xx < len; xx++) *pd++ = *ps++;
 }
diff --git a/src/hal/include/nfc_hal_api.h b/src/hal/include/nfc_hal_api.h
deleted file mode 100644
index e19a8c5..0000000
--- a/src/hal/include/nfc_hal_api.h
+++ /dev/null
@@ -1,248 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2012-2014 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  NFC Hardware Abstraction Layer API
- *
- ******************************************************************************/
-#ifndef NFC_HAL_API_H
-#define NFC_HAL_API_H
-#include <hardware/nfc.h>
-#include "data_types.h"
-#include "nfc_hal_target.h"
-
-/*******************************************************************************
-** tHAL_HCI_NETWK_CMD Definitions
-*******************************************************************************/
-#define HAL_NFC_HCI_NO_UICC_HOST 0x00
-#define HAL_NFC_HCI_UICC0_HOST 0x01
-#define HAL_NFC_HCI_UICC1_HOST 0x02
-#define HAL_NFC_HCI_UICC2_HOST 0x04
-
-typedef uint8_t tHAL_NFC_STATUS;
-typedef void(tHAL_NFC_STATUS_CBACK)(tHAL_NFC_STATUS status);
-typedef void(tHAL_NFC_CBACK)(uint8_t event, tHAL_NFC_STATUS status);
-typedef void(tHAL_NFC_DATA_CBACK)(uint16_t data_len, uint8_t* p_data);
-
-/*******************************************************************************
-** tHAL_NFC_ENTRY HAL entry-point lookup table
-*******************************************************************************/
-
-typedef void(tHAL_API_INITIALIZE)(void);
-typedef void(tHAL_API_TERMINATE)(void);
-typedef void(tHAL_API_OPEN)(tHAL_NFC_CBACK* p_hal_cback,
-                            tHAL_NFC_DATA_CBACK* p_data_cback);
-typedef void(tHAL_API_CLOSE)(void);
-typedef void(tHAL_API_CORE_INITIALIZED)(uint16_t data_len,
-                                        uint8_t* p_core_init_rsp_params);
-typedef void(tHAL_API_WRITE)(uint16_t data_len, uint8_t* p_data);
-typedef bool(tHAL_API_PREDISCOVER)(void);
-typedef void(tHAL_API_CONTROL_GRANTED)(void);
-typedef void(tHAL_API_POWER_CYCLE)(void);
-typedef uint8_t(tHAL_API_GET_MAX_NFCEE)(void);
-
-#define NFC_HAL_DM_PRE_SET_MEM_LEN 5
-typedef struct {
-  uint32_t addr;
-  uint32_t data;
-} tNFC_HAL_DM_PRE_SET_MEM;
-
-/* data members for NFC_HAL-HCI */
-typedef struct {
-  bool nfc_hal_prm_nvm_required; /* set nfc_hal_prm_nvm_required to TRUE, if the
-                                    platform wants to abort PRM process without
-                                    NVM */
-  uint16_t nfc_hal_nfcc_enable_timeout; /* max time to wait for RESET NTF after
-                                           setting REG_PU to high */
-  uint16_t nfc_hal_post_xtal_timeout;   /* max time to wait for RESET NTF after
-                                           setting Xtal frequency */
-#if (NFC_HAL_HCI_INCLUDED == TRUE)
-  bool nfc_hal_first_boot; /* set nfc_hal_first_boot to TRUE, if platform
-                              enables NFC for the first time after bootup */
-  uint8_t nfc_hal_hci_uicc_support; /* set nfc_hal_hci_uicc_support to Zero, if
-                                       no UICC is supported otherwise set
-                                       corresponding bit(s) for every supported
-                                       UICC(s) */
-#endif
-} tNFC_HAL_CFG;
-
-typedef struct {
-  tHAL_API_INITIALIZE* initialize;
-  tHAL_API_TERMINATE* terminate;
-  tHAL_API_OPEN* open;
-  tHAL_API_CLOSE* close;
-  tHAL_API_CORE_INITIALIZED* core_initialized;
-  tHAL_API_WRITE* write;
-  tHAL_API_PREDISCOVER* prediscover;
-  tHAL_API_CONTROL_GRANTED* control_granted;
-  tHAL_API_POWER_CYCLE* power_cycle;
-  tHAL_API_GET_MAX_NFCEE* get_max_ee;
-
-} tHAL_NFC_ENTRY;
-
-/*******************************************************************************
-** HAL API Function Prototypes
-*******************************************************************************/
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*******************************************************************************
-**
-** Function         HAL_NfcInitialize
-**
-** Description      Called when HAL library is loaded.
-**
-**                  Initialize GKI and start the HCIT task
-**
-** Returns          void
-**
-*******************************************************************************/
-void HAL_NfcInitialize(void);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcTerminate
-**
-** Description      Called to terminate NFC HAL
-**
-** Returns          void
-**
-*******************************************************************************/
-void HAL_NfcTerminate(void);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcOpen
-**
-** Description      Open transport and intialize the NFCC, and
-**                  Register callback for HAL event notifications,
-**
-**                  HAL_OPEN_CPLT_EVT will notify when operation is complete.
-**
-** Returns          void
-**
-*******************************************************************************/
-void HAL_NfcOpen(tHAL_NFC_CBACK* p_hal_cback,
-                 tHAL_NFC_DATA_CBACK* p_data_cback);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcClose
-**
-** Description      Prepare for shutdown. A HAL_CLOSE_CPLT_EVT will be
-**                  reported when complete.
-**
-** Returns          void
-**
-*******************************************************************************/
-void HAL_NfcClose(void);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcCoreInitialized
-**
-** Description      Called after the CORE_INIT_RSP is received from the NFCC.
-**                  At this time, the HAL can do any chip-specific
-**                  configuration, and when finished signal the libnfc-nci with
-**                  event HAL_POST_INIT_CPLT_EVT.
-**
-** Returns          void
-**
-*******************************************************************************/
-void HAL_NfcCoreInitialized(uint16_t data_len, uint8_t* p_core_init_rsp_params);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcWrite
-**
-** Description      Send an NCI control message or data packet to the
-**                  transport. If an NCI command message exceeds the transport
-**                  size, HAL is responsible for fragmenting it, Data packets
-**                  must be of the correct size.
-**
-** Returns          void
-**
-*******************************************************************************/
-void HAL_NfcWrite(uint16_t data_len, uint8_t* p_data);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcPreDiscover
-**
-** Description      Perform any vendor-specific pre-discovery actions (if
-**                  needed). If any actions were performed TRUE will be
-**                  returned, and HAL_PRE_DISCOVER_CPLT_EVT will notify when
-**                  actions are completed.
-**
-** Returns          TRUE if vendor-specific pre-discovery actions initialized
-**                  FALSE if no vendor-specific pre-discovery actions are
-**                  needed.
-**
-*******************************************************************************/
-bool HAL_NfcPreDiscover(void);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcControlGranted
-**
-** Description      Grant control to HAL control for sending NCI commands.
-**
-**                  Call in response to HAL_REQUEST_CONTROL_EVT.
-**
-**                  Must only be called when there are no NCI commands pending.
-**
-**                  HAL_RELEASE_CONTROL_EVT will notify when HAL no longer
-**                  needs control of NCI.
-**
-**
-** Returns          void
-**
-*******************************************************************************/
-void HAL_NfcControlGranted(void);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcPowerCycle
-**
-** Description      Restart NFCC by power cyle
-**
-**                  HAL_OPEN_CPLT_EVT will notify when operation is complete.
-**
-** Returns          void
-**
-*******************************************************************************/
-void HAL_NfcPowerCycle(void);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcGetMaxNfcee
-**
-** Description      Retrieve the maximum number of NFCEEs supported by NFCC
-**
-** Returns          the maximum number of NFCEEs supported by NFCC
-**
-*******************************************************************************/
-uint8_t HAL_NfcGetMaxNfcee(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* NFC_HAL_API_H  */
diff --git a/src/hal/include/nfc_hal_target.h b/src/hal/include/nfc_hal_target.h
deleted file mode 100644
index 4bb66e6..0000000
--- a/src/hal/include/nfc_hal_target.h
+++ /dev/null
@@ -1,437 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2012-2014 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-#ifndef NFC_HAL_TARGET_H
-#define NFC_HAL_TARGET_H
-
-#include "data_types.h"
-#include "gki.h"
-
-/****************************************************************************
-** NCI related configuration
-****************************************************************************/
-
-/* Initial Max Control Packet Payload Size (until receiving payload size in
- * INIT_CORE_RSP) */
-#ifndef NFC_HAL_NCI_INIT_CTRL_PAYLOAD_SIZE
-#define NFC_HAL_NCI_INIT_CTRL_PAYLOAD_SIZE 0xFF
-#endif
-
-/* Number of bytes to reserve in front of NCI messages (e.g. for transport
- * header) */
-#ifndef NFC_HAL_NCI_MSG_OFFSET_SIZE
-#define NFC_HAL_NCI_MSG_OFFSET_SIZE 1
-#endif
-
-/* NFC-WAKE */
-#ifndef NFC_HAL_LP_NFC_WAKE_GPIO
-#define NFC_HAL_LP_NFC_WAKE_GPIO UPIO_GENERAL3
-#endif
-
-/* NFCC snooze mode idle timeout before deassert NFC_WAKE in ms */
-#ifndef NFC_HAL_LP_IDLE_TIMEOUT
-#define NFC_HAL_LP_IDLE_TIMEOUT 100
-#endif
-
-/* NFC snooze mode */
-#ifndef NFC_HAL_LP_SNOOZE_MODE
-#define NFC_HAL_LP_SNOOZE_MODE NFC_HAL_LP_SNOOZE_MODE_UART
-#endif
-
-/* Idle Threshold Host in 100ms unit */
-#ifndef NFC_HAL_LP_IDLE_THRESHOLD_HOST
-#define NFC_HAL_LP_IDLE_THRESHOLD_HOST 0
-#endif
-
-/* Idle Threshold HC in 100ms unit */
-#ifndef NFC_HAL_LP_IDLE_THRESHOLD_HC
-#define NFC_HAL_LP_IDLE_THRESHOLD_HC 0
-#endif
-
-/* Default NFCC power-up baud rate */
-#ifndef NFC_HAL_DEFAULT_BAUD
-#define NFC_HAL_DEFAULT_BAUD USERIAL_BAUD_115200
-#endif
-
-/* time (in ms) between power off and on NFCC */
-#ifndef NFC_HAL_POWER_CYCLE_DELAY
-#define NFC_HAL_POWER_CYCLE_DELAY 100
-#endif
-
-/* time (in ms) between power off and on NFCC */
-#ifndef NFC_HAL_NFCC_ENABLE_TIMEOUT
-#define NFC_HAL_NFCC_ENABLE_TIMEOUT 1000
-#endif
-
-#ifndef NFC_HAL_PRM_DEBUG
-#define NFC_HAL_PRM_DEBUG TRUE
-#endif
-
-/* max patch data length (Can be overridden by platform for ACL HCI command
- * size) */
-#ifndef NFC_HAL_PRM_HCD_CMD_MAXLEN
-#define NFC_HAL_PRM_HCD_CMD_MAXLEN 250
-#endif
-
-/* Require PreI2C patch by default */
-#ifndef NFC_HAL_PRE_I2C_PATCH_INCLUDED
-#define NFC_HAL_PRE_I2C_PATCH_INCLUDED TRUE
-#endif
-
-/* Mininum payload size for SPD NCI commands (used to validate
- * HAL_NfcPrmSetSpdNciCmdPayloadSize) */
-/* Default is 32, as required by the NCI specifications; however this value may
- * be          */
-/* over-riden for platforms that have transport packet limitations */
-#ifndef NFC_HAL_PRM_MIN_NCI_CMD_PAYLOAD_SIZE
-#define NFC_HAL_PRM_MIN_NCI_CMD_PAYLOAD_SIZE (32)
-#endif
-
-/* amount of time to wait for authenticating/committing patch to NVM */
-#ifndef NFC_HAL_PRM_COMMIT_DELAY
-#define NFC_HAL_PRM_COMMIT_DELAY (30000)
-#endif
-
-/* amount of time to wait after downloading preI2C patch before downloading
- * LPM/FPM patch */
-#ifndef NFC_HAL_PRM_POST_I2C_FIX_DELAY
-#define NFC_HAL_PRM_POST_I2C_FIX_DELAY (200)
-#endif
-
-/* NFCC will respond to more than one technology during listen discovery  */
-#ifndef NFC_HAL_DM_MULTI_TECH_RESP
-#define NFC_HAL_DM_MULTI_TECH_RESP TRUE
-#endif
-
-/* Data rate for 15693 command/response, it must be same as
- * RW_I93_FLAG_DATA_RATE in nfc_target.h */
-#define NFC_HAL_I93_FLAG_DATA_RATE_LOW 0x00
-#define NFC_HAL_I93_FLAG_DATA_RATE_HIGH 0x02
-
-#ifndef NFC_HAL_I93_FLAG_DATA_RATE
-#define NFC_HAL_I93_FLAG_DATA_RATE NFC_HAL_I93_FLAG_DATA_RATE_HIGH
-#endif
-
-/* NFC HAL HCI */
-#ifndef NFC_HAL_HCI_INCLUDED
-#define NFC_HAL_HCI_INCLUDED TRUE
-#endif
-
-/* Quick Timer */
-#ifndef QUICK_TIMER_TICKS_PER_SEC
-#define QUICK_TIMER_TICKS_PER_SEC 100 /* 10ms timer */
-#endif
-
-#ifndef NFC_HAL_SHARED_TRANSPORT_ENABLED
-#define NFC_HAL_SHARED_TRANSPORT_ENABLED FALSE
-#endif
-
-/* Enable verbose tracing by default */
-#ifndef NFC_HAL_TRACE_VERBOSE
-#define NFC_HAL_TRACE_VERBOSE TRUE
-#endif
-
-#ifndef NFC_HAL_INITIAL_TRACE_LEVEL
-#define NFC_HAL_INITIAL_TRACE_LEVEL 5
-#endif
-
-/* Map NFC serial port to USERIAL_PORT_6 by default */
-#ifndef USERIAL_NFC_PORT
-#define USERIAL_NFC_PORT (USERIAL_PORT_6)
-#endif
-
-/* Restore NFCC baud rate to default on shutdown if baud rate was updated */
-#ifndef NFC_HAL_RESTORE_BAUD_ON_SHUTDOWN
-#define NFC_HAL_RESTORE_BAUD_ON_SHUTDOWN TRUE
-#endif
-
-/* Enable protocol tracing by default */
-#ifndef NFC_HAL_TRACE_PROTOCOL
-#define NFC_HAL_TRACE_PROTOCOL TRUE
-#endif
-
-/* Legacy protocol-trace-enable macro */
-#ifndef BT_TRACE_PROTOCOL
-#define BT_TRACE_PROTOCOL (NFC_HAL_TRACE_PROTOCOL)
-#endif
-
-/* Enable HAL tracing by default */
-#ifndef NFC_HAL_USE_TRACES
-#define NFC_HAL_USE_TRACES TRUE
-#endif
-
-/* HAL trace macros */
-#if (NFC_HAL_USE_TRACES == TRUE)
-#define NCI_TRACE_0(l, t, m) \
-  LogMsg((TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t)), (m))
-#define NCI_TRACE_1(l, t, m, p1) \
-  LogMsg(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t), (m), (uintptr_t)(p1))
-#define NCI_TRACE_2(l, t, m, p1, p2)                            \
-  LogMsg(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t), (m), \
-         (uintptr_t)(p1), (uintptr_t)(p2))
-#define NCI_TRACE_3(l, t, m, p1, p2, p3)                        \
-  LogMsg(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t), (m), \
-         (uintptr_t)(p1), (uintptr_t)(p2), (uintptr_t)(p3))
-#define NCI_TRACE_4(l, t, m, p1, p2, p3, p4)                    \
-  LogMsg(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t), (m), \
-         (uintptr_t)(p1), (uintptr_t)(p2), (uintptr_t)(p3), (uintptr_t)(p4))
-#define NCI_TRACE_5(l, t, m, p1, p2, p3, p4, p5)                             \
-  LogMsg(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t), (m),              \
-         (uintptr_t)(p1), (uintptr_t)(p2), (uintptr_t)(p3), (uintptr_t)(p4), \
-         (uintptr_t)(p5))
-#define NCI_TRACE_6(l, t, m, p1, p2, p3, p4, p5, p6)                         \
-  LogMsg(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t), (m),              \
-         (uintptr_t)(p1), (uintptr_t)(p2), (uintptr_t)(p3), (uintptr_t)(p4), \
-         (uintptr_t)(p5), (uintptr_t)(p6))
-
-#define HAL_TRACE_ERROR0(m)                              \
-  {                                                      \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR)  \
-      NCI_TRACE_0(TRACE_LAYER_HAL, TRACE_TYPE_ERROR, m); \
-  }
-#define HAL_TRACE_ERROR1(m, p1)                              \
-  {                                                          \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR)      \
-      NCI_TRACE_1(TRACE_LAYER_HAL, TRACE_TYPE_ERROR, m, p1); \
-  }
-#define HAL_TRACE_ERROR2(m, p1, p2)                              \
-  {                                                              \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR)          \
-      NCI_TRACE_2(TRACE_LAYER_HAL, TRACE_TYPE_ERROR, m, p1, p2); \
-  }
-#define HAL_TRACE_ERROR3(m, p1, p2, p3)                              \
-  {                                                                  \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR)              \
-      NCI_TRACE_3(TRACE_LAYER_HAL, TRACE_TYPE_ERROR, m, p1, p2, p3); \
-  }
-#define HAL_TRACE_ERROR4(m, p1, p2, p3, p4)                              \
-  {                                                                      \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                  \
-      NCI_TRACE_4(TRACE_LAYER_HAL, TRACE_TYPE_ERROR, m, p1, p2, p3, p4); \
-  }
-#define HAL_TRACE_ERROR5(m, p1, p2, p3, p4, p5)                              \
-  {                                                                          \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                      \
-      NCI_TRACE_5(TRACE_LAYER_HAL, TRACE_TYPE_ERROR, m, p1, p2, p3, p4, p5); \
-  }
-#define HAL_TRACE_ERROR6(m, p1, p2, p3, p4, p5, p6)                         \
-  {                                                                         \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                     \
-      NCI_TRACE_6(TRACE_LAYER_HAL, TRACE_TYPE_ERROR, m, p1, p2, p3, p4, p5, \
-                  p6);                                                      \
-  }
-
-#define HAL_TRACE_WARNING0(m)                              \
-  {                                                        \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING)  \
-      NCI_TRACE_0(TRACE_LAYER_HAL, TRACE_TYPE_WARNING, m); \
-  }
-#define HAL_TRACE_WARNING1(m, p1)                              \
-  {                                                            \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING)      \
-      NCI_TRACE_1(TRACE_LAYER_HAL, TRACE_TYPE_WARNING, m, p1); \
-  }
-#define HAL_TRACE_WARNING2(m, p1, p2)                              \
-  {                                                                \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING)          \
-      NCI_TRACE_2(TRACE_LAYER_HAL, TRACE_TYPE_WARNING, m, p1, p2); \
-  }
-#define HAL_TRACE_WARNING3(m, p1, p2, p3)                              \
-  {                                                                    \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING)              \
-      NCI_TRACE_3(TRACE_LAYER_HAL, TRACE_TYPE_WARNING, m, p1, p2, p3); \
-  }
-#define HAL_TRACE_WARNING4(m, p1, p2, p3, p4)                              \
-  {                                                                        \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                  \
-      NCI_TRACE_4(TRACE_LAYER_HAL, TRACE_TYPE_WARNING, m, p1, p2, p3, p4); \
-  }
-#define HAL_TRACE_WARNING5(m, p1, p2, p3, p4, p5)                              \
-  {                                                                            \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                      \
-      NCI_TRACE_5(TRACE_LAYER_HAL, TRACE_TYPE_WARNING, m, p1, p2, p3, p4, p5); \
-  }
-#define HAL_TRACE_WARNING6(m, p1, p2, p3, p4, p5, p6)                         \
-  {                                                                           \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                     \
-      NCI_TRACE_6(TRACE_LAYER_HAL, TRACE_TYPE_WARNING, m, p1, p2, p3, p4, p5, \
-                  p6);                                                        \
-  }
-
-#define HAL_TRACE_API0(m)                              \
-  {                                                    \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API)  \
-      NCI_TRACE_0(TRACE_LAYER_HAL, TRACE_TYPE_API, m); \
-  }
-#define HAL_TRACE_API1(m, p1)                              \
-  {                                                        \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API)      \
-      NCI_TRACE_1(TRACE_LAYER_HAL, TRACE_TYPE_API, m, p1); \
-  }
-#define HAL_TRACE_API2(m, p1, p2)                              \
-  {                                                            \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API)          \
-      NCI_TRACE_2(TRACE_LAYER_HAL, TRACE_TYPE_API, m, p1, p2); \
-  }
-#define HAL_TRACE_API3(m, p1, p2, p3)                              \
-  {                                                                \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API)              \
-      NCI_TRACE_3(TRACE_LAYER_HAL, TRACE_TYPE_API, m, p1, p2, p3); \
-  }
-#define HAL_TRACE_API4(m, p1, p2, p3, p4)                              \
-  {                                                                    \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API)                  \
-      NCI_TRACE_4(TRACE_LAYER_HAL, TRACE_TYPE_API, m, p1, p2, p3, p4); \
-  }
-#define HAL_TRACE_API5(m, p1, p2, p3, p4, p5)                              \
-  {                                                                        \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API)                      \
-      NCI_TRACE_5(TRACE_LAYER_HAL, TRACE_TYPE_API, m, p1, p2, p3, p4, p5); \
-  }
-#define HAL_TRACE_API6(m, p1, p2, p3, p4, p5, p6)                              \
-  {                                                                            \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API)                          \
-      NCI_TRACE_6(TRACE_LAYER_HAL, TRACE_TYPE_API, m, p1, p2, p3, p4, p5, p6); \
-  }
-
-#define HAL_TRACE_EVENT0(m)                              \
-  {                                                      \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT)  \
-      NCI_TRACE_0(TRACE_LAYER_HAL, TRACE_TYPE_EVENT, m); \
-  }
-#define HAL_TRACE_EVENT1(m, p1)                              \
-  {                                                          \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT)      \
-      NCI_TRACE_1(TRACE_LAYER_HAL, TRACE_TYPE_EVENT, m, p1); \
-  }
-#define HAL_TRACE_EVENT2(m, p1, p2)                              \
-  {                                                              \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT)          \
-      NCI_TRACE_2(TRACE_LAYER_HAL, TRACE_TYPE_EVENT, m, p1, p2); \
-  }
-#define HAL_TRACE_EVENT3(m, p1, p2, p3)                              \
-  {                                                                  \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT)              \
-      NCI_TRACE_3(TRACE_LAYER_HAL, TRACE_TYPE_EVENT, m, p1, p2, p3); \
-  }
-#define HAL_TRACE_EVENT4(m, p1, p2, p3, p4)                              \
-  {                                                                      \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                  \
-      NCI_TRACE_4(TRACE_LAYER_HAL, TRACE_TYPE_EVENT, m, p1, p2, p3, p4); \
-  }
-#define HAL_TRACE_EVENT5(m, p1, p2, p3, p4, p5)                              \
-  {                                                                          \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                      \
-      NCI_TRACE_5(TRACE_LAYER_HAL, TRACE_TYPE_EVENT, m, p1, p2, p3, p4, p5); \
-  }
-#define HAL_TRACE_EVENT6(m, p1, p2, p3, p4, p5, p6)                         \
-  {                                                                         \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                     \
-      NCI_TRACE_6(TRACE_LAYER_HAL, TRACE_TYPE_EVENT, m, p1, p2, p3, p4, p5, \
-                  p6);                                                      \
-  }
-
-#define HAL_TRACE_DEBUG0(m)                              \
-  {                                                      \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)  \
-      NCI_TRACE_0(TRACE_LAYER_HAL, TRACE_TYPE_DEBUG, m); \
-  }
-#define HAL_TRACE_DEBUG1(m, p1)                              \
-  {                                                          \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)      \
-      NCI_TRACE_1(TRACE_LAYER_HAL, TRACE_TYPE_DEBUG, m, p1); \
-  }
-#define HAL_TRACE_DEBUG2(m, p1, p2)                              \
-  {                                                              \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)          \
-      NCI_TRACE_2(TRACE_LAYER_HAL, TRACE_TYPE_DEBUG, m, p1, p2); \
-  }
-#define HAL_TRACE_DEBUG3(m, p1, p2, p3)                              \
-  {                                                                  \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)              \
-      NCI_TRACE_3(TRACE_LAYER_HAL, TRACE_TYPE_DEBUG, m, p1, p2, p3); \
-  }
-#define HAL_TRACE_DEBUG4(m, p1, p2, p3, p4)                              \
-  {                                                                      \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                  \
-      NCI_TRACE_4(TRACE_LAYER_HAL, TRACE_TYPE_DEBUG, m, p1, p2, p3, p4); \
-  }
-#define HAL_TRACE_DEBUG5(m, p1, p2, p3, p4, p5)                              \
-  {                                                                          \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                      \
-      NCI_TRACE_5(TRACE_LAYER_HAL, TRACE_TYPE_DEBUG, m, p1, p2, p3, p4, p5); \
-  }
-#define HAL_TRACE_DEBUG6(m, p1, p2, p3, p4, p5, p6)                         \
-  {                                                                         \
-    if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                     \
-      NCI_TRACE_6(TRACE_LAYER_HAL, TRACE_TYPE_DEBUG, m, p1, p2, p3, p4, p5, \
-                  p6);                                                      \
-  }
-
-#else /* Disable HAL tracing */
-
-#define HAL_TRACE_0(l, t, m)
-#define HAL_TRACE_1(l, t, m, p1)
-#define HAL_TRACE_2(l, t, m, p1, p2)
-#define HAL_TRACE_3(l, t, m, p1, p2, p3)
-#define HAL_TRACE_4(l, t, m, p1, p2, p3, p4)
-#define HAL_TRACE_5(l, t, m, p1, p2, p3, p4, p5)
-#define HAL_TRACE_6(l, t, m, p1, p2, p3, p4, p5, p6)
-
-#define HAL_TRACE_ERROR0(m)
-#define HAL_TRACE_ERROR1(m, p1)
-#define HAL_TRACE_ERROR2(m, p1, p2)
-#define HAL_TRACE_ERROR3(m, p1, p2, p3)
-#define HAL_TRACE_ERROR4(m, p1, p2, p3, p4)
-#define HAL_TRACE_ERROR5(m, p1, p2, p3, p4, p5)
-#define HAL_TRACE_ERROR6(m, p1, p2, p3, p4, p5, p6)
-
-#define HAL_TRACE_WARNING0(m)
-#define HAL_TRACE_WARNING1(m, p1)
-#define HAL_TRACE_WARNING2(m, p1, p2)
-#define HAL_TRACE_WARNING3(m, p1, p2, p3)
-#define HAL_TRACE_WARNING4(m, p1, p2, p3, p4)
-#define HAL_TRACE_WARNING5(m, p1, p2, p3, p4, p5)
-#define HAL_TRACE_WARNING6(m, p1, p2, p3, p4, p5, p6)
-
-#define HAL_TRACE_API0(m)
-#define HAL_TRACE_API1(m, p1)
-#define HAL_TRACE_API2(m, p1, p2)
-#define HAL_TRACE_API3(m, p1, p2, p3)
-#define HAL_TRACE_API4(m, p1, p2, p3, p4)
-#define HAL_TRACE_API5(m, p1, p2, p3, p4, p5)
-#define HAL_TRACE_API6(m, p1, p2, p3, p4, p5, p6)
-
-#define HAL_TRACE_EVENT0(m)
-#define HAL_TRACE_EVENT1(m, p1)
-#define HAL_TRACE_EVENT2(m, p1, p2)
-#define HAL_TRACE_EVENT3(m, p1, p2, p3)
-#define HAL_TRACE_EVENT4(m, p1, p2, p3, p4)
-#define HAL_TRACE_EVENT5(m, p1, p2, p3, p4, p5)
-#define HAL_TRACE_EVENT6(m, p1, p2, p3, p4, p5, p6)
-
-#define HAL_TRACE_DEBUG0(m)
-#define HAL_TRACE_DEBUG1(m, p1)
-#define HAL_TRACE_DEBUG2(m, p1, p2)
-#define HAL_TRACE_DEBUG3(m, p1, p2, p3)
-#define HAL_TRACE_DEBUG4(m, p1, p2, p3, p4)
-#define HAL_TRACE_DEBUG5(m, p1, p2, p3, p4, p5)
-#define HAL_TRACE_DEBUG6(m, p1, p2, p3, p4, p5, p6)
-#endif /* Disable HAL tracing */
-
-#endif /* GKI_TARGET_H */
diff --git a/src/hal/include/nfc_types.h b/src/hal/include/nfc_types.h
deleted file mode 100644
index 6ba5efc..0000000
--- a/src/hal/include/nfc_types.h
+++ /dev/null
@@ -1,351 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2012-2014 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-#ifndef NFC_TYPES_H
-#define NFC_TYPES_H
-
-/****************************************************************************
-** NFC_HDR header definition for NFC messages
-*****************************************************************************/
-typedef struct {
-  uint16_t event;
-  uint16_t len;
-  uint16_t offset;
-  uint16_t layer_specific;
-} NFC_HDR;
-#define NFC_HDR_SIZE (sizeof(NFC_HDR))
-
-/* Mask for NFC_HDR event field */
-#define NFC_EVT_MASK 0xFF00
-#define NFC_SUB_EVT_MASK 0x00FF
-
-/****************************************************************************
-** NFC_HAL_TASK  definitions
-*****************************************************************************/
-
-/* NFC_HAL_TASK event messages */
-/* NCI message for sending to NFCC          */
-#define NFC_HAL_EVT_TO_NFC_NCI 0x0100
-/* Request to start NCIT quick timer        */
-#define NFC_HAL_EVT_POST_CORE_RESET 0x0200
-/* Request to start chip-specific config    */
-#define NFC_HAL_EVT_TO_START_QUICK_TIMER 0x0300
-/* NCI message for hci persistency data     */
-#define NFC_HAL_EVT_HCI 0x0400
-/* NCI message to issue prediscover config  */
-#define NFC_HAL_EVT_PRE_DISCOVER 0x0500
-/* permission to send commands queued in HAL*/
-#define NFC_HAL_EVT_CONTROL_GRANTED 0x0600
-
-/* NFC_HAL_TASK sub event messages */
-#define NFC_HAL_HCI_RSP_NV_READ_EVT (0x01 | NFC_HAL_EVT_HCI)
-#define NFC_HAL_HCI_RSP_NV_WRITE_EVT (0x02 | NFC_HAL_EVT_HCI)
-#define NFC_HAL_HCI_VSC_TIMEOUT_EVT (0x03 | NFC_HAL_EVT_HCI)
-
-/* Event masks for NFC_TASK messages */
-/* NCI message for sending to host stack    */
-#define NFC_EVT_TO_NFC_NCI 0x4000
-/* Error notification to NFC Task           */
-#define NFC_EVT_TO_NFC_ERR 0x4100
-/* Messages between NFC and NCI task        */
-#define NFC_EVT_TO_NFC_MSGS 0x4200
-
-/*****************************************************************************
-** Macros to get and put bytes to and from a stream (Little Endian format).
-*****************************************************************************/
-
-#define UINT32_TO_STREAM(p, u32)     \
-  {                                  \
-    *(p)++ = (uint8_t)(u32);         \
-    *(p)++ = (uint8_t)((u32) >> 8);  \
-    *(p)++ = (uint8_t)((u32) >> 16); \
-    *(p)++ = (uint8_t)((u32) >> 24); \
-  }
-#define UINT24_TO_STREAM(p, u24)     \
-  {                                  \
-    *(p)++ = (uint8_t)(u24);         \
-    *(p)++ = (uint8_t)((u24) >> 8);  \
-    *(p)++ = (uint8_t)((u24) >> 16); \
-  }
-#define UINT16_TO_STREAM(p, u16)    \
-  {                                 \
-    *(p)++ = (uint8_t)(u16);        \
-    *(p)++ = (uint8_t)((u16) >> 8); \
-  }
-#define UINT8_TO_STREAM(p, u8) \
-  { *(p)++ = (uint8_t)(u8); }
-#define INT8_TO_STREAM(p, u8) \
-  { *(p)++ = (int8_t)(u8); }
-#define ARRAY32_TO_STREAM(p, a)                                   \
-  {                                                               \
-    register int ijk;                                             \
-    for (ijk = 0; ijk < 32; ijk++) *(p)++ = (uint8_t)a[31 - ijk]; \
-  }
-#define ARRAY16_TO_STREAM(p, a)                                   \
-  {                                                               \
-    register int ijk;                                             \
-    for (ijk = 0; ijk < 16; ijk++) *(p)++ = (uint8_t)a[15 - ijk]; \
-  }
-#define ARRAY8_TO_STREAM(p, a)                                  \
-  {                                                             \
-    register int ijk;                                           \
-    for (ijk = 0; ijk < 8; ijk++) *(p)++ = (uint8_t)a[7 - ijk]; \
-  }
-#define BDADDR_TO_STREAM(p, a)                    \
-  {                                               \
-    register int ijk;                             \
-    for (ijk = 0; ijk < BD_ADDR_LEN; ijk++)       \
-      *(p)++ = (uint8_t)a[BD_ADDR_LEN - 1 - ijk]; \
-  }
-#define LAP_TO_STREAM(p, a)                   \
-  {                                           \
-    register int ijk;                         \
-    for (ijk = 0; ijk < LAP_LEN; ijk++)       \
-      *(p)++ = (uint8_t)a[LAP_LEN - 1 - ijk]; \
-  }
-#define DEVCLASS_TO_STREAM(p, a)                    \
-  {                                                 \
-    register int ijk;                               \
-    for (ijk = 0; ijk < DEV_CLASS_LEN; ijk++)       \
-      *(p)++ = (uint8_t)a[DEV_CLASS_LEN - 1 - ijk]; \
-  }
-#define ARRAY_TO_STREAM(p, a, len)                            \
-  {                                                           \
-    register int ijk;                                         \
-    for (ijk = 0; ijk < len; ijk++) *(p)++ = (uint8_t)a[ijk]; \
-  }
-#define REVERSE_ARRAY_TO_STREAM(p, a, len)                              \
-  {                                                                     \
-    register int ijk;                                                   \
-    for (ijk = 0; ijk < len; ijk++) *(p)++ = (uint8_t)a[len - 1 - ijk]; \
-  }
-
-#define STREAM_TO_UINT8(u8, p) \
-  {                            \
-    u8 = (uint8_t)(*(p));      \
-    (p) += 1;                  \
-  }
-#define STREAM_TO_UINT16(u16, p)                                \
-  {                                                             \
-    u16 = ((uint16_t)(*(p)) + (((uint16_t)(*((p) + 1))) << 8)); \
-    (p) += 2;                                                   \
-  }
-#define STREAM_TO_UINT24(u32, p)                                    \
-  {                                                                 \
-    u32 = (((uint32_t)(*(p))) + ((((uint32_t)(*((p) + 1)))) << 8) + \
-           ((((uint32_t)(*((p) + 2)))) << 16));                     \
-    (p) += 3;                                                       \
-  }
-#define STREAM_TO_UINT32(u32, p)                                    \
-  {                                                                 \
-    u32 = (((uint32_t)(*(p))) + ((((uint32_t)(*((p) + 1)))) << 8) + \
-           ((((uint32_t)(*((p) + 2)))) << 16) +                     \
-           ((((uint32_t)(*((p) + 3)))) << 24));                     \
-    (p) += 4;                                                       \
-  }
-#define STREAM_TO_BDADDR(a, p)                              \
-  {                                                         \
-    register int ijk;                                       \
-    register uint8_t* pbda = (uint8_t*)a + BD_ADDR_LEN - 1; \
-    for (ijk = 0; ijk < BD_ADDR_LEN; ijk++) *pbda-- = *p++; \
-  }
-#define STREAM_TO_ARRAY32(a, p)                   \
-  {                                               \
-    register int ijk;                             \
-    register uint8_t* _pa = (uint8_t*)a + 31;     \
-    for (ijk = 0; ijk < 32; ijk++) *_pa-- = *p++; \
-  }
-#define STREAM_TO_ARRAY16(a, p)                   \
-  {                                               \
-    register int ijk;                             \
-    register uint8_t* _pa = (uint8_t*)a + 15;     \
-    for (ijk = 0; ijk < 16; ijk++) *_pa-- = *p++; \
-  }
-#define STREAM_TO_ARRAY8(a, p)                   \
-  {                                              \
-    register int ijk;                            \
-    register uint8_t* _pa = (uint8_t*)a + 7;     \
-    for (ijk = 0; ijk < 8; ijk++) *_pa-- = *p++; \
-  }
-#define STREAM_TO_DEVCLASS(a, p)                             \
-  {                                                          \
-    register int ijk;                                        \
-    register uint8_t* _pa = (uint8_t*)a + DEV_CLASS_LEN - 1; \
-    for (ijk = 0; ijk < DEV_CLASS_LEN; ijk++) *_pa-- = *p++; \
-  }
-#define STREAM_TO_LAP(a, p)                             \
-  {                                                     \
-    register int ijk;                                   \
-    register uint8_t* plap = (uint8_t*)a + LAP_LEN - 1; \
-    for (ijk = 0; ijk < LAP_LEN; ijk++) *plap-- = *p++; \
-  }
-#define STREAM_TO_ARRAY(a, p, len)                             \
-  {                                                            \
-    register int ijk;                                          \
-    for (ijk = 0; ijk < len; ijk++) ((uint8_t*)a)[ijk] = *p++; \
-  }
-#define REVERSE_STREAM_TO_ARRAY(a, p, len)         \
-  {                                                \
-    register int ijk;                              \
-    register uint8_t* _pa = (uint8_t*)a + len - 1; \
-    for (ijk = 0; ijk < len; ijk++) *_pa-- = *p++; \
-  }
-
-/*****************************************************************************
-** Macros to get and put bytes to and from a field (Little Endian format).
-** These are the same as to stream, except the pointer is not incremented.
-*****************************************************************************/
-
-#define UINT32_TO_FIELD(p, u32)                    \
-  {                                                \
-    *(uint8_t*)(p) = (uint8_t)(u32);               \
-    *((uint8_t*)(p) + 1) = (uint8_t)((u32) >> 8);  \
-    *((uint8_t*)(p) + 2) = (uint8_t)((u32) >> 16); \
-    *((uint8_t*)(p) + 3) = (uint8_t)((u32) >> 24); \
-  }
-#define UINT24_TO_FIELD(p, u24)                    \
-  {                                                \
-    *(uint8_t*)(p) = (uint8_t)(u24);               \
-    *((uint8_t*)(p) + 1) = (uint8_t)((u24) >> 8);  \
-    *((uint8_t*)(p) + 2) = (uint8_t)((u24) >> 16); \
-  }
-#define UINT16_TO_FIELD(p, u16)                   \
-  {                                               \
-    *(uint8_t*)(p) = (uint8_t)(u16);              \
-    *((uint8_t*)(p) + 1) = (uint8_t)((u16) >> 8); \
-  }
-#define UINT8_TO_FIELD(p, u8) \
-  { *(uint8_t*)(p) = (uint8_t)(u8); }
-
-/*****************************************************************************
-** Macros to get and put bytes to and from a stream (Big Endian format)
-*****************************************************************************/
-
-#define UINT32_TO_BE_STREAM(p, u32)  \
-  {                                  \
-    *(p)++ = (uint8_t)((u32) >> 24); \
-    *(p)++ = (uint8_t)((u32) >> 16); \
-    *(p)++ = (uint8_t)((u32) >> 8);  \
-    *(p)++ = (uint8_t)(u32);         \
-  }
-#define UINT24_TO_BE_STREAM(p, u24)  \
-  {                                  \
-    *(p)++ = (uint8_t)((u24) >> 16); \
-    *(p)++ = (uint8_t)((u24) >> 8);  \
-    *(p)++ = (uint8_t)(u24);         \
-  }
-#define UINT16_TO_BE_STREAM(p, u16) \
-  {                                 \
-    *(p)++ = (uint8_t)((u16) >> 8); \
-    *(p)++ = (uint8_t)(u16);        \
-  }
-#define UINT8_TO_BE_STREAM(p, u8) \
-  { *(p)++ = (uint8_t)(u8); }
-#define ARRAY_TO_BE_STREAM(p, a, len)                         \
-  {                                                           \
-    register int ijk;                                         \
-    for (ijk = 0; ijk < len; ijk++) *(p)++ = (uint8_t)a[ijk]; \
-  }
-
-#define BE_STREAM_TO_UINT8(u8, p) \
-  {                               \
-    u8 = (uint8_t)(*(p));         \
-    (p) += 1;                     \
-  }
-#define BE_STREAM_TO_UINT16(u16, p)                                     \
-  {                                                                     \
-    u16 = (uint16_t)(((uint16_t)(*(p)) << 8) + (uint16_t)(*((p) + 1))); \
-    (p) += 2;                                                           \
-  }
-#define BE_STREAM_TO_UINT24(u32, p)                                   \
-  {                                                                   \
-    u32 = (((uint32_t)(*((p) + 2))) + ((uint32_t)(*((p) + 1)) << 8) + \
-           ((uint32_t)(*(p)) << 16));                                 \
-    (p) += 3;                                                         \
-  }
-#define BE_STREAM_TO_UINT32(u32, p)                                    \
-  {                                                                    \
-    u32 = ((uint32_t)(*((p) + 3)) + ((uint32_t)(*((p) + 2)) << 8) +    \
-           ((uint32_t)(*((p) + 1)) << 16) + ((uint32_t)(*(p)) << 24)); \
-    (p) += 4;                                                          \
-  }
-#define BE_STREAM_TO_ARRAY(p, a, len)                          \
-  {                                                            \
-    register int ijk;                                          \
-    for (ijk = 0; ijk < len; ijk++) ((uint8_t*)a)[ijk] = *p++; \
-  }
-
-/*****************************************************************************
-** Macros to get and put bytes to and from a field (Big Endian format).
-** These are the same as to stream, except the pointer is not incremented.
-*****************************************************************************/
-
-#define UINT32_TO_BE_FIELD(p, u32)                 \
-  {                                                \
-    *(uint8_t*)(p) = (uint8_t)((u32) >> 24);       \
-    *((uint8_t*)(p) + 1) = (uint8_t)((u32) >> 16); \
-    *((uint8_t*)(p) + 2) = (uint8_t)((u32) >> 8);  \
-    *((uint8_t*)(p) + 3) = (uint8_t)(u32);         \
-  }
-#define UINT24_TO_BE_FIELD(p, u24)                \
-  {                                               \
-    *(uint8_t*)(p) = (uint8_t)((u24) >> 16);      \
-    *((uint8_t*)(p) + 1) = (uint8_t)((u24) >> 8); \
-    *((uint8_t*)(p) + 2) = (uint8_t)(u24);        \
-  }
-#define UINT16_TO_BE_FIELD(p, u16)          \
-  {                                         \
-    *(uint8_t*)(p) = (uint8_t)((u16) >> 8); \
-    *((uint8_t*)(p) + 1) = (uint8_t)(u16);  \
-  }
-#define UINT8_TO_BE_FIELD(p, u8) \
-  { *(uint8_t*)(p) = (uint8_t)(u8); }
-
-/*****************************************************************************
-** Define trace levels
-*****************************************************************************/
-
-/* No trace messages to be generated    */
-#define BT_TRACE_LEVEL_NONE 0
-/* Error condition trace messages       */
-#define BT_TRACE_LEVEL_ERROR 1
-/* Warning condition trace messages     */
-#define BT_TRACE_LEVEL_WARNING 2
-/* API traces                           */
-#define BT_TRACE_LEVEL_API 3
-/* Debug messages for events            */
-#define BT_TRACE_LEVEL_EVENT 4
-/* Full debug messages                  */
-#define BT_TRACE_LEVEL_DEBUG 5
-
-#define TRACE_CTRL_GENERAL 0x00000000
-#define TRACE_LAYER_NCI 0x00280000
-#define TRACE_LAYER_HAL 0x00310000
-#define TRACE_LAYER_GKI 0x001a0000
-#define TRACE_ORG_STACK 0x00000000
-#define TRACE_ORG_GKI 0x00000400
-
-#define TRACE_TYPE_ERROR 0x00000000
-#define TRACE_TYPE_WARNING 0x00000001
-#define TRACE_TYPE_API 0x00000002
-#define TRACE_TYPE_EVENT 0x00000003
-#define TRACE_TYPE_DEBUG 0x00000004
-
-#define TRACE_TYPE_GENERIC 0x00000008
-
-#endif /* NFC_TYPES_H */
diff --git a/src/hal/int/nfc_brcm_defs.h b/src/hal/int/nfc_brcm_defs.h
deleted file mode 100644
index c66ecd4..0000000
--- a/src/hal/int/nfc_brcm_defs.h
+++ /dev/null
@@ -1,421 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2012-2014 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  This file contains the Broadcom-specific defintions that are shared
- *  between HAL, nfc stack, adaptation layer and applications.
- *
- ******************************************************************************/
-
-#ifndef NFC_BRCM_DEFS_H
-#define NFC_BRCM_DEFS_H
-
-/*****************************************************************************
-** Broadcom HW ID definitions
-*****************************************************************************/
-#define BRCM_20791B3_ID 0x20791b03
-#define BRCM_20791B4_ID 0x20791b04
-#define BRCM_20791B5_ID 0x20791b05
-#define BRCM_43341B0_ID 0x43341b00
-#define BRCM_20795T1_ID 0x20795a01
-#define BRCM_20795A0_ID 0x20795a00
-#define BRCM_20795A1_ID 0x20795a10
-
-#define BRCM_NFC_GEN_MASK 0xFFFFF000 /* HW generation mask */
-#define BRCM_NFC_REV_MASK 0x00000FFF /* HW revision mask   */
-#define BRCM_NFC_20791_GEN 0x20791000
-#define BRCM_NFC_20791_GEN_MAX_EE 3 /* HCI access and 2 UICCs */
-#define BRCM_NFC_43341_GEN 0x43341000
-#define BRCM_NFC_43341_GEN_MAX_EE 3 /* HCI access and 2 UICCs */
-#define BRCM_NFC_20795_GEN 0x20795000
-#define BRCM_NFC_20795_GEN_MAX_EE 4 /* HCI access and 3 UICCs */
-
-/*****************************************************************************
-** Broadcom-specific NCI definitions
-*****************************************************************************/
-
-/**********************************************
- * NCI Message Proprietary  Group       - F
- **********************************************/
-#define NCI_MSG_TAG_SET_MEM 0x00
-#define NCI_MSG_TAG_GET_MEM 0x01
-#define NCI_MSG_T1T_SET_HR 0x02
-#define NCI_MSG_SET_CLF_REGISTERS 0x03
-#define NCI_MSG_GET_BUILD_INFO 0x04
-#define NCI_MSG_HCI_NETWK 0x05
-#define NCI_MSG_SET_FWFSM 0x06
-#define NCI_MSG_SET_UICCRDRF 0x07
-#define NCI_MSG_POWER_LEVEL 0x08
-#define NCI_MSG_FRAME_LOG 0x09
-#define NCI_MSG_UICC_READER_ACTION 0x0A
-#define NCI_MSG_SET_PPSE_RESPONSE 0x0B
-#define NCI_MSG_PRBS_SET 0x0C
-/* reset HCI network/close all pipes (S,D) register */
-#define NCI_MSG_RESET_ALL_UICC_CFG 0x0D
-#define NCI_MSG_GET_NFCEE_INFO 0x0E
-#define NCI_MSG_DISABLE_INIT_CHECK 0x0F
-#define NCI_MSG_ANTENNA_SELF_TEST 0x10
-#define NCI_MSG_SET_MAX_PKT_SIZE 0x11
-#define NCI_MSG_NCIP_CLK_REQ_OR_CAR_DET 0x12
-#define NCI_MSG_NCIP_CONFIG_DBUART 0x13
-#define NCI_MSG_NCIP_ENABLE_DVT_DRIVER 0x14
-#define NCI_MSG_SET_ASWP 0x15
-#define NCI_MSG_ENCAPSULATE_NCI 0x16
-#define NCI_MSG_CONFIGURE_ARM_JTAG 0x17
-#define NCI_MSG_STATISTICS 0x18
-#define NCI_MSG_SET_DSP_TABLE 0x19
-#define NCI_MSG_GET_DSP_TABLE 0x1a
-#define NCI_MSG_READY_RX_CMD 0x1b
-#define NCI_MSG_GET_VBAT 0x1c
-#define NCI_MSG_GET_XTAL_INDEX_FROM_DH 0x1d
-#define NCI_MSG_SWP_LOG 0x1e
-#define NCI_MSG_GET_PWRLEVEL 0x1f
-#define NCI_MSG_SET_VBAT_MONITOR 0x20
-#define NCI_MSG_SET_TINT_MODE 0x21
-#define NCI_MSG_ACCESS_APP 0x22
-#define NCI_MSG_SET_SECURE_MODE 0x23
-#define NCI_MSG_GET_NV_DEVICE 0x24
-#define NCI_MSG_LPTD 0x25
-#define NCI_MSG_SET_CE4_AS_SNOOZE 0x26
-#define NCI_MSG_NFCC_SEND_HCI 0x27
-#define NCI_MSG_CE4_PATCH_DOWNLOAD_DONE 0x28
-#define NCI_MSG_EEPROM_RW 0x29
-#define NCI_MSG_GET_CLF_REGISTERS 0x2A
-#define NCI_MSG_RF_TEST 0x2B
-#define NCI_MSG_DEBUG_PRINT 0x2C
-#define NCI_MSG_GET_PATCH_VERSION 0x2D
-#define NCI_MSG_SECURE_PATCH_DOWNLOAD 0x2E
-#define NCI_MSG_SPD_FORMAT_NVM 0x2F
-#define NCI_MSG_SPD_READ_NVM 0x30
-#define NCI_MSG_SWP_BIST 0x31
-#define NCI_MSG_WLESS_DBG_MODE 0x32
-#define NCI_MSG_I2C_REQ_POLARITY 0x33
-#define NCI_MSG_AID_FILTER 0x39
-
-/**********************************************
- * Proprietary  NCI status codes
- **********************************************/
-#define NCI_STATUS_SPD_ERROR_ORDER 0xE0
-#define NCI_STATUS_SPD_ERROR_DEST 0xE1
-#define NCI_STATUS_SPD_ERROR_PROJECTID 0xE2
-#define NCI_STATUS_SPD_ERROR_CHIPVER 0xE3
-#define NCI_STATUS_SPD_ERROR_MAJORVER 0xE4
-#define NCI_STATUS_SPD_ERROR_INVALID_PARAM 0xE5
-#define NCI_STATUS_SPD_ERROR_INVALID_SIG 0xE6
-#define NCI_STATUS_SPD_ERROR_NVM_CORRUPTED 0xE7
-#define NCI_STATUS_SPD_ERROR_PWR_MODE 0xE8
-#define NCI_STATUS_SPD_ERROR_MSG_LEN 0xE9
-#define NCI_STATUS_SPD_ERROR_PATCHSIZE 0xEA
-
-#define NCI_NV_DEVICE_NONE 0x00
-#define NCI_NV_DEVICE_EEPROM 0x08
-#define NCI_NV_DEVICE_UICC1 0x10
-
-/* The events reported on tNFC_VS_CBACK */
-/* The event is (NCI_NTF_BIT|oid) or (NCI_RSP_BIT|oid) */
-#define NFC_VS_HCI_NETWK_EVT (NCI_NTF_BIT | NCI_MSG_HCI_NETWK)
-#define NFC_VS_HCI_NETWK_RSP (NCI_RSP_BIT | NCI_MSG_HCI_NETWK)
-#define NFC_VS_UICC_READER_ACTION_EVT (NCI_NTF_BIT | NCI_MSG_UICC_READER_ACTION)
-#define NFC_VS_POWER_LEVEL_RSP (NCI_RSP_BIT | NCI_MSG_POWER_LEVEL)
-#define NFC_VS_GET_NV_DEVICE_EVT (NCI_RSP_BIT | NCI_MSG_GET_NV_DEVICE)
-#define NFC_VS_LPTD_EVT (NCI_NTF_BIT | NCI_MSG_LPTD)
-#define NFC_VS_GET_BUILD_INFO_EVT (NCI_RSP_BIT | NCI_MSG_GET_BUILD_INFO)
-#define NFC_VS_GET_PATCH_VERSION_EVT (NCI_RSP_BIT | NCI_MSG_GET_PATCH_VERSION)
-#define NFC_VS_SEC_PATCH_DOWNLOAD_EVT \
-  (NCI_RSP_BIT | NCI_MSG_SECURE_PATCH_DOWNLOAD)
-#define NFC_VS_SEC_PATCH_AUTH_EVT (NCI_NTF_BIT | NCI_MSG_SECURE_PATCH_DOWNLOAD)
-#define NFC_VS_EEPROM_RW_EVT (NCI_RSP_BIT | NCI_MSG_EEPROM_RW)
-
-#define NCI_GET_PATCH_VERSION_NVM_OFFSET 37
-
-/* Static and dynamic pipe id and status for each pipe to uicc0 and uicc1. */
-#define NCI_NFCC_PIPE_INFO_NV_SIZE 24
-#define NCI_PERSONALITY_SLOT_SIZE 19
-#define NCI_DYNAMIC_PIPE_SIZE 8
-
-/* Type of TLV in NCI_MSG_HCI_NETWK */
-#define NCI_SWP_INTERFACE_TYPE 0xFF
-/* Type of TLV in NCI_MSG_HCI_NETWK */
-#define NCI_HCI_GATE_TYPE 0xFE
-
-/* Secure Patch Download definitions (patch type definitions) */
-#define NCI_SPD_TYPE_HEADER 0x00
-#define NCI_SPD_TYPE_SRAM 0x01
-#define NCI_SPD_TYPE_AON 0x02
-#define NCI_SPD_TYPE_PATCH_TABLE 0x03
-#define NCI_SPD_TYPE_SECURE_CONFIG 0x04
-#define NCI_SPD_TYPE_CONTROLLED_CONFIG 0x05
-#define NCI_SPD_TYPE_SIGNATURE 0x06
-#define NCI_SPD_TYPE_SIGCHEK 0x07
-
-/* Secure Patch Download definitions (NCI_SPD_TYPE_HEADER definitions) */
-#define NCI_SPD_HEADER_OFFSET_CHIPVERLEN 0x18
-#define NCI_SPD_HEADER_CHIPVER_LEN 16
-
-/* NVM Type (in GET_PATCH_VERSION RSP) */
-#define NCI_SPD_NVM_TYPE_NONE 0x00
-#define NCI_SPD_NVM_TYPE_EEPROM 0x01
-#define NCI_SPD_NVM_TYPE_UICC 0x02
-
-/**********************************************
- * NCI NFCC proprietary features in octet 3
- **********************************************/
-#define NCI_FEAT_SIGNED_PATCH 0x01000000
-
-/**********************************************
- * NCI Interface Types
- **********************************************/
-#define NCI_INTERFACE_VS_MIFARE 0x80
-#define NCI_INTERFACE_VS_CALYPSO_CE 0x81
-#define NCI_INTERFACE_VS_T2T_CE 0x82 /* for Card Emulation side */
-/* for both Reader/Writer and Card Emulation side */
-#define NCI_INTERFACE_VS_15693 0x83
-#define NCI_INTERFACE_VS_T1T_CE 0x84 /* for Card Emulation side */
-
-/**********************************************
- * NCI Proprietary Parameter IDs
- **********************************************/
-#define NCI_PARAM_ID_LA_FSDI 0xA0
-#define NCI_PARAM_ID_LB_FSDI 0xA1
-#define NCI_PARAM_ID_HOST_LISTEN_MASK 0xA2
-#define NCI_PARAM_ID_CHIP_TYPE 0xA3 /* NFCDEP */
-#define NCI_PARAM_ID_PA_ANTICOLL 0xA4
-#define NCI_PARAM_ID_CONTINUE_MODE 0xA5
-#define NCI_PARAM_ID_LBP 0xA6
-#define NCI_PARAM_ID_T1T_RDR_ONLY 0xA7
-#define NCI_PARAM_ID_LA_SENS_RES 0xA8
-#define NCI_PARAM_ID_PWR_SETTING_BITMAP 0xA9
-#define NCI_PARAM_ID_WI_NTF_ENABLE 0xAA
-#define NCI_PARAM_ID_LN_BITRATE 0xAB /* NFCDEP Listen Bitrate */
-#define NCI_PARAM_ID_LF_BITRATE 0xAC /* FeliCa */
-#define NCI_PARAM_ID_SWP_BITRATE_MASK 0xAD
-#define NCI_PARAM_ID_KOVIO 0xAE
-#define NCI_PARAM_ID_UICC_NTF_TO 0xAF
-#define NCI_PARAM_ID_NFCDEP 0xB0
-#define NCI_PARAM_ID_CLF_REGS_CFG 0xB1
-#define NCI_PARAM_ID_NFCDEP_TRANS_TIME 0xB2
-#define NCI_PARAM_ID_CREDIT_TIMER 0xB3
-#define NCI_PARAM_ID_CORRUPT_RX 0xB4
-#define NCI_PARAM_ID_ISODEP 0xB5
-#define NCI_PARAM_ID_LF_CONFIG 0xB6
-#define NCI_PARAM_ID_I93_DATARATE 0xB7
-#define NCI_PARAM_ID_CREDITS_THRESHOLD 0xB8
-#define NCI_PARAM_ID_TAGSNIFF_CFG 0xB9
-#define NCI_PARAM_ID_PA_FSDI 0xBA /* ISODEP */
-#define NCI_PARAM_ID_PB_FSDI 0xBB /* ISODEP */
-#define NCI_PARAM_ID_FRAME_INTF_RETXN 0xBC
-
-#define NCI_PARAM_ID_UICC_RDR_PRIORITY 0xBD
-#define NCI_PARAM_ID_GUARD_TIME 0xBE
-#define NCI_PARAM_ID_STDCONFIG 0xBF /* dont not use this config item */
-/* dont not use this config item  */
-#define NCI_PARAM_ID_PROPCFG 0xC0
-#define NCI_PARAM_ID_MAXTRY2ACTIVATE 0xC1
-#define NCI_PARAM_ID_SWPCFG 0xC2
-#define NCI_PARAM_ID_CLF_LPM_CFG 0xC3
-#define NCI_PARAM_ID_DCLB 0xC4
-#define NCI_PARAM_ID_ACT_ORDER 0xC5
-#define NCI_PARAM_ID_DEP_DELAY_ACT 0xC6
-#define NCI_PARAM_ID_DH_PARITY_CRC_CTL 0xC7
-#define NCI_PARAM_ID_PREINIT_DSP_CFG 0xC8
-#define NCI_PARAM_ID_FW_WORKAROUND 0xC9
-#define NCI_PARAM_ID_RFU_CONFIG 0xCA
-#define NCI_PARAM_ID_EMVCO_ENABLE 0xCB
-#define NCI_PARAM_ID_ANTDRIVER_PARAM 0xCC
-#define NCI_PARAM_ID_PLL325_CFG_PARAM 0xCD
-#define NCI_PARAM_ID_OPNLP_ADPLL_ENABLE 0xCE
-#define NCI_PARAM_ID_CONFORMANCE_MODE 0xCF
-
-#define NCI_PARAM_ID_LPO_ON_OFF_ENABLE 0xD0
-#define NCI_PARAM_ID_FORCE_VANT 0xD1
-#define NCI_PARAM_ID_COEX_CONFIG 0xD2
-#define NCI_PARAM_ID_INTEL_MODE 0xD3
-
-#define NCI_PARAM_ID_AID 0xFF
-
-/**********************************************
- * NCI Parameter ID Lens
- **********************************************/
-#define NCI_PARAM_LEN_PWR_SETTING_BITMAP 3
-#define NCI_PARAM_LEN_HOST_LISTEN_MASK 2
-#define NCI_PARAM_LEN_PLL325_CFG_PARAM 14
-#define NCI_PARAM_LEN_POWER_LEVEL 6
-
-/**********************************************
- * Snooze Mode
- **********************************************/
-#define NFC_SNOOZE_MODE_NONE 0x00    /* Snooze mode disabled    */
-#define NFC_SNOOZE_MODE_UART 0x01    /* Snooze mode for UART    */
-#define NFC_SNOOZE_MODE_SPI_I2C 0x08 /* Snooze mode for SPI/I2C */
-
-#define NFC_SNOOZE_ACTIVE_LOW 0x00  /* high to low voltage is asserting */
-#define NFC_SNOOZE_ACTIVE_HIGH 0x01 /* low to high voltage is asserting */
-
-/**********************************************
- * HCI definitions
- **********************************************/
-#define NFC_HAL_HCI_SESSION_ID_LEN 8
-#define NFC_HAL_HCI_SYNC_ID_LEN 2
-
-/* HCI Network command definitions */
-#define NFC_HAL_HCI_NETWK_INFO_SIZE 250
-#define NFC_HAL_HCI_NO_RW_MODE_NETWK_INFO_SIZE 184
-#define NFC_HAL_HCI_DH_NETWK_INFO_SIZE 111
-#define NFC_HAL_HCI_MIN_NETWK_INFO_SIZE 12
-#define NFC_HAL_HCI_MIN_DH_NETWK_INFO_SIZE 11
-
-/* Card emulation RF Gate A definitions */
-#define NFC_HAL_HCI_CE_RF_A_UID_REG_LEN 10
-#define NFC_HAL_HCI_CE_RF_A_ATQA_RSP_CODE_LEN 2
-#define NFC_HAL_HCI_CE_RF_A_MAX_HIST_DATA_LEN 15
-#define NFC_HAL_HCI_CE_RF_A_MAX_DATA_RATE_LEN 3
-
-/* Card emulation RF Gate B definitions */
-#define NFC_HAL_HCI_CE_RF_B_PUPI_LEN 4
-#define NFC_HAL_HCI_CE_RF_B_ATQB_LEN 4
-#define NFC_HAL_HCI_CE_RF_B_HIGHER_LAYER_RSP_LEN 61
-#define NFC_HAL_HCI_CE_RF_B_MAX_DATA_RATE_LEN 3
-
-/* Card emulation RF Gate BP definitions */
-#define NFC_HAL_HCI_CE_RF_BP_MAX_PAT_IN_LEN 8
-#define NFC_HAL_HCI_CE_RF_BP_DATA_OUT_LEN 40
-
-/* Reader RF Gate A definitions */
-#define NFC_HAL_HCI_RD_RF_B_HIGHER_LAYER_DATA_LEN 61
-
-/* DH HCI Network command definitions */
-#define NFC_HAL_HCI_DH_MAX_DYN_PIPES 20
-
-/* Target handle for different host in the network */
-#define NFC_HAL_HCI_DH_TARGET_HANDLE 0xF2
-#define NFC_HAL_HCI_UICC0_TARGET_HANDLE 0xF3
-#define NFC_HAL_HCI_UICC1_TARGET_HANDLE 0xF4
-#define NFC_HAL_HCI_UICC2_TARGET_HANDLE 0xF5
-
-/* Card emulation RF Gate A registry information */
-typedef struct {
-  uint8_t pipe_id; /* if MSB is set then valid, 7 bits for Pipe ID */
-  uint8_t mode; /* Type A card emulation enabled indicator, 0x02:enabled    */
-  uint8_t sak;
-  uint8_t uid_reg_len;
-  uint8_t uid_reg[NFC_HAL_HCI_CE_RF_A_UID_REG_LEN];
-  uint8_t atqa[NFC_HAL_HCI_CE_RF_A_ATQA_RSP_CODE_LEN]; /* ATQA response code */
-  uint8_t app_data_len;
-  uint8_t
-      app_data[NFC_HAL_HCI_CE_RF_A_MAX_HIST_DATA_LEN]; /* 15 bytes optional
-                                                          storage for historic
-                                                          data, use 2 slots */
-  uint8_t fwi_sfgi; /* FRAME WAITING TIME, START-UP FRAME GUARD TIME */
-  uint8_t cid_support;
-  uint8_t datarate_max[NFC_HAL_HCI_CE_RF_A_MAX_DATA_RATE_LEN];
-  uint8_t clt_support;
-} tNCI_HCI_CE_RF_A;
-
-/* Card emulation RF Gate B registry information */
-typedef struct {
-  uint8_t pipe_id; /* if MSB is set then valid, 7 bits for Pipe ID */
-  uint8_t mode; /* Type B card emulation enabled indicator, 0x02:enabled    */
-  uint8_t pupi_len;
-  uint8_t pupi_reg[NFC_HAL_HCI_CE_RF_B_PUPI_LEN];
-  uint8_t afi;
-  uint8_t
-      atqb[NFC_HAL_HCI_CE_RF_B_ATQB_LEN]; /* 4 bytes ATQB application data */
-  uint8_t higherlayer_resp
-      [NFC_HAL_HCI_CE_RF_B_HIGHER_LAYER_RSP_LEN]; /* 0~ 61 bytes ATRB_INF use
-                                                     1~4 personality slots */
-  uint8_t datarate_max[NFC_HAL_HCI_CE_RF_B_MAX_DATA_RATE_LEN];
-  uint8_t natrb;
-} tNCI_HCI_CE_RF_B;
-
-/* Card emulation RF Gate BP registry information */
-typedef struct {
-  uint8_t pipe_id; /* if MSB is set then valid, 7 bits for Pipe ID */
-  uint8_t
-      mode; /* Type B prime card emulation enabled indicator, 0x02:enabled */
-  uint8_t pat_in_len;
-  uint8_t pat_in[NFC_HAL_HCI_CE_RF_BP_MAX_PAT_IN_LEN];
-  uint8_t dat_out_len;
-  uint8_t
-      dat_out[NFC_HAL_HCI_CE_RF_BP_DATA_OUT_LEN]; /* ISO7816-3 <=64 byte, and
-                                                     other fields are 9 bytes */
-  uint8_t natr;
-} tNCI_HCI_CE_RF_BP;
-
-/* Card emulation RF Gate F registry information */
-typedef struct {
-  uint8_t pipe_id; /* if MSB is set then valid, 7 bits for Pipe ID */
-  uint8_t mode; /* Type F card emulation enabled indicator, 0x02:enabled    */
-  uint8_t speed_cap;
-  uint8_t clt_support;
-} tNCI_HCI_CE_RF_F;
-
-/* Reader RF Gate A registry information */
-typedef struct {
-  uint8_t pipe_id; /* if MSB is set then valid, 7 bits for Pipe ID */
-  uint8_t datarate_max;
-} tNCI_HCI_RD_RF_A;
-
-/* Reader RF Gate B registry information */
-typedef struct {
-  uint8_t pipe_id; /* if MSB is set then valid, 7 bits for Pipe ID */
-  uint8_t afi;
-  uint8_t hldata_len;
-  uint8_t
-      high_layer_data[NFC_HAL_HCI_RD_RF_B_HIGHER_LAYER_DATA_LEN]; /* INF field
-                                                                     in ATTRIB
-                                                                     command */
-} tNCI_HCI_RD_RF_B;
-
-/* Dynamic pipe information */
-typedef struct {
-  uint8_t source_host;
-  uint8_t dest_host;
-  uint8_t source_gate;
-  uint8_t dest_gate;
-  uint8_t pipe_id; /* if MSB is set then valid, 7 bits for Pipe ID */
-} tNCI_HCI_DYN_PIPE_INFO;
-
-/*************************************************************
- * HCI Network CMD/NTF structure for UICC host in the network
- *************************************************************/
-typedef struct {
-  uint8_t target_handle;
-  uint8_t session_id[NFC_HAL_HCI_SESSION_ID_LEN];
-  uint8_t sync_id[NFC_HAL_HCI_SYNC_ID_LEN];
-  uint8_t static_pipe_info;
-  tNCI_HCI_CE_RF_A ce_rf_a;
-  tNCI_HCI_CE_RF_B ce_rf_b;
-  tNCI_HCI_CE_RF_BP ce_rf_bp;
-  tNCI_HCI_CE_RF_F ce_rf_f;
-  tNCI_HCI_RD_RF_A rw_rf_a;
-  tNCI_HCI_RD_RF_B rw_rf_b;
-} tNCI_HCI_NETWK;
-
-/************************************************
- * HCI Network CMD/NTF structure for Device host
- ************************************************/
-typedef struct {
-  uint8_t target_handle;
-  uint8_t session_id[NFC_HAL_HCI_SESSION_ID_LEN];
-  uint8_t static_pipe_info;
-  uint8_t num_dyn_pipes;
-  tNCI_HCI_DYN_PIPE_INFO dyn_pipe_info[NFC_HAL_HCI_DH_MAX_DYN_PIPES];
-} tNCI_HCI_NETWK_DH;
-
-#endif /* NFC_BRCM_DEFS_H */
diff --git a/src/hal/int/nfc_hal_int.h b/src/hal/int/nfc_hal_int.h
deleted file mode 100644
index 4298205..0000000
--- a/src/hal/int/nfc_hal_int.h
+++ /dev/null
@@ -1,550 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2009-2014 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  this file contains the NCI transport internal definitions and functions.
- *
- ******************************************************************************/
-
-#ifndef NFC_HAL_INT_H
-#define NFC_HAL_INT_H
-
-#include "gki.h"
-#include "nci_defs.h"
-#include "nfc_brcm_defs.h"
-#include "nfc_hal_api.h"
-#include "nfc_hal_int_api.h"
-#include "nfc_hal_target.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/****************************************************************************
-** NFC HAL TASK transport definitions
-****************************************************************************/
-/* NFC HAL Task event masks */
-#define NFC_HAL_TASK_EVT_DATA_RDY EVENT_MASK(APPL_EVT_0)
-#define NFC_HAL_TASK_EVT_INITIALIZE EVENT_MASK(APPL_EVT_5)
-#define NFC_HAL_TASK_EVT_TERMINATE EVENT_MASK(APPL_EVT_6)
-#define NFC_HAL_TASK_EVT_POWER_CYCLE EVENT_MASK(APPL_EVT_7)
-
-#define NFC_HAL_TASK_EVT_MBOX (TASK_MBOX_0_EVT_MASK)
-
-/* NFC HAL Task mailbox definitions */
-#define NFC_HAL_TASK_MBOX (TASK_MBOX_0)
-
-/* NFC HAL Task Timer events */
-#ifndef NFC_HAL_QUICK_TIMER_EVT_MASK
-#define NFC_HAL_QUICK_TIMER_EVT_MASK (TIMER_0_EVT_MASK)
-#endif
-
-#ifndef NFC_HAL_QUICK_TIMER_ID
-#define NFC_HAL_QUICK_TIMER_ID (TIMER_0)
-#endif
-
-/* NFC HAL Task Timer types */
-#define NFC_HAL_TTYPE_NCI_WAIT_RSP 0
-#define NFC_HAL_TTYPE_POWER_CYCLE 1
-#define NFC_HAL_TTYPE_NFCC_ENABLE 2
-
-/* NFC HAL Task Wait Response flag */
-/* wait response on an NCI command                  */
-#define NFC_HAL_WAIT_RSP_CMD 0x10
-/* wait response on an NCI vendor specific command  */
-#define NFC_HAL_WAIT_RSP_VSC 0x20
-/* wait response on a proprietary command           */
-#define NFC_HAL_WAIT_RSP_PROP 0x40
-/* not waiting for anything                         */
-#define NFC_HAL_WAIT_RSP_NONE 0x00
-
-typedef uint8_t tNFC_HAL_WAIT_RSP;
-
-#if (NFC_HAL_HCI_INCLUDED == TRUE)
-
-typedef uint16_t tNFC_HAL_HCI_EVT;
-
-#define NFC_HAL_HCI_PIPE_INFO_SIZE 5
-
-#define NFC_HAL_HCI_ANY_SET_PARAMETER 0x01
-#define NFC_HAL_HCI_ANY_GET_PARAMETER 0x02
-#define NFC_HAL_HCI_ADM_NOTIFY_ALL_PIPE_CLEARED 0x15
-
-#define NFC_HAL_HCI_SESSION_IDENTITY_INDEX 0x01
-#define NFC_HAL_HCI_WHITELIST_INDEX 0x03
-
-#define NFC_HAL_HCI_ADMIN_PIPE 0x01
-/* Host ID for UICC 0 */
-#define NFC_HAL_HCI_HOST_ID_UICC0 0x02
-/* Host ID for UICC 1 */
-#define NFC_HAL_HCI_HOST_ID_UICC1 0x03
-/* Host ID for UICC 2 */
-#define NFC_HAL_HCI_HOST_ID_UICC2 0x04
-#define NFC_HAL_HCI_COMMAND_TYPE 0x00
-#define NFC_HAL_HCI_RESPONSE_TYPE 0x02
-
-/* NFC HAL HCI responses */
-#define NFC_HAL_HCI_ANY_OK 0x00
-
-#endif
-
-/* Flag defintions for tNFC_HAL_NVM */
-/* No NVM available                     */
-#define NFC_HAL_NVM_FLAGS_NO_NVM 0x01
-/* FPM patch in NVM failed CRC check    */
-#define NFC_HAL_NVM_FLAGS_LPM_BAD 0x02
-/* LPM patch in NVM failed CRC check    */
-#define NFC_HAL_NVM_FLAGS_FPM_BAD 0x04
-/* Patch is present in NVM              */
-#define NFC_HAL_NVM_FLAGS_PATCH_PRESENT 0x08
-
-/* NFC HAL transport configuration */
-typedef struct {
-  bool shared_transport; /* TRUE if using shared HCI/NCI transport */
-  uint8_t userial_baud;
-  uint8_t userial_fc;
-} tNFC_HAL_TRANS_CFG;
-
-#ifdef TESTER
-/* For Insight, ncit_cfg is runtime-configurable */
-#define NFC_HAL_TRANS_CFG_QUALIFIER
-#else
-/* For all other platforms, ncit_cfg is constant */
-#define NFC_HAL_TRANS_CFG_QUALIFIER const
-#endif
-extern NFC_HAL_TRANS_CFG_QUALIFIER tNFC_HAL_TRANS_CFG nfc_hal_trans_cfg;
-
-/*****************************************************************************
-* BT HCI definitions
-*****************************************************************************/
-
-/* Tranport message type */
-#define HCIT_TYPE_COMMAND 0x01
-#define HCIT_TYPE_EVENT 0x04
-#define HCIT_TYPE_NFC 0x10
-
-/* Vendor-Specific BT HCI definitions */
-#define HCI_SUCCESS 0x00
-#define HCI_GRP_VENDOR_SPECIFIC (0x3F << 10) /* 0xFC00 */
-#define HCI_BRCM_WRITE_SLEEP_MODE (0x0027 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_GRP_HOST_CONT_BASEBAND_CMDS (0x03 << 10) /* 0x0C00 */
-#define HCI_RESET (0x0003 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_COMMAND_COMPLETE_EVT 0x0E
-#define HCI_BRCM_WRITE_SLEEP_MODE_LENGTH 12
-#define HCI_BRCM_UPDATE_BAUD_RATE_UNENCODED_LENGTH 0x06
-#define HCIE_PREAMBLE_SIZE 2
-#define HCI_BRCM_PRE_SET_MEM (0x000C | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_PRE_SET_MEM_LENGTH 10
-#define HCI_BRCM_PRE_SET_MEM_TYPE 8
-
-/****************************************************************************
-** Internal constants and definitions
-****************************************************************************/
-
-/* NFC HAL receiving states */
-enum {
-  NFC_HAL_RCV_IDLE_ST,        /* waiting for packet type byte             */
-  NFC_HAL_RCV_NCI_MSG_ST,     /* waiting for the first byte of NCI header */
-  NFC_HAL_RCV_NCI_HDR_ST,     /* reading NCI header                       */
-  NFC_HAL_RCV_NCI_PAYLOAD_ST, /* reading NCI payload                      */
-  NFC_HAL_RCV_BT_MSG_ST,      /* waiting for the first byte of BT header  */
-  NFC_HAL_RCV_BT_HDR_ST,      /* reading BT HCI header                    */
-  NFC_HAL_RCV_BT_PAYLOAD_ST   /* reading BT HCI payload                   */
-};
-
-/* errors during NCI packet reassembly process */
-#define NFC_HAL_NCI_RAS_TOO_BIG 0x01
-#define NFC_HAL_NCI_RAS_ERROR 0x02
-typedef uint8_t tNFC_HAL_NCI_RAS;
-
-/* NFC HAL power mode */
-enum {
-  NFC_HAL_POWER_MODE_FULL, /* NFCC is full power mode      */
-  NFC_HAL_POWER_MODE_LAST
-};
-typedef uint8_t tNFC_HAL_POWER_MODE;
-
-/* NFC HAL event for low power mode */
-enum {
-  NFC_HAL_LP_TX_DATA_EVT, /* DH is sending data to NFCC   */
-  NFC_HAL_LP_RX_DATA_EVT, /* DH received data from NFCC   */
-  NFC_HAL_LP_TIMEOUT_EVT, /* Timeout                      */
-  NFC_HAL_LP_LAST_EVT
-};
-typedef uint8_t tNFC_HAL_LP_EVT;
-
-#define NFC_HAL_ASSERT_NFC_WAKE 0x00   /* assert NFC_WAKE      */
-#define NFC_HAL_DEASSERT_NFC_WAKE 0x01 /* deassert NFC_WAKE    */
-
-#define NFC_HAL_BT_HCI_CMD_HDR_SIZE 3 /* opcode (2) +  length (1)    */
-#define NFC_HAL_CMD_TOUT (2000)       /* timeout for NCI CMD (in ms) */
-
-#define NFC_HAL_SAVED_HDR_SIZE (2)
-#define NFC_HAL_SAVED_CMD_SIZE (2)
-
-#ifndef NFC_HAL_DEBUG
-#define NFC_HAL_DEBUG TRUE
-#endif
-
-#if (NFC_HAL_DEBUG == TRUE)
-extern const char* const nfc_hal_init_state_str[];
-#define NFC_HAL_SET_INIT_STATE(state)                           \
-  HAL_TRACE_DEBUG3("init state: %d->%d(%s)",                    \
-                   nfc_hal_cb.dev_cb.initializing_state, state, \
-                   nfc_hal_init_state_str[state]);              \
-  nfc_hal_cb.dev_cb.initializing_state = state;
-#else
-#define NFC_HAL_SET_INIT_STATE(state) \
-  nfc_hal_cb.dev_cb.initializing_state = state;
-#endif
-
-/* NFC HAL - NFCC initializing state */
-enum {
-  NFC_HAL_INIT_STATE_IDLE,           /* Initialization is done                */
-  NFC_HAL_INIT_STATE_W4_XTAL_SET,    /* Waiting for crystal setting rsp       */
-  NFC_HAL_INIT_STATE_POST_XTAL_SET,  /* Waiting for reset ntf after xtal set  */
-  NFC_HAL_INIT_STATE_W4_NFCC_ENABLE, /* Waiting for reset ntf atter REG_PU up */
-  NFC_HAL_INIT_STATE_W4_BUILD_INFO,  /* Waiting for build info rsp            */
-  NFC_HAL_INIT_STATE_W4_PATCH_INFO,  /* Waiting for patch info rsp            */
-  NFC_HAL_INIT_STATE_W4_APP_COMPLETE,   /* Waiting for complete from application
-                                           */
-  NFC_HAL_INIT_STATE_W4_POST_INIT_DONE, /* Waiting for complete of post init */
-  NFC_HAL_INIT_STATE_W4_CONTROL_DONE,   /* Waiting for control release */
-  NFC_HAL_INIT_STATE_W4_PREDISCOVER_DONE, /* Waiting for complete of prediscover
-                                             */
-  NFC_HAL_INIT_STATE_W4_NFCC_TURN_OFF,    /* Waiting for NFCC to turn OFF */
-  NFC_HAL_INIT_STATE_CLOSING /* Shutting down                         */
-};
-typedef uint8_t tNFC_HAL_INIT_STATE;
-
-/* NFC HAL - NFCC config items during post initialization */
-enum {
-  NFC_HAL_DM_CONFIG_LPTD,
-  NFC_HAL_DM_CONFIG_PLL_325,
-  NFC_HAL_DM_CONFIG_START_UP,
-  NFC_HAL_DM_CONFIG_I93_DATA_RATE,
-  NFC_HAL_DM_CONFIG_FW_FSM,
-  NFC_HAL_DM_CONFIG_START_UP_VSC,
-  NFC_HAL_DM_CONFIG_NONE
-};
-typedef uint8_t tNFC_HAL_DM_CONFIG;
-
-/* callback function prototype */
-typedef struct {
-  uint16_t opcode;
-  uint16_t param_len;
-  uint8_t* p_param_buf;
-} tNFC_HAL_BTVSC_CPLT;
-
-typedef void(tNFC_HAL_BTVSC_CPLT_CBACK)(tNFC_HAL_BTVSC_CPLT* p1);
-
-#if (NFC_HAL_HCI_INCLUDED == TRUE)
-
-/* data type for NFC_HAL_HCI_RSP_NV_READ_EVT */
-typedef struct {
-  NFC_HDR hdr;
-  uint8_t block;
-  uint16_t size;
-  tHAL_NFC_STATUS status;
-} tNFC_HAL_HCI_RSP_NV_READ_EVT;
-
-/* data type for NFC_HAL_HCI_RSP_NV_WRITE_EVT */
-typedef struct {
-  NFC_HDR hdr;
-  tHAL_NFC_STATUS status;
-} tNFC_HAL_HCI_RSP_NV_WRITE_EVT;
-
-/* union of all event data types */
-typedef union {
-  NFC_HDR hdr;
-  /* Internal events */
-  tNFC_HAL_HCI_RSP_NV_READ_EVT nv_read;
-  tNFC_HAL_HCI_RSP_NV_WRITE_EVT nv_write;
-} tNFC_HAL_HCI_EVENT_DATA;
-
-#endif
-/*****************************************************************************
-** Control block for NFC HAL
-*****************************************************************************/
-
-/* Patch RAM Download Control block */
-
-/* PRM states */
-enum {
-  NFC_HAL_PRM_ST_IDLE,
-
-  /* Secure patch download stated */
-  NFC_HAL_PRM_ST_SPD_COMPARE_VERSION,
-  NFC_HAL_PRM_ST_SPD_GET_PATCH_HEADER,
-  NFC_HAL_PRM_ST_SPD_DOWNLOADING,
-  NFC_HAL_PRM_ST_SPD_AUTHENTICATING,
-  NFC_HAL_PRM_ST_SPD_AUTH_DONE,
-  NFC_HAL_PRM_ST_W4_GET_VERSION
-};
-typedef uint8_t tNFC_HAL_PRM_STATE;
-
-/* Maximum number of patches (currently 2: LPM and FPM) */
-#define NFC_HAL_PRM_MAX_PATCH_COUNT 2
-#define NFC_HAL_PRM_PATCH_MASK_ALL 0xFFFFFFFF
-#define NFC_HAL_PRM_MAX_CHIP_VER_LEN 8
-
-/* Structures for PRM Control Block */
-typedef struct {
-  uint8_t power_mode;
-  uint16_t len;
-} tNFC_HAL_PRM_PATCHDESC;
-
-typedef struct {
-  tNFC_HAL_PRM_STATE state; /* download state */
-  uint32_t flags;           /* internal flags */
-  uint16_t
-      cur_patch_len_remaining; /* bytes remaining in patchfile to process     */
-  const uint8_t*
-      p_cur_patch_data;      /* pointer to patch currently being downloaded */
-  uint16_t cur_patch_offset; /* offset of next byte to process              */
-  uint32_t dest_ram;
-  TIMER_LIST_ENT timer; /* Timer for patch download                    */
-  void* p_param;        /* general purpose param for PRM               */
-  uint8_t param_idx;    /* information related to general purpose param*/
-
-  /* Secure Patch Download */
-  uint32_t
-      spd_patch_needed_mask; /* Mask of patches that need to be downloaded */
-  uint8_t spd_patch_count;   /* Number of patches left to download */
-  uint8_t spd_cur_patch_idx; /* Current patch being downloaded */
-
-  tNFC_HAL_PRM_PATCHDESC spd_patch_desc[NFC_HAL_PRM_MAX_PATCH_COUNT];
-
-  /* I2C-patch */
-  uint8_t* p_spd_patch;             /* pointer to spd patch             */
-  uint16_t spd_patch_len_remaining; /* patch length                     */
-  uint16_t spd_patch_offset;        /* offset of next byte to process   */
-
-  tNFC_HAL_PRM_FORMAT format;  /* format of patch ram              */
-  tNFC_HAL_PRM_CBACK* p_cback; /* Callback for download status notifications */
-  uint32_t patchram_delay;     /* the dealy after patch */
-} tNFC_HAL_PRM_CB;
-
-/* Information about current patch in NVM */
-typedef struct {
-  uint16_t project_id; /* Current project_id of patch in nvm       */
-  uint16_t ver_major;  /* Current major version of patch in nvm    */
-  uint16_t ver_minor;  /* Current minor version of patch in nvm    */
-  uint16_t fpm_size;   /* Current size of FPM patch in nvm         */
-  uint16_t lpm_size;   /* Current size of LPM patch in nvm         */
-  uint8_t flags;       /* See NFC_HAL_NVM_FLAGS_* flag definitions */
-  uint8_t nvm_type;    /* Current NVM Type - UICC/EEPROM           */
-  uint8_t chip_ver[NFC_HAL_PRM_MAX_CHIP_VER_LEN]; /* patch chip version       */
-} tNFC_HAL_NVM;
-
-/* Patch for I2C fix */
-typedef struct {
-  uint8_t* p_patch;      /* patch for i2c fix                */
-  uint32_t prei2c_delay; /* the dealy after preI2C patch */
-  uint16_t len;          /* i2c patch length                 */
-} tNFC_HAL_PRM_I2C_FIX_CB;
-
-/* Control block for NCI transport */
-typedef struct {
-  uint8_t nci_ctrl_size; /* Max size for NCI messages */
-  uint8_t rcv_state;     /* current rx state */
-  uint16_t rcv_len; /* bytes remaining to be received in current rx state     */
-  NFC_HDR* p_rcv_msg;  /* buffer to receive NCI message */
-  NFC_HDR* p_frag_msg; /* fragmented NCI message; waiting for last fragment */
-  NFC_HDR*
-      p_pend_cmd; /* pending NCI message; waiting for NFCC state to be free */
-  tNFC_HAL_NCI_RAS nci_ras; /* nci reassembly error status */
-  TIMER_LIST_ENT
-  nci_wait_rsp_timer; /* Timer for waiting for nci command response */
-  tNFC_HAL_WAIT_RSP nci_wait_rsp; /* nci wait response flag */
-  uint8_t
-      last_hdr[NFC_HAL_SAVED_HDR_SIZE]; /* part of last NCI command header */
-  uint8_t
-      last_cmd[NFC_HAL_SAVED_CMD_SIZE]; /* part of last NCI command payload */
-  void* p_vsc_cback; /* the callback function for last VSC command */
-} tNFC_HAL_NCIT_CB;
-
-/* Control block for device initialization */
-typedef struct {
-  tNFC_HAL_INIT_STATE initializing_state; /* state of initializing NFCC */
-
-  uint32_t brcm_hw_id; /* BRCM NFCC HW ID                          */
-  tNFC_HAL_DM_CONFIG next_dm_config; /* next config in post initialization */
-  uint8_t next_startup_vsc; /* next start-up VSC offset in post init    */
-
-  tNFC_HAL_POWER_MODE power_mode; /* NFCC power mode                          */
-  uint8_t snooze_mode;            /* current snooze mode                      */
-  uint8_t new_snooze_mode;        /* next snooze mode after receiving cmpl    */
-  uint8_t nfc_wake_active_mode;   /* NFC_HAL_LP_ACTIVE_LOW/HIGH               */
-  TIMER_LIST_ENT lp_timer;        /* timer for low power mode                 */
-
-  tHAL_NFC_STATUS_CBACK*
-      p_prop_cback; /* callback to notify complete of proprietary update */
-} tNFC_HAL_DEV_CB;
-
-#if (NFC_HAL_HCI_INCLUDED == TRUE)
-
-/* data members for NFC_HAL-HCI */
-typedef struct {
-  TIMER_LIST_ENT
-  hci_timer; /* Timer to avoid indefinitely waiting for response */
-  uint8_t*
-      p_hci_netwk_info_buf; /* Buffer for reading HCI Network information */
-  uint8_t* p_hci_netwk_dh_info_buf; /* Buffer for reading HCI Network DH
-                                       information */
-  uint8_t hci_netwk_config_block;  /* Rsp awaiting for hci network configuration
-                                      block */
-  bool b_wait_hcp_conn_create_rsp; /* Waiting for hcp connection create response
-                                      */
-  bool clear_all_pipes_to_uicc1;   /* UICC1 was restarted for patch download */
-  bool update_session_id; /* Next response from NFCC is to Get Session id cmd */
-  bool hci_fw_workaround; /* HAL HCI Workaround need */
-  bool hci_fw_validate_netwk_cmd; /* Flag to indicate if hci network ntf to
-                                     validate */
-  uint8_t hcp_conn_id;            /* NCI Connection id for HCP */
-  uint8_t dh_session_id[1];       /* Byte 0 of DH Session ID */
-} tNFC_HAL_HCI_CB;
-
-#endif
-
-#define NFC_HAL_FLAGS_NEED_DISABLE_VSC 0x01
-typedef uint8_t tNFC_HAL_FLAGS;
-
-typedef struct {
-  tHAL_NFC_CBACK* p_stack_cback;     /* Callback for HAL event notification  */
-  tHAL_NFC_DATA_CBACK* p_data_cback; /* Callback for data event notification  */
-
-  TIMER_LIST_Q quick_timer_queue; /* timer list queue                 */
-  TIMER_LIST_ENT timer;           /* timer for NCI transport task     */
-
-  tNFC_HAL_NCIT_CB ncit_cb; /* NCI transport */
-  tNFC_HAL_DEV_CB dev_cb;   /* device initialization */
-  tNFC_HAL_NVM nvm_cb;      /* Information about current patch in NVM */
-
-  /* Patchram control block */
-  tNFC_HAL_PRM_CB prm;
-  tNFC_HAL_PRM_I2C_FIX_CB prm_i2c;
-
-#if (NFC_HAL_HCI_INCLUDED == TRUE)
-  /* data members for NFC_HAL-HCI */
-  tNFC_HAL_HCI_CB hci_cb;
-#endif
-
-  uint8_t pre_discover_done; /* TRUE, when the prediscover config is complete */
-  tNFC_HAL_FLAGS hal_flags;
-  uint8_t pre_set_mem_idx;
-
-  uint8_t max_rf_credits; /* NFC Max RF data credits */
-  uint8_t max_ee;         /* NFC Max number of NFCEE supported by NFCC */
-  uint8_t trace_level;    /* NFC HAL trace level */
-} tNFC_HAL_CB;
-
-/* Global NCI data */
-extern tNFC_HAL_CB nfc_hal_cb;
-
-extern uint8_t* p_nfc_hal_pre_discover_cfg;
-
-/****************************************************************************
-** Internal nfc functions
-****************************************************************************/
-
-/* From nfc_hal_main.c */
-uint32_t nfc_hal_main_task(uint32_t param);
-void nfc_hal_main_init(void);
-void nfc_hal_main_close(void);
-void nfc_hal_main_pre_init_done(tHAL_NFC_STATUS);
-void nfc_hal_main_exit_op_done(tNFC_HAL_NCI_EVT event, uint16_t data_len,
-                               uint8_t* p_data);
-void nfc_hal_main_start_quick_timer(TIMER_LIST_ENT* p_tle, uint16_t type,
-                                    uint32_t timeout);
-void nfc_hal_main_stop_quick_timer(TIMER_LIST_ENT* p_tle);
-void nfc_hal_main_send_error(tHAL_NFC_STATUS status);
-void nfc_hal_send_nci_msg_to_nfc_task(NFC_HDR* p_msg);
-
-/* nfc_hal_nci.c */
-bool nfc_hal_nci_receive_msg(uint8_t byte);
-bool nfc_hal_nci_preproc_rx_nci_msg(NFC_HDR* p_msg);
-NFC_HDR* nfc_hal_nci_postproc_rx_nci_msg(void);
-void nfc_hal_nci_assemble_nci_msg(void);
-void nfc_hal_nci_add_nfc_pkt_type(NFC_HDR* p_msg);
-void nfc_hal_nci_send_cmd(NFC_HDR* p_buf);
-void nfc_hal_nci_cmd_timeout_cback(void* p_tle);
-
-/* nfc_hal_dm.c */
-void nfc_hal_dm_init(void);
-void nfc_hal_dm_set_xtal_freq_index(void);
-void nfc_hal_dm_set_power_level_zero(void);
-void nfc_hal_dm_send_get_build_info_cmd(void);
-void nfc_hal_dm_proc_msg_during_init(NFC_HDR* p_msg);
-void nfc_hal_dm_proc_msg_during_exit(NFC_HDR* p_msg);
-void nfc_hal_dm_config_nfcc(void);
-void nfc_hal_dm_send_nci_cmd(const uint8_t* p_data, uint16_t len,
-                             tNFC_HAL_NCI_CBACK* p_cback);
-void nfc_hal_dm_send_bt_cmd(const uint8_t* p_data, uint16_t len,
-                            tNFC_HAL_BTVSC_CPLT_CBACK* p_cback);
-void nfc_hal_dm_set_nfc_wake(uint8_t cmd);
-void nfc_hal_dm_pre_init_nfcc(void);
-void nfc_hal_dm_shutting_down_nfcc(void);
-bool nfc_hal_dm_power_mode_execute(tNFC_HAL_LP_EVT event);
-void nfc_hal_dm_send_pend_cmd(void);
-tHAL_NFC_STATUS nfc_hal_dm_set_config(uint8_t tlv_size, uint8_t* p_param_tlvs,
-                                      tNFC_HAL_NCI_CBACK* p_cback);
-bool nfc_hal_dm_check_pre_set_mem(void);
-tNFC_HAL_NCI_CBACK* nfc_hal_dm_got_vs_rsp(void);
-
-/* nfc_hal_prm.c */
-void nfc_hal_prm_spd_reset_ntf(uint8_t reset_reason, uint8_t reset_type);
-void nfc_hal_prm_nci_command_complete_cback(tNFC_HAL_NCI_EVT event,
-                                            uint16_t data_len, uint8_t* p_data);
-void nfc_hal_prm_process_timeout(void* p_tle);
-
-#if (NFC_HAL_HCI_INCLUDED == TRUE)
-/* nfc_hal_hci.c */
-void nfc_hal_hci_enable(void);
-void nfc_hal_hci_evt_hdlr(tNFC_HAL_HCI_EVENT_DATA* p_evt_data);
-void nfc_hal_hci_handle_hci_netwk_info(uint8_t* p_data);
-void nfc_hal_hci_handle_hcp_pkt_from_hc(uint8_t* p_data);
-NFC_HDR* nfc_hal_hci_postproc_hcp(void);
-bool nfc_hal_hci_handle_hcp_pkt_to_hc(uint8_t* p_data);
-void nfc_hal_hci_timeout_cback(void* p_tle);
-void nfc_hal_hci_handle_build_info(uint8_t chipverlen, uint8_t* p_chipverstr);
-#else
-#define nfc_hal_hci_enable() NFC_HAL_SET_INIT_STATE(NFC_HAL_INIT_STATE_IDLE);
-#define nfc_hal_hci_handle_build_info(p, a)
-#define nfc_hal_hci_evt_hdlr(p) ;
-#endif
-
-/* Define default NCI protocol trace function (if protocol tracing is enabled)
- */
-#if (NFC_HAL_TRACE_PROTOCOL == TRUE)
-#if !defined(DISP_NCI)
-#define DISP_NCI (DispNci)
-void DispNci(uint8_t* p, uint16_t len, bool is_recv);
-#endif /* DISP_NCI */
-
-/* For displaying vendor-specific HCI commands */
-void DispHciCmd(NFC_HDR* p_buf);
-void DispHciEvt(NFC_HDR* p_buf);
-#endif /* NFC_HAL_TRACE_PROTOCOL */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* NFC_HAL_INT_H */
diff --git a/src/hal/int/nfc_hal_int_api.h b/src/hal/int/nfc_hal_int_api.h
deleted file mode 100644
index ffaf81a..0000000
--- a/src/hal/int/nfc_hal_int_api.h
+++ /dev/null
@@ -1,307 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2009-2014 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  Internal NFC HAL API functions.
- *
- ******************************************************************************/
-#ifndef NFC_HAL_INT_API_H
-#define NFC_HAL_INT_API_H
-
-/****************************************************************************
-** Device Configuration definitions
-****************************************************************************/
-
-#define NFC_HAL_PLL_325_SETCONFIG_PARAM_LEN (2 + NCI_PARAM_LEN_PLL325_CFG_PARAM)
-
-/* Crystal Frequency Index (in 1 KHz) */
-enum {
-  NFC_HAL_XTAL_INDEX_9600,
-  NFC_HAL_XTAL_INDEX_13000,
-  NFC_HAL_XTAL_INDEX_16200,
-  NFC_HAL_XTAL_INDEX_19200,
-  NFC_HAL_XTAL_INDEX_24000,
-  NFC_HAL_XTAL_INDEX_26000,
-  NFC_HAL_XTAL_INDEX_38400,
-  NFC_HAL_XTAL_INDEX_52000,
-  NFC_HAL_XTAL_INDEX_37400,
-  NFC_HAL_XTAL_INDEX_MAX,
-  NFC_HAL_XTAL_INDEX_SPECIAL = 0xFF
-};
-typedef uint8_t tNFC_HAL_XTAL_INDEX;
-
-/* Broadcom specific device initialization before sending NCI reset */
-
-typedef struct {
-  uint32_t brcm_hw_id;
-  uint16_t xtal_freq;
-  uint8_t xtal_index;
-} tNFC_HAL_DEV_INIT_XTAL_CFG;
-
-#define NFC_HAL_DEV_INIT_MAX_XTAL_CFG 5
-
-typedef struct {
-  uint8_t num_xtal_cfg;
-  tNFC_HAL_DEV_INIT_XTAL_CFG xtal_cfg[NFC_HAL_DEV_INIT_MAX_XTAL_CFG];
-} tNFC_HAL_DEV_INIT_CFG;
-
-/*****************************************************************************
-**  Low Power Mode definitions
-*****************************************************************************/
-
-/* Snooze mode disabled    */
-#define NFC_HAL_LP_SNOOZE_MODE_NONE NFC_SNOOZE_MODE_NONE
-/* Snooze mode for UART    */
-#define NFC_HAL_LP_SNOOZE_MODE_UART NFC_SNOOZE_MODE_UART
-/* Snooze mode for SPI/I2C */
-#define NFC_HAL_LP_SNOOZE_MODE_SPI_I2C NFC_SNOOZE_MODE_SPI_I2C
-
-/* high to low voltage is asserting */
-#define NFC_HAL_LP_ACTIVE_LOW NFC_SNOOZE_ACTIVE_LOW
-/* low to high voltage is asserting */
-#define NFC_HAL_LP_ACTIVE_HIGH NFC_SNOOZE_ACTIVE_HIGH
-
-/*****************************************************************************
-**  Patch RAM Constants
-*****************************************************************************/
-
-/* patch format type */
-#define NFC_HAL_PRM_FORMAT_BIN 0x00
-#define NFC_HAL_PRM_FORMAT_HCD 0x01
-#define NFC_HAL_PRM_FORMAT_NCD 0x02
-typedef uint8_t tNFC_HAL_PRM_FORMAT;
-
-/*****************************************************************************
-**  Patch RAM Callback for event notificaton
-*****************************************************************************/
-/* Events for tNFC_HAL_PRM_CBACK */
-enum {
-  NFC_HAL_PRM_CONTINUE_EVT,
-  NFC_HAL_PRM_COMPLETE_EVT,
-  NFC_HAL_PRM_ABORT_EVT,
-  NFC_HAL_PRM_ABORT_INVALID_PATCH_EVT, /* Patch is invalid (bad version, project
-                                          id, or chip)  */
-  NFC_HAL_PRM_ABORT_BAD_SIGNATURE_EVT, /* Patch has invalid signature */
-  NFC_HAL_PRM_SPD_GET_PATCHFILE_HDR_EVT, /* Secure Patch Download: request for
-                                            patchfile header  */
-  NFC_HAL_PRM_SPD_GET_NEXT_PATCH,        /* Get first command of next patch in
-                                            patchfile         */
-  NFC_HAL_PRM_ABORT_NO_NVM_EVT /* nfc_hal_prm_nvm_required is TRUE and NVM is
-                                  unavail  */
-};
-
-typedef void(tNFC_HAL_PRM_CBACK)(uint8_t event);
-
-typedef uint8_t tNFC_HAL_NCI_EVT; /* MT + Opcode */
-typedef void(tNFC_HAL_NCI_CBACK)(tNFC_HAL_NCI_EVT event, uint16_t data_len,
-                                 uint8_t* p_data);
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*******************************************************************************
-**
-** Function         HAL_NfcPreInitDone
-**
-** Description      Notify that pre-initialization of NFCC is complete
-**
-** Returns          void
-**
-*******************************************************************************/
-void HAL_NfcPreInitDone(tHAL_NFC_STATUS status);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcReInit
-**
-** Description      This function is called to restart initialization after
-**                  REG_PU toggled because of failure to detect NVM type or
-**                  download patchram.
-**
-** Note             This function should be called only during the HAL init
-**                  process
-**
-** Returns          HAL_NFC_STATUS_OK if successfully initiated
-**                  HAL_NFC_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tHAL_NFC_STATUS HAL_NfcReInit(void);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcSetSnoozeMode
-**
-** Description      Set snooze mode
-**                  snooze_mode
-**                      NFC_HAL_LP_SNOOZE_MODE_NONE - Snooze mode disabled
-**                      NFC_HAL_LP_SNOOZE_MODE_UART - Snooze mode for UART
-**                      NFC_HAL_LP_SNOOZE_MODE_SPI_I2C - Snooze mode for SPI/I2C
-**
-**                  idle_threshold_dh/idle_threshold_nfcc
-**                      Idle Threshold Host in 100ms unit
-**
-**                  nfc_wake_active_mode/dh_wake_active_mode
-**                      NFC_HAL_LP_ACTIVE_LOW - high to low voltage is asserting
-**                      NFC_HAL_LP_ACTIVE_HIGH - low to high voltage is
-**                                               asserting
-**
-**                  p_snooze_cback
-**                      Notify status of operation
-**
-** Returns          tHAL_NFC_STATUS
-**
-*******************************************************************************/
-tHAL_NFC_STATUS HAL_NfcSetSnoozeMode(uint8_t snooze_mode,
-                                     uint8_t idle_threshold_dh,
-                                     uint8_t idle_threshold_nfcc,
-                                     uint8_t nfc_wake_active_mode,
-                                     uint8_t dh_wake_active_mode,
-                                     tHAL_NFC_STATUS_CBACK* p_snooze_cback);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcPrmDownloadStart
-**
-** Description      Initiate patch download
-**
-** Input Params
-**                  format_type     patch format type
-**                                  (NFC_HAL_PRM_FORMAT_BIN,
-**                                   NFC_HAL_PRM_FORMAT_HCD, or
-**                                   NFC_HAL_PRM_FORMAT_NCD)
-**
-**                  dest_address    destination adderess (needed for BIN format
-**                                  only)
-**
-**                  p_patchram_buf  pointer to patchram buffer. If NULL, then
-**                                  app must call HAL_NfcPrmDownloadContinue
-**                                  when NFC_HAL_PRM_CONTINUE_EVT is received,
-**                                  to send the next segment of patchram
-**
-**                  patchram_len    size of p_patchram_buf (if non-NULL)
-**
-**                  patchram_delay  The delay after each patch.
-**                                  If the given value is less than the size of
-**                                  the patchram, the size of patchram is used
-**                                  instead.
-**
-**                  p_cback         callback for download status
-**
-**
-** Returns          TRUE if successful, otherwise FALSE
-**
-**
-*******************************************************************************/
-bool HAL_NfcPrmDownloadStart(tNFC_HAL_PRM_FORMAT format_type,
-                             uint32_t dest_address, uint8_t* p_patchram_buf,
-                             uint32_t patchram_len, uint32_t patchram_delay,
-                             tNFC_HAL_PRM_CBACK* p_cback);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcPrmDownloadContinue
-**
-** Description      Send next segment of patchram to controller. Called when
-**                  NFC_HAL_PRM_CONTINUE_EVT is received.
-**
-**                  Only needed if HAL_NfcPrmDownloadStart was called with
-**                  p_patchram_buf=NULL
-**
-** Input Params     p_patch_data    pointer to patch data
-**                  patch_data_len  patch data len
-**
-** Returns          TRUE if successful, otherwise FALSE
-**
-*******************************************************************************/
-bool HAL_NfcPrmDownloadContinue(uint8_t* p_patch_data, uint16_t patch_data_len);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcPrmSetI2cPatch
-**
-** Description      Specify patchfile for BCM20791B3 I2C fix. This fix
-**                  must be downloaded prior to initial patch download for I2C
-**                  transport
-**
-** Input Params     p_i2c_patchfile_buf: pointer to patch for i2c fix
-**                  i2c_patchfile_len: length of patch
-**                  prei2c_delay: the delay before downloading main patch
-**                                if 0 is given, NFC_HAL_PRM_POST_I2C_FIX_DELAY
-**                                is used instead.
-**
-** Returns          Nothing
-**
-**
-*******************************************************************************/
-void HAL_NfcPrmSetI2cPatch(uint8_t* p_i2c_patchfile_buf,
-                           uint16_t i2c_patchfile_len, uint32_t prei2c_delay);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcPrmSetSpdNciCmdPayloadSize
-**
-** Description      Set Host-to-NFCC NCI message size for secure patch download
-**
-**                  This API must be called before calling
-**                  HAL_NfcPrmDownloadStart. If the API is not called, then PRM
-**                  will use the default message size.
-**
-**                  Typically, this API is only called for platforms that have
-**                  message-size limitations in the transport/driver.
-**
-**                  Valid message size range:
-**                  NFC_HAL_PRM_MIN_NCI_CMD_PAYLOAD_SIZE to 255.
-**
-** Returns          HAL_NFC_STATUS_OK if successful
-**                  HAL_NFC_STATUS_FAILED otherwise
-**
-**
-*******************************************************************************/
-tHAL_NFC_STATUS HAL_NfcPrmSetSpdNciCmdPayloadSize(uint8_t max_payload_size);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcSetMaxRfDataCredits
-**
-** Description      This function sets the maximum RF data credit for HAL.
-**                  If 0, use the value reported from NFCC.
-**
-** Returns          none
-**
-*******************************************************************************/
-void HAL_NfcSetMaxRfDataCredits(uint8_t max_credits);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcSetTraceLevel
-**
-** Description      This function sets the trace level for HAL.  If called with
-**                  a value of 0xFF, it simply returns the current trace level.
-**
-** Returns          The new or current trace level
-**
-*******************************************************************************/
-uint8_t HAL_NfcSetTraceLevel(uint8_t new_level);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* NFC_HAL_INT_API_H */
diff --git a/src/hal/int/nfc_hal_nv_ci.h b/src/hal/int/nfc_hal_nv_ci.h
deleted file mode 100644
index 0a98edf..0000000
--- a/src/hal/int/nfc_hal_nv_ci.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2003-2014 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  This is the interface file for non valtile memory call-in functions.
- *
- ******************************************************************************/
-#ifndef NFC_HAL_NV_CI_H
-#define NFC_HAL_NV_CI_H
-
-#include "nfc_hal_target.h"
-
-#if (NFC_HAL_HCI_INCLUDED == TRUE)
-
-#include "nfc_hal_nv_co.h"
-
-/*****************************************************************************
-**  Function Declarations
-*****************************************************************************/
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*******************************************************************************
-**
-** Function         nfc_hal_nv_ci_write
-**
-** Description      This function sends an event to NFAA indicating the phone
-**                  has written the number of bytes specified in the call-out
-**                  function, nfa_nv_co_write (), and is ready for more data.
-**                  This function is used to control the TX data flow.
-**                  Note: The data buffer is released by the stack aioer
-**                        calling this function.
-**
-** Parameters       status - NFA_NV_CO_OK, NFA_NV_CO_NOSPACE, or NFA_NV_CO_FAIL
-**                  evt - Used Internally by NFA -> MUST be same value passed
-**                       in call-out function.
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_nv_ci_write(tNFC_HAL_NV_CO_STATUS status);
-
-/*******************************************************************************
-**
-** Function         nfc_hal_nv_ci_read
-**
-** Description      This function sends an event to NCIT indicating the phone
-**                  has read in the requested amount of data specified in the
-**                  nfa_nv_co_read () call-out function.  It should only be
-**                  called when the requested number of bytes has been read.
-**
-** Parameters       num_bytes_read - number of bytes read into the buffer
-**                      specified in the read callout-function.
-**                  status - NFC_HAL_NV_CO_OK if full buffer of data,
-**                           NFC_HAL_NV_CO_EOF if the end of file has been
-**                           reached,
-**                           NFC_HAL_NV_CO_FAIL if an error has occurred.
-**                  evt - Used Internally by NFA -> MUST be same value passed
-**                       in call-out function.
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_nv_ci_read(uint16_t num_bytes_read, tNFC_HAL_NV_CO_STATUS status,
-                        uint8_t block);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* NFC_HAL_HCI_INCLUDED */
-
-#endif /* NFC_HAL_NV_CI_H */
diff --git a/src/hal/int/nfc_hal_nv_co.h b/src/hal/int/nfc_hal_nv_co.h
deleted file mode 100644
index 2891c27..0000000
--- a/src/hal/int/nfc_hal_nv_co.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2003-2014 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  This is the interface file for storing nv data
- *
- ******************************************************************************/
-#ifndef NFC_HAL_NV_CO_H
-#define NFC_HAL_NV_CO_H
-
-#include "nfc_hal_target.h"
-
-#if (NFC_HAL_HCI_INCLUDED == TRUE)
-
-#include <time.h>
-
-/*****************************************************************************
-**  Constants and Data Types
-*****************************************************************************/
-
-/**************************
-**  Common Definitions
-***************************/
-
-/* Status codes returned by call-out functions, or in call-in functions as
- * status */
-#define NFC_HAL_NV_CO_OK 0x00
-#define NFC_HAL_NV_CO_FAIL 0x01 /* Used to pass all other errors */
-#define NFC_HAL_NV_CO_EACCES 0x02
-#define NFC_HAL_NV_CO_ENOTEMPTY 0x03
-#define NFC_HAL_NV_CO_EOF 0x04
-#define NFC_HAL_NV_CO_EODIR 0x05
-/* Returned in nfa_nv_ci_open if no room */
-#define NFC_HAL_NV_CO_ENOSPACE 0x06
-#define NFC_HAL_NV_CO_EIS_DIR 0x07
-#define NFC_HAL_NV_CO_RESUME 0x08 /* used in nfa_nv_ci_open, on resume */
-/* used in nfa_nv_ci_open, on resume (no file to resume) */
-#define NFC_HAL_NV_CO_NONE 0x09
-
-typedef uint8_t tNFC_HAL_NV_CO_STATUS;
-
-#define DH_NV_BLOCK 0x01
-#define HC_F3_NV_BLOCK 0x02
-#define HC_F4_NV_BLOCK 0x03
-#define HC_F2_NV_BLOCK 0x04
-#define HC_F5_NV_BLOCK 0x05
-
-/*****************************************************************************
-**  Function Declarations
-*****************************************************************************/
-/**************************
-**  Common Functions
-***************************/
-
-/*******************************************************************************
-**
-** Function         nfc_hal_nv_co_read
-**
-** Description      This function is called by NFA to read in data from the
-**                  previously opened file.
-**
-** Parameters       p_buf   - buffer to read the data into.
-**                  nbytes  - number of bytes to read into the buffer.
-**
-** Returns          void
-**
-**                  Note: Upon completion of the request, nfa_nv_ci_read () is
-**                        called with the buffer of data, along with the number
-**                        of bytes read into the buffer, and a status.  The
-**                        call-in function should only be called when ALL
-**                        requested bytes have been read, the end of file has
-**                        been detected, or an error has occurred.
-**
-*******************************************************************************/
-void nfc_hal_nv_co_read(uint8_t* p_buf, uint16_t nbytes, uint8_t block);
-
-/*******************************************************************************
-**
-** Function         nfc_hal_nv_co_write
-**
-** Description      This function is called by io to send file data to the
-**                  phone.
-**
-** Parameters       p_buf   - buffer to read the data from.
-**                  nbytes  - number of bytes to write out to the file.
-**
-** Returns          void
-**
-**                  Note: Upon completion of the request, nfa_nv_ci_write () is
-**                        called with the file descriptor and the status. The
-**                        call-in function should only be called when ALL
-**                        requested bytes have been written, or an error has
-**                        been detected,
-**
-*******************************************************************************/
-void nfc_hal_nv_co_write(const uint8_t* p_buf, uint16_t nbytes, uint8_t block);
-
-#endif /* NFC_HAL_HCI_INCLUDED */
-#endif /* NFC_HAL_NV_CO_H */
diff --git a/src/include/CrcChecksum.h b/src/include/CrcChecksum.h
index f3154f2..ffbc9a7 100644
--- a/src/include/CrcChecksum.h
+++ b/src/include/CrcChecksum.h
@@ -19,10 +19,6 @@
 
 #include <stdbool.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 /*******************************************************************************
 **
 ** Function         crcChecksumCompute
@@ -45,7 +41,3 @@
 **
 *******************************************************************************/
 bool crcChecksumVerifyIntegrity(const char* filename);
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/src/include/NfcAdaptation.h b/src/include/NfcAdaptation.h
index 606f66b..cf1054e 100644
--- a/src/include/NfcAdaptation.h
+++ b/src/include/NfcAdaptation.h
@@ -18,6 +18,7 @@
 #pragma once
 #include <pthread.h>
 
+#include "config.h"
 #include "nfc_hal_api.h"
 #include "nfc_target.h"
 
@@ -30,6 +31,10 @@
 struct INfc;
 struct INfcClientCallback;
 }
+namespace V1_1 {
+struct INfc;
+struct INfcClientCallback;
+}
 }
 }
 }
@@ -77,9 +82,12 @@
   virtual ~NfcAdaptation();
   void Initialize();
   void Finalize();
+  void FactoryReset();
+  void DeviceShutdown();
   static NfcAdaptation& GetInstance();
   tHAL_NFC_ENTRY* GetHalEntryFuncs();
   void DownloadFirmware();
+  void GetVendorConfigs(std::map<std::string, ConfigValue>& configMap);
   void Dump(int fd);
 
  private:
@@ -89,9 +97,9 @@
   static ThreadMutex sLock;
   ThreadCondVar mCondVar;
   tHAL_NFC_ENTRY mHalEntryFuncs;  // function pointers for HAL entry points
-  static nfc_nci_device_t* mHalDeviceContext;
   static android::sp<android::hardware::nfc::V1_0::INfc> mHal;
-  static android::hardware::nfc::V1_0::INfcClientCallback* mCallback;
+  static android::sp<android::hardware::nfc::V1_1::INfc> mHal_1_1;
+  static android::hardware::nfc::V1_1::INfcClientCallback* mCallback;
   static tHAL_NFC_CBACK* mHalCallback;
   static tHAL_NFC_DATA_CBACK* mHalDataCallback;
   static ThreadCondVar mHalOpenCompletedEvent;
diff --git a/src/include/_OverrideLog.h b/src/include/_OverrideLog.h
deleted file mode 100644
index dd412ab..0000000
--- a/src/include/_OverrideLog.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  Override the Android logging macro(s) from
- *  /system/core/include/cutils/log.h. This header must be the first header
- *  included by a *.cpp file so the original Android macro can be replaced.
- *  Do not include this header in another header, because that will create
- *  unnecessary dependency.
- *
- ******************************************************************************/
-#pragma once
-
-// Override Android's ALOGD macro by adding a boolean expression.
-#define ALOGD(...) \
-  ((void)ALOGD_IF(appl_trace_level >= BT_TRACE_LEVEL_DEBUG, __VA_ARGS__))
-
-#include <cutils/log.h>  //define Android logging macros
-#include "bt_types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern unsigned char appl_trace_level;
-extern uint32_t ScrProtocolTraceFlag;
-/* defined for run time DTA mode selection */
-extern unsigned char appl_dta_mode_flag;
-
-void initializeGlobalAppDtaMode();
-
-/*******************************************************************************
-**
-** Function:        initializeGlobalAppLogLevel
-**
-** Description:     Initialize and get global logging level from .conf or
-**                  Android property nfc.app_log_level.  The Android property
-**                  overrides .conf variable.
-**
-** Returns:         Global log level:
-**                  BT_TRACE_LEVEL_NONE    0 * No trace messages to be generated
-**                  BT_TRACE_LEVEL_ERROR   1 * Error condition trace messages
-**                  BT_TRACE_LEVEL_WARNING 2 * Warning condition trace messages
-**                  BT_TRACE_LEVEL_API     3 * API traces
-**                  BT_TRACE_LEVEL_EVENT   4 * Debug messages for events
-**                  BT_TRACE_LEVEL_DEBUG   5 * Debug messages (general)
-**
-*******************************************************************************/
-unsigned char initializeGlobalAppLogLevel();
-uint32_t initializeProtocolLogLevel();
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/src/include/android_logmsg.h b/src/include/android_logmsg.h
index 4dfccbc..ed38807 100644
--- a/src/include/android_logmsg.h
+++ b/src/include/android_logmsg.h
@@ -20,51 +20,11 @@
  * If protocol decoder is not present, then decode packets into hex numbers.
  ******************************************************************************/
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 #include "data_types.h"
 #include "nfc_types.h"
 
 #define DISP_NCI ProtoDispAdapterDisplayNciPacket
 void ProtoDispAdapterDisplayNciPacket(uint8_t* nciPacket, uint16_t nciPacketLen,
                                       bool is_recv);
-void ProtoDispAdapterUseRawOutput(bool isUseRaw);
-void ScrLog(uint32_t trace_set_mask, const char* fmt_str, ...);
-void LogMsg(uint32_t trace_set_mask, const char* fmt_str, ...);
-void LogMsg_0(uint32_t trace_set_mask, const char* p_str);
-void LogMsg_1(uint32_t trace_set_mask, const char* fmt_str, uintptr_t p1);
-void LogMsg_2(uint32_t trace_set_mask, const char* fmt_str, uintptr_t p1,
-              uintptr_t p2);
-void LogMsg_3(uint32_t trace_set_mask, const char* fmt_str, uintptr_t p1,
-              uintptr_t p2, uintptr_t p3);
-void LogMsg_4(uint32_t trace_set_mask, const char* fmt_str, uintptr_t p1,
-              uintptr_t p2, uintptr_t p3, uintptr_t p4);
-void LogMsg_5(uint32_t trace_set_mask, const char* fmt_str, uintptr_t p1,
-              uintptr_t p2, uintptr_t p3, uintptr_t p4, uintptr_t p5);
-void LogMsg_6(uint32_t trace_set_mask, const char* fmt_str, uintptr_t p1,
-              uintptr_t p2, uintptr_t p3, uintptr_t p4, uintptr_t p5,
-              uintptr_t p6);
-uint8_t* scru_dump_hex(uint8_t* p, char* pTitle, uint32_t len, uint32_t layer,
-                       uint32_t type);
-void BTDISP_LOCK_LOG();
-void BTDISP_UNLOCK_LOG();
-void BTDISP_INIT_LOCK();
-void BTDISP_UNINIT_LOCK();
-void DispHciCmd(NFC_HDR* p_buf);
-void DispHciEvt(NFC_HDR* p_buf);
 void DispLLCP(NFC_HDR* p_buf, bool is_recv);
 void DispHcp(uint8_t* data, uint16_t len, bool is_recv);
-void DispSNEP(uint8_t local_sap, uint8_t remote_sap, NFC_HDR* p_buf,
-              bool is_first, bool is_rx);
-void DispCHO(uint8_t* pMsg, uint32_t MsgLen, bool is_rx);
-void DispT3TagMessage(NFC_HDR* p_msg, bool is_rx);
-void DispRWT4Tags(NFC_HDR* p_buf, bool is_rx);
-void DispCET4Tags(NFC_HDR* p_buf, bool is_rx);
-void DispRWI93Tag(NFC_HDR* p_buf, bool is_rx, uint8_t command_to_respond);
-void DispNDEFMsg(uint8_t* pMsg, uint32_t MsgLen, bool is_recv);
-
-#ifdef __cplusplus
-};
-#endif
diff --git a/src/include/bt_trace.h b/src/include/bt_trace.h
deleted file mode 100644
index e4d3165..0000000
--- a/src/include/bt_trace.h
+++ /dev/null
@@ -1,1875 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 1999-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-#ifndef BT_TRACE_H
-#define BT_TRACE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* External declaration for appl_trace_level here to avoid to add the
- * declaration in all the files using APPL_TRACExxx macros */
-extern uint8_t appl_trace_level;
-
-/* Prototype for message logging function. */
-extern void LogMsg(uint32_t trace_set_mask, const char* fmt_str, ...);
-extern void LogMsg_0(uint32_t trace_set_mask, const char* p_str);
-extern void LogMsg_1(uint32_t trace_set_mask, const char* fmt_str,
-                     uintptr_t p1);
-extern void LogMsg_2(uint32_t trace_set_mask, const char* fmt_str, uintptr_t p1,
-                     uintptr_t p2);
-extern void LogMsg_3(uint32_t trace_set_mask, const char* fmt_str, uintptr_t p1,
-                     uintptr_t p2, uintptr_t p3);
-extern void LogMsg_4(uint32_t trace_set_mask, const char* fmt_str, uintptr_t p1,
-                     uintptr_t p2, uintptr_t p3, uintptr_t p4);
-extern void LogMsg_5(uint32_t trace_set_mask, const char* fmt_str, uintptr_t p1,
-                     uintptr_t p2, uintptr_t p3, uintptr_t p4, uintptr_t p5);
-extern void LogMsg_6(uint32_t trace_set_mask, const char* fmt_str, uintptr_t p1,
-                     uintptr_t p2, uintptr_t p3, uintptr_t p4, uintptr_t p5,
-                     uintptr_t p6);
-
-#ifdef __cplusplus
-}
-#endif
-
-/******************************************************************************
-**
-** Trace configurable parameters
-**
-******************************************************************************/
-
-/* Enables or disables verbose trace information. */
-#ifndef BT_TRACE_VERBOSE
-#define BT_TRACE_VERBOSE FALSE
-#endif
-
-/* Enables or disables protocol trace information. */
-#ifndef BT_TRACE_PROTOCOL
-#define BT_TRACE_PROTOCOL TRUE /* Android requires TRUE */
-#endif
-
-/******************************************************************************
-**
-** Trace Levels
-**
-** The following values may be used for different levels:
-**      BT_TRACE_LEVEL_NONE    0        * No trace messages to be generated
-**      BT_TRACE_LEVEL_ERROR   1        * Error condition trace messages
-**      BT_TRACE_LEVEL_WARNING 2        * Warning condition trace messages
-**      BT_TRACE_LEVEL_API     3        * API traces
-**      BT_TRACE_LEVEL_EVENT   4        * Debug messages for events
-**      BT_TRACE_LEVEL_DEBUG   5        * Debug messages (general)
-******************************************************************************/
-
-/* Core Stack default trace levels */
-#ifndef HCI_INITIAL_TRACE_LEVEL
-#define HCI_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef LLCP_INITIAL_TRACE_LEVEL
-#define LLCP_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef APPL_INITIAL_TRACE_LEVEL
-#define APPL_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef NFC_INITIAL_TRACE_LEVEL
-#define NFC_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef SMP_INITIAL_TRACE_LEVEL
-#define SMP_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_DEBUG
-#endif
-
-#define BT_TRACE_0(l, t, m) \
-  LogMsg_0((TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t)), (m))
-#define BT_TRACE_1(l, t, m, p1)                                   \
-  LogMsg_1(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t), (m), \
-           (uintptr_t)(p1))
-#define BT_TRACE_2(l, t, m, p1, p2)                               \
-  LogMsg_2(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t), (m), \
-           (uintptr_t)(p1), (uintptr_t)(p2))
-#define BT_TRACE_3(l, t, m, p1, p2, p3)                           \
-  LogMsg_3(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t), (m), \
-           (uintptr_t)(p1), (uintptr_t)(p2), (uintptr_t)(p3))
-#define BT_TRACE_4(l, t, m, p1, p2, p3, p4)                       \
-  LogMsg_4(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t), (m), \
-           (uintptr_t)(p1), (uintptr_t)(p2), (uintptr_t)(p3), (uintptr_t)(p4))
-#define BT_TRACE_5(l, t, m, p1, p2, p3, p4, p5)                                \
-  LogMsg_5(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t), (m),              \
-           (uintptr_t)(p1), (uintptr_t)(p2), (uintptr_t)(p3), (uintptr_t)(p4), \
-           (uintptr_t)(p5))
-#define BT_TRACE_6(l, t, m, p1, p2, p3, p4, p5, p6)                            \
-  LogMsg_6(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t), (m),              \
-           (uintptr_t)(p1), (uintptr_t)(p2), (uintptr_t)(p3), (uintptr_t)(p4), \
-           (uintptr_t)(p5), (uintptr_t)(p6))
-
-#define BT_ERROR_TRACE_0(l, m) \
-  LogMsg_0(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | TRACE_TYPE_ERROR, (m))
-#define BT_ERROR_TRACE_1(l, m, p1)                                             \
-  LogMsg_1(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | TRACE_TYPE_ERROR, (m), \
-           (uintptr_t)(p1))
-#define BT_ERROR_TRACE_2(l, m, p1, p2)                                         \
-  LogMsg_2(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | TRACE_TYPE_ERROR, (m), \
-           (uintptr_t)(p1), (uintptr_t)(p2))
-#define BT_ERROR_TRACE_3(l, m, p1, p2, p3)                                     \
-  LogMsg_3(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | TRACE_TYPE_ERROR, (m), \
-           (uintptr_t)(p1), (uintptr_t)(p2), (uintptr_t)(p3))
-
-/* Define tracing for the LLCP unit
-*/
-#define LLCP_TRACE_ERROR0(m)                             \
-  {                                                      \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_ERROR)     \
-      BT_TRACE_0(TRACE_LAYER_LLCP, TRACE_TYPE_ERROR, m); \
-  }
-#define LLCP_TRACE_ERROR1(m, p1)                             \
-  {                                                          \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_ERROR)         \
-      BT_TRACE_1(TRACE_LAYER_LLCP, TRACE_TYPE_ERROR, m, p1); \
-  }
-#define LLCP_TRACE_ERROR2(m, p1, p2)                             \
-  {                                                              \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_ERROR)             \
-      BT_TRACE_2(TRACE_LAYER_LLCP, TRACE_TYPE_ERROR, m, p1, p2); \
-  }
-#define LLCP_TRACE_ERROR3(m, p1, p2, p3)                             \
-  {                                                                  \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                 \
-      BT_TRACE_3(TRACE_LAYER_LLCP, TRACE_TYPE_ERROR, m, p1, p2, p3); \
-  }
-#define LLCP_TRACE_ERROR4(m, p1, p2, p3, p4)                             \
-  {                                                                      \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                     \
-      BT_TRACE_4(TRACE_LAYER_LLCP, TRACE_TYPE_ERROR, m, p1, p2, p3, p4); \
-  }
-#define LLCP_TRACE_ERROR5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                          \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                         \
-      BT_TRACE_5(TRACE_LAYER_LLCP, TRACE_TYPE_ERROR, m, p1, p2, p3, p4, p5); \
-  }
-#define LLCP_TRACE_ERROR6(m, p1, p2, p3, p4, p5, p6)                        \
-  {                                                                         \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                        \
-      BT_TRACE_6(TRACE_LAYER_LLCP, TRACE_TYPE_ERROR, m, p1, p2, p3, p4, p5, \
-                 p6);                                                       \
-  }
-
-#define LLCP_TRACE_WARNING0(m)                             \
-  {                                                        \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_WARNING)     \
-      BT_TRACE_0(TRACE_LAYER_LLCP, TRACE_TYPE_WARNING, m); \
-  }
-#define LLCP_TRACE_WARNING1(m, p1)                             \
-  {                                                            \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_WARNING)         \
-      BT_TRACE_1(TRACE_LAYER_LLCP, TRACE_TYPE_WARNING, m, p1); \
-  }
-#define LLCP_TRACE_WARNING2(m, p1, p2)                             \
-  {                                                                \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_WARNING)             \
-      BT_TRACE_2(TRACE_LAYER_LLCP, TRACE_TYPE_WARNING, m, p1, p2); \
-  }
-#define LLCP_TRACE_WARNING3(m, p1, p2, p3)                             \
-  {                                                                    \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                 \
-      BT_TRACE_3(TRACE_LAYER_LLCP, TRACE_TYPE_WARNING, m, p1, p2, p3); \
-  }
-#define LLCP_TRACE_WARNING4(m, p1, p2, p3, p4)                             \
-  {                                                                        \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                     \
-      BT_TRACE_4(TRACE_LAYER_LLCP, TRACE_TYPE_WARNING, m, p1, p2, p3, p4); \
-  }
-#define LLCP_TRACE_WARNING5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                            \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                         \
-      BT_TRACE_5(TRACE_LAYER_LLCP, TRACE_TYPE_WARNING, m, p1, p2, p3, p4, p5); \
-  }
-#define LLCP_TRACE_WARNING6(m, p1, p2, p3, p4, p5, p6)                        \
-  {                                                                           \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                        \
-      BT_TRACE_6(TRACE_LAYER_LLCP, TRACE_TYPE_WARNING, m, p1, p2, p3, p4, p5, \
-                 p6);                                                         \
-  }
-
-#define LLCP_TRACE_API0(m)                             \
-  {                                                    \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_API)     \
-      BT_TRACE_0(TRACE_LAYER_LLCP, TRACE_TYPE_API, m); \
-  }
-#define LLCP_TRACE_API1(m, p1)                             \
-  {                                                        \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_API)         \
-      BT_TRACE_1(TRACE_LAYER_LLCP, TRACE_TYPE_API, m, p1); \
-  }
-#define LLCP_TRACE_API2(m, p1, p2)                             \
-  {                                                            \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_API)             \
-      BT_TRACE_2(TRACE_LAYER_LLCP, TRACE_TYPE_API, m, p1, p2); \
-  }
-#define LLCP_TRACE_API3(m, p1, p2, p3)                             \
-  {                                                                \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_API)                 \
-      BT_TRACE_3(TRACE_LAYER_LLCP, TRACE_TYPE_API, m, p1, p2, p3); \
-  }
-#define LLCP_TRACE_API4(m, p1, p2, p3, p4)                             \
-  {                                                                    \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_API)                     \
-      BT_TRACE_4(TRACE_LAYER_LLCP, TRACE_TYPE_API, m, p1, p2, p3, p4); \
-  }
-#define LLCP_TRACE_API5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                        \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_API)                         \
-      BT_TRACE_5(TRACE_LAYER_LLCP, TRACE_TYPE_API, m, p1, p2, p3, p4, p5); \
-  }
-#define LLCP_TRACE_API6(m, p1, p2, p3, p4, p5, p6)                             \
-  {                                                                            \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_API)                             \
-      BT_TRACE_6(TRACE_LAYER_LLCP, TRACE_TYPE_API, m, p1, p2, p3, p4, p5, p6); \
-  }
-
-#define LLCP_TRACE_EVENT0(m)                             \
-  {                                                      \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_EVENT)     \
-      BT_TRACE_0(TRACE_LAYER_LLCP, TRACE_TYPE_EVENT, m); \
-  }
-#define LLCP_TRACE_EVENT1(m, p1)                             \
-  {                                                          \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_EVENT)         \
-      BT_TRACE_1(TRACE_LAYER_LLCP, TRACE_TYPE_EVENT, m, p1); \
-  }
-#define LLCP_TRACE_EVENT2(m, p1, p2)                             \
-  {                                                              \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_EVENT)             \
-      BT_TRACE_2(TRACE_LAYER_LLCP, TRACE_TYPE_EVENT, m, p1, p2); \
-  }
-#define LLCP_TRACE_EVENT3(m, p1, p2, p3)                             \
-  {                                                                  \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                 \
-      BT_TRACE_3(TRACE_LAYER_LLCP, TRACE_TYPE_EVENT, m, p1, p2, p3); \
-  }
-#define LLCP_TRACE_EVENT4(m, p1, p2, p3, p4)                             \
-  {                                                                      \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                     \
-      BT_TRACE_4(TRACE_LAYER_LLCP, TRACE_TYPE_EVENT, m, p1, p2, p3, p4); \
-  }
-#define LLCP_TRACE_EVENT5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                          \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                         \
-      BT_TRACE_5(TRACE_LAYER_LLCP, TRACE_TYPE_EVENT, m, p1, p2, p3, p4, p5); \
-  }
-#define LLCP_TRACE_EVENT6(m, p1, p2, p3, p4, p5, p6)                        \
-  {                                                                         \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                        \
-      BT_TRACE_6(TRACE_LAYER_LLCP, TRACE_TYPE_EVENT, m, p1, p2, p3, p4, p5, \
-                 p6);                                                       \
-  }
-
-#define LLCP_TRACE_DEBUG0(m)                             \
-  {                                                      \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)     \
-      BT_TRACE_0(TRACE_LAYER_LLCP, TRACE_TYPE_DEBUG, m); \
-  }
-#define LLCP_TRACE_DEBUG1(m, p1)                             \
-  {                                                          \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)         \
-      BT_TRACE_1(TRACE_LAYER_LLCP, TRACE_TYPE_DEBUG, m, p1); \
-  }
-#define LLCP_TRACE_DEBUG2(m, p1, p2)                             \
-  {                                                              \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)             \
-      BT_TRACE_2(TRACE_LAYER_LLCP, TRACE_TYPE_DEBUG, m, p1, p2); \
-  }
-#define LLCP_TRACE_DEBUG3(m, p1, p2, p3)                             \
-  {                                                                  \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                 \
-      BT_TRACE_3(TRACE_LAYER_LLCP, TRACE_TYPE_DEBUG, m, p1, p2, p3); \
-  }
-#define LLCP_TRACE_DEBUG4(m, p1, p2, p3, p4)                             \
-  {                                                                      \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                     \
-      BT_TRACE_4(TRACE_LAYER_LLCP, TRACE_TYPE_DEBUG, m, p1, p2, p3, p4); \
-  }
-#define LLCP_TRACE_DEBUG5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                          \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                         \
-      BT_TRACE_5(TRACE_LAYER_LLCP, TRACE_TYPE_DEBUG, m, p1, p2, p3, p4, p5); \
-  }
-#define LLCP_TRACE_DEBUG6(m, p1, p2, p3, p4, p5, p6)                        \
-  {                                                                         \
-    if (llcp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                        \
-      BT_TRACE_6(TRACE_LAYER_LLCP, TRACE_TYPE_DEBUG, m, p1, p2, p3, p4, p5, \
-                 p6);                                                       \
-  }
-
-/* Define tracing for the NFC unit
-*/
-#define NFC_TRACE_ERROR0(m)                             \
-  {                                                     \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR)     \
-      BT_TRACE_0(TRACE_LAYER_NFC, TRACE_TYPE_ERROR, m); \
-  }
-#define NFC_TRACE_ERROR1(m, p1)                             \
-  {                                                         \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR)         \
-      BT_TRACE_1(TRACE_LAYER_NFC, TRACE_TYPE_ERROR, m, p1); \
-  }
-#define NFC_TRACE_ERROR2(m, p1, p2)                             \
-  {                                                             \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR)             \
-      BT_TRACE_2(TRACE_LAYER_NFC, TRACE_TYPE_ERROR, m, p1, p2); \
-  }
-#define NFC_TRACE_ERROR3(m, p1, p2, p3)                             \
-  {                                                                 \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                 \
-      BT_TRACE_3(TRACE_LAYER_NFC, TRACE_TYPE_ERROR, m, p1, p2, p3); \
-  }
-#define NFC_TRACE_ERROR4(m, p1, p2, p3, p4)                             \
-  {                                                                     \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                     \
-      BT_TRACE_4(TRACE_LAYER_NFC, TRACE_TYPE_ERROR, m, p1, p2, p3, p4); \
-  }
-#define NFC_TRACE_ERROR5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                         \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                         \
-      BT_TRACE_5(TRACE_LAYER_NFC, TRACE_TYPE_ERROR, m, p1, p2, p3, p4, p5); \
-  }
-#define NFC_TRACE_ERROR6(m, p1, p2, p3, p4, p5, p6)                        \
-  {                                                                        \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                        \
-      BT_TRACE_6(TRACE_LAYER_NFC, TRACE_TYPE_ERROR, m, p1, p2, p3, p4, p5, \
-                 p6);                                                      \
-  }
-
-#define NFC_TRACE_WARNING0(m)                             \
-  {                                                       \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING)     \
-      BT_TRACE_0(TRACE_LAYER_NFC, TRACE_TYPE_WARNING, m); \
-  }
-#define NFC_TRACE_WARNING1(m, p1)                             \
-  {                                                           \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING)         \
-      BT_TRACE_1(TRACE_LAYER_NFC, TRACE_TYPE_WARNING, m, p1); \
-  }
-#define NFC_TRACE_WARNING2(m, p1, p2)                             \
-  {                                                               \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING)             \
-      BT_TRACE_2(TRACE_LAYER_NFC, TRACE_TYPE_WARNING, m, p1, p2); \
-  }
-#define NFC_TRACE_WARNING3(m, p1, p2, p3)                             \
-  {                                                                   \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                 \
-      BT_TRACE_3(TRACE_LAYER_NFC, TRACE_TYPE_WARNING, m, p1, p2, p3); \
-  }
-#define NFC_TRACE_WARNING4(m, p1, p2, p3, p4)                             \
-  {                                                                       \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                     \
-      BT_TRACE_4(TRACE_LAYER_NFC, TRACE_TYPE_WARNING, m, p1, p2, p3, p4); \
-  }
-#define NFC_TRACE_WARNING5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                           \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                         \
-      BT_TRACE_5(TRACE_LAYER_NFC, TRACE_TYPE_WARNING, m, p1, p2, p3, p4, p5); \
-  }
-#define NFC_TRACE_WARNING6(m, p1, p2, p3, p4, p5, p6)                        \
-  {                                                                          \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                        \
-      BT_TRACE_6(TRACE_LAYER_NFC, TRACE_TYPE_WARNING, m, p1, p2, p3, p4, p5, \
-                 p6);                                                        \
-  }
-
-#define NFC_TRACE_API0(m)                             \
-  {                                                   \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_API)     \
-      BT_TRACE_0(TRACE_LAYER_NFC, TRACE_TYPE_API, m); \
-  }
-#define NFC_TRACE_API1(m, p1)                             \
-  {                                                       \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_API)         \
-      BT_TRACE_1(TRACE_LAYER_NFC, TRACE_TYPE_API, m, p1); \
-  }
-#define NFC_TRACE_API2(m, p1, p2)                             \
-  {                                                           \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_API)             \
-      BT_TRACE_2(TRACE_LAYER_NFC, TRACE_TYPE_API, m, p1, p2); \
-  }
-#define NFC_TRACE_API3(m, p1, p2, p3)                             \
-  {                                                               \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_API)                 \
-      BT_TRACE_3(TRACE_LAYER_NFC, TRACE_TYPE_API, m, p1, p2, p3); \
-  }
-#define NFC_TRACE_API4(m, p1, p2, p3, p4)                             \
-  {                                                                   \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_API)                     \
-      BT_TRACE_4(TRACE_LAYER_NFC, TRACE_TYPE_API, m, p1, p2, p3, p4); \
-  }
-#define NFC_TRACE_API5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                       \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_API)                         \
-      BT_TRACE_5(TRACE_LAYER_NFC, TRACE_TYPE_API, m, p1, p2, p3, p4, p5); \
-  }
-#define NFC_TRACE_API6(m, p1, p2, p3, p4, p5, p6)                             \
-  {                                                                           \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_API)                             \
-      BT_TRACE_6(TRACE_LAYER_NFC, TRACE_TYPE_API, m, p1, p2, p3, p4, p5, p6); \
-  }
-
-#define NFC_TRACE_EVENT0(m)                             \
-  {                                                     \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT)     \
-      BT_TRACE_0(TRACE_LAYER_NFC, TRACE_TYPE_EVENT, m); \
-  }
-#define NFC_TRACE_EVENT1(m, p1)                             \
-  {                                                         \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT)         \
-      BT_TRACE_1(TRACE_LAYER_NFC, TRACE_TYPE_EVENT, m, p1); \
-  }
-#define NFC_TRACE_EVENT2(m, p1, p2)                             \
-  {                                                             \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT)             \
-      BT_TRACE_2(TRACE_LAYER_NFC, TRACE_TYPE_EVENT, m, p1, p2); \
-  }
-#define NFC_TRACE_EVENT3(m, p1, p2, p3)                             \
-  {                                                                 \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                 \
-      BT_TRACE_3(TRACE_LAYER_NFC, TRACE_TYPE_EVENT, m, p1, p2, p3); \
-  }
-#define NFC_TRACE_EVENT4(m, p1, p2, p3, p4)                             \
-  {                                                                     \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                     \
-      BT_TRACE_4(TRACE_LAYER_NFC, TRACE_TYPE_EVENT, m, p1, p2, p3, p4); \
-  }
-#define NFC_TRACE_EVENT5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                         \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                         \
-      BT_TRACE_5(TRACE_LAYER_NFC, TRACE_TYPE_EVENT, m, p1, p2, p3, p4, p5); \
-  }
-#define NFC_TRACE_EVENT6(m, p1, p2, p3, p4, p5, p6)                        \
-  {                                                                        \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                        \
-      BT_TRACE_6(TRACE_LAYER_NFC, TRACE_TYPE_EVENT, m, p1, p2, p3, p4, p5, \
-                 p6);                                                      \
-  }
-
-#define NFC_TRACE_DEBUG0(m)                             \
-  {                                                     \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)     \
-      BT_TRACE_0(TRACE_LAYER_NFC, TRACE_TYPE_DEBUG, m); \
-  }
-#define NFC_TRACE_DEBUG1(m, p1)                             \
-  {                                                         \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)         \
-      BT_TRACE_1(TRACE_LAYER_NFC, TRACE_TYPE_DEBUG, m, p1); \
-  }
-#define NFC_TRACE_DEBUG2(m, p1, p2)                             \
-  {                                                             \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)             \
-      BT_TRACE_2(TRACE_LAYER_NFC, TRACE_TYPE_DEBUG, m, p1, p2); \
-  }
-#define NFC_TRACE_DEBUG3(m, p1, p2, p3)                             \
-  {                                                                 \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                 \
-      BT_TRACE_3(TRACE_LAYER_NFC, TRACE_TYPE_DEBUG, m, p1, p2, p3); \
-  }
-#define NFC_TRACE_DEBUG4(m, p1, p2, p3, p4)                             \
-  {                                                                     \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                     \
-      BT_TRACE_4(TRACE_LAYER_NFC, TRACE_TYPE_DEBUG, m, p1, p2, p3, p4); \
-  }
-#define NFC_TRACE_DEBUG5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                         \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                         \
-      BT_TRACE_5(TRACE_LAYER_NFC, TRACE_TYPE_DEBUG, m, p1, p2, p3, p4, p5); \
-  }
-#define NFC_TRACE_DEBUG6(m, p1, p2, p3, p4, p5, p6)                        \
-  {                                                                        \
-    if (nfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                        \
-      BT_TRACE_6(TRACE_LAYER_NFC, TRACE_TYPE_DEBUG, m, p1, p2, p3, p4, p5, \
-                 p6);                                                      \
-  }
-
-#define NCI_TRACE_ERROR0(m)                             \
-  {                                                     \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_ERROR)    \
-      BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m); \
-  }
-#define NCI_TRACE_ERROR1(m, p1)                             \
-  {                                                         \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_ERROR)        \
-      BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m, p1); \
-  }
-#define NCI_TRACE_ERROR2(m, p1, p2)                             \
-  {                                                             \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_ERROR)            \
-      BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m, p1, p2); \
-  }
-#define NCI_TRACE_ERROR3(m, p1, p2, p3)                             \
-  {                                                                 \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                \
-      BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m, p1, p2, p3); \
-  }
-#define NCI_TRACE_ERROR4(m, p1, p2, p3, p4)                             \
-  {                                                                     \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                    \
-      BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m, p1, p2, p3, p4); \
-  }
-#define NCI_TRACE_ERROR5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                         \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                        \
-      BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m, p1, p2, p3, p4, p5); \
-  }
-#define NCI_TRACE_ERROR6(m, p1, p2, p3, p4, p5, p6)                        \
-  {                                                                        \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                       \
-      BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m, p1, p2, p3, p4, p5, \
-                 p6);                                                      \
-  }
-
-#define NCI_TRACE_WARNING0(m)                             \
-  {                                                       \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_WARNING)    \
-      BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m); \
-  }
-#define NCI_TRACE_WARNING1(m, p1)                             \
-  {                                                           \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_WARNING)        \
-      BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m, p1); \
-  }
-#define NCI_TRACE_WARNING2(m, p1, p2)                             \
-  {                                                               \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_WARNING)            \
-      BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m, p1, p2); \
-  }
-#define NCI_TRACE_WARNING3(m, p1, p2, p3)                             \
-  {                                                                   \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                \
-      BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m, p1, p2, p3); \
-  }
-#define NCI_TRACE_WARNING4(m, p1, p2, p3, p4)                             \
-  {                                                                       \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                    \
-      BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m, p1, p2, p3, p4); \
-  }
-#define NCI_TRACE_WARNING5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                           \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                        \
-      BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m, p1, p2, p3, p4, p5); \
-  }
-#define NCI_TRACE_WARNING6(m, p1, p2, p3, p4, p5, p6)                        \
-  {                                                                          \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                       \
-      BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m, p1, p2, p3, p4, p5, \
-                 p6);                                                        \
-  }
-
-#define NCI_TRACE_API0(m)                             \
-  {                                                   \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_API)    \
-      BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_API, m); \
-  }
-#define NCI_TRACE_API1(m, p1)                             \
-  {                                                       \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_API)        \
-      BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_API, m, p1); \
-  }
-#define NCI_TRACE_API2(m, p1, p2)                             \
-  {                                                           \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_API)            \
-      BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_API, m, p1, p2); \
-  }
-#define NCI_TRACE_API3(m, p1, p2, p3)                             \
-  {                                                               \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_API)                \
-      BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_API, m, p1, p2, p3); \
-  }
-#define NCI_TRACE_API4(m, p1, p2, p3, p4)                             \
-  {                                                                   \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_API)                    \
-      BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_API, m, p1, p2, p3, p4); \
-  }
-#define NCI_TRACE_API5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                       \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_API)                        \
-      BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_API, m, p1, p2, p3, p4, p5); \
-  }
-#define NCI_TRACE_API6(m, p1, p2, p3, p4, p5, p6)                             \
-  {                                                                           \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_API)                            \
-      BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_API, m, p1, p2, p3, p4, p5, p6); \
-  }
-
-#define NCI_TRACE_EVENT0(m)                             \
-  {                                                     \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_EVENT)    \
-      BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m); \
-  }
-#define NCI_TRACE_EVENT1(m, p1)                             \
-  {                                                         \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_EVENT)        \
-      BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m, p1); \
-  }
-#define NCI_TRACE_EVENT2(m, p1, p2)                             \
-  {                                                             \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_EVENT)            \
-      BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m, p1, p2); \
-  }
-#define NCI_TRACE_EVENT3(m, p1, p2, p3)                             \
-  {                                                                 \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                \
-      BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m, p1, p2, p3); \
-  }
-#define NCI_TRACE_EVENT4(m, p1, p2, p3, p4)                             \
-  {                                                                     \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                    \
-      BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m, p1, p2, p3, p4); \
-  }
-#define NCI_TRACE_EVENT5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                         \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                        \
-      BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m, p1, p2, p3, p4, p5); \
-  }
-#define NCI_TRACE_EVENT6(m, p1, p2, p3, p4, p5, p6)                        \
-  {                                                                        \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                       \
-      BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m, p1, p2, p3, p4, p5, \
-                 p6);                                                      \
-  }
-
-#define NCI_TRACE_DEBUG0(m)                             \
-  {                                                     \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)    \
-      BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m); \
-  }
-#define NCI_TRACE_DEBUG1(m, p1)                             \
-  {                                                         \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)        \
-      BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m, p1); \
-  }
-#define NCI_TRACE_DEBUG2(m, p1, p2)                             \
-  {                                                             \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)            \
-      BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m, p1, p2); \
-  }
-#define NCI_TRACE_DEBUG3(m, p1, p2, p3)                             \
-  {                                                                 \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                \
-      BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m, p1, p2, p3); \
-  }
-#define NCI_TRACE_DEBUG4(m, p1, p2, p3, p4)                             \
-  {                                                                     \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                    \
-      BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m, p1, p2, p3, p4); \
-  }
-#define NCI_TRACE_DEBUG5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                         \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                        \
-      BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m, p1, p2, p3, p4, p5); \
-  }
-#define NCI_TRACE_DEBUG6(m, p1, p2, p3, p4, p5, p6)                        \
-  {                                                                        \
-    if (ncit_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                       \
-      BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m, p1, p2, p3, p4, p5, \
-                 p6);                                                      \
-  }
-
-#define RW_TRACE_ERROR0(m)                             \
-  {                                                    \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_ERROR)     \
-      BT_TRACE_0(TRACE_LAYER_RW, TRACE_TYPE_ERROR, m); \
-  }
-#define RW_TRACE_ERROR1(m, p1)                             \
-  {                                                        \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_ERROR)         \
-      BT_TRACE_1(TRACE_LAYER_RW, TRACE_TYPE_ERROR, m, p1); \
-  }
-#define RW_TRACE_ERROR2(m, p1, p2)                             \
-  {                                                            \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_ERROR)             \
-      BT_TRACE_2(TRACE_LAYER_RW, TRACE_TYPE_ERROR, m, p1, p2); \
-  }
-#define RW_TRACE_ERROR3(m, p1, p2, p3)                             \
-  {                                                                \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                 \
-      BT_TRACE_3(TRACE_LAYER_RW, TRACE_TYPE_ERROR, m, p1, p2, p3); \
-  }
-#define RW_TRACE_ERROR4(m, p1, p2, p3, p4)                             \
-  {                                                                    \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                     \
-      BT_TRACE_4(TRACE_LAYER_RW, TRACE_TYPE_ERROR, m, p1, p2, p3, p4); \
-  }
-#define RW_TRACE_ERROR5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                        \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                         \
-      BT_TRACE_5(TRACE_LAYER_RW, TRACE_TYPE_ERROR, m, p1, p2, p3, p4, p5); \
-  }
-#define RW_TRACE_ERROR6(m, p1, p2, p3, p4, p5, p6)                             \
-  {                                                                            \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                             \
-      BT_TRACE_6(TRACE_LAYER_RW, TRACE_TYPE_ERROR, m, p1, p2, p3, p4, p5, p6); \
-  }
-
-#define RW_TRACE_WARNING0(m)                             \
-  {                                                      \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_WARNING)     \
-      BT_TRACE_0(TRACE_LAYER_RW, TRACE_TYPE_WARNING, m); \
-  }
-#define RW_TRACE_WARNING1(m, p1)                             \
-  {                                                          \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_WARNING)         \
-      BT_TRACE_1(TRACE_LAYER_RW, TRACE_TYPE_WARNING, m, p1); \
-  }
-#define RW_TRACE_WARNING2(m, p1, p2)                             \
-  {                                                              \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_WARNING)             \
-      BT_TRACE_2(TRACE_LAYER_RW, TRACE_TYPE_WARNING, m, p1, p2); \
-  }
-#define RW_TRACE_WARNING3(m, p1, p2, p3)                             \
-  {                                                                  \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                 \
-      BT_TRACE_3(TRACE_LAYER_RW, TRACE_TYPE_WARNING, m, p1, p2, p3); \
-  }
-#define RW_TRACE_WARNING4(m, p1, p2, p3, p4)                             \
-  {                                                                      \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                     \
-      BT_TRACE_4(TRACE_LAYER_RW, TRACE_TYPE_WARNING, m, p1, p2, p3, p4); \
-  }
-#define RW_TRACE_WARNING5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                          \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                         \
-      BT_TRACE_5(TRACE_LAYER_RW, TRACE_TYPE_WARNING, m, p1, p2, p3, p4, p5); \
-  }
-#define RW_TRACE_WARNING6(m, p1, p2, p3, p4, p5, p6)                        \
-  {                                                                         \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                        \
-      BT_TRACE_6(TRACE_LAYER_RW, TRACE_TYPE_WARNING, m, p1, p2, p3, p4, p5, \
-                 p6);                                                       \
-  }
-
-#define RW_TRACE_API0(m)                             \
-  {                                                  \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_API)     \
-      BT_TRACE_0(TRACE_LAYER_RW, TRACE_TYPE_API, m); \
-  }
-#define RW_TRACE_API1(m, p1)                             \
-  {                                                      \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_API)         \
-      BT_TRACE_1(TRACE_LAYER_RW, TRACE_TYPE_API, m, p1); \
-  }
-#define RW_TRACE_API2(m, p1, p2)                             \
-  {                                                          \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_API)             \
-      BT_TRACE_2(TRACE_LAYER_RW, TRACE_TYPE_API, m, p1, p2); \
-  }
-#define RW_TRACE_API3(m, p1, p2, p3)                             \
-  {                                                              \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_API)                 \
-      BT_TRACE_3(TRACE_LAYER_RW, TRACE_TYPE_API, m, p1, p2, p3); \
-  }
-#define RW_TRACE_API4(m, p1, p2, p3, p4)                             \
-  {                                                                  \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_API)                     \
-      BT_TRACE_4(TRACE_LAYER_RW, TRACE_TYPE_API, m, p1, p2, p3, p4); \
-  }
-#define RW_TRACE_API5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                      \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_API)                         \
-      BT_TRACE_5(TRACE_LAYER_RW, TRACE_TYPE_API, m, p1, p2, p3, p4, p5); \
-  }
-#define RW_TRACE_API6(m, p1, p2, p3, p4, p5, p6)                             \
-  {                                                                          \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_API)                             \
-      BT_TRACE_6(TRACE_LAYER_RW, TRACE_TYPE_API, m, p1, p2, p3, p4, p5, p6); \
-  }
-
-#define RW_TRACE_EVENT0(m)                             \
-  {                                                    \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_EVENT)     \
-      BT_TRACE_0(TRACE_LAYER_RW, TRACE_TYPE_EVENT, m); \
-  }
-#define RW_TRACE_EVENT1(m, p1)                             \
-  {                                                        \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_EVENT)         \
-      BT_TRACE_1(TRACE_LAYER_RW, TRACE_TYPE_EVENT, m, p1); \
-  }
-#define RW_TRACE_EVENT2(m, p1, p2)                             \
-  {                                                            \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_EVENT)             \
-      BT_TRACE_2(TRACE_LAYER_RW, TRACE_TYPE_EVENT, m, p1, p2); \
-  }
-#define RW_TRACE_EVENT3(m, p1, p2, p3)                             \
-  {                                                                \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                 \
-      BT_TRACE_3(TRACE_LAYER_RW, TRACE_TYPE_EVENT, m, p1, p2, p3); \
-  }
-#define RW_TRACE_EVENT4(m, p1, p2, p3, p4)                             \
-  {                                                                    \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                     \
-      BT_TRACE_4(TRACE_LAYER_RW, TRACE_TYPE_EVENT, m, p1, p2, p3, p4); \
-  }
-#define RW_TRACE_EVENT5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                        \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                         \
-      BT_TRACE_5(TRACE_LAYER_RW, TRACE_TYPE_EVENT, m, p1, p2, p3, p4, p5); \
-  }
-#define RW_TRACE_EVENT6(m, p1, p2, p3, p4, p5, p6)                             \
-  {                                                                            \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                             \
-      BT_TRACE_6(TRACE_LAYER_RW, TRACE_TYPE_EVENT, m, p1, p2, p3, p4, p5, p6); \
-  }
-
-#define RW_TRACE_DEBUG0(m)                             \
-  {                                                    \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)     \
-      BT_TRACE_0(TRACE_LAYER_RW, TRACE_TYPE_DEBUG, m); \
-  }
-#define RW_TRACE_DEBUG1(m, p1)                             \
-  {                                                        \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)         \
-      BT_TRACE_1(TRACE_LAYER_RW, TRACE_TYPE_DEBUG, m, p1); \
-  }
-#define RW_TRACE_DEBUG2(m, p1, p2)                             \
-  {                                                            \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)             \
-      BT_TRACE_2(TRACE_LAYER_RW, TRACE_TYPE_DEBUG, m, p1, p2); \
-  }
-#define RW_TRACE_DEBUG3(m, p1, p2, p3)                             \
-  {                                                                \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                 \
-      BT_TRACE_3(TRACE_LAYER_RW, TRACE_TYPE_DEBUG, m, p1, p2, p3); \
-  }
-#define RW_TRACE_DEBUG4(m, p1, p2, p3, p4)                             \
-  {                                                                    \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                     \
-      BT_TRACE_4(TRACE_LAYER_RW, TRACE_TYPE_DEBUG, m, p1, p2, p3, p4); \
-  }
-#define RW_TRACE_DEBUG5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                        \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                         \
-      BT_TRACE_5(TRACE_LAYER_RW, TRACE_TYPE_DEBUG, m, p1, p2, p3, p4, p5); \
-  }
-#define RW_TRACE_DEBUG6(m, p1, p2, p3, p4, p5, p6)                             \
-  {                                                                            \
-    if (rw_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                             \
-      BT_TRACE_6(TRACE_LAYER_RW, TRACE_TYPE_DEBUG, m, p1, p2, p3, p4, p5, p6); \
-  }
-
-#define CE_TRACE_ERROR0(m)                             \
-  {                                                    \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_ERROR)     \
-      BT_TRACE_0(TRACE_LAYER_CE, TRACE_TYPE_ERROR, m); \
-  }
-#define CE_TRACE_ERROR1(m, p1)                             \
-  {                                                        \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_ERROR)         \
-      BT_TRACE_1(TRACE_LAYER_CE, TRACE_TYPE_ERROR, m, p1); \
-  }
-#define CE_TRACE_ERROR2(m, p1, p2)                             \
-  {                                                            \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_ERROR)             \
-      BT_TRACE_2(TRACE_LAYER_CE, TRACE_TYPE_ERROR, m, p1, p2); \
-  }
-#define CE_TRACE_ERROR3(m, p1, p2, p3)                             \
-  {                                                                \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                 \
-      BT_TRACE_3(TRACE_LAYER_CE, TRACE_TYPE_ERROR, m, p1, p2, p3); \
-  }
-#define CE_TRACE_ERROR4(m, p1, p2, p3, p4)                             \
-  {                                                                    \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                     \
-      BT_TRACE_4(TRACE_LAYER_CE, TRACE_TYPE_ERROR, m, p1, p2, p3, p4); \
-  }
-#define CE_TRACE_ERROR5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                        \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                         \
-      BT_TRACE_5(TRACE_LAYER_CE, TRACE_TYPE_ERROR, m, p1, p2, p3, p4, p5); \
-  }
-#define CE_TRACE_ERROR6(m, p1, p2, p3, p4, p5, p6)                             \
-  {                                                                            \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                             \
-      BT_TRACE_6(TRACE_LAYER_CE, TRACE_TYPE_ERROR, m, p1, p2, p3, p4, p5, p6); \
-  }
-
-#define CE_TRACE_WARNING0(m)                             \
-  {                                                      \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_WARNING)     \
-      BT_TRACE_0(TRACE_LAYER_CE, TRACE_TYPE_WARNING, m); \
-  }
-#define CE_TRACE_WARNING1(m, p1)                             \
-  {                                                          \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_WARNING)         \
-      BT_TRACE_1(TRACE_LAYER_CE, TRACE_TYPE_WARNING, m, p1); \
-  }
-#define CE_TRACE_WARNING2(m, p1, p2)                             \
-  {                                                              \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_WARNING)             \
-      BT_TRACE_2(TRACE_LAYER_CE, TRACE_TYPE_WARNING, m, p1, p2); \
-  }
-#define CE_TRACE_WARNING3(m, p1, p2, p3)                             \
-  {                                                                  \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                 \
-      BT_TRACE_3(TRACE_LAYER_CE, TRACE_TYPE_WARNING, m, p1, p2, p3); \
-  }
-#define CE_TRACE_WARNING4(m, p1, p2, p3, p4)                             \
-  {                                                                      \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                     \
-      BT_TRACE_4(TRACE_LAYER_CE, TRACE_TYPE_WARNING, m, p1, p2, p3, p4); \
-  }
-#define CE_TRACE_WARNING5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                          \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                         \
-      BT_TRACE_5(TRACE_LAYER_CE, TRACE_TYPE_WARNING, m, p1, p2, p3, p4, p5); \
-  }
-#define CE_TRACE_WARNING6(m, p1, p2, p3, p4, p5, p6)                        \
-  {                                                                         \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                        \
-      BT_TRACE_6(TRACE_LAYER_CE, TRACE_TYPE_WARNING, m, p1, p2, p3, p4, p5, \
-                 p6);                                                       \
-  }
-
-#define CE_TRACE_API0(m)                             \
-  {                                                  \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_API)     \
-      BT_TRACE_0(TRACE_LAYER_CE, TRACE_TYPE_API, m); \
-  }
-#define CE_TRACE_API1(m, p1)                             \
-  {                                                      \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_API)         \
-      BT_TRACE_1(TRACE_LAYER_CE, TRACE_TYPE_API, m, p1); \
-  }
-#define CE_TRACE_API2(m, p1, p2)                             \
-  {                                                          \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_API)             \
-      BT_TRACE_2(TRACE_LAYER_CE, TRACE_TYPE_API, m, p1, p2); \
-  }
-#define CE_TRACE_API3(m, p1, p2, p3)                             \
-  {                                                              \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_API)                 \
-      BT_TRACE_3(TRACE_LAYER_CE, TRACE_TYPE_API, m, p1, p2, p3); \
-  }
-#define CE_TRACE_API4(m, p1, p2, p3, p4)                             \
-  {                                                                  \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_API)                     \
-      BT_TRACE_4(TRACE_LAYER_CE, TRACE_TYPE_API, m, p1, p2, p3, p4); \
-  }
-#define CE_TRACE_API5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                      \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_API)                         \
-      BT_TRACE_5(TRACE_LAYER_CE, TRACE_TYPE_API, m, p1, p2, p3, p4, p5); \
-  }
-#define CE_TRACE_API6(m, p1, p2, p3, p4, p5, p6)                             \
-  {                                                                          \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_API)                             \
-      BT_TRACE_6(TRACE_LAYER_CE, TRACE_TYPE_API, m, p1, p2, p3, p4, p5, p6); \
-  }
-
-#define CE_TRACE_EVENT0(m)                             \
-  {                                                    \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_EVENT)     \
-      BT_TRACE_0(TRACE_LAYER_CE, TRACE_TYPE_EVENT, m); \
-  }
-#define CE_TRACE_EVENT1(m, p1)                             \
-  {                                                        \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_EVENT)         \
-      BT_TRACE_1(TRACE_LAYER_CE, TRACE_TYPE_EVENT, m, p1); \
-  }
-#define CE_TRACE_EVENT2(m, p1, p2)                             \
-  {                                                            \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_EVENT)             \
-      BT_TRACE_2(TRACE_LAYER_CE, TRACE_TYPE_EVENT, m, p1, p2); \
-  }
-#define CE_TRACE_EVENT3(m, p1, p2, p3)                             \
-  {                                                                \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                 \
-      BT_TRACE_3(TRACE_LAYER_CE, TRACE_TYPE_EVENT, m, p1, p2, p3); \
-  }
-#define CE_TRACE_EVENT4(m, p1, p2, p3, p4)                             \
-  {                                                                    \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                     \
-      BT_TRACE_4(TRACE_LAYER_CE, TRACE_TYPE_EVENT, m, p1, p2, p3, p4); \
-  }
-#define CE_TRACE_EVENT5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                        \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                         \
-      BT_TRACE_5(TRACE_LAYER_CE, TRACE_TYPE_EVENT, m, p1, p2, p3, p4, p5); \
-  }
-#define CE_TRACE_EVENT6(m, p1, p2, p3, p4, p5, p6)                             \
-  {                                                                            \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                             \
-      BT_TRACE_6(TRACE_LAYER_CE, TRACE_TYPE_EVENT, m, p1, p2, p3, p4, p5, p6); \
-  }
-
-#define CE_TRACE_DEBUG0(m)                             \
-  {                                                    \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)     \
-      BT_TRACE_0(TRACE_LAYER_CE, TRACE_TYPE_DEBUG, m); \
-  }
-#define CE_TRACE_DEBUG1(m, p1)                             \
-  {                                                        \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)         \
-      BT_TRACE_1(TRACE_LAYER_CE, TRACE_TYPE_DEBUG, m, p1); \
-  }
-#define CE_TRACE_DEBUG2(m, p1, p2)                             \
-  {                                                            \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)             \
-      BT_TRACE_2(TRACE_LAYER_CE, TRACE_TYPE_DEBUG, m, p1, p2); \
-  }
-#define CE_TRACE_DEBUG3(m, p1, p2, p3)                             \
-  {                                                                \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                 \
-      BT_TRACE_3(TRACE_LAYER_CE, TRACE_TYPE_DEBUG, m, p1, p2, p3); \
-  }
-#define CE_TRACE_DEBUG4(m, p1, p2, p3, p4)                             \
-  {                                                                    \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                     \
-      BT_TRACE_4(TRACE_LAYER_CE, TRACE_TYPE_DEBUG, m, p1, p2, p3, p4); \
-  }
-#define CE_TRACE_DEBUG5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                        \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                         \
-      BT_TRACE_5(TRACE_LAYER_CE, TRACE_TYPE_DEBUG, m, p1, p2, p3, p4, p5); \
-  }
-#define CE_TRACE_DEBUG6(m, p1, p2, p3, p4, p5, p6)                             \
-  {                                                                            \
-    if (ce_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                             \
-      BT_TRACE_6(TRACE_LAYER_CE, TRACE_TYPE_DEBUG, m, p1, p2, p3, p4, p5, p6); \
-  }
-
-#define NDEF_TRACE_ERROR0(m)                             \
-  {                                                      \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_ERROR)     \
-      BT_TRACE_0(TRACE_LAYER_NDEF, TRACE_TYPE_ERROR, m); \
-  }
-#define NDEF_TRACE_ERROR1(m, p1)                             \
-  {                                                          \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_ERROR)         \
-      BT_TRACE_1(TRACE_LAYER_NDEF, TRACE_TYPE_ERROR, m, p1); \
-  }
-#define NDEF_TRACE_ERROR2(m, p1, p2)                             \
-  {                                                              \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_ERROR)             \
-      BT_TRACE_2(TRACE_LAYER_NDEF, TRACE_TYPE_ERROR, m, p1, p2); \
-  }
-#define NDEF_TRACE_ERROR3(m, p1, p2, p3)                             \
-  {                                                                  \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                 \
-      BT_TRACE_3(TRACE_LAYER_NDEF, TRACE_TYPE_ERROR, m, p1, p2, p3); \
-  }
-#define NDEF_TRACE_ERROR4(m, p1, p2, p3, p4)                             \
-  {                                                                      \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                     \
-      BT_TRACE_4(TRACE_LAYER_NDEF, TRACE_TYPE_ERROR, m, p1, p2, p3, p4); \
-  }
-#define NDEF_TRACE_ERROR5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                          \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                         \
-      BT_TRACE_5(TRACE_LAYER_NDEF, TRACE_TYPE_ERROR, m, p1, p2, p3, p4, p5); \
-  }
-#define NDEF_TRACE_ERROR6(m, p1, p2, p3, p4, p5, p6)                        \
-  {                                                                         \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                        \
-      BT_TRACE_6(TRACE_LAYER_NDEF, TRACE_TYPE_ERROR, m, p1, p2, p3, p4, p5, \
-                 p6);                                                       \
-  }
-
-#define NDEF_TRACE_WARNING0(m)                             \
-  {                                                        \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_WARNING)     \
-      BT_TRACE_0(TRACE_LAYER_NDEF, TRACE_TYPE_WARNING, m); \
-  }
-#define NDEF_TRACE_WARNING1(m, p1)                             \
-  {                                                            \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_WARNING)         \
-      BT_TRACE_1(TRACE_LAYER_NDEF, TRACE_TYPE_WARNING, m, p1); \
-  }
-#define NDEF_TRACE_WARNING2(m, p1, p2)                             \
-  {                                                                \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_WARNING)             \
-      BT_TRACE_2(TRACE_LAYER_NDEF, TRACE_TYPE_WARNING, m, p1, p2); \
-  }
-#define NDEF_TRACE_WARNING3(m, p1, p2, p3)                             \
-  {                                                                    \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                 \
-      BT_TRACE_3(TRACE_LAYER_NDEF, TRACE_TYPE_WARNING, m, p1, p2, p3); \
-  }
-#define NDEF_TRACE_WARNING4(m, p1, p2, p3, p4)                             \
-  {                                                                        \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                     \
-      BT_TRACE_4(TRACE_LAYER_NDEF, TRACE_TYPE_WARNING, m, p1, p2, p3, p4); \
-  }
-#define NDEF_TRACE_WARNING5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                            \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                         \
-      BT_TRACE_5(TRACE_LAYER_NDEF, TRACE_TYPE_WARNING, m, p1, p2, p3, p4, p5); \
-  }
-#define NDEF_TRACE_WARNING6(m, p1, p2, p3, p4, p5, p6)                        \
-  {                                                                           \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                        \
-      BT_TRACE_6(TRACE_LAYER_NDEF, TRACE_TYPE_WARNING, m, p1, p2, p3, p4, p5, \
-                 p6);                                                         \
-  }
-
-#define NDEF_TRACE_API0(m)                             \
-  {                                                    \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_API)     \
-      BT_TRACE_0(TRACE_LAYER_NDEF, TRACE_TYPE_API, m); \
-  }
-#define NDEF_TRACE_API1(m, p1)                             \
-  {                                                        \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_API)         \
-      BT_TRACE_1(TRACE_LAYER_NDEF, TRACE_TYPE_API, m, p1); \
-  }
-#define NDEF_TRACE_API2(m, p1, p2)                             \
-  {                                                            \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_API)             \
-      BT_TRACE_2(TRACE_LAYER_NDEF, TRACE_TYPE_API, m, p1, p2); \
-  }
-#define NDEF_TRACE_API3(m, p1, p2, p3)                             \
-  {                                                                \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_API)                 \
-      BT_TRACE_3(TRACE_LAYER_NDEF, TRACE_TYPE_API, m, p1, p2, p3); \
-  }
-#define NDEF_TRACE_API4(m, p1, p2, p3, p4)                             \
-  {                                                                    \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_API)                     \
-      BT_TRACE_4(TRACE_LAYER_NDEF, TRACE_TYPE_API, m, p1, p2, p3, p4); \
-  }
-#define NDEF_TRACE_API5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                        \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_API)                         \
-      BT_TRACE_5(TRACE_LAYER_NDEF, TRACE_TYPE_API, m, p1, p2, p3, p4, p5); \
-  }
-#define NDEF_TRACE_API6(m, p1, p2, p3, p4, p5, p6)                             \
-  {                                                                            \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_API)                             \
-      BT_TRACE_6(TRACE_LAYER_NDEF, TRACE_TYPE_API, m, p1, p2, p3, p4, p5, p6); \
-  }
-
-#define NDEF_TRACE_EVENT0(m)                             \
-  {                                                      \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_EVENT)     \
-      BT_TRACE_0(TRACE_LAYER_NDEF, TRACE_TYPE_EVENT, m); \
-  }
-#define NDEF_TRACE_EVENT1(m, p1)                             \
-  {                                                          \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_EVENT)         \
-      BT_TRACE_1(TRACE_LAYER_NDEF, TRACE_TYPE_EVENT, m, p1); \
-  }
-#define NDEF_TRACE_EVENT2(m, p1, p2)                             \
-  {                                                              \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_EVENT)             \
-      BT_TRACE_2(TRACE_LAYER_NDEF, TRACE_TYPE_EVENT, m, p1, p2); \
-  }
-#define NDEF_TRACE_EVENT3(m, p1, p2, p3)                             \
-  {                                                                  \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                 \
-      BT_TRACE_3(TRACE_LAYER_NDEF, TRACE_TYPE_EVENT, m, p1, p2, p3); \
-  }
-#define NDEF_TRACE_EVENT4(m, p1, p2, p3, p4)                             \
-  {                                                                      \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                     \
-      BT_TRACE_4(TRACE_LAYER_NDEF, TRACE_TYPE_EVENT, m, p1, p2, p3, p4); \
-  }
-#define NDEF_TRACE_EVENT5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                          \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                         \
-      BT_TRACE_5(TRACE_LAYER_NDEF, TRACE_TYPE_EVENT, m, p1, p2, p3, p4, p5); \
-  }
-#define NDEF_TRACE_EVENT6(m, p1, p2, p3, p4, p5, p6)                        \
-  {                                                                         \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                        \
-      BT_TRACE_6(TRACE_LAYER_NDEF, TRACE_TYPE_EVENT, m, p1, p2, p3, p4, p5, \
-                 p6);                                                       \
-  }
-
-#define NDEF_TRACE_DEBUG0(m)                             \
-  {                                                      \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)     \
-      BT_TRACE_0(TRACE_LAYER_NDEF, TRACE_TYPE_DEBUG, m); \
-  }
-#define NDEF_TRACE_DEBUG1(m, p1)                             \
-  {                                                          \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)         \
-      BT_TRACE_1(TRACE_LAYER_NDEF, TRACE_TYPE_DEBUG, m, p1); \
-  }
-#define NDEF_TRACE_DEBUG2(m, p1, p2)                             \
-  {                                                              \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)             \
-      BT_TRACE_2(TRACE_LAYER_NDEF, TRACE_TYPE_DEBUG, m, p1, p2); \
-  }
-#define NDEF_TRACE_DEBUG3(m, p1, p2, p3)                             \
-  {                                                                  \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                 \
-      BT_TRACE_3(TRACE_LAYER_NDEF, TRACE_TYPE_DEBUG, m, p1, p2, p3); \
-  }
-#define NDEF_TRACE_DEBUG4(m, p1, p2, p3, p4)                             \
-  {                                                                      \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                     \
-      BT_TRACE_4(TRACE_LAYER_NDEF, TRACE_TYPE_DEBUG, m, p1, p2, p3, p4); \
-  }
-#define NDEF_TRACE_DEBUG5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                          \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                         \
-      BT_TRACE_5(TRACE_LAYER_NDEF, TRACE_TYPE_DEBUG, m, p1, p2, p3, p4, p5); \
-  }
-#define NDEF_TRACE_DEBUG6(m, p1, p2, p3, p4, p5, p6)                        \
-  {                                                                         \
-    if (ndef_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                        \
-      BT_TRACE_6(TRACE_LAYER_NDEF, TRACE_TYPE_DEBUG, m, p1, p2, p3, p4, p5, \
-                 p6);                                                       \
-  }
-
-/* Define tracing for the NFA unit
-*/
-#define NFA_TRACE_ERROR0(m)                             \
-  {                                                     \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_ERROR) \
-      BT_TRACE_0(TRACE_LAYER_NFA, TRACE_TYPE_ERROR, m); \
-  }
-#define NFA_TRACE_ERROR1(m, p1)                             \
-  {                                                         \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_ERROR)     \
-      BT_TRACE_1(TRACE_LAYER_NFA, TRACE_TYPE_ERROR, m, p1); \
-  }
-#define NFA_TRACE_ERROR2(m, p1, p2)                             \
-  {                                                             \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_ERROR)         \
-      BT_TRACE_2(TRACE_LAYER_NFA, TRACE_TYPE_ERROR, m, p1, p2); \
-  }
-#define NFA_TRACE_ERROR3(m, p1, p2, p3)                             \
-  {                                                                 \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_ERROR)             \
-      BT_TRACE_3(TRACE_LAYER_NFA, TRACE_TYPE_ERROR, m, p1, p2, p3); \
-  }
-#define NFA_TRACE_ERROR4(m, p1, p2, p3, p4)                             \
-  {                                                                     \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                 \
-      BT_TRACE_4(TRACE_LAYER_NFA, TRACE_TYPE_ERROR, m, p1, p2, p3, p4); \
-  }
-#define NFA_TRACE_ERROR5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                         \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                     \
-      BT_TRACE_5(TRACE_LAYER_NFA, TRACE_TYPE_ERROR, m, p1, p2, p3, p4, p5); \
-  }
-#define NFA_TRACE_ERROR6(m, p1, p2, p3, p4, p5, p6)                        \
-  {                                                                        \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                    \
-      BT_TRACE_6(TRACE_LAYER_NFA, TRACE_TYPE_ERROR, m, p1, p2, p3, p4, p5, \
-                 p6);                                                      \
-  }
-
-#define NFA_TRACE_WARNING0(m)                             \
-  {                                                       \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_WARNING) \
-      BT_TRACE_0(TRACE_LAYER_NFA, TRACE_TYPE_WARNING, m); \
-  }
-#define NFA_TRACE_WARNING1(m, p1)                             \
-  {                                                           \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_WARNING)     \
-      BT_TRACE_1(TRACE_LAYER_NFA, TRACE_TYPE_WARNING, m, p1); \
-  }
-#define NFA_TRACE_WARNING2(m, p1, p2)                             \
-  {                                                               \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_WARNING)         \
-      BT_TRACE_2(TRACE_LAYER_NFA, TRACE_TYPE_WARNING, m, p1, p2); \
-  }
-#define NFA_TRACE_WARNING3(m, p1, p2, p3)                             \
-  {                                                                   \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_WARNING)             \
-      BT_TRACE_3(TRACE_LAYER_NFA, TRACE_TYPE_WARNING, m, p1, p2, p3); \
-  }
-#define NFA_TRACE_WARNING4(m, p1, p2, p3, p4)                             \
-  {                                                                       \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                 \
-      BT_TRACE_4(TRACE_LAYER_NFA, TRACE_TYPE_WARNING, m, p1, p2, p3, p4); \
-  }
-#define NFA_TRACE_WARNING5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                           \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                     \
-      BT_TRACE_5(TRACE_LAYER_NFA, TRACE_TYPE_WARNING, m, p1, p2, p3, p4, p5); \
-  }
-#define NFA_TRACE_WARNING6(m, p1, p2, p3, p4, p5, p6)                        \
-  {                                                                          \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                    \
-      BT_TRACE_6(TRACE_LAYER_NFA, TRACE_TYPE_WARNING, m, p1, p2, p3, p4, p5, \
-                 p6);                                                        \
-  }
-
-#define NFA_TRACE_API0(m)                             \
-  {                                                   \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_API) \
-      BT_TRACE_0(TRACE_LAYER_NFA, TRACE_TYPE_API, m); \
-  }
-#define NFA_TRACE_API1(m, p1)                             \
-  {                                                       \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_API)     \
-      BT_TRACE_1(TRACE_LAYER_NFA, TRACE_TYPE_API, m, p1); \
-  }
-#define NFA_TRACE_API2(m, p1, p2)                             \
-  {                                                           \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_API)         \
-      BT_TRACE_2(TRACE_LAYER_NFA, TRACE_TYPE_API, m, p1, p2); \
-  }
-#define NFA_TRACE_API3(m, p1, p2, p3)                             \
-  {                                                               \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_API)             \
-      BT_TRACE_3(TRACE_LAYER_NFA, TRACE_TYPE_API, m, p1, p2, p3); \
-  }
-#define NFA_TRACE_API4(m, p1, p2, p3, p4)                             \
-  {                                                                   \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_API)                 \
-      BT_TRACE_4(TRACE_LAYER_NFA, TRACE_TYPE_API, m, p1, p2, p3, p4); \
-  }
-#define NFA_TRACE_API5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                       \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_API)                     \
-      BT_TRACE_5(TRACE_LAYER_NFA, TRACE_TYPE_API, m, p1, p2, p3, p4, p5); \
-  }
-#define NFA_TRACE_API6(m, p1, p2, p3, p4, p5, p6)                             \
-  {                                                                           \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_API)                         \
-      BT_TRACE_6(TRACE_LAYER_NFA, TRACE_TYPE_API, m, p1, p2, p3, p4, p5, p6); \
-  }
-
-#define NFA_TRACE_EVENT0(m)                             \
-  {                                                     \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_EVENT) \
-      BT_TRACE_0(TRACE_LAYER_NFA, TRACE_TYPE_EVENT, m); \
-  }
-#define NFA_TRACE_EVENT1(m, p1)                             \
-  {                                                         \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_EVENT)     \
-      BT_TRACE_1(TRACE_LAYER_NFA, TRACE_TYPE_EVENT, m, p1); \
-  }
-#define NFA_TRACE_EVENT2(m, p1, p2)                             \
-  {                                                             \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_EVENT)         \
-      BT_TRACE_2(TRACE_LAYER_NFA, TRACE_TYPE_EVENT, m, p1, p2); \
-  }
-#define NFA_TRACE_EVENT3(m, p1, p2, p3)                             \
-  {                                                                 \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_EVENT)             \
-      BT_TRACE_3(TRACE_LAYER_NFA, TRACE_TYPE_EVENT, m, p1, p2, p3); \
-  }
-#define NFA_TRACE_EVENT4(m, p1, p2, p3, p4)                             \
-  {                                                                     \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                 \
-      BT_TRACE_4(TRACE_LAYER_NFA, TRACE_TYPE_EVENT, m, p1, p2, p3, p4); \
-  }
-#define NFA_TRACE_EVENT5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                         \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                     \
-      BT_TRACE_5(TRACE_LAYER_NFA, TRACE_TYPE_EVENT, m, p1, p2, p3, p4, p5); \
-  }
-#define NFA_TRACE_EVENT6(m, p1, p2, p3, p4, p5, p6)                        \
-  {                                                                        \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                    \
-      BT_TRACE_6(TRACE_LAYER_NFA, TRACE_TYPE_EVENT, m, p1, p2, p3, p4, p5, \
-                 p6);                                                      \
-  }
-
-#define NFA_TRACE_DEBUG0(m)                             \
-  {                                                     \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) \
-      BT_TRACE_0(TRACE_LAYER_NFA, TRACE_TYPE_DEBUG, m); \
-  }
-#define NFA_TRACE_DEBUG1(m, p1)                             \
-  {                                                         \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)     \
-      BT_TRACE_1(TRACE_LAYER_NFA, TRACE_TYPE_DEBUG, m, p1); \
-  }
-#define NFA_TRACE_DEBUG2(m, p1, p2)                             \
-  {                                                             \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)         \
-      BT_TRACE_2(TRACE_LAYER_NFA, TRACE_TYPE_DEBUG, m, p1, p2); \
-  }
-#define NFA_TRACE_DEBUG3(m, p1, p2, p3)                             \
-  {                                                                 \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)             \
-      BT_TRACE_3(TRACE_LAYER_NFA, TRACE_TYPE_DEBUG, m, p1, p2, p3); \
-  }
-#define NFA_TRACE_DEBUG4(m, p1, p2, p3, p4)                             \
-  {                                                                     \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                 \
-      BT_TRACE_4(TRACE_LAYER_NFA, TRACE_TYPE_DEBUG, m, p1, p2, p3, p4); \
-  }
-#define NFA_TRACE_DEBUG5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                         \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                     \
-      BT_TRACE_5(TRACE_LAYER_NFA, TRACE_TYPE_DEBUG, m, p1, p2, p3, p4, p5); \
-  }
-#define NFA_TRACE_DEBUG6(m, p1, p2, p3, p4, p5, p6)                        \
-  {                                                                        \
-    if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                    \
-      BT_TRACE_6(TRACE_LAYER_NFA, TRACE_TYPE_DEBUG, m, p1, p2, p3, p4, p5, \
-                 p6);                                                      \
-  }
-
-/* Define tracing for the NFA P2P unit
-*/
-#define P2P_TRACE_ERROR0(m)                             \
-  {                                                     \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_ERROR) \
-      BT_TRACE_0(TRACE_LAYER_P2P, TRACE_TYPE_ERROR, m); \
-  }
-#define P2P_TRACE_ERROR1(m, p1)                             \
-  {                                                         \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_ERROR)     \
-      BT_TRACE_1(TRACE_LAYER_P2P, TRACE_TYPE_ERROR, m, p1); \
-  }
-#define P2P_TRACE_ERROR2(m, p1, p2)                             \
-  {                                                             \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_ERROR)         \
-      BT_TRACE_2(TRACE_LAYER_P2P, TRACE_TYPE_ERROR, m, p1, p2); \
-  }
-#define P2P_TRACE_ERROR3(m, p1, p2, p3)                             \
-  {                                                                 \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_ERROR)             \
-      BT_TRACE_3(TRACE_LAYER_P2P, TRACE_TYPE_ERROR, m, p1, p2, p3); \
-  }
-#define P2P_TRACE_ERROR4(m, p1, p2, p3, p4)                             \
-  {                                                                     \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                 \
-      BT_TRACE_4(TRACE_LAYER_P2P, TRACE_TYPE_ERROR, m, p1, p2, p3, p4); \
-  }
-#define P2P_TRACE_ERROR5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                         \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                     \
-      BT_TRACE_5(TRACE_LAYER_P2P, TRACE_TYPE_ERROR, m, p1, p2, p3, p4, p5); \
-  }
-#define P2P_TRACE_ERROR6(m, p1, p2, p3, p4, p5, p6)                        \
-  {                                                                        \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_ERROR)                    \
-      BT_TRACE_6(TRACE_LAYER_P2P, TRACE_TYPE_ERROR, m, p1, p2, p3, p4, p5, \
-                 p6);                                                      \
-  }
-
-#define P2P_TRACE_WARNING0(m)                             \
-  {                                                       \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_WARNING) \
-      BT_TRACE_0(TRACE_LAYER_P2P, TRACE_TYPE_WARNING, m); \
-  }
-#define P2P_TRACE_WARNING1(m, p1)                             \
-  {                                                           \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_WARNING)     \
-      BT_TRACE_1(TRACE_LAYER_P2P, TRACE_TYPE_WARNING, m, p1); \
-  }
-#define P2P_TRACE_WARNING2(m, p1, p2)                             \
-  {                                                               \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_WARNING)         \
-      BT_TRACE_2(TRACE_LAYER_P2P, TRACE_TYPE_WARNING, m, p1, p2); \
-  }
-#define P2P_TRACE_WARNING3(m, p1, p2, p3)                             \
-  {                                                                   \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_WARNING)             \
-      BT_TRACE_3(TRACE_LAYER_P2P, TRACE_TYPE_WARNING, m, p1, p2, p3); \
-  }
-#define P2P_TRACE_WARNING4(m, p1, p2, p3, p4)                             \
-  {                                                                       \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                 \
-      BT_TRACE_4(TRACE_LAYER_P2P, TRACE_TYPE_WARNING, m, p1, p2, p3, p4); \
-  }
-#define P2P_TRACE_WARNING5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                           \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                     \
-      BT_TRACE_5(TRACE_LAYER_P2P, TRACE_TYPE_WARNING, m, p1, p2, p3, p4, p5); \
-  }
-#define P2P_TRACE_WARNING6(m, p1, p2, p3, p4, p5, p6)                        \
-  {                                                                          \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_WARNING)                    \
-      BT_TRACE_6(TRACE_LAYER_P2P, TRACE_TYPE_WARNING, m, p1, p2, p3, p4, p5, \
-                 p6);                                                        \
-  }
-
-#define P2P_TRACE_API0(m)                             \
-  {                                                   \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_API) \
-      BT_TRACE_0(TRACE_LAYER_P2P, TRACE_TYPE_API, m); \
-  }
-#define P2P_TRACE_API1(m, p1)                             \
-  {                                                       \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_API)     \
-      BT_TRACE_1(TRACE_LAYER_P2P, TRACE_TYPE_API, m, p1); \
-  }
-#define P2P_TRACE_API2(m, p1, p2)                             \
-  {                                                           \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_API)         \
-      BT_TRACE_2(TRACE_LAYER_P2P, TRACE_TYPE_API, m, p1, p2); \
-  }
-#define P2P_TRACE_API3(m, p1, p2, p3)                             \
-  {                                                               \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_API)             \
-      BT_TRACE_3(TRACE_LAYER_P2P, TRACE_TYPE_API, m, p1, p2, p3); \
-  }
-#define P2P_TRACE_API4(m, p1, p2, p3, p4)                             \
-  {                                                                   \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_API)                 \
-      BT_TRACE_4(TRACE_LAYER_P2P, TRACE_TYPE_API, m, p1, p2, p3, p4); \
-  }
-#define P2P_TRACE_API5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                       \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_API)                     \
-      BT_TRACE_5(TRACE_LAYER_P2P, TRACE_TYPE_API, m, p1, p2, p3, p4, p5); \
-  }
-#define P2P_TRACE_API6(m, p1, p2, p3, p4, p5, p6)                             \
-  {                                                                           \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_API)                         \
-      BT_TRACE_6(TRACE_LAYER_P2P, TRACE_TYPE_API, m, p1, p2, p3, p4, p5, p6); \
-  }
-
-#define P2P_TRACE_EVENT0(m)                             \
-  {                                                     \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_EVENT) \
-      BT_TRACE_0(TRACE_LAYER_P2P, TRACE_TYPE_EVENT, m); \
-  }
-#define P2P_TRACE_EVENT1(m, p1)                             \
-  {                                                         \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_EVENT)     \
-      BT_TRACE_1(TRACE_LAYER_P2P, TRACE_TYPE_EVENT, m, p1); \
-  }
-#define P2P_TRACE_EVENT2(m, p1, p2)                             \
-  {                                                             \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_EVENT)         \
-      BT_TRACE_2(TRACE_LAYER_P2P, TRACE_TYPE_EVENT, m, p1, p2); \
-  }
-#define P2P_TRACE_EVENT3(m, p1, p2, p3)                             \
-  {                                                                 \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_EVENT)             \
-      BT_TRACE_3(TRACE_LAYER_P2P, TRACE_TYPE_EVENT, m, p1, p2, p3); \
-  }
-#define P2P_TRACE_EVENT4(m, p1, p2, p3, p4)                             \
-  {                                                                     \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                 \
-      BT_TRACE_4(TRACE_LAYER_P2P, TRACE_TYPE_EVENT, m, p1, p2, p3, p4); \
-  }
-#define P2P_TRACE_EVENT5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                         \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                     \
-      BT_TRACE_5(TRACE_LAYER_P2P, TRACE_TYPE_EVENT, m, p1, p2, p3, p4, p5); \
-  }
-#define P2P_TRACE_EVENT6(m, p1, p2, p3, p4, p5, p6)                        \
-  {                                                                        \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_EVENT)                    \
-      BT_TRACE_6(TRACE_LAYER_P2P, TRACE_TYPE_EVENT, m, p1, p2, p3, p4, p5, \
-                 p6);                                                      \
-  }
-
-#define P2P_TRACE_DEBUG0(m)                             \
-  {                                                     \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) \
-      BT_TRACE_0(TRACE_LAYER_P2P, TRACE_TYPE_DEBUG, m); \
-  }
-#define P2P_TRACE_DEBUG1(m, p1)                             \
-  {                                                         \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)     \
-      BT_TRACE_1(TRACE_LAYER_P2P, TRACE_TYPE_DEBUG, m, p1); \
-  }
-#define P2P_TRACE_DEBUG2(m, p1, p2)                             \
-  {                                                             \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)         \
-      BT_TRACE_2(TRACE_LAYER_P2P, TRACE_TYPE_DEBUG, m, p1, p2); \
-  }
-#define P2P_TRACE_DEBUG3(m, p1, p2, p3)                             \
-  {                                                                 \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)             \
-      BT_TRACE_3(TRACE_LAYER_P2P, TRACE_TYPE_DEBUG, m, p1, p2, p3); \
-  }
-#define P2P_TRACE_DEBUG4(m, p1, p2, p3, p4)                             \
-  {                                                                     \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                 \
-      BT_TRACE_4(TRACE_LAYER_P2P, TRACE_TYPE_DEBUG, m, p1, p2, p3, p4); \
-  }
-#define P2P_TRACE_DEBUG5(m, p1, p2, p3, p4, p5)                             \
-  {                                                                         \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                     \
-      BT_TRACE_5(TRACE_LAYER_P2P, TRACE_TYPE_DEBUG, m, p1, p2, p3, p4, p5); \
-  }
-#define P2P_TRACE_DEBUG6(m, p1, p2, p3, p4, p5, p6)                        \
-  {                                                                        \
-    if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_DEBUG)                    \
-      BT_TRACE_6(TRACE_LAYER_P2P, TRACE_TYPE_DEBUG, m, p1, p2, p3, p4, p5, \
-                 p6);                                                      \
-  }
-
-/* define traces for application */
-#define APPL_TRACE_ERROR0(m)                                            \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_ERROR)                       \
-      LogMsg_0(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_ERROR,                                    \
-               (m));                                                    \
-  }
-#define APPL_TRACE_ERROR1(m, p1)                                        \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_ERROR)                       \
-      LogMsg_1(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_ERROR,                                    \
-               (m), (uintptr_t)(p1));                                   \
-  }
-#define APPL_TRACE_ERROR2(m, p1, p2)                                    \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_ERROR)                       \
-      LogMsg_2(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_ERROR,                                    \
-               (m), (uintptr_t)(p1), (uintptr_t)(p2));                  \
-  }
-#define APPL_TRACE_ERROR3(m, p1, p2, p3)                                \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_ERROR)                       \
-      LogMsg_3(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_ERROR,                                    \
-               (m), (uintptr_t)(p1), (uintptr_t)(p2), (uintptr_t)(p3)); \
-  }
-#define APPL_TRACE_ERROR4(m, p1, p2, p3, p4)                            \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_ERROR)                       \
-      LogMsg_4(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_ERROR,                                    \
-               (m), (uintptr_t)(p1), (uintptr_t)(p2), (uintptr_t)(p3),  \
-               (uintptr_t)(p4));                                        \
-  }
-#define APPL_TRACE_ERROR5(m, p1, p2, p3, p4, p5)                        \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_ERROR)                       \
-      LogMsg_5(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_ERROR,                                    \
-               (m), (uintptr_t)(p1), (uintptr_t)(p2), (uintptr_t)(p3),  \
-               (uintptr_t)(p4), (uintptr_t)(p5));                       \
-  }
-#define APPL_TRACE_ERROR6(m, p1, p2, p3, p4, p5, p6)                    \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_ERROR)                       \
-      LogMsg_6(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_ERROR,                                    \
-               (m), (uintptr_t)(p1), (uintptr_t)(p2), (uintptr_t)(p3),  \
-               (uintptr_t)(p4), (uintptr_t)(p5), (uintptr_t)(p6));      \
-  }
-
-#define APPL_TRACE_WARNING0(m)                                          \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_WARNING)                     \
-      LogMsg_0(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_WARNING,                                  \
-               (m));                                                    \
-  }
-#define APPL_TRACE_WARNING1(m, p1)                                      \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_WARNING)                     \
-      LogMsg_1(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_WARNING,                                  \
-               (m), (uintptr_t)(p1));                                   \
-  }
-#define APPL_TRACE_WARNING2(m, p1, p2)                                  \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_WARNING)                     \
-      LogMsg_2(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_WARNING,                                  \
-               (m), (uintptr_t)(p1), (uintptr_t)(p2));                  \
-  }
-#define APPL_TRACE_WARNING3(m, p1, p2, p3)                              \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_WARNING)                     \
-      LogMsg_3(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_WARNING,                                  \
-               (m), (uintptr_t)(p1), (uintptr_t)(p2), (uintptr_t)(p3)); \
-  }
-#define APPL_TRACE_WARNING4(m, p1, p2, p3, p4)                          \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_WARNING)                     \
-      LogMsg_4(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_WARNING,                                  \
-               (m), (uintptr_t)(p1), (uintptr_t)(p2), (uintptr_t)(p3),  \
-               (uintptr_t)(p4));                                        \
-  }
-#define APPL_TRACE_WARNING5(m, p1, p2, p3, p4, p5)                      \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_WARNING)                     \
-      LogMsg_5(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_WARNING,                                  \
-               (m), (uintptr_t)(p1), (uintptr_t)(p2), (uintptr_t)(p3),  \
-               (uintptr_t)(p4), (uintptr_t)(p5));                       \
-  }
-#define APPL_TRACE_WARNING6(m, p1, p2, p3, p4, p5, p6)                  \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_WARNING)                     \
-      LogMsg_6(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_WARNING,                                  \
-               (m), (uintptr_t)(p1), (uintptr_t)(p2), (uintptr_t)(p3),  \
-               (uintptr_t)(p4), (uintptr_t)(p5), (uintptr_t)(p6));      \
-  }
-
-#define APPL_TRACE_API0(m)                                              \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_API)                         \
-      LogMsg_0(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_API,                                      \
-               (m));                                                    \
-  }
-#define APPL_TRACE_API1(m, p1)                                          \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_API)                         \
-      LogMsg_1(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_API,                                      \
-               (m), (uintptr_t)(p1));                                   \
-  }
-#define APPL_TRACE_API2(m, p1, p2)                                      \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_API)                         \
-      LogMsg_2(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_API,                                      \
-               (m), (uintptr_t)(p1), (uintptr_t)(p2));                  \
-  }
-#define APPL_TRACE_API3(m, p1, p2, p3)                                  \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_API)                         \
-      LogMsg_3(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_API,                                      \
-               (m), (uintptr_t)(p1), (uintptr_t)(p2), (uintptr_t)(p3)); \
-  }
-#define APPL_TRACE_API4(m, p1, p2, p3, p4)                              \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_API)                         \
-      LogMsg_4(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_API,                                      \
-               (m), (uintptr_t)(p1), (uintptr_t)(p2), (uintptr_t)(p3),  \
-               (uintptr_t)(p4));                                        \
-  }
-#define APPL_TRACE_API5(m, p1, p2, p3, p4, p5)                          \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_API)                         \
-      LogMsg_5(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_API,                                      \
-               (m), (uintptr_t)(p1), (uintptr_t)(p2), (uintptr_t)(p3),  \
-               (uintptr_t)(p4), (uintptr_t)(p5));                       \
-  }
-#define APPL_TRACE_API6(m, p1, p2, p3, p4, p5, p6)                      \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_API)                         \
-      LogMsg_6(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_API,                                      \
-               (m), (uintptr_t)(p1), (uintptr_t)(p2), (uintptr_t)(p3),  \
-               (uintptr_t)(p4), (uintptr_t)(p5), (uintptr_t)(p6));      \
-  }
-
-#define APPL_TRACE_EVENT0(m)                                            \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_EVENT)                       \
-      LogMsg_0(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_EVENT,                                    \
-               (m));                                                    \
-  }
-#define APPL_TRACE_EVENT1(m, p1)                                        \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_EVENT)                       \
-      LogMsg_1(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_EVENT,                                    \
-               (m), (uintptr_t)(p1));                                   \
-  }
-#define APPL_TRACE_EVENT2(m, p1, p2)                                    \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_EVENT)                       \
-      LogMsg_2(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_EVENT,                                    \
-               (m), (uintptr_t)(p1), (uintptr_t)(p2));                  \
-  }
-#define APPL_TRACE_EVENT3(m, p1, p2, p3)                                \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_EVENT)                       \
-      LogMsg_3(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_EVENT,                                    \
-               (m), (uintptr_t)(p1), (uintptr_t)(p2), (uintptr_t)(p3)); \
-  }
-#define APPL_TRACE_EVENT4(m, p1, p2, p3, p4)                            \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_EVENT)                       \
-      LogMsg_4(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_EVENT,                                    \
-               (m), (uintptr_t)(p1), (uintptr_t)(p2), (uintptr_t)(p3),  \
-               (uintptr_t)(p4));                                        \
-  }
-#define APPL_TRACE_EVENT5(m, p1, p2, p3, p4, p5)                        \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_EVENT)                       \
-      LogMsg_5(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_EVENT,                                    \
-               (m), (uintptr_t)(p1), (uintptr_t)(p2), (uintptr_t)(p3),  \
-               (uintptr_t)(p4), (uintptr_t)(p5));                       \
-  }
-#define APPL_TRACE_EVENT6(m, p1, p2, p3, p4, p5, p6)                    \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_EVENT)                       \
-      LogMsg_6(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_EVENT,                                    \
-               (m), (uintptr_t)(p1), (uintptr_t)(p2), (uintptr_t)(p3),  \
-               (uintptr_t)(p4), (uintptr_t)(p5), (uintptr_t)(p6));      \
-  }
-
-#define APPL_TRACE_DEBUG0(m)                                            \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_DEBUG)                       \
-      LogMsg_0(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_DEBUG,                                    \
-               (m));                                                    \
-  }
-#define APPL_TRACE_DEBUG1(m, p1)                                        \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_DEBUG)                       \
-      LogMsg_1(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_DEBUG,                                    \
-               (m), (uintptr_t)(p1));                                   \
-  }
-#define APPL_TRACE_DEBUG2(m, p1, p2)                                    \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_DEBUG)                       \
-      LogMsg_2(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_DEBUG,                                    \
-               (m), (uintptr_t)(p1), (uintptr_t)(p2));                  \
-  }
-#define APPL_TRACE_DEBUG3(m, p1, p2, p3)                                \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_DEBUG)                       \
-      LogMsg_3(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_DEBUG,                                    \
-               (m), (uintptr_t)(p1), (uintptr_t)(p2), (uintptr_t)(p3)); \
-  }
-#define APPL_TRACE_DEBUG4(m, p1, p2, p3, p4)                            \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_DEBUG)                       \
-      LogMsg_4(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_DEBUG,                                    \
-               (m), (uintptr_t)(p1), (uintptr_t)(p2), (uintptr_t)(p3),  \
-               (uintptr_t)(p4));                                        \
-  }
-#define APPL_TRACE_DEBUG5(m, p1, p2, p3, p4, p5)                        \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_DEBUG)                       \
-      LogMsg_5(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_DEBUG,                                    \
-               (m), (uintptr_t)(p1), (uintptr_t)(p2), (uintptr_t)(p3),  \
-               (uintptr_t)(p4), (uintptr_t)(p5));                       \
-  }
-#define APPL_TRACE_DEBUG6(m, p1, p2, p3, p4, p5, p6)                    \
-  {                                                                     \
-    if (appl_trace_level >= BT_TRACE_LEVEL_DEBUG)                       \
-      LogMsg_6(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | \
-                   TRACE_TYPE_DEBUG,                                    \
-               (m), (uintptr_t)(p1), (uintptr_t)(p2), (uintptr_t)(p3),  \
-               (uintptr_t)(p4), (uintptr_t)(p5), (uintptr_t)(p6));      \
-  }
-
-#endif /* BT_TRACE_H */
diff --git a/src/include/bt_types.h b/src/include/bt_types.h
index b147756..93bcb69 100644
--- a/src/include/bt_types.h
+++ b/src/include/bt_types.h
@@ -22,46 +22,14 @@
 #include "data_types.h"
 #include "nfc_types.h"
 
-#define SCR_PROTO_TRACE_NCI 0x00004000
-#define SCR_PROTO_TRACE_ALL 0x001fffff
-#define SCR_PROTO_TRACE_HCI_SUMMARY 0x00000001
-
-#define TRACE_LAYER_NONE 0x00000000
-#define TRACE_LAYER_HCI 0x00070000
-#define TRACE_LAYER_GKI 0x001a0000
-#define TRACE_LAYER_NFC 0x00270000
-/*it's overwritten in nfc_types.h*/
-#define TRACE_LAYER_NCI 0x00280000
-#define TRACE_LAYER_LLCP 0x00290000
-#define TRACE_LAYER_NDEF 0x002a0000
-#define TRACE_LAYER_RW 0x002b0000
-#define TRACE_LAYER_CE 0x002c0000
-#define TRACE_LAYER_P2P 0x002d0000
-#define TRACE_LAYER_NFA 0x00300000
-/*it's overwritten in nfc_types.h*/
-#define TRACE_LAYER_HAL 0x00310000
-#define TRACE_LAYER_MAX_NUM 0x0032
-
 /* NCI Command, Notification or Data*/
 #define BT_EVT_TO_NFC_NCI 0x4000
-#define BT_EVT_TO_NFC_NCI_VS 0x4200 /* Vendor specific message */
 /* messages between NFC and NCI task */
 #define BT_EVT_TO_NFC_MSGS 0x4300
 
 /* start timer */
 #define BT_EVT_TO_START_TIMER 0x3c00
 
-/* stop timer */
-#define BT_EVT_TO_STOP_TIMER 0x3d00
-
 /* start quick timer */
 #define BT_EVT_TO_START_QUICK_TIMER 0x3e00
-
-#define TRACE_ORG_APPL 0x00000500
-
-#define DEV_CLASS_LEN 3
-typedef uint8_t DEV_CLASS[DEV_CLASS_LEN]; /* Device class */
-
-#define BD_ADDR_LEN 6                 /* Device address length */
-typedef uint8_t BD_ADDR[BD_ADDR_LEN]; /* Device address */
 #endif
diff --git a/src/include/buildcfg.h b/src/include/buildcfg.h
index 932db88..53f7aa2 100644
--- a/src/include/buildcfg.h
+++ b/src/include/buildcfg.h
@@ -26,15 +26,6 @@
 #define NFC_CONTORLLER_ID (1)
 #endif
 
-#define BTE_APPL_MAX_USERIAL_DEV_NAME (256)
-
-#ifdef BT_TRACE_VERBOSE
-#undef BT_TRACE_VERBOSE
-#endif
-#define BT_TRACE_VERBOSE TRUE
-
-#define TRACE_TASK_INCLUDED TRUE
-
 #define GKI_BUF1_MAX 0
 // 2 is in use
 #define GKI_BUF3_MAX 30
@@ -51,38 +42,11 @@
 #define GKI_BUF0_SIZE 268
 #define GKI_BUF0_MAX 40
 
-#define NCI_BUF_POOL_ID GKI_POOL_ID_0
 #define GKI_NUM_FIXED_BUF_POOLS 4
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern uint8_t* scru_dump_hex(uint8_t* p, char* p_title, uint32_t len,
-                              uint32_t trace_layer, uint32_t trace_type);
-extern void ScrLog(uint32_t trace_set_mask, const char* fmt_str, ...);
 extern void DispNci(uint8_t* p, uint16_t len, bool is_recv);
 
-extern void downloadFirmwarePatchFile(uint32_t brcm_hw_id);
-
 void ProtoDispAdapterDisplayNciPacket(uint8_t* nciPacket, uint16_t nciPacketLen,
                                       bool is_recv);
 #define DISP_NCI ProtoDispAdapterDisplayNciPacket
-#define LOGMSG_TAG_NAME "BrcmNfcNfa"
-
-#ifndef _TIMEB
-#define _TIMEB
-struct _timeb {
-  long time;
-  short millitm;
-  short timezone;
-  short dstflag;
-};
-void _ftime(struct _timeb*);
-
-#endif
-
-#ifdef __cplusplus
-};
-#endif
 #endif
diff --git a/src/include/config.h b/src/include/config.h
deleted file mode 100644
index 23c80fb..0000000
--- a/src/include/config.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 1999-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-#ifndef __CONFIG_H
-#define __CONFIG_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int GetStrValue(const char* name, char* p_value, unsigned long len);
-int GetNumValue(const char* name, void* p_value, unsigned long len);
-
-#ifdef __cplusplus
-};
-#endif
-
-#define NAME_POLLING_TECH_MASK "POLLING_TECH_MASK"
-#define NAME_REGISTER_VIRTUAL_SE "REGISTER_VIRTUAL_SE"
-#define NAME_APPL_TRACE_LEVEL "APPL_TRACE_LEVEL"
-#define NAME_USE_RAW_NCI_TRACE "USE_RAW_NCI_TRACE"
-#define NAME_LOGCAT_FILTER "LOGCAT_FILTER"
-#define NAME_LPTD_CFG "LPTD_CFG"
-#define NAME_SCREEN_OFF_POWER_STATE "SCREEN_OFF_POWER_STATE"
-#define NAME_PREINIT_DSP_CFG "PREINIT_DSP_CFG"
-#define NAME_DTA_START_CFG "DTA_START_CFG"
-#define NAME_TRANSPORT_DRIVER "TRANSPORT_DRIVER"
-#define NAME_POWER_CONTROL_DRIVER "POWER_CONTROL_DRIVER"
-#define NAME_PROTOCOL_TRACE_LEVEL "PROTOCOL_TRACE_LEVEL"
-#define NAME_UART_PORT "UART_PORT"
-#define NAME_UART_BAUD "UART_BAUD"
-#define NAME_UART_PARITY "UART_PARITY"
-#define NAME_UART_STOPBITS "UART_STOPBITS"
-#define NAME_UART_DATABITS "UART_DATABITS"
-#define NAME_CLIENT_ADDRESS "BCMI2CNFC_ADDRESS"
-#define NAME_NFA_DM_START_UP_CFG "NFA_DM_START_UP_CFG"
-#define NAME_NFA_DM_CFG "NFA_DM_CFG"
-#define NAME_NFA_DM_LP_CFG "NFA_DM_LP_CFG"
-#define NAME_LOW_SPEED_TRANSPORT "LOW_SPEED_TRANSPORT"
-#define NAME_NFC_WAKE_DELAY "NFC_WAKE_DELAY"
-#define NAME_NFC_WRITE_DELAY "NFC_WRITE_DELAY"
-#define NAME_PERF_MEASURE_FREQ "REPORT_PERFORMANCE_MEASURE"
-#define NAME_READ_MULTI_PACKETS "READ_MULTIPLE_PACKETS"
-#define NAME_POWER_ON_DELAY "POWER_ON_DELAY"
-#define NAME_PRE_POWER_OFF_DELAY "PRE_POWER_OFF_DELAY"
-#define NAME_POST_POWER_OFF_DELAY "POST_POWER_OFF_DELAY"
-#define NAME_APPL_DTA_MODE "APPL_DTA_MODE"
-#define NAME_CE3_PRE_POWER_OFF_DELAY "CE3_PRE_POWER_OFF_DELAY"
-#define NAME_NFA_STORAGE "NFA_STORAGE"
-#define NAME_NFA_DM_START_UP_VSC_CFG "NFA_DM_START_UP_VSC_CFG"
-#define NAME_NFA_DTA_START_UP_VSC_CFG "NFA_DTA_START_UP_VSC_CFG"
-#define NAME_UICC_LISTEN_TECH_MASK "UICC_LISTEN_TECH_MASK"
-#define NAME_UICC_LISTEN_TECH_EX_MASK "UICC_LISTEN_TECH_EXCLUDE_MASK"
-#define NAME_SNOOZE_MODE_CFG "SNOOZE_MODE_CFG"
-#define NAME_NFA_DM_DISC_DURATION_POLL "NFA_DM_DISC_DURATION_POLL"
-#define NAME_SPD_DEBUG "SPD_DEBUG"
-#define NAME_SPD_MAXRETRYCOUNT "SPD_MAX_RETRY_COUNT"
-#define NAME_SPI_NEGOTIATION "SPI_NEGOTIATION"
-#define NAME_AID_FOR_EMPTY_SELECT "AID_FOR_EMPTY_SELECT"
-#define NAME_PRESERVE_STORAGE "PRESERVE_STORAGE"
-#define NAME_NFA_MAX_EE_SUPPORTED "NFA_MAX_EE_SUPPORTED"
-#define NAME_NFCC_ENABLE_TIMEOUT "NFCC_ENABLE_TIMEOUT"
-#define NAME_NFA_DM_PRE_DISCOVERY_CFG "NFA_DM_PRE_DISCOVERY_CFG"
-#define NAME_POLL_FREQUENCY "POLL_FREQUENCY"
-#define NAME_XTAL_HARDWARE_ID "XTAL_HARDWARE_ID"
-#define NAME_XTAL_FREQUENCY "XTAL_FREQUENCY"
-#define NAME_XTAL_FREQ_INDEX "XTAL_FREQ_INDEX"
-#define NAME_XTAL_PARAMS_CFG "XTAL_PARAMS_CFG"
-#define NAME_EXCLUSIVE_SE_ACCESS "EXCLUSIVE_SE_ACCESS"
-#define NAME_DBG_NO_UICC_IDLE_TIMEOUT_TOGGLING \
-  "DBG_NO_UICC_IDLE_TIMEOUT_TOGGLING"
-#define NAME_PRESENCE_CHECK_ALGORITHM "PRESENCE_CHECK_ALGORITHM"
-#define NAME_ALLOW_NO_NVM "ALLOW_NO_NVM"
-#define NAME_DEVICE_HOST_WHITE_LIST "DEVICE_HOST_WHITE_LIST"
-#define NAME_POWER_OFF_MODE "POWER_OFF_MODE"
-#define NAME_GLOBAL_RESET "DO_GLOBAL_RESET"
-#define NAME_NCI_HAL_MODULE "NCI_HAL_MODULE"
-#define NAME_NFA_POLL_BAIL_OUT_MODE "NFA_POLL_BAIL_OUT_MODE"
-#define NAME_NFA_PROPRIETARY_CFG "NFA_PROPRIETARY_CFG"
-#define NAME_NFA_AID_BLOCK_ROUTE "NFA_AID_BLOCK_ROUTE"
-
-#define LPTD_PARAM_LEN (40)
-
-// default configuration
-#define default_transport "/dev/bcm2079x"
-#define default_storage_location "/data/nfc"
-
-struct tUART_CONFIG {
-  int m_iBaudrate;  // 115200
-  int m_iDatabits;  // 8
-  int m_iParity;    // 0 - none, 1 = odd, 2 = even
-  int m_iStopbits;
-};
-
-extern struct tUART_CONFIG uartConfig;
-#define MAX_CHIPID_LEN (16)
-void readOptionalConfig(const char* option);
-
-/* Snooze mode configuration structure */
-typedef struct {
-  unsigned char snooze_mode;         /* Snooze Mode */
-  unsigned char idle_threshold_dh;   /* Idle Threshold Host */
-  unsigned char idle_threshold_nfcc; /* Idle Threshold NFCC   */
-  unsigned char
-      nfc_wake_active_mode; /* NFC_LP_ACTIVE_LOW or NFC_LP_ACTIVE_HIGH */
-  unsigned char
-      dh_wake_active_mode; /* NFC_LP_ACTIVE_LOW or NFC_LP_ACTIVE_HIGH */
-} tSNOOZE_MODE_CONFIG;
-#endif
diff --git a/src/hal/include/gki_hal_target.h b/src/include/gki_hal_target.h
similarity index 71%
rename from src/hal/include/gki_hal_target.h
rename to src/include/gki_hal_target.h
index 4b065c7..9ae1bfe 100644
--- a/src/hal/include/gki_hal_target.h
+++ b/src/include/gki_hal_target.h
@@ -215,51 +215,4 @@
 #define GKI_SEND_MSG_FROM_ISR FALSE
 #endif
 
-#define GKI_TRACE_0(m)
-#define GKI_TRACE_1(m, p1)
-#define GKI_TRACE_2(m, p1, p2)
-#define GKI_TRACE_3(m, p1, p2, p3)
-#define GKI_TRACE_4(m, p1, p2, p3, p4)
-#define GKI_TRACE_5(m, p1, p2, p3, p4, p5)
-#define GKI_TRACE_6(m, p1, p2, p3, p4, p5, p6)
-
-#define GKI_TRACE_ERROR_0(m)                                                   \
-  LogMsg(                                                                      \
-      TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR, \
-      m)
-#define GKI_TRACE_ERROR_1(m, p1)                                               \
-  LogMsg(                                                                      \
-      TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR, \
-      m, p1)
-#define GKI_TRACE_ERROR_2(m, p1, p2)                                           \
-  LogMsg(                                                                      \
-      TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR, \
-      m, p1, p2)
-#define GKI_TRACE_ERROR_3(m, p1, p2, p3)                                       \
-  LogMsg(                                                                      \
-      TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR, \
-      m, p1, p2, p3)
-#define GKI_TRACE_ERROR_4(m, p1, p2, p3, p4)                                   \
-  LogMsg(                                                                      \
-      TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR, \
-      m, p1, p2, p3, p4)
-#define GKI_TRACE_ERROR_5(m, p1, p2, p3, p4, p5)                               \
-  LogMsg(                                                                      \
-      TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR, \
-      m, p1, p2, p3, p4, p5)
-#define GKI_TRACE_ERROR_6(m, p1, p2, p3, p4, p5, p6)                           \
-  LogMsg(                                                                      \
-      TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR, \
-      m, p1, p2, p3, p4, p5, p6)
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern void LogMsg(uint32_t trace_set_mask, const char* fmt_str, ...);
-
-#ifdef __cplusplus
-}
-#endif
-
 #endif /* GKI_TARGET_H */
diff --git a/src/include/gki_target.h b/src/include/gki_target.h
index 6413124..dfca10b 100644
--- a/src/include/gki_target.h
+++ b/src/include/gki_target.h
@@ -24,14 +24,6 @@
 
 #include "data_types.h"
 
-/* Operating System Selection */
-#ifndef BTE_SIM_APP
-#define _GKI_ARM
-#define _GKI_STANDALONE
-#else
-#define _BT_WIN32
-#endif
-
 /******************************************************************************
 **
 ** Task configuration
@@ -176,7 +168,7 @@
 
 /* The size of the buffers in pool 3. */
 #ifndef GKI_BUF3_SIZE
-#define GKI_BUF3_SIZE 2500
+#define GKI_BUF3_SIZE (0xFFB0)
 #endif
 
 /* The number of buffers in buffer pool 3. */
@@ -361,51 +353,4 @@
 #define GKI_BUF8_MAX 30
 #endif
 
-#define GKI_TRACE_0(m)
-#define GKI_TRACE_1(m, p1)
-#define GKI_TRACE_2(m, p1, p2)
-#define GKI_TRACE_3(m, p1, p2, p3)
-#define GKI_TRACE_4(m, p1, p2, p3, p4)
-#define GKI_TRACE_5(m, p1, p2, p3, p4, p5)
-#define GKI_TRACE_6(m, p1, p2, p3, p4, p5, p6)
-
-#define GKI_TRACE_ERROR_0(m)                                                   \
-  LogMsg(                                                                      \
-      TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR, \
-      m)
-#define GKI_TRACE_ERROR_1(m, p1)                                               \
-  LogMsg(                                                                      \
-      TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR, \
-      m, p1)
-#define GKI_TRACE_ERROR_2(m, p1, p2)                                           \
-  LogMsg(                                                                      \
-      TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR, \
-      m, p1, p2)
-#define GKI_TRACE_ERROR_3(m, p1, p2, p3)                                       \
-  LogMsg(                                                                      \
-      TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR, \
-      m, p1, p2, p3)
-#define GKI_TRACE_ERROR_4(m, p1, p2, p3, p4)                                   \
-  LogMsg(                                                                      \
-      TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR, \
-      m, p1, p2, p3, p4)
-#define GKI_TRACE_ERROR_5(m, p1, p2, p3, p4, p5)                               \
-  LogMsg(                                                                      \
-      TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR, \
-      m, p1, p2, p3, p4, p5)
-#define GKI_TRACE_ERROR_6(m, p1, p2, p3, p4, p5, p6)                           \
-  LogMsg(                                                                      \
-      TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR, \
-      m, p1, p2, p3, p4, p5, p6)
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern void LogMsg(uint32_t trace_set_mask, const char* fmt_str, ...);
-
-#ifdef __cplusplus
-}
-#endif
-
 #endif /* GKI_TARGET_H */
diff --git a/src/hal/include/nci_defs.h b/src/include/nci_defs.h
similarity index 77%
rename from src/hal/include/nci_defs.h
rename to src/include/nci_defs.h
index 1428e50..3cbe41b 100644
--- a/src/hal/include/nci_defs.h
+++ b/src/include/nci_defs.h
@@ -27,25 +27,17 @@
 
 #include <stdint.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define NCI_BRCM_CO_ID 0x2E
-
 /* Define the message header size for all NCI Commands and Notifications.
 */
 #define NCI_MSG_HDR_SIZE 3  /* per NCI spec */
 #define NCI_DATA_HDR_SIZE 3 /* per NCI spec */
 #define NCI_MAX_PAYLOAD_SIZE 0xFE
-#define NCI_MAX_CTRL_SIZE 0xFF /* max control message size */
 #define NCI_CTRL_INIT_SIZE 32  /* initial NFCC control payload size */
 #define NCI_MAX_VSC_SIZE 0xFF
 #define APPL_DTA_MODE FALSE
 /* NCI header (3) + callback function pointer(8; use 8 to be safe) + HCIT (1
  * byte) */
 #define NCI_VSC_MSG_HDR_SIZE 12
-#define NCI_TL_SIZE 2
 
 /* Max frame size (256) - Prologue (1) - Epilogue (2) in ISO-DEP, CID and NAD
  * are not used*/
@@ -66,12 +58,6 @@
 #define NCI_MT_CMD 1 /* (NCI_MT_CMD << NCI_MT_SHIFT) = 0x20 */
 #define NCI_MT_RSP 2 /* (NCI_MT_RSP << NCI_MT_SHIFT) = 0x40 */
 #define NCI_MT_NTF 3 /* (NCI_MT_NTF << NCI_MT_SHIFT) = 0x60 */
-#define NCI_MT_CFG 4 /* (NCI_MT_CFG << NCI_MT_SHIFT) = 0x80 */
-
-#define NCI_MTS_CMD 0x20
-#define NCI_MTS_RSP 0x40
-#define NCI_MTS_NTF 0x60
-#define NCI_MTS_CFG 0x80
 
 #define NCI_NTF_BIT 0x80 /* the tNFC_VS_EVT is a notification */
 #define NCI_RSP_BIT 0x40 /* the tNFC_VS_EVT is a response     */
@@ -79,18 +65,13 @@
 /* for internal use only; not from specification */
 /* the following 2 flags are used in layer_specific for fragmentation/reassembly
  * of data packets */
-#define NCI_LS_DATA 0x00
-#define NCI_LS_DATA_PBF 0x01
 
 /* PBF: Packet Boundary Flag (byte 0) */
 #define NCI_PBF_MASK 0x10
 #define NCI_PBF_SHIFT 4
-#define NCI_PBF_NO_OR_LAST 0x00 /* not fragmented or last fragment */
-#define NCI_PBF_ST_CONT 0x10    /* start or continuing fragment */
 
 /* GID: Group Identifier (byte 0) */
 #define NCI_GID_MASK 0x0F
-#define NCI_GID_SHIFT 0
 #define NCI_GID_CORE 0x00      /* 0000b NCI Core group */
 #define NCI_GID_RF_MANAGE 0x01 /* 0001b RF Management group */
 #define NCI_GID_EE_MANAGE 0x02 /* 0010b NFCEE Management group */
@@ -115,26 +96,18 @@
 #define NCI_MSG_BLD_HDR0(p, mt, gid) \
   *(p)++ = (uint8_t)(((mt) << NCI_MT_SHIFT) | (gid));
 
-#define NCI_MSG_PBLD_HDR0(p, mt, pbf, gid) \
-  *(p)++ = (uint8_t)(((mt) << NCI_MT_SHIFT) | ((pbf) << NCI_PBF_SHIFT) | (gid));
-
 /* builds byte1 of NCI Command and Notification packet */
 #define NCI_MSG_BLD_HDR1(p, oid) *(p)++ = (uint8_t)(((oid) << NCI_OID_SHIFT));
 
 /* parse byte0 of NCI packet */
-#define NCI_MSG_PRS_HDR0(p, mt, pbf, gid)     \
-  mt = (*(p)&NCI_MT_MASK) >> NCI_MT_SHIFT;    \
-  pbf = (*(p)&NCI_PBF_MASK) >> NCI_PBF_SHIFT; \
-  gid = *(p)++ & NCI_GID_MASK;
-
-/* parse MT and PBF bits of NCI packet */
-#define NCI_MSG_PRS_MT_PBF(p, mt, pbf)     \
-  mt = (*(p)&NCI_MT_MASK) >> NCI_MT_SHIFT; \
-  pbf = (*(p)&NCI_PBF_MASK) >> NCI_PBF_SHIFT;
+#define NCI_MSG_PRS_HDR0(p, mt, pbf, gid)       \
+  mt = (*(p)&NCI_MT_MASK) >> NCI_MT_SHIFT;      \
+  (pbf) = (*(p)&NCI_PBF_MASK) >> NCI_PBF_SHIFT; \
+  (gid) = *(p)++ & NCI_GID_MASK;
 
 /* parse byte1 of NCI Cmd/Ntf */
 #define NCI_MSG_PRS_HDR1(p, oid) \
-  oid = (*(p)&NCI_OID_MASK);     \
+  (oid) = (*(p)&NCI_OID_MASK);   \
   (p)++;
 
 /* NCI Data Format:
@@ -145,12 +118,6 @@
  * is predefined  */
 #define NCI_CID_MASK 0x0F
 
-/* builds 3-byte message header of NCI Data packet */
-#define NCI_DATA_BLD_HDR(p, cid, len) \
-  *(p)++ = (uint8_t)(cid);            \
-  *(p)++ = 0;                         \
-  *(p)++ = (uint8_t)(len);
-
 #define NCI_DATA_PBLD_HDR(p, pbf, cid, len)             \
   *(p)++ = (uint8_t)(((pbf) << NCI_PBF_SHIFT) | (cid)); \
   *(p)++ = 0;                                           \
@@ -159,14 +126,13 @@
 #define NCI_DATA_PRS_HDR(p, pbf, cid, len)      \
   (pbf) = (*(p)&NCI_PBF_MASK) >> NCI_PBF_SHIFT; \
   (cid) = (*(p)&NCI_CID_MASK);                  \
-  p++;                                          \
-  p++;                                          \
+  (p)++;                                        \
+  (p)++;                                        \
   (len) = *(p)++;
 
 /* Logical target ID 0x01-0xFE */
 
 /* CORE_RESET_NTF reset trigger type*/
-#define NCI2_0_RESET_TRIGGER_TYPE_ERROR 0x00
 #define NCI2_0_RESET_TRIGGER_TYPE_POWERED_ON 0x01
 #define NCI2_0_RESET_TRIGGER_TYPE_CORE_RESET_CMD_RECEIVED 0x02
 
@@ -183,6 +149,7 @@
 #define NCI_STATUS_UNKNOWN_OID 0x08
 #define NCI_STATUS_INVALID_PARAM 0x09
 #define NCI_STATUS_MSG_SIZE_TOO_BIG 0x0A
+#define NCI_STATUS_NOT_SUPPORTED 0x0B
 /* discovery */
 #define NCI_STATUS_ALREADY_STARTED 0xA0
 #define NCI_STATUS_ACTIVATION_FAILED 0xA1
@@ -197,8 +164,6 @@
 #define NCI_STATUS_EE_PROTOCOL_ERR 0xC2
 #define NCI_STATUS_EE_TIMEOUT 0xC3
 
-typedef uint8_t tNCI_STATUS;
-
 /* RF Technologies */
 #define NCI_RF_TECHNOLOGY_A 0x00
 #define NCI_RF_TECHNOLOGY_B 0x01
@@ -250,7 +215,8 @@
  **********************************************/
 #define NCI_MSG_NFCEE_DISCOVER 0
 #define NCI_MSG_NFCEE_MODE_SET 1
-
+#define NCI_MSG_NFCEE_STATUS 2
+#define NCI_MSG_NFCEE_POWER_LINK_CTRL 3
 /**********************************************
  * NCI Proprietary  Group       - F
  **********************************************/
@@ -259,73 +225,41 @@
  * NCI Core Group Params
  **********************************************/
 #define NCI_CORE_PARAM_SIZE_RESET 0x01
-#define NCI_CORE_PARAM_SIZE_RESET_RSP 0x03
-#define NCI_CORE_PARAM_SIZE_RESET_NTF 0x02
+
+/**********************************************
+ * NCI Feature Bit
+ **********************************************/
+#define NCI_FEAT_HCI_NETWORK 0x00000008
 
 #define NCI_CORE_PARAM_SIZE_INIT(X) (((X) == NCI_VERSION_2_0) ? (0x02) : (0x00))
 #define NCI2_0_CORE_INIT_CMD_BYTE_0 0x00
 #define NCI2_0_CORE_INIT_CMD_BYTE_1 0x00
-#define NCI_CORE_PARAM_SIZE_INIT_RSP 0x11
-#define NCI_CORE_INIT_RSP_OFFSET_NUM_INTF 0x05
 
 /* Status (1 octet) and number of params */
-#define NCI_CORE_PARAM_SIZE_SET_CONFIG_RSP 0x02
 #define NCI_CORE_PARAM_SIZE_SET_POWER_SUB_STATE 0x01
 
-/* octet 0 */
-#define NCI_FEAT_DISCOVERY_FREG 0x00000001
-#define NCI_FEAT_DISCOVERY_CFGM 0x00000006
-/* octet 1 */
-#define NCI_FEAT_TECHNOLOGY_ROUTING 0x00000200
-#define NCI_FEAT_PROTOCOL_ROUTING 0x00000400
-#define NCI_FEAT_AID_ROUTING 0x00000800
-/* octet 2 */
-#define NCI_FEAT_BATTERY_OFF_MD 0x00010000
-#define NCI_FEAT_SWITCH_OFF_MD 0x00020000
-
-/* supported Interfaces */
-#define NCI_SUP_INTF_FRAME 0x0001
-#define NCI_SUP_INTF_ISO_DEP 0x0002
-#define NCI_SUP_INTF_NFC_DEP 0x0004
-
 #define NCI_CORE_PARAM_SIZE_CON_CREATE 0x02 /* handle, num_tlv, (tlv) */
 /* status, size, credits, conn_id */
-#define NCI_CORE_PARAM_SIZE_CON_CREATE_RSP 0x04
-#define NCI_CON_CREATE_TAG_EE_INTF 0x00 /* old */
 #define NCI_CON_CREATE_TAG_RF_DISC_ID 0x00
 #define NCI_CON_CREATE_TAG_NFCEE_VAL 0x01
 
 #define NCI_CORE_PARAM_SIZE_CON_CLOSE 0x01     /* Conn ID (1 octet) */
-#define NCI_CORE_PARAM_SIZE_CON_CLOSE_RSP 0x01 /* Status (1 octet) */
 
-/* RF Field Status (1 octet) */
-#define NCI_CORE_PARAM_SIZE_RF_FIELD_NTF 0x01
-
-/* Keep the NCI configuration (if possible) and perform NCI initialization. */
-#define NCI_RESET_TYPE_KEEP_CFG 0x00
 /* Reset the NCI configuration, and perform NCI initialization. */
 #define NCI_RESET_TYPE_RESET_CFG 0x01
 
-/* NCI Configuration has been kept  */
-#define NCI_RESET_STATUS_KEPT_CFG 0x00
-/* NCI Configuration has been reset */
-#define NCI_RESET_STATUS_RESET_CFG 0x01
-
 /* No operating field generated by remote device  */
 #define NCI_RF_STS_NO_REMOTE 0x00
 /* Operating field generated by remote device  */
 #define NCI_RF_STS_REMOTE 0x01
 
-#define NCI_PARAM_SIZE_DISCOVER_NFCEE 0x01 /* Discovery Action (1 octet) */
-/* Status (1 octet)Number of NFCEEs (1 octet) */
-#define NCI_PARAM_SIZE_DISCOVER_NFCEE_RSP 0x02
+/* Discovery Action (1 octet) */
+#define NCI_PARAM_SIZE_DISCOVER_NFCEE(X) \
+  (((X) == NCI_VERSION_2_0) ? 0X00 : 0X01)
 
 #define NCI_DISCOVER_ACTION_DISABLE 0
 #define NCI_DISCOVER_ACTION_ENABLE 1
 
-#define NCI_EE_DISCOVER_REQ_TYPE_LISTEN 0x01
-#define NCI_EE_DISCOVER_REQ_TYPE_POLL 0x02
-
 #define NCI_RF_PARAM_ID_TECH_N_MODE 0x00 /* RF Technology and Mode   */
 #define NCI_RF_PARAM_ID_TX_BIT_RATE 0x01 /* Transmit Bit Rate        */
 #define NCI_RF_PARAM_ID_RX_BIT_RATE 0x02 /* Receive Bit Rate         */
@@ -338,15 +272,21 @@
 #define NCI_NFCEE_INTERFACE_T3T 0x02
 #define NCI_NFCEE_INTERFACE_TRANSPARENT 0x03
 #define NCI_NFCEE_INTERFACE_PROPRIETARY 0x80
+/****************************************************
+ * NCI NFCEE INterface specific status Codes
+ ****************************************************/
+#define NCI_NFCEE_STS_UNRECOVERABLE_ERROR 0x00
+#define NCI_NFCEE_STS_INTF_ACTIVATION_FAILED 0xC0
+#define NCI_NFCEE_STS_TRANSMISSION_ERROR 0xC1
+#define NCI_NFCEE_STS_PROTOCOL_ERROR 0xC2
+#define NCI_NFCEE_STS_TIMEOUT_ERROR 0xC3
 
 #define NCI_NFCEE_STS_CONN_ACTIVE 0x00
 #define NCI_NFCEE_STS_CONN_INACTIVE 0x01
 #define NCI_NFCEE_STS_REMOVED 0x02
-#define NCI_NUM_NFCEE_STS 3
 
 /* Logical Target ID (1 octet)NFCEE Mode (1 octet) */
 #define NCI_CORE_PARAM_SIZE_NFCEE_MODE_SET 0x02
-#define NCI_CORE_PARAM_SIZE_NFCEE_MODE_SET_RSP 0x01 /* Status (1 octet) */
 
 /* Deactivate the connected NFCEE */
 #define NCI_NFCEE_MD_DEACTIVATE 0x00
@@ -372,11 +312,15 @@
 /* DH Request Failed due to error */
 #define NCI_DEACTIVATE_REASON_DH_REQ_FAILED 4
 
+/* The NFCEE status in NFCEE Status Notification */
+typedef uint8_t tNCI_EE_NTF_STATUS;
+
+/* NFCEE Power and Link Configuration */
+typedef uint8_t tNCI_NFCEE_PL_CONFIG;
+
 /**********************************************
 * NCI Interface Mode
 **********************************************/
-#define NCI_INTERFACE_MODE_POLL 1
-#define NCI_INTERFACE_MODE_LISTEN 2
 #define NCI_INTERFACE_MODE_POLL_N_LISTEN 3
 
 /**********************************************
@@ -394,15 +338,9 @@
 /**********************************************
  * NCI RF Management / DISCOVERY Group Params
  **********************************************/
-#define NCI_DISCOVER_PARAM_SIZE_RSP 0x01
 
 #define NCI_DISCOVER_PARAM_SIZE_SELECT 0x03     /* ID, protocol, interface */
-#define NCI_DISCOVER_PARAM_SIZE_SELECT_RSP 0x01 /* Status (1 octet) */
-#define NCI_DISCOVER_PARAM_SIZE_STOP 0x00       /*  */
-#define NCI_DISCOVER_PARAM_SIZE_STOP_RSP 0x01   /* Status (1 octet) */
 #define NCI_DISCOVER_PARAM_SIZE_DEACT 0x01      /* type */
-#define NCI_DISCOVER_PARAM_SIZE_DEACT_RSP 0x01  /* Status (1 octet) */
-#define NCI_DISCOVER_PARAM_SIZE_DEACT_NTF 0x01  /* type */
 
 /**********************************************
  * Supported Protocols
@@ -432,7 +370,6 @@
 #define NCI_DISCOVERY_TYPE_LISTEN_ACTIVE 0x83
 #define NCI_DISCOVERY_TYPE_LISTEN_F_ACTIVE 0x85
 #define NCI_DISCOVERY_TYPE_LISTEN_ISO15693 0x86
-#define NCI_DISCOVERY_TYPE_MAX NCI_DISCOVERY_TYPE_LISTEN_ISO15693
 
 typedef uint8_t tNCI_DISCOVERY_TYPE;
 
@@ -442,28 +379,32 @@
 #define NCI_EE_TRIG_APP_INIT 0x10
 
 #define NCI_EE_ACT_TAG_AID 0xC0   /* AID                 */
-#define NCI_EE_ACT_TAG_PROTO 0xC1 /* RF protocol         */
-#define NCI_EE_ACT_TAG_TECH 0xC2  /* RF technology       */
 #define NCI_EE_ACT_TAG_DATA 0xC3  /* hex data for app    */
-#define NCI_EE_ACT_TAG_DEBUG 0xC4 /* debug trace         */
 
+/* NFCEE ID (1 octet) PL config (1 octet) */
+#define NCI_CORE_PARAM_SIZE_NFCEE_PL_CTRL 0x02
+/* Status (1 octet) */
 /* Technology based routing  */
 #define NCI_ROUTE_TAG_TECH 0x00
 /* Protocol based routing  */
 #define NCI_ROUTE_TAG_PROTO 0x01
 #define NCI_ROUTE_TAG_AID 0x02 /* AID routing */
+#define NCI_ROUTE_TAG_SYSCODE 0x03 /* SystemCode routing */
 
 #define NCI_ROUTE_PWR_STATE_ON 0x01 /* The device is on */
 /* The device is switched off */
 #define NCI_ROUTE_PWR_STATE_SWITCH_OFF 0x02
 /* The device's battery is removed */
 #define NCI_ROUTE_PWR_STATE_BATT_OFF 0x04
-/* The device is in screen off Unlock mode */
-#define NCI_ROUTE_PWR_STATE_SCREEN_OFF_UNLOCK 0x08
-/* The device is in screen on lock mode */
-#define NCI_ROUTE_PWR_STATE_SCREEN_ON_LOCK 0x10
-/* The device is in screen off lock mode */
-#define NCI_ROUTE_PWR_STATE_SCREEN_OFF_LOCK 0x20
+/* The device is screen off Unlock mode */
+#define NCI_ROUTE_PWR_STATE_SCREEN_OFF_UNLOCK() \
+  ((NFC_GetNCIVersion() == NCI_VERSION_2_0) ? 0x08 : 0x80)
+/* The device is screen on lock mode */
+#define NCI_ROUTE_PWR_STATE_SCREEN_ON_LOCK() \
+  ((NFC_GetNCIVersion() == NCI_VERSION_2_0) ? 0x10 : 0x40)
+/* The device is screen off lock mode */
+#define NCI_ROUTE_PWR_STATE_SCREEN_OFF_LOCK() \
+  ((NFC_GetNCIVersion() == NCI_VERSION_2_0) ? 0x20 : 0x00)
 
 /* Hardware / Registration Identification  */
 #define NCI_NFCEE_TAG_HW_ID 0x00
@@ -546,25 +487,8 @@
 #define NCI_PARAM_ID_ATR_RSP_CONFIG 0x62
 
 #define NCI_PARAM_ID_RF_FIELD_INFO 0x80
-#define NCI_PARAM_ID_RF_NFCEE_ACTION 0x81
 #define NCI_PARAM_ID_NFC_DEP_OP 0x82
 
-/* NCI_PARAM_ID_HOST_LISTEN_MASK (byte1 for DH, byte2 for UICC) */
-/* (0x01 << (NCI_DISCOVERY_TYPE_LISTEN_A_PASSIVE & 0x0F)) */
-#define NCI_LISTEN_MASK_A 0x01
-/* (0x01 << (NCI_DISCOVERY_TYPE_LISTEN_B_PASSIVE & 0x0F)) */
-#define NCI_LISTEN_MASK_B 0x02
-/* (0x01 << (NCI_DISCOVERY_TYPE_LISTEN_F_PASSIVE & 0x0F)) */
-#define NCI_LISTEN_MASK_F 0x04
-/* (0x01 << (NCI_DISCOVERY_TYPE_LISTEN_A_ACTIVE & 0x0F))  */
-#define NCI_LISTEN_MASK_A_ACTIVE 0x08
-/* (0x01 << (NCI_DISCOVERY_TYPE_LISTEN_B_PRIME & 0x0F))   */
-#define NCI_LISTEN_MASK_B_PRIME 0x10
-/* (0x01 << (NCI_DISCOVERY_TYPE_LISTEN_F_ACTIVE & 0x0F))  */
-#define NCI_LISTEN_MASK_F_ACTIVE 0x20
-/* (0x01 << (NCI_DISCOVERY_TYPE_LISTEN_ISO15693 & 0x0F))  */
-#define NCI_LISTEN_MASK_ISO15693 0x40
-
 /* Type A Parameters */
 #define NCI_PARAM_PLATFORM_T1T 0x0C
 #define NCI_PARAM_SEL_INFO_ISODEP 0x20
@@ -576,8 +500,6 @@
 
 #define NCI_PARAM_LEN_CON_DISCOVERY_PARAM 1
 
-#define NCI_PARAM_LEN_PA_FSDI 1
-
 #define NCI_PARAM_LEN_PF_RC 1
 
 #define NCI_PARAM_LEN_LA_BIT_FRAME_SDD 1
@@ -596,8 +518,6 @@
 #define NCI_PARAM_LEN_LF_CON_ADV_FEAT 1
 
 #define NCI_PARAM_LEN_LF_T3T_RD_ALLOWED 1  // Listen F NCI2.0 Parameter
-#define NCI_PARAM_LEN_LF_T3T_ID_MAX 16     // LF T3T indentifier Max Value 16
-#define NFA_CE_LISTEN_INFO_LF_MAX 16       // LF T3T indentifier Max Value 16
 
 #define NCI_PARAM_LEN_FWI 1
 #define NCI_PARAM_LEN_WT 1
@@ -608,11 +528,8 @@
 #define NCI_LISTEN_PROTOCOL_ISO_DEP 0x01
 #define NCI_LISTEN_PROTOCOL_NFC_DEP 0x02
 
-#define NCI_DISCOVER_PARAM_SIZE_TEST_RF 0x06
-
 /* LF_T3T_FLAGS2 listen bits all-disabled definition */
 #define NCI_LF_T3T_FLAGS2_ALL_DISABLED 0x0000
-#define NCI_LF_T3T_FLAGS2_ID1_ENABLED 0x0001
 
 /* The DH-NFCEE listen is considered as a enable NFCEE */
 #define NCI_LISTEN_DH_NFCEE_ENABLE_MASK 0x00
@@ -622,8 +539,9 @@
 #define NCI_POLLING_DH_DISABLE_MASK 0x00
 /* The DH polling is considered as a enable NFCEE */
 #define NCI_POLLING_DH_ENABLE_MASK 0x01
+/* SCBR support check with Core Init resp OCT1 byte */
+#define NCI_SCBR_MASK 0x10
 
-#define NCI_ROUTE_QUAL_MASK 0x70
 /* AID matching is allowed when the SELECT AID is longer */
 #define NCI_ROUTE_QUAL_LONG_SELECT 0x10
 /* AID matching is allowed when the SELECT AID is shorter */
@@ -631,28 +549,6 @@
 /* AID is blocked in unsupported power mode */
 #define NCI_ROUTE_QUAL_BLOCK_ROUTE 0x40
 
-typedef struct {
-  uint16_t addr;
-  uint8_t len;
-  uint8_t* data;
-} NCIP_T1T_SETMEM_CMD_t;
-
-typedef struct { uint8_t status; } NCIP_T1T_SETMEM_RSP_t;
-
-typedef struct { uint16_t addr; } NCIP_T1T_GETMEM_CMD_t;
-
-typedef struct {
-  uint8_t status;
-  uint8_t* data;
-} NCIP_T1T_GETMEM_RSP_t;
-
-typedef struct {
-  uint8_t hr0;
-  uint8_t hr1;
-} NCIP_T1T_SETHR_CMD_t;
-
-typedef struct { uint8_t status; } NCIP_T1T_SETHR_RSP_t;
-
 #ifndef NCI_GET_CMD_BUF
 #if (HCI_USE_VARIABLE_SIZE_CMD_BUF == FALSE)
 /* Allocate fixed-size buffer from HCI_CMD_POOL (default case) */
@@ -698,8 +594,6 @@
 } tNCI_RF_PB_PARAMS;
 
 #define NCI_MAX_SENSF_RES_LEN 18
-#define NCI_SENSF_RES_OFFSET_PAD0 8
-#define NCI_SENSF_RES_OFFSET_RD 16
 #define NCI_NFCID2_LEN 8
 #define NCI_T3T_PMM_LEN 8
 #define NCI_SYSTEMCODE_LEN 2
@@ -719,16 +613,6 @@
                                      Interface  */
 } tNCI_RF_LF_PARAMS;
 
-typedef struct {
-  tNCI_DISCOVERY_TYPE mode;
-  union {
-    tNCI_RF_PA_PARAMS pa;
-    tNCI_RF_PB_PARAMS pb;
-    tNCI_RF_PF_PARAMS pf;
-    tNCI_RF_LF_PARAMS lf;
-  } param; /* Discovery Type specific parameters */
-} tNCI_RF_TECH_PARAMS;
-
 #ifndef NCI_MAX_ATS_LEN
 #define NCI_MAX_ATS_LEN 60
 #endif
@@ -743,7 +627,6 @@
 #define NCI_ATS_TC_MASK 0x40
 #define NCI_ATS_TB_MASK 0x20
 #define NCI_ATS_TA_MASK 0x10
-#define NCI_ATS_FSCI_MASK 0x0F
 typedef struct {
   uint8_t ats_res_len;              /* Length of ATS RES */
   uint8_t ats_res[NCI_MAX_ATS_LEN]; /* ATS RES defined in [DIGPROT] */
@@ -785,20 +668,6 @@
 } tNCI_INTF_LB_ISO_DEP;
 
 typedef struct {
-  tNCI_INTF_TYPE type; /* Interface Type  1 Byte  See Table 67 */
-  union {
-    tNCI_INTF_LA_ISO_DEP la_iso;
-    tNCI_INTF_PA_ISO_DEP pa_iso;
-    tNCI_INTF_LB_ISO_DEP lb_iso;
-    tNCI_INTF_PB_ISO_DEP pb_iso;
-    tNCI_INTF_LA_NFC_DEP la_nfc;
-    tNCI_INTF_PA_NFC_DEP pa_nfc;
-    tNCI_INTF_LF_NFC_DEP lf_nfc;
-    tNCI_INTF_PF_NFC_DEP pf_nfc;
-  } intf_param; /* Activation Parameters   0 - n Bytes */
-} tNCI_INTF_PARAMS;
-
-typedef struct {
   uint8_t atr_res_len;                      /* Length of ATR_RES            */
   uint8_t atr_res[NCI_MAX_ATS_LEN];         /* ATR_RES (Byte 3 - Byte 17+n) */
   uint8_t max_payload_size;                 /* 64, 128, 192 or 254          */
@@ -807,8 +676,5 @@
   uint8_t waiting_time;                     /* WT -> Response Waiting Time
                                                RWT = (256 x 16/fC) x 2WT    */
 } tNCI_RF_ACM_P_PARAMS;
-#ifdef __cplusplus
-}
-#endif
 
 #endif /* NFC_NCI_DEFS_H */
diff --git a/src/include/nfc_brcm_defs.h b/src/include/nfc_brcm_defs.h
new file mode 100644
index 0000000..16a3e20
--- /dev/null
+++ b/src/include/nfc_brcm_defs.h
@@ -0,0 +1,91 @@
+/******************************************************************************
+ *
+ *  Copyright (C) 2012-2014 Broadcom Corporation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at:
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ *  This file contains the Broadcom-specific defintions that are shared
+ *  between HAL, nfc stack, adaptation layer and applications.
+ *
+ ******************************************************************************/
+
+#ifndef NFC_BRCM_DEFS_H
+#define NFC_BRCM_DEFS_H
+
+/**********************************************
+ * NCI Message Proprietary  Group       - F
+ **********************************************/
+#define NCI_MSG_GET_BUILD_INFO 0x04
+#define NCI_MSG_HCI_NETWK 0x05
+#define NCI_MSG_POWER_LEVEL 0x08
+#define NCI_MSG_UICC_READER_ACTION 0x0A
+/* reset HCI network/close all pipes (S,D) register */
+#define NCI_MSG_GET_NV_DEVICE 0x24
+#define NCI_MSG_LPTD 0x25
+#define NCI_MSG_EEPROM_RW 0x29
+#define NCI_MSG_GET_PATCH_VERSION 0x2D
+#define NCI_MSG_SECURE_PATCH_DOWNLOAD 0x2E
+
+/* Secure Patch Download definitions (patch type definitions) */
+#define NCI_SPD_TYPE_HEADER 0x00
+
+/**********************************************
+ * NCI Interface Types
+ **********************************************/
+#define NCI_INTERFACE_VS_MIFARE 0x80
+#define NCI_INTERFACE_VS_T2T_CE 0x82 /* for Card Emulation side */
+
+/**********************************************
+ * NCI Proprietary Parameter IDs
+ **********************************************/
+#define NCI_PARAM_ID_HOST_LISTEN_MASK 0xA2
+#define NCI_PARAM_ID_TAGSNIFF_CFG 0xB9
+#define NCI_PARAM_ID_ACT_ORDER 0xC5
+
+#define NFC_SNOOZE_MODE_UART 0x01    /* Snooze mode for UART    */
+
+#define NFC_SNOOZE_ACTIVE_LOW 0x00  /* high to low voltage is asserting */
+
+/**********************************************
+ * HCI definitions
+ **********************************************/
+#define NFC_HAL_HCI_SESSION_ID_LEN 8
+#define NFC_HAL_HCI_SYNC_ID_LEN 2
+
+/* Card emulation RF Gate A definitions */
+#define NFC_HAL_HCI_CE_RF_A_UID_REG_LEN 10
+#define NFC_HAL_HCI_CE_RF_A_ATQA_RSP_CODE_LEN 2
+#define NFC_HAL_HCI_CE_RF_A_MAX_HIST_DATA_LEN 15
+#define NFC_HAL_HCI_CE_RF_A_MAX_DATA_RATE_LEN 3
+
+/* Card emulation RF Gate B definitions */
+#define NFC_HAL_HCI_CE_RF_B_PUPI_LEN 4
+#define NFC_HAL_HCI_CE_RF_B_ATQB_LEN 4
+#define NFC_HAL_HCI_CE_RF_B_HIGHER_LAYER_RSP_LEN 61
+#define NFC_HAL_HCI_CE_RF_B_MAX_DATA_RATE_LEN 3
+
+/* Card emulation RF Gate BP definitions */
+#define NFC_HAL_HCI_CE_RF_BP_MAX_PAT_IN_LEN 8
+#define NFC_HAL_HCI_CE_RF_BP_DATA_OUT_LEN 40
+
+/* Reader RF Gate A definitions */
+#define NFC_HAL_HCI_RD_RF_B_HIGHER_LAYER_DATA_LEN 61
+
+/* DH HCI Network command definitions */
+#define NFC_HAL_HCI_DH_MAX_DYN_PIPES 20
+
+#endif /* NFC_BRCM_DEFS_H */
diff --git a/src/include/nfc_config.h b/src/include/nfc_config.h
new file mode 100644
index 0000000..c3687d9
--- /dev/null
+++ b/src/include/nfc_config.h
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#pragma once
+
+#include <string>
+#include <vector>
+
+#include <config.h>
+
+/* Configs from libnfc-nci.conf */
+#define NAME_NFC_DEBUG_ENABLED "NFC_DEBUG_ENABLED"
+#define NAME_NFA_STORAGE "NFA_STORAGE"
+#define NAME_PRESERVE_STORAGE "PRESERVE_STORAGE"
+#define NAME_POLLING_TECH_MASK "POLLING_TECH_MASK"
+#define NAME_P2P_LISTEN_TECH_MASK "P2P_LISTEN_TECH_MASK"
+#define NAME_UICC_LISTEN_TECH_MASK "UICC_LISTEN_TECH_MASK"
+#define NAME_NFA_DM_CFG "NFA_DM_CFG"
+#define NAME_SCREEN_OFF_POWER_STATE "SCREEN_OFF_POWER_STATE"
+#define NAME_NFA_MAX_EE_SUPPORTED "NFA_MAX_EE_SUPPORTED"
+#define NAME_NFA_DM_DISC_DURATION_POLL "NFA_DM_DISC_DURATION_POLL"
+#define NAME_POLL_FREQUENCY "POLL_FREQUENCY"
+#define NAME_NFA_AID_BLOCK_ROUTE "NFA_AID_BLOCK_ROUTE"
+#define NAME_AID_FOR_EMPTY_SELECT "AID_FOR_EMPTY_SELECT"
+#define NAME_AID_MATCHING_MODE "AID_MATCHING_MODE"
+#define NAME_OFFHOST_AID_ROUTE_PWR_STATE "OFFHOST_AID_ROUTE_PWR_STATE"
+
+/* Configs from vendor interface */
+#define NAME_NFA_POLL_BAIL_OUT_MODE "NFA_POLL_BAIL_OUT_MODE"
+#define NAME_PRESENCE_CHECK_ALGORITHM "PRESENCE_CHECK_ALGORITHM"
+#define NAME_NFA_PROPRIETARY_CFG "NFA_PROPRIETARY_CFG"
+#define NAME_DEFAULT_OFFHOST_ROUTE "DEFAULT_OFFHOST_ROUTE"
+#define NAME_DEFAULT_NFCF_ROUTE "DEFAULT_NFCF_ROUTE"
+#define NAME_DEFAULT_SYS_CODE "DEFAULT_SYS_CODE"
+#define NAME_DEFAULT_SYS_CODE_ROUTE "DEFAULT_SYS_CODE_ROUTE"
+#define NAME_DEFAULT_SYS_CODE_PWR_STATE "DEFAULT_SYS_CODE_PWR_STATE"
+#define NAME_DEFAULT_ROUTE "DEFAULT_ROUTE"
+#define NAME_OFF_HOST_ESE_PIPE_ID "OFF_HOST_ESE_PIPE_ID"
+#define NAME_OFF_HOST_SIM_PIPE_ID "OFF_HOST_SIM_PIPE_ID"
+#define NAME_ISO_DEP_MAX_TRANSCEIVE "ISO_DEP_MAX_TRANSCEIVE"
+#define NAME_DEVICE_HOST_WHITE_LIST "DEVICE_HOST_WHITE_LIST"
+
+class NfcConfig {
+ public:
+  static bool hasKey(const std::string& key);
+  static std::string getString(const std::string& key);
+  static std::string getString(const std::string& key,
+                               std::string default_value);
+  static unsigned getUnsigned(const std::string& key);
+  static unsigned getUnsigned(const std::string& key, unsigned default_value);
+  static std::vector<uint8_t> getBytes(const std::string& key);
+  static void clear();
+
+ private:
+  void loadConfig();
+  static NfcConfig& getInstance();
+  NfcConfig();
+
+  ConfigFile config_;
+};
diff --git a/src/include/nfc_hal_api.h b/src/include/nfc_hal_api.h
new file mode 100644
index 0000000..205c6f7
--- /dev/null
+++ b/src/include/nfc_hal_api.h
@@ -0,0 +1,70 @@
+/******************************************************************************
+ *
+ *  Copyright (C) 2012-2014 Broadcom Corporation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at:
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ *  NFC Hardware Abstraction Layer API
+ *
+ ******************************************************************************/
+#ifndef NFC_HAL_API_H
+#define NFC_HAL_API_H
+#include <hardware/nfc.h>
+#include "data_types.h"
+#include "nfc_hal_target.h"
+
+typedef uint8_t tHAL_NFC_STATUS;
+typedef void(tHAL_NFC_STATUS_CBACK)(tHAL_NFC_STATUS status);
+typedef void(tHAL_NFC_CBACK)(uint8_t event, tHAL_NFC_STATUS status);
+typedef void(tHAL_NFC_DATA_CBACK)(uint16_t data_len, uint8_t* p_data);
+
+/*******************************************************************************
+** tHAL_NFC_ENTRY HAL entry-point lookup table
+*******************************************************************************/
+
+typedef void(tHAL_API_INITIALIZE)(void);
+typedef void(tHAL_API_TERMINATE)(void);
+typedef void(tHAL_API_OPEN)(tHAL_NFC_CBACK* p_hal_cback,
+                            tHAL_NFC_DATA_CBACK* p_data_cback);
+typedef void(tHAL_API_CLOSE)(void);
+typedef void(tHAL_API_CORE_INITIALIZED)(uint16_t data_len,
+                                        uint8_t* p_core_init_rsp_params);
+typedef void(tHAL_API_WRITE)(uint16_t data_len, uint8_t* p_data);
+typedef bool(tHAL_API_PREDISCOVER)(void);
+typedef void(tHAL_API_CONTROL_GRANTED)(void);
+typedef void(tHAL_API_POWER_CYCLE)(void);
+typedef uint8_t(tHAL_API_GET_MAX_NFCEE)(void);
+
+typedef struct {
+  tHAL_API_INITIALIZE* initialize;
+  tHAL_API_TERMINATE* terminate;
+  tHAL_API_OPEN* open;
+  tHAL_API_CLOSE* close;
+  tHAL_API_CORE_INITIALIZED* core_initialized;
+  tHAL_API_WRITE* write;
+  tHAL_API_PREDISCOVER* prediscover;
+  tHAL_API_CONTROL_GRANTED* control_granted;
+  tHAL_API_POWER_CYCLE* power_cycle;
+  tHAL_API_GET_MAX_NFCEE* get_max_ee;
+
+} tHAL_NFC_ENTRY;
+
+/*******************************************************************************
+** HAL API Function Prototypes
+*******************************************************************************/
+
+#endif /* NFC_HAL_API_H  */
diff --git a/src/include/nfc_hal_int.h b/src/include/nfc_hal_int.h
new file mode 100644
index 0000000..b33a38b
--- /dev/null
+++ b/src/include/nfc_hal_int.h
@@ -0,0 +1,279 @@
+/******************************************************************************
+ *
+ *  Copyright (C) 2009-2014 Broadcom Corporation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at:
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ *  this file contains the NCI transport internal definitions and functions.
+ *
+ ******************************************************************************/
+
+#ifndef NFC_HAL_INT_H
+#define NFC_HAL_INT_H
+
+#include "gki.h"
+#include "nci_defs.h"
+#include "nfc_brcm_defs.h"
+#include "nfc_hal_api.h"
+#include "nfc_hal_int_api.h"
+#include "nfc_hal_target.h"
+
+using android::base::StringPrintf;
+
+/* NFC HAL Task Timer events */
+#ifndef NFC_HAL_QUICK_TIMER_EVT_MASK
+#define NFC_HAL_QUICK_TIMER_EVT_MASK (TIMER_0_EVT_MASK)
+#endif
+
+#ifndef NFC_HAL_QUICK_TIMER_ID
+#define NFC_HAL_QUICK_TIMER_ID (TIMER_0)
+#endif
+
+typedef uint8_t tNFC_HAL_WAIT_RSP;
+
+#if (NFC_HAL_HCI_INCLUDED == TRUE)
+
+#endif
+
+/* NFC HAL transport configuration */
+typedef struct {
+  bool shared_transport; /* TRUE if using shared HCI/NCI transport */
+  uint8_t userial_baud;
+  uint8_t userial_fc;
+} tNFC_HAL_TRANS_CFG;
+
+#ifdef TESTER
+/* For Insight, ncit_cfg is runtime-configurable */
+#define NFC_HAL_TRANS_CFG_QUALIFIER
+#else
+/* For all other platforms, ncit_cfg is constant */
+#define NFC_HAL_TRANS_CFG_QUALIFIER const
+#endif
+extern NFC_HAL_TRANS_CFG_QUALIFIER tNFC_HAL_TRANS_CFG nfc_hal_trans_cfg;
+
+/****************************************************************************
+** Internal constants and definitions
+****************************************************************************/
+
+typedef uint8_t tNFC_HAL_NCI_RAS;
+
+typedef uint8_t tNFC_HAL_POWER_MODE;
+
+#define NFC_HAL_SAVED_HDR_SIZE (2)
+#define NFC_HAL_SAVED_CMD_SIZE (2)
+
+#ifndef NFC_HAL_DEBUG
+#define NFC_HAL_DEBUG TRUE
+#endif
+
+#if (NFC_HAL_DEBUG == TRUE)
+extern bool nfc_debug_enabled;
+extern const char* const nfc_hal_init_state_str[];
+#define NFC_HAL_SET_INIT_STATE(state)                                        \
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(                          \
+      "init state: %d->%d(%s)", nfc_hal_cb.dev_cb.initializing_state, state, \
+      nfc_hal_init_state_str[state]);                                        \
+  nfc_hal_cb.dev_cb.initializing_state = state;
+#else
+#define NFC_HAL_SET_INIT_STATE(state) \
+  nfc_hal_cb.dev_cb.initializing_state = state;
+#endif
+
+typedef uint8_t tNFC_HAL_INIT_STATE;
+
+typedef uint8_t tNFC_HAL_DM_CONFIG;
+
+/* callback function prototype */
+typedef struct {
+  uint16_t opcode;
+  uint16_t param_len;
+  uint8_t* p_param_buf;
+} tNFC_HAL_BTVSC_CPLT;
+
+#if (NFC_HAL_HCI_INCLUDED == TRUE)
+
+/* data type for NFC_HAL_HCI_RSP_NV_READ_EVT */
+typedef struct {
+  NFC_HDR hdr;
+  uint8_t block;
+  uint16_t size;
+  tHAL_NFC_STATUS status;
+} tNFC_HAL_HCI_RSP_NV_READ_EVT;
+
+/* data type for NFC_HAL_HCI_RSP_NV_WRITE_EVT */
+typedef struct {
+  NFC_HDR hdr;
+  tHAL_NFC_STATUS status;
+} tNFC_HAL_HCI_RSP_NV_WRITE_EVT;
+
+/* union of all event data types */
+typedef union {
+  NFC_HDR hdr;
+  /* Internal events */
+  tNFC_HAL_HCI_RSP_NV_READ_EVT nv_read;
+  tNFC_HAL_HCI_RSP_NV_WRITE_EVT nv_write;
+} tNFC_HAL_HCI_EVENT_DATA;
+
+#endif
+/*****************************************************************************
+** Control block for NFC HAL
+*****************************************************************************/
+
+/* Information about current patch in NVM */
+typedef struct {
+  uint16_t project_id; /* Current project_id of patch in nvm       */
+  uint16_t ver_major;  /* Current major version of patch in nvm    */
+  uint16_t ver_minor;  /* Current minor version of patch in nvm    */
+  uint16_t fpm_size;   /* Current size of FPM patch in nvm         */
+  uint16_t lpm_size;   /* Current size of LPM patch in nvm         */
+  uint8_t flags;       /* See NFC_HAL_NVM_FLAGS_* flag definitions */
+  uint8_t nvm_type;    /* Current NVM Type - UICC/EEPROM           */
+  uint8_t chip_ver[NFC_HAL_PRM_MAX_CHIP_VER_LEN]; /* patch chip version       */
+} tNFC_HAL_NVM;
+
+/* Patch for I2C fix */
+typedef struct {
+  uint8_t* p_patch;      /* patch for i2c fix                */
+  uint32_t prei2c_delay; /* the dealy after preI2C patch */
+  uint16_t len;          /* i2c patch length                 */
+} tNFC_HAL_PRM_I2C_FIX_CB;
+
+/* Control block for NCI transport */
+typedef struct {
+  uint8_t nci_ctrl_size; /* Max size for NCI messages */
+  uint8_t rcv_state;     /* current rx state */
+  uint16_t rcv_len; /* bytes remaining to be received in current rx state     */
+  NFC_HDR* p_rcv_msg;  /* buffer to receive NCI message */
+  NFC_HDR* p_frag_msg; /* fragmented NCI message; waiting for last fragment */
+  NFC_HDR*
+      p_pend_cmd; /* pending NCI message; waiting for NFCC state to be free */
+  tNFC_HAL_NCI_RAS nci_ras; /* nci reassembly error status */
+  TIMER_LIST_ENT
+  nci_wait_rsp_timer; /* Timer for waiting for nci command response */
+  tNFC_HAL_WAIT_RSP nci_wait_rsp; /* nci wait response flag */
+  uint8_t
+      last_hdr[NFC_HAL_SAVED_HDR_SIZE]; /* part of last NCI command header */
+  uint8_t
+      last_cmd[NFC_HAL_SAVED_CMD_SIZE]; /* part of last NCI command payload */
+  void* p_vsc_cback; /* the callback function for last VSC command */
+} tNFC_HAL_NCIT_CB;
+
+/* Control block for device initialization */
+typedef struct {
+  tNFC_HAL_INIT_STATE initializing_state; /* state of initializing NFCC */
+
+  uint32_t brcm_hw_id; /* BRCM NFCC HW ID                          */
+  tNFC_HAL_DM_CONFIG next_dm_config; /* next config in post initialization */
+  uint8_t next_startup_vsc; /* next start-up VSC offset in post init    */
+
+  tNFC_HAL_POWER_MODE power_mode; /* NFCC power mode                          */
+  uint8_t snooze_mode;            /* current snooze mode                      */
+  uint8_t new_snooze_mode;        /* next snooze mode after receiving cmpl    */
+  uint8_t nfc_wake_active_mode;   /* NFC_HAL_LP_ACTIVE_LOW/HIGH               */
+  TIMER_LIST_ENT lp_timer;        /* timer for low power mode                 */
+
+  tHAL_NFC_STATUS_CBACK*
+      p_prop_cback; /* callback to notify complete of proprietary update */
+} tNFC_HAL_DEV_CB;
+
+#if (NFC_HAL_HCI_INCLUDED == TRUE)
+
+/* data members for NFC_HAL-HCI */
+typedef struct {
+  TIMER_LIST_ENT
+  hci_timer; /* Timer to avoid indefinitely waiting for response */
+  uint8_t*
+      p_hci_netwk_info_buf; /* Buffer for reading HCI Network information */
+  uint8_t* p_hci_netwk_dh_info_buf; /* Buffer for reading HCI Network DH
+                                       information */
+  uint8_t hci_netwk_config_block;  /* Rsp awaiting for hci network configuration
+                                      block */
+  bool b_wait_hcp_conn_create_rsp; /* Waiting for hcp connection create response
+                                      */
+  bool clear_all_pipes_to_uicc1;   /* UICC1 was restarted for patch download */
+  bool update_session_id; /* Next response from NFCC is to Get Session id cmd */
+  bool hci_fw_workaround; /* HAL HCI Workaround need */
+  bool hci_fw_validate_netwk_cmd; /* Flag to indicate if hci network ntf to
+                                     validate */
+  uint8_t hcp_conn_id;            /* NCI Connection id for HCP */
+  uint8_t dh_session_id[1];       /* Byte 0 of DH Session ID */
+} tNFC_HAL_HCI_CB;
+
+#endif
+
+typedef uint8_t tNFC_HAL_FLAGS;
+
+typedef struct {
+  tHAL_NFC_CBACK* p_stack_cback;     /* Callback for HAL event notification  */
+  tHAL_NFC_DATA_CBACK* p_data_cback; /* Callback for data event notification  */
+
+  TIMER_LIST_Q quick_timer_queue; /* timer list queue                 */
+  TIMER_LIST_ENT timer;           /* timer for NCI transport task     */
+
+  tNFC_HAL_NCIT_CB ncit_cb; /* NCI transport */
+  tNFC_HAL_DEV_CB dev_cb;   /* device initialization */
+  tNFC_HAL_NVM nvm_cb;      /* Information about current patch in NVM */
+
+  /* Patchram control block */
+  tNFC_HAL_PRM_CB prm;
+  tNFC_HAL_PRM_I2C_FIX_CB prm_i2c;
+
+#if (NFC_HAL_HCI_INCLUDED == TRUE)
+  /* data members for NFC_HAL-HCI */
+  tNFC_HAL_HCI_CB hci_cb;
+#endif
+
+  uint8_t pre_discover_done; /* TRUE, when the prediscover config is complete */
+  tNFC_HAL_FLAGS hal_flags;
+  uint8_t pre_set_mem_idx;
+
+  uint8_t max_rf_credits; /* NFC Max RF data credits */
+  uint8_t max_ee;         /* NFC Max number of NFCEE supported by NFCC */
+} tNFC_HAL_CB;
+
+/* Global NCI data */
+extern tNFC_HAL_CB nfc_hal_cb;
+
+extern uint8_t* p_nfc_hal_pre_discover_cfg;
+
+/****************************************************************************
+** Internal nfc functions
+****************************************************************************/
+
+#if (NFC_HAL_HCI_INCLUDED == TRUE)
+/* nfc_hal_hci.c */
+void nfc_hal_hci_enable(void);
+void nfc_hal_hci_evt_hdlr(tNFC_HAL_HCI_EVENT_DATA* p_evt_data);
+
+void nfc_hal_hci_handle_build_info(uint8_t chipverlen, uint8_t* p_chipverstr);
+#else
+#define nfc_hal_hci_enable() NFC_HAL_SET_INIT_STATE(NFC_HAL_INIT_STATE_IDLE);
+#define nfc_hal_hci_handle_build_info(p, a)
+#define nfc_hal_hci_evt_hdlr(p) ;
+#endif
+
+/* Define default NCI protocol trace function (if protocol tracing is enabled)
+ */
+#if (NFC_HAL_TRACE_PROTOCOL == TRUE)
+#if !defined(DISP_NCI)
+#define DISP_NCI (DispNci)
+void DispNci(uint8_t* p, uint16_t len, bool is_recv);
+#endif /* DISP_NCI */
+
+#endif /* NFC_HAL_TRACE_PROTOCOL */
+
+#endif /* NFC_HAL_INT_H */
diff --git a/src/include/nfc_hal_int_api.h b/src/include/nfc_hal_int_api.h
new file mode 100644
index 0000000..58b51d3
--- /dev/null
+++ b/src/include/nfc_hal_int_api.h
@@ -0,0 +1,77 @@
+/******************************************************************************
+ *
+ *  Copyright (C) 2009-2014 Broadcom Corporation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at:
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ *  Internal NFC HAL API functions.
+ *
+ ******************************************************************************/
+#ifndef NFC_HAL_INT_API_H
+#define NFC_HAL_INT_API_H
+
+/****************************************************************************
+** Device Configuration definitions
+****************************************************************************/
+
+/* Broadcom specific device initialization before sending NCI reset */
+
+typedef struct {
+  uint32_t brcm_hw_id;
+  uint16_t xtal_freq;
+  uint8_t xtal_index;
+} tNFC_HAL_DEV_INIT_XTAL_CFG;
+
+#define NFC_HAL_DEV_INIT_MAX_XTAL_CFG 5
+
+/*****************************************************************************
+**  Patch RAM Constants
+*****************************************************************************/
+
+/* patch format type */
+typedef uint8_t tNFC_HAL_PRM_FORMAT;
+
+/*****************************************************************************
+**  Patch RAM Callback for event notificaton
+*****************************************************************************/
+
+typedef uint8_t tNFC_HAL_NCI_EVT; /* MT + Opcode */
+
+/*******************************************************************************
+**
+** Function         HAL_NfcPrmSetSpdNciCmdPayloadSize
+**
+** Description      Set Host-to-NFCC NCI message size for secure patch download
+**
+**                  This API must be called before calling
+**                  HAL_NfcPrmDownloadStart. If the API is not called, then PRM
+**                  will use the default message size.
+**
+**                  Typically, this API is only called for platforms that have
+**                  message-size limitations in the transport/driver.
+**
+**                  Valid message size range:
+**                  NFC_HAL_PRM_MIN_NCI_CMD_PAYLOAD_SIZE to 255.
+**
+** Returns          HAL_NFC_STATUS_OK if successful
+**                  HAL_NFC_STATUS_FAILED otherwise
+**
+**
+*******************************************************************************/
+tHAL_NFC_STATUS HAL_NfcPrmSetSpdNciCmdPayloadSize(uint8_t max_payload_size);
+
+#endif /* NFC_HAL_INT_API_H */
diff --git a/halimpl/bcm2079x/hal/hal/nfc_hal_brcm.c b/src/include/nfc_hal_nv_ci.h
similarity index 63%
rename from halimpl/bcm2079x/hal/hal/nfc_hal_brcm.c
rename to src/include/nfc_hal_nv_ci.h
index 076596f..a9ec13d 100644
--- a/halimpl/bcm2079x/hal/hal/nfc_hal_brcm.c
+++ b/src/include/nfc_hal_nv_ci.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2014 Broadcom Corporation
+ *  Copyright (C) 2003-2014 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -18,11 +18,22 @@
 
 /******************************************************************************
  *
- *  This file contains function of the NFC unit to receive/process NFC VS
- *  commands.
+ *  This is the interface file for non valtile memory call-in functions.
  *
  ******************************************************************************/
-#include <string.h>
-#include "gki.h"
-#include "nfc_hal_int.h"
-#include "userial.h"
+#ifndef NFC_HAL_NV_CI_H
+#define NFC_HAL_NV_CI_H
+
+#include "nfc_hal_target.h"
+
+#if (NFC_HAL_HCI_INCLUDED == TRUE)
+
+#include "nfc_hal_nv_co.h"
+
+/*****************************************************************************
+**  Function Declarations
+*****************************************************************************/
+
+#endif /* NFC_HAL_HCI_INCLUDED */
+
+#endif /* NFC_HAL_NV_CI_H */
diff --git a/src/include/nfc_hal_nv_co.h b/src/include/nfc_hal_nv_co.h
new file mode 100644
index 0000000..7fffb65
--- /dev/null
+++ b/src/include/nfc_hal_nv_co.h
@@ -0,0 +1,57 @@
+/******************************************************************************
+ *
+ *  Copyright (C) 2003-2014 Broadcom Corporation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at:
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ *
+ *  This is the interface file for storing nv data
+ *
+ ******************************************************************************/
+#ifndef NFC_HAL_NV_CO_H
+#define NFC_HAL_NV_CO_H
+
+#include "nfc_hal_target.h"
+
+#if (NFC_HAL_HCI_INCLUDED == TRUE)
+
+#include <time.h>
+
+/*****************************************************************************
+**  Constants and Data Types
+*****************************************************************************/
+
+/**************************
+**  Common Definitions
+***************************/
+
+typedef uint8_t tNFC_HAL_NV_CO_STATUS;
+
+#define DH_NV_BLOCK 0x01
+#define HC_F3_NV_BLOCK 0x02
+#define HC_F4_NV_BLOCK 0x03
+#define HC_F2_NV_BLOCK 0x04
+#define HC_F5_NV_BLOCK 0x05
+
+/*****************************************************************************
+**  Function Declarations
+*****************************************************************************/
+/**************************
+**  Common Functions
+***************************/
+
+#endif /* NFC_HAL_HCI_INCLUDED */
+#endif /* NFC_HAL_NV_CO_H */
diff --git a/src/hal/int/nfc_hal_post_reset.h b/src/include/nfc_hal_post_reset.h
similarity index 87%
rename from src/hal/int/nfc_hal_post_reset.h
rename to src/include/nfc_hal_post_reset.h
index 7ce3953..cc703a1 100644
--- a/src/hal/int/nfc_hal_post_reset.h
+++ b/src/include/nfc_hal_post_reset.h
@@ -28,7 +28,6 @@
 ** Application control block definitions
 ******************************************************************************/
 #define NFA_APP_PATCHFILE_MAX_PATH 255
-#define NFA_APP_MAX_NUM_REINIT 5
 
 typedef struct {
   uint8_t prm_file[NFA_APP_PATCHFILE_MAX_PATH + 1]; /* Filename of patchram */
@@ -61,13 +60,4 @@
 } tNFC_POST_RESET_CB;
 extern tNFC_POST_RESET_CB nfc_post_reset_cb;
 
-/*
-** Post NCI reset handler
-**
-** This function is called to start device pre-initialization after
-** NCI CORE-RESET. When pre-initialization is completed,
-** HAL_NfcPreInitDone() must be called to proceed with stack start up.
-*/
-void nfc_hal_post_reset_init(uint32_t brcm_hw_id, uint8_t nvm_type);
-
 #endif /* NFC_HAL_POST_RESET_H */
diff --git a/src/include/nfc_hal_target.h b/src/include/nfc_hal_target.h
new file mode 100644
index 0000000..38b2fb3
--- /dev/null
+++ b/src/include/nfc_hal_target.h
@@ -0,0 +1,163 @@
+/******************************************************************************
+ *
+ *  Copyright (C) 2012-2014 Broadcom Corporation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at:
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ ******************************************************************************/
+
+#ifndef NFC_HAL_TARGET_H
+#define NFC_HAL_TARGET_H
+
+#include "data_types.h"
+#include "gki.h"
+
+/****************************************************************************
+** NCI related configuration
+****************************************************************************/
+
+/* Initial Max Control Packet Payload Size (until receiving payload size in
+ * INIT_CORE_RSP) */
+#ifndef NFC_HAL_NCI_INIT_CTRL_PAYLOAD_SIZE
+#define NFC_HAL_NCI_INIT_CTRL_PAYLOAD_SIZE 0xFF
+#endif
+
+/* Number of bytes to reserve in front of NCI messages (e.g. for transport
+ * header) */
+#ifndef NFC_HAL_NCI_MSG_OFFSET_SIZE
+#define NFC_HAL_NCI_MSG_OFFSET_SIZE 1
+#endif
+
+/* NFC-WAKE */
+#ifndef NFC_HAL_LP_NFC_WAKE_GPIO
+#define NFC_HAL_LP_NFC_WAKE_GPIO UPIO_GENERAL3
+#endif
+
+/* NFCC snooze mode idle timeout before deassert NFC_WAKE in ms */
+#ifndef NFC_HAL_LP_IDLE_TIMEOUT
+#define NFC_HAL_LP_IDLE_TIMEOUT 100
+#endif
+
+/* NFC snooze mode */
+#ifndef NFC_HAL_LP_SNOOZE_MODE
+#define NFC_HAL_LP_SNOOZE_MODE NFC_HAL_LP_SNOOZE_MODE_UART
+#endif
+
+/* Idle Threshold Host in 100ms unit */
+#ifndef NFC_HAL_LP_IDLE_THRESHOLD_HOST
+#define NFC_HAL_LP_IDLE_THRESHOLD_HOST 0
+#endif
+
+/* Idle Threshold HC in 100ms unit */
+#ifndef NFC_HAL_LP_IDLE_THRESHOLD_HC
+#define NFC_HAL_LP_IDLE_THRESHOLD_HC 0
+#endif
+
+/* Default NFCC power-up baud rate */
+#ifndef NFC_HAL_DEFAULT_BAUD
+#define NFC_HAL_DEFAULT_BAUD USERIAL_BAUD_115200
+#endif
+
+/* time (in ms) between power off and on NFCC */
+#ifndef NFC_HAL_POWER_CYCLE_DELAY
+#define NFC_HAL_POWER_CYCLE_DELAY 100
+#endif
+
+/* time (in ms) between power off and on NFCC */
+#ifndef NFC_HAL_NFCC_ENABLE_TIMEOUT
+#define NFC_HAL_NFCC_ENABLE_TIMEOUT 1000
+#endif
+
+#ifndef NFC_HAL_PRM_DEBUG
+#define NFC_HAL_PRM_DEBUG TRUE
+#endif
+
+/* max patch data length (Can be overridden by platform for ACL HCI command
+ * size) */
+#ifndef NFC_HAL_PRM_HCD_CMD_MAXLEN
+#define NFC_HAL_PRM_HCD_CMD_MAXLEN 250
+#endif
+
+/* Require PreI2C patch by default */
+#ifndef NFC_HAL_PRE_I2C_PATCH_INCLUDED
+#define NFC_HAL_PRE_I2C_PATCH_INCLUDED TRUE
+#endif
+
+/* over-riden for platforms that have transport packet limitations */
+#ifndef NFC_HAL_PRM_MIN_NCI_CMD_PAYLOAD_SIZE
+#define NFC_HAL_PRM_MIN_NCI_CMD_PAYLOAD_SIZE (32)
+#endif
+
+/* amount of time to wait for authenticating/committing patch to NVM */
+#ifndef NFC_HAL_PRM_COMMIT_DELAY
+#define NFC_HAL_PRM_COMMIT_DELAY (30000)
+#endif
+
+/* amount of time to wait after downloading preI2C patch before downloading
+ * LPM/FPM patch */
+#ifndef NFC_HAL_PRM_POST_I2C_FIX_DELAY
+#define NFC_HAL_PRM_POST_I2C_FIX_DELAY (200)
+#endif
+
+/* NFCC will respond to more than one technology during listen discovery  */
+#ifndef NFC_HAL_DM_MULTI_TECH_RESP
+#define NFC_HAL_DM_MULTI_TECH_RESP TRUE
+#endif
+
+/* Data rate for 15693 command/response, it must be same as
+ * RW_I93_FLAG_DATA_RATE in nfc_target.h */
+#define NFC_HAL_I93_FLAG_DATA_RATE_HIGH 0x02
+
+#ifndef NFC_HAL_I93_FLAG_DATA_RATE
+#define NFC_HAL_I93_FLAG_DATA_RATE NFC_HAL_I93_FLAG_DATA_RATE_HIGH
+#endif
+
+/* NFC HAL HCI */
+#ifndef NFC_HAL_HCI_INCLUDED
+#define NFC_HAL_HCI_INCLUDED TRUE
+#endif
+
+/* Quick Timer */
+#ifndef QUICK_TIMER_TICKS_PER_SEC
+#define QUICK_TIMER_TICKS_PER_SEC 100 /* 10ms timer */
+#endif
+
+#ifndef NFC_HAL_SHARED_TRANSPORT_ENABLED
+#define NFC_HAL_SHARED_TRANSPORT_ENABLED FALSE
+#endif
+
+/* Enable verbose tracing by default */
+#ifndef NFC_HAL_TRACE_VERBOSE
+#define NFC_HAL_TRACE_VERBOSE TRUE
+#endif
+
+#ifndef NFC_HAL_INITIAL_TRACE_LEVEL
+#define NFC_HAL_INITIAL_TRACE_LEVEL 5
+#endif
+
+/* Map NFC serial port to USERIAL_PORT_6 by default */
+#ifndef USERIAL_NFC_PORT
+#define USERIAL_NFC_PORT (USERIAL_PORT_6)
+#endif
+
+/* Restore NFCC baud rate to default on shutdown if baud rate was updated */
+#ifndef NFC_HAL_RESTORE_BAUD_ON_SHUTDOWN
+#define NFC_HAL_RESTORE_BAUD_ON_SHUTDOWN TRUE
+#endif
+
+/* Enable protocol tracing by default */
+#ifndef NFC_HAL_TRACE_PROTOCOL
+#define NFC_HAL_TRACE_PROTOCOL TRUE
+#endif
+
+#endif /* GKI_TARGET_H */
diff --git a/src/include/nfc_target.h b/src/include/nfc_target.h
index fd56462..3de5a84 100644
--- a/src/include/nfc_target.h
+++ b/src/include/nfc_target.h
@@ -29,9 +29,6 @@
 #include "gki_target.h"
 
 #include "bt_types.h" /* This must be defined AFTER buildcfg.h */
-#ifndef LMP_TEST
-#include "bt_trace.h"
-#endif
 
 #ifndef USERIAL_DEBUG
 #define USERIAL_DEBUG FALSE
@@ -158,13 +155,11 @@
 ******************************************************************************/
 #define NCI_VERSION_UNKNOWN 0x00
 #define NCI_VERSION_1_0 0x10
-#define NCI_VERSION_1_1 0x11
 #define NCI_VERSION_2_0 0x20
 #ifndef NCI_VERSION
 #define NCI_VERSION NCI_VERSION_2_0
 #endif
 #define NCI_CORE_RESET_RSP_LEN(X) (((X) == NCI_VERSION_2_0) ? (0x01) : (0x03))
-#define NCI_VERSION_0_F 0x0F
 
 /* TRUE I2C patch is needed */
 #ifndef NFC_I2C_PATCH_INCLUDED
@@ -652,10 +647,10 @@
 **  as the NFC stack.
 *****************************************************************************/
 #ifndef HAL_WRITE
-#define HAL_WRITE(p)                                            \
-  {                                                             \
-    nfc_cb.p_hal->write(p->len, (uint8_t*)(p + 1) + p->offset); \
-    GKI_freebuf(p);                                             \
+#define HAL_WRITE(p)                                                  \
+  {                                                                   \
+    nfc_cb.p_hal->write((p)->len, (uint8_t*)((p) + 1) + (p)->offset); \
+    GKI_freebuf(p);                                                   \
   }
 
 #ifdef NFC_HAL_SHARED_GKI
diff --git a/src/include/nfc_types.h b/src/include/nfc_types.h
new file mode 100644
index 0000000..a889902
--- /dev/null
+++ b/src/include/nfc_types.h
@@ -0,0 +1,160 @@
+/******************************************************************************
+ *
+ *  Copyright (C) 2012-2014 Broadcom Corporation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at:
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ ******************************************************************************/
+
+#ifndef NFC_TYPES_H
+#define NFC_TYPES_H
+
+/****************************************************************************
+** NFC_HDR header definition for NFC messages
+*****************************************************************************/
+typedef struct {
+  uint16_t event;
+  uint16_t len;
+  uint16_t offset;
+  uint16_t layer_specific;
+} NFC_HDR;
+#define NFC_HDR_SIZE (sizeof(NFC_HDR))
+
+/* Mask for NFC_HDR event field */
+#define NFC_EVT_MASK 0xFF00
+
+/****************************************************************************
+** NFC_HAL_TASK  definitions
+*****************************************************************************/
+
+/* NCI message for hci persistency data     */
+#define NFC_HAL_EVT_HCI 0x0400
+
+/* NCI message for sending to host stack    */
+#define NFC_EVT_TO_NFC_NCI 0x4000
+
+/*****************************************************************************
+** Macros to get and put bytes to and from a stream (Little Endian format).
+*****************************************************************************/
+
+#define UINT32_TO_STREAM(p, u32)     \
+  {                                  \
+    *(p)++ = (uint8_t)(u32);         \
+    *(p)++ = (uint8_t)((u32) >> 8);  \
+    *(p)++ = (uint8_t)((u32) >> 16); \
+    *(p)++ = (uint8_t)((u32) >> 24); \
+  }
+#define UINT16_TO_STREAM(p, u16)    \
+  {                                 \
+    *(p)++ = (uint8_t)(u16);        \
+    *(p)++ = (uint8_t)((u16) >> 8); \
+  }
+#define UINT8_TO_STREAM(p, u8) \
+  { *(p)++ = (uint8_t)(u8); }
+#define INT8_TO_STREAM(p, u8) \
+  { *(p)++ = (int8_t)(u8); }
+#define ARRAY8_TO_STREAM(p, a)                                    \
+  {                                                               \
+    int ijk;                                                      \
+    for (ijk = 0; ijk < 8; ijk++) *(p)++ = (uint8_t)(a)[7 - ijk]; \
+  }
+#define ARRAY_TO_STREAM(p, a, len)                                \
+  {                                                               \
+    int ijk;                                                      \
+    for (ijk = 0; ijk < (len); ijk++) *(p)++ = (uint8_t)(a)[ijk]; \
+  }
+#define STREAM_TO_UINT8(u8, p) \
+  {                            \
+    (u8) = (uint8_t)(*(p));    \
+    (p) += 1;                  \
+  }
+#define STREAM_TO_UINT16(u16, p)                                  \
+  {                                                               \
+    (u16) = ((uint16_t)(*(p)) + (((uint16_t)(*((p) + 1))) << 8)); \
+    (p) += 2;                                                     \
+  }
+#define STREAM_TO_UINT32(u32, p)                                      \
+  {                                                                   \
+    (u32) = (((uint32_t)(*(p))) + ((((uint32_t)(*((p) + 1)))) << 8) + \
+             ((((uint32_t)(*((p) + 2)))) << 16) +                     \
+             ((((uint32_t)(*((p) + 3)))) << 24));                     \
+    (p) += 4;                                                         \
+  }
+#define STREAM_TO_ARRAY8(a, p)                     \
+  {                                                \
+    int ijk;                                       \
+    uint8_t* _pa = (uint8_t*)(a) + 7;              \
+    for (ijk = 0; ijk < 8; ijk++) *_pa-- = *(p)++; \
+  }
+#define STREAM_TO_ARRAY(a, p, len)                                   \
+  {                                                                  \
+    int ijk;                                                         \
+    for (ijk = 0; ijk < (len); ijk++) ((uint8_t*)(a))[ijk] = *(p)++; \
+  }
+
+/*****************************************************************************
+** Macros to get and put bytes to and from a stream (Big Endian format)
+*****************************************************************************/
+
+#define UINT32_TO_BE_STREAM(p, u32)  \
+  {                                  \
+    *(p)++ = (uint8_t)((u32) >> 24); \
+    *(p)++ = (uint8_t)((u32) >> 16); \
+    *(p)++ = (uint8_t)((u32) >> 8);  \
+    *(p)++ = (uint8_t)(u32);         \
+  }
+#define UINT24_TO_BE_STREAM(p, u24)  \
+  {                                  \
+    *(p)++ = (uint8_t)((u24) >> 16); \
+    *(p)++ = (uint8_t)((u24) >> 8);  \
+    *(p)++ = (uint8_t)(u24);         \
+  }
+#define UINT16_TO_BE_STREAM(p, u16) \
+  {                                 \
+    *(p)++ = (uint8_t)((u16) >> 8); \
+    *(p)++ = (uint8_t)(u16);        \
+  }
+#define UINT8_TO_BE_STREAM(p, u8) \
+  { *(p)++ = (uint8_t)(u8); }
+#define ARRAY_TO_BE_STREAM(p, a, len)                             \
+  {                                                               \
+    int ijk;                                                      \
+    for (ijk = 0; ijk < (len); ijk++) *(p)++ = (uint8_t)(a)[ijk]; \
+  }
+
+#define BE_STREAM_TO_UINT8(u8, p) \
+  {                               \
+    (u8) = (uint8_t)(*(p));       \
+    (p) += 1;                     \
+  }
+#define BE_STREAM_TO_UINT16(u16, p)                                       \
+  {                                                                       \
+    (u16) = (uint16_t)(((uint16_t)(*(p)) << 8) + (uint16_t)(*((p) + 1))); \
+    (p) += 2;                                                             \
+  }
+#define BE_STREAM_TO_UINT32(u32, p)                                      \
+  {                                                                      \
+    (u32) = ((uint32_t)(*((p) + 3)) + ((uint32_t)(*((p) + 2)) << 8) +    \
+             ((uint32_t)(*((p) + 1)) << 16) + ((uint32_t)(*(p)) << 24)); \
+    (p) += 4;                                                            \
+  }
+
+/*****************************************************************************
+** Macros to get and put bytes to and from a field (Big Endian format).
+** These are the same as to stream, except the pointer is not incremented.
+*****************************************************************************/
+
+#define UINT8_TO_BE_FIELD(p, u8) \
+  { *(uint8_t*)(p) = (uint8_t)(u8); }
+
+#endif /* NFC_TYPES_H */
diff --git a/src/include/trace_api.h b/src/include/trace_api.h
index 9c38a62..47eb0aa 100644
--- a/src/include/trace_api.h
+++ b/src/include/trace_api.h
@@ -28,10 +28,6 @@
 #include "bt_types.h"
 #include "nfc_hal_api.h"
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 /* Trace API Function External Declarations */
 extern void DispT3TagMessage(NFC_HDR* p_msg, bool is_rx);
 extern void DispRWT4Tags(NFC_HDR* p_buf, bool is_rx);
@@ -40,10 +36,6 @@
                          uint8_t command_to_respond);
 
 extern void DispLLCP(NFC_HDR* p_buf, bool is_rx);
-extern void DispHcp(uint8_t* p, uint16_t len, bool is_recv, bool is_first_seg);
-
-#ifdef __cplusplus
-}
-#endif
+extern void DispHcp(uint8_t* p, uint16_t len, bool is_recv);
 
 #endif /* TRACE_API_H */
diff --git a/src/nfa/ce/nfa_ce_act.c b/src/nfa/ce/nfa_ce_act.cc
similarity index 89%
rename from src/nfa/ce/nfa_ce_act.c
rename to src/nfa/ce/nfa_ce_act.cc
index 6e1166b..ad39aed 100644
--- a/src/nfa/ce/nfa_ce_act.c
+++ b/src/nfa/ce/nfa_ce_act.cc
@@ -22,16 +22,23 @@
  *
  ******************************************************************************/
 #include <string.h>
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "ce_api.h"
 #include "ndef_utils.h"
 #include "nfa_ce_int.h"
-#include "nfa_dm_int.h"
 #include "nfa_mem_co.h"
-#include "nfa_sys_int.h"
+
 #if (NFC_NFCEE_INCLUDED == TRUE)
 #include "nfa_ee_int.h"
 #endif
 
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
+
 /*****************************************************************************
 * Protocol-specific event handlers
 *****************************************************************************/
@@ -49,8 +56,19 @@
   tNFA_CE_CB* p_cb = &nfa_ce_cb;
   tNFA_CONN_EVT_DATA conn_evt;
 
-  NFA_TRACE_DEBUG1("nfa_ce_handle_t3t_evt: event 0x%x", event);
-
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfa_ce_handle_t3t_evt: event 0x%x", event);
+  /* For the felica on host for nfcFcallback */
+  for (uint8_t idx = 0; idx < NFA_CE_LISTEN_INFO_IDX_INVALID; idx++) {
+    if ((p_cb->listen_info[idx].flags & NFA_CE_LISTEN_INFO_IN_USE) &&
+        (p_cb->listen_info[idx].flags & NFA_CE_LISTEN_INFO_FELICA) &&
+        (p_cb->listen_info[idx].flags & NFA_CE_LISTEN_INFO_T3T_ACTIVATE_PND)) {
+      p_cb->idx_cur_active = idx;
+      p_cb->p_active_conn_cback =
+          p_cb->listen_info[p_cb->idx_cur_active].p_conn_cback;
+      break;
+    }
+  }
   switch (event) {
     case CE_T3T_NDEF_UPDATE_START_EVT:
       /* Notify app using callback associated with the active ndef */
@@ -58,7 +76,7 @@
         conn_evt.status = NFA_STATUS_OK;
         (*p_cb->p_active_conn_cback)(NFA_CE_NDEF_WRITE_START_EVT, &conn_evt);
       } else {
-        NFA_TRACE_ERROR0(
+        LOG(ERROR) << StringPrintf(
             "nfa_ce_handle_t3t_evt: got CE_T3T_UPDATE_START_EVT, but no active "
             "NDEF");
       }
@@ -72,7 +90,7 @@
         conn_evt.ndef_write_cplt.p_data = p_ce_data->update_info.p_data;
         (*p_cb->p_active_conn_cback)(NFA_CE_NDEF_WRITE_CPLT_EVT, &conn_evt);
       } else {
-        NFA_TRACE_ERROR0(
+        LOG(ERROR) << StringPrintf(
             "nfa_ce_handle_t3t_evt: got CE_T3T_UPDATE_CPLT_EVT, but no active "
             "NDEF");
       }
@@ -86,6 +104,21 @@
         conn_evt.data.len = p_ce_data->raw_frame.p_data->len;
         (*p_cb->p_active_conn_cback)(NFA_DATA_EVT, &conn_evt);
       } else {
+        /* If we have not notified the app of activation, do so now */
+        if (p_cb->listen_info[p_cb->idx_cur_active].flags &
+            NFA_CE_LISTEN_INFO_T3T_ACTIVATE_PND) {
+          p_cb->listen_info[p_cb->idx_cur_active].flags &=
+              ~NFA_CE_LISTEN_INFO_T3T_ACTIVATE_PND;
+
+          conn_evt.ce_activated.handle =
+              NFA_HANDLE_GROUP_CE | ((tNFA_HANDLE)p_cb->idx_cur_active);
+          memcpy(&(conn_evt.ce_activated.activate_ntf),
+                 &p_cb->activation_params, sizeof(tNFC_ACTIVATE_DEVT));
+          conn_evt.ce_activated.status = NFA_STATUS_OK;
+
+          (*p_cb->p_active_conn_cback)(NFA_CE_ACTIVATED_EVT, &conn_evt);
+        }
+        /* Notify app of t3t raw data */
         conn_evt.ce_data.status = p_ce_data->raw_frame.status;
         conn_evt.ce_data.handle =
             (NFA_HANDLE_GROUP_CE | ((tNFA_HANDLE)p_cb->idx_cur_active));
@@ -98,7 +131,8 @@
       break;
 
     default:
-      NFA_TRACE_DEBUG1("nfa_ce_handle_t3t_evt unhandled event=0x%02x", event);
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+          "nfa_ce_handle_t3t_evt unhandled event=0x%02x", event);
       break;
   }
 }
@@ -116,7 +150,8 @@
   tNFA_CE_CB* p_cb = &nfa_ce_cb;
   tNFA_CONN_EVT_DATA conn_evt;
 
-  NFA_TRACE_DEBUG1("nfa_ce_handle_t4t_evt: event 0x%x", event);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfa_ce_handle_t4t_evt: event 0x%x", event);
 
   /* AID for NDEF selected. we had notified the app of activation. */
   p_cb->idx_cur_active = NFA_CE_LISTEN_INFO_IDX_NDEF;
@@ -154,7 +189,8 @@
 
     default:
       /* CE_T4T_RAW_FRAME_EVT is not used in NFA CE */
-      NFA_TRACE_DEBUG1("nfa_ce_handle_t4t_evt unhandled event=0x%02x", event);
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+          "nfa_ce_handle_t4t_evt unhandled event=0x%02x", event);
       break;
   }
 }
@@ -174,7 +210,8 @@
   uint8_t listen_info_idx;
   tNFA_CONN_EVT_DATA conn_evt;
 
-  NFA_TRACE_DEBUG1("nfa_ce_handle_t4t_aid_evt: event 0x%x", event);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfa_ce_handle_t4t_aid_evt: event 0x%x", event);
 
   /* Get listen_info for this aid callback */
   for (listen_info_idx = 0; listen_info_idx < NFA_CE_LISTEN_INFO_IDX_INVALID;
@@ -219,10 +256,10 @@
       conn_evt.ce_data.len = p_ce_data->raw_frame.p_data->len;
       (*p_cb->p_active_conn_cback)(NFA_CE_DATA_EVT, &conn_evt);
     } else {
-      NFA_TRACE_ERROR1(
+      LOG(ERROR) << StringPrintf(
           "nfa_ce_handle_t4t_aid_evt: unable to find listen_info for aid hdl "
           "%i",
-          p_ce_data->raw_frame.aid_handle)
+          p_ce_data->raw_frame.aid_handle);
     }
 
     GKI_freebuf(p_ce_data->raw_frame.p_data);
@@ -244,11 +281,12 @@
 *******************************************************************************/
 void nfa_ce_discovery_cback(tNFA_DM_RF_DISC_EVT event, tNFC_DISCOVER* p_data) {
   tNFA_CE_MSG ce_msg;
-  NFA_TRACE_DEBUG1("nfa_ce_discovery_cback(): event:0x%02X", event);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("event:0x%02X", event);
 
   switch (event) {
     case NFA_DM_RF_DISC_START_EVT:
-      NFA_TRACE_DEBUG1("nfa_ce_handle_disc_start (status=0x%x)", p_data->start);
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+          "nfa_ce_handle_disc_start (status=0x%x)", p_data->start);
       break;
 
     case NFA_DM_RF_DISC_ACTIVATED_EVT:
@@ -268,7 +306,7 @@
       break;
 
     default:
-      NFA_TRACE_ERROR0("Unexpected event");
+      LOG(ERROR) << StringPrintf("Unexpected event");
       break;
   }
 }
@@ -494,8 +532,9 @@
             p_cb->listen_info[listen_info_idx].tech_proto_mask = listen_mask;
           }
         } else {
-          NFA_TRACE_ERROR1("UICC[0x%x] is not activated",
-                           p_cb->listen_info[listen_info_idx].ee_handle);
+          LOG(ERROR) << StringPrintf(
+              "UICC[0x%x] is not activated",
+              p_cb->listen_info[listen_info_idx].ee_handle);
         }
       }
 #endif
@@ -554,7 +593,8 @@
   tNFA_CE_CB* p_cb = &nfa_ce_cb;
   tNFA_CONN_EVT_DATA conn_evt;
 
-  NFA_TRACE_DEBUG1("NFA_CE: removing listen_info entry %i", listen_info_idx);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("NFA_CE: removing listen_info entry %i", listen_info_idx);
 
   /* Notify app that listening has stopped  if requested (for API deregister) */
   /* For LISTEN_START failures, app has already notified of NFA_LISTEN_START_EVT
@@ -671,7 +711,7 @@
       if (nfa_ce_cb.p_scratch_buf != NULL) {
         nfa_ce_cb.scratch_buf_size = nfa_ce_cb.ndef_max_size;
       } else {
-        NFA_TRACE_ERROR1(
+        LOG(ERROR) << StringPrintf(
             "Unable to allocate scratch buffer for writable NDEF message (%i "
             "bytes)",
             nfa_ce_cb.ndef_max_size);
@@ -705,7 +745,7 @@
     return (NFA_STATUS_OK);
   }
 
-  NFA_TRACE_DEBUG0("Setting NDEF contents");
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("Setting NDEF contents");
 
   readonly = (p_cb->listen_info[NFA_CE_LISTEN_INFO_IDX_NDEF].flags &
               NFC_CE_LISTEN_INFO_READONLY_NDEF)
@@ -739,7 +779,7 @@
     CE_T3tSetLocalNDEFMsg(true, 0, 0, NULL, NULL);
     CE_T4tSetLocalNDEFMsg(true, 0, 0, NULL, NULL);
 
-    NFA_TRACE_ERROR1("Unable to set contents (error %02x)", status);
+    LOG(ERROR) << StringPrintf("Unable to set contents (error %02x)", status);
   }
 
   return (status);
@@ -770,8 +810,13 @@
   uint8_t i;
   bool t4t_activate_pending = false;
 
-  NFA_TRACE_DEBUG1("nfa_ce_activate_ntf () protocol=%d",
-                   p_ce_msg->activate_ntf.p_activation_params->protocol);
+  bool t3t_activate_pending = false;
+  bool t3t_offhost_entry_found = false;
+  uint8_t t3t_activate_idx = 0;
+  uint8_t t3t_offhost_idx = 0;
+
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "protocol=%d", p_ce_msg->activate_ntf.p_activation_params->protocol);
 
   /* Tag is in listen active state */
   p_cb->flags |= NFA_CE_FLAGS_LISTEN_ACTIVE_SLEEP;
@@ -801,8 +846,10 @@
                       p_cb->activation_params.rf_tech_param.param.lf.nfcid2,
                       NCI_RF_F_UID_LEN) == 0)
               /* && (t3t_system_code == p_ce_msg->activation.p_activate_info->rf_tech_param.param.lf.system_code) */) {
-            /* Found listen_info corresponding to this activation */
-            break;
+            p_cb->listen_info[listen_info_idx].flags |=
+                NFA_CE_LISTEN_INFO_T3T_ACTIVATE_PND;
+            t3t_activate_pending = true;
+            t3t_activate_idx = listen_info_idx;
           }
         }
 
@@ -811,12 +858,24 @@
              NFA_CE_LISTEN_INFO_UICC) &&
             (p_cb->listen_info[listen_info_idx].tech_mask &
              NFA_TECHNOLOGY_MASK_F)) {
-          break;
+          t3t_offhost_entry_found = true;
+          t3t_offhost_idx = listen_info_idx;
         }
       }
     }
 
     p_ce_cback = nfa_ce_handle_t3t_evt;
+    /* If listening for PROTO_T3T on DH and eSE/UICC, then notify CE module
+     * now and wait for reader/writer to SELECT a target */
+    if (t3t_activate_pending && t3t_offhost_entry_found) {
+      CE_SetActivatedTagType(&p_cb->activation_params, t3t_system_code,
+                             p_ce_cback);
+      return true;
+    } else if (t3t_activate_pending) {
+      listen_info_idx = t3t_activate_idx;
+    } else if (t3t_offhost_entry_found) {
+      listen_info_idx = t3t_offhost_idx;
+    }
   } else if (p_cb->activation_params.protocol == NFA_PROTOCOL_ISO_DEP) {
     p_ce_cback = nfa_ce_handle_t4t_evt;
 
@@ -881,7 +940,7 @@
       ((listen_info_idx == NFA_CE_LISTEN_INFO_IDX_NDEF) &&
        !(p_cb->listen_info[NFA_CE_LISTEN_INFO_IDX_NDEF].flags &
          NFA_CE_LISTEN_INFO_IN_USE))) {
-    NFA_TRACE_DEBUG1(
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
         "No listen_info found for this activation. listen_info_idx=%d",
         listen_info_idx);
     return true;
@@ -889,6 +948,8 @@
 
   p_cb->listen_info[listen_info_idx].flags &=
       ~NFA_CE_LISTEN_INFO_T4T_ACTIVATE_PND;
+  p_cb->listen_info[listen_info_idx].flags &=
+      ~NFA_CE_LISTEN_INFO_T3T_ACTIVATE_PND;
 
   /* Get CONN_CBACK for this activation */
   p_cb->p_active_conn_cback = p_cb->listen_info[listen_info_idx].p_conn_cback;
@@ -943,7 +1004,7 @@
   tNFA_CONN_EVT_DATA conn_evt;
   uint8_t i;
 
-  NFA_TRACE_DEBUG1("nfa_ce_deactivate_ntf () deact_type=%d", deact_type);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("deact_type=%d", deact_type);
 
   /* Check if deactivating to SLEEP mode */
   if ((deact_type == NFC_DEACTIVATE_TYPE_SLEEP) ||
@@ -998,14 +1059,18 @@
         }
       } else if ((p_cb->activation_params.protocol == NFA_PROTOCOL_T3T) &&
                  (p_cb->listen_info[i].protocol_mask & NFA_PROTOCOL_MASK_T3T)) {
-        if (i == NFA_CE_LISTEN_INFO_IDX_NDEF) {
-          conn_evt.deactivated.type = deact_type;
-          (*p_cb->p_active_conn_cback)(NFA_DEACTIVATED_EVT, &conn_evt);
-        } else {
-          conn_evt.ce_deactivated.handle =
-              NFA_HANDLE_GROUP_CE | ((tNFA_HANDLE)i);
-          conn_evt.ce_deactivated.type = deact_type;
-          (*p_cb->p_active_conn_cback)(NFA_CE_DEACTIVATED_EVT, &conn_evt);
+        /* Don't send NFA_DEACTIVATED_EVT if NFA_ACTIVATED_EVT wasn't sent */
+        if (!(p_cb->listen_info[i].flags &
+              NFA_CE_LISTEN_INFO_T3T_ACTIVATE_PND)) {
+          if (i == NFA_CE_LISTEN_INFO_IDX_NDEF) {
+            conn_evt.deactivated.type = deact_type;
+            (*p_cb->p_active_conn_cback)(NFA_DEACTIVATED_EVT, &conn_evt);
+          } else {
+            conn_evt.ce_deactivated.handle =
+                NFA_HANDLE_GROUP_CE | ((tNFA_HANDLE)i);
+            conn_evt.ce_deactivated.type = deact_type;
+            (*p_cb->p_active_conn_cback)(NFA_CE_DEACTIVATED_EVT, &conn_evt);
+          }
         }
       }
     }
@@ -1042,7 +1107,7 @@
   tNFA_CE_CB* p_cb = &nfa_ce_cb;
   tNFA_CONN_EVT_DATA evt_data;
 
-  NFA_TRACE_DEBUG0("Disabling local NDEF tag");
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("Disabling local NDEF tag");
 
   /* If local NDEF tag is in use, then disable it */
   if (p_cb->listen_info[NFA_CE_LISTEN_INFO_IDX_NDEF].flags &
@@ -1092,9 +1157,9 @@
     return true;
   }
 
-  NFA_TRACE_DEBUG5(
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
       "Configuring local NDEF tag: protocol_mask=%01x cur_size=%i, "
-      "max_size=%i, readonly=%i",
+      "max_size=%i, readonly=%i uid_len=%i",
       p_ce_msg->local_tag.protocol_mask, p_ce_msg->local_tag.ndef_cur_size,
       p_ce_msg->local_tag.ndef_max_size, p_ce_msg->local_tag.read_only,
       p_ce_msg->local_tag.uid_len);
@@ -1145,7 +1210,8 @@
       (NFA_PROTOCOL_MASK_T3T | NFA_PROTOCOL_MASK_ISO_DEP)) {
     /* Ok to set contents now */
     if (nfa_ce_set_content() != NFA_STATUS_OK) {
-      NFA_TRACE_ERROR0("nfa_ce_api_cfg_local_tag: could not set contents");
+      LOG(ERROR) << StringPrintf(
+          "nfa_ce_api_cfg_local_tag: could not set contents");
       nfa_dm_conn_cback_event_notify(NFA_CE_LOCAL_TAG_CONFIGURED_EVT,
                                      &conn_evt);
       return true;
@@ -1175,8 +1241,9 @@
   uint8_t i;
   uint8_t listen_info_idx = NFA_CE_LISTEN_INFO_IDX_INVALID;
 
-  NFA_TRACE_DEBUG1("Registering UICC/Felica/Type-4 tag listener. Type=%i",
-                   p_ce_msg->reg_listen.listen_type);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("Registering UICC/Felica/Type-4 tag listener. Type=%i",
+                      p_ce_msg->reg_listen.listen_type);
 
   /* Look for available entry in listen_info table */
   /* - If registering UICC listen, make sure there isn't another entry for the
@@ -1187,8 +1254,8 @@
         (p_cb->listen_info[i].flags & NFA_CE_LISTEN_INFO_IN_USE) &&
         (p_cb->listen_info[i].flags & NFA_CE_LISTEN_INFO_UICC) &&
         (p_cb->listen_info[i].ee_handle == p_ce_msg->reg_listen.ee_handle)) {
-      NFA_TRACE_ERROR1("UICC (0x%x) listening already specified",
-                       p_ce_msg->reg_listen.ee_handle);
+      LOG(ERROR) << StringPrintf("UICC (0x%x) listening already specified",
+                                 p_ce_msg->reg_listen.ee_handle);
       conn_evt.status = NFA_STATUS_FAILED;
       nfa_dm_conn_cback_event_notify(NFA_CE_UICC_LISTEN_CONFIGURED_EVT,
                                      &conn_evt);
@@ -1203,8 +1270,8 @@
 
   /* Add new entry to listen_info table */
   if (listen_info_idx == NFA_CE_LISTEN_INFO_IDX_INVALID) {
-    NFA_TRACE_ERROR1("Maximum listen callbacks exceeded (%i)",
-                     NFA_CE_LISTEN_INFO_MAX);
+    LOG(ERROR) << StringPrintf("Maximum listen callbacks exceeded (%i)",
+                               NFA_CE_LISTEN_INFO_MAX);
 
     if (p_ce_msg->reg_listen.listen_type == NFA_CE_REG_TYPE_UICC) {
       conn_evt.status = NFA_STATUS_FAILED;
@@ -1218,7 +1285,8 @@
     }
     return true;
   } else {
-    NFA_TRACE_DEBUG1("NFA_CE: adding listen_info entry %i", listen_info_idx);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("NFA_CE: adding listen_info entry %i", listen_info_idx);
 
     /* Store common parameters */
     /* Mark entry as 'in-use', and NFA_CE_LISTEN_INFO_START_NTF_PND */
@@ -1243,7 +1311,7 @@
             nfa_ce_handle_t4t_aid_evt);
         if (p_cb->listen_info[listen_info_idx].t4t_aid_handle ==
             CE_T4T_AID_HANDLE_INVALID) {
-          NFA_TRACE_ERROR0("Unable to register AID");
+          LOG(ERROR) << StringPrintf("Unable to register AID");
           p_cb->listen_info[listen_info_idx].flags = 0;
 
           /* Notify application */
@@ -1294,7 +1362,7 @@
   /* Start listening */
   conn_evt.status = nfa_ce_start_listening();
   if (conn_evt.status != NFA_STATUS_OK) {
-    NFA_TRACE_ERROR0(
+    LOG(ERROR) << StringPrintf(
         "nfa_ce_api_reg_listen: unable to register new listen params with DM");
     p_cb->listen_info[listen_info_idx].flags = 0;
   }
@@ -1305,8 +1373,9 @@
         NFA_CE_UICC_LISTEN_CONFIGURED_EVT, &conn_evt);
   } else {
     conn_evt.ce_registered.handle = NFA_HANDLE_GROUP_CE | listen_info_idx;
-    NFA_TRACE_DEBUG1("nfa_ce_api_reg_listen: registered handle 0x%04X",
-                     conn_evt.ce_registered.handle);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("nfa_ce_api_reg_listen: registered handle 0x%04X",
+                        conn_evt.ce_registered.handle);
     (*p_cb->listen_info[listen_info_idx].p_conn_cback)(NFA_CE_REGISTERED_EVT,
                                                        &conn_evt);
   }
@@ -1365,8 +1434,7 @@
     }
 
     if (listen_info_idx == NFA_CE_LISTEN_INFO_MAX) {
-      NFA_TRACE_ERROR0(
-          "nfa_ce_api_dereg_listen (): cannot find listen_info for UICC");
+      LOG(ERROR) << StringPrintf("cannot find listen_info for UICC");
       conn_evt.status = NFA_STATUS_INVALID_PARAM;
       nfa_dm_conn_cback_event_notify(NFA_CE_UICC_LISTEN_CONFIGURED_EVT,
                                      &conn_evt);
@@ -1403,8 +1471,8 @@
         nfa_ce_remove_listen_info_entry(listen_info_idx, true);
       }
     } else {
-      NFA_TRACE_ERROR0(
-          "nfa_ce_api_dereg_listen (): cannot find listen_info for "
+      LOG(ERROR) << StringPrintf(
+          "cannot find listen_info for "
           "Felica/T4tAID");
       conn_evt.status = NFA_STATUS_INVALID_PARAM;
       nfa_dm_conn_cback_event_notify(NFA_CE_DEREGISTERED_EVT, &conn_evt);
diff --git a/src/nfa/ce/nfa_ce_api.c b/src/nfa/ce/nfa_ce_api.cc
similarity index 92%
rename from src/nfa/ce/nfa_ce_api.c
rename to src/nfa/ce/nfa_ce_api.cc
index 836f0c3..ed8d8ba 100644
--- a/src/nfa/ce/nfa_ce_api.c
+++ b/src/nfa/ce/nfa_ce_api.cc
@@ -22,10 +22,16 @@
  *
  ******************************************************************************/
 #include <string.h>
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "nfa_api.h"
 #include "nfa_ce_int.h"
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 /*******************************************************************************
 **
@@ -47,7 +53,7 @@
   /* Validate handle */
   if ((listen_info != NFA_CE_LISTEN_INFO_UICC) &&
       ((handle & NFA_HANDLE_GROUP_MASK) != NFA_HANDLE_GROUP_CE)) {
-    NFA_TRACE_ERROR0("nfa_ce_api_reregister_listen: Invalid handle");
+    LOG(ERROR) << StringPrintf("nfa_ce_api_reregister_listen: Invalid handle");
     return (NFA_STATUS_BAD_HANDLE);
   }
 
@@ -61,7 +67,7 @@
 
     return (NFA_STATUS_OK);
   } else {
-    NFA_TRACE_ERROR0("nfa_ce_api_reregister_listen: Out of buffers");
+    LOG(ERROR) << StringPrintf("nfa_ce_api_reregister_listen: Out of buffers");
     return (NFA_STATUS_FAILED);
   }
 }
@@ -119,25 +125,26 @@
 {
   tNFA_CE_MSG* p_msg;
 
-  NFA_TRACE_API0("NFA_CeConfigureLocalTag ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (protocol_mask) {
     /* If any protocols are specified, then NDEF buffer pointer must be non-NULL
      */
     if (p_ndef_data == NULL) {
-      NFA_TRACE_ERROR0("NFA_CeConfigureLocalTag: NULL ndef data pointer");
+      LOG(ERROR) << StringPrintf(
+          "NFA_CeConfigureLocalTag: NULL ndef data pointer");
       return (NFA_STATUS_INVALID_PARAM);
     }
 
     if ((protocol_mask & NFA_PROTOCOL_MASK_T1T) ||
         (protocol_mask & NFA_PROTOCOL_MASK_T2T)) {
-      NFA_TRACE_ERROR0(
+      LOG(ERROR) << StringPrintf(
           "NFA_CeConfigureLocalTag: Cannot emulate Type 1 / Type 2 tag");
       return (NFA_STATUS_INVALID_PARAM);
     }
 
     if (uid_len) {
-      NFA_TRACE_ERROR1(
+      LOG(ERROR) << StringPrintf(
           "NFA_CeConfigureLocalTag: Cannot Set UID for Protocol_mask: 0x%x",
           protocol_mask);
       return (NFA_STATUS_INVALID_PARAM);
@@ -195,8 +202,8 @@
 #if (NFC_NFCEE_INCLUDED == TRUE)
   tNFA_CE_MSG* p_msg;
 
-  NFA_TRACE_API1("NFA_CeConfigureUiccListenTech () ee_handle = 0x%x",
-                 ee_handle);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("ee_handle = 0x%x", ee_handle);
 
   /* If tech_mask is zero, then app is disabling listening for specified uicc */
   if (tech_mask == 0) {
@@ -218,8 +225,8 @@
     return (NFA_STATUS_OK);
   }
 #else
-  NFA_TRACE_ERROR0(
-      "NFA_CeConfigureUiccListenTech () NFCEE related functions are not "
+  LOG(ERROR) << StringPrintf(
+      "NFCEE related functions are not "
       "enabled!");
 #endif
   return (NFA_STATUS_FAILED);
@@ -249,7 +256,7 @@
                                                tNFA_CONN_CBACK* p_conn_cback) {
   tNFA_CE_MSG* p_msg;
 
-  NFA_TRACE_API0("NFA_CeRegisterFelicaSystemCodeOnDH ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* Validate parameters */
   if (p_conn_cback == NULL) return (NFA_STATUS_INVALID_PARAM);
@@ -294,8 +301,7 @@
 **
 *******************************************************************************/
 tNFA_STATUS NFA_CeDeregisterFelicaSystemCodeOnDH(tNFA_HANDLE handle) {
-  NFA_TRACE_API1("NFA_CeDeregisterFelicaSystemCodeOnDH (): handle:0x%X",
-                 handle);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("handle:0x%X", handle);
   return (nfa_ce_api_deregister_listen(handle, NFA_CE_LISTEN_INFO_FELICA));
 }
 
@@ -325,7 +331,7 @@
                                   tNFA_CONN_CBACK* p_conn_cback) {
   tNFA_CE_MSG* p_msg;
 
-  NFA_TRACE_API0("NFA_CeRegisterAidOnDH ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* Validate parameters */
   if (p_conn_cback == NULL) return (NFA_STATUS_INVALID_PARAM);
@@ -368,7 +374,7 @@
 **
 *******************************************************************************/
 tNFA_STATUS NFA_CeDeregisterAidOnDH(tNFA_HANDLE handle) {
-  NFA_TRACE_API1("NFA_CeDeregisterAidOnDH (): handle:0x%X", handle);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("handle:0x%X", handle);
   return (nfa_ce_api_deregister_listen(handle, NFA_CE_LISTEN_INFO_T4T_AID));
 }
 
@@ -403,9 +409,10 @@
   tNFA_TECHNOLOGY_MASK use_mask =
       (NFA_TECHNOLOGY_MASK_A | NFA_TECHNOLOGY_MASK_B);
 
-  NFA_TRACE_API1("NFA_CeSetIsoDepListenTech (): 0x%x", tech_mask);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("0x%x", tech_mask);
   if (((tech_mask & use_mask) == 0) || ((tech_mask & ~use_mask) != 0)) {
-    NFA_TRACE_ERROR0("NFA_CeSetIsoDepListenTech: Invalid technology mask");
+    LOG(ERROR) << StringPrintf(
+        "NFA_CeSetIsoDepListenTech: Invalid technology mask");
     return (NFA_STATUS_INVALID_PARAM);
   }
 
diff --git a/src/nfa/ce/nfa_ce_main.c b/src/nfa/ce/nfa_ce_main.cc
similarity index 89%
rename from src/nfa/ce/nfa_ce_main.c
rename to src/nfa/ce/nfa_ce_main.cc
index 922d82e..d082969 100644
--- a/src/nfa/ce/nfa_ce_main.c
+++ b/src/nfa/ce/nfa_ce_main.cc
@@ -21,12 +21,17 @@
  *  This is the main implementation file for the NFA_CE
  *
  ******************************************************************************/
-#include <string.h>
+#include <string>
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "nfa_ce_api.h"
 #include "nfa_ce_int.h"
-#include "nfa_dm_int.h"
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 /* NFA_CE control block */
 tNFA_CE_CB nfa_ce_cb;
@@ -56,9 +61,7 @@
 /*****************************************************************************
 ** Local function prototypes
 *****************************************************************************/
-#if (BT_TRACE_VERBOSE == TRUE)
-static char* nfa_ce_evt_2_str(uint16_t event);
-#endif
+static std::string nfa_ce_evt_2_str(uint16_t event);
 
 /*******************************************************************************
 **
@@ -70,7 +73,7 @@
 **
 *******************************************************************************/
 void nfa_ce_init(void) {
-  NFA_TRACE_DEBUG0("nfa_ce_init ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* initialize control block */
   memset(&nfa_ce_cb, 0, sizeof(tNFA_CE_CB));
@@ -133,8 +136,8 @@
   tNFA_CE_CB* p_cb = &nfa_ce_cb;
   uint8_t listen_info_idx;
 
-  NFA_TRACE_DEBUG1("nfa_ce_proc_nfcc_power_mode (): nfcc_power_mode=%d",
-                   nfcc_power_mode);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfcc_power_mode=%d", nfcc_power_mode);
 
   /* if NFCC power mode is change to full power */
   if (nfcc_power_mode == NFA_DM_PWR_MODE_FULL) {
@@ -170,14 +173,9 @@
   uint16_t act_idx;
   bool freebuf = true;
 
-#if (BT_TRACE_VERBOSE == TRUE)
-  NFA_TRACE_EVENT3("nfa_ce_handle_event event: %s (0x%02x), flags: %08x",
-                   nfa_ce_evt_2_str(p_msg->event), p_msg->event,
-                   nfa_ce_cb.flags);
-#else
-  NFA_TRACE_EVENT2("nfa_ce_handle_event event: 0x%x, flags: %08x", p_msg->event,
-                   nfa_ce_cb.flags);
-#endif
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "nfa_ce_handle_event event: %s (0x%02x), flags: %08x",
+      nfa_ce_evt_2_str(p_msg->event).c_str(), p_msg->event, nfa_ce_cb.flags);
 
   /* Get NFA_RW sub-event */
   act_idx = (p_msg->event & 0x00FF);
@@ -193,7 +191,6 @@
   return freebuf;
 }
 
-#if (BT_TRACE_VERBOSE == TRUE)
 /*******************************************************************************
 **
 ** Function         nfa_ce_evt_2_str
@@ -201,28 +198,21 @@
 ** Description      convert nfc evt to string
 **
 *******************************************************************************/
-static char* nfa_ce_evt_2_str(uint16_t event) {
+static std::string nfa_ce_evt_2_str(uint16_t event) {
   switch (event) {
     case NFA_CE_API_CFG_LOCAL_TAG_EVT:
       return "NFA_CE_API_CFG_LOCAL_TAG_EVT";
-
     case NFA_CE_API_REG_LISTEN_EVT:
       return "NFA_CE_API_REG_LISTEN_EVT";
-
     case NFA_CE_API_DEREG_LISTEN_EVT:
       return "NFA_CE_API_DEREG_LISTEN_EVT";
-
     case NFA_CE_API_CFG_ISODEP_TECH_EVT:
       return "NFA_CE_API_CFG_ISODEP_TECH_EVT";
-
     case NFA_CE_ACTIVATE_NTF_EVT:
       return "NFA_CE_ACTIVATE_NTF_EVT";
-
     case NFA_CE_DEACTIVATE_NTF_EVT:
       return "NFA_CE_DEACTIVATE_NTF_EVT";
-
     default:
       return "Unknown";
   }
 }
-#endif /* BT_TRACE_VERBOSE */
diff --git a/src/nfa/dm/nfa_dm_act.c b/src/nfa/dm/nfa_dm_act.cc
similarity index 91%
rename from src/nfa/dm/nfa_dm_act.c
rename to src/nfa/dm/nfa_dm_act.cc
index e3964c8..59d55a6 100644
--- a/src/nfa/dm/nfa_dm_act.c
+++ b/src/nfa/dm/nfa_dm_act.cc
@@ -23,26 +23,30 @@
  *
  ******************************************************************************/
 #include <string.h>
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "nci_hmsgs.h"
 #include "nfa_api.h"
 #include "nfa_ce_int.h"
-#include "nfa_dm_int.h"
 #include "nfa_p2p_int.h"
 #include "nfa_rw_api.h"
 #include "nfa_rw_int.h"
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
-#include "nfc_api.h"
 
 #if (NFC_NFCEE_INCLUDED == TRUE)
 #include "nfa_ee_int.h"
-#include "nfa_hci_int.h"
+
 #endif
 
 #if (NFA_SNEP_INCLUDED == TRUE)
 #include "nfa_snep_int.h"
 #endif
 
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
+
 /* This is the timeout value to guarantee disable is performed within reasonable
  * amount of time */
 #ifndef NFA_DM_DISABLE_TIMEOUT_VAL
@@ -89,9 +93,8 @@
 static void nfa_dm_nfcc_power_mode_proc_complete_cback(void) {
   tNFA_DM_PWR_MODE_CHANGE power_mode_change;
 
-  NFA_TRACE_DEBUG1(
-      "nfa_dm_nfcc_power_mode_proc_complete_cback () nfcc_pwr_mode = 0x%x",
-      nfa_dm_cb.nfcc_pwr_mode);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfcc_pwr_mode = 0x%x", nfa_dm_cb.nfcc_pwr_mode);
 
   /* if NFCC power state is change to full power */
   if (nfa_dm_cb.nfcc_pwr_mode != NFA_DM_PWR_MODE_OFF_SLEEP) {
@@ -105,8 +108,9 @@
 
   power_mode_change.status = NFA_STATUS_OK;
   power_mode_change.power_mode = nfa_dm_cb.nfcc_pwr_mode;
-  (*nfa_dm_cb.p_dm_cback)(NFA_DM_PWR_MODE_CHANGE_EVT,
-                          (tNFA_DM_CBACK_DATA*)&power_mode_change);
+  tNFA_DM_CBACK_DATA nfa_dm_cback_data;
+  nfa_dm_cback_data.power_mode = power_mode_change;
+  (*nfa_dm_cb.p_dm_cback)(NFA_DM_PWR_MODE_CHANGE_EVT, &nfa_dm_cback_data);
 }
 /*******************************************************************************
 **
@@ -204,15 +208,15 @@
 **
 *******************************************************************************/
 void nfa_dm_proc_nfcc_power_mode(uint8_t nfcc_power_mode) {
-  NFA_TRACE_DEBUG1("nfa_dm_proc_nfcc_power_mode (): nfcc_power_mode=%d",
-                   nfcc_power_mode);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfcc_power_mode=%d", nfcc_power_mode);
 
   /* if NFCC power mode is change to full power */
   if (nfcc_power_mode == NFA_DM_PWR_MODE_FULL) {
     memset(&nfa_dm_cb.params, 0x00, sizeof(tNFA_DM_PARAMS));
-    NFA_TRACE_DEBUG2("setcfg_pending_mask=0x%x, setcfg_pending_num=%d",
-                     nfa_dm_cb.setcfg_pending_mask,
-                     nfa_dm_cb.setcfg_pending_num);
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "setcfg_pending_mask=0x%x, setcfg_pending_num=%d",
+        nfa_dm_cb.setcfg_pending_mask, nfa_dm_cb.setcfg_pending_num);
     nfa_dm_cb.setcfg_pending_mask = 0;
     nfa_dm_cb.setcfg_pending_num = 0;
 
@@ -257,17 +261,12 @@
 static void nfa_dm_nfc_response_cback(tNFC_RESPONSE_EVT event,
                                       tNFC_RESPONSE* p_data) {
   tNFA_DM_CBACK_DATA dm_cback_data;
-  tNFA_GET_CONFIG* p_nfa_get_confg;
   tNFA_CONN_EVT_DATA conn_evt;
   uint8_t dm_cback_evt;
   uint8_t max_ee = 0;
 
-#if (BT_TRACE_VERBOSE == TRUE)
-  NFA_TRACE_DEBUG2("nfa_dm_nfc_response_cback () %s(0x%x)",
-                   nfa_dm_nfc_revt_2_str(event), event);
-#else
-  NFA_TRACE_DEBUG1("nfa_dm_nfc_response_cback () event=0x%x", event);
-#endif
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("%s(0x%x)", nfa_dm_nfc_revt_2_str(event).c_str(), event);
 
   switch (event) {
     case NFC_ENABLE_REVT: /* 0  Enable event */
@@ -315,28 +314,19 @@
       } else {
         /* This should not occur (means we got a SET_CONFIG_NTF that's
          * unaccounted for */
-        NFA_TRACE_ERROR0("NFA received unexpected NFC_SET_CONFIG_REVT");
+        LOG(ERROR) << StringPrintf(
+            "NFA received unexpected NFC_SET_CONFIG_REVT");
       }
       break;
 
     case NFC_GET_CONFIG_REVT: /* 3  Get Config Response */
       if (p_data->get_config.status == NFC_STATUS_OK) {
-        p_nfa_get_confg = (tNFA_GET_CONFIG*)GKI_getbuf(
-            (uint16_t)(sizeof(tNFA_GET_CONFIG) + p_data->get_config.tlv_size));
-        if (p_nfa_get_confg != NULL) {
-          p_nfa_get_confg->status = NFA_STATUS_OK;
-          p_nfa_get_confg->tlv_size = p_data->get_config.tlv_size;
-          memcpy(p_nfa_get_confg->param_tlvs, p_data->get_config.p_param_tlvs,
-                 p_data->get_config.tlv_size);
-          (*nfa_dm_cb.p_dm_cback)(NFA_DM_GET_CONFIG_EVT,
-                                  (tNFA_DM_CBACK_DATA*)p_nfa_get_confg);
-
-          GKI_freebuf(p_nfa_get_confg);
-          return;
-        } else {
-          NFA_TRACE_DEBUG0(
-              "nfa_dm_nfc_response_cback unable to allocate buffer");
-        }
+        tNFA_GET_CONFIG* p_nfa_get_confg = &dm_cback_data.get_config;
+        p_nfa_get_confg->status = NFA_STATUS_OK;
+        p_nfa_get_confg->tlv_size = p_data->get_config.tlv_size;
+        p_nfa_get_confg->param_tlvs = p_data->get_config.p_param_tlvs;
+        (*nfa_dm_cb.p_dm_cback)(NFA_DM_GET_CONFIG_EVT, &dm_cback_data);
+        return;
       }
 
       /* Return result of getconfig to the app */
@@ -349,6 +339,7 @@
     case NFC_NFCEE_INFO_REVT:     /* NFCEE Discover Notification */
     case NFC_EE_ACTION_REVT:      /* EE Action notification */
     case NFC_NFCEE_MODE_SET_REVT: /* NFCEE Mode Set response */
+    case NFC_NFCEE_STATUS_REVT:   /* NFCEE Status notification*/
     case NFC_SET_ROUTING_REVT:    /* Configure Routing response */
       nfa_ee_proc_evt(event, p_data);
       break;
@@ -401,7 +392,8 @@
 
     case NFC_NFCC_TIMEOUT_REVT:
     case NFC_NFCC_TRANSPORT_ERR_REVT:
-      NFA_TRACE_DEBUG1("flags:0x%08x", nfa_dm_cb.flags);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("flags:0x%08x", nfa_dm_cb.flags);
       dm_cback_evt = (event == NFC_NFCC_TIMEOUT_REVT)
                          ? NFA_DM_NFCC_TIMEOUT_EVT
                          : NFA_DM_NFCC_TRANSPORT_ERR_EVT;
@@ -438,7 +430,7 @@
 *******************************************************************************/
 bool nfa_dm_enable(tNFA_DM_MSG* p_data) {
   tNFA_DM_CBACK_DATA dm_cback_data;
-  NFA_TRACE_DEBUG0("nfa_dm_enable ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* Check if NFA is already enabled */
   if (!(nfa_dm_cb.flags & NFA_DM_FLAGS_DM_IS_ACTIVE)) {
@@ -455,7 +447,7 @@
     /* Enable NFC stack */
     NFC_Enable(nfa_dm_nfc_response_cback);
   } else {
-    NFA_TRACE_ERROR0("nfa_dm_enable: ERROR ALREADY ENABLED.");
+    LOG(ERROR) << StringPrintf("nfa_dm_enable: ERROR ALREADY ENABLED.");
     dm_cback_data.status = NFA_STATUS_ALREADY_STARTED;
     (*(p_data->enable.p_dm_cback))(NFA_DM_ENABLE_EVT, &dm_cback_data);
   }
@@ -473,9 +465,8 @@
 **
 *******************************************************************************/
 bool nfa_dm_disable(tNFA_DM_MSG* p_data) {
-  tNFC_DEACT_TYPE deactivate_type = NFA_DEACTIVATE_TYPE_IDLE;
-
-  NFA_TRACE_DEBUG1("nfa_dm_disable (): graceful:%d", p_data->disable.graceful);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("graceful:%d", p_data->disable.graceful);
 
   if (p_data->disable.graceful) {
     /* if RF discovery is enabled */
@@ -489,8 +480,10 @@
         }
       } else {
         nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_DISABLING;
-        nfa_dm_disc_sm_execute(NFA_DM_RF_DEACTIVATE_CMD,
-                               (tNFA_DM_RF_DISC_DATA*)&deactivate_type);
+        tNFA_DM_RF_DISC_DATA nfa_dm_rf_disc_data;
+        nfa_dm_rf_disc_data.deactivate_type = NFA_DEACTIVATE_TYPE_IDLE;
+
+        nfa_dm_disc_sm_execute(NFA_DM_RF_DEACTIVATE_CMD, &nfa_dm_rf_disc_data);
         if ((nfa_dm_cb.disc_cb.disc_flags &
              (NFA_DM_DISC_FLAGS_W4_RSP | NFA_DM_DISC_FLAGS_W4_NTF)) == 0) {
           /* not waiting to deactivate, clear the flag now */
@@ -522,11 +515,11 @@
 **
 *******************************************************************************/
 void nfa_dm_disable_complete(void) {
-  NFA_TRACE_DEBUG0("nfa_dm_disable_complete ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if ((nfa_dm_cb.flags & NFA_DM_FLAGS_DM_DISABLING_NFC) == 0) {
-    NFA_TRACE_DEBUG0(
-        "nfa_dm_disable_complete (): proceeding with nfc core shutdown.");
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("proceeding with nfc core shutdown.");
 
     nfa_dm_cb.flags |= NFA_DM_FLAGS_DM_DISABLING_NFC;
 
@@ -602,12 +595,12 @@
   tNFC_STATUS status;
   tNFA_DM_CBACK_DATA dm_cback_data;
 
-  NFA_TRACE_DEBUG0(" nfa_dm_set_power_sub_state ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   nfa_dm_cb.power_state = p_data->set_power_state.screen_state;
   if (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_LISTEN_ACTIVE) {
-    NFA_TRACE_DEBUG0(
-        "nfa_dm_set_power_sub_state () : NFA_DM_RFST_LISTEN_ACTIVE");
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("NFA_DM_RFST_LISTEN_ACTIVE");
     /* NFCC will give semantic error for power sub state command in Rf listen
      * active state */
     status = NFC_STATUS_SEMANTIC_ERROR;
@@ -655,7 +648,7 @@
 void nfa_dm_rel_excl_rf_control_and_notify(void) {
   tNFA_CONN_EVT_DATA conn_evt;
 
-  NFA_TRACE_DEBUG0("nfa_dm_rel_excl_rf_control_and_notify ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* Exclusive RF control stopped. Notify app */
   nfa_dm_cb.flags &= ~NFA_DM_FLAGS_EXCL_RF_ACTIVE;
@@ -683,7 +676,7 @@
 bool nfa_dm_act_request_excl_rf_ctrl(tNFA_DM_MSG* p_data) {
   tNFA_CONN_EVT_DATA conn_evt;
 
-  NFA_TRACE_DEBUG0("nfa_dm_act_request_excl_rf_ctrl ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (!nfa_dm_cb.p_excl_conn_cback) {
     if (nfa_dm_cb.disc_cb.disc_state != NFA_DM_RFST_IDLE) {
@@ -704,7 +697,7 @@
                                 &p_data->req_excl_rf_ctrl.listen_cfg,
                                 nfa_dm_excl_disc_cback);
   } else {
-    NFA_TRACE_ERROR0("Exclusive rf control already requested");
+    LOG(ERROR) << StringPrintf("Exclusive rf control already requested");
 
     conn_evt.status = NFA_STATUS_FAILED;
     (*p_data->req_excl_rf_ctrl.p_conn_cback)(
@@ -723,8 +716,9 @@
 ** Returns          TRUE (message buffer to be freed by caller)
 **
 *******************************************************************************/
-bool nfa_dm_act_release_excl_rf_ctrl(tNFA_DM_MSG* p_data) {
-  NFA_TRACE_DEBUG0("nfa_dm_act_release_excl_rf_ctrl ()");
+bool nfa_dm_act_release_excl_rf_ctrl(__attribute__((unused))
+                                     tNFA_DM_MSG* p_data) {
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* nfa_dm_rel_excl_rf_control_and_notify() is called when discovery state goes
    * IDLE */
@@ -757,7 +751,7 @@
   tNFA_CONN_EVT_DATA conn_evt;
   tNFA_DEACTIVATE_TYPE deact_type;
 
-  NFA_TRACE_DEBUG0("nfa_dm_act_deactivate ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* Always allow deactivate to IDLE */
   /* Do not allow deactivate to SLEEP for T1T,NFCDEP, ISO15693 */
@@ -806,7 +800,7 @@
     }
   }
 
-  NFA_TRACE_ERROR0("nfa_dm_act_deactivate (): invalid protocol, mode or state");
+  LOG(ERROR) << StringPrintf("invalid protocol, mode or state");
 
   /* Notify error to application */
   conn_evt.status = NFA_STATUS_FAILED;
@@ -825,7 +819,7 @@
 **
 *******************************************************************************/
 bool nfa_dm_act_power_off_sleep(tNFA_DM_MSG* p_data) {
-  NFA_TRACE_DEBUG0("nfa_dm_act_power_off_sleep ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   NFC_SetPowerOffSleep((bool)(p_data->hdr.layer_specific));
 
@@ -844,7 +838,7 @@
 bool nfa_dm_act_reg_vsc(tNFA_DM_MSG* p_data) {
   if (NFC_RegVSCback(p_data->reg_vsc.is_register, p_data->reg_vsc.p_cback) !=
       NFC_STATUS_OK) {
-    NFA_TRACE_ERROR0("NFC_RegVSCback failed");
+    LOG(ERROR) << StringPrintf("NFC_RegVSCback failed");
   }
   return true;
 }
@@ -910,7 +904,7 @@
   tNFA_TECHNOLOGY_MASK poll_tech_mask;
   tNFA_DM_DISC_TECH_PROTO_MASK poll_disc_mask = 0;
 
-  NFA_TRACE_DEBUG0("nfa_dm_start_polling ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   poll_tech_mask = nfa_dm_cb.poll_mask;
 
@@ -978,7 +972,7 @@
 bool nfa_dm_act_enable_polling(tNFA_DM_MSG* p_data) {
   tNFA_CONN_EVT_DATA evt_data;
 
-  NFA_TRACE_DEBUG0("nfa_dm_act_enable_polling ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if ((!(nfa_dm_cb.flags & NFA_DM_FLAGS_POLLING_ENABLED)) &&
       (!(nfa_dm_cb.flags & NFA_DM_FLAGS_EXCL_RF_ACTIVE))) {
@@ -992,7 +986,7 @@
       return true;
     }
   } else {
-    NFA_TRACE_ERROR0("nfa_dm_act_enable_polling (): already started");
+    LOG(ERROR) << StringPrintf("already started");
   }
 
   /* send NFA_POLL_ENABLED_EVT with NFA_STATUS_FAILED */
@@ -1012,7 +1006,7 @@
 **
 *******************************************************************************/
 static bool nfa_dm_deactivate_polling(void) {
-  NFA_TRACE_DEBUG0("nfa_dm_deactivate_polling ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if ((nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_W4_ALL_DISCOVERIES) ||
       (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_W4_HOST_SELECT)) {
@@ -1040,10 +1034,10 @@
 ** Returns          TRUE (message buffer to be freed by caller)
 **
 *******************************************************************************/
-bool nfa_dm_act_disable_polling(tNFA_DM_MSG* p_data) {
+bool nfa_dm_act_disable_polling(__attribute__((unused)) tNFA_DM_MSG* p_data) {
   tNFA_CONN_EVT_DATA evt_data;
 
-  NFA_TRACE_DEBUG0("nfa_dm_act_disable_polling ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (nfa_dm_cb.poll_disc_handle != NFA_HANDLE_INVALID) {
     nfa_dm_cb.flags &= ~NFA_DM_FLAGS_POLLING_ENABLED;
@@ -1074,10 +1068,10 @@
 ** Returns          TRUE (message buffer to be freed by caller)
 **
 *******************************************************************************/
-bool nfa_dm_act_enable_listening(tNFA_DM_MSG* p_data) {
+bool nfa_dm_act_enable_listening(__attribute__((unused)) tNFA_DM_MSG* p_data) {
   tNFA_CONN_EVT_DATA evt_data;
 
-  NFA_TRACE_DEBUG0("nfa_dm_act_enable_listening ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   nfa_dm_cb.flags &= ~NFA_DM_FLAGS_LISTEN_DISABLED;
   evt_data.status = NFA_STATUS_OK;
@@ -1095,10 +1089,10 @@
 ** Returns          TRUE (message buffer to be freed by caller)
 **
 *******************************************************************************/
-bool nfa_dm_act_disable_listening(tNFA_DM_MSG* p_data) {
+bool nfa_dm_act_disable_listening(__attribute__((unused)) tNFA_DM_MSG* p_data) {
   tNFA_CONN_EVT_DATA evt_data;
 
-  NFA_TRACE_DEBUG0("nfa_dm_act_disable_listening ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   nfa_dm_cb.flags |= NFA_DM_FLAGS_LISTEN_DISABLED;
   evt_data.status = NFA_STATUS_OK;
@@ -1116,10 +1110,10 @@
 ** Returns          TRUE (message buffer to be freed by caller)
 **
 *******************************************************************************/
-bool nfa_dm_act_pause_p2p(tNFA_DM_MSG* p_data) {
+bool nfa_dm_act_pause_p2p(__attribute__((unused)) tNFA_DM_MSG* p_data) {
   tNFA_CONN_EVT_DATA evt_data;
 
-  NFA_TRACE_DEBUG0("nfa_dm_act_pause_p2p ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   nfa_dm_cb.flags |= NFA_DM_FLAGS_P2P_PAUSED;
   evt_data.status = NFA_STATUS_OK;
@@ -1137,10 +1131,10 @@
 ** Returns          TRUE (message buffer to be freed by caller)
 **
 *******************************************************************************/
-bool nfa_dm_act_resume_p2p(tNFA_DM_MSG* p_data) {
+bool nfa_dm_act_resume_p2p(__attribute__((unused)) tNFA_DM_MSG* p_data) {
   tNFA_CONN_EVT_DATA evt_data;
 
-  NFA_TRACE_DEBUG0("nfa_dm_act_resume_p2p ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   nfa_dm_cb.flags &= ~NFA_DM_FLAGS_P2P_PAUSED;
   evt_data.status = NFA_STATUS_OK;
@@ -1161,7 +1155,7 @@
 bool nfa_dm_act_send_raw_frame(tNFA_DM_MSG* p_data) {
   tNFC_STATUS status = NFC_STATUS_FAILED;
 
-  NFA_TRACE_DEBUG0("nfa_dm_act_send_raw_frame ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* If NFC link is activated */
   if ((nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_POLL_ACTIVE) ||
@@ -1209,8 +1203,8 @@
 **
 *******************************************************************************/
 bool nfa_dm_set_p2p_listen_tech(tNFA_DM_MSG* p_data) {
-  NFA_TRACE_DEBUG1("nfa_dm_set_p2p_listen_tech ()  tech_mask = %d",
-                   p_data->set_p2p_listen_tech.tech_mask);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("tech_mask = %d", p_data->set_p2p_listen_tech.tech_mask);
 
   nfa_p2p_update_listen_tech(p_data->set_p2p_listen_tech.tech_mask);
   nfa_dm_conn_cback_event_notify(NFA_SET_P2P_LISTEN_TECH_EVT, NULL);
@@ -1227,10 +1221,11 @@
 ** Returns          TRUE (message buffer to be freed by caller)
 **
 *******************************************************************************/
-bool nfa_dm_act_start_rf_discovery(tNFA_DM_MSG* p_data) {
+bool nfa_dm_act_start_rf_discovery(__attribute__((unused))
+                                   tNFA_DM_MSG* p_data) {
   tNFA_CONN_EVT_DATA evt_data;
 
-  NFA_TRACE_DEBUG0("nfa_dm_act_start_rf_discovery ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_ENABLED) {
     evt_data.status = NFA_STATUS_OK;
@@ -1256,10 +1251,10 @@
 ** Returns          TRUE (message buffer to be freed by caller)
 **
 *******************************************************************************/
-bool nfa_dm_act_stop_rf_discovery(tNFA_DM_MSG* p_data) {
+bool nfa_dm_act_stop_rf_discovery(__attribute__((unused)) tNFA_DM_MSG* p_data) {
   tNFA_CONN_EVT_DATA evt_data;
 
-  NFA_TRACE_DEBUG0("nfa_dm_act_stop_rf_discovery ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_ENABLED) ||
       (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_IDLE)) {
@@ -1322,7 +1317,7 @@
 **
 *******************************************************************************/
 bool nfa_dm_act_select(tNFA_DM_MSG* p_data) {
-  NFA_TRACE_DEBUG0("nfa_dm_act_select ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   nfa_dm_rf_discover_select(p_data->select.rf_disc_id, p_data->select.protocol,
                             p_data->select.rf_interface);
@@ -1341,7 +1336,7 @@
 bool nfa_dm_act_update_rf_params(tNFA_DM_MSG* p_data) {
   tNFA_CONN_EVT_DATA conn_evt;
 
-  NFA_TRACE_DEBUG0("nfa_dm_act_update_rf_params ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (NFC_UpdateRFCommParams(&p_data->update_rf_params.params) !=
       NFC_STATUS_OK) {
@@ -1361,11 +1356,10 @@
 ** Returns          TRUE (message buffer to be freed by caller)
 **
 *******************************************************************************/
-bool nfa_dm_act_disable_timeout(tNFA_DM_MSG* p_data) {
-  tNFA_DM_API_DISABLE disable;
-
-  disable.graceful = false;
-  nfa_dm_disable((tNFA_DM_MSG*)&disable);
+bool nfa_dm_act_disable_timeout(__attribute__((unused)) tNFA_DM_MSG* p_data) {
+  tNFA_DM_MSG nfa_dm_msg;
+  nfa_dm_msg.disable.graceful = false;
+  nfa_dm_disable(&nfa_dm_msg);
   return true;
 }
 
@@ -1379,7 +1373,7 @@
 **
 *******************************************************************************/
 void nfa_dm_act_conn_cback_notify(uint8_t event, tNFA_CONN_EVT_DATA* p_data) {
-  NFA_TRACE_DEBUG1("nfa_dm_act_conn_cback_notify (): event:0x%X", event);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("event:0x%X", event);
 
   /* Notify event using appropriate CONN_CBACK */
   nfa_dm_conn_cback_event_notify(event, p_data);
@@ -1413,12 +1407,12 @@
 ** Returns          None
 **
 *******************************************************************************/
-static void nfa_dm_act_data_cback(uint8_t conn_id, tNFC_CONN_EVT event,
-                                  tNFC_CONN* p_data) {
+static void nfa_dm_act_data_cback(__attribute__((unused)) uint8_t conn_id,
+                                  tNFC_CONN_EVT event, tNFC_CONN* p_data) {
   NFC_HDR* p_msg;
   tNFA_CONN_EVT_DATA evt_data;
 
-  NFA_TRACE_DEBUG1("nfa_dm_act_data_cback (): event = 0x%X", event);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("event = 0x%X", event);
 
   if (event == NFC_DATA_CEVT) {
     p_msg = (NFC_HDR*)p_data->data.p_data;
@@ -1432,8 +1426,8 @@
 
       GKI_freebuf(p_msg);
     } else {
-      NFA_TRACE_ERROR0(
-          "nfa_dm_act_data_cback (): received NFC_DATA_CEVT with NULL data "
+      LOG(ERROR) << StringPrintf(
+          "received NFC_DATA_CEVT with NULL data "
           "pointer");
     }
   } else if (event == NFC_DEACTIVATE_CEVT) {
@@ -1454,7 +1448,7 @@
                                    tNFC_DISCOVER* p_data) {
   tNFA_CONN_EVT_DATA evt_data;
 
-  NFA_TRACE_DEBUG1("nfa_dm_excl_disc_cback (): event:0x%02X", event);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("event:0x%02X", event);
 
   switch (event) {
     case NFA_DM_RF_DISC_START_EVT:
@@ -1539,7 +1533,7 @@
       break;
 
     default:
-      NFA_TRACE_ERROR0("Unexpected event");
+      LOG(ERROR) << StringPrintf("Unexpected event");
       break;
   }
 }
@@ -1557,7 +1551,7 @@
                                    tNFC_DISCOVER* p_data) {
   tNFA_CONN_EVT_DATA evt_data;
 
-  NFA_TRACE_DEBUG1("nfa_dm_poll_disc_cback (): event:0x%02X", event);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("event:0x%02X", event);
 
   switch (event) {
     case NFA_DM_RF_DISC_START_EVT:
@@ -1597,7 +1591,7 @@
                 nfa_dm_cb.p_activate_ntf = NULL;
               }
             } else {
-              NFA_TRACE_DEBUG0("P2P is paused");
+              DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("P2P is paused");
               nfa_dm_notify_activation_status(NFA_STATUS_OK, NULL);
             }
           }
@@ -1709,7 +1703,7 @@
   tNFC_RF_TECH_PARAMS* p_tech_params;
   uint8_t *p_nfcid = NULL, nfcid_len;
 
-  NFA_TRACE_DEBUG1("nfa_dm_notify_activation_status (): status:0x%X", status);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("status:0x%X", status);
 
   if (!nfa_dm_cb.p_activate_ntf) {
     /* this is for NFA P2P listen */
@@ -1815,7 +1809,6 @@
   nfa_dm_cb.p_activate_ntf = NULL;
 }
 
-#if (BT_TRACE_VERBOSE == TRUE)
 /*******************************************************************************
 **
 ** Function         nfa_dm_nfc_revt_2_str
@@ -1823,62 +1816,45 @@
 ** Description      convert nfc revt to string
 **
 *******************************************************************************/
-char* nfa_dm_nfc_revt_2_str(tNFC_RESPONSE_EVT event) {
+std::string nfa_dm_nfc_revt_2_str(tNFC_RESPONSE_EVT event) {
   switch (event) {
     case NFC_ENABLE_REVT:
       return "NFC_ENABLE_REVT";
-
     case NFC_DISABLE_REVT:
       return "NFC_DISABLE_REVT";
-
     case NFC_SET_CONFIG_REVT:
       return "NFC_SET_CONFIG_REVT";
-
     case NFC_GET_CONFIG_REVT:
       return "NFC_GET_CONFIG_REVT";
-
     case NFC_NFCEE_DISCOVER_REVT:
       return "NFC_NFCEE_DISCOVER_REVT";
-
     case NFC_NFCEE_INFO_REVT:
       return "NFC_NFCEE_INFO_REVT";
-
     case NFC_NFCEE_MODE_SET_REVT:
       return "NFC_NFCEE_MODE_SET_REVT";
-
     case NFC_RF_FIELD_REVT:
       return "NFC_RF_FIELD_REVT";
-
     case NFC_EE_ACTION_REVT:
       return "NFC_EE_ACTION_REVT";
-
     case NFC_EE_DISCOVER_REQ_REVT:
       return "NFC_EE_DISCOVER_REQ_REVT";
-
     case NFC_SET_ROUTING_REVT:
       return "NFC_SET_ROUTING_REVT";
-
     case NFC_GET_ROUTING_REVT:
       return "NFC_GET_ROUTING_REVT";
-
     case NFC_GEN_ERROR_REVT:
       return "NFC_GEN_ERROR_REVT";
-
     case NFC_NFCC_RESTART_REVT:
       return "NFC_NFCC_RESTART_REVT";
-
     case NFC_NFCC_TIMEOUT_REVT:
       return "NFC_NFCC_TIMEOUT_REVT";
-
     case NFC_NFCC_TRANSPORT_ERR_REVT:
       return "NFC_NFCC_TRANSPORT_ERR_REVT";
-
     case NFC_NFCC_POWER_OFF_REVT:
       return "NFC_NFCC_POWER_OFF_REVT";
-
+    case NFC_NFCEE_STATUS_REVT:
+      return "NFC_NFCEE_STATUS_REVT";
     default:
       return "unknown revt";
-      break;
   }
 }
-#endif /* BT_VERBOSE */
diff --git a/src/nfa/dm/nfa_dm_api.c b/src/nfa/dm/nfa_dm_api.cc
similarity index 92%
rename from src/nfa/dm/nfa_dm_api.c
rename to src/nfa/dm/nfa_dm_api.cc
index 6d62375..197174a 100644
--- a/src/nfa/dm/nfa_dm_api.c
+++ b/src/nfa/dm/nfa_dm_api.cc
@@ -21,15 +21,19 @@
  *  NFA interface for device management
  *
  ******************************************************************************/
-#include <log/log.h>
 #include <string.h>
 
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+#include <log/log.h>
+
 #include "ndef_utils.h"
 #include "nfa_api.h"
 #include "nfa_ce_int.h"
-#include "nfa_dm_int.h"
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 /*****************************************************************************
 **  Constants
@@ -53,7 +57,7 @@
 **
 *******************************************************************************/
 void NFA_Init(tHAL_NFC_ENTRY* p_hal_entry_tbl) {
-  NFA_TRACE_API0("NFA_Init ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
   nfa_sys_init();
   nfa_dm_init();
   nfa_p2p_init();
@@ -95,11 +99,11 @@
                        tNFA_CONN_CBACK* p_conn_cback) {
   tNFA_DM_API_ENABLE* p_msg;
 
-  NFA_TRACE_API0("NFA_Enable ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* Validate parameters */
   if ((!p_dm_cback) || (!p_conn_cback)) {
-    NFA_TRACE_ERROR0("NFA_Enable (): error null callback");
+    LOG(ERROR) << StringPrintf("error null callback");
     return (NFA_STATUS_FAILED);
   }
 
@@ -140,7 +144,8 @@
 tNFA_STATUS NFA_Disable(bool graceful) {
   tNFA_DM_API_DISABLE* p_msg;
 
-  NFA_TRACE_API1("NFA_Disable (graceful=%i)", graceful);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("NFA_Disable (graceful=%i)", graceful);
 
   p_msg = (tNFA_DM_API_DISABLE*)GKI_getbuf(sizeof(tNFA_DM_API_DISABLE));
   if (p_msg != NULL) {
@@ -154,6 +159,19 @@
 
   return (NFA_STATUS_FAILED);
 }
+
+/*******************************************************************************
+**
+** Function         NFA_GetNCIVersion
+**
+** Description      Returns the NCI version of the NFCC to upper layer
+**
+**
+** Returns          NCI version NCI2.0 / NCI1.0
+**
+*******************************************************************************/
+uint8_t NFA_GetNCIVersion() { return NFC_GetNCIVersion(); }
+
 /*******************************************************************************
 **
 ** Function         NFA_SetPowerSubStateForScreenState
@@ -166,7 +184,8 @@
 **
 *******************************************************************************/
 tNFA_STATUS NFA_SetPowerSubStateForScreenState(uint8_t screenState) {
-  NFA_TRACE_API2("%s: state:0x%X", __func__, screenState);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("%s: state:0x%X", __func__, screenState);
 
   uint8_t nci_scren_state = 0xFF;
   uint16_t buf_size = sizeof(tNFA_DM_API_SET_POWER_SUB_STATE);
@@ -190,7 +209,8 @@
         break;
 
       default:
-        NFA_TRACE_API1("%s, unknown screen state", __func__);
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("%s, unknown screen state", __func__);
         break;
     }
 
@@ -222,7 +242,7 @@
 tNFA_STATUS NFA_SetConfig(tNFA_PMID param_id, uint8_t length, uint8_t* p_data) {
   tNFA_DM_API_SET_CONFIG* p_msg;
 
-  NFA_TRACE_API1("NFA_SetConfig (): param_id:0x%X", param_id);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("param_id:0x%X", param_id);
 
   p_msg = (tNFA_DM_API_SET_CONFIG*)GKI_getbuf(
       (uint16_t)(sizeof(tNFA_DM_API_SET_CONFIG) + length));
@@ -259,7 +279,7 @@
 tNFA_STATUS NFA_GetConfig(uint8_t num_ids, tNFA_PMID* p_param_ids) {
   tNFA_DM_API_GET_CONFIG* p_msg;
 
-  NFA_TRACE_API1("NFA_GetConfig (): num_ids: %i", num_ids);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("num_ids: %i", num_ids);
 
   p_msg = (tNFA_DM_API_GET_CONFIG*)GKI_getbuf(
       (uint16_t)(sizeof(tNFA_DM_API_GET_CONFIG) + num_ids));
@@ -321,10 +341,10 @@
                                           tNFA_NDEF_CBACK* p_ndef_cback) {
   tNFA_DM_API_REQ_EXCL_RF_CTRL* p_msg;
 
-  NFA_TRACE_API1("NFA_RequestExclusiveRfControl () poll_mask=0x%x", poll_mask);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("poll_mask=0x%x", poll_mask);
 
   if (!p_conn_cback) {
-    NFA_TRACE_ERROR0("NFA_RequestExclusiveRfControl (): error null callback");
+    LOG(ERROR) << StringPrintf("error null callback");
     return (NFA_STATUS_FAILED);
   }
 
@@ -363,11 +383,11 @@
 tNFA_STATUS NFA_ReleaseExclusiveRfControl(void) {
   NFC_HDR* p_msg;
 
-  NFA_TRACE_API0("NFA_ReleaseExclusiveRfControl ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (!nfa_dm_cb.p_excl_conn_cback) {
-    NFA_TRACE_ERROR0(
-        "NFA_ReleaseExclusiveRfControl (): Exclusive rf control is not in "
+    LOG(ERROR) << StringPrintf(
+        "Exclusive rf control is not in "
         "progress");
     return (NFA_STATUS_FAILED);
   }
@@ -420,7 +440,7 @@
 tNFA_STATUS NFA_EnablePolling(tNFA_TECHNOLOGY_MASK poll_mask) {
   tNFA_DM_API_ENABLE_POLL* p_msg;
 
-  NFA_TRACE_API1("NFA_EnablePolling () 0x%X", poll_mask);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("0x%X", poll_mask);
 
   p_msg = (tNFA_DM_API_ENABLE_POLL*)GKI_getbuf(sizeof(tNFA_DM_API_ENABLE_POLL));
   if (p_msg != NULL) {
@@ -454,7 +474,7 @@
 tNFA_STATUS NFA_DisablePolling(void) {
   NFC_HDR* p_msg;
 
-  NFA_TRACE_API0("NFA_DisablePolling ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_msg = (NFC_HDR*)GKI_getbuf(sizeof(NFC_HDR));
   if (p_msg != NULL) {
@@ -494,7 +514,7 @@
 tNFA_STATUS NFA_EnableListening(void) {
   NFC_HDR* p_msg;
 
-  NFA_TRACE_API0("NFA_EnableListening ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_msg = (NFC_HDR*)GKI_getbuf(sizeof(NFC_HDR));
   if (p_msg != NULL) {
@@ -528,7 +548,7 @@
 tNFA_STATUS NFA_DisableListening(void) {
   NFC_HDR* p_msg;
 
-  NFA_TRACE_API0("NFA_DisableListening ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_msg = (NFC_HDR*)GKI_getbuf(sizeof(NFC_HDR));
   if (p_msg != NULL) {
@@ -565,7 +585,7 @@
 tNFA_STATUS NFA_PauseP2p(void) {
   NFC_HDR* p_msg;
 
-  NFA_TRACE_API0("NFA_PauseP2p ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_msg = (NFC_HDR*)GKI_getbuf(sizeof(NFC_HDR));
   if (p_msg != NULL) {
@@ -598,7 +618,7 @@
 tNFA_STATUS NFA_ResumeP2p(void) {
   NFC_HDR* p_msg;
 
-  NFA_TRACE_API0("NFA_ResumeP2p ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_msg = (NFC_HDR*)GKI_getbuf(sizeof(NFC_HDR));
   if (p_msg != NULL) {
@@ -635,7 +655,7 @@
 tNFA_STATUS NFA_SetP2pListenTech(tNFA_TECHNOLOGY_MASK tech_mask) {
   tNFA_DM_API_SET_P2P_LISTEN_TECH* p_msg;
 
-  NFA_TRACE_API1("NFA_P2pSetListenTech (): tech_mask:0x%X", tech_mask);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("tech_mask:0x%X", tech_mask);
 
   p_msg = (tNFA_DM_API_SET_P2P_LISTEN_TECH*)GKI_getbuf(
       sizeof(tNFA_DM_API_SET_P2P_LISTEN_TECH));
@@ -668,7 +688,7 @@
 tNFA_STATUS NFA_StartRfDiscovery(void) {
   NFC_HDR* p_msg;
 
-  NFA_TRACE_API0("NFA_StartRfDiscovery ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_msg = (NFC_HDR*)GKI_getbuf(sizeof(NFC_HDR));
   if (p_msg != NULL) {
@@ -698,7 +718,7 @@
 tNFA_STATUS NFA_StopRfDiscovery(void) {
   NFC_HDR* p_msg;
 
-  NFA_TRACE_API0("NFA_StopRfDiscovery ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_msg = (NFC_HDR*)GKI_getbuf(sizeof(NFC_HDR));
   if (p_msg != NULL) {
@@ -737,7 +757,7 @@
 tNFA_STATUS NFA_SetRfDiscoveryDuration(uint16_t discovery_period_ms) {
   tNFA_DM_API_SET_RF_DISC_DUR* p_msg;
 
-  NFA_TRACE_API0("NFA_SetRfDiscoveryDuration ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* Post the API message */
   p_msg = (tNFA_DM_API_SET_RF_DISC_DUR*)GKI_getbuf(sizeof(NFC_HDR));
@@ -777,15 +797,15 @@
                        tNFA_INTF_TYPE rf_interface) {
   tNFA_DM_API_SELECT* p_msg;
 
-  NFA_TRACE_API3(
-      "NFA_Select (): rf_disc_id:0x%X, protocol:0x%X, rf_interface:0x%X",
-      rf_disc_id, protocol, rf_interface);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("rf_disc_id:0x%X, protocol:0x%X, rf_interface:0x%X",
+                      rf_disc_id, protocol, rf_interface);
 
   if (((rf_interface == NFA_INTERFACE_ISO_DEP) &&
        (protocol != NFA_PROTOCOL_ISO_DEP)) ||
       ((rf_interface == NFA_INTERFACE_NFC_DEP) &&
        (protocol != NFA_PROTOCOL_NFC_DEP))) {
-    NFA_TRACE_ERROR0("NFA_Select (): RF interface is not matched protocol");
+    LOG(ERROR) << StringPrintf("RF interface is not matched protocol");
     return (NFA_STATUS_INVALID_PARAM);
   }
 
@@ -822,7 +842,7 @@
 tNFA_STATUS NFA_UpdateRFCommParams(tNFA_RF_COMM_PARAMS* p_params) {
   tNFA_DM_API_UPDATE_RF_PARAMS* p_msg;
 
-  NFA_TRACE_API0("NFA_UpdateRFCommParams ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_msg = (tNFA_DM_API_UPDATE_RF_PARAMS*)GKI_getbuf(
       (uint16_t)(sizeof(tNFA_DM_API_UPDATE_RF_PARAMS)));
@@ -872,7 +892,7 @@
 extern tNFA_STATUS NFA_Deactivate(bool sleep_mode) {
   tNFA_DM_API_DEACTIVATE* p_msg;
 
-  NFA_TRACE_API1("NFA_Deactivate (): sleep_mode:%i", sleep_mode);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("sleep_mode:%i", sleep_mode);
 
   p_msg = (tNFA_DM_API_DEACTIVATE*)GKI_getbuf(
       (uint16_t)(sizeof(tNFA_DM_API_DEACTIVATE)));
@@ -913,7 +933,7 @@
   uint16_t size;
   uint8_t* p;
 
-  NFA_TRACE_API1("NFA_SendRawFrame () data_len:%d", data_len);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("data_len:%d", data_len);
 
   /* Validate parameters */
   if ((data_len == 0) || (p_raw_data == NULL))
@@ -977,14 +997,14 @@
                                         tNFA_NDEF_CBACK* p_ndef_cback) {
   tNFA_DM_API_REG_NDEF_HDLR* p_msg;
 
-  NFA_TRACE_API2(
-      "NFA_RegisterNDefTypeHandler (): handle whole ndef message: %i, "
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "handle whole ndef message: %i, "
       "tnf=0x%02x",
       handle_whole_message, tnf);
 
   /* Check for NULL callback */
   if (!p_ndef_cback) {
-    NFA_TRACE_ERROR0("NFA_RegisterNDefTypeHandler (): error - null callback");
+    LOG(ERROR) << StringPrintf("error - null callback");
     return (NFA_STATUS_INVALID_PARAM);
   }
 
@@ -1037,14 +1057,14 @@
                                               tNFA_NDEF_CBACK* p_ndef_cback) {
   tNFA_DM_API_REG_NDEF_HDLR* p_msg;
 
-  NFA_TRACE_API2(
-      "NFA_RegisterNDefUriHandler (): handle whole ndef message: %i, "
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "handle whole ndef message: %i, "
       "uri_id=0x%02x",
       handle_whole_message, uri_id);
 
   /* Check for NULL callback */
   if (!p_ndef_cback) {
-    NFA_TRACE_ERROR0("NFA_RegisterNDefUriHandler (): error - null callback");
+    LOG(ERROR) << StringPrintf("error - null callback");
     return (NFA_STATUS_INVALID_PARAM);
   }
 
@@ -1091,8 +1111,8 @@
 extern tNFA_STATUS NFA_DeregisterNDefTypeHandler(tNFA_HANDLE ndef_type_handle) {
   tNFA_DM_API_DEREG_NDEF_HDLR* p_msg;
 
-  NFA_TRACE_API1("NFA_DeregisterNDefHandler (): handle 0x%08x",
-                 ndef_type_handle);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("handle 0x%08x", ndef_type_handle);
 
   p_msg = (tNFA_DM_API_DEREG_NDEF_HDLR*)GKI_getbuf(
       (uint16_t)(sizeof(tNFA_DM_API_DEREG_NDEF_HDLR)));
@@ -1126,11 +1146,10 @@
 tNFA_STATUS NFA_PowerOffSleepMode(bool start_stop) {
   NFC_HDR* p_msg;
 
-  NFA_TRACE_API1("NFA_PowerOffSleepState () start_stop=%d", start_stop);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("start_stop=%d", start_stop);
 
   if (nfa_dm_cb.flags & NFA_DM_FLAGS_SETTING_PWR_MODE) {
-    NFA_TRACE_ERROR0(
-        "NFA_PowerOffSleepState (): NFA DM is busy to update power mode");
+    LOG(ERROR) << StringPrintf("NFA DM is busy to update power mode");
     return (NFA_STATUS_FAILED);
   } else {
     nfa_dm_cb.flags |= NFA_DM_FLAGS_SETTING_PWR_MODE;
@@ -1164,10 +1183,11 @@
 tNFC_STATUS NFA_RegVSCback(bool is_register, tNFA_VSC_CBACK* p_cback) {
   tNFA_DM_API_REG_VSC* p_msg;
 
-  NFA_TRACE_API1("NFA_RegVSCback() is_register=%d", is_register);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("is_register=%d", is_register);
 
   if (p_cback == NULL) {
-    NFA_TRACE_ERROR0("NFA_RegVSCback() requires a valid callback function");
+    LOG(ERROR) << StringPrintf("requires a valid callback function");
     return (NFA_STATUS_FAILED);
   }
 
@@ -1207,7 +1227,7 @@
   tNFA_DM_API_SEND_VSC* p_msg;
   uint16_t size = sizeof(tNFA_DM_API_SEND_VSC) + cmd_params_len;
 
-  NFA_TRACE_API1("NFA_SendVsCommand() oid=0x%x", oid);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("oid=0x%x", oid);
 
   p_msg = (tNFA_DM_API_SEND_VSC*)GKI_getbuf(size);
   if (p_msg != NULL) {
@@ -1277,21 +1297,6 @@
 
 /*******************************************************************************
 **
-** Function         NFA_SetTraceLevel
-**
-** Description      This function sets the trace level for NFA.  If called with
-**                  a value of 0xFF, it simply returns the current trace level.
-**
-** Returns          The new or current trace level
-**
-*******************************************************************************/
-uint8_t NFA_SetTraceLevel(uint8_t new_level) {
-  if (new_level != 0xFF) nfa_sys_set_trace_level(new_level);
-
-  return (nfa_sys_cb.trace_level);
-}
-/*******************************************************************************
-**
 ** Function:        NFA_EnableDtamode
 **
 ** Description:     Enable DTA Mode
@@ -1300,7 +1305,8 @@
 **
 *******************************************************************************/
 void NFA_EnableDtamode(tNFA_eDtaModes eDtaMode) {
-  NFA_TRACE_API2("%s: 0x%x ", __func__, eDtaMode);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("%s: 0x%x ", __func__, eDtaMode);
   appl_dta_mode_flag = 0x01;
   nfa_dm_cb.eDtaMode = eDtaMode;
 }
diff --git a/src/nfa/dm/nfa_dm_cfg.c b/src/nfa/dm/nfa_dm_cfg.cc
similarity index 84%
rename from src/nfa/dm/nfa_dm_cfg.c
rename to src/nfa/dm/nfa_dm_cfg.cc
index 9e51a6a..ceef2ff 100644
--- a/src/nfa/dm/nfa_dm_cfg.c
+++ b/src/nfa/dm/nfa_dm_cfg.cc
@@ -42,12 +42,6 @@
 
 uint8_t* p_nfa_dm_ce_cfg = (uint8_t*)nfa_dm_ce_cfg;
 
-/* the SetConfig for optional general NFC stack functions */
-const uint8_t nfa_dm_gen_cfg[] = {
-    3, /* total length */
-    /* Instruct NFCC to report RF field generated by remote device (or not) */
-    NFC_PMID_RF_FIELD_INFO, 1, 0x01};
-
 uint8_t* p_nfa_dm_gen_cfg = NULL;
 
 /* the RF Discovery Frequency for each technology */
@@ -68,18 +62,11 @@
 
 uint8_t nfa_ee_max_ee_cfg = NFA_EE_MAX_EE_SUPPORTED;
 
-const tNCI_DISCOVER_MAPS nfa_dm_interface_mapping[NFA_DM_NUM_INTERFACE_MAP] = {
-    /* Protocols that use Frame Interface do not need to be included in the
-       interface mapping */
-    {NCI_PROTOCOL_ISO_DEP, NCI_INTERFACE_MODE_POLL_N_LISTEN,
-     NCI_INTERFACE_ISO_DEP},
-    {NCI_PROTOCOL_NFC_DEP, NCI_INTERFACE_MODE_POLL_N_LISTEN,
-     NCI_INTERFACE_NFC_DEP}};
 /* set to NULL to use the default mapping set by stack */
 tNCI_DISCOVER_MAPS* p_nfa_dm_interface_mapping = NULL;
 uint8_t nfa_dm_num_dm_interface_mapping = 0;
 
-const tNFA_DM_CFG nfa_dm_cfg = {
+tNFA_DM_CFG nfa_dm_cfg = {
     /* Automatic NDEF detection (when not in exclusive RF mode) */
     NFA_DM_AUTO_DETECT_NDEF,
     /* Automatic NDEF read (when not in exclusive RF mode) */
@@ -95,7 +82,7 @@
 
 const uint8_t nfa_hci_whitelist[] = {0x02, 0x03, 0x04};
 
-const tNFA_HCI_CFG nfa_hci_cfg = {
+tNFA_HCI_CFG nfa_hci_cfg = {
     /* Max HCI Network IDLE time to wait for EE DISC REQ Ntf(s) */
     NFA_HCI_NETWK_INIT_IDLE_TIMEOUT,
     /* Maximum HCP Response time to any HCP Command */
@@ -108,7 +95,7 @@
 tNFA_HCI_CFG* p_nfa_hci_cfg = (tNFA_HCI_CFG*)&nfa_hci_cfg;
 
 bool nfa_poll_bail_out_mode = false;
-const tNFA_PROPRIETARY_CFG nfa_proprietary_cfg = {
+tNFA_PROPRIETARY_CFG nfa_proprietary_cfg = {
     0x80, /* NCI_PROTOCOL_18092_ACTIVE */
     0x81, /* NCI_PROTOCOL_B_PRIME */
     0x82, /* NCI_PROTOCOL_DUAL */
diff --git a/src/nfa/dm/nfa_dm_discover.c b/src/nfa/dm/nfa_dm_discover.cc
similarity index 88%
rename from src/nfa/dm/nfa_dm_discover.c
rename to src/nfa/dm/nfa_dm_discover.cc
index e28af09..62332cb 100644
--- a/src/nfa/dm/nfa_dm_discover.c
+++ b/src/nfa/dm/nfa_dm_discover.cc
@@ -21,13 +21,16 @@
  *  function.
  *
  ******************************************************************************/
-#include <string.h>
+#include <string>
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "nci_hmsgs.h"
 #include "nfa_api.h"
 #include "nfa_dm_int.h"
 #include "nfa_p2p_int.h"
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
+
 #if (NFC_NFCEE_INCLUDED == TRUE)
 #include "nfa_ee_api.h"
 #include "nfa_ee_int.h"
@@ -35,10 +38,14 @@
 #include "nfa_rw_int.h"
 
 #include "nfc_int.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
+
 /*
 **  static functions
 */
-
 static uint8_t nfa_dm_get_rf_discover_config(
     tNFA_DM_DISC_TECH_PROTO_MASK dm_disc_mask,
     tNFC_DISCOVER_PARAMS disc_params[], uint8_t max_params);
@@ -57,10 +64,8 @@
 static void nfa_dm_disc_kovio_timeout_cback(TIMER_LIST_ENT* p_tle);
 static void nfa_dm_disc_report_kovio_presence_check(tNFC_STATUS status);
 
-#if (BT_TRACE_VERBOSE == TRUE)
-static char* nfa_dm_disc_state_2_str(uint8_t state);
-static char* nfa_dm_disc_event_2_str(uint8_t event);
-#endif
+static std::string nfa_dm_disc_state_2_str(uint8_t state);
+static std::string nfa_dm_disc_event_2_str(uint8_t event);
 
 typedef struct nfa_dm_p2p_prio_logic {
   bool isodep_detected;      /* flag to check if ISO-DEP is detected */
@@ -89,9 +94,8 @@
   uint8_t num_params = 0;
 
   if (nfa_dm_cb.flags & NFA_DM_FLAGS_LISTEN_DISABLED) {
-    NFA_TRACE_DEBUG1(
-        "nfa_dm_get_rf_discover_config () listen disabled, rm listen from 0x%x",
-        dm_disc_mask);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("listen disabled, rm listen from 0x%x", dm_disc_mask);
     dm_disc_mask &= NFA_DM_DISC_MASK_POLL;
   }
   if (nfa_dm_is_p2p_paused()) {
@@ -274,9 +278,8 @@
   uint8_t platform = 0;
   uint8_t sens_info = 0;
 
-  NFA_TRACE_DEBUG1(
-      "nfa_dm_set_rf_listen_mode_config () tech_proto_mask = 0x%08X",
-      tech_proto_mask);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("tech_proto_mask = 0x%08X", tech_proto_mask);
 
   /*
   ** T1T listen     LA_PROT 0x80, LA_SENS_RES byte1:0x00 byte2:0x0C
@@ -390,7 +393,7 @@
 static void nfa_dm_set_total_duration(void) {
   uint8_t params[10], *p;
 
-  NFA_TRACE_DEBUG0("nfa_dm_set_total_duration ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p = params;
 
@@ -419,7 +422,7 @@
   tNFA_LISTEN_CFG* p_cfg = &nfa_dm_cb.disc_cb.excl_listen_config;
   uint8_t params[250], *p, xx;
 
-  NFA_TRACE_DEBUG0("nfa_dm_set_rf_listen_mode_raw_config ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /*
   ** Discovery Configuration Parameters for Listen A
@@ -599,8 +602,8 @@
 
   *p_disc_mask = disc_mask;
 
-  NFA_TRACE_DEBUG1("nfa_dm_set_rf_listen_mode_raw_config () disc_mask = 0x%x",
-                   disc_mask);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("disc_mask = 0x%x", disc_mask);
 }
 
 /*******************************************************************************
@@ -694,8 +697,8 @@
     }
   }
 
-  NFA_TRACE_DEBUG3(
-      "nfa_dm_disc_get_disc_mask (): tech_n_mode:0x%X, protocol:0x%X, "
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "tech_n_mode:0x%X, protocol:0x%X, "
       "disc_mask:0x%X",
       tech_n_mode, protocol, disc_mask);
   return (disc_mask);
@@ -714,7 +717,7 @@
                                         tNFC_DISCOVER* p_data) {
   tNFA_DM_RF_DISC_SM_EVENT dm_disc_event = NFA_DM_DISC_SM_MAX_EVENT;
 
-  NFA_TRACE_DEBUG1("nfa_dm_disc_discovery_cback (): event:0x%X", event);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("event:0x%X", event);
 
   switch (event) {
     case NFC_START_DEVT:
@@ -741,11 +744,13 @@
         dm_disc_event = NFA_DM_RF_DEACTIVATE_RSP;
       break;
     default:
-      NFA_TRACE_ERROR0("Unexpected event");
+      LOG(ERROR) << StringPrintf("Unexpected event");
       return;
   }
 
-  nfa_dm_disc_sm_execute(dm_disc_event, (tNFA_DM_RF_DISC_DATA*)p_data);
+  tNFA_DM_RF_DISC_DATA nfa_dm_rf_disc_data;
+  nfa_dm_rf_disc_data.nfc_discover = *p_data;
+  nfa_dm_disc_sm_execute(dm_disc_event, &nfa_dm_rf_disc_data);
 }
 
 /*******************************************************************************
@@ -813,8 +818,8 @@
 static tNFC_STATUS nfa_dm_disc_force_to_idle(void) {
   tNFC_STATUS status = NFC_STATUS_SEMANTIC_ERROR;
 
-  NFA_TRACE_DEBUG1("nfa_dm_disc_force_to_idle() disc_flags = 0x%x",
-                   nfa_dm_cb.disc_cb.disc_flags);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("disc_flags = 0x%x", nfa_dm_cb.disc_cb.disc_flags);
 
   /* do not execute more than one */
   if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF) {
@@ -836,8 +841,9 @@
 ** Returns          void
 **
 *******************************************************************************/
-static void nfa_dm_disc_deact_ntf_timeout_cback(TIMER_LIST_ENT* p_tle) {
-  NFA_TRACE_ERROR0("nfa_dm_disc_deact_ntf_timeout_cback()");
+static void nfa_dm_disc_deact_ntf_timeout_cback(__attribute__((unused))
+                                                TIMER_LIST_ENT* p_tle) {
+  LOG(ERROR) << __func__;
 
   nfa_dm_disc_force_to_idle();
 }
@@ -901,7 +907,7 @@
   uint8_t config_params[10], *p;
   uint8_t num_params, xx;
 
-  NFA_TRACE_DEBUG0("nfa_dm_start_rf_discover ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
   /* Make sure that RF discovery was enabled, or some app has exclusive control
    */
   if ((!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_ENABLED)) &&
@@ -1029,7 +1035,7 @@
         nfa_dm_cb.disc_cb.entry[xx].selected_disc_mask =
             poll_mask | listen_mask;
 
-        NFA_TRACE_DEBUG2(
+        DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
             "nfa_dm_cb.disc_cb.entry[%d].selected_disc_mask = 0x%x", xx,
             nfa_dm_cb.disc_cb.entry[xx].selected_disc_mask);
 
@@ -1041,31 +1047,34 @@
     if (dm_disc_mask & NFA_DM_DISC_MASK_NFC_DEP) {
       nfa_p2p_set_config(dm_disc_mask);
     }
-    if (dm_disc_mask &
-        (NFA_DM_DISC_MASK_PF_NFC_DEP | NFA_DM_DISC_MASK_PF_T3T)) {
-      /* According to the NFC Forum Activity spec, controllers must:
-       * 1) Poll with RC=0 and SC=FFFF to find NFC-DEP targets
-       * 2) Poll with RC=1 and SC=FFFF to find T3T targets
-       * Many controllers don't do this yet, and seem to be activating
-       * NFC-DEP by default.
-       *
-       * We can at least fix the scenario where we're not interested
-       * in NFC-DEP, by setting RC=1 in that case. Otherwise, keep
-       * the default of RC=0. */
-      p = config_params;
-      UINT8_TO_STREAM(p, NFC_PMID_PF_RC);
-      UINT8_TO_STREAM(p, NCI_PARAM_LEN_PF_RC);
-      if ((dm_disc_mask & NFA_DM_DISC_MASK_PF_NFC_DEP) &&
-          !nfa_dm_is_p2p_paused()) {
-        UINT8_TO_STREAM(p, 0x00);  // RC=0
-      } else {
-        UINT8_TO_STREAM(p, 0x01);  // RC=1
+    if (NFC_GetNCIVersion() == NCI_VERSION_1_0) {
+      if (dm_disc_mask &
+          (NFA_DM_DISC_MASK_PF_NFC_DEP | NFA_DM_DISC_MASK_PF_T3T)) {
+        /* According to the NFC Forum Activity spec, controllers must:
+         * 1) Poll with RC=0 and SC=FFFF to find NFC-DEP targets
+         * 2) Poll with RC=1 and SC=FFFF to find T3T targets
+         * Many controllers don't do this yet, and seem to be activating
+         * NFC-DEP by default.
+         *
+         * We can at least fix the scenario where we're not interested
+         * in NFC-DEP, by setting RC=1 in that case. Otherwise, keep
+         * the default of RC=0. */
+        p = config_params;
+        UINT8_TO_STREAM(p, NFC_PMID_PF_RC);
+        UINT8_TO_STREAM(p, NCI_PARAM_LEN_PF_RC);
+        if ((dm_disc_mask & NFA_DM_DISC_MASK_PF_NFC_DEP) &&
+            !nfa_dm_is_p2p_paused()) {
+          UINT8_TO_STREAM(p, 0x00);  // RC=0
+        } else {
+          UINT8_TO_STREAM(p, 0x01);  // RC=1
+        }
+        nfa_dm_check_set_config(p - config_params, config_params, false);
       }
-      nfa_dm_check_set_config(p - config_params, config_params, false);
     }
   }
 
-  NFA_TRACE_DEBUG1("dm_disc_mask = 0x%x", dm_disc_mask);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("dm_disc_mask = 0x%x", dm_disc_mask);
 
   /* Get Discovery Technology parameters */
   num_params = nfa_dm_get_rf_discover_config(dm_disc_mask, disc_params,
@@ -1151,7 +1160,8 @@
          p_data->activate.rf_tech_param.param.pk.uid_len) ||
         (memcmp(p_data->activate.rf_tech_param.param.pk.uid,
                 nfa_dm_cb.activated_nfcid, nfa_dm_cb.activated_nfcid_len))) {
-      NFA_TRACE_DEBUG0("new Kovio tag is detected");
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("new Kovio tag is detected");
 
       /* notify presence check failure for previous tag, if presence check is
        * pending */
@@ -1205,9 +1215,8 @@
 
   tNFA_DM_DISC_TECH_PROTO_MASK activated_disc_mask;
 
-  NFA_TRACE_DEBUG2(
-      "nfa_dm_disc_notify_activation (): tech_n_mode:0x%X, proto:0x%X",
-      tech_n_mode, protocol);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("tech_n_mode:0x%X, proto:0x%X", tech_n_mode, protocol);
 
   if (nfa_dm_cb.disc_cb.excl_disc_entry.in_use) {
     nfa_dm_cb.disc_cb.activated_tech_mode = tech_n_mode;
@@ -1244,9 +1253,10 @@
         nfa_dm_cb.disc_cb.activated_protocol = NFC_PROTOCOL_UNKNOWN;
         nfa_dm_cb.disc_cb.activated_handle = xx;
 
-        NFA_TRACE_DEBUG2("activated_rf_interface:0x%x, activated_handle: 0x%x",
-                         nfa_dm_cb.disc_cb.activated_rf_interface,
-                         nfa_dm_cb.disc_cb.activated_handle);
+        DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+            "activated_rf_interface:0x%x, activated_handle: 0x%x",
+            nfa_dm_cb.disc_cb.activated_rf_interface,
+            nfa_dm_cb.disc_cb.activated_handle);
 
         if (nfa_dm_cb.disc_cb.entry[xx].p_disc_cback)
           (*(nfa_dm_cb.disc_cb.entry[xx].p_disc_cback))(
@@ -1321,7 +1331,8 @@
        tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_A_ACTIVE ||
        tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_A)) {
     if (appl_dta_mode_flag == 1 && tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_A) {
-      NFA_TRACE_DEBUG0("DTA Mode Enabled : NFC-A Passive Listen Mode");
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("DTA Mode Enabled : NFC-A Passive Listen Mode");
     }
   }
 
@@ -1332,9 +1343,10 @@
     nfa_dm_cb.disc_cb.activated_protocol = protocol;
     nfa_dm_cb.disc_cb.activated_handle = xx;
 
-    NFA_TRACE_DEBUG2("activated_protocol:0x%x, activated_handle: 0x%x",
-                     nfa_dm_cb.disc_cb.activated_protocol,
-                     nfa_dm_cb.disc_cb.activated_handle);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("activated_protocol:0x%x, activated_handle: 0x%x",
+                        nfa_dm_cb.disc_cb.activated_protocol,
+                        nfa_dm_cb.disc_cb.activated_handle);
 
     if (protocol == NFC_PROTOCOL_KOVIO) {
       /* check whether it's new or repeated activation */
@@ -1372,11 +1384,11 @@
   tNFA_CONN_EVT_DATA evt_data;
   tNFC_DISCOVER disc_data;
 
-  NFA_TRACE_DEBUG1("nfa_dm_disc_notify_deactivation (): activated_handle=%d",
-                   nfa_dm_cb.disc_cb.activated_handle);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "activated_handle=%d", nfa_dm_cb.disc_cb.activated_handle);
 
   if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_CHECKING) {
-    NFA_TRACE_DEBUG0("nfa_dm_disc_notify_deactivation (): for sleep wakeup");
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("for sleep wakeup");
     return;
   }
 
@@ -1552,9 +1564,10 @@
       /* Perform pending deactivate command and on response notfiy deactivation
        */
       nfa_dm_cb.disc_cb.deact_notify_pending = true;
-      nfa_dm_disc_sm_execute(
-          NFA_DM_RF_DEACTIVATE_CMD,
-          (tNFA_DM_RF_DISC_DATA*)&nfa_dm_cb.disc_cb.pending_deact_type);
+      tNFA_DM_RF_DISC_DATA nfa_dm_rf_disc_data;
+      nfa_dm_rf_disc_data.deactivate_type =
+          nfa_dm_cb.disc_cb.pending_deact_type;
+      nfa_dm_disc_sm_execute(NFA_DM_RF_DEACTIVATE_CMD, &nfa_dm_rf_disc_data);
     }
   }
 }
@@ -1568,10 +1581,9 @@
 ** Returns          void
 **
 *******************************************************************************/
-static void nfa_dm_disc_kovio_timeout_cback(TIMER_LIST_ENT* p_tle) {
-  tNFC_DEACTIVATE_DEVT deact;
-
-  NFA_TRACE_DEBUG0("nfa_dm_disc_kovio_timeout_cback()");
+static void nfa_dm_disc_kovio_timeout_cback(__attribute__((unused))
+                                            TIMER_LIST_ENT* p_tle) {
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* notify presence check failure, if presence check is pending */
   nfa_dm_disc_report_kovio_presence_check(NFC_STATUS_FAILED);
@@ -1583,11 +1595,13 @@
                         NFA_DM_DISC_TIMEOUT_KOVIO_PRESENCE_CHECK);
   } else {
     /* notify upper layer deactivated event */
+    tNFC_DEACTIVATE_DEVT deact;
     deact.status = NFC_STATUS_OK;
     deact.type = NFC_DEACTIVATE_TYPE_DISCOVERY;
     deact.is_ntf = true;
-    nfa_dm_disc_notify_deactivation(NFA_DM_RF_DEACTIVATE_NTF,
-                                    (tNFC_DISCOVER*)&deact);
+    tNFC_DISCOVER nfc_discover;
+    nfc_discover.deactivate = deact;
+    nfa_dm_disc_notify_deactivation(NFA_DM_RF_DEACTIVATE_NTF, &nfc_discover);
   }
 }
 
@@ -1603,7 +1617,7 @@
 tNFC_STATUS nfa_dm_disc_start_kovio_presence_check(void) {
   tNFC_STATUS status = NFC_STATUS_FAILED;
 
-  NFA_TRACE_DEBUG0("nfa_dm_disc_start_kovio_presence_check ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if ((nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_KOVIO) &&
       (nfa_dm_cb.disc_cb.kovio_tle.in_use)) {
@@ -1642,7 +1656,7 @@
 **
 *******************************************************************************/
 static void nfa_dm_disc_report_kovio_presence_check(tNFC_STATUS status) {
-  NFA_TRACE_DEBUG0("nfa_dm_disc_report_kovio_presence_check ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_CHECKING) {
     nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_CHECKING;
@@ -1652,9 +1666,10 @@
 
     if (nfa_dm_cb.disc_cb.deact_pending) {
       nfa_dm_cb.disc_cb.deact_pending = false;
-      nfa_dm_disc_sm_execute(
-          NFA_DM_RF_DEACTIVATE_CMD,
-          (tNFA_DM_RF_DISC_DATA*)&nfa_dm_cb.disc_cb.pending_deact_type);
+      tNFA_DM_RF_DISC_DATA nfa_dm_rf_disc_data;
+      nfa_dm_rf_disc_data.deactivate_type =
+          nfa_dm_cb.disc_cb.pending_deact_type;
+      nfa_dm_disc_sm_execute(NFA_DM_RF_DEACTIVATE_CMD, &nfa_dm_rf_disc_data);
     }
   }
 }
@@ -1668,9 +1683,9 @@
 ** Returns          void
 **
 *******************************************************************************/
-static void nfa_dm_disc_data_cback(uint8_t conn_id, tNFC_CONN_EVT event,
-                                   tNFC_CONN* p_data) {
-  NFA_TRACE_DEBUG0("nfa_dm_disc_data_cback ()");
+static void nfa_dm_disc_data_cback(__attribute__((unused)) uint8_t conn_id,
+                                   tNFC_CONN_EVT event, tNFC_CONN* p_data) {
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* if selection failed */
   if (event == NFC_ERROR_CEVT) {
@@ -1693,18 +1708,12 @@
   tNFA_CONN_EVT_DATA evt_data;
   tNFA_DM_RF_DISC_STATE old_state = nfa_dm_cb.disc_cb.disc_state;
 
-#if (BT_TRACE_VERBOSE == TRUE)
-  NFA_TRACE_DEBUG5(
-      "nfa_dm_disc_new_state (): old_state: %s (%d), new_state: %s (%d) "
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "old_state: %s (%d), new_state: %s (%d) "
       "disc_flags: 0x%x",
-      nfa_dm_disc_state_2_str(nfa_dm_cb.disc_cb.disc_state),
-      nfa_dm_cb.disc_cb.disc_state, nfa_dm_disc_state_2_str(new_state),
+      nfa_dm_disc_state_2_str(nfa_dm_cb.disc_cb.disc_state).c_str(),
+      nfa_dm_cb.disc_cb.disc_state, nfa_dm_disc_state_2_str(new_state).c_str(),
       new_state, nfa_dm_cb.disc_cb.disc_flags);
-#else
-  NFA_TRACE_DEBUG3(
-      "nfa_dm_disc_new_state(): old_state: %d, new_state: %d disc_flags: 0x%x",
-      nfa_dm_cb.disc_cb.disc_state, new_state, nfa_dm_cb.disc_cb.disc_flags);
-#endif
 
   nfa_dm_cb.disc_cb.disc_state = new_state;
 
@@ -1776,7 +1785,7 @@
 
             if (nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback)
               (*(nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback))(
-                  NFA_DM_RF_DISC_START_EVT, (tNFC_DISCOVER*)p_data);
+                  NFA_DM_RF_DISC_START_EVT, &p_data->nfc_discover);
           }
         } else {
           /* notify event to each module which is waiting for start */
@@ -1792,7 +1801,7 @@
 
               if (nfa_dm_cb.disc_cb.entry[xx].p_disc_cback)
                 (*(nfa_dm_cb.disc_cb.entry[xx].p_disc_cback))(
-                    NFA_DM_RF_DISC_START_EVT, (tNFC_DISCOVER*)p_data);
+                    NFA_DM_RF_DISC_START_EVT, &p_data->nfc_discover);
             }
           }
         }
@@ -1865,7 +1874,7 @@
       break;
 
     default:
-      NFA_TRACE_ERROR0("nfa_dm_disc_sm_idle (): Unexpected discovery event");
+      LOG(ERROR) << StringPrintf("Unexpected discovery event");
       break;
   }
 }
@@ -1909,7 +1918,8 @@
       break;
     case NFA_DM_RF_INTF_ACTIVATED_NTF:
       if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP) {
-        NFA_TRACE_DEBUG0("RF Activated while waiting for deactivation RSP");
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("RF Activated while waiting for deactivation RSP");
         /* it's race condition. DH has to wait for deactivation NTF */
         nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_W4_NTF;
       } else {
@@ -1926,8 +1936,9 @@
 
         if (nfa_dm_disc_notify_activation(&(p_data->nfc_discover)) ==
             NFA_STATUS_FAILED) {
-          NFA_TRACE_DEBUG0(
-              "Not matched, restart discovery after receiving deactivate ntf");
+          DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+              "Not matched, restart discovery after receiving "
+              "deactivate ntf");
 
           /* after receiving deactivate event, restart discovery */
           nfa_dm_cb.disc_cb.disc_flags |=
@@ -1958,8 +1969,7 @@
     case NFA_DM_CORE_INTF_ERROR_NTF:
       break;
     default:
-      NFA_TRACE_ERROR0(
-          "nfa_dm_disc_sm_discovery (): Unexpected discovery event");
+      LOG(ERROR) << StringPrintf("Unexpected discovery event");
       break;
   }
 }
@@ -2015,7 +2025,7 @@
 
       if (nfa_dm_disc_notify_activation(&(p_data->nfc_discover)) ==
           NFA_STATUS_FAILED) {
-        NFA_TRACE_DEBUG0(
+        DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
             "Not matched, restart discovery after receiving deactivate ntf");
 
         /* after receiving deactivate event, restart discovery */
@@ -2023,8 +2033,7 @@
       }
       break;
     default:
-      NFA_TRACE_ERROR0(
-          "nfa_dm_disc_sm_w4_all_discoveries (): Unexpected discovery event");
+      LOG(ERROR) << StringPrintf("Unexpected discovery event");
       break;
   }
 }
@@ -2085,7 +2094,7 @@
          * if deactivation is pending then deactivate  */
         nfa_dm_disc_end_sleep_wakeup(NFC_STATUS_OK);
       } else if (status == NFA_STATUS_FAILED) {
-        NFA_TRACE_DEBUG0(
+        DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
             "Not matched, restart discovery after receiving deactivate ntf");
 
         /* after receiving deactivate event, restart discovery */
@@ -2124,8 +2133,7 @@
       }
       break;
     default:
-      NFA_TRACE_ERROR0(
-          "nfa_dm_disc_sm_w4_host_select (): Unexpected discovery event");
+      LOG(ERROR) << StringPrintf("Unexpected discovery event");
       break;
   }
 
@@ -2153,7 +2161,6 @@
       (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_CHECKING);
   bool sleep_wakeup_event = false;
   bool sleep_wakeup_event_processed = false;
-  tNFC_DEACTIVATE_DEVT deact;
 
   switch (event) {
     case NFA_DM_RF_DEACTIVATE_CMD:
@@ -2191,11 +2198,14 @@
       if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF)) {
         /* it's race condition. received deactivate NTF before receiving RSP */
 
+        tNFC_DEACTIVATE_DEVT deact;
         deact.status = NFC_STATUS_OK;
         deact.type = NFC_DEACTIVATE_TYPE_IDLE;
         deact.is_ntf = true;
+        tNFC_DISCOVER nfc_discover;
+        nfc_discover.deactivate = deact;
         nfa_dm_disc_notify_deactivation(NFA_DM_RF_DEACTIVATE_NTF,
-                                        (tNFC_DISCOVER*)&deact);
+                                        &nfc_discover);
 
         /* NFCC is in IDLE state */
         nfa_dm_disc_new_state(NFA_DM_RFST_IDLE);
@@ -2210,7 +2220,8 @@
       if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP) {
         /* it's race condition. received deactivate NTF before receiving RSP */
         /* notify deactivation after receiving deactivate RSP */
-        NFA_TRACE_DEBUG0("Rx deactivate NTF while waiting for deactivate RSP");
+        DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+            "Rx deactivate NTF while waiting for deactivate RSP");
         break;
       }
       if (p_data->nfc_discover.deactivate.reason !=
@@ -2218,55 +2229,54 @@
         sleep_wakeup_event = true;
         nfa_dm_disc_notify_deactivation(NFA_DM_RF_DEACTIVATE_NTF,
                                         &(p_data->nfc_discover));
+      }
+      if ((p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP) ||
+          (p_data->nfc_discover.deactivate.type ==
+           NFC_DEACTIVATE_TYPE_SLEEP_AF)) {
+        if (p_data->nfc_discover.deactivate.reason !=
+            NFC_DEACTIVATE_REASON_DH_REQ_FAILED) {
+          /* count for number of times deactivate cmd sent */
+          nfa_dm_cb.deactivate_cmd_retry_count = 0;
         }
-        if ((p_data->nfc_discover.deactivate.type ==
-             NFC_DEACTIVATE_TYPE_SLEEP) ||
-            (p_data->nfc_discover.deactivate.type ==
-             NFC_DEACTIVATE_TYPE_SLEEP_AF)) {
-          if (p_data->nfc_discover.deactivate.reason !=
-              NFC_DEACTIVATE_REASON_DH_REQ_FAILED) {
-            /* count for number of times deactivate cmd sent */
-            nfa_dm_cb.deactivate_cmd_retry_count = 0;
-          }
-          nfa_dm_disc_new_state(NFA_DM_RFST_W4_HOST_SELECT);
-          if (old_sleep_wakeup_flag) {
-            sleep_wakeup_event_processed = true;
-            /* process pending deactivate request */
-            if (nfa_dm_cb.disc_cb.deact_pending) {
-              /* notify RW module that sleep wakeup is finished */
-              /* if deactivation is pending then deactivate  */
-              nfa_dm_disc_end_sleep_wakeup(NFC_STATUS_OK);
+        nfa_dm_disc_new_state(NFA_DM_RFST_W4_HOST_SELECT);
+        if (old_sleep_wakeup_flag) {
+          sleep_wakeup_event_processed = true;
+          /* process pending deactivate request */
+          if (nfa_dm_cb.disc_cb.deact_pending) {
+            /* notify RW module that sleep wakeup is finished */
+            /* if deactivation is pending then deactivate  */
+            nfa_dm_disc_end_sleep_wakeup(NFC_STATUS_OK);
 
-              /* Notify NFA RW sub-systems because NFA_DM_RF_DEACTIVATE_RSP will
-               * not call this function */
-              nfa_rw_proc_disc_evt(NFA_DM_RF_DISC_DEACTIVATED_EVT, NULL, true);
-            } else {
-              /* Successfully went to sleep mode for sleep wakeup */
-              /* Now wake up the tag to complete the operation */
-              NFC_DiscoverySelect(nfa_dm_cb.disc_cb.activated_rf_disc_id,
-                                  nfa_dm_cb.disc_cb.activated_protocol,
-                                  nfa_dm_cb.disc_cb.activated_rf_interface);
-            }
+            /* Notify NFA RW sub-systems because NFA_DM_RF_DEACTIVATE_RSP will
+             * not call this function */
+            nfa_rw_proc_disc_evt(NFA_DM_RF_DISC_DEACTIVATED_EVT, NULL, true);
+          } else {
+            /* Successfully went to sleep mode for sleep wakeup */
+            /* Now wake up the tag to complete the operation */
+            NFC_DiscoverySelect(nfa_dm_cb.disc_cb.activated_rf_disc_id,
+                                nfa_dm_cb.disc_cb.activated_protocol,
+                                nfa_dm_cb.disc_cb.activated_rf_interface);
           }
-          if (p_data->nfc_discover.deactivate.reason ==
-              NFC_DEACTIVATE_REASON_DH_REQ_FAILED) {
-            /* in case deactivation is not sucessfull, NFCC shall send
-               RF_DEACTIVATE_NTF with DH Req failed due to error.
-               MW shall send deactivation cmd again for 3 three times. if
-               deactivation is not successfull 3 times also,
-               then MW shall send deacivate cmd with deactivate type is
-               discovery */
-            if (nfa_dm_cb.deactivate_cmd_retry_count == 3) {
-              if ((!old_sleep_wakeup_flag) ||
-                  (!nfa_dm_cb.disc_cb.deact_pending)) {
-                nfa_dm_send_deactivate_cmd(NFA_DEACTIVATE_TYPE_DISCOVERY);
-              }
-              nfa_dm_cb.deactivate_cmd_retry_count = 0;
-            } else {
-              nfa_dm_cb.deactivate_cmd_retry_count++;
-              nfa_dm_send_deactivate_cmd(p_data->nfc_discover.deactivate.type);
+        }
+        if (p_data->nfc_discover.deactivate.reason ==
+            NFC_DEACTIVATE_REASON_DH_REQ_FAILED) {
+          /* in case deactivation is not sucessfull, NFCC shall send
+             RF_DEACTIVATE_NTF with DH Req failed due to error.
+             MW shall send deactivation cmd again for 3 three times. if
+             deactivation is not successfull 3 times also,
+             then MW shall send deacivate cmd with deactivate type is
+             discovery */
+          if (nfa_dm_cb.deactivate_cmd_retry_count == 3) {
+            if ((!old_sleep_wakeup_flag) ||
+                (!nfa_dm_cb.disc_cb.deact_pending)) {
+              nfa_dm_send_deactivate_cmd(NFA_DEACTIVATE_TYPE_DISCOVERY);
             }
+            nfa_dm_cb.deactivate_cmd_retry_count = 0;
+          } else {
+            nfa_dm_cb.deactivate_cmd_retry_count++;
+            nfa_dm_send_deactivate_cmd(p_data->nfc_discover.deactivate.type);
           }
+        }
       } else if (p_data->nfc_discover.deactivate.type ==
                  NFC_DEACTIVATE_TYPE_IDLE) {
         nfa_dm_disc_new_state(NFA_DM_RFST_IDLE);
@@ -2289,8 +2299,7 @@
       break;
 
     default:
-      NFA_TRACE_ERROR0(
-          "nfa_dm_disc_sm_poll_active (): Unexpected discovery event");
+      LOG(ERROR) << StringPrintf("Unexpected discovery event");
       break;
   }
 
@@ -2328,8 +2337,10 @@
         deact.status = NFC_STATUS_OK;
         deact.type = NFC_DEACTIVATE_TYPE_IDLE;
         deact.is_ntf = true;
+        tNFC_DISCOVER nfc_discover;
+        nfc_discover.deactivate = deact;
         nfa_dm_disc_notify_deactivation(NFA_DM_RF_DEACTIVATE_NTF,
-                                        (tNFC_DISCOVER*)&deact);
+                                        &nfc_discover);
 
         /* NFCC is in IDLE state */
         nfa_dm_disc_new_state(NFA_DM_RFST_IDLE);
@@ -2344,7 +2355,8 @@
       if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP) {
         /* it's race condition. received deactivate NTF before receiving RSP */
         /* notify deactivation after receiving deactivate RSP */
-        NFA_TRACE_DEBUG0("Rx deactivate NTF while waiting for deactivate RSP");
+        DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+            "Rx deactivate NTF while waiting for deactivate RSP");
       } else {
         nfa_dm_disc_notify_deactivation(NFA_DM_RF_DEACTIVATE_NTF,
                                         &(p_data->nfc_discover));
@@ -2372,8 +2384,7 @@
     case NFA_DM_CORE_INTF_ERROR_NTF:
       break;
     default:
-      NFA_TRACE_ERROR0(
-          "nfa_dm_disc_sm_listen_active (): Unexpected discovery event");
+      LOG(ERROR) << StringPrintf("Unexpected discovery event");
       break;
   }
 }
@@ -2431,7 +2442,7 @@
                  NFA_DEACTIVATE_TYPE_DISCOVERY) {
         nfa_dm_disc_new_state(NFA_DM_RFST_DISCOVERY);
       } else {
-        NFA_TRACE_ERROR0("Unexpected deactivation type");
+        LOG(ERROR) << StringPrintf("Unexpected deactivation type");
         nfa_dm_disc_new_state(NFA_DM_RFST_IDLE);
         nfa_dm_start_rf_discover();
       }
@@ -2440,7 +2451,7 @@
       nfa_dm_disc_new_state(NFA_DM_RFST_LISTEN_ACTIVE);
       if (nfa_dm_disc_notify_activation(&(p_data->nfc_discover)) ==
           NFA_STATUS_FAILED) {
-        NFA_TRACE_DEBUG0(
+        DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
             "Not matched, restart discovery after receiving deactivate ntf");
 
         /* after receiving deactivate event, restart discovery */
@@ -2448,8 +2459,7 @@
       }
       break;
     default:
-      NFA_TRACE_ERROR0(
-          "nfa_dm_disc_sm_listen_sleep (): Unexpected discovery event");
+      LOG(ERROR) << StringPrintf("Unexpected discovery event");
       break;
   }
 }
@@ -2471,13 +2481,13 @@
       nfa_dm_disc_notify_activation(&(p_data->nfc_discover));
       if (nfa_dm_disc_notify_activation(&(p_data->nfc_discover)) ==
           NFA_STATUS_FAILED) {
-        NFA_TRACE_DEBUG0("Not matched, unexpected activation");
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("Not matched, unexpected activation");
       }
       break;
 
     default:
-      NFA_TRACE_ERROR0(
-          "nfa_dm_disc_sm_lp_listen (): Unexpected discovery event");
+      LOG(ERROR) << StringPrintf("Unexpected discovery event");
       break;
   }
 }
@@ -2500,8 +2510,7 @@
                                       &(p_data->nfc_discover));
       break;
     default:
-      NFA_TRACE_ERROR0(
-          "nfa_dm_disc_sm_lp_active (): Unexpected discovery event");
+      LOG(ERROR) << StringPrintf("Unexpected discovery event");
       break;
   }
 }
@@ -2517,18 +2526,12 @@
 *******************************************************************************/
 void nfa_dm_disc_sm_execute(tNFA_DM_RF_DISC_SM_EVENT event,
                             tNFA_DM_RF_DISC_DATA* p_data) {
-#if (BT_TRACE_VERBOSE == TRUE)
-  NFA_TRACE_DEBUG5(
-      "nfa_dm_disc_sm_execute (): state: %s (%d), event: %s(%d) disc_flags: "
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "state: %s (%d), event: %s(%d) disc_flags: "
       "0x%x",
-      nfa_dm_disc_state_2_str(nfa_dm_cb.disc_cb.disc_state),
-      nfa_dm_cb.disc_cb.disc_state, nfa_dm_disc_event_2_str(event), event,
-      nfa_dm_cb.disc_cb.disc_flags);
-#else
-  NFA_TRACE_DEBUG3(
-      "nfa_dm_disc_sm_execute(): state: %d, event:%d disc_flags: 0x%x",
-      nfa_dm_cb.disc_cb.disc_state, event, nfa_dm_cb.disc_cb.disc_flags);
-#endif
+      nfa_dm_disc_state_2_str(nfa_dm_cb.disc_cb.disc_state).c_str(),
+      nfa_dm_cb.disc_cb.disc_state, nfa_dm_disc_event_2_str(event).c_str(),
+      event, nfa_dm_cb.disc_cb.disc_flags);
 
   switch (nfa_dm_cb.disc_cb.disc_state) {
     /*  RF Discovery State - Idle */
@@ -2576,15 +2579,10 @@
       nfa_dm_disc_sm_lp_active(event, p_data);
       break;
   }
-#if (BT_TRACE_VERBOSE == TRUE)
-  NFA_TRACE_DEBUG3(
-      "nfa_dm_disc_sm_execute (): new state: %s (%d), disc_flags: 0x%x",
-      nfa_dm_disc_state_2_str(nfa_dm_cb.disc_cb.disc_state),
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "new state: %s (%d), disc_flags: 0x%x",
+      nfa_dm_disc_state_2_str(nfa_dm_cb.disc_cb.disc_state).c_str(),
       nfa_dm_cb.disc_cb.disc_state, nfa_dm_cb.disc_cb.disc_flags);
-#else
-  NFA_TRACE_DEBUG2("nfa_dm_disc_sm_execute(): new state: %d,  disc_flags: 0x%x",
-                   nfa_dm_cb.disc_cb.disc_state, nfa_dm_cb.disc_cb.disc_flags);
-#endif
 }
 
 /*******************************************************************************
@@ -2601,7 +2599,7 @@
                                    tNFA_DISCOVER_CBACK* p_disc_cback) {
   uint8_t xx;
 
-  NFA_TRACE_DEBUG1("nfa_dm_add_rf_discover () disc_mask=0x%x", disc_mask);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("disc_mask=0x%x", disc_mask);
 
   for (xx = 0; xx < NFA_DM_DISC_NUM_ENTRIES; xx++) {
     if (!nfa_dm_cb.disc_cb.entry[xx].in_use) {
@@ -2631,7 +2629,7 @@
                                  tNFA_DISCOVER_CBACK* p_disc_cback) {
   tNFA_DM_DISC_TECH_PROTO_MASK poll_disc_mask = 0;
 
-  NFA_TRACE_DEBUG0("nfa_dm_start_excl_discovery ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (poll_tech_mask & NFA_TECHNOLOGY_MASK_A) {
     poll_disc_mask |= NFA_DM_DISC_MASK_PA_T1T;
@@ -2692,7 +2690,7 @@
 **
 *******************************************************************************/
 void nfa_dm_stop_excl_discovery(void) {
-  NFA_TRACE_DEBUG0("nfa_dm_stop_excl_discovery ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   nfa_dm_cb.disc_cb.excl_disc_entry.in_use = false;
   nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback = NULL;
@@ -2708,12 +2706,12 @@
 **
 *******************************************************************************/
 void nfa_dm_delete_rf_discover(tNFA_HANDLE handle) {
-  NFA_TRACE_DEBUG1("nfa_dm_delete_rf_discover () handle=0x%x", handle);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("handle=0x%x", handle);
 
   if (handle < NFA_DM_DISC_NUM_ENTRIES) {
     nfa_dm_cb.disc_cb.entry[handle].in_use = false;
   } else {
-    NFA_TRACE_ERROR0("Invalid discovery handle");
+    LOG(ERROR) << StringPrintf("Invalid discovery handle");
   }
 }
 
@@ -2731,9 +2729,9 @@
   tNFA_DM_DISC_SELECT_PARAMS select_params;
   tNFA_CONN_EVT_DATA conn_evt;
 
-  NFA_TRACE_DEBUG3(
-      "nfa_dm_disc_select () rf_disc_id:0x%X, protocol:0x%X, rf_interface:0x%X",
-      rf_disc_id, protocol, rf_interface);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("rf_disc_id:0x%X, protocol:0x%X, rf_interface:0x%X",
+                      rf_disc_id, protocol, rf_interface);
 
   if (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_W4_HOST_SELECT) {
     /* state is OK: notify the status when the response is received from NFCC */
@@ -2742,8 +2740,9 @@
     select_params.rf_interface = rf_interface;
 
     nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_NOTIFY;
-    nfa_dm_disc_sm_execute(NFA_DM_RF_DISCOVER_SELECT_CMD,
-                           (tNFA_DM_RF_DISC_DATA*)&select_params);
+    tNFA_DM_RF_DISC_DATA nfa_dm_rf_disc_data;
+    nfa_dm_rf_disc_data.select = select_params;
+    nfa_dm_disc_sm_execute(NFA_DM_RF_DISCOVER_SELECT_CMD, &nfa_dm_rf_disc_data);
   } else {
     /* Wrong state: notify failed status right away */
     conn_evt.status = NFA_STATUS_FAILED;
@@ -2761,8 +2760,8 @@
 **
 *******************************************************************************/
 tNFA_STATUS nfa_dm_rf_deactivate(tNFA_DEACTIVATE_TYPE deactivate_type) {
-  NFA_TRACE_DEBUG1("nfa_dm_rf_deactivate () deactivate_type:0x%X",
-                   deactivate_type);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("deactivate_type:0x%X", deactivate_type);
 
   if (deactivate_type == NFA_DEACTIVATE_TYPE_SLEEP) {
     if (nfa_dm_cb.disc_cb.activated_protocol == NFA_PROTOCOL_NFC_DEP)
@@ -2781,7 +2780,8 @@
         return NFA_STATUS_OK;
       } else {
         /* it could be race condition. */
-        NFA_TRACE_DEBUG0("nfa_dm_rf_deactivate (): already in discovery state");
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("already in discovery state");
         return NFA_STATUS_FAILED;
       }
     } else if (deactivate_type == NFA_DEACTIVATE_TYPE_IDLE) {
@@ -2789,20 +2789,21 @@
         nfa_sys_stop_timer(&nfa_dm_cb.disc_cb.kovio_tle);
         nfa_dm_disc_kovio_timeout_cback(&nfa_dm_cb.disc_cb.kovio_tle);
       }
-      nfa_dm_disc_sm_execute(NFA_DM_RF_DEACTIVATE_CMD,
-                             (tNFA_DM_RF_DISC_DATA*)&deactivate_type);
+      tNFA_DM_RF_DISC_DATA nfa_dm_rf_disc_data;
+      nfa_dm_rf_disc_data.deactivate_type = deactivate_type;
+      nfa_dm_disc_sm_execute(NFA_DM_RF_DEACTIVATE_CMD, &nfa_dm_rf_disc_data);
       return NFA_STATUS_OK;
     } else {
       return NFA_STATUS_FAILED;
     }
   } else {
-    nfa_dm_disc_sm_execute(NFA_DM_RF_DEACTIVATE_CMD,
-                           (tNFA_DM_RF_DISC_DATA*)&deactivate_type);
+    tNFA_DM_RF_DISC_DATA nfa_dm_rf_disc_data;
+    nfa_dm_rf_disc_data.deactivate_type = deactivate_type;
+    nfa_dm_disc_sm_execute(NFA_DM_RF_DEACTIVATE_CMD, &nfa_dm_rf_disc_data);
     return NFA_STATUS_OK;
   }
 }
 
-#if (BT_TRACE_VERBOSE == TRUE)
 /*******************************************************************************
 **
 ** Function         nfa_dm_disc_state_2_str
@@ -2810,7 +2811,7 @@
 ** Description      convert nfc discovery state to string
 **
 *******************************************************************************/
-static char* nfa_dm_disc_state_2_str(uint8_t state) {
+static std::string nfa_dm_disc_state_2_str(uint8_t state) {
   switch (state) {
     case NFA_DM_RFST_IDLE:
       return "IDLE";
@@ -2849,44 +2850,34 @@
 ** Description      convert nfc discovery RSP/NTF to string
 **
 *******************************************************************************/
-static char* nfa_dm_disc_event_2_str(uint8_t event) {
+static std::string nfa_dm_disc_event_2_str(uint8_t event) {
   switch (event) {
     case NFA_DM_RF_DISCOVER_CMD:
       return "DISCOVER_CMD";
-
     case NFA_DM_RF_DISCOVER_RSP:
       return "DISCOVER_RSP";
-
     case NFA_DM_RF_DISCOVER_NTF:
       return "DISCOVER_NTF";
-
     case NFA_DM_RF_DISCOVER_SELECT_CMD:
       return "SELECT_CMD";
-
     case NFA_DM_RF_DISCOVER_SELECT_RSP:
       return "SELECT_RSP";
-
     case NFA_DM_RF_INTF_ACTIVATED_NTF:
       return "ACTIVATED_NTF";
-
     case NFA_DM_RF_DEACTIVATE_CMD:
       return "DEACTIVATE_CMD";
-
     case NFA_DM_RF_DEACTIVATE_RSP:
       return "DEACTIVATE_RSP";
-
     case NFA_DM_RF_DEACTIVATE_NTF:
       return "DEACTIVATE_NTF";
-
     case NFA_DM_LP_LISTEN_CMD:
       return "NFA_DM_LP_LISTEN_CMD";
-
     case NFA_DM_CORE_INTF_ERROR_NTF:
       return "INTF_ERROR_NTF";
+    default:
+      return "Unknown";
   }
-  return "Unknown";
 }
-#endif /* BT_TRACE_VERBOSE */
 
 /*******************************************************************************
 **
@@ -2900,13 +2891,14 @@
 *******************************************************************************/
 bool nfa_dm_p2p_prio_logic(uint8_t event, uint8_t* p, uint8_t event_type) {
   if (!nfa_poll_bail_out_mode) {
-    NFA_TRACE_DEBUG0("p2p priority is running under bail out mode ONLY.");
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("p2p priority is running under bail out mode ONLY.");
     return true;
   }
 
   if ((nfa_dm_cb.flags & NFA_DM_FLAGS_P2P_PAUSED) &&
       (nfa_dm_cb.flags & NFA_DM_FLAGS_LISTEN_DISABLED)) {
-    NFA_TRACE_DEBUG0(
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
         "returning from nfa_dm_p2p_prio_logic  Disable p2p_prio_logic");
     return true;
   }
@@ -2917,7 +2909,7 @@
   if (event == NCI_MSG_RF_DISCOVER &&
       p2p_prio_logic_data.timer_expired == true &&
       event_type == NFA_DM_P2P_PRIO_RSP) {
-    NFA_TRACE_DEBUG0(
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
         "nfa_dm_p2p_prio_logic starting a timer for next rf intf activated "
         "ntf");
     nfc_start_quick_timer(&p2p_prio_logic_data.timer_list,
@@ -2930,7 +2922,7 @@
 
   if (event == NCI_MSG_RF_INTF_ACTIVATED &&
       p2p_prio_logic_data.timer_expired == true) {
-    NFA_TRACE_DEBUG0(
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
         "nfa_dm_p2p_prio_logic stopping a timer for next rf intf activated "
         "ntf");
     nfc_stop_quick_timer(&p2p_prio_logic_data.timer_list);
@@ -2942,7 +2934,7 @@
     uint8_t protocol = 0xFF;
     uint8_t tech_mode = 0xFF;
 
-    NFA_TRACE_DEBUG0("P2P_Prio_Logic");
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("P2P_Prio_Logic");
 
     if (event == NCI_MSG_RF_INTF_ACTIVATED) {
       rf_disc_id = *p++;
@@ -2950,10 +2942,11 @@
       protocol = *p++;
       tech_mode = *p++;
     }
-    NFA_TRACE_DEBUG1("nfa_dm_p2p_prio_logic event_type = 0x%x", event_type);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("nfa_dm_p2p_prio_logic event_type = 0x%x", event_type);
 
     if (event == NCI_MSG_RF_INTF_ACTIVATED && tech_mode >= 0x80) {
-      NFA_TRACE_DEBUG0(
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
           "nfa_dm_p2p_prio_logic listen mode activated reset all the "
           "nfa_dm_p2p_prio_logic variables ");
       nfa_dm_p2p_prio_logic_cleanup();
@@ -2965,7 +2958,8 @@
       nfa_dm_p2p_prio_logic_cleanup();
       p2p_prio_logic_data.isodep_detected = true;
       p2p_prio_logic_data.first_tech_mode = tech_mode;
-      NFA_TRACE_DEBUG0("ISO-DEP Detected First Time  Resume the Polling Loop");
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+          "ISO-DEP Detected First Time  Resume the Polling Loop");
       nci_snd_deactivate_cmd(NFA_DEACTIVATE_TYPE_DISCOVERY);
       return false;
     }
@@ -2976,7 +2970,7 @@
              p2p_prio_logic_data.first_tech_mode != tech_mode) {
       p2p_prio_logic_data.isodep_detected = true;
       p2p_prio_logic_data.timer_expired = false;
-      NFA_TRACE_DEBUG0(
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
           "ISO-DEP Detected Second Time Other Techmode  Resume the Polling "
           "Loop");
       nfc_stop_quick_timer(&p2p_prio_logic_data.timer_list);
@@ -2988,7 +2982,7 @@
              protocol == NCI_PROTOCOL_ISO_DEP &&
              p2p_prio_logic_data.isodep_detected == true &&
              p2p_prio_logic_data.timer_expired == true) {
-      NFA_TRACE_DEBUG0(
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
           "ISO-DEP Detected TimerExpired, Final Notifying the Event");
       nfc_stop_quick_timer(&p2p_prio_logic_data.timer_list);
       nfa_dm_p2p_prio_logic_cleanup();
@@ -2998,20 +2992,20 @@
              protocol == NCI_PROTOCOL_ISO_DEP &&
              p2p_prio_logic_data.isodep_detected == true &&
              p2p_prio_logic_data.first_tech_mode == tech_mode) {
-      NFA_TRACE_DEBUG0(
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
           "ISO-DEP Detected Same Techmode, Final Notifying the Event");
       nfc_stop_quick_timer(&p2p_prio_logic_data.timer_list);
-      NFA_TRACE_DEBUG0("P2P_Stop_Timer");
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("P2P_Stop_Timer");
       nfa_dm_p2p_prio_logic_cleanup();
     }
 
     else if (event == NCI_MSG_RF_INTF_ACTIVATED &&
              protocol != NCI_PROTOCOL_ISO_DEP &&
              p2p_prio_logic_data.isodep_detected == true) {
-      NFA_TRACE_DEBUG0(
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
           "ISO-DEP Not Detected  Giving Priority for other Technology");
       nfc_stop_quick_timer(&p2p_prio_logic_data.timer_list);
-      NFA_TRACE_DEBUG0("P2P_Stop_Timer");
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("P2P_Stop_Timer");
       nfa_dm_p2p_prio_logic_cleanup();
     }
 
@@ -3019,7 +3013,8 @@
              p2p_prio_logic_data.isodep_detected == true &&
              p2p_prio_logic_data.timer_expired == false &&
              event_type == NFA_DM_P2P_PRIO_RSP) {
-      NFA_TRACE_DEBUG0("NFA_DM_RF_DEACTIVATE_RSP");
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("NFA_DM_RF_DEACTIVATE_RSP");
       return false;
     }
 
@@ -3027,19 +3022,20 @@
              p2p_prio_logic_data.isodep_detected == true &&
              p2p_prio_logic_data.timer_expired == false &&
              event_type == NFA_DM_P2P_PRIO_NTF) {
-      NFA_TRACE_DEBUG0("NFA_DM_RF_DEACTIVATE_NTF");
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("NFA_DM_RF_DEACTIVATE_NTF");
 
       nfc_start_quick_timer(&p2p_prio_logic_data.timer_list,
                             NFC_TTYPE_P2P_PRIO_RESPONSE,
                             ((uint32_t)160 * QUICK_TIMER_TICKS_PER_SEC) / 1000);
 
-      NFA_TRACE_DEBUG0("P2P_Start_Timer");
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("P2P_Start_Timer");
 
       return false;
     }
   }
 
-  NFA_TRACE_DEBUG0("returning TRUE");
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("returning TRUE");
   return true;
 }
 
@@ -3053,12 +3049,14 @@
 **
 *******************************************************************************/
 void nfa_dm_p2p_timer_event() {
-  NFA_TRACE_DEBUG0("P2P_Timer_timeout NFC-DEP Not Discovered!!");
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("P2P_Timer_timeout NFC-DEP Not Discovered!!");
 
   p2p_prio_logic_data.timer_expired = true;
 
   if (p2p_prio_logic_data.isodep_detected == true) {
-    NFA_TRACE_DEBUG0("Deactivate and Restart RF discovery");
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Deactivate and Restart RF discovery");
     nci_snd_deactivate_cmd(NFC_DEACTIVATE_TYPE_IDLE);
   }
 }
@@ -3089,7 +3087,8 @@
   NFC_HDR* p_msg;
   uint8_t* p;
 
-  NFA_TRACE_DEBUG0("nfa_dm_send_tag_deselect_cmd");
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfa_dm_send_tag_deselect_cmd");
   p_msg = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (p_msg) {
diff --git a/src/nfa/dm/nfa_dm_main.c b/src/nfa/dm/nfa_dm_main.cc
similarity index 94%
rename from src/nfa/dm/nfa_dm_main.c
rename to src/nfa/dm/nfa_dm_main.cc
index dbc51ba..f73d9c0 100644
--- a/src/nfa/dm/nfa_dm_main.c
+++ b/src/nfa/dm/nfa_dm_main.cc
@@ -21,12 +21,17 @@
  *  This is the main implementation file for the NFA device manager.
  *
  ******************************************************************************/
+#include <string>
 
-#include <string.h>
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "nfa_api.h"
 #include "nfa_dm_int.h"
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 /*****************************************************************************
 ** Constants and types
@@ -35,9 +40,7 @@
                                             nfa_dm_sys_disable,
                                             nfa_dm_proc_nfcc_power_mode};
 
-tNFA_DM_CB nfa_dm_cb = {
-    0,
-};
+tNFA_DM_CB nfa_dm_cb = {};
 
 #define NFA_DM_NUM_ACTIONS (NFA_DM_MAX_EVT & 0x00ff)
 
@@ -80,9 +83,7 @@
 /*****************************************************************************
 ** Local function prototypes
 *****************************************************************************/
-#if (BT_TRACE_VERBOSE == TRUE)
-static char* nfa_dm_evt_2_str(uint16_t event);
-#endif
+static std::string nfa_dm_evt_2_str(uint16_t event);
 /*******************************************************************************
 **
 ** Function         nfa_dm_init
@@ -93,7 +94,7 @@
 **
 *******************************************************************************/
 void nfa_dm_init(void) {
-  NFA_TRACE_DEBUG0("nfa_dm_init ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
   memset(&nfa_dm_cb, 0, sizeof(tNFA_DM_CB));
   nfa_dm_cb.poll_disc_handle = NFA_HANDLE_INVALID;
   nfa_dm_cb.disc_cb.disc_duration = NFA_DM_DISC_DURATION_POLL;
@@ -117,12 +118,8 @@
   bool freebuf = true;
   uint16_t event = p_msg->event & 0x00ff;
 
-#if (BT_TRACE_VERBOSE == TRUE)
-  NFA_TRACE_EVENT2("nfa_dm_evt_hdlr event: %s (0x%02x)",
-                   nfa_dm_evt_2_str(event), event);
-#else
-  NFA_TRACE_EVENT1("nfa_dm_evt_hdlr event: 0x%x", event);
-#endif
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "event: %s (0x%02x)", nfa_dm_evt_2_str(event).c_str(), event);
 
   /* execute action functions */
   if (event < NFA_DM_NUM_ACTIONS) {
@@ -153,9 +150,9 @@
       nfa_dm_disable_complete();
     } else {
       /* probably waiting to be disabled */
-      NFA_TRACE_WARNING2("DM disc_state state = %d disc_flags:0x%x",
-                         nfa_dm_cb.disc_cb.disc_state,
-                         nfa_dm_cb.disc_cb.disc_flags);
+      LOG(WARNING) << StringPrintf("DM disc_state state = %d disc_flags:0x%x",
+                                   nfa_dm_cb.disc_cb.disc_state,
+                                   nfa_dm_cb.disc_cb.disc_flags);
     }
 
   } else {
@@ -192,7 +189,8 @@
 **
 *******************************************************************************/
 bool nfa_dm_is_active(void) {
-  NFA_TRACE_DEBUG1("nfa_dm_is_active () flags:0x%x", nfa_dm_cb.flags);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("flags:0x%x", nfa_dm_cb.flags);
   if ((nfa_dm_cb.flags & NFA_DM_FLAGS_DM_IS_ACTIVE) &&
       ((nfa_dm_cb.flags &
         (NFA_DM_FLAGS_ENABLE_EVT_PEND | NFA_DM_FLAGS_NFCC_IS_RESTORING |
@@ -219,12 +217,12 @@
   tNFC_STATUS nfc_status;
   uint32_t cur_bit;
 
-  NFA_TRACE_DEBUG0("nfa_dm_check_set_config ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* We only allow 32 pending SET_CONFIGs */
   if (nfa_dm_cb.setcfg_pending_num >= NFA_DM_SETCONFIG_PENDING_MAX) {
-    NFA_TRACE_ERROR0(
-        "nfa_dm_check_set_config () error: pending number of SET_CONFIG "
+    LOG(ERROR) << StringPrintf(
+        "error: pending number of SET_CONFIG "
         "exceeded");
     return NFA_STATUS_FAILED;
   }
@@ -446,7 +444,6 @@
   }
 }
 
-#if (BT_TRACE_VERBOSE == TRUE)
 /*******************************************************************************
 **
 ** Function         nfa_dm_nfc_revt_2_str
@@ -454,84 +451,59 @@
 ** Description      convert nfc revt to string
 **
 *******************************************************************************/
-static char* nfa_dm_evt_2_str(uint16_t event) {
+static std::string nfa_dm_evt_2_str(uint16_t event) {
   switch (NFA_SYS_EVT_START(NFA_ID_DM) | event) {
     case NFA_DM_API_ENABLE_EVT:
       return "NFA_DM_API_ENABLE_EVT";
-
     case NFA_DM_API_DISABLE_EVT:
       return "NFA_DM_API_DISABLE_EVT";
-
     case NFA_DM_API_SET_CONFIG_EVT:
       return "NFA_DM_API_SET_CONFIG_EVT";
-
     case NFA_DM_API_GET_CONFIG_EVT:
       return "NFA_DM_API_GET_CONFIG_EVT";
-
     case NFA_DM_API_REQUEST_EXCL_RF_CTRL_EVT:
       return "NFA_DM_API_REQUEST_EXCL_RF_CTRL_EVT";
-
     case NFA_DM_API_RELEASE_EXCL_RF_CTRL_EVT:
       return "NFA_DM_API_RELEASE_EXCL_RF_CTRL_EVT";
-
     case NFA_DM_API_ENABLE_POLLING_EVT:
       return "NFA_DM_API_ENABLE_POLLING_EVT";
-
     case NFA_DM_API_DISABLE_POLLING_EVT:
       return "NFA_DM_API_DISABLE_POLLING_EVT";
-
     case NFA_DM_API_ENABLE_LISTENING_EVT:
       return "NFA_DM_API_ENABLE_LISTENING_EVT";
-
     case NFA_DM_API_DISABLE_LISTENING_EVT:
       return "NFA_DM_API_DISABLE_LISTENING_EVT";
-
     case NFA_DM_API_PAUSE_P2P_EVT:
       return "NFA_DM_API_PAUSE_P2P_EVT";
-
     case NFA_DM_API_RESUME_P2P_EVT:
       return "NFA_DM_API_RESUME_P2P_EVT";
-
     case NFA_DM_API_RAW_FRAME_EVT:
       return "NFA_DM_API_RAW_FRAME_EVT";
-
     case NFA_DM_API_SET_P2P_LISTEN_TECH_EVT:
       return "NFA_DM_API_SET_P2P_LISTEN_TECH_EVT";
-
     case NFA_DM_API_START_RF_DISCOVERY_EVT:
       return "NFA_DM_API_START_RF_DISCOVERY_EVT";
-
     case NFA_DM_API_STOP_RF_DISCOVERY_EVT:
       return "NFA_DM_API_STOP_RF_DISCOVERY_EVT";
-
     case NFA_DM_API_SET_RF_DISC_DURATION_EVT:
       return "NFA_DM_API_SET_RF_DISC_DURATION_EVT";
-
     case NFA_DM_API_SELECT_EVT:
       return "NFA_DM_API_SELECT_EVT";
-
     case NFA_DM_API_UPDATE_RF_PARAMS_EVT:
       return "NFA_DM_API_UPDATE_RF_PARAMS_EVT";
-
     case NFA_DM_API_DEACTIVATE_EVT:
       return "NFA_DM_API_DEACTIVATE_EVT";
-
     case NFA_DM_API_POWER_OFF_SLEEP_EVT:
       return "NFA_DM_API_POWER_OFF_SLEEP_EVT";
-
     case NFA_DM_API_REG_NDEF_HDLR_EVT:
       return "NFA_DM_API_REG_NDEF_HDLR_EVT";
-
     case NFA_DM_API_DEREG_NDEF_HDLR_EVT:
       return "NFA_DM_API_DEREG_NDEF_HDLR_EVT";
-
     case NFA_DM_TIMEOUT_DISABLE_EVT:
       return "NFA_DM_TIMEOUT_DISABLE_EVT";
-
     case NFA_DM_API_SET_POWER_SUB_STATE_EVT:
       return "NFA_DM_API_SET_POWER_SUB_STATE_EVT";
   }
 
   return "Unknown or Vendor Specific";
 }
-#endif /* BT_TRACE_VERBOSE */
diff --git a/src/nfa/dm/nfa_dm_ndef.c b/src/nfa/dm/nfa_dm_ndef.cc
similarity index 89%
rename from src/nfa/dm/nfa_dm_ndef.c
rename to src/nfa/dm/nfa_dm_ndef.cc
index bbccebf..0e07d95 100644
--- a/src/nfa/dm/nfa_dm_ndef.c
+++ b/src/nfa/dm/nfa_dm_ndef.cc
@@ -22,12 +22,17 @@
  *
  ******************************************************************************/
 #include <string.h>
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "ndef_utils.h"
 #include "nfa_api.h"
 #include "nfa_dm_int.h"
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
-#include "nfc_api.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 /*******************************************************************************
 * URI Well-known-type prefixes
@@ -136,13 +141,14 @@
   if (p_reg_info->tnf == NFA_TNF_DEFAULT) {
     /* check if default handler is already registered */
     if (p_cb->p_ndef_handler[NFA_NDEF_DEFAULT_HANDLER_IDX]) {
-      NFA_TRACE_WARNING0("Default NDEF handler being changed.");
+      LOG(WARNING) << StringPrintf("Default NDEF handler being changed.");
 
       /* Free old registration info */
       nfa_dm_ndef_dereg_hdlr_by_handle(
           (tNFA_HANDLE)NFA_NDEF_DEFAULT_HANDLER_IDX);
     }
-    NFA_TRACE_DEBUG0("Default NDEF handler successfully registered.");
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Default NDEF handler successfully registered.");
     hdlr_idx = NFA_NDEF_DEFAULT_HANDLER_IDX;
   }
   /* Get available entry in ndef_handler table, and check if requested type is
@@ -171,21 +177,24 @@
     ndef_register.ndef_type_handle = p_reg_info->ndef_type_handle;
     ndef_register.status = NFA_STATUS_OK;
 
-    NFA_TRACE_DEBUG1("NDEF handler successfully registered. Handle=0x%08x",
-                     p_reg_info->ndef_type_handle);
-    (*(p_reg_info->p_ndef_cback))(NFA_NDEF_REGISTER_EVT,
-                                  (tNFA_NDEF_EVT_DATA*)&ndef_register);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("NDEF handler successfully registered. Handle=0x%08x",
+                        p_reg_info->ndef_type_handle);
+    tNFA_NDEF_EVT_DATA nfa_ndef_evt_data;
+    nfa_ndef_evt_data.ndef_reg = ndef_register;
+    (*(p_reg_info->p_ndef_cback))(NFA_NDEF_REGISTER_EVT, &nfa_ndef_evt_data);
 
     /* indicate that we will free message buffer when type_handler is
      * deregistered */
     return false;
   } else {
     /* Error */
-    NFA_TRACE_ERROR0("NDEF handler failed to register.");
+    LOG(ERROR) << StringPrintf("NDEF handler failed to register.");
     ndef_register.ndef_type_handle = NFA_HANDLE_INVALID;
     ndef_register.status = NFA_STATUS_FAILED;
-    (*(p_reg_info->p_ndef_cback))(NFA_NDEF_REGISTER_EVT,
-                                  (tNFA_NDEF_EVT_DATA*)&ndef_register);
+    tNFA_NDEF_EVT_DATA nfa_ndef_evt_data;
+    nfa_ndef_evt_data.ndef_reg = ndef_register;
+    (*(p_reg_info->p_ndef_cback))(NFA_NDEF_REGISTER_EVT, &nfa_ndef_evt_data);
 
     return true;
   }
@@ -209,8 +218,8 @@
        NFA_HANDLE_GROUP_NDEF_HANDLER) ||
       ((p_dereginfo->ndef_type_handle & NFA_HANDLE_MASK) >=
        NFA_NDEF_MAX_HANDLERS)) {
-    NFA_TRACE_ERROR1("Invalid handle for NDEF type handler: 0x%08x",
-                     p_dereginfo->ndef_type_handle);
+    LOG(ERROR) << StringPrintf("Invalid handle for NDEF type handler: 0x%08x",
+                               p_dereginfo->ndef_type_handle);
   } else {
     nfa_dm_ndef_dereg_hdlr_by_handle(p_dereginfo->ndef_type_handle);
   }
@@ -363,8 +372,8 @@
   uint8_t rec_count = 0;
   bool record_handled, entire_message_handled;
 
-  NFA_TRACE_DEBUG3("nfa_dm_ndef_handle_message status=%i, msgbuf=%08x, len=%i",
-                   status, p_msg_buf, len);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "nfa_dm_ndef_handle_message status=%i, len=%i", status, len);
 
   if (status != NFA_STATUS_OK) {
     /* If problem reading NDEF message, then exit (no action required) */
@@ -380,8 +389,9 @@
     ndef_data.ndef_type_handle = 0;
     ndef_data.p_data = p_msg_buf;
     ndef_data.len = len;
-    (*p_cb->p_excl_ndef_cback)(NFA_NDEF_DATA_EVT,
-                               (tNFA_NDEF_EVT_DATA*)&ndef_data);
+    tNFA_NDEF_EVT_DATA nfa_ndef_evt_data;
+    nfa_ndef_evt_data.ndef_data = ndef_data;
+    (*p_cb->p_excl_ndef_cback)(NFA_NDEF_DATA_EVT, &nfa_ndef_evt_data);
     return;
   }
 
@@ -389,13 +399,14 @@
   if (len == 0) {
     p_handler = p_cb->p_ndef_handler[NFA_NDEF_DEFAULT_HANDLER_IDX];
     if (p_handler != NULL) {
-      NFA_TRACE_DEBUG0(
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
           "Notifying default handler of zero-length NDEF message...");
       ndef_data.ndef_type_handle = p_handler->ndef_type_handle;
       ndef_data.p_data = NULL; /* Start of record */
       ndef_data.len = 0;
-      (*p_handler->p_ndef_cback)(NFA_NDEF_DATA_EVT,
-                                 (tNFA_NDEF_EVT_DATA*)&ndef_data);
+      tNFA_NDEF_EVT_DATA nfa_ndef_evt_data;
+      nfa_ndef_evt_data.ndef_data = ndef_data;
+      (*p_handler->p_ndef_cback)(NFA_NDEF_DATA_EVT, &nfa_ndef_evt_data);
     }
     return;
   }
@@ -403,8 +414,8 @@
   /* Validate the NDEF message */
   ndef_status = NDEF_MsgValidate(p_msg_buf, len, true);
   if (ndef_status != NDEF_OK) {
-    NFA_TRACE_ERROR1("Received invalid NDEF message. NDEF status=0x%x",
-                     ndef_status);
+    LOG(ERROR) << StringPrintf(
+        "Received invalid NDEF message. NDEF status=0x%x", ndef_status);
     return;
   }
 
@@ -439,7 +450,8 @@
       /* Not a registered NDEF type. Use default handler */
       p_handler = p_cb->p_ndef_handler[NFA_NDEF_DEFAULT_HANDLER_IDX];
       if (p_handler != NULL) {
-        NFA_TRACE_DEBUG0("No handler found. Using default handler...");
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("No handler found. Using default handler...");
       }
     }
 
@@ -454,8 +466,8 @@
       }
 
       /* Get pointer to record payload */
-      NFA_TRACE_DEBUG1("Calling ndef type handler (%x)",
-                       p_handler->ndef_type_handle);
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+          "Calling ndef type handler (%x)", p_handler->ndef_type_handle);
 
       ndef_data.ndef_type_handle = p_handler->ndef_type_handle;
       ndef_data.p_data = p_rec; /* Start of record */
@@ -506,8 +518,9 @@
       }
 
       /* Notify NDEF type handler */
-      (*p_handler->p_ndef_cback)(NFA_NDEF_DATA_EVT,
-                                 (tNFA_NDEF_EVT_DATA*)&ndef_data);
+      tNFA_NDEF_EVT_DATA nfa_ndef_evt_data;
+      nfa_ndef_evt_data.ndef_data = ndef_data;
+      (*p_handler->p_ndef_cback)(NFA_NDEF_DATA_EVT, &nfa_ndef_evt_data);
 
       /* Indicate that at lease one handler has received this record */
       record_handled = true;
@@ -521,7 +534,7 @@
      * if no default handler was register) */
     if ((!record_handled) && (!entire_message_handled)) {
       /* Unregistered NDEF record type; no default handler */
-      NFA_TRACE_WARNING1("Unhandled NDEF record (#%i)", rec_count);
+      LOG(WARNING) << StringPrintf("Unhandled NDEF record (#%i)", rec_count);
     }
 
     rec_count++;
diff --git a/src/nfa/ee/nfa_ee_act.c b/src/nfa/ee/nfa_ee_act.cc
similarity index 70%
rename from src/nfa/ee/nfa_ee_act.c
rename to src/nfa/ee/nfa_ee_act.cc
index 3ae939d..ab1eefc 100644
--- a/src/nfa/ee/nfa_ee_act.c
+++ b/src/nfa/ee/nfa_ee_act.cc
@@ -22,12 +22,18 @@
  *
  ******************************************************************************/
 #include <string.h>
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "nfa_api.h"
 #include "nfa_dm_int.h"
 #include "nfa_ee_int.h"
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
-#include "nfc_api.h"
+#include "nfa_hci_int.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 /* the de-bounce timer:
  * The NFA-EE API functions are called to set the routing and VS configuration.
@@ -76,6 +82,18 @@
   *pp += len;
 }
 
+static void add_route_sys_code_tlv(uint8_t** p_buff, uint8_t* p_sys_code_cfg,
+                                   uint8_t sys_code_rt_loc,
+                                   uint8_t sys_code_pwr_cfg) {
+  *(*p_buff)++ = NFC_ROUTE_TAG_SYSCODE | nfa_ee_cb.route_block_control;
+  *(*p_buff)++ = NFA_EE_SYSTEM_CODE_LEN + 2;
+  *(*p_buff)++ = sys_code_rt_loc;
+  *(*p_buff)++ = sys_code_pwr_cfg;
+  /* copy the system code */
+  memcpy(*p_buff, p_sys_code_cfg, NFA_EE_SYSTEM_CODE_LEN);
+  *p_buff += NFA_EE_SYSTEM_CODE_LEN;
+}
+
 const uint8_t nfa_ee_proto_mask_list[NFA_EE_NUM_PROTO] = {
     NFA_PROTOCOL_MASK_T1T, NFA_PROTOCOL_MASK_T2T, NFA_PROTOCOL_MASK_T3T,
     NFA_PROTOCOL_MASK_ISO_DEP, NFA_PROTOCOL_MASK_NFC_DEP};
@@ -97,7 +115,7 @@
 ** Returns          void
 **
 *******************************************************************************/
-static void nfa_ee_trace_aid(char* p_str, uint8_t id, uint8_t aid_len,
+static void nfa_ee_trace_aid(std::string p_str, uint8_t id, uint8_t aid_len,
                              uint8_t* p) {
   int len = aid_len;
   int xx, yy = 0;
@@ -105,14 +123,16 @@
 
   buff[0] = 0;
   if (aid_len > NFA_MAX_AID_LEN) {
-    NFA_TRACE_ERROR2("aid_len: %d exceeds max(%d)", aid_len, NFA_MAX_AID_LEN);
+    LOG(ERROR) << StringPrintf("aid_len: %d exceeds max(%d)", aid_len,
+                               NFA_MAX_AID_LEN);
     len = NFA_MAX_AID_LEN;
   }
   for (xx = 0; xx < len; xx++) {
     yy += sprintf(&buff[yy], "%02x ", *p);
     p++;
   }
-  NFA_TRACE_DEBUG4("%s id:0x%x len=%d aid:%s", p_str, id, aid_len, buff);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "%s id:0x%x len=%d aid:%s", p_str.c_str(), id, aid_len, buff);
 }
 
 /*******************************************************************************
@@ -139,8 +159,17 @@
       power_cfg |= NCI_ROUTE_PWR_STATE_SWITCH_OFF;
     if (p_cb->tech_battery_off & nfa_ee_tech_mask_list[xx])
       power_cfg |= NCI_ROUTE_PWR_STATE_BATT_OFF;
+    if ((power_cfg & NCI_ROUTE_PWR_STATE_ON) &&
+        (NFC_GetNCIVersion() == NCI_VERSION_2_0)) {
+      if (p_cb->tech_screen_lock & nfa_ee_tech_mask_list[xx])
+        power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_ON_LOCK();
+      if (p_cb->tech_screen_off & nfa_ee_tech_mask_list[xx])
+        power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_OFF_UNLOCK();
+      if (p_cb->tech_screen_off_lock & nfa_ee_tech_mask_list[xx])
+        power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_OFF_LOCK();
+    }
     if (power_cfg) {
-      /* 5 = 1 (tag) + 1 (len) + 1(nfcee_id) + 1(power cfg) + 1 (techonogy) */
+      /* 5 = 1 (tag) + 1 (len) + 1(nfcee_id) + 1(power cfg) + 1 (technology) */
       p_cb->size_mask += 5;
     }
   }
@@ -154,13 +183,23 @@
       power_cfg |= NCI_ROUTE_PWR_STATE_SWITCH_OFF;
     if (p_cb->proto_battery_off & nfa_ee_proto_mask_list[xx])
       power_cfg |= NCI_ROUTE_PWR_STATE_BATT_OFF;
+    if ((power_cfg & NCI_ROUTE_PWR_STATE_ON) &&
+        (NFC_GetNCIVersion() == NCI_VERSION_2_0)) {
+      if (p_cb->proto_screen_lock & nfa_ee_proto_mask_list[xx])
+        power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_ON_LOCK();
+      if (p_cb->proto_screen_off & nfa_ee_proto_mask_list[xx])
+        power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_OFF_UNLOCK();
+      if (p_cb->proto_screen_off_lock & nfa_ee_proto_mask_list[xx])
+        power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_OFF_LOCK();
+    }
     if (power_cfg) {
       /* 5 = 1 (tag) + 1 (len) + 1(nfcee_id) + 1(power cfg) + 1 (protocol) */
       p_cb->size_mask += 5;
     }
   }
-  NFA_TRACE_DEBUG2("nfa_ee_update_route_size nfcee_id:0x%x size_mask:%d",
-                   p_cb->nfcee_id, p_cb->size_mask);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfa_ee_update_route_size nfcee_id:0x%x size_mask:%d",
+                      p_cb->nfcee_id, p_cb->size_mask);
 }
 
 /*******************************************************************************
@@ -194,8 +233,35 @@
       start_offset += p_cb->aid_len[xx];
     }
   }
-  NFA_TRACE_DEBUG2("nfa_ee_update_route_aid_size nfcee_id:0x%x size_aid:%d",
-                   p_cb->nfcee_id, p_cb->size_aid);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfa_ee_update_route_aid_size nfcee_id:0x%x size_aid:%d",
+                      p_cb->nfcee_id, p_cb->size_aid);
+}
+
+/*******************************************************************************
+**
+** Function         nfa_ee_update_route_sys_code_size
+**
+** Description      Update the size required for system code routing
+**                  of the given NFCEE ID.
+**
+** Returns          void
+**
+*******************************************************************************/
+static void nfa_ee_update_route_sys_code_size(tNFA_EE_ECB* p_cb) {
+  p_cb->size_sys_code = 0;
+  if (p_cb->sys_code_cfg_entries) {
+    for (uint8_t xx = 0; xx < p_cb->sys_code_cfg_entries; xx++) {
+      if (p_cb->sys_code_rt_loc_vs_info[xx] & NFA_EE_AE_ROUTE) {
+        /* 4 = 1 (tag) + 1 (len) + 1(nfcee_id) + 1(power cfg) */
+        p_cb->size_sys_code += 4;
+        p_cb->size_sys_code += NFA_EE_SYSTEM_CODE_LEN;
+      }
+    }
+  }
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "nfa_ee_update_route_sys_code_size nfcee_id:0x%x size_sys_code:%d",
+      p_cb->nfcee_id, p_cb->size_sys_code);
 }
 
 /*******************************************************************************
@@ -215,14 +281,17 @@
   p_cb = &nfa_ee_cb.ecb[NFA_EE_CB_4_DH];
   lmrt_size += p_cb->size_mask;
   lmrt_size += p_cb->size_aid;
+  lmrt_size += p_cb->size_sys_code;
   p_cb = &nfa_ee_cb.ecb[nfa_ee_cb.cur_ee - 1];
   for (xx = 0; xx < nfa_ee_cb.cur_ee; xx++, p_cb--) {
     if (p_cb->ee_status == NFC_NFCEE_STATUS_ACTIVE) {
       lmrt_size += p_cb->size_mask;
       lmrt_size += p_cb->size_aid;
+      lmrt_size += p_cb->size_sys_code;
     }
   }
-  NFA_TRACE_DEBUG1("nfa_ee_total_lmrt_size size:%d", lmrt_size);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfa_ee_total_lmrt_size size:%d", lmrt_size);
   return lmrt_size;
 }
 
@@ -240,6 +309,15 @@
       power_cfg |= NCI_ROUTE_PWR_STATE_SWITCH_OFF;
     if (p_cb->tech_battery_off & nfa_ee_tech_mask_list[xx])
       power_cfg |= NCI_ROUTE_PWR_STATE_BATT_OFF;
+    if ((power_cfg & NCI_ROUTE_PWR_STATE_ON) &&
+        (NFC_GetNCIVersion() == NCI_VERSION_2_0)) {
+      if (p_cb->tech_screen_lock & nfa_ee_tech_mask_list[xx])
+        power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_ON_LOCK();
+      if (p_cb->tech_screen_off & nfa_ee_tech_mask_list[xx])
+        power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_OFF_UNLOCK();
+      if (p_cb->tech_screen_off_lock & nfa_ee_tech_mask_list[xx])
+        power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_OFF_LOCK();
+    }
     if (power_cfg) {
       add_route_tech_proto_tlv(&pp, NFC_ROUTE_TAG_TECH, p_cb->nfcee_id,
                                power_cfg, nfa_ee_tech_list[xx]);
@@ -277,8 +355,15 @@
 
         /* Enable screen on lock power state for ISO-DEP protocol to
            enable HCE screen lock */
-        if (NFC_GetNCIVersion() == NCI_VERSION_2_0)
-          power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_ON_LOCK;
+        if ((power_cfg & NCI_ROUTE_PWR_STATE_ON) &&
+            (NFC_GetNCIVersion() == NCI_VERSION_2_0)) {
+          if (p_cb->proto_screen_lock & nfa_ee_proto_mask_list[xx])
+            power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_ON_LOCK();
+          if (p_cb->proto_screen_off & nfa_ee_proto_mask_list[xx])
+            power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_OFF_UNLOCK();
+          if (p_cb->proto_screen_off_lock & nfa_ee_proto_mask_list[xx])
+            power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_OFF_LOCK();
+        }
       } else {
         proto_tag = NFC_ROUTE_TAG_PROTO;
       }
@@ -297,7 +382,8 @@
                              NCI_ROUTE_PWR_STATE_ON, NFC_PROTOCOL_NFC_DEP);
 
     num_tlv++;
-    NFA_TRACE_DEBUG1("%s - NFC DEP added for DH!!!", __func__);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("%s - NFC DEP added for DH!!!", __func__);
   }
   /* update the num_tlv and current offset */
   uint8_t entry_size = (uint8_t)(pp - p);
@@ -323,16 +409,18 @@
         num_tlv++;
         uint8_t* pa = &p_cb->aid_cfg[start_offset];
 
-        NFA_TRACE_DEBUG2("%s -  p_cb->aid_info%x", __func__,
-                         p_cb->aid_info[xx]);
+        DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+            "%s -  p_cb->aid_info%x", __func__, p_cb->aid_info[xx]);
         if (p_cb->aid_info[xx] & NCI_ROUTE_QUAL_LONG_SELECT) {
-          NFA_TRACE_DEBUG2("%s - %x", __func__,
-                           p_cb->aid_info[xx] & NCI_ROUTE_QUAL_LONG_SELECT);
+          DLOG_IF(INFO, nfc_debug_enabled)
+              << StringPrintf("%s - %x", __func__,
+                              p_cb->aid_info[xx] & NCI_ROUTE_QUAL_LONG_SELECT);
           route_qual |= NCI_ROUTE_QUAL_LONG_SELECT;
         }
         if (p_cb->aid_info[xx] & NCI_ROUTE_QUAL_SHORT_SELECT) {
-          NFA_TRACE_DEBUG2("%s - %x", __func__,
-                           p_cb->aid_info[xx] & NCI_ROUTE_QUAL_SHORT_SELECT);
+          DLOG_IF(INFO, nfc_debug_enabled)
+              << StringPrintf("%s - %x", __func__,
+                              p_cb->aid_info[xx] & NCI_ROUTE_QUAL_SHORT_SELECT);
           route_qual |= NCI_ROUTE_QUAL_SHORT_SELECT;
         }
 
@@ -360,7 +448,61 @@
       }
     }
   } else {
-    NFA_TRACE_DEBUG1("%s - No AID entries available", __func__);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("%s - No AID entries available", __func__);
+  }
+}
+
+static void nfa_ee_add_sys_code_route_to_ecb(tNFA_EE_ECB* p_cb, uint8_t* pp,
+                                             uint8_t* p, uint8_t* p_buff,
+                                             int* p_cur_offset,
+                                             int* p_max_len) {
+  uint8_t num_tlv = *p_buff;
+
+  /* add the SC routing */
+  if (p_cb->sys_code_cfg_entries) {
+    int start_offset = 0;
+    for (int xx = 0; xx < p_cb->sys_code_cfg_entries; xx++) {
+      /* remember the beginning of this SC routing entry, just in case we
+       * need to put it in next command */
+      uint8_t* p_start = pp;
+      /* add one SC entry */
+      if (p_cb->sys_code_rt_loc_vs_info[xx] & NFA_EE_AE_ROUTE) {
+        uint8_t* p_sys_code_cfg = &p_cb->sys_code_cfg[start_offset];
+        if (nfa_ee_is_active(p_cb->sys_code_rt_loc[xx] | NFA_HANDLE_GROUP_EE)) {
+          add_route_sys_code_tlv(&pp, p_sys_code_cfg, p_cb->sys_code_rt_loc[xx],
+                                 p_cb->sys_code_pwr_cfg[xx]);
+          p_cb->ecb_flags |= NFA_EE_ECB_FLAGS_ROUTING;
+          num_tlv++;
+        } else {
+          DLOG_IF(INFO, nfc_debug_enabled)
+              << StringPrintf("%s -  ignoring route loc%x", __func__,
+                              p_cb->sys_code_rt_loc[xx]);
+        }
+      }
+      start_offset += NFA_EE_SYSTEM_CODE_LEN;
+      uint8_t new_size = (uint8_t)(pp - p_start);
+      nfa_ee_check_set_routing(new_size, p_max_len, p_buff, p_cur_offset);
+      if (*p_buff == 0 && (num_tlv > 0x00)) {
+        /* just sent routing command, update local */
+        *p_buff = 1;
+        num_tlv = *p_buff;
+        *p_cur_offset = new_size;
+        pp = p_buff + 1;
+        p = pp;
+        memcpy(p, p_start, new_size);
+        pp += new_size;
+      } else {
+        /* add the new entry */
+        *p_buff = num_tlv;
+        *p_cur_offset += new_size;
+      }
+    }
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "nfa_ee_route_add_one_ecb_by_route_order --num_tlv:- %d", num_tlv);
+  } else {
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("%s - No SC entries available", __func__);
   }
 }
 
@@ -375,11 +517,10 @@
 *******************************************************************************/
 static void nfa_ee_conn_cback(uint8_t conn_id, tNFC_CONN_EVT event,
                               tNFC_CONN* p_data) {
-  NFC_HDR* p_msg;
   tNFA_EE_NCI_CONN cbk;
 
-  NFA_TRACE_DEBUG2("nfa_ee_conn_cback: conn_id: %d, event=0x%02x", conn_id,
-                   event);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "nfa_ee_conn_cback: conn_id: %d, event=0x%02x", conn_id, event);
 
   cbk.hdr.event = NFA_EE_NCI_CONN_EVT;
   if (event == NFC_DATA_CEVT) {
@@ -389,9 +530,10 @@
   cbk.conn_id = conn_id;
   cbk.event = event;
   cbk.p_data = p_data;
-  p_msg = (NFC_HDR*)&cbk;
+  tNFA_EE_MSG nfa_ee_msg;
+  nfa_ee_msg.conn = cbk;
 
-  nfa_ee_evt_hdlr(p_msg);
+  nfa_ee_evt_hdlr(&nfa_ee_msg.hdr);
 }
 
 /*******************************************************************************
@@ -416,6 +558,45 @@
 
 /*******************************************************************************
 **
+** Function         nfa_ee_find_total_sys_code_len
+**
+** Description      Find the total len in sys_code_cfg from start_entry to the
+**                  last in the given ecb.
+**
+** Returns          void
+**
+*******************************************************************************/
+int nfa_ee_find_total_sys_code_len(tNFA_EE_ECB* p_cb, int start_entry) {
+  int len = 0;
+  if (p_cb->sys_code_cfg_entries > start_entry) {
+    for (int xx = start_entry; xx < p_cb->sys_code_cfg_entries; xx++) {
+      len += NFA_EE_SYSTEM_CODE_LEN;
+    }
+  }
+  return len;
+}
+
+/*******************************************************************************
+**
+** Function         nfa_all_ee_find_total_sys_code_len
+**
+** Description      Find the total len in sys_code_cfg from start_entry to the
+**                  last for all EE and DH.
+**
+** Returns          total length
+**
+*******************************************************************************/
+int nfa_all_ee_find_total_sys_code_len() {
+  int total_len = 0;
+  for (int32_t xx = 0; xx < NFA_EE_NUM_ECBS; xx++) {
+    tNFA_EE_ECB* p_cb = &nfa_ee_cb.ecb[xx];
+    total_len += nfa_ee_find_total_sys_code_len(p_cb, 0);
+  }
+  return total_len;
+}
+
+/*******************************************************************************
+**
 ** Function         nfa_ee_find_aid_offset
 **
 ** Description      Given the AID, find the associated tNFA_EE_ECB and the
@@ -431,7 +612,7 @@
 
   p_ecb = &nfa_ee_cb.ecb[NFA_EE_CB_4_DH];
   aid_len_offset = 1; /* skip the tag */
-  for (yy = 0; yy < nfa_ee_cb.cur_ee; yy++, p_ecb++) {
+  for (yy = 0; yy <= nfa_ee_cb.cur_ee; yy++) {
     if (p_ecb->aid_entries) {
       offset = 0;
       for (xx = 0; xx < p_ecb->aid_entries; xx++) {
@@ -458,6 +639,49 @@
 }
 
 /*******************************************************************************
+ **
+ ** Function         nfa_ee_find_sys_code_offset
+ **
+ ** Description      Given the System Code, find the associated tNFA_EE_ECB and
+ *the
+ **                  offset in sys_code_cfg[]. *p_entry is the index.
+ **
+ ** Returns          void
+ **
+ *******************************************************************************/
+tNFA_EE_ECB* nfa_ee_find_sys_code_offset(uint16_t sys_code, int* p_offset,
+                                         int* p_entry) {
+  tNFA_EE_ECB* p_ret = NULL;
+
+  for (uint8_t xx = 0; xx < NFA_EE_NUM_ECBS; xx++) {
+    tNFA_EE_ECB* p_ecb = &nfa_ee_cb.ecb[xx];
+    uint8_t mask = nfa_ee_ecb_to_mask(p_ecb);
+    if ((nfa_ee_cb.ee_cfged & mask) == 0 || p_ecb->sys_code_cfg_entries == 0) {
+      continue; /*try next ecb*/
+    }
+    if (p_ecb->sys_code_cfg_entries) {
+      uint8_t offset = 0;
+      for (uint8_t yy = 0; yy < p_ecb->sys_code_cfg_entries; yy++) {
+        if ((memcmp(&p_ecb->sys_code_cfg[offset], &sys_code,
+                    NFA_EE_SYSTEM_CODE_LEN) == 0)) {
+          p_ret = p_ecb;
+          if (p_offset) *p_offset = offset;
+          if (p_entry) *p_entry = yy;
+          break;
+        }
+        offset += NFA_EE_SYSTEM_CODE_LEN;
+      }
+
+      if (p_ret) {
+        /* found the entry already */
+        return p_ret;
+      }
+    }
+  }
+  return p_ret;
+}
+
+/*******************************************************************************
 **
 ** Function         nfa_ee_report_event
 **
@@ -510,11 +734,11 @@
   tNFA_EE_CBACK* p_cback = p_data->ee_discover.p_cback;
   tNFA_EE_CBACK_DATA evt_data = {0};
 
-  NFA_TRACE_DEBUG1("nfa_ee_api_discover() in_use:%d",
-                   nfa_ee_cb.discv_timer.in_use);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("in_use:%d", nfa_ee_cb.discv_timer.in_use);
   if (nfa_ee_cb.discv_timer.in_use) {
     nfa_sys_stop_timer(&nfa_ee_cb.discv_timer);
-    NFC_NfceeDiscover(false);
+    if (NFA_GetNCIVersion() != NCI_VERSION_2_0) NFC_NfceeDiscover(false);
   }
   if (nfa_ee_cb.p_ee_disc_cback == NULL &&
       NFC_NfceeDiscover(true) == NFC_STATUS_OK) {
@@ -582,7 +806,7 @@
   int index = p_data->deregister.index;
   tNFA_EE_CBACK_DATA evt_data = {0};
 
-  NFA_TRACE_DEBUG0("nfa_ee_api_deregister");
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("nfa_ee_api_deregister");
   p_cback = nfa_ee_cb.p_ee_cback[index];
   nfa_ee_cb.p_ee_cback[index] = NULL;
   if (p_cback) (*p_cback)(NFA_EE_DEREGISTER_EVT, &evt_data);
@@ -599,10 +823,19 @@
 *******************************************************************************/
 void nfa_ee_api_mode_set(tNFA_EE_MSG* p_data) {
   tNFA_EE_ECB* p_cb = p_data->cfg_hdr.p_cb;
-
-  NFA_TRACE_DEBUG2("nfa_ee_api_mode_set() handle:0x%02x mode:%d",
-                   p_cb->nfcee_id, p_data->mode_set.mode);
-  NFC_NfceeModeSet(p_cb->nfcee_id, p_data->mode_set.mode);
+  tNFA_EE_MODE_SET mode_set;
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "handle:0x%02x mode:%d", p_cb->nfcee_id, p_data->mode_set.mode);
+  mode_set.status = NFC_NfceeModeSet(p_cb->nfcee_id, p_data->mode_set.mode);
+  if (mode_set.status != NFC_STATUS_OK) {
+    /* the api is rejected at NFC layer, report the failure status right away */
+    mode_set.ee_handle = (tNFA_HANDLE)p_cb->nfcee_id | NFA_HANDLE_GROUP_EE;
+    mode_set.ee_status = p_data->mode_set.mode;
+    tNFA_EE_CBACK_DATA nfa_ee_cback_data;
+    nfa_ee_cback_data.mode_set = mode_set;
+    nfa_ee_report_event(NULL, NFA_EE_MODE_SET_EVT, &nfa_ee_cback_data);
+    return;
+  }
   /* set the NFA_EE_STATUS_PENDING bit to indicate the status is not exactly
    * active */
   if (p_data->mode_set.mode == NFC_MODE_ACTIVATE)
@@ -635,31 +868,46 @@
   tNFA_TECHNOLOGY_MASK old_tech_switch_on = p_cb->tech_switch_on;
   tNFA_TECHNOLOGY_MASK old_tech_switch_off = p_cb->tech_switch_off;
   tNFA_TECHNOLOGY_MASK old_tech_battery_off = p_cb->tech_battery_off;
+  tNFA_TECHNOLOGY_MASK old_tech_screen_lock = p_cb->tech_screen_lock;
+  tNFA_TECHNOLOGY_MASK old_tech_screen_off = p_cb->tech_screen_off;
+  tNFA_TECHNOLOGY_MASK old_tech_screen_off_lock = p_cb->tech_screen_off_lock;
   uint8_t old_size_mask = p_cb->size_mask;
 
   if ((p_cb->tech_switch_on == p_data->set_tech.technologies_switch_on) &&
       (p_cb->tech_switch_off == p_data->set_tech.technologies_switch_off) &&
-      (p_cb->tech_battery_off == p_data->set_tech.technologies_battery_off)) {
+      (p_cb->tech_battery_off == p_data->set_tech.technologies_battery_off) &&
+      (p_cb->tech_screen_lock == p_data->set_tech.technologies_screen_lock) &&
+      (p_cb->tech_screen_off == p_data->set_tech.technologies_screen_off) &&
+      (p_cb->tech_screen_off_lock ==
+       p_data->set_tech.technologies_screen_off_lock)) {
     /* nothing to change */
     evt_data.status = NFA_STATUS_OK;
     nfa_ee_report_event(p_cb->p_ee_cback, NFA_EE_SET_TECH_CFG_EVT, &evt_data);
     return;
   }
 
-  p_cb->tech_switch_on = p_data->set_tech.technologies_switch_on;
-  p_cb->tech_switch_off = p_data->set_tech.technologies_switch_off;
-  p_cb->tech_battery_off = p_data->set_tech.technologies_battery_off;
+  p_cb->tech_switch_on |= p_data->set_tech.technologies_switch_on;
+  p_cb->tech_switch_off |= p_data->set_tech.technologies_switch_off;
+  p_cb->tech_battery_off |= p_data->set_tech.technologies_battery_off;
+  p_cb->tech_screen_lock |= p_data->set_tech.technologies_screen_lock;
+  p_cb->tech_screen_off |= p_data->set_tech.technologies_screen_off;
+  p_cb->tech_screen_off_lock |= p_data->set_tech.technologies_screen_off_lock;
   nfa_ee_update_route_size(p_cb);
   if (nfa_ee_total_lmrt_size() > NFC_GetLmrtSize()) {
-    NFA_TRACE_ERROR0("nfa_ee_api_set_tech_cfg Exceed LMRT size");
+    LOG(ERROR) << StringPrintf("nfa_ee_api_set_tech_cfg Exceed LMRT size");
     evt_data.status = NFA_STATUS_BUFFER_FULL;
     p_cb->tech_switch_on = old_tech_switch_on;
     p_cb->tech_switch_off = old_tech_switch_off;
     p_cb->tech_battery_off = old_tech_battery_off;
+    p_cb->tech_screen_lock = old_tech_screen_lock;
+    p_cb->tech_screen_off = old_tech_screen_off;
+    p_cb->tech_screen_off_lock = old_tech_screen_off_lock;
     p_cb->size_mask = old_size_mask;
   } else {
     p_cb->ecb_flags |= NFA_EE_ECB_FLAGS_TECH;
-    if (p_cb->tech_switch_on | p_cb->tech_switch_off | p_cb->tech_battery_off) {
+    if (p_cb->tech_switch_on | p_cb->tech_switch_off | p_cb->tech_battery_off |
+        p_cb->tech_screen_lock | p_cb->tech_screen_off |
+        p_cb->tech_screen_off_lock) {
       /* if any technology in any power mode is configured, mark this entry as
        * configured */
       nfa_ee_cb.ee_cfged |= nfa_ee_ecb_to_mask(p_cb);
@@ -686,32 +934,46 @@
   tNFA_PROTOCOL_MASK old_proto_switch_on = p_cb->proto_switch_on;
   tNFA_PROTOCOL_MASK old_proto_switch_off = p_cb->proto_switch_off;
   tNFA_PROTOCOL_MASK old_proto_battery_off = p_cb->proto_battery_off;
+  tNFA_PROTOCOL_MASK old_proto_screen_lock = p_cb->proto_screen_lock;
+  tNFA_PROTOCOL_MASK old_proto_screen_off = p_cb->proto_screen_off;
+  tNFA_PROTOCOL_MASK old_proto_screen_off_lock = p_cb->proto_screen_off_lock;
   uint8_t old_size_mask = p_cb->size_mask;
 
   if ((p_cb->proto_switch_on == p_data->set_proto.protocols_switch_on) &&
       (p_cb->proto_switch_off == p_data->set_proto.protocols_switch_off) &&
-      (p_cb->proto_battery_off == p_data->set_proto.protocols_battery_off)) {
+      (p_cb->proto_battery_off == p_data->set_proto.protocols_battery_off) &&
+      (p_cb->proto_screen_lock == p_data->set_proto.protocols_screen_lock) &&
+      (p_cb->proto_screen_off == p_data->set_proto.protocols_screen_off) &&
+      (p_cb->proto_screen_off_lock ==
+       p_data->set_proto.protocols_screen_off_lock)) {
     /* nothing to change */
     evt_data.status = NFA_STATUS_OK;
     nfa_ee_report_event(p_cb->p_ee_cback, NFA_EE_SET_PROTO_CFG_EVT, &evt_data);
     return;
   }
 
-  p_cb->proto_switch_on = p_data->set_proto.protocols_switch_on;
-  p_cb->proto_switch_off = p_data->set_proto.protocols_switch_off;
-  p_cb->proto_battery_off = p_data->set_proto.protocols_battery_off;
+  p_cb->proto_switch_on |= p_data->set_proto.protocols_switch_on;
+  p_cb->proto_switch_off |= p_data->set_proto.protocols_switch_off;
+  p_cb->proto_battery_off |= p_data->set_proto.protocols_battery_off;
+  p_cb->proto_screen_lock |= p_data->set_proto.protocols_screen_lock;
+  p_cb->proto_screen_off |= p_data->set_proto.protocols_screen_off;
+  p_cb->proto_screen_off_lock |= p_data->set_proto.protocols_screen_off_lock;
   nfa_ee_update_route_size(p_cb);
   if (nfa_ee_total_lmrt_size() > NFC_GetLmrtSize()) {
-    NFA_TRACE_ERROR0("nfa_ee_api_set_proto_cfg Exceed LMRT size");
+    LOG(ERROR) << StringPrintf("nfa_ee_api_set_proto_cfg Exceed LMRT size");
     evt_data.status = NFA_STATUS_BUFFER_FULL;
     p_cb->proto_switch_on = old_proto_switch_on;
     p_cb->proto_switch_off = old_proto_switch_off;
     p_cb->proto_battery_off = old_proto_battery_off;
+    p_cb->proto_screen_lock = old_proto_screen_lock;
+    p_cb->proto_screen_off = old_proto_screen_off;
+    p_cb->proto_screen_off_lock = old_proto_screen_off_lock;
     p_cb->size_mask = old_size_mask;
   } else {
     p_cb->ecb_flags |= NFA_EE_ECB_FLAGS_PROTO;
     if (p_cb->proto_switch_on | p_cb->proto_switch_off |
-        p_cb->proto_battery_off) {
+        p_cb->proto_battery_off | p_cb->proto_screen_lock |
+        p_cb->proto_screen_off | p_cb->proto_screen_off_lock) {
       /* if any protocol in any power mode is configured, mark this entry as
        * configured */
       nfa_ee_cb.ee_cfged |= nfa_ee_ecb_to_mask(p_cb);
@@ -747,21 +1009,21 @@
   p_chk_cb =
       nfa_ee_find_aid_offset(p_add->aid_len, p_add->p_aid, &offset, &entry);
   if (p_chk_cb) {
-    NFA_TRACE_DEBUG0(
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
         "nfa_ee_api_add_aid The AID entry is already in the database");
     if (p_chk_cb == p_cb) {
       p_cb->aid_rt_info[entry] |= NFA_EE_AE_ROUTE;
       p_cb->aid_info[entry] = p_add->aidInfo;
       new_size = nfa_ee_total_lmrt_size();
       if (new_size > NFC_GetLmrtSize()) {
-        NFA_TRACE_ERROR1("Exceed LMRT size:%d (add ROUTE)", new_size);
+        LOG(ERROR) << StringPrintf("Exceed LMRT size:%d (add ROUTE)", new_size);
         evt_data.status = NFA_STATUS_BUFFER_FULL;
         p_cb->aid_rt_info[entry] &= ~NFA_EE_AE_ROUTE;
       } else {
         p_cb->aid_pwr_cfg[entry] = p_add->power_state;
       }
     } else {
-      NFA_TRACE_ERROR1(
+      LOG(ERROR) << StringPrintf(
           "The AID entry is already in the database for different NFCEE "
           "ID:0x%02x",
           p_chk_cb->nfcee_id);
@@ -775,7 +1037,7 @@
     len_needed = p_add->aid_len + 2; /* tag/len */
 
     if ((len_needed + len) > NFA_EE_MAX_AID_CFG_LEN) {
-      NFA_TRACE_ERROR3(
+      LOG(ERROR) << StringPrintf(
           "Exceed capacity: (len_needed:%d + len:%d) > "
           "NFA_EE_MAX_AID_CFG_LEN:%d",
           len_needed, len, NFA_EE_MAX_AID_CFG_LEN);
@@ -784,7 +1046,7 @@
       /* 4 = 1 (tag) + 1 (len) + 1(nfcee_id) + 1(power cfg) */
       new_size = nfa_ee_total_lmrt_size() + 4 + p_add->aid_len;
       if (new_size > NFC_GetLmrtSize()) {
-        NFA_TRACE_ERROR1("Exceed LMRT size:%d", new_size);
+        LOG(ERROR) << StringPrintf("Exceed LMRT size:%d", new_size);
         evt_data.status = NFA_STATUS_BUFFER_FULL;
       } else {
         /* add AID */
@@ -801,8 +1063,8 @@
         p_cb->aid_len[p_cb->aid_entries++] = (uint8_t)(p - p_start);
       }
     } else {
-      NFA_TRACE_ERROR1("Exceed NFA_EE_MAX_AID_ENTRIES:%d",
-                       NFA_EE_MAX_AID_ENTRIES);
+      LOG(ERROR) << StringPrintf("Exceed NFA_EE_MAX_AID_ENTRIES:%d",
+                                 NFA_EE_MAX_AID_ENTRIES);
       evt_data.status = NFA_STATUS_BUFFER_FULL;
     }
   }
@@ -814,8 +1076,8 @@
     nfa_ee_update_route_aid_size(p_cb);
     nfa_ee_start_timer();
   }
-  NFA_TRACE_DEBUG2("status:%d ee_cfged:0x%02x ", evt_data.status,
-                   nfa_ee_cb.ee_cfged);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "status:%d ee_cfged:0x%02x ", evt_data.status, nfa_ee_cb.ee_cfged);
   /* report the status of this operation */
   nfa_ee_report_event(p_cb->p_ee_cback, NFA_EE_ADD_AID_EVT, &evt_data);
 }
@@ -843,8 +1105,8 @@
   p_cb = nfa_ee_find_aid_offset(p_data->rm_aid.aid_len, p_data->rm_aid.p_aid,
                                 &offset, &entry);
   if (p_cb && p_cb->aid_entries) {
-    NFA_TRACE_DEBUG2("aid_rt_info[%d]: 0x%02x", entry,
-                     p_cb->aid_rt_info[entry]);
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "aid_rt_info[%d]: 0x%02x", entry, p_cb->aid_rt_info[entry]);
     /* mark routing and VS changed */
     if (p_cb->aid_rt_info[entry] & NFA_EE_AE_ROUTE)
       p_cb->ecb_flags |= NFA_EE_ECB_FLAGS_AID;
@@ -859,8 +1121,8 @@
       rest_len = nfa_ee_find_total_aid_len(p_cb, entry + 1);
 
       len = p_cb->aid_len[entry];
-      NFA_TRACE_DEBUG2("nfa_ee_api_remove_aid len:%d, rest_len:%d", len,
-                       rest_len);
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+          "nfa_ee_api_remove_aid len:%d, rest_len:%d", len, rest_len);
       GKI_shiftup(&p_cb->aid_cfg[offset], &p_cb->aid_cfg[offset + len],
                   rest_len);
       rest_len = p_cb->aid_entries - entry;
@@ -878,7 +1140,7 @@
     /* report NFA_EE_REMOVE_AID_EVT to the callback associated the NFCEE */
     p_cback = p_cb->p_ee_cback;
   } else {
-    NFA_TRACE_ERROR0(
+    LOG(ERROR) << StringPrintf(
         "nfa_ee_api_remove_aid The AID entry is not in the database");
     evt_data.status = NFA_STATUS_INVALID_PARAM;
   }
@@ -886,6 +1148,180 @@
 }
 
 /*******************************************************************************
+ **
+ ** Function         nfa_ee_api_add_sys_code
+ **
+ ** Description      Adds System Code routing configuration from user. When the
+ **                  timer expires, the configuration collected in control block
+ **                  is sent to NFCC
+ **
+ ** Returns          void
+ **
+ *******************************************************************************/
+void nfa_ee_api_add_sys_code(tNFA_EE_MSG* p_data) {
+  tNFA_EE_CBACK_DATA evt_data = {0};
+  tNFA_EE_API_ADD_SYSCODE* p_add = &p_data->add_syscode;
+  tNFA_EE_ECB* p_cb = p_data->cfg_hdr.p_cb;
+
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "%s id:0x%x SC:0x%X ", __func__, p_add->nfcee_id, p_add->syscode);
+
+  int offset = 0, entry = 0;
+  tNFA_EE_ECB* p_chk_cb =
+      nfa_ee_find_sys_code_offset(p_add->syscode, &offset, &entry);
+
+  if (p_chk_cb) {
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "%s: The SC entry already registered "
+        "for this NFCEE id:0x%02x",
+        __func__, p_add->nfcee_id);
+
+    if (p_chk_cb == p_cb) {
+      p_cb->sys_code_rt_loc_vs_info[entry] |= NFA_EE_AE_ROUTE;
+      uint16_t new_size = nfa_ee_total_lmrt_size();
+      if (new_size > NFC_GetLmrtSize()) {
+        LOG(ERROR) << StringPrintf("Exceeded LMRT size:%d (add SYSCODE)",
+                                   new_size);
+        evt_data.status = NFA_STATUS_BUFFER_FULL;
+        p_cb->sys_code_rt_loc_vs_info[entry] &= ~NFA_EE_AE_ROUTE;
+      } else {
+        p_cb->sys_code_pwr_cfg[entry] = p_add->power_state;
+      }
+    } else {
+      LOG(ERROR) << StringPrintf(
+          "%s: SystemCode entry already registered for different "
+          "NFCEE id:0x%02x",
+          __func__, p_chk_cb->nfcee_id);
+      evt_data.status = NFA_STATUS_REJECTED;
+    }
+  } else {
+    /* Find the total length so far in sys_code_cfg */
+    int total_sc_len = nfa_all_ee_find_total_sys_code_len();
+    /* make sure the control block has enough room to hold this entry */
+    if ((NFA_EE_SYSTEM_CODE_LEN + total_sc_len) >
+        NFA_EE_MAX_SYSTEM_CODE_CFG_LEN) {
+      LOG(ERROR) << StringPrintf(
+          "Exceeded capacity: (NFA_EE_SYSTEM_CODE_LEN:%d + total_sc_len:%d) > "
+          "NFA_EE_MAX_SYSTEM_CODE_CFG_LEN:%d",
+          NFA_EE_SYSTEM_CODE_LEN, total_sc_len, NFA_EE_MAX_SYSTEM_CODE_CFG_LEN);
+      evt_data.status = NFA_STATUS_BUFFER_FULL;
+    } else if (p_cb->sys_code_cfg_entries < NFA_EE_MAX_SYSTEM_CODE_ENTRIES) {
+      /* 6 = 1 (tag) + 1 (len) + 1(nfcee_id) + 1(power cfg) + 2(system code)*/
+      uint16_t new_size =
+          nfa_ee_total_lmrt_size() + NFA_EE_SYSTEM_CODE_TLV_SIZE;
+      if (new_size > NFC_GetLmrtSize()) {
+        LOG(ERROR) << StringPrintf("Exceeded LMRT size:%d", new_size);
+        evt_data.status = NFA_STATUS_BUFFER_FULL;
+      } else {
+        /* add SC entry*/
+        uint32_t p_cb_sc_len = nfa_ee_find_total_sys_code_len(p_cb, 0);
+        p_cb->sys_code_pwr_cfg[p_cb->sys_code_cfg_entries] = p_add->power_state;
+        p_cb->sys_code_rt_loc[p_cb->sys_code_cfg_entries] = p_add->nfcee_id;
+        p_cb->sys_code_rt_loc_vs_info[p_cb->sys_code_cfg_entries] =
+            NFA_EE_AE_ROUTE;
+
+        uint8_t* p = p_cb->sys_code_cfg + p_cb_sc_len;
+        memcpy(p, &p_add->syscode, NFA_EE_SYSTEM_CODE_LEN);
+        p += NFA_EE_SYSTEM_CODE_LEN;
+
+        p_cb->sys_code_cfg_entries++;
+      }
+    } else {
+      LOG(ERROR) << StringPrintf("Exceeded NFA_EE_MAX_SYSTEM_CODE_ENTRIES:%d",
+                                 NFA_EE_MAX_SYSTEM_CODE_ENTRIES);
+      evt_data.status = NFA_STATUS_BUFFER_FULL;
+    }
+  }
+
+  if (evt_data.status == NFA_STATUS_OK) {
+    /* mark SC changed */
+    p_cb->ecb_flags |= NFA_EE_ECB_FLAGS_SYSCODE;
+    nfa_ee_cb.ee_cfged |= nfa_ee_ecb_to_mask(p_cb);
+    nfa_ee_update_route_sys_code_size(p_cb);
+    nfa_ee_start_timer();
+  }
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("%s: status:%d ee_cfged:0x%02x ", __func__,
+                      evt_data.status, nfa_ee_cb.ee_cfged);
+
+  /* report the status of this operation */
+  nfa_ee_report_event(p_cb->p_ee_cback, NFA_EE_ADD_SYSCODE_EVT, &evt_data);
+}
+
+/*******************************************************************************
+**
+** Function         nfa_ee_api_remove_sys_code
+**
+** Description      process remove an System Code routing configuration from
+**                  user start a 1 second timer. When the timer expires,
+**                  the configuration collected in control block is sent to NFCC
+**
+** Returns          void
+**
+*******************************************************************************/
+void nfa_ee_api_remove_sys_code(tNFA_EE_MSG* p_data) {
+  tNFA_EE_CBACK_DATA evt_data = {0};
+  tNFA_EE_API_REMOVE_SYSCODE* p_remove = &p_data->rm_syscode;
+
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("%s SC:0x%x", __func__, p_remove->syscode);
+
+  int offset = 0, entry = 0;
+  tNFA_EE_ECB* p_cb =
+      nfa_ee_find_sys_code_offset(p_data->rm_syscode.syscode, &offset, &entry);
+
+  if (p_cb && p_cb->sys_code_cfg_entries) {
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("sys_code_rt_loc_vs_info[%d]: 0x%02x", entry,
+                        p_cb->sys_code_rt_loc_vs_info[entry]);
+    /* mark routing and VS changed */
+    if (p_cb->sys_code_rt_loc_vs_info[entry] & NFA_EE_AE_ROUTE)
+      p_cb->ecb_flags |= NFA_EE_ECB_FLAGS_SYSCODE;
+
+    if (p_cb->sys_code_rt_loc_vs_info[entry] & NFA_EE_AE_VS)
+      p_cb->ecb_flags |= NFA_EE_ECB_FLAGS_VS;
+
+    /* remove the system code */
+    if ((entry + 1) < p_cb->sys_code_cfg_entries) {
+      /* not the last entry, move the SC entries in control block */
+      /* Find the total len from the next entry to the last one */
+      int total_len = nfa_ee_find_total_sys_code_len(p_cb, entry + 1);
+
+      int rm_len = NFA_EE_SYSTEM_CODE_LEN;
+
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("nfa_ee_api_remove_sys_code: rm_len:%d, total_len:%d",
+                          rm_len, total_len);
+
+      GKI_shiftup(&p_cb->sys_code_cfg[offset],
+                  &p_cb->sys_code_cfg[offset + rm_len], total_len);
+
+      total_len = p_cb->sys_code_cfg_entries - entry;
+
+      GKI_shiftup(&p_cb->sys_code_pwr_cfg[entry],
+                  &p_cb->sys_code_pwr_cfg[entry + 1], total_len);
+
+      GKI_shiftup(&p_cb->sys_code_rt_loc_vs_info[entry],
+                  &p_cb->sys_code_rt_loc_vs_info[entry + 1], total_len);
+
+      GKI_shiftup(&p_cb->sys_code_rt_loc[entry],
+                  &p_cb->sys_code_rt_loc[entry + 1], total_len);
+    }
+    /* else the last entry, just reduce the aid_entries by 1 */
+    p_cb->sys_code_cfg_entries--;
+    nfa_ee_cb.ee_cfged |= nfa_ee_ecb_to_mask(p_cb);
+    nfa_ee_update_route_sys_code_size(p_cb);
+    nfa_ee_start_timer();
+  } else {
+    LOG(ERROR) << StringPrintf(
+        "nfa_ee_api_remove_sys_code: The SC entry is not in the database");
+    evt_data.status = NFA_STATUS_INVALID_PARAM;
+  }
+  /* report the status of this operation */
+  nfa_ee_report_event(p_cb->p_ee_cback, NFA_EE_REMOVE_SYSCODE_EVT, &evt_data);
+}
+
+/*******************************************************************************
 **
 ** Function         nfa_ee_api_lmrt_size
 **
@@ -894,13 +1330,14 @@
 ** Returns          void
 **
 *******************************************************************************/
-void nfa_ee_api_lmrt_size(tNFA_EE_MSG* p_data) {
+void nfa_ee_api_lmrt_size(__attribute__((unused)) tNFA_EE_MSG* p_data) {
   tNFA_EE_CBACK_DATA evt_data = {0};
   uint16_t total_size = NFC_GetLmrtSize();
 
   evt_data.size = total_size - nfa_ee_total_lmrt_size();
-  NFA_TRACE_DEBUG2("nfa_ee_api_lmrt_size total size:%d remaining size:%d",
-                   total_size, evt_data.size);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfa_ee_api_lmrt_size total size:%d remaining size:%d",
+                      total_size, evt_data.size);
 
   nfa_ee_report_event(NULL, NFA_EE_REMAINING_SIZE_EVT, &evt_data);
 }
@@ -918,7 +1355,7 @@
   tNFA_EE_CBACK_DATA evt_data;
 
   if (nfa_ee_cb.ee_wait_evt & NFA_EE_WAIT_UPDATE_ALL) {
-    NFA_TRACE_ERROR2(
+    LOG(ERROR) << StringPrintf(
         "nfa_ee_api_update_now still waiting for update complete "
         "ee_wait_evt:0x%x wait_rsp:%d",
         nfa_ee_cb.ee_wait_evt, nfa_ee_cb.wait_rsp);
@@ -996,12 +1433,16 @@
       memcpy(p, p_data->send_data.p_data, p_pkt->len);
       NFC_SendData(p_cb->conn_id, p_pkt);
     } else {
+      tNFA_EE_CBACK_DATA nfa_ee_cback_data;
+      nfa_ee_cback_data.status = status;
       nfa_ee_report_event(p_cb->p_ee_cback, NFA_EE_NO_MEM_ERR_EVT,
-                          (tNFA_EE_CBACK_DATA*)&status);
+                          &nfa_ee_cback_data);
     }
   } else {
+    tNFA_EE_CBACK_DATA nfa_ee_cback_data;
+    nfa_ee_cback_data.status = status;
     nfa_ee_report_event(p_cb->p_ee_cback, NFA_EE_NO_CB_ERR_EVT,
-                        (tNFA_EE_CBACK_DATA*)&status);
+                        &nfa_ee_cback_data);
   }
 }
 
@@ -1039,8 +1480,8 @@
   tNFA_EE_CBACK* p_cback;
   tNFA_EE_CBACK_DATA evt_data = {0};
 
-  NFA_TRACE_DEBUG3(
-      "nfa_ee_report_disc_done() em_state:%d num_ee_expecting:%d "
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "em_state:%d num_ee_expecting:%d "
       "notify_enable_done:%d",
       nfa_ee_cb.em_state, nfa_ee_cb.num_ee_expecting, notify_enable_done);
   if (nfa_ee_cb.num_ee_expecting == 0) {
@@ -1066,6 +1507,9 @@
       NFA_EeGetInfo(&evt_data.ee_discover.num_ee, evt_data.ee_discover.ee_info);
       nfa_ee_report_event(p_cback, NFA_EE_DISCOVER_EVT, &evt_data);
     }
+    if ((nfa_hci_cb.hci_state == NFA_HCI_STATE_EE_RECOVERY) &&
+        nfa_ee_cb.p_enable_cback)
+      (*nfa_ee_cb.p_enable_cback)(NFA_EE_RECOVERY_REDISCOVERED);
   }
 }
 
@@ -1119,9 +1563,9 @@
     }
   }
 
-  NFA_TRACE_DEBUG3(
-      "nfa_ee_remove_pending() cur_ee:%d, num_removed:%d first_removed:%d",
-      nfa_ee_cb.cur_ee, num_removed, first_removed);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("cur_ee:%d, num_removed:%d first_removed:%d",
+                      nfa_ee_cb.cur_ee, num_removed, first_removed);
   if (num_removed && (first_removed != (nfa_ee_cb.cur_ee - num_removed))) {
     /* if the removes ECB entried are not at the end, move the entries up */
     p_cb_end = &nfa_ee_cb.ecb[nfa_ee_cb.cur_ee - 1];
@@ -1158,8 +1602,9 @@
   uint8_t num_nfcee = p_evt->num_nfcee;
   bool notify_enable_done = false;
 
-  NFA_TRACE_DEBUG3("nfa_ee_nci_disc_rsp() em_state:%d cur_ee:%d, num_nfcee:%d",
-                   nfa_ee_cb.em_state, nfa_ee_cb.cur_ee, num_nfcee);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("em_state:%d cur_ee:%d, num_nfcee:%d", nfa_ee_cb.em_state,
+                      nfa_ee_cb.cur_ee, num_nfcee);
   switch (nfa_ee_cb.em_state) {
     case NFA_EE_EM_STATE_INIT:
       nfa_ee_cb.cur_ee = 0;
@@ -1206,14 +1651,15 @@
   if (p_evt->status == NFC_STATUS_OK) {
     nfa_ee_cb.num_ee_expecting = p_evt->num_nfcee;
     if (nfa_ee_cb.num_ee_expecting > NFA_EE_MAX_EE_SUPPORTED) {
-      NFA_TRACE_ERROR2("NFA-EE num_ee_expecting:%d > max:%d",
-                       nfa_ee_cb.num_ee_expecting, NFA_EE_MAX_EE_SUPPORTED);
+      LOG(ERROR) << StringPrintf("NFA-EE num_ee_expecting:%d > max:%d",
+                                 nfa_ee_cb.num_ee_expecting,
+                                 NFA_EE_MAX_EE_SUPPORTED);
     }
   }
   nfa_ee_report_disc_done(notify_enable_done);
-  NFA_TRACE_DEBUG3(
-      "nfa_ee_nci_disc_rsp() em_state:%d cur_ee:%d num_ee_expecting:%d",
-      nfa_ee_cb.em_state, nfa_ee_cb.cur_ee, nfa_ee_cb.num_ee_expecting);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "em_state:%d cur_ee:%d num_ee_expecting:%d", nfa_ee_cb.em_state,
+      nfa_ee_cb.cur_ee, nfa_ee_cb.num_ee_expecting);
 }
 
 /*******************************************************************************
@@ -1234,8 +1680,8 @@
   tNFA_EE_INFO* p_info;
   tNFA_EE_EM_STATE new_em_state = NFA_EE_EM_STATE_MAX;
 
-  NFA_TRACE_DEBUG4(
-      "nfa_ee_nci_disc_ntf() em_state:%d ee_flags:0x%x cur_ee:%d "
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "em_state:%d ee_flags:0x%x cur_ee:%d "
       "num_ee_expecting:%d",
       nfa_ee_cb.em_state, nfa_ee_cb.ee_flags, nfa_ee_cb.cur_ee,
       nfa_ee_cb.num_ee_expecting);
@@ -1244,7 +1690,7 @@
     if ((nfa_ee_cb.num_ee_expecting == 0) &&
         (nfa_ee_cb.p_ee_disc_cback != NULL)) {
       /* Discovery triggered by API function */
-      NFC_NfceeDiscover(false);
+      if (NFA_GetNCIVersion() != NCI_VERSION_2_0) NFC_NfceeDiscover(false);
     }
   }
   switch (nfa_ee_cb.em_state) {
@@ -1275,8 +1721,9 @@
         nfa_ee_cb.cur_ee++;
         notify_new_ee = true;
       } else {
-        NFA_TRACE_DEBUG3("cur_ee:%d ecb_flags=0x%02x  ee_status=0x%x",
-                         nfa_ee_cb.cur_ee, p_cb->ecb_flags, p_cb->ee_status);
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("cur_ee:%d ecb_flags=0x%02x  ee_status=0x%x",
+                            nfa_ee_cb.cur_ee, p_cb->ecb_flags, p_cb->ee_status);
       }
       break;
 
@@ -1300,7 +1747,8 @@
       }
       break;
   }
-  NFA_TRACE_DEBUG1("nfa_ee_nci_disc_ntf cur_ee:%d", nfa_ee_cb.cur_ee);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfa_ee_nci_disc_ntf cur_ee:%d", nfa_ee_cb.cur_ee);
 
   if (p_cb) {
     p_cb->nfcee_id = p_ee->nfcee_id;
@@ -1309,7 +1757,8 @@
     memcpy(p_cb->ee_interface, p_ee->ee_interface, p_ee->num_interface);
     p_cb->num_tlvs = p_ee->num_tlvs;
     memcpy(p_cb->ee_tlv, p_ee->ee_tlv, p_ee->num_tlvs * sizeof(tNFA_EE_TLV));
-
+    if (NFA_GetNCIVersion() == NCI_VERSION_2_0)
+      p_cb->ee_power_supply_status = p_ee->nfcee_power_ctrl;
     if (nfa_ee_cb.em_state == NFA_EE_EM_STATE_RESTORING) {
       /* NCI spec says: An NFCEE_DISCOVER_NTF that contains a Protocol type of
        * "HCI Access"
@@ -1337,13 +1786,16 @@
         memcpy(p_info->ee_interface, p_cb->ee_interface, p_cb->num_interface);
         memcpy(p_info->ee_tlv, p_cb->ee_tlv,
                p_cb->num_tlvs * sizeof(tNFA_EE_TLV));
+        if (NFA_GetNCIVersion() == NCI_VERSION_2_0)
+          p_info->ee_power_supply_status = p_cb->ee_power_supply_status;
         nfa_ee_report_event(NULL, NFA_EE_NEW_EE_EVT, &evt_data);
       }
     } else
       nfa_ee_report_disc_done(notify_enable_done);
 
     if (p_cb->ecb_flags & NFA_EE_ECB_FLAGS_ORDER) {
-      NFA_TRACE_DEBUG0("NFA_EE_ECB_FLAGS_ORDER");
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("NFA_EE_ECB_FLAGS_ORDER");
       p_cb->ecb_flags &= ~NFA_EE_ECB_FLAGS_ORDER;
       nfa_ee_report_discover_req_evt();
     }
@@ -1359,7 +1811,30 @@
     if (nfa_ee_cb.discv_timer.in_use) {
       nfa_sys_stop_timer(&nfa_ee_cb.discv_timer);
       p_data->hdr.event = NFA_EE_DISCV_TIMEOUT_EVT;
-      nfa_ee_evt_hdlr((NFC_HDR*)p_data);
+      nfa_ee_evt_hdlr(&p_data->hdr);
+    }
+  }
+}
+
+/*******************************************************************************
+**
+** Function         nfa_ee_nci_nfcee_status_ntf
+**
+** Description      Process the callback for NFCEE status notification
+**
+** Returns          void
+**
+*******************************************************************************/
+void nfa_ee_nci_nfcee_status_ntf(tNFA_EE_MSG* p_data) {
+  if (p_data != NULL) {
+    tNFC_NFCEE_STATUS_REVT* p_ee_data = p_data->nfcee_status_ntf.p_data;
+    if ((NFA_GetNCIVersion() == NCI_VERSION_2_0) &&
+        (p_ee_data->nfcee_status == NFC_NFCEE_STATUS_UNRECOVERABLE_ERROR)) {
+      tNFA_EE_ECB* p_cb = nfa_ee_find_ecb(p_ee_data->nfcee_id);
+      if (p_cb && nfa_ee_cb.p_enable_cback) {
+        (*nfa_ee_cb.p_enable_cback)(NFA_EE_RECOVERY_INIT);
+        NFC_NfceeDiscover(true);
+      }
     }
   }
 }
@@ -1392,7 +1867,7 @@
     }
   }
 
-  NFA_TRACE_DEBUG2(
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
       "nfa_ee_check_restore_complete nfa_ee_cb.ee_cfg_sts:0x%02x "
       "proc_complete:%d",
       nfa_ee_cb.ee_cfg_sts, proc_complete);
@@ -1440,7 +1915,7 @@
     p_evt_data->num_ee++;
     p_info++;
 
-    NFA_TRACE_DEBUG6(
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
         "[%d] ee_handle:0x%x, listen protocol A:%d, B:%d, F:%d, BP:%d",
         p_evt_data->num_ee, p_cb->nfcee_id, p_cb->la_protocol,
         p_cb->lb_protocol, p_cb->lf_protocol, p_cb->lbp_protocol);
@@ -1459,20 +1934,19 @@
 **
 *******************************************************************************/
 static void nfa_ee_report_discover_req_evt(void) {
-  tNFA_EE_DISCOVER_REQ evt_data;
-
   if (nfa_ee_cb.p_enable_cback)
     (*nfa_ee_cb.p_enable_cback)(NFA_EE_DISC_STS_REQ);
 
   /* if this is restoring NFCC */
   if (!nfa_dm_is_active()) {
-    NFA_TRACE_DEBUG0("nfa_ee_report_discover_req_evt DM is not active");
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("nfa_ee_report_discover_req_evt DM is not active");
     return;
   }
 
-  nfa_ee_build_discover_req_evt(&evt_data);
-  nfa_ee_report_event(NULL, NFA_EE_DISCOVER_REQ_EVT,
-                      (tNFA_EE_CBACK_DATA*)&evt_data);
+  tNFA_EE_CBACK_DATA nfa_ee_cback_data;
+  nfa_ee_build_discover_req_evt(&nfa_ee_cback_data.discover_req);
+  nfa_ee_report_event(NULL, NFA_EE_DISCOVER_REQ_EVT, &nfa_ee_cback_data);
 }
 
 /*******************************************************************************
@@ -1489,19 +1963,22 @@
   tNFA_EE_MODE_SET mode_set;
   tNFC_NFCEE_MODE_SET_REVT* p_rsp = p_data->mode_set_rsp.p_data;
 
-  NFA_TRACE_DEBUG2("nfa_ee_nci_mode_set_rsp() handle:0x%02x mode:%d",
-                   p_rsp->nfcee_id, p_rsp->mode);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "%s handle:0x%02x mode:%d", __func__, p_rsp->nfcee_id, p_rsp->mode);
   p_cb = nfa_ee_find_ecb(p_rsp->nfcee_id);
   if (p_cb == NULL) {
-    NFA_TRACE_ERROR1(
-        "nfa_ee_nci_mode_set_rsp() Can not find cb for handle:0x%02x",
-        p_rsp->nfcee_id);
+    LOG(ERROR) << StringPrintf("%s Can not find cb for handle:0x%02x", __func__,
+                               p_rsp->nfcee_id);
     return;
   }
 
-  /* update routing table and vs on mode change */
-  nfa_ee_start_timer();
-
+  /* Do not update routing table in EE_RECOVERY state */
+  if (nfa_hci_cb.hci_state != NFA_HCI_STATE_EE_RECOVERY) {
+    /* Start routing table update debounce timer */
+    nfa_ee_start_timer();
+  }
+  LOG(ERROR) << StringPrintf("%s p_rsp->status:0x%02x", __func__,
+                             p_rsp->status);
   if (p_rsp->status == NFA_STATUS_OK) {
     if (p_rsp->mode == NFA_EE_MD_ACTIVATE) {
       p_cb->ee_status = NFC_NFCEE_STATUS_ACTIVE;
@@ -1514,7 +1991,8 @@
          * configuration */
         nfa_ee_cb.ee_cfged &= ~nfa_ee_ecb_to_mask(p_cb);
         nfa_ee_cb.ee_cfg_sts |= NFA_EE_STS_CHANGED_ROUTING;
-        NFA_TRACE_DEBUG0("deactivating/still configured. Force update");
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("deactivating/still configured. Force update");
       }
       p_cb->tech_switch_on = p_cb->tech_switch_off = p_cb->tech_battery_off = 0;
       p_cb->proto_switch_on = p_cb->proto_switch_off = p_cb->proto_battery_off =
@@ -1522,10 +2000,12 @@
       p_cb->aid_entries = 0;
       p_cb->ee_status = NFC_NFCEE_STATUS_INACTIVE;
     }
+  } else if (p_rsp->mode == NFA_EE_MD_ACTIVATE) {
+    p_cb->ee_status = NFC_NFCEE_STATUS_REMOVED;
   }
-  NFA_TRACE_DEBUG4("status:%d ecb_flags  :0x%02x ee_cfged:0x%02x ee_status:%d",
-                   p_rsp->status, p_cb->ecb_flags, nfa_ee_cb.ee_cfged,
-                   p_cb->ee_status);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "status:%d ecb_flags  :0x%02x ee_cfged:0x%02x ee_status:%d",
+      p_rsp->status, p_cb->ecb_flags, nfa_ee_cb.ee_cfged, p_cb->ee_status);
   if (p_cb->ecb_flags & NFA_EE_ECB_FLAGS_RESTORE) {
     if (p_cb->conn_st == NFA_EE_CONN_ST_CONN) {
       /* NFA_HCI module handles restoring configurations for HCI access */
@@ -1542,8 +2022,10 @@
     mode_set.ee_handle = (tNFA_HANDLE)p_rsp->nfcee_id | NFA_HANDLE_GROUP_EE;
     mode_set.ee_status = p_cb->ee_status;
 
+    tNFA_EE_CBACK_DATA nfa_ee_cback_data;
+    nfa_ee_cback_data.mode_set = mode_set;
     nfa_ee_report_event(p_cb->p_ee_cback, NFA_EE_MODE_SET_EVT,
-                        (tNFA_EE_CBACK_DATA*)&mode_set);
+                        &nfa_ee_cback_data);
 
     if ((p_cb->ee_status == NFC_NFCEE_STATUS_INACTIVE) ||
         (p_cb->ee_status == NFC_NFCEE_STATUS_ACTIVE)) {
@@ -1551,6 +2033,8 @@
       nfa_ee_report_discover_req_evt();
     }
   }
+  if (nfa_ee_cb.p_enable_cback)
+    (*nfa_ee_cb.p_enable_cback)(NFA_EE_MODE_SET_COMPLETE);
 }
 
 /*******************************************************************************
@@ -1565,8 +2049,9 @@
 void nfa_ee_report_update_evt(void) {
   tNFA_EE_CBACK_DATA evt_data;
 
-  NFA_TRACE_DEBUG2("nfa_ee_report_update_evt ee_wait_evt:0x%x wait_rsp:%d",
-                   nfa_ee_cb.ee_wait_evt, nfa_ee_cb.wait_rsp);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfa_ee_report_update_evt ee_wait_evt:0x%x wait_rsp:%d",
+                      nfa_ee_cb.ee_wait_evt, nfa_ee_cb.wait_rsp);
   if (nfa_ee_cb.wait_rsp == 0) {
     nfa_ee_cb.ee_wait_evt &= ~NFA_EE_WAIT_UPDATE_RSP;
 
@@ -1591,8 +2076,9 @@
 void nfa_ee_nci_wait_rsp(tNFA_EE_MSG* p_data) {
   tNFA_EE_NCI_WAIT_RSP* p_rsp = &p_data->wait_rsp;
 
-  NFA_TRACE_DEBUG2("nfa_ee_nci_wait_rsp() ee_wait_evt:0x%x wait_rsp:%d",
-                   nfa_ee_cb.ee_wait_evt, nfa_ee_cb.wait_rsp);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("ee_wait_evt:0x%x wait_rsp:%d", nfa_ee_cb.ee_wait_evt,
+                      nfa_ee_cb.wait_rsp);
   if (nfa_ee_cb.wait_rsp) {
     if (p_rsp->opcode == NCI_MSG_RF_SET_ROUTING) nfa_ee_cb.wait_rsp--;
   }
@@ -1698,7 +2184,9 @@
   evt_data.trigger = p_cbk->act_data.trigger;
   memcpy(&(evt_data.param), &(p_cbk->act_data.param),
          sizeof(tNFA_EE_ACTION_PARAM));
-  nfa_ee_report_event(NULL, NFA_EE_ACTION_EVT, (tNFA_EE_CBACK_DATA*)&evt_data);
+  tNFA_EE_CBACK_DATA nfa_ee_cback_data;
+  nfa_ee_cback_data.action = evt_data;
+  nfa_ee_report_event(NULL, NFA_EE_ACTION_EVT, &nfa_ee_cback_data);
 }
 
 /*******************************************************************************
@@ -1717,23 +2205,23 @@
   uint8_t report_ntf = 0;
   uint8_t xx;
 
-  NFA_TRACE_DEBUG2("nfa_ee_nci_disc_req_ntf () num_info: %d cur_ee:%d",
-                   p_cbk->num_info, nfa_ee_cb.cur_ee);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "num_info: %d cur_ee:%d", p_cbk->num_info, nfa_ee_cb.cur_ee);
 
   for (xx = 0; xx < p_cbk->num_info; xx++) {
     ee_handle = NFA_HANDLE_GROUP_EE | p_cbk->info[xx].nfcee_id;
 
     p_cb = nfa_ee_find_ecb(p_cbk->info[xx].nfcee_id);
     if (!p_cb) {
-      NFA_TRACE_DEBUG1("Cannot find cb for NFCEE: 0x%x",
-                       p_cbk->info[xx].nfcee_id);
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+          "Cannot find cb for NFCEE: 0x%x", p_cbk->info[xx].nfcee_id);
       p_cb = nfa_ee_find_ecb(NFA_EE_INVALID);
       if (p_cb) {
         p_cb->nfcee_id = p_cbk->info[xx].nfcee_id;
         p_cb->ecb_flags |= NFA_EE_ECB_FLAGS_ORDER;
       } else {
-        NFA_TRACE_ERROR1("Cannot allocate cb for NFCEE: 0x%x",
-                         p_cbk->info[xx].nfcee_id);
+        LOG(ERROR) << StringPrintf("Cannot allocate cb for NFCEE: 0x%x",
+                                   p_cbk->info[xx].nfcee_id);
         continue;
       }
     } else {
@@ -1752,7 +2240,7 @@
                  NFC_DISCOVERY_TYPE_LISTEN_B_PRIME) {
         p_cb->lbp_protocol = p_cbk->info[xx].protocol;
       }
-      NFA_TRACE_DEBUG6(
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
           "nfcee_id=0x%x ee_status=0x%x ecb_flags=0x%x la_protocol=0x%x "
           "la_protocol=0x%x la_protocol=0x%x",
           p_cb->nfcee_id, p_cb->ee_status, p_cb->ecb_flags, p_cb->la_protocol,
@@ -1792,6 +2280,8 @@
   if ((NFA_HANDLE_GROUP_MASK & nfcee_id) == NFA_HANDLE_GROUP_EE)
     nfcee_id &= NFA_HANDLE_MASK;
 
+  if (nfcee_id == NFC_DH_ID) return true;
+
   /* compose output */
   for (xx = 0; xx < nfa_ee_cb.cur_ee; xx++, p_cb++) {
     if ((tNFA_HANDLE)p_cb->nfcee_id == nfcee_id) {
@@ -1822,7 +2312,7 @@
       NFA_TECHNOLOGY_MASK_A, NFA_TECHNOLOGY_MASK_B, NFA_TECHNOLOGY_MASK_F,
       NFA_TECHNOLOGY_MASK_B_PRIME};
 
-  NFA_TRACE_DEBUG1("nfa_ee_get_tech_route(): %d", power_state);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%d", power_state);
 
   for (xx = 0; xx < NFA_EE_MAX_TECH_ROUTE; xx++) {
     p_handles[xx] = NFC_DH_ID;
@@ -1846,8 +2336,9 @@
       }
     }
   }
-  NFA_TRACE_DEBUG4("0x%x, 0x%x, 0x%x, 0x%x", p_handles[0], p_handles[1],
-                   p_handles[2], p_handles[3]);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("0x%x, 0x%x, 0x%x, 0x%x", p_handles[0], p_handles[1],
+                      p_handles[2], p_handles[3]);
 }
 
 /*******************************************************************************
@@ -1866,7 +2357,6 @@
   uint8_t max_tlv = (uint8_t)((*p_max_len > NFA_EE_ROUT_MAX_TLV_SIZE)
                                   ? NFA_EE_ROUT_MAX_TLV_SIZE
                                   : *p_max_len);
-  tNFA_STATUS status = NFA_STATUS_OK;
 
   if (new_size + *p_cur_offset > max_tlv) {
     if (NFC_SetRouting(true, *p, *p_cur_offset, p + 1) == NFA_STATUS_OK) {
@@ -1886,184 +2376,6 @@
 
 /*******************************************************************************
 **
-** Function         nfa_ee_route_add_one_ecb
-**
-** Description      Add the routing entries for one NFCEE/DH
-**
-** Returns          NFA_STATUS_OK, if ok to continue
-**
-*******************************************************************************/
-tNFA_STATUS nfa_ee_route_add_one_ecb(tNFA_EE_ECB* p_cb, int* p_max_len,
-                                     bool more, uint8_t* ps,
-                                     int* p_cur_offset) {
-  uint8_t *p, *pa;
-  uint16_t tlv_size;
-  uint8_t num_tlv, len;
-  int xx;
-  int start_offset;
-  uint8_t power_cfg = 0;
-  uint8_t* pp = ps + *p_cur_offset;
-  uint8_t entry_size;
-  uint8_t max_tlv;
-  uint8_t* p_start;
-  uint8_t new_size;
-  tNFA_STATUS status = NFA_STATUS_OK;
-
-  nfa_ee_check_set_routing(p_cb->size_mask, p_max_len, ps, p_cur_offset);
-  max_tlv = (uint8_t)((*p_max_len > NFA_EE_ROUT_MAX_TLV_SIZE)
-                          ? NFA_EE_ROUT_MAX_TLV_SIZE
-                          : *p_max_len);
-  /* use the first byte of the buffer (ps) to keep the num_tlv */
-  num_tlv = *ps;
-  NFA_TRACE_DEBUG5(
-      "nfa_ee_route_add_one_ecb max_len:%d, max_tlv:%d, cur_offset:%d, "
-      "more:%d, num_tlv:%d",
-      *p_max_len, max_tlv, *p_cur_offset, more, num_tlv);
-  pp = ps + 1 + *p_cur_offset;
-  p = pp;
-  tlv_size = (uint8_t)*p_cur_offset;
-  /* add the Technology based routing */
-  for (xx = 0; xx < NFA_EE_NUM_TECH; xx++) {
-    power_cfg = 0;
-    if (p_cb->tech_switch_on & nfa_ee_tech_mask_list[xx])
-      power_cfg |= NCI_ROUTE_PWR_STATE_ON;
-    if (p_cb->tech_switch_off & nfa_ee_tech_mask_list[xx])
-      power_cfg |= NCI_ROUTE_PWR_STATE_SWITCH_OFF;
-    if (p_cb->tech_battery_off & nfa_ee_tech_mask_list[xx])
-      power_cfg |= NCI_ROUTE_PWR_STATE_BATT_OFF;
-    if (power_cfg) {
-      *pp++ = NFC_ROUTE_TAG_TECH;
-      *pp++ = 3;
-      *pp++ = p_cb->nfcee_id;
-      *pp++ = power_cfg;
-      *pp++ = nfa_ee_tech_list[xx];
-      num_tlv++;
-      if (power_cfg != NCI_ROUTE_PWR_STATE_ON)
-        nfa_ee_cb.ee_cfged |= NFA_EE_CFGED_OFF_ROUTING;
-    }
-  }
-
-  /* add the Protocol based routing */
-  for (xx = 0; xx < NFA_EE_NUM_PROTO; xx++) {
-    power_cfg = 0;
-    if (p_cb->proto_switch_on & nfa_ee_proto_mask_list[xx])
-      power_cfg |= NCI_ROUTE_PWR_STATE_ON;
-    if (p_cb->proto_switch_off & nfa_ee_proto_mask_list[xx])
-      power_cfg |= NCI_ROUTE_PWR_STATE_SWITCH_OFF;
-    if (p_cb->proto_battery_off & nfa_ee_proto_mask_list[xx])
-      power_cfg |= NCI_ROUTE_PWR_STATE_BATT_OFF;
-    if (power_cfg) {
-      *pp++ = NFC_ROUTE_TAG_PROTO;
-      *pp++ = 3;
-      *pp++ = p_cb->nfcee_id;
-      *pp++ = power_cfg;
-      *pp++ = nfa_ee_proto_list[xx];
-      num_tlv++;
-      if (power_cfg != NCI_ROUTE_PWR_STATE_ON)
-        nfa_ee_cb.ee_cfged |= NFA_EE_CFGED_OFF_ROUTING;
-    }
-  }
-
-  /* add NFC-DEP routing to HOST */
-  if (p_cb->nfcee_id == NFC_DH_ID) {
-    *pp++ = NFC_ROUTE_TAG_PROTO;
-    *pp++ = 3;
-    *pp++ = NFC_DH_ID;
-    *pp++ = NCI_ROUTE_PWR_STATE_ON;
-    *pp++ = NFC_PROTOCOL_NFC_DEP;
-    num_tlv++;
-  }
-
-  /* update the num_tlv and current offset */
-  entry_size = (uint8_t)(pp - p);
-  *p_cur_offset += entry_size;
-  *ps = num_tlv;
-  /* add the AID routing */
-  if (p_cb->aid_entries) {
-    start_offset = 0;
-    for (xx = 0; xx < p_cb->aid_entries; xx++) {
-      /* rememebr the beginning of this AID routing entry, just in case we need
-       * to put it in next command */
-      p_start = pp;
-      /* add one AID entry */
-      if (p_cb->aid_rt_info[xx] & NFA_EE_AE_ROUTE) {
-        num_tlv++;
-        pa = &p_cb->aid_cfg[start_offset];
-        pa++;        /* EMV tag */
-        len = *pa++; /* aid_len */
-        *pp++ = NFC_ROUTE_TAG_AID;
-        *pp++ = len + 2;
-        *pp++ = p_cb->nfcee_id;
-        *pp++ = p_cb->aid_pwr_cfg[xx];
-        /* copy the AID */
-        memcpy(pp, pa, len);
-        pp += len;
-      }
-      start_offset += p_cb->aid_len[xx];
-      new_size = (uint8_t)(pp - p_start);
-      nfa_ee_check_set_routing(new_size, p_max_len, ps, p_cur_offset);
-      if (*ps == 0) {
-        /* just sent routing command, update local */
-        *ps = 1;
-        num_tlv = *ps;
-        *p_cur_offset = new_size;
-        pp = ps + 1;
-        p = pp;
-        tlv_size = (uint8_t)*p_cur_offset;
-        max_tlv = (uint8_t)((*p_max_len > NFA_EE_ROUT_MAX_TLV_SIZE)
-                                ? NFA_EE_ROUT_MAX_TLV_SIZE
-                                : *p_max_len);
-        memcpy(p, p_start, new_size);
-        pp += new_size;
-      } else {
-        /* add the new entry */
-        *ps = num_tlv;
-        *p_cur_offset += new_size;
-      }
-    }
-  }
-
-  tlv_size = nfa_ee_total_lmrt_size();
-  if (tlv_size) {
-    nfa_ee_cb.ee_cfged |= nfa_ee_ecb_to_mask(p_cb);
-  }
-  if (p_cb->ecb_flags & NFA_EE_ECB_FLAGS_ROUTING) {
-    nfa_ee_cb.ee_cfg_sts |= NFA_EE_STS_CHANGED_ROUTING;
-  }
-  NFA_TRACE_DEBUG2("ee_cfg_sts:0x%02x lmrt_size:%d", nfa_ee_cb.ee_cfg_sts,
-                   tlv_size);
-
-  if (more == false) {
-    /* last entry. update routing table now */
-    if (nfa_ee_cb.ee_cfg_sts & NFA_EE_STS_CHANGED_ROUTING) {
-      if (tlv_size) {
-        nfa_ee_cb.ee_cfg_sts |= NFA_EE_STS_PREV_ROUTING;
-      } else {
-        nfa_ee_cb.ee_cfg_sts &= ~NFA_EE_STS_PREV_ROUTING;
-      }
-      NFA_TRACE_DEBUG2(
-          "nfa_ee_route_add_one_ecb: set routing num_tlv:%d tlv_size:%d",
-          num_tlv, tlv_size);
-      if (NFC_SetRouting(more, num_tlv, (uint8_t)(*p_cur_offset), ps + 1) ==
-          NFA_STATUS_OK) {
-        nfa_ee_cb.wait_rsp++;
-      }
-    } else if (nfa_ee_cb.ee_cfg_sts & NFA_EE_STS_PREV_ROUTING) {
-      if (tlv_size == 0) {
-        nfa_ee_cb.ee_cfg_sts &= ~NFA_EE_STS_PREV_ROUTING;
-        /* indicated routing is configured to NFCC */
-        nfa_ee_cb.ee_cfg_sts |= NFA_EE_STS_CHANGED_ROUTING;
-        if (NFC_SetRouting(more, 0, 0, ps + 1) == NFA_STATUS_OK) {
-          nfa_ee_cb.wait_rsp++;
-        }
-      }
-    }
-  }
-
-  return status;
-}
-/*******************************************************************************
-**
 ** Function         nfa_ee_route_add_one_ecb_order
 **
 ** Description      Add the routing entries for NFCEE/DH in order defined
@@ -2078,7 +2390,7 @@
 
   /* use the first byte of the buffer (ps) to keep the num_tlv */
   uint8_t num_tlv = *ps;
-  NFA_TRACE_DEBUG6(
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
       "%s - max_len:%d, cur_offset:%d, more:%d, num_tlv:%d,rout_type:- %d",
       __func__, *p_max_len, *p_cur_offset, more, num_tlv, rout_type);
   uint8_t* pp = ps + 1 + *p_cur_offset;
@@ -2096,8 +2408,13 @@
     case NCI_ROUTE_ORDER_AID: {
       nfa_ee_add_aid_route_to_ecb(p_cb, pp, p, ps, p_cur_offset, p_max_len);
     } break;
+    case NCI_ROUTE_ORDER_SYS_CODE: {
+      nfa_ee_add_sys_code_route_to_ecb(p_cb, pp, p, ps, p_cur_offset,
+                                       p_max_len);
+    } break;
     default: {
-      NFA_TRACE_DEBUG2("%s -  Route type - NA:- %d", __func__, rout_type);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("%s -  Route type - NA:- %d", __func__, rout_type);
     }
   }
 
@@ -2111,8 +2428,8 @@
   if (p_cb->ecb_flags & NFA_EE_ECB_FLAGS_ROUTING) {
     nfa_ee_cb.ee_cfg_sts |= NFA_EE_STS_CHANGED_ROUTING;
   }
-  NFA_TRACE_DEBUG2("ee_cfg_sts:0x%02x lmrt_size:%d", nfa_ee_cb.ee_cfg_sts,
-                   tlv_size);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "ee_cfg_sts:0x%02x lmrt_size:%d", nfa_ee_cb.ee_cfg_sts, tlv_size);
 
   if (more == false) {
     /* last entry. update routing table now */
@@ -2122,8 +2439,9 @@
       } else {
         nfa_ee_cb.ee_cfg_sts &= ~NFA_EE_STS_PREV_ROUTING;
       }
-      NFA_TRACE_DEBUG3("%s : set routing num_tlv:%d tlv_size:%d", __func__,
-                       num_tlv, tlv_size);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("%s : set routing num_tlv:%d tlv_size:%d", __func__,
+                          num_tlv, tlv_size);
       if (NFC_SetRouting(more, num_tlv, (uint8_t)(*p_cur_offset), ps + 1) ==
           NFA_STATUS_OK) {
         nfa_ee_cb.wait_rsp++;
@@ -2177,8 +2495,9 @@
   tNFA_EE_ECB* p_cb;
   uint8_t mask;
 
-  NFA_TRACE_DEBUG2("nfa_ee_need_recfg() ee_cfged: 0x%02x ee_cfg_sts: 0x%02x",
-                   nfa_ee_cb.ee_cfged, nfa_ee_cb.ee_cfg_sts);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("ee_cfged: 0x%02x ee_cfg_sts: 0x%02x", nfa_ee_cb.ee_cfged,
+                      nfa_ee_cb.ee_cfg_sts);
   /* if no routing/vs is configured, do not need to send the info to NFCC */
   if (nfa_ee_cb.ee_cfged || nfa_ee_cb.ee_cfg_sts) {
     if (nfa_ee_cb.ee_cfg_sts & NFA_EE_STS_CHANGED) {
@@ -2187,8 +2506,8 @@
       p_cb = &nfa_ee_cb.ecb[NFA_EE_CB_4_DH];
       mask = 1 << NFA_EE_CB_4_DH;
       for (xx = 0; xx <= nfa_ee_cb.cur_ee; xx++) {
-        NFA_TRACE_DEBUG3("%d: ecb_flags  : 0x%02x, mask: 0x%02x", xx,
-                         p_cb->ecb_flags, mask);
+        DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+            "%d: ecb_flags  : 0x%02x, mask: 0x%02x", xx, p_cb->ecb_flags, mask);
         if ((p_cb->ecb_flags) && (nfa_ee_cb.ee_cfged & mask)) {
           needed = true;
           break;
@@ -2213,10 +2532,10 @@
 ** Returns          void
 **
 *******************************************************************************/
-void nfa_ee_rout_timeout(tNFA_EE_MSG* p_data) {
+void nfa_ee_rout_timeout(__attribute__((unused)) tNFA_EE_MSG* p_data) {
   uint8_t ee_cfged = nfa_ee_cb.ee_cfged;
 
-  NFA_TRACE_DEBUG0("nfa_ee_rout_timeout()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
   if (nfa_ee_need_recfg()) {
     /* discovery is not started */
     nfa_ee_update_rout();
@@ -2243,8 +2562,8 @@
 ** Returns          void
 **
 *******************************************************************************/
-void nfa_ee_discv_timeout(tNFA_EE_MSG* p_data) {
-  NFC_NfceeDiscover(false);
+void nfa_ee_discv_timeout(__attribute__((unused)) tNFA_EE_MSG* p_data) {
+  if (NFA_GetNCIVersion() != NCI_VERSION_2_0) NFC_NfceeDiscover(false);
   if (nfa_ee_cb.p_enable_cback)
     (*nfa_ee_cb.p_enable_cback)(NFA_EE_DISC_STS_OFF);
 }
@@ -2259,7 +2578,7 @@
 ** Returns          void
 **
 *******************************************************************************/
-void nfa_ee_lmrt_to_nfcc(tNFA_EE_MSG* p_data) {
+void nfa_ee_lmrt_to_nfcc(__attribute__((unused)) tNFA_EE_MSG* p_data) {
   int xx;
   tNFA_EE_ECB* p_cb;
   uint8_t* p = NULL;
@@ -2274,9 +2593,10 @@
   /* update routing table: DH and the activated NFCEEs */
   p = (uint8_t*)GKI_getbuf(NFA_EE_ROUT_BUF_SIZE);
   if (p == NULL) {
-    NFA_TRACE_ERROR0("nfa_ee_lmrt_to_nfcc() no buffer to send routing info.");
-    nfa_ee_report_event(NULL, NFA_EE_NO_MEM_ERR_EVT,
-                        (tNFA_EE_CBACK_DATA*)&status);
+    LOG(ERROR) << StringPrintf("no buffer to send routing info.");
+    tNFA_EE_CBACK_DATA nfa_ee_cback_data;
+    nfa_ee_cback_data.status = status;
+    nfa_ee_report_event(NULL, NFA_EE_NO_MEM_ERR_EVT, &nfa_ee_cback_data);
     return;
   }
 
@@ -2286,7 +2606,8 @@
     if (p_cb->ee_status == NFC_NFCEE_STATUS_ACTIVE) {
       if (last_active == NFA_EE_INVALID) {
         last_active = p_cb->nfcee_id;
-        NFA_TRACE_DEBUG1("last_active: 0x%x", last_active);
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("last_active: 0x%x", last_active);
       }
     }
   }
@@ -2304,16 +2625,19 @@
   for (int rt = NCI_ROUTE_ORDER_AID; rt <= NCI_ROUTE_ORDER_TECHNOLOGY; rt++) {
     /* add the routing entries for NFCEEs */
     p_cb = &nfa_ee_cb.ecb[0];
+
     for (xx = 0; (xx < nfa_ee_cb.cur_ee) && check; xx++, p_cb++) {
       if (p_cb->ee_status == NFC_NFCEE_STATUS_ACTIVE) {
-        NFA_TRACE_DEBUG1("%s --add the routing for NFCEEs!!", __func__);
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("%s --add the routing for NFCEEs!!", __func__);
         nfa_ee_route_add_one_ecb_by_route_order(p_cb, rt, &max_len, more, p,
                                                 &cur_offset);
       }
     }
     if (rt == NCI_ROUTE_ORDER_TECHNOLOGY) more = false;
     /* add the routing entries for DH */
-    NFA_TRACE_DEBUG1("%s --add the routing for DH!!", __func__);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("%s --add the routing for DH!!", __func__);
     nfa_ee_route_add_one_ecb_by_route_order(&nfa_ee_cb.ecb[NFA_EE_CB_4_DH], rt,
                                             &max_len, more, p, &cur_offset);
   }
@@ -2335,14 +2659,14 @@
   int xx;
   tNFA_EE_ECB* p_cb;
   uint8_t mask;
-  NFC_HDR msg;
+  tNFA_EE_MSG nfa_ee_msg;
 
-  NFA_TRACE_DEBUG1("nfa_ee_update_rout ee_cfg_sts:0x%02x",
-                   nfa_ee_cb.ee_cfg_sts);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "nfa_ee_update_rout ee_cfg_sts:0x%02x", nfa_ee_cb.ee_cfg_sts);
 
   /* use action function to send routing and VS configuration to NFCC */
-  msg.event = NFA_EE_CFG_TO_NFCC_EVT;
-  nfa_ee_evt_hdlr(&msg);
+  nfa_ee_msg.hdr.event = NFA_EE_CFG_TO_NFCC_EVT;
+  nfa_ee_evt_hdlr(&nfa_ee_msg.hdr);
 
   /* all configuration is updated to NFCC, clear the status mask */
   nfa_ee_cb.ee_cfg_sts &= NFA_EE_STS_PREV;
@@ -2353,11 +2677,13 @@
     mask = (1 << xx);
     if (p_cb->tech_switch_on | p_cb->tech_switch_off | p_cb->tech_battery_off |
         p_cb->proto_switch_on | p_cb->proto_switch_off |
-        p_cb->proto_battery_off | p_cb->aid_entries) {
+        p_cb->proto_battery_off | p_cb->aid_entries |
+        p_cb->sys_code_cfg_entries) {
       /* this entry has routing configuration. mark it configured */
       nfa_ee_cb.ee_cfged |= mask;
     }
   }
-  NFA_TRACE_DEBUG2("nfa_ee_update_rout ee_cfg_sts:0x%02x ee_cfged:0x%02x",
-                   nfa_ee_cb.ee_cfg_sts, nfa_ee_cb.ee_cfged);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfa_ee_update_rout ee_cfg_sts:0x%02x ee_cfged:0x%02x",
+                      nfa_ee_cb.ee_cfg_sts, nfa_ee_cb.ee_cfged);
 }
diff --git a/src/nfa/ee/nfa_ee_api.c b/src/nfa/ee/nfa_ee_api.cc
similarity index 73%
rename from src/nfa/ee/nfa_ee_api.c
rename to src/nfa/ee/nfa_ee_api.cc
index a1290b7..af99a7d 100644
--- a/src/nfa/ee/nfa_ee_api.c
+++ b/src/nfa/ee/nfa_ee_api.cc
@@ -21,11 +21,17 @@
  *  NFA interface to NFCEE - API functions
  *
  ******************************************************************************/
-#include "nfa_ee_api.h"
-#include <string.h>
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "nfa_dm_int.h"
+#include "nfa_ee_api.h"
 #include "nfa_ee_int.h"
-#include "nfa_sys_int.h"
+#include "nfc_int.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 /*****************************************************************************
 **  APIs
@@ -49,13 +55,14 @@
   tNFA_EE_API_DISCOVER* p_msg;
   tNFA_STATUS status = NFA_STATUS_FAILED;
 
-  NFA_TRACE_API0("NFA_EeDiscover()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (nfa_ee_cb.em_state != NFA_EE_EM_STATE_INIT_DONE) {
-    NFA_TRACE_ERROR1("NFA_EeDiscover bad em state: %d", nfa_ee_cb.em_state);
+    LOG(ERROR) << StringPrintf("NFA_EeDiscover bad em state: %d",
+                               nfa_ee_cb.em_state);
     status = NFA_STATUS_FAILED;
   } else if ((nfa_ee_cb.p_ee_disc_cback != NULL) || (p_cback == NULL)) {
-    NFA_TRACE_ERROR0("NFA_EeDiscover() in progress or NULL callback function");
+    LOG(ERROR) << StringPrintf("in progress or NULL callback function");
     status = NFA_STATUS_INVALID_PARAM;
   } else {
     p_msg = (tNFA_EE_API_DISCOVER*)GKI_getbuf(sizeof(tNFA_EE_API_DISCOVER));
@@ -91,24 +98,27 @@
   uint8_t max_ret;
   uint8_t num_ret = 0;
 
-  NFA_TRACE_DEBUG2("NFA_EeGetInfo em_state:%d cur_ee:%d", nfa_ee_cb.em_state,
-                   nfa_ee_cb.cur_ee);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("NFA_EeGetInfo em_state:%d cur_ee:%d", nfa_ee_cb.em_state,
+                      nfa_ee_cb.cur_ee);
   /* validate parameters */
   if (p_info == NULL || p_num_nfcee == NULL) {
-    NFA_TRACE_ERROR0("NFA_EeGetInfo bad parameter");
+    LOG(ERROR) << StringPrintf("NFA_EeGetInfo bad parameter");
     return (NFA_STATUS_INVALID_PARAM);
   }
   max_ret = *p_num_nfcee;
   *p_num_nfcee = 0;
   if (nfa_ee_cb.em_state == NFA_EE_EM_STATE_INIT) {
-    NFA_TRACE_ERROR1("NFA_EeGetInfo bad em state: %d", nfa_ee_cb.em_state);
+    LOG(ERROR) << StringPrintf("NFA_EeGetInfo bad em state: %d",
+                               nfa_ee_cb.em_state);
     return (NFA_STATUS_FAILED);
   }
 
   /* compose output */
   for (xx = 0; (xx < ret) && (num_ret < max_ret); xx++, p_cb++) {
-    NFA_TRACE_DEBUG4("xx:%d max_ret:%d, num_ret:%d ee_status:0x%x", xx, max_ret,
-                     num_ret, p_cb->ee_status);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("xx:%d max_ret:%d, num_ret:%d ee_status:0x%x", xx,
+                        max_ret, num_ret, p_cb->ee_status);
     if ((p_cb->ee_status & NFA_EE_STATUS_INT_MASK) ||
         (p_cb->ee_status == NFA_EE_STATUS_REMOVED)) {
       continue;
@@ -119,10 +129,11 @@
     p_info->num_tlvs = p_cb->num_tlvs;
     memcpy(p_info->ee_interface, p_cb->ee_interface, p_cb->num_interface);
     memcpy(p_info->ee_tlv, p_cb->ee_tlv, p_cb->num_tlvs * sizeof(tNFA_EE_TLV));
+    p_info->ee_power_supply_status = p_cb->ee_power_supply_status;
     p_info++;
     num_ret++;
   }
-  NFA_TRACE_DEBUG1("num_ret:%d", num_ret);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("num_ret:%d", num_ret);
   *p_num_nfcee = num_ret;
   return (NFA_STATUS_OK);
 }
@@ -143,10 +154,10 @@
   tNFA_EE_API_REGISTER* p_msg;
   tNFA_STATUS status = NFA_STATUS_FAILED;
 
-  NFA_TRACE_API0("NFA_EeRegister()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (p_cback == NULL) {
-    NFA_TRACE_ERROR0("NFA_EeRegister(): with NULL callback function");
+    LOG(ERROR) << StringPrintf("with NULL callback function");
     status = NFA_STATUS_INVALID_PARAM;
   } else {
     p_msg = (tNFA_EE_API_REGISTER*)GKI_getbuf(sizeof(tNFA_EE_API_REGISTER));
@@ -188,7 +199,8 @@
     }
   }
 
-  NFA_TRACE_API2("NFA_EeDeregister() %d, status:%d", index, status);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("%d, status:%d", index, status);
   if ((status != NFA_STATUS_INVALID_PARAM) &&
       (p_msg = (tNFA_EE_API_DEREGISTER*)GKI_getbuf(
            sizeof(tNFA_EE_API_DEREGISTER))) != NULL) {
@@ -232,11 +244,11 @@
       break;
     }
   }
-  NFA_TRACE_API2("NFA_EeModeSet(): handle:<0x%x>, mode:0x%02X", ee_handle,
-                 mode);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("handle:<0x%x>, mode:0x%02X", ee_handle, mode);
 
   if (p_found == NULL) {
-    NFA_TRACE_ERROR1("NFA_EeModeSet() invalid NFCEE:0x%04x", ee_handle);
+    LOG(ERROR) << StringPrintf("invalid NFCEE:0x%04x", ee_handle);
     status = NFA_STATUS_INVALID_PARAM;
   } else {
     p_msg = (tNFA_EE_API_MODE_SET*)GKI_getbuf(sizeof(tNFA_EE_API_MODE_SET));
@@ -279,21 +291,25 @@
 tNFA_STATUS NFA_EeSetDefaultTechRouting(
     tNFA_HANDLE ee_handle, tNFA_TECHNOLOGY_MASK technologies_switch_on,
     tNFA_TECHNOLOGY_MASK technologies_switch_off,
-    tNFA_TECHNOLOGY_MASK technologies_battery_off) {
+    tNFA_TECHNOLOGY_MASK technologies_battery_off,
+    tNFA_TECHNOLOGY_MASK technologies_screen_lock,
+    tNFA_TECHNOLOGY_MASK technologies_screen_off,
+    tNFA_TECHNOLOGY_MASK technologies_screen_off_lock) {
   tNFA_EE_API_SET_TECH_CFG* p_msg;
   tNFA_STATUS status = NFA_STATUS_FAILED;
   uint8_t nfcee_id = (uint8_t)(ee_handle & 0xFF);
   tNFA_EE_ECB* p_cb;
 
-  NFA_TRACE_API4(
-      "NFA_EeSetDefaultTechRouting(): "
-      "handle:<0x%x>technology_mask:<0x%x>/<0x%x>/<0x%x>",
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      ""
+      "handle:<0x%x>technology_mask:<0x%x>/<0x%x>/<0x%x><0x%x><0x%x><0x%x>",
       ee_handle, technologies_switch_on, technologies_switch_off,
-      technologies_battery_off);
+      technologies_battery_off, technologies_screen_lock,
+      technologies_screen_off, technologies_screen_off_lock);
   p_cb = nfa_ee_find_ecb(nfcee_id);
 
   if (p_cb == NULL) {
-    NFA_TRACE_ERROR0("Bad ee_handle");
+    LOG(ERROR) << StringPrintf("Bad ee_handle");
     status = NFA_STATUS_INVALID_PARAM;
   } else {
     p_msg =
@@ -305,6 +321,9 @@
       p_msg->technologies_switch_on = technologies_switch_on;
       p_msg->technologies_switch_off = technologies_switch_off;
       p_msg->technologies_battery_off = technologies_battery_off;
+      p_msg->technologies_screen_lock = technologies_screen_lock;
+      p_msg->technologies_screen_off = technologies_screen_off;
+      p_msg->technologies_screen_off_lock = technologies_screen_off_lock;
 
       nfa_sys_sendmsg(p_msg);
 
@@ -339,21 +358,24 @@
 tNFA_STATUS NFA_EeSetDefaultProtoRouting(
     tNFA_HANDLE ee_handle, tNFA_PROTOCOL_MASK protocols_switch_on,
     tNFA_PROTOCOL_MASK protocols_switch_off,
-    tNFA_PROTOCOL_MASK protocols_battery_off) {
+    tNFA_PROTOCOL_MASK protocols_battery_off,
+    tNFA_PROTOCOL_MASK protocols_screen_lock,
+    tNFA_PROTOCOL_MASK protocols_screen_off,
+    tNFA_PROTOCOL_MASK protocols_screen_off_lock) {
   tNFA_EE_API_SET_PROTO_CFG* p_msg;
   tNFA_STATUS status = NFA_STATUS_FAILED;
   uint8_t nfcee_id = (uint8_t)(ee_handle & 0xFF);
   tNFA_EE_ECB* p_cb;
 
-  NFA_TRACE_API4(
-      "NFA_EeSetDefaultProtoRouting(): "
-      "handle:<0x%x>protocol_mask:<0x%x>/<0x%x>/<0x%x>",
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "handle:<0x%x>protocol_mask:<0x%x>/<0x%x>/<0x%x><0x%x><0x%x><0x%x>",
       ee_handle, protocols_switch_on, protocols_switch_off,
-      protocols_battery_off);
+      protocols_battery_off, protocols_screen_lock, protocols_screen_off,
+      protocols_screen_off_lock);
   p_cb = nfa_ee_find_ecb(nfcee_id);
 
   if (p_cb == NULL) {
-    NFA_TRACE_ERROR0("Bad ee_handle");
+    LOG(ERROR) << StringPrintf("Bad ee_handle");
     status = NFA_STATUS_INVALID_PARAM;
   } else {
     p_msg = (tNFA_EE_API_SET_PROTO_CFG*)GKI_getbuf(
@@ -365,6 +387,9 @@
       p_msg->protocols_switch_on = protocols_switch_on;
       p_msg->protocols_switch_off = protocols_switch_off;
       p_msg->protocols_battery_off = protocols_battery_off;
+      p_msg->protocols_screen_lock = protocols_screen_lock;
+      p_msg->protocols_screen_off = protocols_screen_off;
+      p_msg->protocols_screen_off_lock = protocols_screen_off_lock;
 
       nfa_sys_sendmsg(p_msg);
 
@@ -404,18 +429,19 @@
   uint8_t nfcee_id = (uint8_t)(ee_handle & 0xFF);
   tNFA_EE_ECB* p_cb;
 
-  NFA_TRACE_API1("NFA_EeAddAidRouting(): handle:<0x%x>", ee_handle);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("handle:<0x%x>", ee_handle);
   p_cb = nfa_ee_find_ecb(nfcee_id);
 
   /* validate parameters - make sure the AID is in valid length range */
   if ((p_cb == NULL) || (aid_len == 0) || (p_aid == NULL) ||
       (aid_len < NFA_MIN_AID_LEN) || (aid_len > NFA_MAX_AID_LEN)) {
-    NFA_TRACE_ERROR1("Bad ee_handle or AID (len=%d)", aid_len);
+    LOG(ERROR) << StringPrintf("Bad ee_handle or AID (len=%d)", aid_len);
     status = NFA_STATUS_INVALID_PARAM;
   } else {
     p_msg = (tNFA_EE_API_ADD_AID*)GKI_getbuf(size);
     if (p_msg != NULL) {
-      NFA_TRACE_DEBUG2("aid:<%02x%02x>", p_aid[0], p_aid[1]);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("aid:<%02x%02x>", p_aid[0], p_aid[1]);
       p_msg->hdr.event = NFA_EE_API_ADD_AID_EVT;
       p_msg->nfcee_id = nfcee_id;
       p_msg->p_cb = p_cb;
@@ -460,9 +486,9 @@
   tNFA_STATUS status = NFA_STATUS_FAILED;
   uint16_t size = sizeof(tNFA_EE_API_REMOVE_AID) + aid_len;
 
-  NFA_TRACE_API0("NFA_EeRemoveAidRouting()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
   if ((aid_len == 0) || (p_aid == NULL) || (aid_len > NFA_MAX_AID_LEN)) {
-    NFA_TRACE_ERROR0("Bad AID");
+    LOG(ERROR) << StringPrintf("Bad AID");
     status = NFA_STATUS_INVALID_PARAM;
   } else {
     p_msg = (tNFA_EE_API_REMOVE_AID*)GKI_getbuf(size);
@@ -483,6 +509,103 @@
 
 /*******************************************************************************
 **
+** Function         NFA_EeAddSystemCodeRouting
+**
+** Description      This function is called to add an system code entry in the
+**                  listen mode routing table in NFCC. The status of this
+**                  operation is reported as the NFA_EE_ADD_SYSCODE_EVT.
+**
+** Note:            If RF discovery is started,
+**                  NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should
+**                  happen before calling this function
+**
+** Note:            NFA_EeUpdateNow() should be called after last NFA-EE
+**                  function to change the listen mode routing is called.
+**
+** Returns          NFA_STATUS_OK if successfully initiated
+**                  NFA_STATUS_FAILED otherwise
+**                  NFA_STATUS_INVALID_PARAM If bad parameter
+**
+*******************************************************************************/
+tNFA_STATUS NFA_EeAddSystemCodeRouting(uint16_t systemcode,
+                                       tNFA_HANDLE ee_handle,
+                                       tNFA_EE_PWR_STATE power_state) {
+  tNFA_STATUS status = NFA_STATUS_FAILED;
+  uint8_t nfcee_id = (uint8_t)(ee_handle & 0xFF);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("NFA_EeAddSystemCodeRouting(): handle:<0x%x>", ee_handle);
+  tNFA_EE_ECB* p_cb = nfa_ee_find_ecb(nfcee_id);
+
+  if (p_cb == NULL || systemcode == 0) {
+    LOG(ERROR) << StringPrintf("Bad ee_handle or System Code");
+    status = NFA_STATUS_INVALID_PARAM;
+  } else if ((NFA_GetNCIVersion() != NCI_VERSION_2_0) &&
+             (nfc_cb.isScbrSupported == false)) {
+    LOG(ERROR) << StringPrintf("Invalid NCI Version/SCBR not supported");
+    status = NFA_STATUS_NOT_SUPPORTED;
+  } else {
+    tNFA_EE_API_ADD_SYSCODE* p_msg =
+        (tNFA_EE_API_ADD_SYSCODE*)GKI_getbuf(sizeof(tNFA_EE_API_ADD_SYSCODE));
+    if (p_msg != NULL) {
+      p_msg->hdr.event = NFA_EE_API_ADD_SYSCODE_EVT;
+      p_msg->power_state = power_state;
+      p_msg->nfcee_id = nfcee_id;
+      p_msg->p_cb = p_cb;
+      // adjust endianness of syscode
+      p_msg->syscode = (systemcode & 0x00FF) << 8 | (systemcode & 0xFF00) >> 8;
+      nfa_sys_sendmsg(p_msg);
+      status = NFA_STATUS_OK;
+    }
+  }
+  return status;
+}
+
+/*******************************************************************************
+**
+** Function         NFA_EeRemoveSystemCodeRouting
+**
+** Description      This function is called to remove the given System Code
+**                  based entry from the listen mode routing table. The status
+**                  of this operation is reported as the
+**                  NFA_EE_REMOVE_SYSCODE_EVT.
+**
+** Note:            If RF discovery is started,
+**                  NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should
+**                  happen before calling this function
+**
+** Note:            NFA_EeUpdateNow() should be called after last NFA-EE
+**                  function to change the listen mode routing is called.
+**
+** Returns          NFA_STATUS_OK if successfully initiated
+**                  NFA_STATUS_FAILED otherwise
+**                  NFA_STATUS_INVALID_PARAM If bad parameter
+**
+*******************************************************************************/
+tNFA_STATUS NFA_EeRemoveSystemCodeRouting(uint16_t systemcode) {
+  tNFA_STATUS status = NFA_STATUS_FAILED;
+
+  if (systemcode == 0) {
+    LOG(ERROR) << "Bad ee_handle or System Code";
+    status = NFA_STATUS_INVALID_PARAM;
+  } else if ((NFA_GetNCIVersion() != NCI_VERSION_2_0) &&
+             (nfc_cb.isScbrSupported == false)) {
+    LOG(ERROR) << "Invalid NCI Version/SCBR Not supported";
+    status = NFA_STATUS_NOT_SUPPORTED;
+  } else {
+    tNFA_EE_API_REMOVE_SYSCODE* p_msg = (tNFA_EE_API_REMOVE_SYSCODE*)GKI_getbuf(
+        sizeof(tNFA_EE_API_REMOVE_SYSCODE));
+    if (p_msg != NULL) {
+      p_msg->hdr.event = NFA_EE_API_REMOVE_SYSCODE_EVT;
+      p_msg->syscode = (systemcode & 0x00FF) << 8 | (systemcode & 0xFF00) >> 8;
+      nfa_sys_sendmsg(p_msg);
+      status = NFA_STATUS_OK;
+    }
+  }
+  return status;
+}
+
+/*******************************************************************************
+**
 ** Function         NFA_EeGetLmrtRemainingSize
 **
 ** Description      This function is called to get remaining size of the
@@ -497,7 +620,7 @@
   tNFA_EE_API_LMRT_SIZE* p_msg;
   tNFA_STATUS status = NFA_STATUS_FAILED;
 
-  NFA_TRACE_API0("NFA_EeGetLmrtRemainingSize()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
   p_msg = (tNFA_EE_API_LMRT_SIZE*)GKI_getbuf(sizeof(tNFA_EE_API_LMRT_SIZE));
   if (p_msg != NULL) {
     p_msg->event = NFA_EE_API_LMRT_SIZE_EVT;
@@ -528,9 +651,9 @@
   NFC_HDR* p_msg;
   tNFA_STATUS status = NFA_STATUS_FAILED;
 
-  NFA_TRACE_API0("NFA_EeUpdateNow()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
   if (nfa_ee_cb.ee_wait_evt & NFA_EE_WAIT_UPDATE_ALL) {
-    NFA_TRACE_ERROR0("update in progress");
+    LOG(ERROR) << StringPrintf("update in progress");
     status = NFA_STATUS_SEMANTIC_ERROR;
   } else {
     p_msg = (NFC_HDR*)GKI_getbuf(NFC_HDR_SIZE);
@@ -567,12 +690,12 @@
   uint8_t nfcee_id = (uint8_t)(ee_handle & 0xFF);
   tNFA_EE_ECB* p_cb;
 
-  NFA_TRACE_API2("NFA_EeConnect(): handle:<0x%x> ee_interface:0x%x", ee_handle,
-                 ee_interface);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "handle:<0x%x> ee_interface:0x%x", ee_handle, ee_interface);
   p_cb = nfa_ee_find_ecb(nfcee_id);
 
   if ((p_cb == NULL) || (p_cback == NULL)) {
-    NFA_TRACE_ERROR0("Bad ee_handle or NULL callback function");
+    LOG(ERROR) << StringPrintf("Bad ee_handle or NULL callback function");
     status = NFA_STATUS_INVALID_PARAM;
   } else {
     p_msg = (tNFA_EE_API_CONNECT*)GKI_getbuf(sizeof(tNFA_EE_API_CONNECT));
@@ -613,13 +736,13 @@
   uint8_t nfcee_id = (uint8_t)(ee_handle & 0xFF);
   tNFA_EE_ECB* p_cb;
 
-  NFA_TRACE_API1("NFA_EeSendData(): handle:<0x%x>", ee_handle);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("handle:<0x%x>", ee_handle);
 
   p_cb = nfa_ee_find_ecb(nfcee_id);
 
   if ((p_cb == NULL) || (p_cb->conn_st != NFA_EE_CONN_ST_CONN) ||
       (p_data == NULL)) {
-    NFA_TRACE_ERROR0("Bad ee_handle or NULL data");
+    LOG(ERROR) << StringPrintf("Bad ee_handle or NULL data");
     status = NFA_STATUS_INVALID_PARAM;
   } else {
     p_msg = (tNFA_EE_API_SEND_DATA*)GKI_getbuf(
@@ -660,11 +783,11 @@
   uint8_t nfcee_id = (uint8_t)(ee_handle & 0xFF);
   tNFA_EE_ECB* p_cb;
 
-  NFA_TRACE_API1("NFA_EeDisconnect(): handle:<0x%x>", ee_handle);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("handle:<0x%x>", ee_handle);
   p_cb = nfa_ee_find_ecb(nfcee_id);
 
   if ((p_cb == NULL) || (p_cb->conn_st != NFA_EE_CONN_ST_CONN)) {
-    NFA_TRACE_ERROR0("NFA_EeDisconnect() Bad ee_handle");
+    LOG(ERROR) << StringPrintf("Bad ee_handle");
     status = NFA_STATUS_INVALID_PARAM;
   } else {
     p_msg = (tNFA_EE_API_DISCONNECT*)GKI_getbuf(sizeof(tNFA_EE_API_DISCONNECT));
diff --git a/src/nfa/ee/nfa_ee_main.c b/src/nfa/ee/nfa_ee_main.cc
similarity index 82%
rename from src/nfa/ee/nfa_ee_main.c
rename to src/nfa/ee/nfa_ee_main.cc
index b3e957d..259bcba 100644
--- a/src/nfa/ee/nfa_ee_main.c
+++ b/src/nfa/ee/nfa_ee_main.cc
@@ -21,15 +21,19 @@
  *  This is the main implementation file for the NFA EE.
  *
  ******************************************************************************/
-#include <string.h>
-#include "config.h"
+#include <string>
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "nfa_dm_int.h"
 #include "nfa_ee_int.h"
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
-#include "nfc_api.h"
+#include "nfc_config.h"
 
-extern void nfa_ee_vs_cback(tNFC_VS_EVT event, NFC_HDR* p_data);
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
+
 /*****************************************************************************
 **  Global Variables
 *****************************************************************************/
@@ -48,30 +52,33 @@
 
 const tNFA_EE_SM_ACT nfa_ee_actions[] = {
     /* NFA-EE action function/ internal events */
-    nfa_ee_api_discover,      /* NFA_EE_API_DISCOVER_EVT      */
-    nfa_ee_api_register,      /* NFA_EE_API_REGISTER_EVT      */
-    nfa_ee_api_deregister,    /* NFA_EE_API_DEREGISTER_EVT    */
-    nfa_ee_api_mode_set,      /* NFA_EE_API_MODE_SET_EVT      */
-    nfa_ee_api_set_tech_cfg,  /* NFA_EE_API_SET_TECH_CFG_EVT  */
-    nfa_ee_api_set_proto_cfg, /* NFA_EE_API_SET_PROTO_CFG_EVT */
-    nfa_ee_api_add_aid,       /* NFA_EE_API_ADD_AID_EVT       */
-    nfa_ee_api_remove_aid,    /* NFA_EE_API_REMOVE_AID_EVT    */
-    nfa_ee_api_lmrt_size,     /* NFA_EE_API_LMRT_SIZE_EVT     */
-    nfa_ee_api_update_now,    /* NFA_EE_API_UPDATE_NOW_EVT    */
-    nfa_ee_api_connect,       /* NFA_EE_API_CONNECT_EVT       */
-    nfa_ee_api_send_data,     /* NFA_EE_API_SEND_DATA_EVT     */
-    nfa_ee_api_disconnect,    /* NFA_EE_API_DISCONNECT_EVT    */
-    nfa_ee_nci_disc_rsp,      /* NFA_EE_NCI_DISC_RSP_EVT      */
-    nfa_ee_nci_disc_ntf,      /* NFA_EE_NCI_DISC_NTF_EVT      */
-    nfa_ee_nci_mode_set_rsp,  /* NFA_EE_NCI_MODE_SET_RSP_EVT  */
-    nfa_ee_nci_conn,          /* NFA_EE_NCI_CONN_EVT          */
-    nfa_ee_nci_conn,          /* NFA_EE_NCI_DATA_EVT          */
-    nfa_ee_nci_action_ntf,    /* NFA_EE_NCI_ACTION_NTF_EVT    */
-    nfa_ee_nci_disc_req_ntf,  /* NFA_EE_NCI_DISC_REQ_NTF_EVT  */
-    nfa_ee_nci_wait_rsp,      /* NFA_EE_NCI_WAIT_RSP_EVT      */
-    nfa_ee_rout_timeout,      /* NFA_EE_ROUT_TIMEOUT_EVT      */
-    nfa_ee_discv_timeout,     /* NFA_EE_DISCV_TIMEOUT_EVT     */
-    nfa_ee_lmrt_to_nfcc       /* NFA_EE_CFG_TO_NFCC_EVT       */
+    nfa_ee_api_discover,        /* NFA_EE_API_DISCOVER_EVT      */
+    nfa_ee_api_register,        /* NFA_EE_API_REGISTER_EVT      */
+    nfa_ee_api_deregister,      /* NFA_EE_API_DEREGISTER_EVT    */
+    nfa_ee_api_mode_set,        /* NFA_EE_API_MODE_SET_EVT      */
+    nfa_ee_api_set_tech_cfg,    /* NFA_EE_API_SET_TECH_CFG_EVT  */
+    nfa_ee_api_set_proto_cfg,   /* NFA_EE_API_SET_PROTO_CFG_EVT */
+    nfa_ee_api_add_aid,         /* NFA_EE_API_ADD_AID_EVT       */
+    nfa_ee_api_remove_aid,      /* NFA_EE_API_REMOVE_AID_EVT    */
+    nfa_ee_api_add_sys_code,    /* NFA_EE_API_ADD_SYSCODE_EVT   */
+    nfa_ee_api_remove_sys_code, /* NFA_EE_API_REMOVE_SYSCODE_EVT*/
+    nfa_ee_api_lmrt_size,       /* NFA_EE_API_LMRT_SIZE_EVT     */
+    nfa_ee_api_update_now,      /* NFA_EE_API_UPDATE_NOW_EVT    */
+    nfa_ee_api_connect,         /* NFA_EE_API_CONNECT_EVT       */
+    nfa_ee_api_send_data,       /* NFA_EE_API_SEND_DATA_EVT     */
+    nfa_ee_api_disconnect,      /* NFA_EE_API_DISCONNECT_EVT    */
+    nfa_ee_nci_disc_rsp,        /* NFA_EE_NCI_DISC_RSP_EVT      */
+    nfa_ee_nci_disc_ntf,        /* NFA_EE_NCI_DISC_NTF_EVT      */
+    nfa_ee_nci_mode_set_rsp,    /* NFA_EE_NCI_MODE_SET_RSP_EVT  */
+    nfa_ee_nci_conn,            /* NFA_EE_NCI_CONN_EVT          */
+    nfa_ee_nci_conn,            /* NFA_EE_NCI_DATA_EVT          */
+    nfa_ee_nci_action_ntf,      /* NFA_EE_NCI_ACTION_NTF_EVT    */
+    nfa_ee_nci_disc_req_ntf,    /* NFA_EE_NCI_DISC_REQ_NTF_EVT  */
+    nfa_ee_nci_wait_rsp,        /* NFA_EE_NCI_WAIT_RSP_EVT      */
+    nfa_ee_rout_timeout,        /* NFA_EE_ROUT_TIMEOUT_EVT      */
+    nfa_ee_discv_timeout,       /* NFA_EE_DISCV_TIMEOUT_EVT     */
+    nfa_ee_lmrt_to_nfcc,        /* NFA_EE_CFG_TO_NFCC_EVT       */
+    nfa_ee_nci_nfcee_status_ntf /*NFA_EE_NCI_NFCEE_STATUS_NTF_EVT*/
 };
 
 /*******************************************************************************
@@ -87,7 +94,7 @@
 void nfa_ee_init(void) {
   int xx;
 
-  NFA_TRACE_DEBUG0("nfa_ee_init ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* initialize control block */
   memset(&nfa_ee_cb, 0, sizeof(tNFA_EE_CB));
@@ -113,17 +120,16 @@
 **
 *******************************************************************************/
 void nfa_ee_sys_enable(void) {
-  unsigned long retlen = 0;
-
-  NFA_TRACE_DEBUG1("%s", __func__);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s", __func__);
 
   nfa_ee_cb.route_block_control = 0x00;
 
-  if (GetNumValue(NAME_NFA_AID_BLOCK_ROUTE, (void*)&retlen, sizeof(retlen))) {
+  if (NfcConfig::hasKey(NAME_NFA_AID_BLOCK_ROUTE)) {
+    unsigned retlen = NfcConfig::getUnsigned(NAME_NFA_AID_BLOCK_ROUTE);
     if ((retlen == 0x01) && (NFC_GetNCIVersion() == NCI_VERSION_2_0)) {
       nfa_ee_cb.route_block_control = NCI_ROUTE_QUAL_BLOCK_ROUTE;
-      NFA_TRACE_DEBUG1("nfa_ee_cb.route_block_control=0x%x",
-                       nfa_ee_cb.route_block_control);
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+          "nfa_ee_cb.route_block_control=0x%x", nfa_ee_cb.route_block_control);
     }
   }
 
@@ -153,8 +159,8 @@
   tNFC_NFCEE_MODE_SET_REVT rsp;
   tNFA_EE_NCI_MODE_SET ee_msg;
 
-  NFA_TRACE_DEBUG4(
-      "nfa_ee_restore_one_ecb () nfcee_id:0x%x, ecb_flags:0x%x ee_status:0x%x "
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "nfcee_id:0x%x, ecb_flags:0x%x ee_status:0x%x "
       "ee_old_status: 0x%x",
       p_cb->nfcee_id, p_cb->ecb_flags, p_cb->ee_status, p_cb->ee_old_status);
   if ((p_cb->nfcee_id != NFA_EE_INVALID) &&
@@ -193,7 +199,9 @@
       rsp.nfcee_id = p_cb->nfcee_id;
       rsp.status = NFA_STATUS_OK;
       ee_msg.p_data = &rsp;
-      nfa_ee_nci_mode_set_rsp((tNFA_EE_MSG*)&ee_msg);
+      tNFA_EE_MSG nfa_ee_msg;
+      nfa_ee_msg.mode_set_rsp = ee_msg;
+      nfa_ee_nci_mode_set_rsp(&nfa_ee_msg);
     }
   }
 }
@@ -212,8 +220,8 @@
   tNFA_EE_ECB* p_cb;
   bool proc_complete = true;
 
-  NFA_TRACE_DEBUG1("nfa_ee_proc_nfcc_power_mode (): nfcc_power_mode=%d",
-                   nfcc_power_mode);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfcc_power_mode=%d", nfcc_power_mode);
   /* if NFCC power state is change to full power */
   if (nfcc_power_mode == NFA_DM_PWR_MODE_FULL) {
     if (nfa_ee_max_ee_cfg) {
@@ -273,7 +281,7 @@
   tNFA_EE_ECB* p_cb;
   tNFA_EE_MSG data;
 
-  NFA_TRACE_DEBUG0("nfa_ee_proc_hci_info_cback ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
   /* if NFCC power state is change to full power */
   nfa_ee_cb.ee_flags &= ~NFA_EE_FLAG_WAIT_HCI;
 
@@ -295,7 +303,7 @@
       if (nfa_ee_cb.discv_timer.in_use) {
         nfa_sys_stop_timer(&nfa_ee_cb.discv_timer);
         data.hdr.event = NFA_EE_DISCV_TIMEOUT_EVT;
-        nfa_ee_evt_hdlr((NFC_HDR*)&data);
+        nfa_ee_evt_hdlr(&data.hdr);
       }
     }
   }
@@ -314,7 +322,6 @@
 void nfa_ee_proc_evt(tNFC_RESPONSE_EVT event, void* p_data) {
   tNFA_EE_INT_EVT int_event = 0;
   tNFA_EE_NCI_WAIT_RSP cbk;
-  NFC_HDR* p_hdr;
 
   switch (event) {
     case NFC_NFCEE_DISCOVER_REVT: /* 4  NFCEE Discover response */
@@ -341,16 +348,21 @@
       int_event = NFA_EE_NCI_WAIT_RSP_EVT;
       cbk.opcode = NCI_MSG_RF_SET_ROUTING;
       break;
+
+    case NFC_NFCEE_STATUS_REVT:
+      int_event = NFA_EE_NCI_NFCEE_STATUS_NTF_EVT;
+      break;
   }
 
-  NFA_TRACE_DEBUG2("nfa_ee_proc_evt: event=0x%02x int_event:0x%x", event,
-                   int_event);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "nfa_ee_proc_evt: event=0x%02x int_event:0x%x", event, int_event);
   if (int_event) {
-    p_hdr = (NFC_HDR*)&cbk;
     cbk.hdr.event = int_event;
     cbk.p_data = p_data;
+    tNFA_EE_MSG nfa_ee_msg;
+    nfa_ee_msg.wait_rsp = cbk;
 
-    nfa_ee_evt_hdlr(p_hdr);
+    nfa_ee_evt_hdlr(&nfa_ee_msg.hdr);
   }
 }
 
@@ -386,7 +398,7 @@
 tNFA_EE_ECB* nfa_ee_find_ecb(uint8_t nfcee_id) {
   uint32_t xx;
   tNFA_EE_ECB *p_ret = NULL, *p_cb;
-  NFA_TRACE_DEBUG0("nfa_ee_find_ecb ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (nfcee_id == NFC_DH_ID) {
     p_ret = &nfa_ee_cb.ecb[NFA_EE_CB_4_DH];
@@ -415,7 +427,7 @@
 tNFA_EE_ECB* nfa_ee_find_ecb_by_conn_id(uint8_t conn_id) {
   uint32_t xx;
   tNFA_EE_ECB *p_ret = NULL, *p_cb;
-  NFA_TRACE_DEBUG0("nfa_ee_find_ecb_by_conn_id ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_cb = nfa_ee_cb.ecb;
   for (xx = 0; xx < nfa_ee_cb.cur_ee; xx++, p_cb++) {
@@ -443,7 +455,7 @@
   tNFA_EE_ECB* p_cb;
   tNFA_EE_MSG msg;
 
-  NFA_TRACE_DEBUG0("nfa_ee_sys_disable ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   nfa_ee_cb.em_state = NFA_EE_EM_STATE_DISABLED;
   /* report NFA_EE_DEREGISTER_EVT to all registered to EE */
@@ -517,7 +529,6 @@
   nfa_ee_cb.p_enable_cback = p_cback;
 }
 
-#if (BT_TRACE_VERBOSE == TRUE)
 /*******************************************************************************
 **
 ** Function         nfa_ee_sm_st_2_str
@@ -525,23 +536,18 @@
 ** Description      convert nfa-ee state to string
 **
 *******************************************************************************/
-static char* nfa_ee_sm_st_2_str(uint8_t state) {
+static std::string nfa_ee_sm_st_2_str(uint8_t state) {
   switch (state) {
     case NFA_EE_EM_STATE_INIT:
       return "INIT";
-
     case NFA_EE_EM_STATE_INIT_DONE:
       return "INIT_DONE";
-
     case NFA_EE_EM_STATE_RESTORING:
       return "RESTORING";
-
     case NFA_EE_EM_STATE_DISABLING:
       return "DISABLING";
-
     case NFA_EE_EM_STATE_DISABLED:
       return "DISABLED";
-
     default:
       return "Unknown";
   }
@@ -554,7 +560,7 @@
 ** Description      convert nfa-ee evt to string
 **
 *******************************************************************************/
-static char* nfa_ee_sm_evt_2_str(uint16_t event) {
+static std::string nfa_ee_sm_evt_2_str(uint16_t event) {
   switch (event) {
     case NFA_EE_API_DISCOVER_EVT:
       return "API_DISCOVER";
@@ -572,6 +578,10 @@
       return "API_ADD_AID";
     case NFA_EE_API_REMOVE_AID_EVT:
       return "API_REMOVE_AID";
+    case NFA_EE_API_ADD_SYSCODE_EVT:
+      return "NFA_EE_API_ADD_SYSCODE_EVT";
+    case NFA_EE_API_REMOVE_SYSCODE_EVT:
+      return "NFA_EE_API_REMOVE_SYSCODE_EVT";
     case NFA_EE_API_LMRT_SIZE_EVT:
       return "API_LMRT_SIZE";
     case NFA_EE_API_UPDATE_NOW_EVT:
@@ -608,7 +618,6 @@
       return "Unknown";
   }
 }
-#endif /* BT_TRACE_VERBOSE */
 
 /*******************************************************************************
 **
@@ -621,19 +630,12 @@
 **
 *******************************************************************************/
 bool nfa_ee_evt_hdlr(NFC_HDR* p_msg) {
-  tNFA_EE_MSG* p_evt_data = (tNFA_EE_MSG*)p_msg;
-  uint16_t event = p_msg->event & 0x00ff;
   bool act = false;
 
-#if (BT_TRACE_VERBOSE == TRUE)
-  NFA_TRACE_DEBUG4("nfa_ee_evt_hdlr (): Event %s(0x%02x), State: %s(%d)",
-                   nfa_ee_sm_evt_2_str(p_evt_data->hdr.event),
-                   p_evt_data->hdr.event,
-                   nfa_ee_sm_st_2_str(nfa_ee_cb.em_state), nfa_ee_cb.em_state);
-#else
-  NFA_TRACE_DEBUG2("nfa_ee_evt_hdlr (): Event 0x%02x, State: %d",
-                   p_evt_data->hdr.event, nfa_ee_cb.em_state);
-#endif
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "Event %s(0x%02x), State: %s(%d)",
+      nfa_ee_sm_evt_2_str(p_msg->event).c_str(), p_msg->event,
+      nfa_ee_sm_st_2_str(nfa_ee_cb.em_state).c_str(), nfa_ee_cb.em_state);
 
   switch (nfa_ee_cb.em_state) {
     case NFA_EE_EM_STATE_INIT_DONE:
@@ -649,13 +651,16 @@
       if (p_msg->event == NFA_EE_NCI_CONN_EVT) act = true;
       break;
   }
+
+  tNFA_EE_MSG* p_evt_data = (tNFA_EE_MSG*)p_msg;
   if (act) {
+    uint16_t event = p_msg->event & 0x00ff;
     if (event < NFA_EE_NUM_ACTIONS) {
       (*nfa_ee_actions[event])(p_evt_data);
     }
   } else {
-    /* if the data event is not handled by action function, free the data packet
-     */
+    /* If the event is not handled, free the data packet. */
+    /* FIXME: Is it really always tNFA_EE_NCI_CONN? */
     if (p_msg->event == NFA_EE_NCI_DATA_EVT)
       GKI_freebuf(p_evt_data->conn.p_data);
   }
diff --git a/src/nfa/hci/nfa_hci_act.c b/src/nfa/hci/nfa_hci_act.cc
similarity index 95%
rename from src/nfa/hci/nfa_hci_act.c
rename to src/nfa/hci/nfa_hci_act.cc
index d68cddf..1e50670 100644
--- a/src/nfa/hci/nfa_hci_act.c
+++ b/src/nfa/hci/nfa_hci_act.cc
@@ -22,16 +22,18 @@
  *
  ******************************************************************************/
 #include <string.h>
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "nfa_dm_int.h"
 #include "nfa_hci_api.h"
 #include "nfa_hci_defs.h"
 #include "nfa_hci_int.h"
-#include "nfa_mem_co.h"
-#include "nfa_nv_co.h"
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
-#include "nfc_api.h"
-#include "trace_api.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 /* Static local functions       */
 static void nfa_hci_api_register(tNFA_HCI_EVENT_DATA* p_evt_data);
@@ -57,10 +59,8 @@
                                                  uint16_t data_len,
                                                  tNFA_HCI_DYN_PIPE* p_pipe);
 static void nfa_hci_handle_generic_gate_cmd(uint8_t* p_data, uint8_t data_len,
-                                            tNFA_HCI_DYN_GATE* p_gate,
                                             tNFA_HCI_DYN_PIPE* p_pipe);
 static void nfa_hci_handle_generic_gate_rsp(uint8_t* p_data, uint8_t data_len,
-                                            tNFA_HCI_DYN_GATE* p_gate,
                                             tNFA_HCI_DYN_PIPE* p_pipe);
 static void nfa_hci_handle_generic_gate_evt(uint8_t* p_data, uint16_t data_len,
                                             tNFA_HCI_DYN_GATE* p_gate,
@@ -208,8 +208,7 @@
         break;
 
       default:
-        NFA_TRACE_ERROR1("nfa_hci_check_api_requests ()  Unknown event: 0x%04x",
-                         p_msg->event);
+        LOG(ERROR) << StringPrintf("Unknown event: 0x%04x", p_msg->event);
         break;
     }
 
@@ -239,8 +238,8 @@
     if ((nfa_hci_cb.cfg.reg_app_names[xx][0] != 0) &&
         !strncmp(p_app_name, &nfa_hci_cb.cfg.reg_app_names[xx][0],
                  strlen(p_app_name))) {
-      NFA_TRACE_EVENT2("nfa_hci_api_register (%s)  Reusing: %u", p_app_name,
-                       xx);
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+          "nfa_hci_api_register (%s)  Reusing: %u", p_app_name, xx);
       break;
     }
   }
@@ -265,14 +264,15 @@
         strncpy(&nfa_hci_cb.cfg.reg_app_names[xx][0], p_app_name,
                 NFA_MAX_HCI_APP_NAME_LEN);
         nfa_hci_cb.nv_write_needed = true;
-        NFA_TRACE_EVENT2("nfa_hci_api_register (%s)  Allocated: %u", p_app_name,
-                         xx);
+        DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+            "nfa_hci_api_register (%s)  Allocated: %u", p_app_name, xx);
         break;
       }
     }
 
     if (xx == NFA_HCI_MAX_APP_CB) {
-      NFA_TRACE_ERROR1("nfa_hci_api_register (%s)  NO ENTRIES", p_app_name);
+      LOG(ERROR) << StringPrintf("nfa_hci_api_register (%s)  NO ENTRIES",
+                                 p_app_name);
 
       evt_data.hci_register.status = NFA_STATUS_FAILED;
       p_evt_data->app_info.p_cback(NFA_HCI_REGISTER_EVT, &evt_data);
@@ -317,15 +317,16 @@
           !strncmp(p_evt_data->app_info.app_name,
                    &nfa_hci_cb.cfg.reg_app_names[xx][0],
                    strlen(p_evt_data->app_info.app_name))) {
-        NFA_TRACE_EVENT2("nfa_hci_api_deregister (%s) inx: %u",
-                         p_evt_data->app_info.app_name, xx);
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("nfa_hci_api_deregister (%s) inx: %u",
+                            p_evt_data->app_info.app_name, xx);
         break;
       }
     }
 
     if (xx == NFA_HCI_MAX_APP_CB) {
-      NFA_TRACE_WARNING1("nfa_hci_api_deregister () Unknown app: %s",
-                         p_evt_data->app_info.app_name);
+      LOG(WARNING) << StringPrintf("Unknown app: %s",
+                                   p_evt_data->app_info.app_name);
       return;
     }
     nfa_hci_cb.app_in_use = (tNFA_HANDLE)(xx | NFA_HANDLE_GROUP_HCI);
@@ -477,9 +478,8 @@
     } else if (p_gate->gate_owner != app_handle) {
       /* Some other app owns the gate */
       p_gate = NULL;
-      NFA_TRACE_ERROR1(
-          "nfa_hci_api_alloc_gate (): The Gate (0X%02x) already taken!",
-          p_evt_data->gate_info.gate);
+      LOG(ERROR) << StringPrintf("The Gate (0X%02x) already taken!",
+                                 p_evt_data->gate_info.gate);
     }
   }
 
@@ -601,7 +601,7 @@
   if ((p_gate == NULL) ||
       (p_gate->gate_owner != p_evt_data->create_pipe.hci_handle)) {
     report_failed = true;
-    NFA_TRACE_ERROR2(
+    LOG(ERROR) << StringPrintf(
         "nfa_hci_api_create_pipe Cannot create pipe! APP: 0x%02x does not own "
         "the gate:0x%x",
         p_evt_data->create_pipe.hci_handle,
@@ -611,7 +611,7 @@
                  p_evt_data->create_pipe.dest_host,
                  p_evt_data->create_pipe.dest_gate)) {
     report_failed = true;
-    NFA_TRACE_ERROR0(
+    LOG(ERROR) << StringPrintf(
         "nfa_hci_api_create_pipe : Cannot create multiple pipe between the "
         "same two gates!");
   }
@@ -708,8 +708,9 @@
       }
 
       if (p_pipe->pipe_state == NFA_HCI_PIPE_CLOSED) {
-        NFA_TRACE_WARNING1("nfa_hci_api_get_reg_value pipe:%d not open",
-                           p_evt_data->get_registry.pipe);
+        LOG(WARNING) << StringPrintf(
+            "nfa_hci_api_get_reg_value pipe:%d not open",
+            p_evt_data->get_registry.pipe);
       } else {
         status = nfa_hciu_send_get_param_cmd(p_evt_data->get_registry.pipe,
                                              p_evt_data->get_registry.reg_inx);
@@ -756,8 +757,9 @@
       }
 
       if (p_pipe->pipe_state == NFA_HCI_PIPE_CLOSED) {
-        NFA_TRACE_WARNING1("nfa_hci_api_set_reg_value pipe:%d not open",
-                           p_evt_data->set_registry.pipe);
+        LOG(WARNING) << StringPrintf(
+            "nfa_hci_api_set_reg_value pipe:%d not open",
+            p_evt_data->set_registry.pipe);
       } else {
         status = nfa_hciu_send_set_param_cmd(
             p_evt_data->set_registry.pipe, p_evt_data->set_registry.reg_inx,
@@ -878,18 +880,18 @@
                                    p_evt_data->send_cmd.data);
         if (status == NFA_STATUS_OK) return true;
       } else {
-        NFA_TRACE_WARNING1("nfa_hci_api_send_cmd pipe:%d not open",
-                           p_pipe->pipe_id);
+        LOG(WARNING) << StringPrintf("nfa_hci_api_send_cmd pipe:%d not open",
+                                     p_pipe->pipe_id);
       }
     } else {
-      NFA_TRACE_WARNING1(
+      LOG(WARNING) << StringPrintf(
           "nfa_hci_api_send_cmd pipe:%d Owned by different application or "
           "Destination host is not active",
           p_pipe->pipe_id);
     }
   } else {
-    NFA_TRACE_WARNING1("nfa_hci_api_send_cmd pipe:%d not found",
-                       p_evt_data->send_cmd.pipe);
+    LOG(WARNING) << StringPrintf("nfa_hci_api_send_cmd pipe:%d not found",
+                                 p_evt_data->send_cmd.pipe);
   }
 
   evt_data.cmd_sent.status = status;
@@ -928,18 +930,18 @@
                                    p_evt_data->send_rsp.data);
         if (status == NFA_STATUS_OK) return;
       } else {
-        NFA_TRACE_WARNING1("nfa_hci_api_send_rsp pipe:%d not open",
-                           p_pipe->pipe_id);
+        LOG(WARNING) << StringPrintf("nfa_hci_api_send_rsp pipe:%d not open",
+                                     p_pipe->pipe_id);
       }
     } else {
-      NFA_TRACE_WARNING1(
+      LOG(WARNING) << StringPrintf(
           "nfa_hci_api_send_rsp pipe:%d Owned by different application or "
           "Destination host is not active",
           p_pipe->pipe_id);
     }
   } else {
-    NFA_TRACE_WARNING1("nfa_hci_api_send_rsp pipe:%d not found",
-                       p_evt_data->send_rsp.pipe);
+    LOG(WARNING) << StringPrintf("nfa_hci_api_send_rsp pipe:%d not found",
+                                 p_evt_data->send_rsp.pipe);
   }
 
   evt_data.rsp_sent.status = status;
@@ -1011,18 +1013,18 @@
           }
         }
       } else {
-        NFA_TRACE_WARNING1("nfa_hci_api_send_event pipe:%d not open",
-                           p_pipe->pipe_id);
+        LOG(WARNING) << StringPrintf("nfa_hci_api_send_event pipe:%d not open",
+                                     p_pipe->pipe_id);
       }
     } else {
-      NFA_TRACE_WARNING1(
+      LOG(WARNING) << StringPrintf(
           "nfa_hci_api_send_event pipe:%d Owned by different application or "
           "Destination host is not active",
           p_pipe->pipe_id);
     }
   } else {
-    NFA_TRACE_WARNING1("nfa_hci_api_send_event pipe:%d not found",
-                       p_evt_data->send_evt.pipe);
+    LOG(WARNING) << StringPrintf("nfa_hci_api_send_event pipe:%d not found",
+                                 p_evt_data->send_evt.pipe);
   }
 
   evt_data.evt_sent.status = status;
@@ -1318,19 +1320,11 @@
   uint8_t host_id = 0;
   uint32_t os_tick;
 
-#if (BT_TRACE_VERBOSE == TRUE)
-  NFA_TRACE_DEBUG4(
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
       "nfa_hci_handle_admin_gate_rsp - LastCmdSent: %s  App: 0x%04x  Gate: "
       "0x%02x  Pipe: 0x%02x",
-      nfa_hciu_instr_2_str(nfa_hci_cb.cmd_sent), nfa_hci_cb.app_in_use,
+      nfa_hciu_instr_2_str(nfa_hci_cb.cmd_sent).c_str(), nfa_hci_cb.app_in_use,
       nfa_hci_cb.local_gate_in_use, nfa_hci_cb.pipe_in_use);
-#else
-  NFA_TRACE_DEBUG4(
-      "nfa_hci_handle_admin_gate_rsp LastCmdSent: %u  App: 0x%04x  Gate: "
-      "0x%02x  Pipe: 0x%02x",
-      nfa_hci_cb.cmd_sent, nfa_hci_cb.app_in_use, nfa_hci_cb.local_gate_in_use,
-      nfa_hci_cb.pipe_in_use);
-#endif
 
   /* If starting up, handle events here */
   if ((nfa_hci_cb.hci_state == NFA_HCI_STATE_STARTUP) ||
@@ -1343,7 +1337,8 @@
     }
 
     if (nfa_hci_cb.inst != NFA_HCI_ANY_OK) {
-      NFA_TRACE_ERROR0("nfa_hci_handle_admin_gate_rsp - Initialization failed");
+      LOG(ERROR) << StringPrintf(
+          "nfa_hci_handle_admin_gate_rsp - Initialization failed");
       nfa_hci_startup_complete(NFA_STATUS_FAILED);
       return;
     }
@@ -1359,6 +1354,11 @@
           if ((nfa_hci_cb.hci_state == NFA_HCI_STATE_STARTUP) ||
               (nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE))
             nfa_hci_dh_startup_complete();
+          if (NFA_GetNCIVersion() == NCI_VERSION_2_0) {
+            nfa_hci_cb.hci_state = NFA_HCI_STATE_WAIT_NETWK_ENABLE;
+            NFA_EeGetInfo(&nfa_hci_cb.num_nfcee, nfa_hci_cb.ee_info);
+            nfa_hci_enable_one_nfcee();
+          }
         }
         break;
 
@@ -1514,7 +1514,7 @@
 
           /* Sanity check */
           if (source_gate != nfa_hci_cb.local_gate_in_use) {
-            NFA_TRACE_WARNING2(
+            LOG(WARNING) << StringPrintf(
                 "nfa_hci_handle_admin_gate_rsp sent create pipe with gate: %u "
                 "got back: %u",
                 nfa_hci_cb.local_gate_in_use, source_gate);
@@ -1600,17 +1600,17 @@
 ** Returns          none
 **
 *******************************************************************************/
-void nfa_hci_handle_admin_gate_evt(uint8_t* p_data) {
+void nfa_hci_handle_admin_gate_evt() {
   tNFA_HCI_EVT_DATA evt_data;
   tNFA_HCI_API_GET_HOST_LIST* p_msg;
 
   if (nfa_hci_cb.inst != NFA_HCI_EVT_HOT_PLUG) {
-    NFA_TRACE_ERROR0(
+    LOG(ERROR) << StringPrintf(
         "nfa_hci_handle_admin_gate_evt - Unknown event on ADMIN Pipe");
     return;
   }
 
-  NFA_TRACE_DEBUG0(
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
       "nfa_hci_handle_admin_gate_evt - HOT PLUG EVT event on ADMIN Pipe");
   nfa_hci_cb.num_hot_plug_evts++;
 
@@ -1675,7 +1675,8 @@
 
   if (p_pipe == NULL) {
     /* Invalid pipe ID */
-    NFA_TRACE_ERROR1("nfa_hci_handle_dyn_pipe_pkt - Unknown pipe %d", pipe_id);
+    LOG(ERROR) << StringPrintf("nfa_hci_handle_dyn_pipe_pkt - Unknown pipe %d",
+                               pipe_id);
     if (nfa_hci_cb.type == NFA_HCI_COMMAND_TYPE)
       nfa_hciu_send_msg(pipe_id, NFA_HCI_RESPONSE_TYPE, NFA_HCI_ANY_E_NOK, 0,
                         NULL);
@@ -1691,7 +1692,7 @@
   } else {
     p_gate = nfa_hciu_find_gate_by_gid(p_pipe->local_gate);
     if (p_gate == NULL) {
-      NFA_TRACE_ERROR1(
+      LOG(ERROR) << StringPrintf(
           "nfa_hci_handle_dyn_pipe_pkt - Pipe's gate %d is corrupt",
           p_pipe->local_gate);
       if (nfa_hci_cb.type == NFA_HCI_COMMAND_TYPE)
@@ -1703,13 +1704,11 @@
     /* Check if data packet is a command, response or event */
     switch (nfa_hci_cb.type) {
       case NFA_HCI_COMMAND_TYPE:
-        nfa_hci_handle_generic_gate_cmd(p_data, (uint8_t)data_len, p_gate,
-                                        p_pipe);
+        nfa_hci_handle_generic_gate_cmd(p_data, (uint8_t)data_len, p_pipe);
         break;
 
       case NFA_HCI_RESPONSE_TYPE:
-        nfa_hci_handle_generic_gate_rsp(p_data, (uint8_t)data_len, p_gate,
-                                        p_pipe);
+        nfa_hci_handle_generic_gate_rsp(p_data, (uint8_t)data_len, p_pipe);
         break;
 
       case NFA_HCI_EVENT_TYPE:
@@ -1826,7 +1825,6 @@
 **
 *******************************************************************************/
 static void nfa_hci_handle_generic_gate_cmd(uint8_t* p_data, uint8_t data_len,
-                                            tNFA_HCI_DYN_GATE* p_gate,
                                             tNFA_HCI_DYN_PIPE* p_pipe) {
   tNFA_HCI_EVT_DATA evt_data;
   tNFA_HANDLE app_handle = nfa_hciu_get_pipe_owner(p_pipe->pipe_id);
@@ -1896,7 +1894,6 @@
 **
 *******************************************************************************/
 static void nfa_hci_handle_generic_gate_rsp(uint8_t* p_data, uint8_t data_len,
-                                            tNFA_HCI_DYN_GATE* p_gate,
                                             tNFA_HCI_DYN_PIPE* p_pipe) {
   tNFA_HCI_EVT_DATA evt_data;
   tNFA_STATUS status = NFA_STATUS_OK;
diff --git a/src/nfa/hci/nfa_hci_api.c b/src/nfa/hci/nfa_hci_api.cc
similarity index 75%
rename from src/nfa/hci/nfa_hci_api.c
rename to src/nfa/hci/nfa_hci_api.cc
index c40ed3e..ce66f89 100644
--- a/src/nfa/hci/nfa_hci_api.c
+++ b/src/nfa/hci/nfa_hci_api.cc
@@ -21,13 +21,16 @@
  *  NFA interface to HCI
  *
  ******************************************************************************/
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "nfa_hci_api.h"
-#include <string.h>
 #include "nfa_hci_defs.h"
 #include "nfa_hci_int.h"
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
-#include "nfc_api.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 /*******************************************************************************
 **
@@ -52,18 +55,20 @@
   uint8_t app_name_len;
 
   if (p_app_name == NULL) {
-    NFA_TRACE_API0("NFA_HciRegister (): Invalid Application name");
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Invalid Application name");
     return (NFA_STATUS_FAILED);
   }
 
   if (p_cback == NULL) {
-    NFA_TRACE_API0(
-        "NFA_HciRegister (): Application should provide callback function to "
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "Application should provide callback function to "
         "register!");
     return (NFA_STATUS_FAILED);
   }
 
-  NFA_TRACE_API1("NFA_HciRegister (): Application Name: %s", p_app_name);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("Application Name: %s", p_app_name);
 
   app_name_len = (uint8_t)strlen(p_app_name);
 
@@ -107,12 +112,13 @@
   tNFA_HCI_API_GET_APP_GATE_PIPE* p_msg;
 
   if ((NFA_HANDLE_GROUP_MASK & hci_handle) != NFA_HANDLE_GROUP_HCI) {
-    NFA_TRACE_API1("NFA_HciGetGateAndPipeList (): Invalid hci_handle:0x%04x",
-                   hci_handle);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Invalid hci_handle:0x%04x", hci_handle);
     return (NFA_STATUS_FAILED);
   }
 
-  NFA_TRACE_API1("NFA_HciGetGateAndPipeList (): hci_handle:0x%04x", hci_handle);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("hci_handle:0x%04x", hci_handle);
 
   /* Register the application with HCI */
   if ((nfa_hci_cb.hci_state != NFA_HCI_STATE_DISABLED) &&
@@ -150,11 +156,12 @@
   uint8_t app_name_len;
 
   if (p_app_name == NULL) {
-    NFA_TRACE_API0("NFA_HciDeregister (): Invalid Application");
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("Invalid Application");
     return (NFA_STATUS_FAILED);
   }
 
-  NFA_TRACE_API1("NFA_HciDeregister (): Application Name: %s", p_app_name);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("Application Name: %s", p_app_name);
   app_name_len = (uint8_t)strlen(p_app_name);
 
   if (app_name_len > NFA_MAX_HCI_APP_NAME_LEN) return (NFA_STATUS_FAILED);
@@ -168,8 +175,7 @@
   }
 
   if (xx == NFA_HCI_MAX_APP_CB) {
-    NFA_TRACE_ERROR1("NFA_HciDeregister (): Application Name: %s  NOT FOUND",
-                     p_app_name);
+    LOG(ERROR) << StringPrintf("Application Name: %s  NOT FOUND", p_app_name);
     return (NFA_STATUS_FAILED);
   }
 
@@ -210,20 +216,21 @@
   tNFA_HCI_API_ALLOC_GATE* p_msg;
 
   if ((NFA_HANDLE_GROUP_MASK & hci_handle) != NFA_HANDLE_GROUP_HCI) {
-    NFA_TRACE_API1("NFA_HciAllocGate (): Invalid hci_handle:0x%04x",
-                   hci_handle);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Invalid hci_handle:0x%04x", hci_handle);
     return (NFA_STATUS_FAILED);
   }
 
   if ((gate) && ((gate < NFA_HCI_FIRST_HOST_SPECIFIC_GENERIC_GATE) ||
                  (gate > NFA_HCI_LAST_PROP_GATE) ||
                  (gate == NFA_HCI_CONNECTIVITY_GATE))) {
-    NFA_TRACE_API1("NFA_HciAllocGate (): Cannot allocate gate:0x%02x", gate);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Cannot allocate gate:0x%02x", gate);
     return (NFA_STATUS_FAILED);
   }
 
-  NFA_TRACE_API2("NFA_HciAllocGate (): hci_handle:0x%04x, Gate:0x%02x",
-                 hci_handle, gate);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("hci_handle:0x%04x, Gate:0x%02x", hci_handle, gate);
 
   /* Request HCI to allocate gate to the application */
   if ((nfa_hci_cb.hci_state != NFA_HCI_STATE_DISABLED) &&
@@ -256,20 +263,20 @@
   tNFA_HCI_API_DEALLOC_GATE* p_msg;
 
   if ((NFA_HANDLE_GROUP_MASK & hci_handle) != NFA_HANDLE_GROUP_HCI) {
-    NFA_TRACE_API1("NFA_HciDeallocGate (): Invalid hci_handle:0x%04x",
-                   hci_handle);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Invalid hci_handle:0x%04x", hci_handle);
     return (NFA_STATUS_FAILED);
   }
 
   if ((gate < NFA_HCI_FIRST_HOST_SPECIFIC_GENERIC_GATE) ||
       (gate > NFA_HCI_LAST_PROP_GATE) || (gate == NFA_HCI_CONNECTIVITY_GATE)) {
-    NFA_TRACE_API1("NFA_HciDeallocGate (): Cannot deallocate the gate:0x%02x",
-                   gate);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Cannot deallocate the gate:0x%02x", gate);
     return (NFA_STATUS_FAILED);
   }
 
-  NFA_TRACE_API2("NFA_HciDeallocGate (): hci_handle:0x%04x, gate:0x%02X",
-                 hci_handle, gate);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("hci_handle:0x%04x, gate:0x%02X", hci_handle, gate);
 
   /* Request HCI to deallocate the gate that was previously allocated to the
    * application */
@@ -303,12 +310,13 @@
   tNFA_HCI_API_GET_HOST_LIST* p_msg;
 
   if ((NFA_HANDLE_GROUP_MASK & hci_handle) != NFA_HANDLE_GROUP_HCI) {
-    NFA_TRACE_API1("NFA_HciGetHostList (): Invalid hci_handle:0x%04x",
-                   hci_handle);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Invalid hci_handle:0x%04x", hci_handle);
     return (NFA_STATUS_FAILED);
   }
 
-  NFA_TRACE_API1("NFA_HciGetHostList (): hci_handle:0x%04x", hci_handle);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("hci_handle:0x%04x", hci_handle);
 
   /* Request HCI to get list of host in the hci network */
   if ((nfa_hci_cb.hci_state != NFA_HCI_STATE_DISABLED) &&
@@ -349,21 +357,21 @@
   tNFA_HCI_API_CREATE_PIPE_EVT* p_msg;
   uint8_t xx;
 
-  NFA_TRACE_API4(
-      "NFA_HciCreatePipe (): hci_handle:0x%04x, source gate:0x%02X, "
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "hci_handle:0x%04x, source gate:0x%02X, "
       "destination host:0x%02X , destination gate:0x%02X",
       hci_handle, source_gate_id, dest_host, dest_gate);
 
   if ((NFA_HANDLE_GROUP_MASK & hci_handle) != NFA_HANDLE_GROUP_HCI) {
-    NFA_TRACE_API1("NFA_HciCreatePipe (): Invalid hci_handle:0x%04x",
-                   hci_handle);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Invalid hci_handle:0x%04x", hci_handle);
     return (NFA_STATUS_FAILED);
   }
 
   if ((source_gate_id < NFA_HCI_FIRST_HOST_SPECIFIC_GENERIC_GATE) ||
       (source_gate_id > NFA_HCI_LAST_PROP_GATE)) {
-    NFA_TRACE_API1("NFA_HciCreatePipe (): Invalid local Gate:0x%02x",
-                   source_gate_id);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Invalid local Gate:0x%02x", source_gate_id);
     return (NFA_STATUS_FAILED);
   }
 
@@ -371,8 +379,8 @@
        (dest_gate != NFA_HCI_LOOP_BACK_GATE) &&
        (dest_gate != NFA_HCI_IDENTITY_MANAGEMENT_GATE)) ||
       (dest_gate > NFA_HCI_LAST_PROP_GATE)) {
-    NFA_TRACE_API1("NFA_HciCreatePipe (): Invalid Destination Gate:0x%02x",
-                   dest_gate);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Invalid Destination Gate:0x%02x", dest_gate);
     return (NFA_STATUS_FAILED);
   }
 
@@ -380,7 +388,8 @@
     if (nfa_hci_cb.inactive_host[xx] == dest_host) break;
 
   if (xx != NFA_HCI_MAX_HOST_IN_NETWORK) {
-    NFA_TRACE_API1("NFA_HciCreatePipe (): Host not active:0x%02x", dest_host);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Host not active:0x%02x", dest_host);
     return (NFA_STATUS_FAILED);
   }
 
@@ -418,18 +427,20 @@
   tNFA_HCI_API_OPEN_PIPE_EVT* p_msg;
 
   if ((NFA_HANDLE_GROUP_MASK & hci_handle) != NFA_HANDLE_GROUP_HCI) {
-    NFA_TRACE_API1("NFA_HciOpenPipe (): Invalid hci_handle:0x%04x", hci_handle);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Invalid hci_handle:0x%04x", hci_handle);
     return (NFA_STATUS_FAILED);
   }
 
   if ((pipe < NFA_HCI_FIRST_DYNAMIC_PIPE) ||
       (pipe > NFA_HCI_LAST_DYNAMIC_PIPE)) {
-    NFA_TRACE_API1("NFA_HciOpenPipe (): Invalid Pipe:0x%02x", pipe);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Invalid Pipe:0x%02x", pipe);
     return (NFA_STATUS_FAILED);
   }
 
-  NFA_TRACE_API2("NFA_HciOpenPipe (): hci_handle:0x%04x, pipe:0x%02X",
-                 hci_handle, pipe);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("hci_handle:0x%04x, pipe:0x%02X", hci_handle, pipe);
 
   /* Request HCI to open a pipe if it is in closed state */
   if ((nfa_hci_cb.hci_state != NFA_HCI_STATE_DISABLED) &&
@@ -467,18 +478,19 @@
   tNFA_HCI_API_GET_REGISTRY* p_msg;
 
   if ((NFA_HANDLE_GROUP_MASK & hci_handle) != NFA_HANDLE_GROUP_HCI) {
-    NFA_TRACE_API1("NFA_HciGetRegistry (): Invalid hci_handle:0x%04x",
-                   hci_handle);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Invalid hci_handle:0x%04x", hci_handle);
     return (NFA_STATUS_FAILED);
   }
 
   if (pipe < NFA_HCI_FIRST_DYNAMIC_PIPE) {
-    NFA_TRACE_API1("NFA_HciGetRegistry (): Invalid Pipe:0x%02x", pipe);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Invalid Pipe:0x%02x", pipe);
     return (NFA_STATUS_FAILED);
   }
 
-  NFA_TRACE_API2("NFA_HciGetRegistry (): hci_handle:0x%04x  Pipe: 0x%02x",
-                 hci_handle, pipe);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("hci_handle:0x%04x  Pipe: 0x%02x", hci_handle, pipe);
 
   /* Request HCI to get list of gates supported by the specified host */
   if ((nfa_hci_cb.hci_state != NFA_HCI_STATE_DISABLED) &&
@@ -498,66 +510,6 @@
 
 /*******************************************************************************
 **
-** Function         NFA_HciSetRegistry
-**
-** Description      This function requests a peer host to set the desired
-**                  registry field value for the gate that the pipe is on.
-**
-**                  When the peer host responds,the app is notified with
-**                  NFA_HCI_SET_REG_RSP_EVT or
-**                  if an error occurs in sending the command the app will be
-**                  notified by NFA_HCI_CMD_SENT_EVT
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-extern tNFA_STATUS NFA_HciSetRegistry(tNFA_HANDLE hci_handle, uint8_t pipe,
-                                      uint8_t reg_inx, uint8_t data_size,
-                                      uint8_t* p_data) {
-  tNFA_HCI_API_SET_REGISTRY* p_msg;
-
-  if ((NFA_HANDLE_GROUP_MASK & hci_handle) != NFA_HANDLE_GROUP_HCI) {
-    NFA_TRACE_API1("NFA_HciSetRegistry (): Invalid hci_handle:0x%04x",
-                   hci_handle);
-    return (NFA_STATUS_FAILED);
-  }
-
-  if (pipe < NFA_HCI_FIRST_DYNAMIC_PIPE) {
-    NFA_TRACE_API1("NFA_HciSetRegistry (): Invalid Pipe:0x%02x", pipe);
-    return (NFA_STATUS_FAILED);
-  }
-
-  if ((data_size == 0) || (p_data == NULL) ||
-      (data_size > NFA_MAX_HCI_CMD_LEN)) {
-    NFA_TRACE_API1("NFA_HciSetRegistry (): Invalid data size:0x%02x",
-                   data_size);
-    return (NFA_STATUS_FAILED);
-  }
-
-  NFA_TRACE_API2("NFA_HciSetRegistry (): hci_handle:0x%04x  Pipe: 0x%02x",
-                 hci_handle, pipe);
-
-  /* Request HCI to get list of gates supported by the specified host */
-  if ((nfa_hci_cb.hci_state != NFA_HCI_STATE_DISABLED) &&
-      ((p_msg = (tNFA_HCI_API_SET_REGISTRY*)GKI_getbuf(
-            sizeof(tNFA_HCI_API_SET_REGISTRY))) != NULL)) {
-    p_msg->hdr.event = NFA_HCI_API_SET_REGISTRY_EVT;
-    p_msg->hci_handle = hci_handle;
-    p_msg->pipe = pipe;
-    p_msg->reg_inx = reg_inx;
-    p_msg->size = data_size;
-
-    memcpy(p_msg->data, p_data, data_size);
-    nfa_sys_sendmsg(p_msg);
-    return (NFA_STATUS_OK);
-  }
-
-  return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
 ** Function         NFA_HciSendCommand
 **
 ** Description      This function is called to send a command on a pipe created
@@ -577,24 +529,26 @@
   tNFA_HCI_API_SEND_CMD_EVT* p_msg;
 
   if ((NFA_HANDLE_GROUP_MASK & hci_handle) != NFA_HANDLE_GROUP_HCI) {
-    NFA_TRACE_API1("NFA_HciSendCommand (): Invalid hci_handle:0x%04x",
-                   hci_handle);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Invalid hci_handle:0x%04x", hci_handle);
     return (NFA_STATUS_FAILED);
   }
 
   if (pipe < NFA_HCI_FIRST_DYNAMIC_PIPE) {
-    NFA_TRACE_API1("NFA_HciSendCommand (): Invalid Pipe:0x%02x", pipe);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Invalid Pipe:0x%02x", pipe);
     return (NFA_STATUS_FAILED);
   }
 
   if ((cmd_size && (p_data == NULL)) || (cmd_size > NFA_MAX_HCI_CMD_LEN)) {
-    NFA_TRACE_API1("NFA_HciSendCommand (): Invalid cmd size:0x%02x", cmd_size);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Invalid cmd size:0x%02x", cmd_size);
     return (NFA_STATUS_FAILED);
   }
 
-  NFA_TRACE_API3(
-      "NFA_HciSendCommand (): hci_handle:0x%04x, pipe:0x%02x  Code: 0x%02x",
-      hci_handle, pipe, cmd_code);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("hci_handle:0x%04x, pipe:0x%02x  Code: 0x%02x",
+                      hci_handle, pipe, cmd_code);
 
   /* Request HCI to post event data on a particular pipe */
   if ((nfa_hci_cb.hci_state != NFA_HCI_STATE_DISABLED) &&
@@ -617,64 +571,6 @@
 
 /*******************************************************************************
 **
-** Function         NFA_HciSendResponse
-**
-** Description      This function is called to send a response on a pipe created
-**                  by the application.
-**                  The app will be notified by NFA_HCI_RSP_SENT_EVT if an error
-**                  occurs.
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-extern tNFA_STATUS NFA_HciSendResponse(tNFA_HANDLE hci_handle, uint8_t pipe,
-                                       uint8_t response, uint8_t data_size,
-                                       uint8_t* p_data) {
-  tNFA_HCI_API_SEND_RSP_EVT* p_msg;
-
-  if ((NFA_HANDLE_GROUP_MASK & hci_handle) != NFA_HANDLE_GROUP_HCI) {
-    NFA_TRACE_API1("NFA_HciSendResponse (): Invalid hci_handle:0x%04x",
-                   hci_handle);
-    return (NFA_STATUS_FAILED);
-  }
-
-  if (pipe < NFA_HCI_FIRST_DYNAMIC_PIPE) {
-    NFA_TRACE_API1("NFA_HciSendResponse (): Invalid Pipe:0x%02x", pipe);
-    return (NFA_STATUS_FAILED);
-  }
-
-  if ((data_size && (p_data == NULL)) || (data_size > NFA_MAX_HCI_RSP_LEN)) {
-    NFA_TRACE_API1("NFA_HciSendResponse (): Invalid data size:0x%02x",
-                   data_size);
-    return (NFA_STATUS_FAILED);
-  }
-
-  NFA_TRACE_API3(
-      "NFA_HciSendResponse (): hci_handle:0x%04x  Pipe: 0x%02x  Response: "
-      "0x%02x",
-      hci_handle, pipe, response);
-
-  /* Request HCI to get list of gates supported by the specified host */
-  if ((nfa_hci_cb.hci_state != NFA_HCI_STATE_DISABLED) &&
-      ((p_msg = (tNFA_HCI_API_SEND_RSP_EVT*)GKI_getbuf(
-            sizeof(tNFA_HCI_API_SEND_RSP_EVT))) != NULL)) {
-    p_msg->hdr.event = NFA_HCI_API_SEND_RSP_EVT;
-    p_msg->hci_handle = hci_handle;
-    p_msg->response = response;
-    p_msg->size = data_size;
-
-    if (data_size) memcpy(p_msg->data, p_data, data_size);
-
-    nfa_sys_sendmsg(p_msg);
-    return (NFA_STATUS_OK);
-  }
-
-  return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
 ** Function         NFA_HciSendEvent
 **
 ** Description      This function is called to send any event on a pipe created
@@ -710,29 +606,31 @@
                              uint8_t* p_rsp_buf, uint16_t rsp_timeout) {
   tNFA_HCI_API_SEND_EVENT_EVT* p_msg;
 
-  NFA_TRACE_API3(
-      "NFA_HciSendEvent(): hci_handle:0x%04x, pipe:0x%02x  Code: 0x%02x",
-      hci_handle, pipe, evt_code);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("hci_handle:0x%04x, pipe:0x%02x  Code: 0x%02x",
+                      hci_handle, pipe, evt_code);
 
   if ((NFA_HANDLE_GROUP_MASK & hci_handle) != NFA_HANDLE_GROUP_HCI) {
-    NFA_TRACE_API1("NFA_HciSendEvent (): Invalid hci_handle:0x%04x",
-                   hci_handle);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Invalid hci_handle:0x%04x", hci_handle);
     return (NFA_STATUS_FAILED);
   }
 
   if (pipe < NFA_HCI_FIRST_DYNAMIC_PIPE) {
-    NFA_TRACE_API1("NFA_HciSendEvent (): Invalid Pipe:0x%02x", pipe);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Invalid Pipe:0x%02x", pipe);
     return (NFA_STATUS_FAILED);
   }
 
   if (evt_size && (p_data == NULL)) {
-    NFA_TRACE_API1("NFA_HciSendEvent (): Invalid Event size:0x%02x", evt_size);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Invalid Event size:0x%02x", evt_size);
     return (NFA_STATUS_FAILED);
   }
 
   if (rsp_size && (p_rsp_buf == NULL)) {
-    NFA_TRACE_API1(
-        "NFA_HciSendEvent (): No Event buffer, but invalid event buffer size "
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "No Event buffer, but invalid event buffer size "
         ":%u",
         rsp_size);
     return (NFA_STATUS_FAILED);
@@ -775,18 +673,19 @@
 tNFA_STATUS NFA_HciClosePipe(tNFA_HANDLE hci_handle, uint8_t pipe) {
   tNFA_HCI_API_CLOSE_PIPE_EVT* p_msg;
 
-  NFA_TRACE_API2("NFA_HciClosePipe (): hci_handle:0x%04x, pipe:0x%02X",
-                 hci_handle, pipe);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("hci_handle:0x%04x, pipe:0x%02X", hci_handle, pipe);
 
   if ((NFA_HANDLE_GROUP_MASK & hci_handle) != NFA_HANDLE_GROUP_HCI) {
-    NFA_TRACE_API1("NFA_HciClosePipe (): Invalid hci_handle:0x%04x",
-                   hci_handle);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Invalid hci_handle:0x%04x", hci_handle);
     return (NFA_STATUS_FAILED);
   }
 
   if ((pipe < NFA_HCI_FIRST_DYNAMIC_PIPE) ||
       (pipe > NFA_HCI_LAST_DYNAMIC_PIPE)) {
-    NFA_TRACE_API1("NFA_HciClosePipe (): Invalid Pipe:0x%02x", pipe);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Invalid Pipe:0x%02x", pipe);
     return (NFA_STATUS_FAILED);
   }
 
@@ -825,19 +724,20 @@
   tNFA_HCI_API_DELETE_PIPE_EVT* p_msg;
 
   if ((NFA_HANDLE_GROUP_MASK & hci_handle) != NFA_HANDLE_GROUP_HCI) {
-    NFA_TRACE_API1("NFA_HciDeletePipe (): Invalid hci_handle:0x%04x",
-                   hci_handle);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Invalid hci_handle:0x%04x", hci_handle);
     return (NFA_STATUS_FAILED);
   }
 
   if ((pipe < NFA_HCI_FIRST_DYNAMIC_PIPE) ||
       (pipe > NFA_HCI_LAST_DYNAMIC_PIPE)) {
-    NFA_TRACE_API1("NFA_HciDeletePipe (): Invalid Pipe:0x%02x", pipe);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Invalid Pipe:0x%02x", pipe);
     return (NFA_STATUS_FAILED);
   }
 
-  NFA_TRACE_API2("NFA_HciDeletePipe (): hci_handle:0x%04x, pipe:0x%02X",
-                 hci_handle, pipe);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("hci_handle:0x%04x, pipe:0x%02X", hci_handle, pipe);
 
   /* Request HCI to delete a pipe created by the application identified by hci
    * handle */
@@ -874,8 +774,8 @@
   uint8_t xx;
 
   if ((NFA_HANDLE_GROUP_MASK & hci_handle) != NFA_HANDLE_GROUP_HCI) {
-    NFA_TRACE_API1("NFA_HciAddStaticPipe (): Invalid hci_handle:0x%04x",
-                   hci_handle);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Invalid hci_handle:0x%04x", hci_handle);
     return (NFA_STATUS_FAILED);
   }
 
@@ -883,22 +783,25 @@
     if (nfa_hci_cb.inactive_host[xx] == host) break;
 
   if (xx != NFA_HCI_MAX_HOST_IN_NETWORK) {
-    NFA_TRACE_API1("NFA_HciAddStaticPipe (): Host not active:0x%02x", host);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Host not active:0x%02x", host);
     return (NFA_STATUS_FAILED);
   }
 
   if (gate <= NFA_HCI_LAST_HOST_SPECIFIC_GATE) {
-    NFA_TRACE_API1("NFA_HciAddStaticPipe (): Invalid Gate:0x%02x", gate);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Invalid Gate:0x%02x", gate);
     return (NFA_STATUS_FAILED);
   }
 
   if (pipe <= NFA_HCI_LAST_DYNAMIC_PIPE) {
-    NFA_TRACE_API1("NFA_HciAddStaticPipe (): Invalid Pipe:0x%02x", pipe);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Invalid Pipe:0x%02x", pipe);
     return (NFA_STATUS_FAILED);
   }
 
-  NFA_TRACE_API2("NFA_HciAddStaticPipe (): hci_handle:0x%04x, pipe:0x%02X",
-                 hci_handle, pipe);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("hci_handle:0x%04x, pipe:0x%02X", hci_handle, pipe);
 
   /* Request HCI to delete a pipe created by the application identified by hci
    * handle */
@@ -934,29 +837,34 @@
 
   switch (action) {
     case NFA_HCI_DEBUG_DISPLAY_CB:
-      NFA_TRACE_API0("NFA_HciDebug  Host List:");
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("NFA_HciDebug  Host List:");
       for (xx = 0; xx < NFA_HCI_MAX_APP_CB; xx++) {
         if (nfa_hci_cb.cfg.reg_app_names[xx][0] != 0) {
-          NFA_TRACE_API2("              Host Inx:  %u   Name: %s", xx,
-                         &nfa_hci_cb.cfg.reg_app_names[xx][0]);
+          DLOG_IF(INFO, nfc_debug_enabled)
+              << StringPrintf("              Host Inx:  %u   Name: %s", xx,
+                              &nfa_hci_cb.cfg.reg_app_names[xx][0]);
         }
       }
 
-      NFA_TRACE_API0("NFA_HciDebug  Gate List:");
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("NFA_HciDebug  Gate List:");
       for (xx = 0; xx < NFA_HCI_MAX_GATE_CB; xx++, pg++) {
         if (pg->gate_id != 0) {
-          NFA_TRACE_API4(
+          DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
               "              Gate Inx: %x  ID: 0x%02x  Owner: 0x%04x  "
               "PipeInxMask: 0x%08x",
               xx, pg->gate_id, pg->gate_owner, pg->pipe_inx_mask);
         }
       }
 
-      NFA_TRACE_API0("NFA_HciDebug  Pipe List:");
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("NFA_HciDebug  Pipe List:");
       for (xx = 0; xx < NFA_HCI_MAX_PIPE_CB; xx++, pp++) {
         if (pp->pipe_id != 0) {
-          NFA_TRACE_API6(
-              "              Pipe Inx: %x  ID: 0x%02x  State: %u  LocalGate: "
+          DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+              "              Pipe Inx: %x  ID: 0x%02x  State: %u  "
+              "LocalGate: "
               "0x%02x  Dest Gate: 0x%02x  Host: 0x%02x",
               xx, pp->pipe_id, pp->pipe_state, pp->local_gate, pp->dest_gate,
               pp->dest_host);
@@ -980,13 +888,15 @@
       break;
 
     case NFA_HCI_DEBUG_ENABLE_LOOPBACK:
-      NFA_TRACE_API0("NFA_HciDebug  HCI_LOOPBACK_DEBUG = TRUE");
-      HCI_LOOPBACK_DEBUG = true;
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("NFA_HciDebug  HCI_LOOPBACK_DEBUG = TRUE");
+      HCI_LOOPBACK_DEBUG = NFA_HCI_DEBUG_ON;
       break;
 
     case NFA_HCI_DEBUG_DISABLE_LOOPBACK:
-      NFA_TRACE_API0("NFA_HciDebug  HCI_LOOPBACK_DEBUG = FALSE");
-      HCI_LOOPBACK_DEBUG = false;
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("NFA_HciDebug  HCI_LOOPBACK_DEBUG = FALSE");
+      HCI_LOOPBACK_DEBUG = NFA_HCI_DEBUG_OFF;
       break;
   }
 }
diff --git a/src/nfa/hci/nfa_hci_ci.c b/src/nfa/hci/nfa_hci_ci.cc
similarity index 95%
rename from src/nfa/hci/nfa_hci_ci.c
rename to src/nfa/hci/nfa_hci_ci.cc
index a68b6f0..2f29745 100644
--- a/src/nfa/hci/nfa_hci_ci.c
+++ b/src/nfa/hci/nfa_hci_ci.cc
@@ -25,7 +25,6 @@
 #include "nfa_hci_api.h"
 #include "nfa_hci_int.h"
 #include "nfa_nv_co.h"
-#include "nfa_sys.h"
 
 /*******************************************************************************
 **
@@ -70,7 +69,8 @@
   p_msg = (tNFA_HCI_EVENT_DATA*)GKI_getbuf(sizeof(tNFA_HCI_EVENT_DATA));
   if (p_msg != NULL) {
     p_msg->nv_write.hdr.event = NFA_HCI_RSP_NV_WRITE_EVT;
-    p_msg->nv_write.status = 0;
+    p_msg->nv_write.status =
+        (status == NFA_NV_CO_OK) ? NFA_STATUS_OK : NFA_STATUS_FAILED;
     nfa_sys_sendmsg(p_msg);
   }
 }
diff --git a/src/nfa/hci/nfa_hci_main.c b/src/nfa/hci/nfa_hci_main.cc
similarity index 82%
rename from src/nfa/hci/nfa_hci_main.c
rename to src/nfa/hci/nfa_hci_main.cc
index 28067e8..91aa89d 100644
--- a/src/nfa/hci/nfa_hci_main.c
+++ b/src/nfa/hci/nfa_hci_main.cc
@@ -22,19 +22,23 @@
  *
  ******************************************************************************/
 #include <string.h>
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "nfa_dm_int.h"
 #include "nfa_ee_api.h"
 #include "nfa_ee_int.h"
 #include "nfa_hci_api.h"
 #include "nfa_hci_defs.h"
 #include "nfa_hci_int.h"
-#include "nfa_mem_co.h"
 #include "nfa_nv_co.h"
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
-#include "nfc_api.h"
 #include "trace_api.h"
 
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
+
 /*****************************************************************************
 **  Global Variables
 *****************************************************************************/
@@ -58,7 +62,7 @@
 
 static void nfa_hci_sys_enable(void);
 static void nfa_hci_sys_disable(void);
-static void nfa_hci_rsp_timeout(tNFA_HCI_EVENT_DATA* p_evt_data);
+static void nfa_hci_rsp_timeout(void);
 static void nfa_hci_conn_cback(uint8_t conn_id, tNFC_CONN_EVT event,
                                tNFC_CONN* p_data);
 static void nfa_hci_set_receive_buf(uint8_t pipe);
@@ -82,10 +86,7 @@
 **
 *******************************************************************************/
 void nfa_hci_ee_info_cback(tNFA_EE_DISC_STS status) {
-  uint8_t num_nfcee = 3;
-  tNFA_EE_INFO ee_info[3];
-
-  NFA_TRACE_DEBUG1("nfa_hci_ee_info_cback (): %d", status);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%d", status);
 
   switch (status) {
     case NFA_EE_DISC_STS_ON:
@@ -104,9 +105,6 @@
     case NFA_EE_DISC_STS_OFF:
       if (nfa_hci_cb.ee_disable_disc) break;
       nfa_hci_cb.ee_disable_disc = true;
-      /* Discovery operation is complete, retrieve discovery result */
-      NFA_EeGetInfo(&num_nfcee, ee_info);
-      nfa_hci_cb.num_nfcee = num_nfcee;
 
       if ((nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_NETWK_ENABLE) ||
           (nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE_NETWK_ENABLE)) {
@@ -144,7 +142,8 @@
             (nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE_NETWK_ENABLE)) {
           /* Received DISC REQ Ntf while waiting for other Host in the network
            * to bootup after DH host bootup is complete */
-          if (nfa_hci_cb.num_ee_dis_req_ntf == (nfa_hci_cb.num_nfcee - 1)) {
+          if ((nfa_hci_cb.num_ee_dis_req_ntf == (nfa_hci_cb.num_nfcee - 1)) &&
+              NFC_GetNCIVersion() != NCI_VERSION_2_0) {
             /* Received expected number of EE DISC REQ Ntf(s) */
             nfa_sys_stop_timer(&nfa_hci_cb.timer);
             nfa_hci_cb.w4_hci_netwk_init = false;
@@ -161,6 +160,22 @@
         }
       }
       break;
+    case NFA_EE_RECOVERY_REDISCOVERED:
+    case NFA_EE_MODE_SET_COMPLETE:
+      /*received mode set Ntf */
+      if ((nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_NETWK_ENABLE) ||
+          (nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE_NETWK_ENABLE) ||
+          (nfa_hci_cb.hci_state == NFA_HCI_STATE_EE_RECOVERY)) {
+        /* Discovery operation is complete, retrieve discovery result */
+        NFA_EeGetInfo(&nfa_hci_cb.num_nfcee, nfa_hci_cb.ee_info);
+        nfa_hci_enable_one_nfcee();
+      }
+      break;
+    case NFA_EE_RECOVERY_INIT:
+      /*NFCEE recovery in progress*/
+      nfa_ee_cb.isDiscoveryStopped = nfa_dm_act_stop_rf_discovery(NULL);
+      nfa_hci_cb.hci_state = NFA_HCI_STATE_EE_RECOVERY;
+      break;
   }
 }
 
@@ -174,13 +189,13 @@
 **
 *******************************************************************************/
 void nfa_hci_init(void) {
-  NFA_TRACE_DEBUG0("nfa_hci_init ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* initialize control block */
   memset(&nfa_hci_cb, 0, sizeof(tNFA_HCI_CB));
 
   nfa_hci_cb.hci_state = NFA_HCI_STATE_STARTUP;
-
+  nfa_hci_cb.num_nfcee = NFA_HCI_MAX_HOST_IN_NETWORK;
   /* register message handler on NFA SYS */
   nfa_sys_register(NFA_ID_HCI, &nfa_hci_sys_reg);
 }
@@ -223,8 +238,9 @@
                       &nfa_hci_cb.cfg.reg_app_names[yy][0],
                       strlen(nfa_hci_cb.cfg.reg_app_names[xx])))) {
           /* Two app cannot have the same name , NVRAM is corrupted */
-          NFA_TRACE_EVENT2("nfa_hci_is_valid_cfg (%s)  Reusing: %u",
-                           &nfa_hci_cb.cfg.reg_app_names[xx][0], xx);
+          DLOG_IF(INFO, nfc_debug_enabled)
+              << StringPrintf("nfa_hci_is_valid_cfg (%s)  Reusing: %u",
+                              &nfa_hci_cb.cfg.reg_app_names[xx][0], xx);
           return false;
         }
       }
@@ -250,25 +266,33 @@
         if ((nfa_hci_cb.cfg.dyn_gates[yy].gate_id != 0) &&
             (nfa_hci_cb.cfg.dyn_gates[xx].gate_id ==
              nfa_hci_cb.cfg.dyn_gates[yy].gate_id)) {
-          NFA_TRACE_EVENT1("nfa_hci_is_valid_cfg  Reusing: %u",
-                           nfa_hci_cb.cfg.dyn_gates[xx].gate_id);
+          DLOG_IF(INFO, nfc_debug_enabled)
+              << StringPrintf("nfa_hci_is_valid_cfg  Reusing: %u",
+                              nfa_hci_cb.cfg.dyn_gates[xx].gate_id);
           return false;
         }
       }
       if ((nfa_hci_cb.cfg.dyn_gates[xx].gate_owner & (~NFA_HANDLE_GROUP_HCI)) >=
           NFA_HCI_MAX_APP_CB) {
-        NFA_TRACE_EVENT1("nfa_hci_is_valid_cfg  Invalid Gate owner: %u",
-                         nfa_hci_cb.cfg.dyn_gates[xx].gate_owner);
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("nfa_hci_is_valid_cfg  Invalid Gate owner: %u",
+                            nfa_hci_cb.cfg.dyn_gates[xx].gate_owner);
         return false;
       }
-      if (nfa_hci_cb.cfg.dyn_gates[xx].gate_id != NFA_HCI_CONNECTIVITY_GATE) {
+      if (!((nfa_hci_cb.cfg.dyn_gates[xx].gate_id ==
+             NFA_HCI_CONNECTIVITY_GATE) ||
+            ((nfa_hci_cb.cfg.dyn_gates[xx].gate_id >=
+              NFA_HCI_PROP_GATE_FIRST) ||
+             (nfa_hci_cb.cfg.dyn_gates[xx].gate_id <=
+              NFA_HCI_PROP_GATE_LAST)))) {
         /* The gate owner should be one of the registered application */
         for (zz = 0; zz < app_count; zz++) {
           if (nfa_hci_cb.cfg.dyn_gates[xx].gate_owner == reg_app[zz]) break;
         }
         if (zz == app_count) {
-          NFA_TRACE_EVENT1("nfa_hci_is_valid_cfg  Invalid Gate owner: %u",
-                           nfa_hci_cb.cfg.dyn_gates[xx].gate_owner);
+          DLOG_IF(INFO, nfc_debug_enabled)
+              << StringPrintf("nfa_hci_is_valid_cfg  Invalid Gate owner: %u",
+                              nfa_hci_cb.cfg.dyn_gates[xx].gate_owner);
           return false;
         }
       }
@@ -333,8 +357,9 @@
         if ((nfa_hci_cb.cfg.dyn_pipes[yy].pipe_id != 0) &&
             (nfa_hci_cb.cfg.dyn_pipes[xx].pipe_id ==
              nfa_hci_cb.cfg.dyn_pipes[yy].pipe_id)) {
-          NFA_TRACE_EVENT1("nfa_hci_is_valid_cfg  Reusing: %u",
-                           nfa_hci_cb.cfg.dyn_pipes[xx].pipe_id);
+          DLOG_IF(INFO, nfc_debug_enabled)
+              << StringPrintf("nfa_hci_is_valid_cfg  Reusing: %u",
+                              nfa_hci_cb.cfg.dyn_pipes[xx].pipe_id);
           return false;
         }
       }
@@ -343,8 +368,9 @@
         if (nfa_hci_cb.cfg.dyn_pipes[xx].local_gate == valid_gate[zz]) break;
       }
       if (zz == gate_count) {
-        NFA_TRACE_EVENT1("nfa_hci_is_valid_cfg  Invalid Gate: %u",
-                         nfa_hci_cb.cfg.dyn_pipes[xx].local_gate);
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("nfa_hci_is_valid_cfg  Invalid Gate: %u",
+                            nfa_hci_cb.cfg.dyn_pipes[xx].local_gate);
         return false;
       }
     }
@@ -405,8 +431,8 @@
 **
 *******************************************************************************/
 void nfa_hci_proc_nfcc_power_mode(uint8_t nfcc_power_mode) {
-  NFA_TRACE_DEBUG1("nfa_hci_proc_nfcc_power_mode () nfcc_power_mode=%d",
-                   nfcc_power_mode);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfcc_power_mode=%d", nfcc_power_mode);
 
   /* if NFCC power mode is change to full power */
   if (nfcc_power_mode == NFA_DM_PWR_MODE_FULL) {
@@ -423,7 +449,7 @@
       nfa_hci_cb.num_ee_dis_req_ntf = 0;
       nfa_hci_cb.num_hot_plug_evts = 0;
     } else {
-      NFA_TRACE_ERROR0("nfa_hci_proc_nfcc_power_mode (): Cannot restore now");
+      LOG(ERROR) << StringPrintf("Cannot restore now");
       nfa_sys_cback_notify_nfcc_power_mode_proc_complete(NFA_ID_HCI);
     }
   } else {
@@ -485,7 +511,7 @@
 void nfa_hci_startup_complete(tNFA_STATUS status) {
   tNFA_HCI_EVT_DATA evt_data;
 
-  NFA_TRACE_EVENT1("nfa_hci_startup_complete (): Status: %u", status);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("Status: %u", status);
 
   nfa_sys_stop_timer(&nfa_hci_cb.timer);
 
@@ -509,6 +535,43 @@
 
 /*******************************************************************************
 **
+** Function         nfa_hci_enable_one_nfcee
+**
+** Description      Enable NFCEE Hosts which are discovered.
+**
+** Returns          None
+**
+*******************************************************************************/
+void nfa_hci_enable_one_nfcee(void) {
+  uint8_t xx;
+  uint8_t nfceeid = 0;
+
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%d", nfa_hci_cb.num_nfcee);
+
+  for (xx = 0; xx < nfa_hci_cb.num_nfcee; xx++) {
+    nfceeid = nfa_hci_cb.ee_info[xx].ee_handle & ~NFA_HANDLE_GROUP_EE;
+    if (nfa_hci_cb.ee_info[xx].ee_status == NFA_EE_STATUS_INACTIVE) {
+      NFC_NfceeModeSet(nfceeid, NFC_MODE_ACTIVATE);
+      return;
+    }
+  }
+
+  if (xx == nfa_hci_cb.num_nfcee) {
+    if ((nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_NETWK_ENABLE) ||
+        (nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE_NETWK_ENABLE)) {
+      nfa_hciu_send_get_param_cmd(NFA_HCI_ADMIN_PIPE, NFA_HCI_HOST_LIST_INDEX);
+    } else if (nfa_hci_cb.hci_state == NFA_HCI_STATE_EE_RECOVERY) {
+      nfa_hci_cb.hci_state = NFA_HCI_STATE_IDLE;
+      if (nfa_ee_cb.isDiscoveryStopped == true) {
+        nfa_dm_act_start_rf_discovery(NULL);
+        nfa_ee_cb.isDiscoveryStopped = false;
+      }
+    }
+  }
+}
+
+/*******************************************************************************
+**
 ** Function         nfa_hci_startup
 **
 ** Description      Perform HCI startup
@@ -518,13 +581,11 @@
 *******************************************************************************/
 void nfa_hci_startup(void) {
   tNFA_STATUS status = NFA_STATUS_FAILED;
-  tNFA_EE_INFO ee_info[2];
-  uint8_t num_nfcee = 2;
   uint8_t target_handle;
   uint8_t count = 0;
   bool found = false;
 
-  if (HCI_LOOPBACK_DEBUG) {
+  if (HCI_LOOPBACK_DEBUG == NFA_HCI_DEBUG_ON) {
     /* First step in initialization is to open the admin pipe */
     nfa_hciu_send_open_pipe_cmd(NFA_HCI_ADMIN_PIPE);
     return;
@@ -533,38 +594,42 @@
   /* We can only start up if NV Ram is read and EE discovery is complete */
   if (nfa_hci_cb.nv_read_cmplt && nfa_hci_cb.ee_disc_cmplt &&
       (nfa_hci_cb.conn_id == 0)) {
-    NFA_EeGetInfo(&num_nfcee, ee_info);
+    if (NFC_GetNCIVersion() == NCI_VERSION_2_0) {
+      NFC_SetStaticHciCback(nfa_hci_conn_cback);
+    } else {
+      NFA_EeGetInfo(&nfa_hci_cb.num_nfcee, nfa_hci_cb.ee_info);
 
-    while ((count < num_nfcee) && (!found)) {
-      target_handle = (uint8_t)ee_info[count].ee_handle;
+      while ((count < nfa_hci_cb.num_nfcee) && (!found)) {
+        target_handle = (uint8_t)nfa_hci_cb.ee_info[count].ee_handle;
 
-      if (ee_info[count].ee_interface[0] == NFA_EE_INTERFACE_HCI_ACCESS) {
-        found = true;
+        if (nfa_hci_cb.ee_info[count].ee_interface[0] ==
+            NFA_EE_INTERFACE_HCI_ACCESS) {
+          found = true;
 
-        if (ee_info[count].ee_status == NFA_EE_STATUS_INACTIVE) {
-          NFC_NfceeModeSet(target_handle, NFC_MODE_ACTIVATE);
+          if (nfa_hci_cb.ee_info[count].ee_status == NFA_EE_STATUS_INACTIVE) {
+            NFC_NfceeModeSet(target_handle, NFC_MODE_ACTIVATE);
+          }
+          if ((status = NFC_ConnCreate(NCI_DEST_TYPE_NFCEE, target_handle,
+                                       NFA_EE_INTERFACE_HCI_ACCESS,
+                                       nfa_hci_conn_cback)) == NFA_STATUS_OK)
+            nfa_sys_start_timer(&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT,
+                                NFA_HCI_CON_CREATE_TIMEOUT_VAL);
+          else {
+            nfa_hci_cb.hci_state = NFA_HCI_STATE_DISABLED;
+            LOG(ERROR) << StringPrintf(
+                "nfa_hci_startup - Failed to Create Logical connection. HCI "
+                "Initialization/Restore failed");
+            nfa_hci_startup_complete(NFA_STATUS_FAILED);
+          }
         }
-        status =
-            NFC_ConnCreate(NCI_DEST_TYPE_NFCEE, target_handle,
-                           NFA_EE_INTERFACE_HCI_ACCESS, nfa_hci_conn_cback);
-        if (status == NFA_STATUS_OK)
-          nfa_sys_start_timer(&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT,
-                              NFA_HCI_CON_CREATE_TIMEOUT_VAL);
-        else {
-          nfa_hci_cb.hci_state = NFA_HCI_STATE_DISABLED;
-          NFA_TRACE_ERROR0(
-              "nfa_hci_startup - Failed to Create Logical connection. HCI "
-              "Initialization/Restore failed");
-          nfa_hci_startup_complete(NFA_STATUS_FAILED);
-        }
+        count++;
       }
-      count++;
-    }
-    if (!found) {
-      NFA_TRACE_ERROR0(
-          "nfa_hci_startup - HCI ACCESS Interface not discovered. HCI "
-          "Initialization/Restore failed");
-      nfa_hci_startup_complete(NFA_STATUS_FAILED);
+      if (!found) {
+        LOG(ERROR) << StringPrintf(
+            "nfa_hci_startup - HCI ACCESS Interface not discovered. HCI "
+            "Initialization/Restore failed");
+        nfa_hci_startup_complete(NFA_STATUS_FAILED);
+      }
     }
   }
 }
@@ -579,7 +644,7 @@
 **
 *******************************************************************************/
 static void nfa_hci_sys_enable(void) {
-  NFA_TRACE_DEBUG0("nfa_hci_sys_enable ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
   nfa_ee_reg_cback_enable_done(&nfa_hci_ee_info_cback);
 
   nfa_nv_co_read((uint8_t*)&nfa_hci_cb.cfg, sizeof(nfa_hci_cb.cfg),
@@ -605,8 +670,10 @@
   if (nfa_hci_cb.conn_id) {
     if (nfa_sys_is_graceful_disable()) {
       /* Tell all applications stack is down */
-      nfa_hciu_send_to_all_apps(NFA_HCI_EXIT_EVT, &evt_data);
-      NFC_ConnClose(nfa_hci_cb.conn_id);
+      if (NFC_GetNCIVersion() == NCI_VERSION_1_0) {
+        nfa_hciu_send_to_all_apps(NFA_HCI_EXIT_EVT, &evt_data);
+        NFC_ConnClose(nfa_hci_cb.conn_id);
+      }
       return;
     }
     nfa_hci_cb.conn_id = 0;
@@ -633,10 +700,9 @@
   uint8_t chaining_bit;
   uint8_t pipe;
   uint16_t pkt_len;
-#if (BT_TRACE_VERBOSE == TRUE)
   char buff[100];
-#endif
-
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "%s State: %u  Cmd: %u", __func__, nfa_hci_cb.hci_state, event);
   if (event == NFC_CONN_CREATE_CEVT) {
     nfa_hci_cb.conn_id = conn_id;
     nfa_hci_cb.buff_size = p_data->conn_create.buff_size;
@@ -676,9 +742,7 @@
   p = (uint8_t*)(p_pkt + 1) + p_pkt->offset;
   pkt_len = p_pkt->len;
 
-#if (BT_TRACE_PROTOCOL == TRUE)
-  DispHcp(p, pkt_len, true, (bool)!nfa_hci_cb.assembling);
-#endif
+  DispHcp(p, pkt_len, true);
 
   chaining_bit = ((*p) >> 0x07) & 0x01;
   pipe = (*p++) & 0x7F;
@@ -708,8 +772,8 @@
     if (nfa_hci_cb.assembly_failed) {
       /* If Reassembly failed because of insufficient buffer, just drop the new
        * segmented packets */
-      NFA_TRACE_ERROR1(
-          "nfa_hci_conn_cback (): Insufficient buffer to Reassemble HCP "
+      LOG(ERROR) << StringPrintf(
+          "Insufficient buffer to Reassemble HCP "
           "packet! Dropping :%u bytes",
           pkt_len);
     } else {
@@ -725,19 +789,12 @@
     }
   }
 
-#if (BT_TRACE_VERBOSE == TRUE)
-  NFA_TRACE_EVENT5(
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
       "nfa_hci_conn_cback Recvd data pipe:%d  %s  chain:%d  assmbl:%d  len:%d",
-      (uint8_t)pipe, nfa_hciu_get_type_inst_names(pipe, nfa_hci_cb.type,
-                                                  nfa_hci_cb.inst, buff),
+      (uint8_t)pipe,
+      nfa_hciu_get_type_inst_names(pipe, nfa_hci_cb.type, nfa_hci_cb.inst,
+                                   buff),
       (uint8_t)chaining_bit, (uint8_t)nfa_hci_cb.assembling, p_pkt->len);
-#else
-  NFA_TRACE_EVENT6(
-      "nfa_hci_conn_cback Recvd data pipe:%d  Type: %u  Inst: %u  chain:%d "
-      "reassm:%d len:%d",
-      pipe, nfa_hci_cb.type, nfa_hci_cb.inst, chaining_bit,
-      nfa_hci_cb.assembling, p_pkt->len);
-#endif
 
   /* If still reassembling fragments, just return */
   if (nfa_hci_cb.assembling) {
@@ -763,7 +820,7 @@
       } else if (nfa_hci_cb.type == NFA_HCI_RESPONSE_TYPE) {
         nfa_hci_handle_admin_gate_rsp(p, (uint8_t)pkt_len);
       } else if (nfa_hci_cb.type == NFA_HCI_EVENT_TYPE) {
-        nfa_hci_handle_admin_gate_evt(p);
+        nfa_hci_handle_admin_gate_evt();
       }
       break;
 
@@ -839,20 +896,21 @@
 ** Returns          None
 **
 *******************************************************************************/
-void nfa_hci_rsp_timeout(tNFA_HCI_EVENT_DATA* p_evt_data) {
+void nfa_hci_rsp_timeout() {
   tNFA_HCI_EVT evt = 0;
   tNFA_HCI_EVT_DATA evt_data;
   uint8_t delete_pipe;
 
-  NFA_TRACE_EVENT2("nfa_hci_rsp_timeout () State: %u  Cmd: %u",
-                   nfa_hci_cb.hci_state, nfa_hci_cb.cmd_sent);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "State: %u  Cmd: %u", nfa_hci_cb.hci_state, nfa_hci_cb.cmd_sent);
 
   evt_data.status = NFA_STATUS_FAILED;
 
   switch (nfa_hci_cb.hci_state) {
     case NFA_HCI_STATE_STARTUP:
     case NFA_HCI_STATE_RESTORE:
-      NFA_TRACE_ERROR0("nfa_hci_rsp_timeout - Initialization failed!");
+      LOG(ERROR) << StringPrintf(
+          "nfa_hci_rsp_timeout - Initialization failed!");
       nfa_hci_startup_complete(NFA_STATUS_TIMEOUT);
       break;
 
@@ -996,8 +1054,8 @@
       break;
     case NFA_HCI_STATE_DISABLED:
     default:
-      NFA_TRACE_DEBUG0(
-          "nfa_hci_rsp_timeout () Timeout in DISABLED/ Invalid state");
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("Timeout in DISABLED/ Invalid state");
       break;
   }
   if (evt != 0) nfa_hciu_send_to_app(evt, &evt_data, nfa_hci_cb.app_in_use);
@@ -1042,8 +1100,8 @@
     nfa_hci_cb.msg_len = nfa_hci_cb.max_msg_len;
     /* Set Reassembly failed */
     nfa_hci_cb.assembly_failed = true;
-    NFA_TRACE_ERROR1(
-        "nfa_hci_assemble_msg (): Insufficient buffer to Reassemble HCP "
+    LOG(ERROR) << StringPrintf(
+        "Insufficient buffer to Reassemble HCP "
         "packet! Dropping :%u bytes",
         ((nfa_hci_cb.msg_len + data_len) - nfa_hci_cb.max_msg_len));
   } else {
@@ -1062,23 +1120,18 @@
 **
 *******************************************************************************/
 static bool nfa_hci_evt_hdlr(NFC_HDR* p_msg) {
-  tNFA_HCI_EVENT_DATA* p_evt_data = (tNFA_HCI_EVENT_DATA*)p_msg;
-
-#if (BT_TRACE_VERBOSE == TRUE)
-  NFA_TRACE_EVENT4(
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
       "nfa_hci_evt_hdlr state: %s (%d) event: %s (0x%04x)",
-      nfa_hciu_get_state_name(nfa_hci_cb.hci_state), nfa_hci_cb.hci_state,
-      nfa_hciu_get_event_name(p_evt_data->hdr.event), p_evt_data->hdr.event);
-#else
-  NFA_TRACE_EVENT2("nfa_hci_evt_hdlr state: %d event: 0x%04x",
-                   nfa_hci_cb.hci_state, p_evt_data->hdr.event);
-#endif
+      nfa_hciu_get_state_name(nfa_hci_cb.hci_state).c_str(),
+      nfa_hci_cb.hci_state, nfa_hciu_get_event_name(p_msg->event).c_str(),
+      p_msg->event);
 
   /* If this is an API request, queue it up */
   if ((p_msg->event >= NFA_HCI_FIRST_API_EVENT) &&
       (p_msg->event <= NFA_HCI_LAST_API_EVENT)) {
     GKI_enqueue(&nfa_hci_cb.hci_api_q, p_msg);
   } else {
+    tNFA_HCI_EVENT_DATA* p_evt_data = (tNFA_HCI_EVENT_DATA*)p_msg;
     switch (p_msg->event) {
       case NFA_HCI_RSP_NV_READ_EVT:
         nfa_hci_handle_nv_read(p_evt_data->nv_read.block,
@@ -1090,15 +1143,15 @@
         break;
 
       case NFA_HCI_RSP_TIMEOUT_EVT:
-        nfa_hci_rsp_timeout((tNFA_HCI_EVENT_DATA*)p_msg);
+        nfa_hci_rsp_timeout();
         break;
 
       case NFA_HCI_CHECK_QUEUE_EVT:
-        if (HCI_LOOPBACK_DEBUG) {
+        if (HCI_LOOPBACK_DEBUG == NFA_HCI_DEBUG_ON) {
           if (p_msg->len != 0) {
-            tNFC_DATA_CEVT xx;
-            xx.p_data = p_msg;
-            nfa_hci_conn_cback(0, NFC_DATA_CEVT, (tNFC_CONN*)&xx);
+            tNFC_CONN nfc_conn;
+            nfc_conn.data.p_data = p_msg;
+            nfa_hci_conn_cback(0, NFC_DATA_CEVT, &nfc_conn);
             return false;
           }
         }
diff --git a/src/nfa/hci/nfa_hci_utils.c b/src/nfa/hci/nfa_hci_utils.cc
similarity index 86%
rename from src/nfa/hci/nfa_hci_utils.c
rename to src/nfa/hci/nfa_hci_utils.cc
index 895f09e..d6d3720 100644
--- a/src/nfa/hci/nfa_hci_utils.c
+++ b/src/nfa/hci/nfa_hci_utils.cc
@@ -21,21 +21,24 @@
  *  This file contains the utility functions for the NFA HCI.
  *
  ******************************************************************************/
-#include <string.h>
+#include <string>
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "nfa_dm_int.h"
 #include "nfa_hci_api.h"
 #include "nfa_hci_defs.h"
 #include "nfa_hci_int.h"
-#include "nfa_mem_co.h"
-#include "nfa_nv_co.h"
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
-#include "nfc_api.h"
 #include "trace_api.h"
 
-static void handle_debug_loopback(NFC_HDR* p_buf, uint8_t pipe, uint8_t type,
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
+
+static void handle_debug_loopback(NFC_HDR* p_buf, uint8_t type,
                                   uint8_t instruction);
-bool HCI_LOOPBACK_DEBUG = false;
+uint8_t HCI_LOOPBACK_DEBUG = NFA_HCI_DEBUG_OFF;
 
 /*******************************************************************************
 **
@@ -250,7 +253,7 @@
       if (nfa_hciu_find_gate_by_gid(gate_id) == NULL) break;
     }
     if (gate_id > NFA_HCI_LAST_PROP_GATE) {
-      NFA_TRACE_ERROR2(
+      LOG(ERROR) << StringPrintf(
           "nfa_hci_alloc_gate - no free Gate ID: %u  App Handle: 0x%04x",
           gate_id, app_handle);
       return (NULL);
@@ -266,8 +269,8 @@
       pg->gate_owner = app_handle;
       pg->pipe_inx_mask = 0;
 
-      NFA_TRACE_DEBUG2("nfa_hciu_alloc_gate id:%d  app_handle: 0x%04x", gate_id,
-                       app_handle);
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+          "nfa_hciu_alloc_gate id:%d  app_handle: 0x%04x", gate_id, app_handle);
 
       nfa_hci_cb.nv_write_needed = true;
       return (pg);
@@ -275,7 +278,7 @@
   }
 
   /* If here, no free gate control block */
-  NFA_TRACE_ERROR2(
+  LOG(ERROR) << StringPrintf(
       "nfa_hci_alloc_gate - no CB  Gate ID: %u  App Handle: 0x%04x", gate_id,
       app_handle);
   return (NULL);
@@ -301,16 +304,11 @@
   tNFA_STATUS status = NFA_STATUS_OK;
   uint16_t max_seg_hcp_pkt_size = nfa_hci_cb.buff_size - NCI_DATA_HDR_SIZE;
 
-#if (BT_TRACE_VERBOSE == TRUE)
   char buff[100];
 
-  NFA_TRACE_DEBUG3(
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
       "nfa_hciu_send_msg pipe_id:%d   %s  len:%d", pipe_id,
       nfa_hciu_get_type_inst_names(pipe_id, type, instruction, buff), msg_len);
-#else
-  NFA_TRACE_DEBUG4("nfa_hciu_send_msg pipe_id:%d   Type: %u  Inst: %u  len: %d",
-                   pipe_id, type, instruction, msg_len);
-#endif
 
   if (instruction == NFA_HCI_ANY_GET_PARAMETER)
     nfa_hci_cb.param_in_use = *p_msg;
@@ -352,17 +350,14 @@
         if (msg_len > 0) p_msg += data_len;
       }
 
-#if (BT_TRACE_PROTOCOL == TRUE)
-      DispHcp(((uint8_t*)(p_buf + 1) + p_buf->offset), p_buf->len, false,
-              (bool)((p_buf->len - data_len) == 2));
-#endif
+      DispHcp(((uint8_t*)(p_buf + 1) + p_buf->offset), p_buf->len, false);
 
-      if (HCI_LOOPBACK_DEBUG)
-        handle_debug_loopback(p_buf, pipe_id, type, instruction);
+      if (HCI_LOOPBACK_DEBUG == NFA_HCI_DEBUG_ON)
+        handle_debug_loopback(p_buf, type, instruction);
       else
         status = NFC_SendData(nfa_hci_cb.conn_id, p_buf);
     } else {
-      NFA_TRACE_ERROR0("nfa_hciu_send_data_packet no buffers");
+      LOG(ERROR) << StringPrintf("nfa_hciu_send_data_packet no buffers");
       status = NFA_STATUS_NO_BUFFERS;
       break;
     }
@@ -404,7 +399,7 @@
     }
   }
 
-  NFA_TRACE_DEBUG1("nfa_hciu_get_allocated_gate_list () returns: %u", count);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("returns: %u", count);
 
   return (count);
 }
@@ -434,7 +429,8 @@
   for (xx = 0, pp = nfa_hci_cb.cfg.dyn_pipes; xx < NFA_HCI_MAX_PIPE_CB;
        xx++, pp++) {
     if (pp->pipe_id == 0) {
-      NFA_TRACE_DEBUG2("nfa_hciu_alloc_pipe:%d, index:%d", pipe_id, xx);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("nfa_hciu_alloc_pipe:%d, index:%d", pipe_id, xx);
       pp->pipe_id = pipe_id;
 
       nfa_hci_cb.nv_write_needed = true;
@@ -442,7 +438,8 @@
     }
   }
 
-  NFA_TRACE_DEBUG1("nfa_hciu_alloc_pipe:%d, NO free entries !!", pipe_id);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfa_hciu_alloc_pipe:%d, NO free entries !!", pipe_id);
   return (NULL);
 }
 
@@ -459,9 +456,9 @@
   tNFA_HCI_DYN_GATE* p_gate = nfa_hciu_find_gate_by_gid(gate_id);
 
   if (p_gate != NULL) {
-    NFA_TRACE_DEBUG3(
-        "nfa_hciu_release_gate () ID: %d  owner: 0x%04x  pipe_inx_mask: 0x%04x",
-        gate_id, p_gate->gate_owner, p_gate->pipe_inx_mask);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("ID: %d  owner: 0x%04x  pipe_inx_mask: 0x%04x", gate_id,
+                        p_gate->gate_owner, p_gate->pipe_inx_mask);
 
     p_gate->gate_id = 0;
     p_gate->gate_owner = 0;
@@ -469,7 +466,7 @@
 
     nfa_hci_cb.nv_write_needed = true;
   } else {
-    NFA_TRACE_WARNING1("nfa_hciu_release_gate () ID: %d  NOT FOUND", gate_id);
+    LOG(WARNING) << StringPrintf("ID: %d  NOT FOUND", gate_id);
   }
 }
 
@@ -506,7 +503,7 @@
       pipe_index = (uint8_t)(p_pipe - nfa_hci_cb.cfg.dyn_pipes);
       p_gate->pipe_inx_mask |= (uint32_t)(1 << pipe_index);
 
-      NFA_TRACE_DEBUG4(
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
           "nfa_hciu_add_pipe_to_gate  Gate ID: 0x%02x  Pipe ID: 0x%02x  "
           "pipe_index: %u  App Handle: 0x%08x",
           local_gate, pipe_id, pipe_index, p_gate->gate_owner);
@@ -514,7 +511,8 @@
     }
   }
 
-  NFA_TRACE_DEBUG1("nfa_hciu_add_pipe_to_gate: 0x%02x  NOT FOUND", local_gate);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "nfa_hciu_add_pipe_to_gate: 0x%02x  NOT FOUND", local_gate);
 
   return (NFA_HCI_ADM_E_NO_PIPES_AVAILABLE);
 }
@@ -536,7 +534,7 @@
   tNFA_HCI_DYN_PIPE* p_pipe;
   uint8_t pipe_index;
 
-  NFA_TRACE_EVENT4(
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
       "nfa_hciu_add_pipe_to_static_gate (%u)  Pipe: 0x%02x  Dest Host: 0x%02x  "
       "Dest Gate: 0x%02x)",
       local_gate, pipe_id, dest_host, dest_gate);
@@ -576,8 +574,8 @@
   tNFA_HCI_DYN_PIPE* pp;
   int xx;
 
-  NFA_TRACE_DEBUG1("nfa_hciu_find_pipe_by_owner () app_handle:0x%x",
-                   app_handle);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("app_handle:0x%x", app_handle);
 
   /* Loop through all pipes looking for the owner */
   for (xx = 0, pp = nfa_hci_cb.cfg.dyn_pipes; xx < NFA_HCI_MAX_PIPE_CB;
@@ -611,8 +609,8 @@
   tNFA_HCI_DYN_PIPE* pp;
   int xx;
 
-  NFA_TRACE_DEBUG3(
-      "nfa_hciu_check_pipe_between_gates () Local gate: 0x%02X, Host[0x%02X] "
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "Local gate: 0x%02X, Host[0x%02X] "
       "gate: 0x%02X",
       local_gate, dest_host, dest_gate);
 
@@ -645,8 +643,8 @@
   tNFA_HCI_DYN_PIPE* pp;
   int xx;
 
-  NFA_TRACE_DEBUG1("nfa_hciu_find_pipe_by_owner () app_handle:0x%x",
-                   app_handle);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("app_handle:0x%x", app_handle);
 
   /* Loop through all pipes looking for the owner */
   for (xx = 0, pp = nfa_hci_cb.cfg.dyn_pipes; xx < NFA_HCI_MAX_PIPE_CB;
@@ -676,7 +674,7 @@
   tNFA_HCI_DYN_PIPE* pp;
   int xx;
 
-  NFA_TRACE_DEBUG1("nfa_hciu_find_pipe_on_gate () Gate:0x%x", gate_id);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("Gate:0x%x", gate_id);
 
   /* Loop through all pipes looking for the owner */
   for (xx = 0, pp = nfa_hci_cb.cfg.dyn_pipes; xx < NFA_HCI_MAX_PIPE_CB;
@@ -766,7 +764,7 @@
   tNFA_HCI_DYN_PIPE* pp;
   int xx;
 
-  NFA_TRACE_DEBUG1("nfa_hciu_find_active_pipe_on_gate () Gate:0x%x", gate_id);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("Gate:0x%x", gate_id);
 
   /* Loop through all pipes looking for the owner */
   for (xx = 0, pp = nfa_hci_cb.cfg.dyn_pipes; xx < NFA_HCI_MAX_PIPE_CB;
@@ -799,13 +797,15 @@
   tNFA_HCI_DYN_PIPE* p_pipe;
   uint8_t pipe_index;
 
-  NFA_TRACE_EVENT1("nfa_hciu_release_pipe: %u", pipe_id);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfa_hciu_release_pipe: %u", pipe_id);
 
   p_pipe = nfa_hciu_find_pipe_by_pid(pipe_id);
   if (p_pipe == NULL) return (NFA_HCI_ANY_E_NOK);
 
   if (pipe_id > NFA_HCI_LAST_DYNAMIC_PIPE) {
-    NFA_TRACE_DEBUG1("ignore pipe: %d", pipe_id);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("ignore pipe: %d", pipe_id);
     return (NFA_HCI_ANY_E_NOK);
   }
 
@@ -847,7 +847,8 @@
   int xx;
   tNFA_HCI_EVT_DATA evt_data;
 
-  NFA_TRACE_EVENT1("nfa_hciu_remove_all_pipes_from_host (0x%02x)", host);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfa_hciu_remove_all_pipes_from_host (0x%02x)", host);
 
   /* Remove all pipes from the specified host connected to all generic gates */
   for (xx = 0, pp = nfa_hci_cb.cfg.dyn_pipes; xx < NFA_HCI_MAX_PIPE_CB;
@@ -887,7 +888,7 @@
   data[1] = dest_host;
   data[2] = dest_gate;
 
-  NFA_TRACE_DEBUG3(
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
       "nfa_hciu_send_create_pipe_cmd source_gate:%d, dest_host:%d, "
       "dest_gate:%d",
       source_gate, dest_host, dest_gate);
@@ -910,10 +911,11 @@
 tNFA_STATUS nfa_hciu_send_delete_pipe_cmd(uint8_t pipe) {
   tNFA_STATUS status;
 
-  NFA_TRACE_DEBUG1("nfa_hciu_send_delete_pipe_cmd: %d", pipe);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfa_hciu_send_delete_pipe_cmd: %d", pipe);
 
   if (pipe > NFA_HCI_LAST_DYNAMIC_PIPE) {
-    NFA_TRACE_DEBUG1("ignore pipe: %d", pipe);
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("ignore pipe: %d", pipe);
     return (NFA_HCI_ANY_E_NOK);
   }
   nfa_hci_cb.pipe_in_use = pipe;
@@ -940,7 +942,8 @@
   tNFA_STATUS status;
   uint16_t id_ref_data = 0x0102;
 
-  NFA_TRACE_DEBUG0("nfa_hciu_send_clear_all_pipe_cmd");
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfa_hciu_send_clear_all_pipe_cmd");
 
   status =
       nfa_hciu_send_msg(NFA_HCI_ADMIN_PIPE, NFA_HCI_COMMAND_TYPE,
@@ -1057,7 +1060,7 @@
   }
 
   if (app_handle != NFA_HANDLE_INVALID) {
-    NFA_TRACE_WARNING2(
+    LOG(WARNING) << StringPrintf(
         "nfa_hciu_send_to_app no callback,  event: 0x%04x  app_handle: 0x%04x",
         event, app_handle);
   }
@@ -1103,7 +1106,6 @@
   }
 }
 
-#if (BT_TRACE_VERBOSE == TRUE)
 /*******************************************************************************
 **
 ** Function         nfa_hciu_get_response_name
@@ -1115,34 +1117,34 @@
 ** Returns          pointer to the name
 **
 *******************************************************************************/
-char* nfa_hciu_get_response_name(uint8_t rsp_code) {
+static std::string nfa_hciu_get_response_name(uint8_t rsp_code) {
   switch (rsp_code) {
     case NFA_HCI_ANY_OK:
-      return ("ANY_OK");
+      return "ANY_OK";
     case NFA_HCI_ANY_E_NOT_CONNECTED:
-      return ("ANY_E_NOT_CONNECTED");
+      return "ANY_E_NOT_CONNECTED";
     case NFA_HCI_ANY_E_CMD_PAR_UNKNOWN:
-      return ("ANY_E_CMD_PAR_UNKNOWN");
+      return "ANY_E_CMD_PAR_UNKNOWN";
     case NFA_HCI_ANY_E_NOK:
-      return ("ANY_E_NOK");
+      return "ANY_E_NOK";
     case NFA_HCI_ADM_E_NO_PIPES_AVAILABLE:
-      return ("ADM_E_NO_PIPES_AVAILABLE");
+      return "ADM_E_NO_PIPES_AVAILABLE";
     case NFA_HCI_ANY_E_REG_PAR_UNKNOWN:
-      return ("ANY_E_REG_PAR_UNKNOWN");
+      return "ANY_E_REG_PAR_UNKNOWN";
     case NFA_HCI_ANY_E_PIPE_NOT_OPENED:
-      return ("ANY_E_PIPE_NOT_OPENED");
+      return "ANY_E_PIPE_NOT_OPENED";
     case NFA_HCI_ANY_E_CMD_NOT_SUPPORTED:
-      return ("ANY_E_CMD_NOT_SUPPORTED");
+      return "ANY_E_CMD_NOT_SUPPORTED";
     case NFA_HCI_ANY_E_INHIBITED:
-      return ("ANY_E_INHIBITED");
+      return "ANY_E_INHIBITED";
     case NFA_HCI_ANY_E_TIMEOUT:
-      return ("ANY_E_TIMEOUT");
+      return "ANY_E_TIMEOUT";
     case NFA_HCI_ANY_E_REG_ACCESS_DENIED:
-      return ("ANY_E_REG_ACCESS_DENIED");
+      return "ANY_E_REG_ACCESS_DENIED";
     case NFA_HCI_ANY_E_PIPE_ACCESS_DENIED:
-      return ("ANY_E_PIPE_ACCESS_DENIED");
+      return "ANY_E_PIPE_ACCESS_DENIED";
     default:
-      return ("UNKNOWN");
+      return "UNKNOWN";
   }
 }
 
@@ -1155,16 +1157,16 @@
 ** Returns          pointer to the name
 **
 *******************************************************************************/
-char* nfa_hciu_type_2_str(uint8_t type) {
+static std::string nfa_hciu_type_2_str(uint8_t type) {
   switch (type) {
     case NFA_HCI_COMMAND_TYPE:
-      return ("COMMAND");
+      return "COMMAND";
     case NFA_HCI_EVENT_TYPE:
-      return ("EVENT");
+      return "EVENT";
     case NFA_HCI_RESPONSE_TYPE:
-      return ("RESPONSE");
+      return "RESPONSE";
     default:
-      return ("UNKNOWN");
+      return "UNKNOWN";
   }
 }
 
@@ -1177,30 +1179,30 @@
 ** Returns          pointer to the name
 **
 *******************************************************************************/
-char* nfa_hciu_instr_2_str(uint8_t instruction) {
+std::string nfa_hciu_instr_2_str(uint8_t instruction) {
   switch (instruction) {
     case NFA_HCI_ANY_SET_PARAMETER:
-      return ("ANY_SET_PARAMETER");
+      return "ANY_SET_PARAMETER";
     case NFA_HCI_ANY_GET_PARAMETER:
-      return ("ANY_GET_PARAMETER");
+      return "ANY_GET_PARAMETER";
     case NFA_HCI_ANY_OPEN_PIPE:
-      return ("ANY_OPEN_PIPE");
+      return "ANY_OPEN_PIPE";
     case NFA_HCI_ANY_CLOSE_PIPE:
-      return ("ANY_CLOSE_PIPE");
+      return "ANY_CLOSE_PIPE";
     case NFA_HCI_ADM_CREATE_PIPE:
-      return ("ADM_CREATE_PIPE");
+      return "ADM_CREATE_PIPE";
     case NFA_HCI_ADM_DELETE_PIPE:
-      return ("ADM_DELETE_PIPE");
+      return "ADM_DELETE_PIPE";
     case NFA_HCI_ADM_NOTIFY_PIPE_CREATED:
-      return ("ADM_NOTIFY_PIPE_CREATED");
+      return "ADM_NOTIFY_PIPE_CREATED";
     case NFA_HCI_ADM_NOTIFY_PIPE_DELETED:
-      return ("ADM_NOTIFY_PIPE_DELETED");
+      return "ADM_NOTIFY_PIPE_DELETED";
     case NFA_HCI_ADM_CLEAR_ALL_PIPE:
-      return ("ADM_CLEAR_ALL_PIPE");
+      return "ADM_CLEAR_ALL_PIPE";
     case NFA_HCI_ADM_NOTIFY_ALL_PIPE_CLEARED:
-      return ("ADM_NOTIFY_ALL_PIPE_CLEARED");
+      return "ADM_NOTIFY_ALL_PIPE_CLEARED";
     default:
-      return ("UNKNOWN");
+      return "UNKNOWN";
   }
 }
 
@@ -1213,49 +1215,48 @@
 ** Returns          pointer to the name
 **
 *******************************************************************************/
-char* nfa_hciu_get_event_name(uint16_t event) {
+std::string nfa_hciu_get_event_name(uint16_t event) {
   switch (event) {
     case NFA_HCI_API_REGISTER_APP_EVT:
-      return ("API_REGISTER");
+      return "API_REGISTER";
     case NFA_HCI_API_DEREGISTER_APP_EVT:
-      return ("API_DEREGISTER");
+      return "API_DEREGISTER";
     case NFA_HCI_API_GET_APP_GATE_PIPE_EVT:
-      return ("API_GET_GATE_LIST");
+      return "API_GET_GATE_LIST";
     case NFA_HCI_API_ALLOC_GATE_EVT:
-      return ("API_ALLOC_GATE");
+      return "API_ALLOC_GATE";
     case NFA_HCI_API_DEALLOC_GATE_EVT:
-      return ("API_DEALLOC_GATE");
+      return "API_DEALLOC_GATE";
     case NFA_HCI_API_GET_HOST_LIST_EVT:
-      return ("API_GET_HOST_LIST");
+      return "API_GET_HOST_LIST";
     case NFA_HCI_API_GET_REGISTRY_EVT:
-      return ("API_GET_REG_VALUE");
+      return "API_GET_REG_VALUE";
     case NFA_HCI_API_SET_REGISTRY_EVT:
-      return ("API_SET_REG_VALUE");
+      return "API_SET_REG_VALUE";
     case NFA_HCI_API_CREATE_PIPE_EVT:
-      return ("API_CREATE_PIPE");
+      return "API_CREATE_PIPE";
     case NFA_HCI_API_OPEN_PIPE_EVT:
-      return ("API_OPEN_PIPE");
+      return "API_OPEN_PIPE";
     case NFA_HCI_API_CLOSE_PIPE_EVT:
-      return ("API_CLOSE_PIPE");
+      return "API_CLOSE_PIPE";
     case NFA_HCI_API_DELETE_PIPE_EVT:
-      return ("API_DELETE_PIPE");
+      return "API_DELETE_PIPE";
     case NFA_HCI_API_SEND_CMD_EVT:
-      return ("API_SEND_COMMAND_EVT");
+      return "API_SEND_COMMAND_EVT";
     case NFA_HCI_API_SEND_RSP_EVT:
-      return ("API_SEND_RESPONSE_EVT");
+      return "API_SEND_RESPONSE_EVT";
     case NFA_HCI_API_SEND_EVENT_EVT:
-      return ("API_SEND_EVENT_EVT");
+      return "API_SEND_EVENT_EVT";
     case NFA_HCI_RSP_NV_READ_EVT:
-      return ("NV_READ_EVT");
+      return "NV_READ_EVT";
     case NFA_HCI_RSP_NV_WRITE_EVT:
-      return ("NV_WRITE_EVT");
+      return "NV_WRITE_EVT";
     case NFA_HCI_RSP_TIMEOUT_EVT:
-      return ("RESPONSE_TIMEOUT_EVT");
+      return "RESPONSE_TIMEOUT_EVT";
     case NFA_HCI_CHECK_QUEUE_EVT:
-      return ("CHECK_QUEUE");
-
+      return "CHECK_QUEUE";
     default:
-      return ("UNKNOWN");
+      return "UNKNOWN";
   }
 }
 
@@ -1268,29 +1269,28 @@
 ** Returns          pointer to the name
 **
 *******************************************************************************/
-char* nfa_hciu_get_state_name(uint8_t state) {
+std::string nfa_hciu_get_state_name(uint8_t state) {
   switch (state) {
     case NFA_HCI_STATE_DISABLED:
-      return ("DISABLED");
+      return "DISABLED";
     case NFA_HCI_STATE_STARTUP:
-      return ("STARTUP");
+      return "STARTUP";
     case NFA_HCI_STATE_WAIT_NETWK_ENABLE:
-      return ("WAIT_NETWK_ENABLE");
+      return "WAIT_NETWK_ENABLE";
     case NFA_HCI_STATE_IDLE:
-      return ("IDLE");
+      return "IDLE";
     case NFA_HCI_STATE_WAIT_RSP:
-      return ("WAIT_RSP");
+      return "WAIT_RSP";
     case NFA_HCI_STATE_REMOVE_GATE:
-      return ("REMOVE_GATE");
+      return "REMOVE_GATE";
     case NFA_HCI_STATE_APP_DEREGISTER:
-      return ("APP_DEREGISTER");
+      return "APP_DEREGISTER";
     case NFA_HCI_STATE_RESTORE:
-      return ("RESTORE");
+      return "RESTORE";
     case NFA_HCI_STATE_RESTORE_NETWK_ENABLE:
-      return ("WAIT_NETWK_ENABLE_AFTER_RESTORE");
-
+      return "WAIT_NETWK_ENABLE_AFTER_RESTORE";
     default:
-      return ("UNKNOWN");
+      return "UNKNOWN";
   }
 }
 
@@ -1307,26 +1307,27 @@
                                    char* p_buff) {
   int xx;
 
-  xx = sprintf(p_buff, "Type: %s [0x%02x] ", nfa_hciu_type_2_str(type), type);
+  xx = sprintf(p_buff, "Type: %s [0x%02x] ", nfa_hciu_type_2_str(type).c_str(),
+               type);
 
   switch (type) {
     case NFA_HCI_COMMAND_TYPE:
-      sprintf(&p_buff[xx], "Inst: %s [0x%02x] ", nfa_hciu_instr_2_str(inst),
-              inst);
+      sprintf(&p_buff[xx], "Inst: %s [0x%02x] ",
+              nfa_hciu_instr_2_str(inst).c_str(), inst);
       break;
     case NFA_HCI_EVENT_TYPE:
-      sprintf(&p_buff[xx], "Evt: %s [0x%02x] ", nfa_hciu_evt_2_str(pipe, inst),
-              inst);
+      sprintf(&p_buff[xx], "Evt: %s [0x%02x] ",
+              nfa_hciu_evt_2_str(pipe, inst).c_str(), inst);
       break;
     case NFA_HCI_RESPONSE_TYPE:
       sprintf(&p_buff[xx], "Resp: %s [0x%02x] ",
-              nfa_hciu_get_response_name(inst), inst);
+              nfa_hciu_get_response_name(inst).c_str(), inst);
       break;
     default:
       sprintf(&p_buff[xx], "Inst: %u ", inst);
       break;
   }
-  return (p_buff);
+  return p_buff;
 }
 
 /*******************************************************************************
@@ -1338,40 +1339,36 @@
 ** Returns          pointer to the name
 **
 *******************************************************************************/
-char* nfa_hciu_evt_2_str(uint8_t pipe_id, uint8_t evt) {
-  tNFA_HCI_DYN_PIPE* p_pipe;
-
-  if ((pipe_id != NFA_HCI_ADMIN_PIPE) &&
-      (pipe_id != NFA_HCI_LINK_MANAGEMENT_PIPE) &&
-      ((p_pipe = nfa_hciu_find_pipe_by_pid(pipe_id)) != NULL)) {
-    if (p_pipe->local_gate == NFA_HCI_CONNECTIVITY_GATE) {
-      switch (evt) {
-        case NFA_HCI_EVT_CONNECTIVITY:
-          return ("EVT_CONNECTIVITY");
-        case NFA_HCI_EVT_TRANSACTION:
-          return ("EVT_TRANSACTION");
-        case NFA_HCI_EVT_OPERATION_ENDED:
-          return ("EVT_OPERATION_ENDED");
-        default:
-          return ("UNKNOWN");
-      }
+std::string nfa_hciu_evt_2_str(uint8_t pipe_id, uint8_t evt) {
+  tNFA_HCI_DYN_PIPE* p_pipe = nfa_hciu_find_pipe_by_pid(pipe_id);
+  if (pipe_id != NFA_HCI_ADMIN_PIPE &&
+      pipe_id != NFA_HCI_LINK_MANAGEMENT_PIPE && p_pipe != NULL &&
+      p_pipe->local_gate == NFA_HCI_CONNECTIVITY_GATE) {
+    switch (evt) {
+      case NFA_HCI_EVT_CONNECTIVITY:
+        return "EVT_CONNECTIVITY";
+      case NFA_HCI_EVT_TRANSACTION:
+        return "EVT_TRANSACTION";
+      case NFA_HCI_EVT_OPERATION_ENDED:
+        return "EVT_OPERATION_ENDED";
+      default:
+        return "UNKNOWN";
     }
   }
 
   switch (evt) {
     case NFA_HCI_EVT_HCI_END_OF_OPERATION:
-      return ("EVT_END_OF_OPERATION");
+      return "EVT_END_OF_OPERATION";
     case NFA_HCI_EVT_POST_DATA:
-      return ("EVT_POST_DATA");
+      return "EVT_POST_DATA";
     case NFA_HCI_EVT_HOT_PLUG:
-      return ("EVT_HOT_PLUG");
+      return "EVT_HOT_PLUG";
     default:
-      return ("UNKNOWN");
+      return "UNKNOWN";
   }
 }
-#endif
 
-static void handle_debug_loopback(NFC_HDR* p_buf, uint8_t pipe, uint8_t type,
+static void handle_debug_loopback(NFC_HDR* p_buf, uint8_t type,
                                   uint8_t instruction) {
   uint8_t* p = (uint8_t*)(p_buf + 1) + p_buf->offset;
   static uint8_t next_pipe = 0x10;
diff --git a/src/nfa/include/nfa_api.h b/src/nfa/include/nfa_api.h
index 3467fdb..1b0f18c 100644
--- a/src/nfa/include/nfa_api.h
+++ b/src/nfa/include/nfa_api.h
@@ -41,64 +41,27 @@
 #define NFA_MAX_AID_LEN NFC_MAX_AID_LEN
 #define NFA_MIN_AID_LEN 5 /* per NCI specification */
 
-/* NFA API return status codes */
 /* Command succeeded    */
 #define NFA_STATUS_OK NCI_STATUS_OK
 /* Command is rejected. */
 #define NFA_STATUS_REJECTED NCI_STATUS_REJECTED
-/* Message is corrupted */
-#define NFA_STATUS_MSG_CORRUPTED NCI_STATUS_MESSAGE_CORRUPTED
 /* buffer full          */
 #define NFA_STATUS_BUFFER_FULL NCI_STATUS_BUFFER_FULL
 /* failed               */
 #define NFA_STATUS_FAILED NCI_STATUS_FAILED
-/* not initialized      */
-#define NFA_STATUS_NOT_INITIALIZED NCI_STATUS_NOT_INITIALIZED
-/* Syntax error         */
-#define NFA_STATUS_SYNTAX_ERROR NCI_STATUS_SYNTAX_ERROR
+/* Optional feature of NCI Spec not supported */
+#define NFA_STATUS_NOT_SUPPORTED NCI_STATUS_NOT_SUPPORTED
 /* Semantic error       */
 #define NFA_STATUS_SEMANTIC_ERROR NCI_STATUS_SEMANTIC_ERROR
 /* Unknown NCI Group ID */
 #define NFA_STATUS_UNKNOWN_GID NCI_STATUS_UNKNOWN_GID
-/* Unknown NCI Opcode   */
-#define NFA_STATUS_UNKNOWN_OID NCI_STATUS_UNKNOWN_OID
 /* Invalid Parameter    */
 #define NFA_STATUS_INVALID_PARAM NCI_STATUS_INVALID_PARAM
-/* Message size too big */
-#define NFA_STATUS_MSG_SIZE_TOO_BIG NCI_STATUS_MSG_SIZE_TOO_BIG
 /* Already started      */
 #define NFA_STATUS_ALREADY_STARTED NCI_STATUS_ALREADY_STARTED
-/* Activation Failed    */
-#define NFA_STATUS_ACTIVATION_FAILED NCI_STATUS_ACTIVATION_FAILED
-/* Tear Down Error      */
-#define NFA_STATUS_TEAR_DOWN NCI_STATUS_TEAR_DOWN
-/* RF transmission error*/
-#define NFA_STATUS_RF_TRANSMISSION_ERR NCI_STATUS_RF_TRANSMISSION_ERR
-/* RF protocol error    */
-#define NFA_STATUS_RF_PROTOCOL_ERR NCI_STATUS_RF_PROTOCOL_ERR
 /* RF Timeout           */
 #define NFA_STATUS_TIMEOUT NCI_STATUS_TIMEOUT
-/* EE Intf activate err */
-#define NFA_STATUS_EE_INTF_ACTIVE_FAIL NCI_STATUS_EE_INTF_ACTIVE_FAIL
-/* EE transmission error*/
-#define NFA_STATUS_EE_TRANSMISSION_ERR NCI_STATUS_EE_TRANSMISSION_ERR
-/* EE protocol error    */
-#define NFA_STATUS_EE_PROTOCOL_ERR NCI_STATUS_EE_PROTOCOL_ERR
-/* EE Timeout           */
-#define NFA_STATUS_EE_TIMEOUT NCI_STATUS_EE_TIMEOUT
 
-/* Command started successfully */
-#define NFA_STATUS_CMD_STARTED NFC_STATUS_CMD_STARTED
-/* NFCC Timeout in responding to an NCI command */
-#define NFA_STATUS_HW_TIMEOUT NFC_STATUS_HW_TIMEOUT
-/* More NFA_CE_GET_ROUTING_REVT to follow */
-#define NFA_STATUS_CONTINUE NFC_STATUS_CONTINUE
-/* API is called to perform illegal function */
-#define NFA_STATUS_REFUSED NFC_STATUS_REFUSED
-/* Wrong format of R-APDU, CC file or NDEF file */
-#define NFA_STATUS_BAD_RESP NFC_STATUS_BAD_RESP
-/* 7816 Status Word is not command complete(0x9000) */
-#define NFA_STATUS_CMD_NOT_CMPLTD NFC_STATUS_CMD_NOT_CMPLTD
 /* Out of GKI buffers */
 #define NFA_STATUS_NO_BUFFERS NFC_STATUS_NO_BUFFERS
 /* Protocol mismatch between API and activated one */
@@ -120,8 +83,6 @@
 /* NFA Handle definitions */
 
 /* The upper byte of NFA_HANDLE signifies the handle group */
-/* Connection handles           */
-#define NFA_HANDLE_GROUP_CONNECTION 0x0100
 /* NDEF Type Handler handles    */
 #define NFA_HANDLE_GROUP_NDEF_HANDLER 0x0200
 /* DH Card Emulation handles    */
@@ -130,12 +91,9 @@
 #define NFA_HANDLE_GROUP_EE 0x0400
 /* P2P handles                  */
 #define NFA_HANDLE_GROUP_P2P 0x0500
-/* SNEP handles                 */
-#define NFA_HANDLE_GROUP_SNEP 0x0700
 /* HCI handles                  */
 #define NFA_HANDLE_GROUP_HCI 0x0800
 /* Local NDEF message handle    */
-#define NFA_HANDLE_GROUP_LOCAL_NDEF 0x0900
 #define NFA_HANDLE_GROUP_MASK 0xFF00
 #define NFA_HANDLE_MASK 0x00FF
 
@@ -157,7 +115,6 @@
 /* NFC Technology F active mode */
 #define NFA_TECHNOLOGY_MASK_F_ACTIVE 0x80
 /* All supported technologies   */
-#define NFA_TECHNOLOGY_MASK_ALL 0xFF
 typedef uint8_t tNFA_TECHNOLOGY_MASK;
 
 /* Definitions for NFC protocol for RW, CE and P2P APIs */
@@ -173,11 +130,7 @@
 #define NFA_PROTOCOL_NFC_DEP NFC_PROTOCOL_NFC_DEP
 /* NFC_PROTOCOL_T5T in NCI2.0 and NFC_PROTOCOL_ISO15693 proprietary in NCI1.0*/
 #define NFA_PROTOCOL_T5T NFC_PROTOCOL_T5T
-#define NFA_PROTOCOL_B_PRIME NFC_PROTOCOL_B_PRIME
-#define NFA_PROTOCOL_KOVIO NFC_PROTOCOL_KOVIO
-#define NFA_PROTOCOL_MIFARE NFC_PROTOCOL_MIFARE
 #define NFA_PROTOCOL_INVALID 0xFF
-#define NFA_MAX_NUM_PROTOCOLS 8
 typedef uint8_t tNFA_NFC_PROTOCOL;
 
 /* Definitions for tNFA_PROTOCOL_MASK */
@@ -210,15 +163,10 @@
 #define NFA_T1T_HR_LEN T1T_HR_LEN
 /* Max UID length of T1/T2  */
 #define NFA_MAX_UID_LEN TAG_MAX_UID_LEN
-/* T1T UID length           */
-#define NFA_T1T_UID_LEN T1T_UID_LEN
 /* UID len for T1T cmds     */
 #define NFA_T1T_CMD_UID_LEN T1T_CMD_UID_LEN
 /* T2T UID length           */
-#define NFA_T2T_UID_LEN T2T_UID_LEN
 
-/* Tag is read only */
-#define NFA_RW_NDEF_FL_READ_ONLY RW_NDEF_FL_READ_ONLY
 /* Tag formated for NDEF */
 #define NFA_RW_NDEF_FL_FORMATED RW_NDEF_FL_FORMATED
 /* NDEF supported by the tag */
@@ -227,12 +175,6 @@
 #define NFA_RW_NDEF_FL_UNKNOWN RW_NDEF_FL_UNKNOWN
 /* Tag supports format operation */
 #define NFA_RW_NDEF_FL_FORMATABLE RW_NDEF_FL_FORMATABLE
-/* Tag can be soft locked */
-#define NFA_RW_NDEF_FL_SOFT_LOCKABLE RW_NDEF_FL_SOFT_LOCKABLE
-/* Tag can be hard locked */
-#define NFA_RW_NDEF_FL_HARD_LOCKABLE RW_NDEF_FL_HARD_LOCKABLE
-/* Tag is one time programmable */
-#define NFA_RW_NDEF_FL_OTP RW_NDEF_FL_OTP
 
 typedef uint8_t tNFA_RW_NDEF_FLAG;
 
@@ -247,7 +189,7 @@
 typedef struct {
   tNFA_STATUS status;    /* NFA_STATUS_OK if successful              */
   uint16_t tlv_size;     /* The length of TLV                        */
-  uint8_t param_tlvs[1]; /* TLV (Parameter ID-Len-Value byte stream) */
+  uint8_t* param_tlvs;   /* TLV (Parameter ID-Len-Value byte stream) */
 } tNFA_GET_CONFIG;
 
 /* Structure to store screen state */
@@ -269,10 +211,6 @@
 #define NFA_SCREEN_STATE_MASK 0x0F
 
 /* CONN_DISCOVER_PARAM */
-#define NFA_LISTEN_DH_NFCEE_ENABLE_MASK NCI_LISTEN_DH_NFCEE_ENABLE_MASK
-#define NFA_LISTEN_DH_NFCEE_DISABLE_MASK NCI_LISTEN_DH_NFCEE_DISABLE_MASK
-#define NFA_POLLING_DH_DISABLE_MASK NCI_POLLING_DH_DISABLE_MASK
-#define NFA_POLLING_DH_ENABLE_MASK NCI_POLLING_DH_ENABLE_MASK
 #define NFA_DM_PWR_MODE_FULL 0x04
 #define NFA_DM_PWR_MODE_OFF_SLEEP 0x00
 
@@ -318,13 +256,8 @@
 typedef enum {
   NFA_DTA_DEFAULT_MODE = 0x00000001,
   NFA_DTA_LLCP_MODE = 0x00000002,
-  NFA_DTA_SNEP_MODE = 0x00000003,
   NFA_DTA_HCEF_MODE = 0x00000004,
   NFA_DTA_CR8 = 0x00000080,
-  NFA_DTA_CR9 = 0x00000090,
-  NFA_DTA_CR10 = 0x000000A0,
-  NFA_DTA_CR11 = 0x000000B0,
-  NFA_DTA_CR12 = 0x000000C0,
 } tNFA_eDtaModes;
 
 /* NFA Connection Callback Events */
@@ -566,21 +499,6 @@
 /* Union of all connection callback structures */
 typedef union {
   tNFA_STATUS status;           /* NFA_POLL_ENABLED_EVT                 */
-                                /* NFA_POLL_DISABLED_EVT                */
-                                /* NFA_CE_UICC_LISTEN_CONFIGURED_EVT    */
-                                /* NFA_EXCLUSIVE_RF_CONTROL_STARTED_EVT */
-                                /* NFA_EXCLUSIVE_RF_CONTROL_STOPPED_EVT */
-                                /* NFA_SELECT_RESULT_EVT                */
-                                /* NFA_DEACTIVATE_FAIL_EVT              */
-                                /* NFA_CE_NDEF_WRITE_START_EVT          */
-                                /* NFA_SELECT_CPLT_EVT                  */
-                                /* NFA_READ_CPLT_EVT                    */
-                                /* NFA_WRITE_CPLT_EVT                   */
-                                /* NFA_PRESENCE_CHECK_EVT               */
-                                /* NFA_FORMAT_CPLT_EVT                  */
-                                /* NFA_SET_TAG_RO_EVT                   */
-                                /* NFA_UPDATE_RF_PARAM_RESULT_EVT       */
-                                /* NFA_RW_INTF_ERROR_EVT                */
   tNFA_DISC_RESULT disc_result; /* NFA_DISC_RESULT_EVT                  */
   tNFA_ACTIVATED activated;     /* NFA_ACTIVATED_EVT                    */
   tNFA_DEACTIVATED deactivated; /* NFA_DEACTIVATED_EVT                  */
@@ -803,9 +721,6 @@
 /*****************************************************************************
 **  External Function Declarations
 *****************************************************************************/
-#ifdef __cplusplus
-extern "C" {
-#endif
 
 /*******************************************************************************
 **
@@ -1418,19 +1333,6 @@
                                         tNFA_VSC_CBACK* p_cback);
 
 /*******************************************************************************
-**
-** Function         NFA_SetTraceLevel
-**
-** Description      This function sets the trace level for NFA.  If called with
-**                  a value of 0xFF, it simply returns the current trace level.
-**
-** Returns          The new or current trace level
-**
-*******************************************************************************/
-extern uint8_t NFA_SetTraceLevel(uint8_t new_level);
-
-/*******************************************************************************
-**
 ** Function:        NFA_EnableDTA_TypeMode
 **
 ** Description:     Initialize and get global DTA type mode from .conf
@@ -1441,6 +1343,17 @@
 extern void NFA_EnableDtamode(tNFA_eDtaModes eDtaMode);
 
 /*******************************************************************************
+** Function         NFA_GetNCIVersion
+**
+** Description      Called by higher layer to get the current nci
+**                  version of nfc.
+**
+** Returns          NCI version NCI2.0 / NCI1.0
+**
+*******************************************************************************/
+extern uint8_t NFA_GetNCIVersion();
+
+/*******************************************************************************
 ** Function:        NFA_SetPowerSubStateForScreenState
 **
 ** Description:     This function send the current screen state
@@ -1450,8 +1363,4 @@
 *******************************************************************************/
 extern tNFA_STATUS NFA_SetPowerSubStateForScreenState(uint8_t ScreenState);
 
-#ifdef __cplusplus
-}
-#endif
-
 #endif /* NFA_API_H */
diff --git a/src/nfa/include/nfa_ce_api.h b/src/nfa/include/nfa_ce_api.h
index 8acff20..55412b3 100644
--- a/src/nfa/include/nfa_ce_api.h
+++ b/src/nfa/include/nfa_ce_api.h
@@ -34,9 +34,6 @@
 /*****************************************************************************
 **  External Function Declarations
 *****************************************************************************/
-#ifdef __cplusplus
-extern "C" {
-#endif
 
 /*******************************************************************************
 **
@@ -232,8 +229,4 @@
 *******************************************************************************/
 extern tNFA_STATUS NFA_CeSetIsoDepListenTech(tNFA_TECHNOLOGY_MASK tech_mask);
 
-#ifdef __cplusplus
-}
-#endif
-
 #endif /* NFA_CE_API_H */
diff --git a/src/nfa/int/nfa_ce_int.h b/src/nfa/include/nfa_ce_int.h
similarity index 96%
rename from src/nfa/int/nfa_ce_int.h
rename to src/nfa/include/nfa_ce_int.h
index ef41242..d113cd3 100644
--- a/src/nfa/int/nfa_ce_int.h
+++ b/src/nfa/include/nfa_ce_int.h
@@ -34,9 +34,6 @@
 **  Constants and data types
 *****************************************************************************/
 
-/* ce status callback */
-typedef void tNFA_CE_STATUS_CBACK(tNFA_STATUS status);
-
 /* CE events */
 enum {
   /* device manager local device API events */
@@ -45,18 +42,12 @@
   NFA_CE_API_DEREG_LISTEN_EVT,
   NFA_CE_API_CFG_ISODEP_TECH_EVT,
   NFA_CE_ACTIVATE_NTF_EVT,
-  NFA_CE_DEACTIVATE_NTF_EVT,
+  NFA_CE_DEACTIVATE_NTF_EVT
 
-  NFA_CE_MAX_EVT
 };
 
 /* Listen registration types */
-enum {
-  NFA_CE_REG_TYPE_NDEF,
-  NFA_CE_REG_TYPE_ISO_DEP,
-  NFA_CE_REG_TYPE_FELICA,
-  NFA_CE_REG_TYPE_UICC
-};
+enum { NFA_CE_REG_TYPE_ISO_DEP, NFA_CE_REG_TYPE_FELICA, NFA_CE_REG_TYPE_UICC };
 typedef uint8_t tNFA_CE_REG_TYPE;
 
 /* data type for NFA_CE_API_CFG_LOCAL_TAG_EVT */
@@ -137,6 +128,8 @@
 #define NFA_CE_LISTEN_INFO_FELICA 0x00000200
 /* This is a listen_info for UICC                                   */
 #define NFA_CE_LISTEN_INFO_UICC 0x00000400
+/* App has not been notified of ACTIVATE_EVT yet for this HCEF NFCID2 */
+#define NFA_CE_LISTEN_INFO_T3T_ACTIVATE_PND 0x00010000
 
 /* Structure for listen look up table */
 typedef struct {
diff --git a/src/nfa/int/nfa_dm_int.h b/src/nfa/include/nfa_dm_int.h
similarity index 98%
rename from src/nfa/int/nfa_dm_int.h
rename to src/nfa/include/nfa_dm_int.h
index a527927..a7f61d8 100644
--- a/src/nfa/int/nfa_dm_int.h
+++ b/src/nfa/include/nfa_dm_int.h
@@ -24,6 +24,7 @@
 #ifndef NFA_DM_INT_H
 #define NFA_DM_INT_H
 
+#include <string>
 #include "nfa_api.h"
 #include "nfa_sys.h"
 #include "nfc_api.h"
@@ -140,7 +141,6 @@
   NFC_HDR hdr;
   uint16_t rf_disc_dur_ms;
 } tNFA_DM_API_SET_RF_DISC_DUR;
-#define NFA_RF_DISC_DURATION_MAX 0xFFFF
 
 /* data type for NFA_DM_API_REG_NDEF_HDLR_EVT */
 #define NFA_NDEF_FLAGS_HANDLE_WHOLE_MESSAGE 0x01
@@ -367,8 +367,6 @@
   NFA_DM_DISC_LRT_NFC_BP
 };
 
-/* SLP_REQ (HLTA) command */
-#define SLP_REQ_CMD 0x5000
 /* NFA_EE_MAX_TECH_ROUTE. only A, B, F, Bprime are supported by UICC now */
 #define NFA_DM_MAX_TECH_ROUTE 4
 
@@ -414,8 +412,6 @@
 /* Default handler entry in ndef_handler table      */
 #define NFA_NDEF_DEFAULT_HANDLER_IDX 0
 
-#define NFA_PARAM_ID_INVALID 0xFF
-
 /* Maximum number of pending SetConfigs */
 #define NFA_DM_SETCONFIG_PENDING_MAX 32
 
@@ -598,7 +594,6 @@
 #define nfa_snep_init(is_dta_mode)
 #endif
 
-void nfa_dta_init(void);
 #if (NFC_NFCEE_INCLUDED == TRUE)
 void nfa_ee_init(void);
 void nfa_hci_init(void);
@@ -631,12 +626,12 @@
 bool nfa_dm_act_power_off_sleep(tNFA_DM_MSG* p_data);
 bool nfa_dm_ndef_reg_hdlr(tNFA_DM_MSG* p_data);
 bool nfa_dm_ndef_dereg_hdlr(tNFA_DM_MSG* p_data);
-bool nfa_dm_tout(tNFA_DM_MSG* p_data);
+
 bool nfa_dm_act_reg_vsc(tNFA_DM_MSG* p_data);
 bool nfa_dm_act_send_vsc(tNFA_DM_MSG* p_data);
 uint16_t nfa_dm_act_get_rf_disc_duration();
 bool nfa_dm_act_disable_timeout(tNFA_DM_MSG* p_data);
-bool nfa_dm_act_nfc_cback_data(tNFA_DM_MSG* p_data);
+
 bool nfa_dm_set_power_sub_state(tNFA_DM_MSG* p_data);
 
 void nfa_dm_proc_nfcc_power_mode(uint8_t nfcc_power_mode);
@@ -680,8 +675,6 @@
   memset(ha, NFC_DH_ID, NFA_DM_MAX_TECH_ROUTE);
 #endif
 
-#if (BT_TRACE_VERBOSE == TRUE)
-char* nfa_dm_nfc_revt_2_str(tNFC_RESPONSE_EVT event);
-#endif
+std::string nfa_dm_nfc_revt_2_str(tNFC_RESPONSE_EVT event);
 
 #endif /* NFA_DM_INT_H */
diff --git a/src/nfa/int/nfa_dta_int.h b/src/nfa/include/nfa_dta_int.h
similarity index 62%
rename from src/nfa/int/nfa_dta_int.h
rename to src/nfa/include/nfa_dta_int.h
index c050292..c844c07 100644
--- a/src/nfa/int/nfa_dta_int.h
+++ b/src/nfa/include/nfa_dta_int.h
@@ -36,29 +36,9 @@
 /*****************************************************************************
 **  DTA definitions
 *****************************************************************************/
-#define NFA_DTA_PATTERN_NUMBER_INVALID 0xFFFF
-
-#define NFA_DTA_PATTERN_NUMBER_LLCP_CONNECT_BY_SAP 0x1200
-#define NFA_DTA_PATTERN_NUMBER_LLCP_CONNECT_BY_SN 0x1240
-#define NFA_DTA_PATTERN_NUMBER_LLCP_CONNECT_BY_SNL 0x1280
-
-#define NFA_DTA_PATTERN_NUMBER_SNEP_SERVER_ONLY 0x1300
-#define NFA_DTA_PATTERN_NUMBER_SNEP_DEFAULT_PUT_SHORT_NDEF 0x1301
-#define NFA_DTA_PATTERN_NUMBER_SNEP_DEFAULT_PUT_LONG_NDEF 0x1302
-#define NFA_DTA_PATTERN_NUMBER_SNEP_EXTENDED_GET 0x1303
 
 #define NFA_DTA_DISCOVER_PARAMS_MAX 6
 
-/* Header length for long NDEF text message */
-#define NDEF_WKT_TEXT_HDR_LEN 7
-/* Size of NDEF message for T3T write-tests ([DTA] $5.5.6) */
-#define NFA_DTA_T3T_WRITE_NDEF_SIZE 192
-/* System code to use for T3T Listen mode tests */
-#define NFA_DTA_T3T_LISTEN_SYSTEMCODE 0xBABE
-
-/* Maximum protocol preference rank */
-#define NFA_PROTOCOL_RANK_INVALID 0xFF
-
 #define NFA_DTA_SCRATCH_BUF_SIZE T3T_MSG_BLOCKSIZE
 
 #ifndef NFA_DTA_DEFAULT_CO_OUT_DSAP
@@ -87,12 +67,7 @@
 enum {
   /* device manager local device API events */
   NFA_DTA_API_ENABLE_EVT = NFA_SYS_EVT_START(NFA_ID_DTA),
-  NFA_DTA_API_DISABLE_EVT,
-  NFA_DTA_API_CONFIG_EVT,
   NFA_DTA_API_START_EVT,
-  NFA_DTA_API_STOP_EVT,
-  NFA_DTA_ACTIVATE_EVT,
-  NFA_DTA_DEACTIVATE_EVT,
   NFA_DTA_DATA_CBACK_EVT,
 
   NFA_DTA_MAX_EVT
@@ -136,16 +111,8 @@
   tNFC_CONN data;
 } tNFA_DTA_NFCDEP_DATA;
 
-enum { NFA_DTA_LLCP_CONNECT_CO_ECHO_OUT, NFA_DTA_LLCP_DISCONNECT_CO_ECHO_OUT };
 typedef uint8_t tNFA_DTA_LLCP_EVT;
 
-enum {
-  NFA_DTA_RW_DATA,
-  NFA_DTA_CE_DATA,
-  NFA_DTA_NFCDEP_DATA,
-  NFA_DTA_LLCP_DATA
-};
-
 typedef uint8_t tNFA_DTA_DATA_TYPE;
 
 typedef struct {
@@ -168,39 +135,16 @@
   tNFA_DTA_DATA_CBACK data_cback;
 } tNFA_DTA_MSG;
 
-/* DTA states */
-enum {
-  NFA_DTA_ST_IDLE,
-  NFA_DTA_ST_DISCOVER, /* Polling/Listening */
-  NFA_DTA_ST_ACTIVATED /* Activated, listen mode */
-};
 typedef uint8_t tNFA_DTA_STATE;
 
-/* DTA Substates (while in ACTIVATED state) - substate enumerations are found in
- * protocol-specific files (nfa_dta_XXX.c) */
-#define NFA_DTA_SST_IDLE 0
 typedef uint8_t tNFA_DTA_SUBSTATE;
 
-/* DTA discovery states */
-enum {
-  NFA_DTA_DISC_STATE_IDLE,
-  NFA_DTA_DISC_STATE_DISCOVERY,
-  NFA_DTA_DISC_STATE_POLL_ACTIVE,
-  NFA_DTA_DISC_STATE_W4_ALL_DISCOVERIES,
-  NFA_DTA_DISC_STATE_W4_HOST_SELECT,
-  NFA_DTA_DISC_STATE_LISTEN_ACTIVE,
-  NFA_DTA_DISC_STATE_LISTEN_SLEEP,
-  NFA_DTA_DISC_STATE_MAX
-};
-
 /*****************************************************************************
 * DTA control block definitions
 *****************************************************************************/
 
 /* NDEF buffer definitions */
 enum {
-  NFA_DTA_BUF_READ,  /* Buffer for RW Read requests */
-  NFA_DTA_BUF_WRITE, /* Buffer for RW Write requests */
   NFA_DTA_BUF_MAX
 };
 
@@ -211,27 +155,9 @@
   uint32_t offset; /* current read/write offset */
 } tNFA_DTA_BUF_CB;
 
-/* T4T listen mode test application */
-enum {
-  NFA_DTA_T4T_CE_APP_NONE,     /* Not selected */
-  NFA_DTA_T4T_CE_APP_LOOPBACK, /* loopback test applicaiton */
-  NFA_DTA_T4T_CE_APP_PROP      /* propretary test application */
-};
-
 /* DTA test step command */
 typedef tNFC_STATUS (*tNFA_DTA_CMD_FCN)(void*);
 
-/* dta control block flags */
-#define NFA_DTA_FL_ENABLED 0x00000001 /* DTA is enabled */
-/* Automatically start discovery when NFC is enabled */
-#define NFA_DTA_FL_AUTOSTART 0x00000002
-/* DTA is stopping (NFA_DtaStop called) */
-#define NFA_DTA_FL_STOPPING 0x00000004
-/* DTA is being disabled (NFA_DtaDisable called) */
-#define NFA_DTA_FL_DISABLING 0x00000008
-/* T4T/NFCDEP is deactivating to IDLE (need to DESELECT first) */
-#define NFA_DTA_FL_T4T_DESELECT_DEACT 0x00000010
-
 /* DTA control block */
 typedef struct {
   uint32_t dta_flags; /* dta_flags must be first item in structure (statically
@@ -293,11 +219,6 @@
   uint16_t llcp_co_out_remote_miu; /* MIU of LT-CO-OUT-DEST */
   uint8_t llcp_co_out_remote_rw;   /* RW of LT-CO-OUT-DEST  */
 
-/* establishing outbound on connection-oriented */
-#define NFA_DTA_LLCP_FLAGS_CO_OUT_CONNECTING 0x01
-/* established outbound on connection-oriented  */
-#define NFA_DTA_LLCP_FLAGS_CO_OUT_CONNECTED 0x02
-
   uint8_t llcp_flags;      /* internal flags for LLCP echo test */
   uint8_t llcp_sdp_tid_cl; /* SDP transaction ID for outbound connectionless */
   uint8_t
@@ -345,75 +266,6 @@
 /*****************************************************************************
 * DTA internal funciton protoytpes
 *****************************************************************************/
-/* Internal function prototypes */
-void nfa_dta_deactivate(uint8_t deactivate_type);
-void nfa_dta_shutdown(void);
-void nfa_dta_discover_start(void);
-
-/* nfa_sys handler for DTA */
-bool nfa_dta_evt_hdlr(NFC_HDR* p_msg);
-void nfa_dta_sys_disable(void);
-
-/* State machine action functions */
-bool nfa_dta_enable(tNFA_DTA_MSG* p_data);
-bool nfa_dta_disable(tNFA_DTA_MSG* p_data);
-bool nfa_dta_config(tNFA_DTA_MSG* p_data);
-bool nfa_dta_start(tNFA_DTA_MSG* p_data);
-bool nfa_dta_handle_deact(tNFA_DTA_MSG* p_data);
-bool nfa_dta_stop(tNFA_DTA_MSG* p_data);
-bool nfa_dta_run_test(tNFA_DTA_MSG* p_data);
-bool nfa_dta_proc_data(tNFA_DTA_MSG* p_msg_data);
-
-/* Utility functions */
-void nfa_dta_test_set_state(tNFA_DTA_STATE state);
-void nfa_dta_test_set_substate(tNFA_DTA_SUBSTATE substate);
-void nfa_dta_free_ndef_buf(uint8_t ndef_idx);
-uint8_t* nfa_dta_realloc_buf(uint8_t ndef_idx, uint32_t size);
-void nfa_dta_t3t_nfcid_rand(uint8_t nfcid2[NCI_RF_F_UID_LEN]);
-
-/* Test function entry points (in nfa_dta_XXX.c) */
-void nfa_dta_nfcdep_poll_test_start(void);
-void nfa_dta_nfcdep_proc_data(tNFC_CONN_EVT event, tNFC_CONN* p_data);
-void nfa_dta_t1t_poll_test_start(void);
-void nfa_dta_t2t_poll_test_start(void);
-void nfa_dta_t3t_poll_test_start(void);
-void nfa_dta_t4t_poll_test_start(void);
-
-void nfa_dta_nfcdep_listen_test_start(void);
-void nfa_dta_t3t_listen_test_start(void);
-void nfa_dta_t4t_listen_test_start(void);
-
-void nfa_dta_t1t_rw_cback(uint8_t event, tRW_DATA* p_data);
-void nfa_dta_t2t_rw_cback(uint8_t event, tRW_DATA* p_data);
-void nfa_dta_t3t_rw_cback(uint8_t event, tRW_DATA* p_data);
-void nfa_dta_t4t_rw_cback(uint8_t event, tRW_DATA* p_data);
-
-void nfa_dta_t3t_ce_cback(uint8_t event, tCE_DATA* p_data);
-void nfa_dta_t4t_ce_cback(uint8_t event, tCE_DATA* p_data);
-
-void nfa_dta_ce_cback(uint8_t event, tCE_DATA* p_ce_data);
-
-void nfa_dta_t4t_register_apps(void);
-void nfa_dta_t4t_deregister_apps(void);
-
-void nfa_dta_llcp_init(void);
-void nfa_dta_llcp_set_gen_bytes(void);
-void nfa_dta_llcp_clear_gen_bytes(void);
-void nfa_dta_llcp_register_pattern_number_service(void);
-void nfa_dta_llcp_deregister_pattern_number_service(void);
-void nfa_dta_llcp_register_echo(void);
-void nfa_dta_llcp_deregister_echo(void);
-void nfa_dta_llcp_activate_link(void);
-void nfa_dta_llcp_connect_co_echo_out(void);
-void nfa_dta_llcp_disconnect_co_echo_out(void);
-
-void nfa_dta_snep_init(void);
-void nfa_dta_snep_register(void);
-void nfa_dta_snep_deregister(void);
-
-void nfa_dta_emvco_pcd_config_nfcc(bool enable);
-void nfa_dta_emvco_pcd_start(void);
-void nfa_dta_emvco_pcd_cback(uint8_t event, tRW_DATA* p_data);
 
 extern uint8_t* p_nfa_dta_brcm_start_up_cfg;
 extern uint8_t nfa_dta_brcm_start_up_cfg_len;
diff --git a/src/nfa/include/nfa_ee_api.h b/src/nfa/include/nfa_ee_api.h
index f4acbe0..78d0fe7 100644
--- a/src/nfa/include/nfa_ee_api.h
+++ b/src/nfa/include/nfa_ee_api.h
@@ -33,7 +33,6 @@
 *****************************************************************************/
 /* 16 per ISO 7816 specification    */
 #define NFA_MAX_AID_LEN NFC_MAX_AID_LEN
-#define NFA_EE_HANDLE_DH (NFA_HANDLE_GROUP_EE | NFC_DH_ID)
 
 /* NFA EE callback events */
 enum {
@@ -42,9 +41,13 @@
   NFA_EE_DEREGISTER_EVT, /* The status for NFA_EeDeregister () */
   NFA_EE_MODE_SET_EVT, /* The status for activating or deactivating an NFCEE */
   NFA_EE_ADD_AID_EVT,  /* The status for adding an AID to a routing table entry
-                          */
-  NFA_EE_REMOVE_AID_EVT, /* The status for removing an AID from a routing table
-                            */
+                        */
+  NFA_EE_REMOVE_AID_EVT,  /* The status for removing an AID from a routing table
+                           */
+  NFA_EE_ADD_SYSCODE_EVT, /* The status for adding an System Code to a routing
+                             table entry */
+  NFA_EE_REMOVE_SYSCODE_EVT, /* The status for removing an System Code from
+                              routing table */
   NFA_EE_REMAINING_SIZE_EVT, /* The remaining size of the Listen Mode Routing
                                 Table   */
   NFA_EE_SET_TECH_CFG_EVT,   /* The status for setting the routing based on RF
@@ -58,33 +61,16 @@
   NFA_EE_NEW_EE_EVT, /* A new NFCEE is discovered                             */
   NFA_EE_ACTION_EVT, /* An action happened in NFCEE                           */
   NFA_EE_DISCOVER_REQ_EVT, /* NFCEE Discover Request Notification */
-  NFA_EE_ROUT_ERR_EVT,     /* Error - exceed NFCC CE Routing size */
   NFA_EE_NO_MEM_ERR_EVT,   /* Error - out of GKI buffers */
   NFA_EE_NO_CB_ERR_EVT /* Error - Can not find control block or wrong state */
 };
 typedef uint8_t tNFA_EE_EVT;
 
 /* tNFA_NFCEE_INTERFACE values */
-/* APDU Interface       */
-#define NFA_EE_INTERFACE_APDU NFC_NFCEE_INTERFACE_APDU
 /* HCI Access Interface*/
 #define NFA_EE_INTERFACE_HCI_ACCESS NFC_NFCEE_INTERFACE_HCI_ACCESS
-/* T3T Command Interface*/
-#define NFA_EE_INTERFACE_T3T NFC_NFCEE_INTERFACE_T3T
-/* Transparent Interface*/
-#define NFA_EE_INTERFACE_TRANSPARENT NFC_NFCEE_INTERFACE_TRANSPARENT
-/* Proprietary          */
-#define NFA_EE_INTERFACE_PROPRIETARY NFC_NFCEE_INTERFACE_PROPRIETARY
 typedef uint8_t tNFA_EE_INTERFACE;
 
-/* HW/Registration ID   */
-#define NFA_EE_TAG_HW_ID NFC_NFCEE_TAG_HW_ID
-/* ATR Bytes            */
-#define NFA_EE_TAG_ATR_BYTES NFC_NFCEE_TAG_ATR_BYTES
-/* T3T Supplement. Info */
-#define NFA_EE_TAG_T3T_INFO NFC_NFCEE_TAG_T3T_INFO
-/* Broadcom Proprietary */
-#define NFA_EE_TAG_HCI_HOST_ID NFC_NFCEE_TAG_HCI_HOST_ID
 typedef uint8_t tNFA_EE_TAG;
 
 /* for NFA_EeModeSet () */
@@ -98,9 +84,6 @@
 #define NFA_EE_PWR_STATE_SWITCH_OFF 0x02
 /* The device's battery is removed  */
 #define NFA_EE_PWR_STATE_BATT_OFF 0x04
-/* used to remove a particular technology or protocol based routing cfg of a
- * handle from the routing table. */
-#define NFA_EE_PWR_STATE_NONE 0
 typedef uint8_t tNFA_EE_PWR_STATE;
 
 /* NFCEE connected and inactive */
@@ -111,10 +94,6 @@
 #define NFA_EE_STATUS_REMOVED NFC_NFCEE_STATUS_REMOVED
 /* waiting for response from NFCC */
 #define NFA_EE_STATUS_PENDING 0x10
-#define NFA_EE_STATUS_ACTIVATING \
-  (NFA_EE_STATUS_PENDING + NFC_NFCEE_STATUS_ACTIVE)
-#define NFA_EE_STATUS_DEACTIVATING \
-  (NFA_EE_STATUS_PENDING + NFC_NFCEE_STATUS_INACTIVE)
 typedef uint8_t tNFA_EE_STATUS;
 
 /* additional NFCEE Info */
@@ -132,6 +111,7 @@
       ee_interface[NFC_MAX_EE_INTERFACE]; /* NFCEE supported interface */
   uint8_t num_tlvs;                       /* number of TLVs           */
   tNFA_EE_TLV ee_tlv[NFC_MAX_EE_TLVS];    /* the TLV                  */
+  uint8_t ee_power_supply_status;         /* The NFCEE Power supply */
 } tNFA_EE_INFO;
 
 typedef struct {
@@ -147,14 +127,6 @@
       ee_interface; /* NFCEE interface associated with this connection  */
 } tNFA_EE_CONNECT;
 
-/* ISO 7816-4 SELECT command */
-#define NFA_EE_TRGR_SELECT NFC_EE_TRIG_SELECT
-/* RF Protocol changed       */
-#define NFA_EE_TRGR_RF_PROTOCOL NFC_EE_TRIG_RF_PROTOCOL
-/* RF Technology changed     */
-#define NFA_EE_TRGR_RF_TECHNOLOGY NFC_EE_TRIG_RF_TECHNOLOGY
-/* Application initiation    */
-#define NFA_EE_TRGR_APP_INIT NFC_EE_TRIG_APP_INIT
 typedef tNFC_EE_TRIGGER tNFA_EE_TRIGGER;
 
 /* Union of NFCEE action parameter depending on the associated trigger */
@@ -215,6 +187,8 @@
   tNFA_STATUS deregister;
   tNFA_STATUS add_aid;
   tNFA_STATUS remove_aid;
+  tNFA_STATUS add_sc;
+  tNFA_STATUS remove_sc;
   tNFA_STATUS set_tech;
   tNFA_STATUS set_proto;
   uint16_t size;
@@ -231,9 +205,6 @@
 /*****************************************************************************
 **  External Function Declarations
 *****************************************************************************/
-#ifdef __cplusplus
-extern "C" {
-#endif
 
 /*******************************************************************************
 **
@@ -335,7 +306,10 @@
 extern tNFA_STATUS NFA_EeSetDefaultTechRouting(
     tNFA_HANDLE ee_handle, tNFA_TECHNOLOGY_MASK technologies_switch_on,
     tNFA_TECHNOLOGY_MASK technologies_switch_off,
-    tNFA_TECHNOLOGY_MASK technologies_battery_off);
+    tNFA_TECHNOLOGY_MASK technologies_battery_off,
+    tNFA_TECHNOLOGY_MASK technologies_screen_lock,
+    tNFA_TECHNOLOGY_MASK technologies_screen_off,
+    tNFA_TECHNOLOGY_MASK technologies_screen_off_lock);
 
 /*******************************************************************************
 **
@@ -361,7 +335,10 @@
 extern tNFA_STATUS NFA_EeSetDefaultProtoRouting(
     tNFA_HANDLE ee_handle, tNFA_PROTOCOL_MASK protocols_switch_on,
     tNFA_PROTOCOL_MASK protocols_switch_off,
-    tNFA_PROTOCOL_MASK protocols_battery_off);
+    tNFA_PROTOCOL_MASK protocols_battery_off,
+    tNFA_PROTOCOL_MASK technologies_screen_lock,
+    tNFA_PROTOCOL_MASK technologies_screen_off,
+    tNFA_PROTOCOL_MASK technologies_screen_off_lock);
 
 /*******************************************************************************
 **
@@ -412,6 +389,54 @@
 extern tNFA_STATUS NFA_EeRemoveAidRouting(uint8_t aid_len, uint8_t* p_aid);
 
 /*******************************************************************************
+ **
+ ** Function         NFA_EeAddSystemCodeRouting
+ **
+ ** Description      This function is called to add an system code entry in the
+ **                  listen mode routing table in NFCC. The status of this
+ **                  operation is reported as the NFA_EE_ADD_SYSCODE_EVT.
+ **
+ ** Note:            If RF discovery is started,
+ **                  NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should
+ **                  happen before calling this function
+ **
+ ** Note:            NFA_EeUpdateNow() should be called after last NFA-EE
+ **                  function to change the listen mode routing is called.
+ **
+ ** Returns          NFA_STATUS_OK if successfully initiated
+ **                  NFA_STATUS_FAILED otherwise
+ **                  NFA_STATUS_INVALID_PARAM If bad parameter
+ **
+ *******************************************************************************/
+extern tNFA_STATUS NFA_EeAddSystemCodeRouting(uint16_t systemcode,
+                                              tNFA_HANDLE ee_handle,
+                                              tNFA_EE_PWR_STATE power_state);
+
+/*******************************************************************************
+**
+** Function         NFA_EeRemoveSystemCodeRouting
+**
+** Description      This function is called to remove the given System Code
+*based entry from
+**                  the listen mode routing table. The status of this operation
+*is reported
+**                  as the NFA_EE_REMOVE_SYSCODE_EVT.
+**
+** Note:            If RF discovery is started,
+**                  NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should
+**                  happen before calling this function
+**
+** Note:            NFA_EeUpdateNow() should be called after last NFA-EE
+**                  function to change the listen mode routing is called.
+**
+** Returns          NFA_STATUS_OK if successfully initiated
+**                  NFA_STATUS_FAILED otherwise
+**                  NFA_STATUS_INVALID_PARAM If bad parameter
+**
+*******************************************************************************/
+extern tNFA_STATUS NFA_EeRemoveSystemCodeRouting(uint16_t systemcode);
+
+/*******************************************************************************
 **
 ** Function         NFA_EeGetLmrtRemainingSize
 **
@@ -492,8 +517,4 @@
 *******************************************************************************/
 extern tNFA_STATUS NFA_EeDisconnect(tNFA_HANDLE ee_handle);
 
-#ifdef __cplusplus
-}
-#endif
-
 #endif /* NFA_EE_API_H */
diff --git a/src/nfa/int/nfa_ee_int.h b/src/nfa/include/nfa_ee_int.h
similarity index 81%
rename from src/nfa/int/nfa_ee_int.h
rename to src/nfa/include/nfa_ee_int.h
index 28b049d..5c933ab 100644
--- a/src/nfa/int/nfa_ee_int.h
+++ b/src/nfa/include/nfa_ee_int.h
@@ -30,7 +30,6 @@
 /*****************************************************************************
 **  Constants and data types
 *****************************************************************************/
-#define NFA_EE_DEBUG BT_TRACE_VERBOSE
 /* the number of tNFA_EE_ECBs (for NFCEEs and DH) */
 #define NFA_EE_NUM_ECBS (NFA_EE_MAX_EE_SUPPORTED + 1)
 /* The index for DH in nfa_ee_cb.ee_cb[] */
@@ -54,6 +53,8 @@
   NFA_EE_API_SET_PROTO_CFG_EVT,
   NFA_EE_API_ADD_AID_EVT,
   NFA_EE_API_REMOVE_AID_EVT,
+  NFA_EE_API_ADD_SYSCODE_EVT,
+  NFA_EE_API_REMOVE_SYSCODE_EVT,
   NFA_EE_API_LMRT_SIZE_EVT,
   NFA_EE_API_UPDATE_NOW_EVT,
   NFA_EE_API_CONNECT_EVT,
@@ -72,6 +73,7 @@
   NFA_EE_ROUT_TIMEOUT_EVT,
   NFA_EE_DISCV_TIMEOUT_EVT,
   NFA_EE_CFG_TO_NFCC_EVT,
+  NFA_EE_NCI_NFCEE_STATUS_NTF_EVT,
   NFA_EE_MAX_EVT
 
 };
@@ -98,13 +100,17 @@
   NFA_EE_CONN_ST_NONE, /* not connected */
   NFA_EE_CONN_ST_WAIT, /* connection is initiated; waiting for ack */
   NFA_EE_CONN_ST_CONN, /* connected; can send/receive data */
-  NFA_EE_CONN_ST_DISC, /* disconnecting; waiting for ack */
-  NFA_EE_CONN_ST_MAX
+  NFA_EE_CONN_ST_DISC  /* disconnecting; waiting for ack */
 };
 typedef uint8_t tNFA_EE_CONN_ST;
 
 #define NFA_EE_MAX_AID_CFG_LEN (510)
-#define NFA_EE_7816_STATUS_LEN (2)
+
+#define NFA_EE_SYSTEM_CODE_LEN 02
+#define NFA_EE_SYSTEM_CODE_TLV_SIZE 06
+#define NFA_EE_MAX_SYSTEM_CODE_ENTRIES 10
+#define NFA_EE_MAX_SYSTEM_CODE_CFG_LEN \
+  (NFA_EE_MAX_SYSTEM_CODE_ENTRIES * NFA_EE_SYSTEM_CODE_TLV_SIZE)
 
 /* NFA EE control block flags:
  * use to indicate an API function has changed the configuration of the
@@ -116,6 +122,8 @@
 #define NFA_EE_ECB_FLAGS_PROTO 0x04
 /* AID routing changed                */
 #define NFA_EE_ECB_FLAGS_AID 0x08
+/* System Code routing changed        */
+#define NFA_EE_ECB_FLAGS_SYSCODE 0xE0
 /* VS changed                         */
 #define NFA_EE_ECB_FLAGS_VS 0x10
 /* Restore related                    */
@@ -142,12 +150,24 @@
       tech_switch_off; /* default routing - technologies switch_off */
   tNFA_TECHNOLOGY_MASK
       tech_battery_off; /* default routing - technologies battery_off*/
+  tNFA_TECHNOLOGY_MASK
+      tech_screen_lock; /* default routing - technologies screen_lock*/
+  tNFA_TECHNOLOGY_MASK
+      tech_screen_off; /* default routing - technologies screen_off*/
+  tNFA_TECHNOLOGY_MASK
+      tech_screen_off_lock; /* default routing - technologies screen_off_lock*/
   tNFA_PROTOCOL_MASK
       proto_switch_on; /* default routing - protocols switch_on     */
   tNFA_PROTOCOL_MASK
       proto_switch_off; /* default routing - protocols switch_off    */
   tNFA_PROTOCOL_MASK
       proto_battery_off;     /* default routing - protocols battery_off   */
+  tNFA_PROTOCOL_MASK
+      proto_screen_lock; /* default routing - protocols screen_lock    */
+  tNFA_PROTOCOL_MASK
+      proto_screen_off; /* default routing - protocols screen_off  */
+  tNFA_PROTOCOL_MASK
+      proto_screen_off_lock; /* default routing - protocols screen_off_lock  */
   tNFA_EE_CONN_ST conn_st;   /* connection status */
   uint8_t conn_id;           /* connection id */
   tNFA_EE_CBACK* p_ee_cback; /* the callback function */
@@ -174,6 +194,7 @@
   tNFA_EE_TLV ee_tlv[NFC_MAX_EE_TLVS];    /* the TLV */
   uint8_t num_interface;                  /* number of Target interface */
   uint8_t num_tlvs;                       /* number of TLVs */
+  uint8_t ee_power_supply_status;         /* power supply of NFCEE*/
   tNFA_EE_ECB_FLAGS ecb_flags;            /* the flags of this control block */
   tNFA_EE_INTERFACE use_interface; /* NFCEE interface used for the connection */
   tNFA_NFC_PROTOCOL la_protocol;   /* Listen A protocol    */
@@ -183,6 +204,14 @@
   uint8_t size_mask; /* the size for technology and protocol routing */
   uint16_t size_aid; /* the size for aid routing */
   uint8_t aid_info[NFA_EE_MAX_AID_ENTRIES]; /* Aid Info Prefix/Suffix/Exact */
+  /*System Code Based Routing Variables*/
+  uint8_t sys_code_cfg[NFA_EE_MAX_SYSTEM_CODE_ENTRIES * NFA_EE_SYSTEM_CODE_LEN];
+  uint8_t sys_code_pwr_cfg[NFA_EE_MAX_SYSTEM_CODE_ENTRIES];
+  uint8_t sys_code_rt_loc[NFA_EE_MAX_SYSTEM_CODE_ENTRIES];
+  uint8_t sys_code_rt_loc_vs_info[NFA_EE_MAX_SYSTEM_CODE_ENTRIES];
+  /* The number of SC entries in sys_code_cfg buffer*/
+  uint8_t sys_code_cfg_entries;
+  uint16_t size_sys_code; /* The size for system code routing */
 } tNFA_EE_ECB;
 
 /* data type for NFA_EE_API_DISCOVER_EVT */
@@ -219,6 +248,9 @@
   tNFA_TECHNOLOGY_MASK technologies_switch_on;
   tNFA_TECHNOLOGY_MASK technologies_switch_off;
   tNFA_TECHNOLOGY_MASK technologies_battery_off;
+  tNFA_TECHNOLOGY_MASK technologies_screen_lock;
+  tNFA_TECHNOLOGY_MASK technologies_screen_off;
+  tNFA_TECHNOLOGY_MASK technologies_screen_off_lock;
 } tNFA_EE_API_SET_TECH_CFG;
 
 /* data type for NFA_EE_API_SET_PROTO_CFG_EVT */
@@ -229,6 +261,9 @@
   tNFA_PROTOCOL_MASK protocols_switch_on;
   tNFA_PROTOCOL_MASK protocols_switch_off;
   tNFA_PROTOCOL_MASK protocols_battery_off;
+  tNFA_PROTOCOL_MASK protocols_screen_lock;
+  tNFA_PROTOCOL_MASK protocols_screen_off;
+  tNFA_PROTOCOL_MASK protocols_screen_off_lock;
 } tNFA_EE_API_SET_PROTO_CFG;
 
 /* data type for NFA_EE_API_ADD_AID_EVT */
@@ -249,6 +284,21 @@
   uint8_t* p_aid;
 } tNFA_EE_API_REMOVE_AID;
 
+/* data type for NFA_EE_API_ADD_SYSCODE_EVT */
+typedef struct {
+  NFC_HDR hdr;
+  tNFA_EE_ECB* p_cb;
+  uint8_t nfcee_id;
+  uint16_t syscode;
+  tNFA_EE_PWR_STATE power_state;
+} tNFA_EE_API_ADD_SYSCODE;
+
+/* data type for NFA_EE_API_REMOVE_SYSCODE_EVT */
+typedef struct {
+  NFC_HDR hdr;
+  uint16_t syscode;
+} tNFA_EE_API_REMOVE_SYSCODE;
+
 /* data type for NFA_EE_API_LMRT_SIZE_EVT */
 typedef NFC_HDR tNFA_EE_API_LMRT_SIZE;
 
@@ -277,11 +327,6 @@
   uint8_t nfcee_id;
 } tNFA_EE_API_DISCONNECT;
 
-typedef struct {
-  NFC_HDR hdr;
-  tNFC_STATUS status; /* The event status. */
-} tNFA_EE_MSG_STATUS;
-
 /* common data type for internal events with nfa_ee_use_cfg_cb[] as TRUE */
 typedef struct {
   NFC_HDR hdr;
@@ -289,12 +334,6 @@
   uint8_t nfcee_id;
 } tNFA_EE_CFG_HDR;
 
-/* data type for tNFC_RESPONSE_EVT */
-typedef struct {
-  NFC_HDR hdr;
-  void* p_data;
-} tNFA_EE_NCI_RESPONSE;
-
 /* data type for NFA_EE_NCI_DISC_RSP_EVT */
 typedef struct {
   NFC_HDR hdr;
@@ -340,6 +379,12 @@
   tNFC_EE_DISCOVER_REQ_REVT* p_data;
 } tNFA_EE_NCI_DISC_REQ;
 
+/* data type for NFA_EE_NCI_NFCEE_STATUS_EVT */
+typedef struct {
+  NFC_HDR hdr;
+  tNFC_NFCEE_STATUS_REVT* p_data;
+} tNFA_EE_NCI_NFCEE_STATUS_NTF;
+
 /* union of all event data types */
 typedef union {
   NFC_HDR hdr;
@@ -352,6 +397,8 @@
   tNFA_EE_API_SET_PROTO_CFG set_proto;
   tNFA_EE_API_ADD_AID add_aid;
   tNFA_EE_API_REMOVE_AID rm_aid;
+  tNFA_EE_API_ADD_SYSCODE add_syscode;
+  tNFA_EE_API_REMOVE_SYSCODE rm_syscode;
   tNFA_EE_API_LMRT_SIZE lmrt_size;
   tNFA_EE_API_CONNECT connect;
   tNFA_EE_API_SEND_DATA send_data;
@@ -363,6 +410,7 @@
   tNFA_EE_NCI_CONN conn;
   tNFA_EE_NCI_ACTION act;
   tNFA_EE_NCI_DISC_REQ disc_req;
+  tNFA_EE_NCI_NFCEE_STATUS_NTF nfcee_status_ntf;
 } tNFA_EE_MSG;
 
 /* type for State Machine (SM) action functions */
@@ -377,7 +425,6 @@
 
 /* the following status are the definition used in ee_cfg_sts */
 #define NFA_EE_STS_CHANGED_ROUTING 0x01
-#define NFA_EE_STS_CHANGED_VS 0x02
 #define NFA_EE_STS_CHANGED 0x0f
 #define NFA_EE_STS_PREV_ROUTING 0x10
 #define NFA_EE_STS_PREV 0xf0
@@ -406,6 +453,12 @@
 #define NFA_EE_DISC_STS_OFF 0x01
 /* received NFCEE DISCOVER REQ NTF  */
 #define NFA_EE_DISC_STS_REQ 0x02
+/* received NFA_EE_MODE_SET_COMPLETE  */
+#define NFA_EE_MODE_SET_COMPLETE 0x03
+/* initialize EE_RECOVERY             */
+#define NFA_EE_RECOVERY_INIT 0x04
+/* update ee config during EE_RECOVERY */
+#define NFA_EE_RECOVERY_REDISCOVERED 0x05
 typedef uint8_t tNFA_EE_DISC_STS;
 
 typedef void(tNFA_EE_ENABLE_DONE_CBACK)(tNFA_EE_DISC_STS status);
@@ -418,21 +471,21 @@
   tNFA_EE_CBACK* p_ee_cback[NFA_EE_MAX_CBACKS]; /* to report EE events       */
   tNFA_EE_CBACK* p_ee_disc_cback; /* to report EE discovery result    */
   tNFA_EE_ENABLE_DONE_CBACK*
-      p_enable_cback;        /* callback to notify on enable done*/
-  tNFA_EE_EM_STATE em_state; /* NFA-EE state initialized or not  */
-  uint8_t wait_rsp;          /* num of NCI rsp expected (update) */
-  uint8_t num_ee_expecting;  /* number of ee_info still expecting*/
-  uint8_t cur_ee;            /* the number of ee_info in cb      */
-  uint8_t ee_cfged;          /* the bit mask of configured ECBs  */
-  uint8_t ee_cfg_sts;        /* configuration status             */
-  tNFA_EE_WAIT ee_wait_evt;  /* Pending event(s) to be reported  */
-  tNFA_EE_FLAGS ee_flags;    /* flags                            */
+      p_enable_cback;          /* callback to notify on enable done*/
+  tNFA_EE_EM_STATE em_state;   /* NFA-EE state initialized or not  */
+  uint8_t wait_rsp;            /* num of NCI rsp expected (update) */
+  uint8_t num_ee_expecting;    /* number of ee_info still expecting*/
+  uint8_t cur_ee;              /* the number of ee_info in cb      */
+  uint8_t ee_cfged;            /* the bit mask of configured ECBs  */
+  uint8_t ee_cfg_sts;          /* configuration status             */
+  tNFA_EE_WAIT ee_wait_evt;    /* Pending event(s) to be reported  */
+  tNFA_EE_FLAGS ee_flags;      /* flags                            */
   uint8_t route_block_control; /* controls route block feature   */
+  bool isDiscoveryStopped;     /* discovery status                  */
 } tNFA_EE_CB;
 
 /* Order of Routing entries in Routing Table */
 #define NCI_ROUTE_ORDER_AID 0x01        /* AID routing order */
-#define NCI_ROUTE_ORDER_PATTERN 0x02    /* Pattern routing order*/
 #define NCI_ROUTE_ORDER_SYS_CODE 0x03   /* System Code routing order*/
 #define NCI_ROUTE_ORDER_PROTOCOL 0x04   /* Protocol routing order*/
 #define NCI_ROUTE_ORDER_TECHNOLOGY 0x05 /* Technology routing order*/
@@ -473,6 +526,8 @@
 void nfa_ee_api_set_proto_cfg(tNFA_EE_MSG* p_data);
 void nfa_ee_api_add_aid(tNFA_EE_MSG* p_data);
 void nfa_ee_api_remove_aid(tNFA_EE_MSG* p_data);
+void nfa_ee_api_add_sys_code(tNFA_EE_MSG* p_data);
+void nfa_ee_api_remove_sys_code(tNFA_EE_MSG* p_data);
 void nfa_ee_api_lmrt_size(tNFA_EE_MSG* p_data);
 void nfa_ee_api_update_now(tNFA_EE_MSG* p_data);
 void nfa_ee_api_connect(tNFA_EE_MSG* p_data);
@@ -482,6 +537,7 @@
 void nfa_ee_nci_disc_rsp(tNFA_EE_MSG* p_data);
 void nfa_ee_nci_disc_ntf(tNFA_EE_MSG* p_data);
 void nfa_ee_nci_mode_set_rsp(tNFA_EE_MSG* p_data);
+void nfa_ee_nci_nfcee_status_ntf(tNFA_EE_MSG* p_data);
 void nfa_ee_nci_wait_rsp(tNFA_EE_MSG* p_data);
 void nfa_ee_nci_conn(tNFA_EE_MSG* p_data);
 void nfa_ee_nci_action_ntf(tNFA_EE_MSG* p_data);
@@ -494,7 +550,8 @@
                          tNFA_EE_CBACK_DATA* p_data);
 tNFA_EE_ECB* nfa_ee_find_aid_offset(uint8_t aid_len, uint8_t* p_aid,
                                     int* p_offset, int* p_entry);
-void nfa_ee_remove_labels(void);
+tNFA_EE_ECB* nfa_ee_find_sys_code_offset(uint16_t sys_code, int* p_offset,
+                                         int* p_entry);
 int nfa_ee_find_total_aid_len(tNFA_EE_ECB* p_cb, int start_entry);
 void nfa_ee_start_timer(void);
 void nfa_ee_reg_cback_enable_done(tNFA_EE_ENABLE_DONE_CBACK* p_cback);
diff --git a/src/nfa/include/nfa_hci_api.h b/src/nfa/include/nfa_hci_api.h
index 2a40f15..cb4aa0d 100644
--- a/src/nfa/include/nfa_hci_api.h
+++ b/src/nfa/include/nfa_hci_api.h
@@ -94,7 +94,7 @@
 /* Max HCI event length */
 #define NFA_MAX_HCI_RSP_LEN 255
 /* Max HCI event length */
-#define NFA_MAX_HCI_EVENT_LEN 260
+#define NFA_MAX_HCI_EVENT_LEN 300
 /* Max HCI data length */
 #define NFA_MAX_HCI_DATA_LEN 260
 
@@ -291,9 +291,6 @@
 /*****************************************************************************
 **  External Function Declarations
 *****************************************************************************/
-#ifdef __cplusplus
-extern "C" {
-#endif
 
 /*******************************************************************************
 **
@@ -468,26 +465,6 @@
 
 /*******************************************************************************
 **
-** Function         NFA_HciSetRegistry
-**
-** Description      This function requests a peer host to set the desired
-**                  registry field value for the gate that the pipe is on.
-**
-**                  When the peer host responds,the app is notified with
-**                  NFA_HCI_SET_REG_RSP_EVT or
-**                  if an error occurs in sending the command the app will be
-**                  notified by NFA_HCI_CMD_SENT_EVT
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-extern tNFA_STATUS NFA_HciSetRegistry(tNFA_HANDLE hci_handle, uint8_t pipe,
-                                      uint8_t reg_inx, uint8_t data_size,
-                                      uint8_t* p_data);
-
-/*******************************************************************************
-**
 ** Function         NFA_HciSendCommand
 **
 ** Description      This function is called to send a command on a pipe created
@@ -507,23 +484,6 @@
 
 /*******************************************************************************
 **
-** Function         NFA_HciSendResponse
-**
-** Description      This function is called to send a response on a pipe created
-**                  by the application.
-**                  The app will be notified by NFA_HCI_RSP_SENT_EVT if an error
-**                  occurs.
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-extern tNFA_STATUS NFA_HciSendResponse(tNFA_HANDLE hci_handle, uint8_t pipe,
-                                       uint8_t response, uint8_t data_size,
-                                       uint8_t* p_data);
-
-/*******************************************************************************
-**
 ** Function         NFA_HciSendEvent
 **
 ** Description      This function is called to send any event on a pipe created
@@ -612,8 +572,4 @@
 *******************************************************************************/
 extern void NFA_HciDebug(uint8_t action, uint8_t size, uint8_t* p_data);
 
-#ifdef __cplusplus
-}
-#endif
-
 #endif /* NFA_P2P_API_H */
diff --git a/src/nfa/include/nfa_hci_defs.h b/src/nfa/include/nfa_hci_defs.h
index 67d5a33..2737531 100644
--- a/src/nfa/include/nfa_hci_defs.h
+++ b/src/nfa/include/nfa_hci_defs.h
@@ -31,13 +31,16 @@
 #define NFA_HCI_IDENTITY_MANAGEMENT_GATE 0x05
 
 #define NFA_HCI_FIRST_HOST_SPECIFIC_GENERIC_GATE 0x10
-#define NFA_HCI_LAST_HOST_SPECIFIC_GENERIC_GATE 0xEF
 #define NFA_HCI_FIRST_PROP_GATE 0xF0
 #define NFA_HCI_LAST_PROP_GATE 0xFF
 
 /* Generic Gates */
 #define NFA_HCI_CONNECTIVITY_GATE 0x41
 
+/* Proprietary Gates */
+#define NFA_HCI_PROP_GATE_FIRST 0xF0
+#define NFA_HCI_PROP_GATE_LAST 0xFF
+
 /* Static pipes */
 #define NFA_HCI_LINK_MANAGEMENT_PIPE 0x00
 #define NFA_HCI_ADMIN_PIPE 0x01
@@ -48,8 +51,6 @@
 
 /* host_table */
 #define NFA_HCI_HOST_CONTROLLER 0x00
-#define NFA_HCI_DH_HOST 0x01
-#define NFA_HCI_UICC_HOST 0x02
 
 /* Type of instruction */
 #define NFA_HCI_COMMAND_TYPE 0x00
@@ -105,13 +106,9 @@
 
 /* Host controller Admin gate registry identifiers */
 #define NFA_HCI_SESSION_IDENTITY_INDEX 0x01
-#define NFA_HCI_MAX_PIPE_INDEX 0x02
 #define NFA_HCI_WHITELIST_INDEX 0x03
 #define NFA_HCI_HOST_LIST_INDEX 0x04
 
-/* Host controller and DH Link management gate registry identifier */
-#define NFA_HCI_REC_ERROR_INDEX 0x02
-
 /* DH Identity management gate registry identifier */
 #define NFA_HCI_VERSION_SW_INDEX 0x01
 #define NFA_HCI_VERSION_HW_INDEX 0x03
diff --git a/src/nfa/int/nfa_hci_int.h b/src/nfa/include/nfa_hci_int.h
similarity index 94%
rename from src/nfa/int/nfa_hci_int.h
rename to src/nfa/include/nfa_hci_int.h
index ca84f4b..9158a4e 100644
--- a/src/nfa/int/nfa_hci_int.h
+++ b/src/nfa/include/nfa_hci_int.h
@@ -24,11 +24,15 @@
 #ifndef NFA_HCI_INT_H
 #define NFA_HCI_INT_H
 
+#include <string>
+#include "nfa_ee_api.h"
 #include "nfa_hci_api.h"
 #include "nfa_sys.h"
+extern uint8_t HCI_LOOPBACK_DEBUG;
 
-extern bool HCI_LOOPBACK_DEBUG;
-
+/* NFA HCI DEBUG states */
+#define NFA_HCI_DEBUG_ON 0x01
+#define NFA_HCI_DEBUG_OFF 0x00
 /*****************************************************************************
 **  Constants and data types
 *****************************************************************************/
@@ -38,8 +42,6 @@
 #define NFA_HCI_LAST_HOST_SPECIFIC_GATE 0xEF
 
 #define NFA_HCI_SESSION_ID_LEN 8 /* HCI Session ID length */
-/* Maximum pipes that can be created on a generic pipe  */
-#define NFA_MAX_PIPES_IN_GENERIC_GATE 0x0F
 
 /* HCI SW Version number                       */
 #define NFA_HCI_VERSION_SW 0x090000
@@ -71,14 +73,14 @@
  */
 #define NFA_HCI_STATE_RESTORE_NETWK_ENABLE 0x08
 
+#define NFA_HCI_STATE_EE_RECOVERY 0x09
+
 typedef uint8_t tNFA_HCI_STATE;
 
 /* NFA HCI PIPE states */
 #define NFA_HCI_PIPE_CLOSED 0x00 /* Pipe is closed */
 #define NFA_HCI_PIPE_OPENED 0x01 /* Pipe is opened */
 
-#define NFA_HCI_INVALID_INX 0xFF
-
 typedef uint8_t tNFA_HCI_COMMAND;
 typedef uint8_t tNFA_HCI_RESPONSE;
 
@@ -113,8 +115,6 @@
 #define NFA_HCI_FIRST_API_EVENT NFA_HCI_API_REGISTER_APP_EVT
 #define NFA_HCI_LAST_API_EVENT NFA_HCI_API_SEND_EVENT_EVT
 
-typedef uint16_t tNFA_HCI_INT_EVT;
-
 /* Internal event structures.
 **
 ** Note, every internal structure starts with a NFC_HDR and an app handle
@@ -355,15 +355,11 @@
   uint8_t hci_version;     /* HCI Version */
 } tNFA_ID_MGMT_GATE_INFO;
 
-/* Internal flags */
-/* sub system is being disabled */
-#define NFA_HCI_FL_DISABLING 0x01
-#define NFA_HCI_FL_NV_CHANGED 0x02 /* NV Ram changed */
-
 /* NFA HCI control block */
 typedef struct {
-  tNFA_HCI_STATE hci_state;   /* state of the HCI */
-  uint8_t num_nfcee;          /* Number of NFCEE ID Discovered */
+  tNFA_HCI_STATE hci_state; /* state of the HCI */
+  uint8_t num_nfcee;        /* Number of NFCEE ID Discovered */
+  tNFA_EE_INFO ee_info[NFA_HCI_MAX_HOST_IN_NETWORK]; /*NFCEE ID Info*/
   uint8_t num_ee_dis_req_ntf; /* Number of ee discovery request ntf received */
   uint8_t num_hot_plug_evts;  /* Number of Hot plug events received after ee
                                  discovery disable ntf */
@@ -442,6 +438,7 @@
 extern void nfa_hci_startup_complete(tNFA_STATUS status);
 extern void nfa_hci_startup(void);
 extern void nfa_hci_restore_default_config(uint8_t* p_session_id);
+extern void nfa_hci_enable_one_nfcee(void);
 
 /* Action functions in nfa_hci_act.c
 */
@@ -449,7 +446,7 @@
 extern void nfa_hci_check_api_requests(void);
 extern void nfa_hci_handle_admin_gate_cmd(uint8_t* p_data);
 extern void nfa_hci_handle_admin_gate_rsp(uint8_t* p_data, uint8_t data_len);
-extern void nfa_hci_handle_admin_gate_evt(uint8_t* p_data);
+extern void nfa_hci_handle_admin_gate_evt();
 extern void nfa_hci_handle_link_mgm_gate_cmd(uint8_t* p_data);
 extern void nfa_hci_handle_dyn_pipe_pkt(uint8_t pipe, uint8_t* p_data,
                                         uint16_t data_len);
@@ -481,8 +478,6 @@
 extern tNFA_HANDLE nfa_hciu_get_pipe_owner(uint8_t pipe_id);
 extern uint8_t nfa_hciu_count_open_pipes_on_gate(tNFA_HCI_DYN_GATE* p_gate);
 extern uint8_t nfa_hciu_count_pipes_on_gate(tNFA_HCI_DYN_GATE* p_gate);
-extern tNFA_STATUS nfa_hciu_asmbl_dyn_pipe_pkt(uint8_t* p_data,
-                                               uint8_t data_len);
 
 extern tNFA_HCI_RESPONSE nfa_hciu_add_pipe_to_gate(uint8_t pipe,
                                                    uint8_t local_gate,
@@ -519,15 +514,11 @@
                                      uint8_t instruction, uint16_t pkt_len,
                                      uint8_t* p_pkt);
 
-#if (BT_TRACE_VERBOSE == TRUE)
-extern char* nfa_hciu_type_2_str(uint8_t type);
-extern char* nfa_hciu_instr_2_str(uint8_t type);
-extern char* nfa_hciu_get_event_name(uint16_t event);
-extern char* nfa_hciu_get_response_name(uint8_t rsp_code);
-extern char* nfa_hciu_get_state_name(uint8_t state);
+extern std::string nfa_hciu_instr_2_str(uint8_t type);
+extern std::string nfa_hciu_get_event_name(uint16_t event);
+extern std::string nfa_hciu_get_state_name(uint8_t state);
 extern char* nfa_hciu_get_type_inst_names(uint8_t pipe, uint8_t type,
                                           uint8_t inst, char* p_buff);
-extern char* nfa_hciu_evt_2_str(uint8_t pipe_id, uint8_t evt);
-#endif
+extern std::string nfa_hciu_evt_2_str(uint8_t pipe_id, uint8_t evt);
 
 #endif /* NFA_HCI_INT_H */
diff --git a/src/nfa/include/nfa_mem_co.h b/src/nfa/include/nfa_mem_co.h
index decc5f3..e027c16 100644
--- a/src/nfa/include/nfa_mem_co.h
+++ b/src/nfa/include/nfa_mem_co.h
@@ -33,9 +33,6 @@
 /*****************************************************************************
 **  External Function Declarations
 *****************************************************************************/
-#ifdef __cplusplus
-extern "C" {
-#endif
 
 /*******************************************************************************
 **
@@ -62,8 +59,4 @@
 *******************************************************************************/
 extern void nfa_mem_co_free(void* p_buf);
 
-#ifdef __cplusplus
-}
-#endif
-
 #endif /* NFA_MEM_CO_H */
diff --git a/src/nfa/include/nfa_nv_ci.h b/src/nfa/include/nfa_nv_ci.h
index eb519d6..adcf085 100644
--- a/src/nfa/include/nfa_nv_ci.h
+++ b/src/nfa/include/nfa_nv_ci.h
@@ -30,27 +30,9 @@
 **  Constants and data types
 *****************************************************************************/
 
-/* Read Ready Event */
-typedef struct {
-  NFC_HDR hdr;
-  tNFA_NV_CO_STATUS status;
-  int fd;
-  uint16_t num_read;
-} tNFA_NV_CI_READ_EVT;
-
-/* Write Ready Event */
-typedef struct {
-  NFC_HDR hdr;
-  tNFA_NV_CO_STATUS status;
-  int fd;
-} tNFA_NV_CI_WRITE_EVT;
-
 /*****************************************************************************
 **  Function Declarations
 *****************************************************************************/
-#ifdef __cplusplus
-extern "C" {
-#endif
 
 /*******************************************************************************
 **
@@ -95,8 +77,4 @@
 extern void nfa_nv_ci_read(uint16_t num_bytes_read, tNFA_NV_CO_STATUS status,
                            uint8_t block);
 
-#ifdef __cplusplus
-}
-#endif
-
 #endif /* BTA_FS_CI_H */
diff --git a/src/nfa/include/nfa_nv_co.h b/src/nfa/include/nfa_nv_co.h
index e183c3e..0f32e9c 100644
--- a/src/nfa/include/nfa_nv_co.h
+++ b/src/nfa/include/nfa_nv_co.h
@@ -41,22 +41,12 @@
  * status */
 #define NFA_NV_CO_OK 0x00
 #define NFA_NV_CO_FAIL 0x01 /* Used to pass all other errors */
-#define NFA_NV_CO_EACCES 0x02
-#define NFA_NV_CO_ENOTEMPTY 0x03
-#define NFA_NV_CO_EOF 0x04
-#define NFA_NV_CO_EODIR 0x05
-#define NFA_NV_CO_ENOSPACE 0x06 /* Returned in nfa_nv_ci_open if no room */
-#define NFA_NV_CO_EIS_DIR 0x07
-#define NFA_NV_CO_RESUME 0x08 /* used in nfa_nv_ci_open, on resume */
-/* used in nfa_nv_ci_open, on resume (no file to resume) */
-#define NFA_NV_CO_NONE 0x09
 
 typedef uint8_t tNFA_NV_CO_STATUS;
 
 #define DH_NV_BLOCK 0x01
 #define HC_F3_NV_BLOCK 0x02
 #define HC_F4_NV_BLOCK 0x03
-#define HC_DH_NV_BLOCK 0x04
 #define HC_F5_NV_BLOCK 0x05
 
 /*****************************************************************************
diff --git a/src/nfa/include/nfa_p2p_api.h b/src/nfa/include/nfa_p2p_api.h
index ee1be53..bcfc234 100644
--- a/src/nfa/include/nfa_p2p_api.h
+++ b/src/nfa/include/nfa_p2p_api.h
@@ -41,12 +41,8 @@
   0x02 /* no service bound in remote      */
 #define NFA_P2P_DISC_REASON_REMOTE_REJECT \
   0x03 /* remote rejected connection      */
-#define NFA_P2P_DISC_REASON_FRAME_ERROR \
-  0x04 /* sending or receiving FRMR PDU   */
 #define NFA_P2P_DISC_REASON_LLCP_DEACTIVATED \
   0x05 /* LLCP link deactivated           */
-#define NFA_P2P_DISC_REASON_NO_RESOURCE \
-  0x06 /* Out of resource in local device */
 #define NFA_P2P_DISC_REASON_NO_INFORMATION \
   0x80 /* Without information             */
 
@@ -79,16 +75,6 @@
 #define NFA_P2P_ANY_SAP LLCP_INVALID_SAP
 #define NFA_P2P_INVALID_SAP LLCP_INVALID_SAP
 
-/* Recommanded MIU's for connection-oriented */
-#define NFA_P2P_MIU_1 \
-  (NCI_NFC_DEP_MAX_DATA - LLCP_PDU_HEADER_SIZE - LLCP_SEQUENCE_SIZE)
-#define NFA_P2P_MIU_2 \
-  (2 * NCI_NFC_DEP_MAX_DATA - LLCP_PDU_HEADER_SIZE - LLCP_SEQUENCE_SIZE)
-#define NFA_P2P_MIU_3 \
-  (3 * NCI_NFC_DEP_MAX_DATA - LLCP_PDU_HEADER_SIZE - LLCP_SEQUENCE_SIZE)
-#define NFA_P2P_MIU_8 \
-  (8 * NCI_NFC_DEP_MAX_DATA - LLCP_PDU_HEADER_SIZE - LLCP_SEQUENCE_SIZE)
-
 #define NFA_P2P_LLINK_TYPE LLCP_LINK_TYPE_LOGICAL_DATA_LINK
 #define NFA_P2P_DLINK_TYPE LLCP_LINK_TYPE_DATA_LINK_CONNECTION
 typedef uint8_t tNFA_P2P_LINK_TYPE;
@@ -188,9 +174,6 @@
 /*****************************************************************************
 **  External Function Declarations
 *****************************************************************************/
-#ifdef __cplusplus
-extern "C" {
-#endif
 
 /*******************************************************************************
 **
@@ -559,20 +542,4 @@
                                  uint16_t* p_data_link_timeout,
                                  uint16_t* p_delay_first_pdu_timeout);
 
-/*******************************************************************************
-**
-** Function         NFA_P2pSetTraceLevel
-**
-** Description      This function sets the trace level for P2P.  If called with
-**                  a value of 0xFF, it simply returns the current trace level.
-**
-** Returns          The new or current trace level
-**
-*******************************************************************************/
-extern uint8_t NFA_P2pSetTraceLevel(uint8_t new_level);
-
-#ifdef __cplusplus
-}
-#endif
-
 #endif /* NFA_P2P_API_H */
diff --git a/src/nfa/int/nfa_p2p_int.h b/src/nfa/include/nfa_p2p_int.h
similarity index 97%
rename from src/nfa/int/nfa_p2p_int.h
rename to src/nfa/include/nfa_p2p_int.h
index cdbe781..0221f36 100644
--- a/src/nfa/int/nfa_p2p_int.h
+++ b/src/nfa/include/nfa_p2p_int.h
@@ -31,15 +31,13 @@
 /*****************************************************************************
 **  Constants and data types
 *****************************************************************************/
-#define NFA_P2P_DEBUG BT_TRACE_VERBOSE
 
 /* NFA P2P LLCP link state */
 enum {
   NFA_P2P_LLCP_STATE_IDLE,
   NFA_P2P_LLCP_STATE_LISTENING,
-  NFA_P2P_LLCP_STATE_ACTIVATED,
+  NFA_P2P_LLCP_STATE_ACTIVATED
 
-  NFA_P2P_LLCP_STATE_MAX
 };
 
 typedef uint8_t tNFA_P2P_LLCP_STATE;
@@ -255,8 +253,6 @@
       total_pending_ui_pdu; /* total number of tx UI PDU not processed by NFA */
   uint8_t
       total_pending_i_pdu; /* total number of tx I PDU not processed by NFA */
-
-  uint8_t trace_level;
 } tNFA_P2P_CB;
 
 /*****************************************************************************
@@ -308,10 +304,6 @@
 bool nfa_p2p_set_llcp_cfg(tNFA_P2P_MSG* p_msg);
 bool nfa_p2p_restart_rf_discovery(tNFA_P2P_MSG* p_msg);
 
-#if (BT_TRACE_VERBOSE == TRUE)
-char* nfa_p2p_evt_code(uint16_t evt_code);
-#endif
-
 #else
 
 #define nfa_p2p_init ()
diff --git a/src/nfa/include/nfa_rw_api.h b/src/nfa/include/nfa_rw_api.h
index f4eaded..ee9bec7 100644
--- a/src/nfa/include/nfa_rw_api.h
+++ b/src/nfa/include/nfa_rw_api.h
@@ -31,12 +31,9 @@
 **  Constants and data types
 *****************************************************************************/
 enum {
-  NFA_RW_PRES_CHK_DEFAULT,    /* The default behavior             */
-  NFA_RW_PRES_CHK_I_BLOCK,    /* Empty I Block                    */
-  NFA_RW_PRES_CHK_RESET,      /* Deactivate to Sleep; Re-activate */
-  NFA_RW_PRES_CHK_RB_CH0,     /* ReadBinary on Channel 0          */
-  NFA_RW_PRES_CHK_RB_CH3,     /* ReadBinary on Channel 3          */
-  NFA_RW_PRES_CHK_ISO_DEP_NAK /* presence check command ISO-DEP
+  NFA_RW_PRES_CHK_DEFAULT,        /* The default behavior             */
+  NFA_RW_PRES_CHK_I_BLOCK,        /* Empty I Block                    */
+  NFA_RW_PRES_CHK_ISO_DEP_NAK = 5 /* presence check command ISO-DEP
                                  NAK as per NCI2.0                */
 };
 typedef uint8_t tNFA_RW_PRES_CHK_OPTION;
@@ -54,9 +51,6 @@
 /*****************************************************************************
 **  External Function Declarations
 *****************************************************************************/
-#ifdef __cplusplus
-extern "C" {
-#endif
 
 /*******************************************************************************
 **
@@ -748,8 +742,4 @@
 extern tNFA_STATUS NFA_RwI93GetMultiBlockSecurityStatus(
     uint8_t first_block_number, uint16_t number_blocks);
 
-#ifdef __cplusplus
-}
-#endif
-
 #endif /* NFA_RW_API_H */
diff --git a/src/nfa/int/nfa_rw_int.h b/src/nfa/include/nfa_rw_int.h
similarity index 100%
rename from src/nfa/int/nfa_rw_int.h
rename to src/nfa/include/nfa_rw_int.h
diff --git a/src/nfa/include/nfa_snep_api.h b/src/nfa/include/nfa_snep_api.h
index e63f19a..c723824 100644
--- a/src/nfa/include/nfa_snep_api.h
+++ b/src/nfa/include/nfa_snep_api.h
@@ -30,36 +30,15 @@
 /*****************************************************************************
 **  Constants and data types
 *****************************************************************************/
-#define NFA_SNEP_VERSION 0x10 /* SNEP Version 1.0          */
 
-/* send remaining fragments         */
-#define NFA_SNEP_REQ_CODE_CONTINUE 0x00
 /* return an NDEF message           */
 #define NFA_SNEP_REQ_CODE_GET 0x01
 /* accept an NDEF message           */
 #define NFA_SNEP_REQ_CODE_PUT 0x02
 /* do not send remaining fragments  */
-#define NFA_SNEP_REQ_CODE_REJECT 0x7F
 
 #define tNFA_SNEP_REQ_CODE uint8_t
 
-/* continue send remaining fragments    */
-#define NFA_SNEP_RESP_CODE_CONTINUE 0x80
-/* the operation succeeded              */
-#define NFA_SNEP_RESP_CODE_SUCCESS 0x81
-/* resource not found                   */
-#define NFA_SNEP_RESP_CODE_NOT_FOUND 0xC0
-/* resource exceeds data size limit     */
-#define NFA_SNEP_RESP_CODE_EXCESS_DATA 0xC1
-/* malformed request not understood     */
-#define NFA_SNEP_RESP_CODE_BAD_REQ 0xC2
-/* unsupported functionality requested  */
-#define NFA_SNEP_RESP_CODE_NOT_IMPLM 0xE0
-/* unsupported protocol version         */
-#define NFA_SNEP_RESP_CODE_UNSUPP_VER 0xE1
-/* do not send remaining fragments      */
-#define NFA_SNEP_RESP_CODE_REJECT 0xFF
-
 #define tNFA_SNEP_RESP_CODE uint8_t
 
 /* NFA SNEP callback events */
@@ -89,15 +68,8 @@
 /* GET response sent to client          */
 #define NFA_SNEP_GET_RESP_CMPL_EVT 0x0B
 
-/* SNEP default server is started       */
-#define NFA_SNEP_DEFAULT_SERVER_STARTED_EVT 0x0C
-/* SNEP default server is stopped       */
-#define NFA_SNEP_DEFAULT_SERVER_STOPPED_EVT 0x0D
-
 typedef uint8_t tNFA_SNEP_EVT;
 
-#define NFA_SNEP_ANY_SAP LLCP_INVALID_SAP
-
 /* Data for NFA_SNEP_REG_EVT */
 typedef struct {
   tNFA_STATUS status;
@@ -199,291 +171,4 @@
 /* NFA SNEP callback */
 typedef void(tNFA_SNEP_CBACK)(tNFA_SNEP_EVT event, tNFA_SNEP_EVT_DATA* p_data);
 
-/*****************************************************************************
-**  External Function Declarations
-*****************************************************************************/
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*******************************************************************************
-**
-** Function         NFA_SnepStartDefaultServer
-**
-** Description      This function is called to listen to SAP, 0x04 as SNEP
-**                  default server ("urn:nfc:sn:snep") on LLCP.
-**
-**                  NFA_SNEP_DEFAULT_SERVER_STARTED_EVT without data will be
-**                  returned.
-**
-** Note:            If RF discovery is started,
-**                  NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should
-**                  happen before calling this function
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-extern tNFA_STATUS NFA_SnepStartDefaultServer(tNFA_SNEP_CBACK* p_cback);
-
-/*******************************************************************************
-**
-** Function         NFA_SnepStopDefaultServer
-**
-** Description      This function is called to stop SNEP default server on LLCP.
-**
-**                  NFA_SNEP_DEFAULT_SERVER_STOPPED_EVT without data will be
-**                  returned.
-**
-** Note:            If RF discovery is started,
-**                  NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should
-**                  happen before calling this function
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-extern tNFA_STATUS NFA_SnepStopDefaultServer(tNFA_SNEP_CBACK* p_cback);
-
-/*******************************************************************************
-**
-** Function         NFA_SnepRegisterServer
-**
-** Description      This function is called to listen to a SAP as SNEP server.
-**
-**                  If server_sap is set to NFA_SNEP_ANY_SAP, then NFA will
-**                  allocate a SAP between LLCP_LOWER_BOUND_SDP_SAP and
-**                  LLCP_UPPER_BOUND_SDP_SAP
-**
-**                  NFC Forum default SNEP server ("urn:nfc:sn:snep") may be
-**                  launched by NFA_SnepStartDefaultServer ().
-**
-**                  NFA_SNEP_REG_EVT will be returned with status, handle and
-**                  service name.
-**
-** Note:            If RF discovery is started,
-**                  NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should
-**                  happen before calling this function
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_INVALID_PARAM if p_service_name or p_cback is
-**                  NULL
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-extern tNFA_STATUS NFA_SnepRegisterServer(uint8_t server_sap,
-                                          char* p_service_name,
-                                          tNFA_SNEP_CBACK* p_cback);
-
-/*******************************************************************************
-**
-** Function         NFA_SnepRegisterClient
-**
-** Description      This function is called to register SNEP client.
-**                  NFA_SNEP_REG_EVT will be returned with status, handle
-**                  and zero-length service name.
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_INVALID_PARAM if p_cback is NULL
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-extern tNFA_STATUS NFA_SnepRegisterClient(tNFA_SNEP_CBACK* p_cback);
-
-/*******************************************************************************
-**
-** Function         NFA_SnepDeregister
-**
-** Description      This function is called to stop listening as SNEP server
-**                  or SNEP client. Application shall use reg_handle returned in
-**                  NFA_SNEP_REG_EVT.
-**
-** Note:            If this function is called to de-register a SNEP server and
-**                  RF discovery is started,
-**                  NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should
-**                  happen before calling this function
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_BAD_HANDLE if handle is not valid
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-extern tNFA_STATUS NFA_SnepDeregister(tNFA_HANDLE reg_handle);
-
-/*******************************************************************************
-**
-** Function         NFA_SnepConnect
-**
-** Description      This function is called by client to create data link
-**                  connection to SNEP server on peer device.
-**
-**                  Client handle and service name of server to connect shall be
-**                  provided. A conn_handle will be returned in
-**                  NFA_SNEP_CONNECTED_EVT, if successfully connected. Otherwise
-**                  NFA_SNEP_DISC_EVT will be returned.
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_BAD_HANDLE if handle is not valid
-**                  NFA_STATUS_INVALID_PARAM if p_service_name or p_cback is
-**                  NULL
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-extern tNFA_STATUS NFA_SnepConnect(tNFA_HANDLE client_handle,
-                                   char* p_service_name);
-
-/*******************************************************************************
-**
-** Function         NFA_SnepGet
-**
-** Description      This function is called by client to send GET request.
-**
-**                  Application shall allocate a buffer and put NDEF message
-**                  with desired record type to get from server. NDEF message
-**                  from server will be returned in the same buffer with
-**                  NFA_SNEP_GET_RESP_EVT. The size of buffer will be used as
-**                  "Acceptable Length".
-**
-**                  NFA_SNEP_GET_RESP_EVT or NFA_SNEP_DISC_EVT will be returned
-**                  through registered p_cback. Application may free the buffer
-**                  after receiving these events.
-**
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_BAD_HANDLE if handle is not valid
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-extern tNFA_STATUS NFA_SnepGet(tNFA_HANDLE conn_handle, uint32_t buff_length,
-                               uint32_t ndef_length, uint8_t* p_ndef_buff);
-
-/*******************************************************************************
-**
-** Function         NFA_SnepPut
-**
-** Description      This function is called by client to send PUT request.
-**
-**                  Application shall allocate a buffer and put desired NDEF
-**                  message to send to server.
-**
-**                  NFA_SNEP_PUT_RESP_EVT or NFA_SNEP_DISC_EVT will be returned
-**                  through p_cback. Application may free the buffer after
-**                  receiving these events.
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_BAD_HANDLE if handle is not valid
-**                  NFA_STATUS_INVALID_PARAM if p_service_name or p_cback is
-**                  NULL
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-extern tNFA_STATUS NFA_SnepPut(tNFA_HANDLE conn_handle, uint32_t ndef_length,
-                               uint8_t* p_ndef_buff);
-
-/*******************************************************************************
-**
-** Function         NFA_SnepGetResponse
-**
-** Description      This function is called by server to send response of GET
-**                  request.
-**
-**                  When server application receives NFA_SNEP_ALLOC_BUFF_EVT,
-**                  it shall allocate a buffer for incoming NDEF message and
-**                  pass the pointer within callback context. This buffer will
-**                  be returned with NFA_SNEP_GET_REQ_EVT after receiving
-**                  complete NDEF message. If buffer is not allocated,
-**                  NFA_SNEP_RESP_CODE_NOT_FOUND (Note:There is no proper
-**                  response code for this case) or NFA_SNEP_RESP_CODE_REJECT
-**                  will be sent to client.
-**
-**                  Server application shall provide conn_handle which is
-**                  received in NFA_SNEP_GET_REQ_EVT.
-**
-**                  Server application shall allocate a buffer and put NDEF
-**                  message if response code is NFA_SNEP_RESP_CODE_SUCCESS.
-**                  Otherwise, ndef_length shall be set to zero.
-**
-**                  NFA_SNEP_GET_RESP_CMPL_EVT or NFA_SNEP_DISC_EVT will be
-**                  returned through registered callback function. Application
-**                  may free the buffer after receiving these events.
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_BAD_HANDLE if handle is not valid
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-extern tNFA_STATUS NFA_SnepGetResponse(tNFA_HANDLE conn_handle,
-                                       tNFA_SNEP_RESP_CODE resp_code,
-                                       uint32_t ndef_length,
-                                       uint8_t* p_ndef_buff);
-
-/*******************************************************************************
-**
-** Function         NFA_SnepPutResponse
-**
-** Description      This function is called by server to send response of PUT
-**                  request.
-**
-**                  When server application receives NFA_SNEP_ALLOC_BUFF_EVT,
-**                  it shall allocate a buffer for incoming NDEF message and
-**                  pass the pointer within callback context. This buffer will
-**                  be returned with NFA_SNEP_PUT_REQ_EVT after receiving
-**                  complete NDEF message.  If buffer is not allocated,
-**                  NFA_SNEP_RESP_CODE_REJECT will be sent to client or NFA will
-**                  discard request and send NFA_SNEP_RESP_CODE_SUCCESS
-**                  (Note:There is no proper response code for this case).
-**
-**                  Server application shall provide conn_handle which is
-**                  received in NFA_SNEP_PUT_REQ_EVT.
-**
-**                  NFA_SNEP_DISC_EVT will be returned through registered
-**                  callback function when client disconnects data link
-**                  connection.
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_BAD_HANDLE if handle is not valid
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-extern tNFA_STATUS NFA_SnepPutResponse(tNFA_HANDLE conn_handle,
-                                       tNFA_SNEP_RESP_CODE resp_code);
-
-/*******************************************************************************
-**
-** Function         NFA_SnepDisconnect
-**
-** Description      This function is called to disconnect data link connection.
-**                  discard any pending data if flush is set to TRUE
-**
-**                  Client application shall provide conn_handle in
-**                  NFA_SNEP_GET_RESP_EVT or NFA_SNEP_PUT_RESP_EVT.
-**
-**                  Server application shall provide conn_handle in
-**                  NFA_SNEP_GET_REQ_EVT or NFA_SNEP_PUT_REQ_EVT.
-**
-**                  NFA_SNEP_DISC_EVT will be returned
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_BAD_HANDLE if handle is not valid
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-extern tNFA_STATUS NFA_SnepDisconnect(tNFA_HANDLE conn_handle, bool flush);
-
-/*******************************************************************************
-**
-** Function         NFA_SnepSetTraceLevel
-**
-** Description      This function sets the trace level for SNEP.  If called with
-**                  a value of 0xFF, it simply returns the current trace level.
-**
-** Returns          The new or current trace level
-**
-*******************************************************************************/
-extern uint8_t NFA_SnepSetTraceLevel(uint8_t new_level);
-
-#ifdef __cplusplus
-}
-#endif
-
 #endif /* NFA_P2P_API_H */
diff --git a/src/nfa/int/nfa_snep_int.h b/src/nfa/include/nfa_snep_int.h
similarity index 80%
rename from src/nfa/int/nfa_snep_int.h
rename to src/nfa/include/nfa_snep_int.h
index d4db0aa..83f6cb5 100644
--- a/src/nfa/int/nfa_snep_int.h
+++ b/src/nfa/include/nfa_snep_int.h
@@ -31,11 +31,7 @@
 /*****************************************************************************
 **  Constants and data types
 *****************************************************************************/
-#define NFA_SNEP_DEFAULT_SERVER_SAP 0x04 /* SNEP default server SAP   */
-#define NFA_SNEP_HEADER_SIZE 6           /* SNEP header size          */
 /* SNEP Acceptable Length size */
-#define NFA_SNEP_ACCEPT_LEN_SIZE 4
-#define NFA_SNEP_CLIENT_TIMEOUT 1000 /* ms, waiting for response  */
 
 /* NFA SNEP events */
 enum {
@@ -49,9 +45,8 @@
   NFA_SNEP_API_PUT_REQ_EVT,
   NFA_SNEP_API_GET_RESP_EVT,
   NFA_SNEP_API_PUT_RESP_EVT,
-  NFA_SNEP_API_DISCONNECT_EVT,
+  NFA_SNEP_API_DISCONNECT_EVT
 
-  NFA_SNEP_LAST_EVT
 };
 
 /* data type for NFA_SNEP_API_START_DEFAULT_SERVER_EVT */
@@ -157,17 +152,10 @@
 
 /* NFA SNEP service control block */
 /* ignore flags while searching   */
-#define NFA_SNEP_FLAG_ANY 0x00
-#define NFA_SNEP_FLAG_SERVER 0x01 /* server */
-#define NFA_SNEP_FLAG_CLIENT 0x02 /* client */
 /* waiting for connection confirm */
-#define NFA_SNEP_FLAG_CONNECTING 0x04
 /* data link connected            */
-#define NFA_SNEP_FLAG_CONNECTED 0x08
 /* Waiting for continue response  */
-#define NFA_SNEP_FLAG_W4_RESP_CONTINUE 0x10
 /* Waiting for continue request   */
-#define NFA_SNEP_FLAG_W4_REQ_CONTINUE 0x20
 
 typedef struct {
   uint8_t local_sap;        /* local SAP of service */
@@ -197,7 +185,6 @@
   tNFA_SNEP_CONN conn[NFA_SNEP_MAX_CONN];
   bool listen_enabled;
   bool is_dta_mode;
-  uint8_t trace_level;
 } tNFA_SNEP_CB;
 
 /*
@@ -236,38 +223,6 @@
 **  nfa_snep_main.c
 */
 void nfa_snep_init(bool is_dta_mode);
-/*
-**  nfa_snep_default.c
-*/
-void nfa_snep_default_init(void);
-bool nfa_snep_start_default_server(tNFA_SNEP_MSG* p_msg);
-bool nfa_snep_stop_default_server(tNFA_SNEP_MSG* p_msg);
-/*
-**  nfa_snep_srv.c
-*/
-uint8_t nfa_snep_allocate_cb(void);
-void nfa_snep_deallocate_cb(uint8_t xx);
-void nfa_snep_send_msg(uint8_t opcode, uint8_t dlink);
-
-void nfa_snep_llcp_cback(tLLCP_SAP_CBACK_DATA* p_data);
-void nfa_snep_proc_llcp_data_ind(tLLCP_SAP_CBACK_DATA* p_data);
-void nfa_snep_proc_llcp_connect_ind(tLLCP_SAP_CBACK_DATA* p_data);
-void nfa_snep_proc_llcp_connect_resp(tLLCP_SAP_CBACK_DATA* p_data);
-void nfa_snep_proc_llcp_disconnect_ind(tLLCP_SAP_CBACK_DATA* p_data);
-void nfa_snep_proc_llcp_disconnect_resp(tLLCP_SAP_CBACK_DATA* p_data);
-void nfa_snep_proc_llcp_congest(tLLCP_SAP_CBACK_DATA* p_data);
-void nfa_snep_proc_llcp_link_status(tLLCP_SAP_CBACK_DATA* p_data);
-void nfa_snep_proc_llcp_tx_complete(tLLCP_SAP_CBACK_DATA* p_data);
-
-bool nfa_snep_reg_server(tNFA_SNEP_MSG* p_msg);
-bool nfa_snep_reg_client(tNFA_SNEP_MSG* p_msg);
-bool nfa_snep_dereg(tNFA_SNEP_MSG* p_msg);
-bool nfa_snep_connect(tNFA_SNEP_MSG* p_msg);
-bool nfa_snep_put_resp(tNFA_SNEP_MSG* p_msg);
-bool nfa_snep_get_resp(tNFA_SNEP_MSG* p_msg);
-bool nfa_snep_put_req(tNFA_SNEP_MSG* p_msg);
-bool nfa_snep_get_req(tNFA_SNEP_MSG* p_msg);
-bool nfa_snep_disconnect(tNFA_SNEP_MSG* p_msg);
 
 #endif /* (NFA_SNEP_INCLUDED == TRUE) */
 #endif /* NFA_SNEP_INT_H */
diff --git a/src/nfa/int/nfa_sys.h b/src/nfa/include/nfa_sys.h
similarity index 95%
rename from src/nfa/int/nfa_sys.h
rename to src/nfa/include/nfa_sys.h
index 62472ca..42d8464 100644
--- a/src/nfa/int/nfa_sys.h
+++ b/src/nfa/include/nfa_sys.h
@@ -61,7 +61,6 @@
 /* function type for processing the change of NFCC power mode */
 typedef void(tNFA_SYS_PROC_NFCC_PWR_MODE)(uint8_t nfcc_power_mode);
 
-typedef void(tNFA_SYS_CBACK)(void);
 typedef void(tNFA_SYS_ENABLE_CBACK)(void);
 typedef void(tNFA_SYS_PROC_NFCC_PWR_MODE_CMPL)(void);
 
@@ -78,7 +77,6 @@
   uint16_t mbox_evt;   /* GKI mailbox event */
   uint8_t mbox;        /* GKI mailbox id */
   uint8_t timer;       /* GKI timer id */
-  uint8_t trace_level; /* initial trace level */
 } tNFA_SYS_CFG;
 
 /*****************************************************************************
@@ -96,15 +94,10 @@
 **  Function declarations
 *****************************************************************************/
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 extern void nfa_sys_init(void);
 extern void nfa_sys_event(NFC_HDR* p_msg);
 extern void nfa_sys_timer_update(void);
 extern void nfa_sys_disable_timers(void);
-extern void nfa_sys_set_trace_level(uint8_t level);
 
 extern void nfa_sys_register(uint8_t id, const tNFA_SYS_REG* p_reg);
 extern void nfa_sys_deregister(uint8_t id);
@@ -127,8 +120,4 @@
     tNFA_SYS_PROC_NFCC_PWR_MODE_CMPL* p_cback);
 extern void nfa_sys_cback_notify_nfcc_power_mode_proc_complete(uint8_t id);
 
-#ifdef __cplusplus
-}
-#endif
-
 #endif /* NFA_SYS_H */
diff --git a/src/nfa/int/nfa_sys_int.h b/src/nfa/include/nfa_sys_int.h
similarity index 96%
rename from src/nfa/int/nfa_sys_int.h
rename to src/nfa/include/nfa_sys_int.h
index c93b3f4..e040b1b 100644
--- a/src/nfa/int/nfa_sys_int.h
+++ b/src/nfa/include/nfa_sys_int.h
@@ -53,7 +53,6 @@
 
   bool graceful_disable; /* TRUE if NFA_Disable () is called with TRUE */
   bool timers_disabled;  /* TRUE if sys timers disabled */
-  uint8_t trace_level;   /* Trace level */
 } tNFA_SYS_CB;
 
 /*****************************************************************************
@@ -66,6 +65,4 @@
 /* system manager configuration structure */
 extern tNFA_SYS_CFG* p_nfa_sys_cfg;
 
-bool nfa_sys_sm_execute(NFC_HDR* p_msg);
-
 #endif /* NFA_SYS_INT_H */
diff --git a/src/nfa/int/nfa_sys_ptim.h b/src/nfa/include/nfa_sys_ptim.h
similarity index 97%
rename from src/nfa/int/nfa_sys_ptim.h
rename to src/nfa/include/nfa_sys_ptim.h
index 0549f63..1582012 100644
--- a/src/nfa/int/nfa_sys_ptim.h
+++ b/src/nfa/include/nfa_sys_ptim.h
@@ -37,10 +37,6 @@
   uint8_t timer_id;         /* GKI timer id */
 } tPTIM_CB;
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 /*****************************************************************************
 **  Function Declarations
 *****************************************************************************/
@@ -92,8 +88,4 @@
 *******************************************************************************/
 extern void nfa_sys_ptim_stop_timer(tPTIM_CB* p_cb, TIMER_LIST_ENT* p_tle);
 
-#ifdef __cplusplus
-}
-#endif
-
 #endif /* NFA_SYS_PTIM_H */
diff --git a/src/nfa/p2p/nfa_p2p_act.c b/src/nfa/p2p/nfa_p2p_act.cc
similarity index 92%
rename from src/nfa/p2p/nfa_p2p_act.c
rename to src/nfa/p2p/nfa_p2p_act.cc
index efac872..0d8c8e4 100644
--- a/src/nfa/p2p/nfa_p2p_act.c
+++ b/src/nfa/p2p/nfa_p2p_act.cc
@@ -21,16 +21,17 @@
  *  This is the implementation file for the NFA P2P.
  *
  ******************************************************************************/
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
 
 #include "llcp_api.h"
-#include "llcp_defs.h"
 #include "nfa_dm_int.h"
 #include "nfa_p2p_api.h"
 #include "nfa_p2p_int.h"
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
-#include "nfc_api.h"
-#include "string.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 /*****************************************************************************
 **  Global Variables
@@ -66,7 +67,7 @@
     }
   }
 
-  P2P_TRACE_ERROR0("nfa_p2p_allocate_conn_cb (): No resource");
+  LOG(ERROR) << StringPrintf("No resource");
 
   return LLCP_MAX_DATA_LINK;
 }
@@ -85,7 +86,7 @@
   if (xx < LLCP_MAX_DATA_LINK) {
     nfa_p2p_cb.conn_cb[xx].flags = 0;
   } else {
-    P2P_TRACE_ERROR1("nfa_p2p_deallocate_conn_cb (): Invalid index (%d)", xx);
+    LOG(ERROR) << StringPrintf("Invalid index (%d)", xx);
   }
 }
 
@@ -124,8 +125,9 @@
 **
 *******************************************************************************/
 static void nfa_p2p_llcp_cback(tLLCP_SAP_CBACK_DATA* p_data) {
-  P2P_TRACE_DEBUG2("nfa_p2p_llcp_cback (): event:0x%02X, local_sap:0x%02X",
-                   p_data->hdr.event, p_data->hdr.local_sap);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("event:0x%02X, local_sap:0x%02X", p_data->hdr.event,
+                      p_data->hdr.local_sap);
 
   switch (p_data->hdr.event) {
     case LLCP_SAP_EVT_DATA_IND:
@@ -157,8 +159,7 @@
       break;
 
     default:
-      P2P_TRACE_ERROR1("nfa_p2p_llcp_cback (): Unknown event:0x%02X",
-                       p_data->hdr.event);
+      LOG(ERROR) << StringPrintf("Unknown event:0x%02X", p_data->hdr.event);
       return;
   }
 }
@@ -178,8 +179,8 @@
   uint8_t xx;
   tNFA_P2P_EVT_DATA evt_data;
 
-  P2P_TRACE_DEBUG2("nfa_p2p_sdp_cback (): tid:0x%02X, remote_sap:0x%02X", tid,
-                   remote_sap);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("tid:0x%02X, remote_sap:0x%02X", tid, remote_sap);
 
   /* search for callback function to process */
   for (xx = 0; xx < LLCP_MAX_SDP_TRANSAC; xx++) {
@@ -210,7 +211,7 @@
 bool nfa_p2p_start_sdp(char* p_service_name, uint8_t local_sap) {
   int xx;
 
-  P2P_TRACE_DEBUG1("nfa_p2p_start_sdp (): SN:<%s>", p_service_name);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("SN:<%s>", p_service_name);
 
   /* search for empty slot */
   for (xx = 0; xx < LLCP_MAX_SDP_TRANSAC; xx++) {
@@ -243,7 +244,7 @@
   uint8_t local_sap, xx;
   tNFA_P2P_EVT_DATA evt_data;
 
-  P2P_TRACE_DEBUG0("nfa_p2p_proc_llcp_data_ind ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   local_sap = p_data->data_ind.local_sap;
 
@@ -285,8 +286,8 @@
   tNFA_P2P_EVT_DATA evt_data;
   uint8_t xx;
 
-  P2P_TRACE_DEBUG1("nfa_p2p_proc_llcp_connect_ind () server_sap:0x%x",
-                   p_data->connect_ind.server_sap);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("server_sap:0x%x", p_data->connect_ind.server_sap);
 
   server_sap = p_data->connect_ind.server_sap;
   local_sap = p_data->connect_ind.local_sap;
@@ -312,7 +313,7 @@
       nfa_p2p_cb.sap_cb[server_sap].p_cback(NFA_P2P_CONN_REQ_EVT, &evt_data);
     }
   } else {
-    P2P_TRACE_ERROR0("nfa_p2p_proc_llcp_connect_ind (): Not registered");
+    LOG(ERROR) << StringPrintf("Not registered");
   }
 }
 
@@ -330,7 +331,7 @@
   uint8_t local_sap, xx;
   tNFA_P2P_EVT_DATA evt_data;
 
-  P2P_TRACE_DEBUG0("nfa_p2p_proc_llcp_connect_resp ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   local_sap = p_data->connect_resp.local_sap;
 
@@ -371,7 +372,7 @@
   uint8_t local_sap, xx;
   tNFA_P2P_EVT_DATA evt_data;
 
-  P2P_TRACE_DEBUG0("nfa_p2p_proc_llcp_disconnect_ind ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   local_sap = p_data->disconnect_ind.local_sap;
 
@@ -399,7 +400,7 @@
 
       nfa_p2p_cb.sap_cb[local_sap].p_cback(NFA_P2P_DISC_EVT, &evt_data);
 
-      P2P_TRACE_ERROR0("nfa_p2p_proc_llcp_disconnect_ind (): Link deactivated");
+      LOG(ERROR) << StringPrintf("Link deactivated");
     }
   }
 }
@@ -418,7 +419,7 @@
   uint8_t local_sap, xx;
   tNFA_P2P_EVT_DATA evt_data;
 
-  P2P_TRACE_DEBUG0("nfa_p2p_proc_llcp_disconnect_resp ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   local_sap = p_data->disconnect_resp.local_sap;
 
@@ -458,8 +459,7 @@
 
         nfa_p2p_cb.sap_cb[local_sap].p_cback(NFA_P2P_DISC_EVT, &evt_data);
       } else {
-        P2P_TRACE_ERROR0(
-            "nfa_p2p_proc_llcp_disconnect_resp (): No connection found");
+        LOG(ERROR) << StringPrintf("No connection found");
       }
     } else {
       evt_data.disc.handle = (NFA_HANDLE_GROUP_P2P | local_sap);
@@ -489,12 +489,12 @@
   evt_data.congest.is_congested = p_data->congest.is_congested;
 
   if (p_data->congest.is_congested) {
-    P2P_TRACE_DEBUG2("nfa_p2p_proc_llcp_congestion () START SAP=(0x%x,0x%x)",
-                     local_sap, remote_sap);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("START SAP=(0x%x,0x%x)", local_sap, remote_sap);
 
   } else {
-    P2P_TRACE_DEBUG2("nfa_p2p_proc_llcp_congestion () END SAP=(0x%x,0x%x)",
-                     local_sap, remote_sap);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("END SAP=(0x%x,0x%x)", local_sap, remote_sap);
   }
 
   if (nfa_p2p_cb.sap_cb[local_sap].p_cback) {
@@ -532,8 +532,7 @@
           nfa_p2p_cb.sap_cb[local_sap].p_cback(NFA_P2P_CONGEST_EVT, &evt_data);
         }
       } else {
-        P2P_TRACE_ERROR0(
-            "nfa_p2p_proc_llcp_congestion (): No connection found");
+        LOG(ERROR) << StringPrintf("No connection found");
       }
     }
   }
@@ -553,8 +552,8 @@
   uint8_t local_sap, xx;
   tNFA_P2P_EVT_DATA evt_data;
 
-  P2P_TRACE_DEBUG1("nfa_p2p_proc_llcp_link_status () is_activated:%d",
-                   p_data->link_status.is_activated);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("is_activated:%d", p_data->link_status.is_activated);
 
   local_sap = p_data->link_status.local_sap;
 
@@ -615,7 +614,7 @@
   tNFA_P2P_EVT_DATA evt_data;
   uint8_t server_sap;
 
-  P2P_TRACE_DEBUG0("nfa_p2p_reg_server ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   server_sap = LLCP_RegisterServer(
       p_msg->api_reg_server.server_sap, p_msg->api_reg_server.link_type,
@@ -679,7 +678,7 @@
   tNFA_P2P_EVT_DATA evt_data;
   uint8_t local_sap;
 
-  P2P_TRACE_DEBUG0("nfa_p2p_reg_client ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   local_sap =
       LLCP_RegisterClient(p_msg->api_reg_client.link_type, nfa_p2p_llcp_cback);
@@ -723,7 +722,7 @@
 bool nfa_p2p_dereg(tNFA_P2P_MSG* p_msg) {
   uint8_t local_sap, xx;
 
-  P2P_TRACE_DEBUG0("nfa_p2p_dereg ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   local_sap = (uint8_t)(p_msg->api_dereg.handle & NFA_HANDLE_MASK);
 
@@ -778,7 +777,7 @@
   uint8_t xx;
   tLLCP_CONNECTION_PARAMS params;
 
-  P2P_TRACE_DEBUG0("nfa_p2p_accept_connection ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   xx = (uint8_t)(p_msg->api_accept.conn_handle & NFA_HANDLE_MASK);
   xx &= ~NFA_P2P_HANDLE_FLAG_CONN;
@@ -806,7 +805,7 @@
 bool nfa_p2p_reject_connection(tNFA_P2P_MSG* p_msg) {
   uint8_t xx;
 
-  P2P_TRACE_DEBUG0("nfa_p2p_reject_connection ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   xx = (uint8_t)(p_msg->api_reject.conn_handle & NFA_HANDLE_MASK);
   xx &= ~NFA_P2P_HANDLE_FLAG_CONN;
@@ -836,7 +835,7 @@
   tLLCP_STATUS status;
   tNFA_P2P_EVT_DATA evt_data;
 
-  P2P_TRACE_DEBUG0("nfa_p2p_disconnect ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   xx = (uint8_t)(p_msg->api_disconnect.conn_handle & NFA_HANDLE_MASK);
 
@@ -868,7 +867,7 @@
       }
     }
   } else {
-    P2P_TRACE_ERROR0("Handle is not for Data link connection");
+    LOG(ERROR) << StringPrintf("Handle is not for Data link connection");
   }
 
   return true;
@@ -890,7 +889,7 @@
   tLLCP_CONNECTION_PARAMS conn_params;
   tLLCP_STATUS status;
 
-  P2P_TRACE_DEBUG0("nfa_p2p_create_data_link_connection ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   local_sap = (uint8_t)(p_msg->api_connect.client_handle & NFA_HANDLE_MASK);
 
@@ -935,7 +934,7 @@
   tLLCP_STATUS status;
   tNFA_P2P_EVT_DATA evt_data;
 
-  P2P_TRACE_DEBUG0("nfa_p2p_send_ui ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   local_sap = (uint8_t)(p_msg->api_send_ui.handle & NFA_HANDLE_MASK);
 
@@ -981,7 +980,7 @@
   tLLCP_STATUS status;
   uint8_t xx;
 
-  P2P_TRACE_DEBUG0("nfa_p2p_send_data ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   xx = (uint8_t)(p_msg->api_send_data.conn_handle & NFA_HANDLE_MASK);
   xx &= ~NFA_P2P_HANDLE_FLAG_CONN;
@@ -1028,7 +1027,7 @@
 bool nfa_p2p_set_local_busy(tNFA_P2P_MSG* p_msg) {
   uint8_t xx;
 
-  P2P_TRACE_DEBUG0("nfa_p2p_set_local_busy ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   xx = (uint8_t)(p_msg->api_local_busy.conn_handle & NFA_HANDLE_MASK);
   xx &= ~NFA_P2P_HANDLE_FLAG_CONN;
@@ -1054,7 +1053,7 @@
   tNFA_P2P_EVT_DATA evt_data;
   uint8_t local_sap;
 
-  P2P_TRACE_DEBUG0("nfa_p2p_get_link_info ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   evt_data.link_info.handle = p_msg->api_link_info.handle;
   evt_data.link_info.wks = LLCP_GetRemoteWKS();
@@ -1081,7 +1080,7 @@
   tNFA_P2P_EVT_DATA evt_data;
   uint8_t local_sap;
 
-  P2P_TRACE_DEBUG0("nfa_p2p_get_remote_sap ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   local_sap = (uint8_t)(p_msg->api_remote_sap.handle & NFA_HANDLE_MASK);
 
@@ -1127,8 +1126,8 @@
 ** Returns          TRUE to deallocate buffer
 **
 *******************************************************************************/
-bool nfa_p2p_restart_rf_discovery(tNFA_P2P_MSG* p_msg) {
-  P2P_TRACE_DEBUG0("nfa_p2p_restart_rf_discovery ()");
+bool nfa_p2p_restart_rf_discovery(__attribute__((unused)) tNFA_P2P_MSG* p_msg) {
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   nfa_dm_rf_deactivate(NFA_DEACTIVATE_TYPE_IDLE);
 
diff --git a/src/nfa/p2p/nfa_p2p_api.c b/src/nfa/p2p/nfa_p2p_api.cc
similarity index 83%
rename from src/nfa/p2p/nfa_p2p_api.c
rename to src/nfa/p2p/nfa_p2p_api.cc
index c676701..2c0dc0b 100644
--- a/src/nfa/p2p/nfa_p2p_api.c
+++ b/src/nfa/p2p/nfa_p2p_api.cc
@@ -21,14 +21,15 @@
  *  NFA interface to LLCP
  *
  ******************************************************************************/
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "nfa_p2p_api.h"
-#include <string.h>
-#include "llcp_api.h"
-#include "llcp_defs.h"
 #include "nfa_p2p_int.h"
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
-#include "nfc_api.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 /*****************************************************************************
 **  Constants
@@ -65,22 +66,19 @@
                                   tNFA_P2P_CBACK* p_cback) {
   tNFA_P2P_API_REG_SERVER* p_msg;
 
-  P2P_TRACE_API3(
-      "NFA_P2pRegisterServer (): server_sap:0x%02x, link_type:0x%x, SN:<%s>",
-      server_sap, link_type, p_service_name);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("server_sap:0x%02x, link_type:0x%x, SN:<%s>", server_sap,
+                      link_type, p_service_name);
 
   if ((server_sap != NFA_P2P_ANY_SAP) &&
       ((server_sap <= LLCP_SAP_SDP) ||
        (server_sap > LLCP_UPPER_BOUND_SDP_SAP))) {
-    P2P_TRACE_ERROR2(
-        "NFA_P2pRegisterServer (): server_sap must be between %d and %d",
-        LLCP_SAP_SDP + 1, LLCP_UPPER_BOUND_SDP_SAP);
+    LOG(ERROR) << StringPrintf("server_sap must be between %d and %d",
+                               LLCP_SAP_SDP + 1, LLCP_UPPER_BOUND_SDP_SAP);
     return (NFA_STATUS_FAILED);
   } else if (((link_type & NFA_P2P_LLINK_TYPE) == 0x00) &&
              ((link_type & NFA_P2P_DLINK_TYPE) == 0x00)) {
-    P2P_TRACE_ERROR1(
-        "NFA_P2pRegisterServer(): link type (0x%x) must be specified",
-        link_type);
+    LOG(ERROR) << StringPrintf("link type (0x%x) must be specified", link_type);
     return (NFA_STATUS_FAILED);
   }
 
@@ -124,13 +122,11 @@
                                   tNFA_P2P_CBACK* p_cback) {
   tNFA_P2P_API_REG_CLIENT* p_msg;
 
-  P2P_TRACE_API1("NFA_P2pRegisterClient (): link_type:0x%x", link_type);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("link_type:0x%x", link_type);
 
   if (((link_type & NFA_P2P_LLINK_TYPE) == 0x00) &&
       ((link_type & NFA_P2P_DLINK_TYPE) == 0x00)) {
-    P2P_TRACE_ERROR1(
-        "NFA_P2pRegisterClient (): link type (0x%x) must be specified",
-        link_type);
+    LOG(ERROR) << StringPrintf("link type (0x%x) must be specified", link_type);
     return (NFA_STATUS_FAILED);
   }
 
@@ -170,13 +166,12 @@
   tNFA_P2P_API_DEREG* p_msg;
   tNFA_HANDLE xx;
 
-  P2P_TRACE_API1("NFA_P2pDeregister (): handle:0x%02X", handle);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("handle:0x%02X", handle);
 
   xx = handle & NFA_HANDLE_MASK;
 
   if ((xx >= NFA_P2P_NUM_SAP) || (nfa_p2p_cb.sap_cb[xx].p_cback == NULL)) {
-    P2P_TRACE_ERROR0(
-        "NFA_P2pDeregister (): Handle is invalid or not registered");
+    LOG(ERROR) << StringPrintf("Handle is invalid or not registered");
     return (NFA_STATUS_BAD_HANDLE);
   }
 
@@ -211,26 +206,26 @@
   tNFA_P2P_API_ACCEPT_CONN* p_msg;
   tNFA_HANDLE xx;
 
-  P2P_TRACE_API3("NFA_P2pAcceptConn (): handle:0x%02X, MIU:%d, RW:%d", handle,
-                 miu, rw);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("handle:0x%02X, MIU:%d, RW:%d", handle, miu, rw);
 
   xx = handle & NFA_HANDLE_MASK;
 
   if (!(xx & NFA_P2P_HANDLE_FLAG_CONN)) {
-    P2P_TRACE_ERROR0("NFA_P2pAcceptConn (): Connection Handle is not valid");
+    LOG(ERROR) << StringPrintf("Connection Handle is not valid");
     return (NFA_STATUS_BAD_HANDLE);
   } else {
     xx &= ~NFA_P2P_HANDLE_FLAG_CONN;
   }
 
   if ((xx >= LLCP_MAX_DATA_LINK) || (nfa_p2p_cb.conn_cb[xx].flags == 0)) {
-    P2P_TRACE_ERROR0("NFA_P2pAcceptConn (): Connection Handle is not valid");
+    LOG(ERROR) << StringPrintf("Connection Handle is not valid");
     return (NFA_STATUS_BAD_HANDLE);
   }
 
   if ((miu < LLCP_DEFAULT_MIU) || (nfa_p2p_cb.local_link_miu < miu)) {
-    P2P_TRACE_ERROR3("NFA_P2pAcceptConn (): MIU(%d) must be between %d and %d",
-                     miu, LLCP_DEFAULT_MIU, nfa_p2p_cb.local_link_miu);
+    LOG(ERROR) << StringPrintf("MIU(%d) must be between %d and %d", miu,
+                               LLCP_DEFAULT_MIU, nfa_p2p_cb.local_link_miu);
   } else if ((p_msg = (tNFA_P2P_API_ACCEPT_CONN*)GKI_getbuf(
                   sizeof(tNFA_P2P_API_ACCEPT_CONN))) != NULL) {
     p_msg->hdr.event = NFA_P2P_API_ACCEPT_CONN_EVT;
@@ -264,19 +259,19 @@
   tNFA_P2P_API_REJECT_CONN* p_msg;
   tNFA_HANDLE xx;
 
-  P2P_TRACE_API1("NFA_P2pRejectConn (): handle:0x%02X", handle);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("handle:0x%02X", handle);
 
   xx = handle & NFA_HANDLE_MASK;
 
   if (!(xx & NFA_P2P_HANDLE_FLAG_CONN)) {
-    P2P_TRACE_ERROR0("NFA_P2pRejectConn (): Connection Handle is not valid");
+    LOG(ERROR) << StringPrintf("Connection Handle is not valid");
     return (NFA_STATUS_BAD_HANDLE);
   } else {
     xx &= ~NFA_P2P_HANDLE_FLAG_CONN;
   }
 
   if ((xx >= LLCP_MAX_DATA_LINK) || (nfa_p2p_cb.conn_cb[xx].flags == 0)) {
-    P2P_TRACE_ERROR0("NFA_P2pRejectConn (): Connection Handle is not valid");
+    LOG(ERROR) << StringPrintf("Connection Handle is not valid");
     return (NFA_STATUS_BAD_HANDLE);
   }
 
@@ -316,8 +311,8 @@
   tNFA_P2P_API_DISCONNECT* p_msg;
   tNFA_HANDLE xx;
 
-  P2P_TRACE_API2("NFA_P2pDisconnect (): handle:0x%02X, flush=%d", handle,
-                 flush);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("handle:0x%02X, flush=%d", handle, flush);
 
   xx = handle & NFA_HANDLE_MASK;
 
@@ -325,11 +320,11 @@
     xx &= ~NFA_P2P_HANDLE_FLAG_CONN;
 
     if ((xx >= LLCP_MAX_DATA_LINK) || (nfa_p2p_cb.conn_cb[xx].flags == 0)) {
-      P2P_TRACE_ERROR0("NFA_P2pDisconnect (): Connection Handle is not valid");
+      LOG(ERROR) << StringPrintf("Connection Handle is not valid");
       return (NFA_STATUS_BAD_HANDLE);
     }
   } else {
-    P2P_TRACE_ERROR0("NFA_P2pDisconnect (): Handle is not valid");
+    LOG(ERROR) << StringPrintf("Handle is not valid");
     return (NFA_STATUS_BAD_HANDLE);
   }
 
@@ -368,22 +363,22 @@
   tNFA_P2P_API_CONNECT* p_msg;
   tNFA_HANDLE xx;
 
-  P2P_TRACE_API4(
-      "NFA_P2pConnectByName (): client_handle:0x%x, SN:<%s>, MIU:%d, RW:%d",
-      client_handle, p_service_name, miu, rw);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("client_handle:0x%x, SN:<%s>, MIU:%d, RW:%d",
+                      client_handle, p_service_name, miu, rw);
 
   xx = client_handle & NFA_HANDLE_MASK;
 
   if ((xx >= NFA_P2P_NUM_SAP) || (nfa_p2p_cb.sap_cb[xx].p_cback == NULL)) {
-    P2P_TRACE_ERROR0("NFA_P2pConnectByName (): Client Handle is not valid");
+    LOG(ERROR) << StringPrintf("Client Handle is not valid");
     return (NFA_STATUS_BAD_HANDLE);
   }
 
   if ((miu < LLCP_DEFAULT_MIU) ||
       (nfa_p2p_cb.llcp_state != NFA_P2P_LLCP_STATE_ACTIVATED) ||
       (nfa_p2p_cb.local_link_miu < miu)) {
-    P2P_TRACE_ERROR3(
-        "NFA_P2pConnectByName (): MIU(%d) must be between %d and %d or LLCP "
+    LOG(ERROR) << StringPrintf(
+        "MIU(%d) must be between %d and %d or LLCP "
         "link is not activated",
         miu, LLCP_DEFAULT_MIU, nfa_p2p_cb.local_link_miu);
   } else if ((p_msg = (tNFA_P2P_API_CONNECT*)GKI_getbuf(
@@ -425,22 +420,22 @@
   tNFA_P2P_API_CONNECT* p_msg;
   tNFA_HANDLE xx;
 
-  P2P_TRACE_API4(
-      "NFA_P2pConnectBySap (): client_handle:0x%x, DSAP:0x%02X, MIU:%d, RW:%d",
-      client_handle, dsap, miu, rw);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("client_handle:0x%x, DSAP:0x%02X, MIU:%d, RW:%d",
+                      client_handle, dsap, miu, rw);
 
   xx = client_handle & NFA_HANDLE_MASK;
 
   if ((xx >= NFA_P2P_NUM_SAP) || (nfa_p2p_cb.sap_cb[xx].p_cback == NULL)) {
-    P2P_TRACE_ERROR0("NFA_P2pConnectBySap (): Client Handle is not valid");
+    LOG(ERROR) << StringPrintf("Client Handle is not valid");
     return (NFA_STATUS_BAD_HANDLE);
   }
 
   if ((miu < LLCP_DEFAULT_MIU) ||
       (nfa_p2p_cb.llcp_state != NFA_P2P_LLCP_STATE_ACTIVATED) ||
       (nfa_p2p_cb.local_link_miu < miu)) {
-    P2P_TRACE_ERROR3(
-        "NFA_P2pConnectBySap (): MIU(%d) must be between %d and %d, or LLCP "
+    LOG(ERROR) << StringPrintf(
+        "MIU(%d) must be between %d and %d, or LLCP "
         "link is not activated",
         miu, LLCP_DEFAULT_MIU, nfa_p2p_cb.local_link_miu);
   } else if ((p_msg = (tNFA_P2P_API_CONNECT*)GKI_getbuf(
@@ -483,26 +478,25 @@
   tNFA_STATUS ret_status = NFA_STATUS_FAILED;
   tNFA_HANDLE xx;
 
-  P2P_TRACE_API3("NFA_P2pSendUI (): handle:0x%X, DSAP:0x%02X, length:%d",
-                 handle, dsap, length);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "handle:0x%X, DSAP:0x%02X, length:%d", handle, dsap, length);
 
   GKI_sched_lock();
 
   xx = handle & NFA_HANDLE_MASK;
 
   if ((xx >= NFA_P2P_NUM_SAP) || (nfa_p2p_cb.sap_cb[xx].p_cback == NULL)) {
-    P2P_TRACE_ERROR1("NFA_P2pSendUI (): Handle (0x%X) is not valid", handle);
+    LOG(ERROR) << StringPrintf("Handle (0x%X) is not valid", handle);
     ret_status = NFA_STATUS_BAD_HANDLE;
   } else if (length > nfa_p2p_cb.remote_link_miu) {
-    P2P_TRACE_ERROR3(
-        "NFA_P2pSendUI (): handle:0x%X, length(%d) must be less than remote "
+    LOG(ERROR) << StringPrintf(
+        "handle:0x%X, length(%d) must be less than remote "
         "link MIU(%d)",
         handle, length, nfa_p2p_cb.remote_link_miu);
     ret_status = NFA_STATUS_BAD_LENGTH;
   } else if (nfa_p2p_cb.sap_cb[xx].flags & NFA_P2P_SAP_FLAG_LLINK_CONGESTED) {
-    P2P_TRACE_WARNING1(
-        "NFA_P2pSendUI (): handle:0x%X, logical data link is already congested",
-        handle);
+    LOG(WARNING) << StringPrintf(
+        "handle:0x%X, logical data link is already congested", handle);
     ret_status = NFA_STATUS_CONGESTED;
   } else if (LLCP_IsLogicalLinkCongested(
                  (uint8_t)xx, nfa_p2p_cb.sap_cb[xx].num_pending_ui_pdu,
@@ -510,8 +504,8 @@
                  nfa_p2p_cb.total_pending_i_pdu)) {
     nfa_p2p_cb.sap_cb[xx].flags |= NFA_P2P_SAP_FLAG_LLINK_CONGESTED;
 
-    P2P_TRACE_WARNING1(
-        "NFA_P2pSendUI(): handle:0x%X, logical data link is congested", handle);
+    LOG(WARNING) << StringPrintf("handle:0x%X, logical data link is congested",
+                                 handle);
     ret_status = NFA_STATUS_CONGESTED;
   } else if ((p_msg = (tNFA_P2P_API_SEND_UI*)GKI_getbuf(
                   sizeof(tNFA_P2P_API_SEND_UI))) != NULL) {
@@ -572,14 +566,14 @@
   tNFA_STATUS ret_status;
   tNFA_HANDLE xx;
 
-  P2P_TRACE_API1("NFA_P2pReadUI (): handle:0x%X", handle);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("handle:0x%X", handle);
 
   GKI_sched_lock();
 
   xx = handle & NFA_HANDLE_MASK;
 
   if ((xx >= NFA_P2P_NUM_SAP) || (nfa_p2p_cb.sap_cb[xx].p_cback == NULL)) {
-    P2P_TRACE_ERROR1("NFA_P2pReadUI (): Handle (0x%X) is not valid", handle);
+    LOG(ERROR) << StringPrintf("Handle (0x%X) is not valid", handle);
     ret_status = NFA_STATUS_BAD_HANDLE;
   } else {
     *p_more = LLCP_ReadLogicalLinkData((uint8_t)xx, max_data_len, p_remote_sap,
@@ -607,14 +601,14 @@
   tNFA_STATUS ret_status;
   tNFA_HANDLE xx;
 
-  P2P_TRACE_API1("NFA_P2pReadUI (): handle:0x%X", handle);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("handle:0x%X", handle);
 
   GKI_sched_lock();
 
   xx = handle & NFA_HANDLE_MASK;
 
   if ((xx >= NFA_P2P_NUM_SAP) || (nfa_p2p_cb.sap_cb[xx].p_cback == NULL)) {
-    P2P_TRACE_ERROR1("NFA_P2pFlushUI (): Handle (0x%X) is not valid", handle);
+    LOG(ERROR) << StringPrintf("Handle (0x%X) is not valid", handle);
     ret_status = NFA_STATUS_BAD_HANDLE;
     *p_length = 0;
   } else {
@@ -647,7 +641,8 @@
   tNFA_STATUS ret_status = NFA_STATUS_FAILED;
   tNFA_HANDLE xx;
 
-  P2P_TRACE_API2("NFA_P2pSendData (): handle:0x%X, length:%d", handle, length);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("handle:0x%X, length:%d", handle, length);
 
   GKI_sched_lock();
 
@@ -656,21 +651,19 @@
 
   if ((!(handle & NFA_P2P_HANDLE_FLAG_CONN)) || (xx >= LLCP_MAX_DATA_LINK) ||
       (nfa_p2p_cb.conn_cb[xx].flags == 0)) {
-    P2P_TRACE_ERROR1("NFA_P2pSendData (): Handle(0x%X) is not valid", handle);
+    LOG(ERROR) << StringPrintf("Handle(0x%X) is not valid", handle);
     ret_status = NFA_STATUS_BAD_HANDLE;
   } else if (nfa_p2p_cb.conn_cb[xx].flags & NFA_P2P_CONN_FLAG_REMOTE_RW_ZERO) {
-    P2P_TRACE_ERROR1(
-        "NFA_P2pSendData (): handle:0x%X, Remote set RW to 0 (flow off)",
-        handle);
+    LOG(ERROR) << StringPrintf("handle:0x%X, Remote set RW to 0 (flow off)",
+                               handle);
     ret_status = NFA_STATUS_FAILED;
   } else if (nfa_p2p_cb.conn_cb[xx].remote_miu < length) {
-    P2P_TRACE_ERROR2(
-        "NFA_P2pSendData (): handle:0x%X, Data more than remote MIU(%d)",
-        handle, nfa_p2p_cb.conn_cb[xx].remote_miu);
+    LOG(ERROR) << StringPrintf("handle:0x%X, Data more than remote MIU(%d)",
+                               handle, nfa_p2p_cb.conn_cb[xx].remote_miu);
     ret_status = NFA_STATUS_BAD_LENGTH;
   } else if (nfa_p2p_cb.conn_cb[xx].flags & NFA_P2P_CONN_FLAG_CONGESTED) {
-    P2P_TRACE_WARNING1(
-        "NFA_P2pSendData (): handle:0x%X, data link connection is already "
+    LOG(WARNING) << StringPrintf(
+        "handle:0x%X, data link connection is already "
         "congested",
         handle);
     ret_status = NFA_STATUS_CONGESTED;
@@ -681,9 +674,8 @@
                                       nfa_p2p_cb.total_pending_i_pdu)) {
     nfa_p2p_cb.conn_cb[xx].flags |= NFA_P2P_CONN_FLAG_CONGESTED;
 
-    P2P_TRACE_WARNING1(
-        "NFA_P2pSendData (): handle:0x%X, data link connection is congested",
-        handle);
+    LOG(WARNING) << StringPrintf(
+        "handle:0x%X, data link connection is congested", handle);
     ret_status = NFA_STATUS_CONGESTED;
   } else if ((p_msg = (tNFA_P2P_API_SEND_DATA*)GKI_getbuf(
                   sizeof(tNFA_P2P_API_SEND_DATA))) != NULL) {
@@ -741,7 +733,7 @@
   tNFA_STATUS ret_status;
   tNFA_HANDLE xx;
 
-  P2P_TRACE_API1("NFA_P2pReadData (): handle:0x%X", handle);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("handle:0x%X", handle);
 
   GKI_sched_lock();
 
@@ -750,7 +742,7 @@
 
   if ((!(handle & NFA_P2P_HANDLE_FLAG_CONN)) || (xx >= LLCP_MAX_DATA_LINK) ||
       (nfa_p2p_cb.conn_cb[xx].flags == 0)) {
-    P2P_TRACE_ERROR1("NFA_P2pReadData (): Handle(0x%X) is not valid", handle);
+    LOG(ERROR) << StringPrintf("Handle(0x%X) is not valid", handle);
     ret_status = NFA_STATUS_BAD_HANDLE;
   } else {
     *p_more = LLCP_ReadDataLinkData(nfa_p2p_cb.conn_cb[xx].local_sap,
@@ -779,7 +771,7 @@
   tNFA_STATUS ret_status;
   tNFA_HANDLE xx;
 
-  P2P_TRACE_API1("NFA_P2pFlushData (): handle:0x%X", handle);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("handle:0x%X", handle);
 
   GKI_sched_lock();
 
@@ -788,7 +780,7 @@
 
   if ((!(handle & NFA_P2P_HANDLE_FLAG_CONN)) || (xx >= LLCP_MAX_DATA_LINK) ||
       (nfa_p2p_cb.conn_cb[xx].flags == 0)) {
-    P2P_TRACE_ERROR1("NFA_P2pFlushData (): Handle(0x%X) is not valid", handle);
+    LOG(ERROR) << StringPrintf("Handle(0x%X) is not valid", handle);
     ret_status = NFA_STATUS_BAD_HANDLE;
   } else {
     *p_length = LLCP_FlushDataLinkRxData(nfa_p2p_cb.conn_cb[xx].local_sap,
@@ -817,20 +809,20 @@
   tNFA_P2P_API_SET_LOCAL_BUSY* p_msg;
   tNFA_HANDLE xx;
 
-  P2P_TRACE_API2("NFA_P2pSetLocalBusy (): conn_handle:0x%02X, is_busy:%d",
-                 conn_handle, is_busy);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("conn_handle:0x%02X, is_busy:%d", conn_handle, is_busy);
 
   xx = conn_handle & NFA_HANDLE_MASK;
 
   if (!(xx & NFA_P2P_HANDLE_FLAG_CONN)) {
-    P2P_TRACE_ERROR0("NFA_P2pSetLocalBusy (): Connection Handle is not valid");
+    LOG(ERROR) << StringPrintf("Connection Handle is not valid");
     return (NFA_STATUS_BAD_HANDLE);
   } else {
     xx &= ~NFA_P2P_HANDLE_FLAG_CONN;
   }
 
   if ((xx >= LLCP_MAX_DATA_LINK) || (nfa_p2p_cb.conn_cb[xx].flags == 0)) {
-    P2P_TRACE_ERROR0("NFA_P2pSetLocalBusy (): Connection Handle is not valid");
+    LOG(ERROR) << StringPrintf("Connection Handle is not valid");
     return (NFA_STATUS_BAD_HANDLE);
   }
 
@@ -866,18 +858,17 @@
   tNFA_P2P_API_GET_LINK_INFO* p_msg;
   tNFA_HANDLE xx;
 
-  P2P_TRACE_API1("NFA_P2pGetLinkInfo (): handle:0x%x", handle);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("handle:0x%x", handle);
 
   if (nfa_p2p_cb.llcp_state != NFA_P2P_LLCP_STATE_ACTIVATED) {
-    P2P_TRACE_ERROR0("NFA_P2pGetLinkInfo (): LLCP link is not activated");
+    LOG(ERROR) << StringPrintf("LLCP link is not activated");
     return (NFA_STATUS_FAILED);
   }
 
   xx = handle & NFA_HANDLE_MASK;
 
   if ((xx >= NFA_P2P_NUM_SAP) || (nfa_p2p_cb.sap_cb[xx].p_cback == NULL)) {
-    P2P_TRACE_ERROR0(
-        "NFA_P2pGetLinkInfo (): Handle is invalid or not registered");
+    LOG(ERROR) << StringPrintf("Handle is invalid or not registered");
     return (NFA_STATUS_BAD_HANDLE);
   }
 
@@ -912,19 +903,18 @@
   tNFA_P2P_API_GET_REMOTE_SAP* p_msg;
   tNFA_HANDLE xx;
 
-  P2P_TRACE_API2("NFA_P2pGetRemoteSap(): handle:0x%x, SN:<%s>", handle,
-                 p_service_name);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("handle:0x%x, SN:<%s>", handle, p_service_name);
 
   if (nfa_p2p_cb.llcp_state != NFA_P2P_LLCP_STATE_ACTIVATED) {
-    P2P_TRACE_ERROR0("NFA_P2pGetRemoteSap(): LLCP link is not activated");
+    LOG(ERROR) << StringPrintf("LLCP link is not activated");
     return (NFA_STATUS_FAILED);
   }
 
   xx = handle & NFA_HANDLE_MASK;
 
   if ((xx >= NFA_P2P_NUM_SAP) || (nfa_p2p_cb.sap_cb[xx].p_cback == NULL)) {
-    P2P_TRACE_ERROR0(
-        "NFA_P2pGetRemoteSap (): Handle is invalid or not registered");
+    LOG(ERROR) << StringPrintf("Handle is invalid or not registered");
     return (NFA_STATUS_BAD_HANDLE);
   }
 
@@ -980,18 +970,19 @@
                                  uint16_t delay_first_pdu_timeout) {
   tNFA_P2P_API_SET_LLCP_CFG* p_msg;
 
-  P2P_TRACE_API4(
-      "NFA_P2pSetLLCPConfig ():link_miu:%d, opt:0x%02X, wt:%d, link_timeout:%d",
-      link_miu, opt, wt, link_timeout);
-  P2P_TRACE_API4(
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("link_miu:%d, opt:0x%02X, wt:%d, link_timeout:%d",
+                      link_miu, opt, wt, link_timeout);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
       "                       inact_timeout(init:%d, target:%d), "
       "symm_delay:%d, data_link_timeout:%d",
       inact_timeout_init, inact_timeout_target, symm_delay, data_link_timeout);
-  P2P_TRACE_API1("                       delay_first_pdu_timeout:%d",
-                 delay_first_pdu_timeout);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("                       delay_first_pdu_timeout:%d",
+                      delay_first_pdu_timeout);
 
   if (nfa_p2p_cb.llcp_state == NFA_P2P_LLCP_STATE_ACTIVATED) {
-    P2P_TRACE_ERROR0("NFA_P2pSetLLCPConfig (): LLCP link is activated");
+    LOG(ERROR) << StringPrintf("LLCP link is activated");
     return (NFA_STATUS_FAILED);
   }
 
@@ -1047,30 +1038,15 @@
                  p_inact_timeout_target, p_symm_delay, p_data_link_timeout,
                  p_delay_first_pdu_timeout);
 
-  P2P_TRACE_API4(
-      "NFA_P2pGetLLCPConfig () link_miu:%d, opt:0x%02X, wt:%d, link_timeout:%d",
-      *p_link_miu, *p_opt, *p_wt, *p_link_timeout);
-  P2P_TRACE_API4(
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("link_miu:%d, opt:0x%02X, wt:%d, link_timeout:%d",
+                      *p_link_miu, *p_opt, *p_wt, *p_link_timeout);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
       "                       inact_timeout(init:%d, target:%d), "
       "symm_delay:%d, data_link_timeout:%d",
       *p_inact_timeout_init, *p_inact_timeout_target, *p_symm_delay,
       *p_data_link_timeout);
-  P2P_TRACE_API1("                       delay_first_pdu_timeout:%d",
-                 *p_delay_first_pdu_timeout);
-}
-
-/*******************************************************************************
-**
-** Function         NFA_P2pSetTraceLevel
-**
-** Description      This function sets the trace level for P2P.  If called with
-**                  a value of 0xFF, it simply returns the current trace level.
-**
-** Returns          The new or current trace level
-**
-*******************************************************************************/
-uint8_t NFA_P2pSetTraceLevel(uint8_t new_level) {
-  if (new_level != 0xFF) nfa_p2p_cb.trace_level = new_level;
-
-  return (nfa_p2p_cb.trace_level);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("                       delay_first_pdu_timeout:%d",
+                      *p_delay_first_pdu_timeout);
 }
diff --git a/src/nfa/p2p/nfa_p2p_main.c b/src/nfa/p2p/nfa_p2p_main.cc
similarity index 90%
rename from src/nfa/p2p/nfa_p2p_main.c
rename to src/nfa/p2p/nfa_p2p_main.cc
index 2787634..eb965e7 100644
--- a/src/nfa/p2p/nfa_p2p_main.c
+++ b/src/nfa/p2p/nfa_p2p_main.cc
@@ -21,15 +21,18 @@
  *  This is the main implementation file for the NFA P2P.
  *
  ******************************************************************************/
-#include <string.h>
+#include <string>
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "llcp_api.h"
-#include "llcp_defs.h"
 #include "nfa_dm_int.h"
-#include "nfa_p2p_api.h"
 #include "nfa_p2p_int.h"
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
-#include "nfc_api.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 /*****************************************************************************
 **  Global Variables
@@ -50,9 +53,8 @@
 static void nfa_p2p_update_active_listen(void);
 
 /* debug functions type */
-#if (BT_TRACE_VERBOSE == TRUE)
-static char* nfa_p2p_llcp_state_code(tNFA_P2P_LLCP_STATE state_code);
-#endif
+static std::string nfa_p2p_llcp_state_code(tNFA_P2P_LLCP_STATE state_code);
+static std::string nfa_p2p_evt_code(uint16_t evt_code);
 
 /*****************************************************************************
 **  Constants
@@ -99,7 +101,7 @@
 void nfa_p2p_discovery_cback(tNFA_DM_RF_DISC_EVT event, tNFC_DISCOVER* p_data) {
   tNFA_CONN_EVT_DATA evt_data;
 
-  P2P_TRACE_DEBUG1("nfa_p2p_discovery_cback (): event:0x%02X", event);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("event:0x%02X", event);
 
   switch (event) {
     case NFA_DM_RF_DISC_START_EVT:
@@ -150,7 +152,7 @@
       break;
 
     default:
-      P2P_TRACE_ERROR0("Unexpected event");
+      LOG(ERROR) << StringPrintf("Unexpected event");
       break;
   }
 }
@@ -164,8 +166,9 @@
 ** Returns          void
 **
 *******************************************************************************/
-static void nfa_p2p_update_active_listen_timeout_cback(TIMER_LIST_ENT* p_tle) {
-  NFA_TRACE_ERROR0("nfa_p2p_update_active_listen_timeout_cback()");
+static void nfa_p2p_update_active_listen_timeout_cback(__attribute__((unused))
+                                                       TIMER_LIST_ENT* p_tle) {
+  LOG(ERROR) << __func__;
 
   /* restore active listen mode */
   nfa_p2p_update_active_listen();
@@ -185,9 +188,9 @@
   tNFA_DM_DISC_TECH_PROTO_MASK p2p_listen_mask = 0;
   NFC_HDR* p_msg;
 
-  P2P_TRACE_DEBUG1(
-      "nfa_p2p_update_active_listen (): listen_tech_mask_to_restore:0x%x",
-      nfa_p2p_cb.listen_tech_mask_to_restore);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("listen_tech_mask_to_restore:0x%x",
+                      nfa_p2p_cb.listen_tech_mask_to_restore);
 
   /* if active listen mode was removed temporarily */
   if (nfa_p2p_cb.listen_tech_mask_to_restore) {
@@ -243,7 +246,7 @@
       ((nfa_dm_cb.eDtaMode & 0x0F) == NFA_DTA_DEFAULT_MODE)) {
     // Configure listen technologies and protocols and register callback to DTA
 
-    P2P_TRACE_DEBUG1(
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
         "%s: DTA mode:Registering nfa_dm_poll_disc_cback to avoid LLCP in P2P",
         __func__);
     nfa_p2p_cb.dm_disc_handle =
@@ -278,8 +281,8 @@
   tNFA_LLCP_ACTIVATED llcp_activated;
   tNFA_LLCP_DEACTIVATED llcp_deactivated;
 
-  P2P_TRACE_DEBUG2("nfa_p2p_llcp_link_cback () event:0x%x, reason:0x%x", event,
-                   reason);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("event:0x%x, reason:0x%x", event, reason);
 
   if (event == LLCP_LINK_ACTIVATION_COMPLETE_EVT) {
     LLCP_GetLinkMIU(&nfa_p2p_cb.local_link_miu, &nfa_p2p_cb.remote_link_miu);
@@ -297,8 +300,9 @@
     llcp_activated.remote_wks = LLCP_GetRemoteWKS();
     llcp_activated.remote_version = LLCP_GetRemoteVersion();
 
-    nfa_dm_act_conn_cback_notify(NFA_LLCP_ACTIVATED_EVT,
-                                 (tNFA_CONN_EVT_DATA*)&llcp_activated);
+    tNFA_CONN_EVT_DATA nfa_conn_evt_data;
+    nfa_conn_evt_data.llcp_activated = llcp_activated;
+    nfa_dm_act_conn_cback_notify(NFA_LLCP_ACTIVATED_EVT, &nfa_conn_evt_data);
 
   } else if (event == LLCP_LINK_ACTIVATION_FAILED_EVT) {
     nfa_p2p_cb.llcp_state = NFA_P2P_LLCP_STATE_IDLE;
@@ -324,7 +328,8 @@
         if ((nfa_p2p_cb.listen_tech_mask_to_restore == 0x00) &&
             (nfa_p2p_cb.listen_tech_mask &
              (NFA_TECHNOLOGY_MASK_A | NFA_TECHNOLOGY_MASK_F))) {
-          P2P_TRACE_DEBUG0("Retry without active listen mode");
+          DLOG_IF(INFO, nfc_debug_enabled)
+              << StringPrintf("Retry without active listen mode");
 
           /* retry without active listen mode */
           nfa_p2p_update_active_listen();
@@ -343,8 +348,9 @@
     }
 
     llcp_deactivated.reason = reason;
-    nfa_dm_act_conn_cback_notify(NFA_LLCP_DEACTIVATED_EVT,
-                                 (tNFA_CONN_EVT_DATA*)&llcp_deactivated);
+    tNFA_CONN_EVT_DATA nfa_conn_evt_data;
+    nfa_conn_evt_data.llcp_deactivated = llcp_deactivated;
+    nfa_dm_act_conn_cback_notify(NFA_LLCP_DEACTIVATED_EVT, &nfa_conn_evt_data);
 
     if (reason != LLCP_LINK_RF_LINK_LOSS_ERR) /* if NFC link is still up */
     {
@@ -361,7 +367,8 @@
         ** target needs to trun off RF in case of receiving invalid
         ** frame from initiator
         */
-        P2P_TRACE_DEBUG0("Got LLCP_LINK_TIMEOUT in active mode on target");
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("Got LLCP_LINK_TIMEOUT in active mode on target");
         nfa_dm_rf_deactivate(NFA_DEACTIVATE_TYPE_DISCOVERY);
       }
     }
@@ -381,7 +388,7 @@
 void nfa_p2p_activate_llcp(tNFC_DISCOVER* p_data) {
   tLLCP_ACTIVATE_CONFIG config;
 
-  P2P_TRACE_DEBUG0("nfa_p2p_activate_llcp ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if ((p_data->activate.rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_A) ||
       (p_data->activate.rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_F)) {
@@ -449,7 +456,7 @@
 **
 *******************************************************************************/
 void nfa_p2p_deactivate_llcp(void) {
-  P2P_TRACE_DEBUG0("nfa_p2p_deactivate_llcp ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   LLCP_DeactivateLink();
 }
@@ -467,12 +474,11 @@
 void nfa_p2p_init(void) {
   uint8_t xx;
 
-  P2P_TRACE_DEBUG0("nfa_p2p_init ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* initialize control block */
   memset(&nfa_p2p_cb, 0, sizeof(tNFA_P2P_CB));
   nfa_p2p_cb.dm_disc_handle = NFA_HANDLE_INVALID;
-  nfa_p2p_cb.trace_level = APPL_INITIAL_TRACE_LEVEL;
 
   for (xx = 0; xx < LLCP_MAX_SDP_TRANSAC; xx++) {
     nfa_p2p_cb.sdp_cb[xx].local_sap = LLCP_INVALID_SAP;
@@ -493,7 +499,7 @@
 **
 *******************************************************************************/
 static void nfa_p2p_sys_disable(void) {
-  P2P_TRACE_DEBUG0("nfa_p2p_sys_disable()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   nfa_sys_stop_timer(&nfa_p2p_cb.active_listen_restore_timer);
 
@@ -515,7 +521,7 @@
   uint8_t wt, gen_bytes_len = LLCP_MAX_GEN_BYTES;
   uint8_t params[LLCP_MAX_GEN_BYTES + 5], *p, length;
 
-  P2P_TRACE_DEBUG0("nfa_p2p_set_config ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   LLCP_GetDiscoveryConfig(&wt, params + 2, &gen_bytes_len);
   if (nfa_dm_is_p2p_paused()) {
@@ -578,8 +584,8 @@
 void nfa_p2p_enable_listening(tNFA_SYS_ID sys_id, bool update_wks) {
   tNFA_DM_DISC_TECH_PROTO_MASK p2p_listen_mask = 0;
 
-  P2P_TRACE_DEBUG2("nfa_p2p_enable_listening () sys_id = %d, update_wks = %d",
-                   sys_id, update_wks);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("sys_id = %d, update_wks = %d", sys_id, update_wks);
 
   if (sys_id == NFA_ID_P2P)
     nfa_p2p_cb.is_p2p_listening = true;
@@ -622,7 +628,7 @@
         ((nfa_dm_cb.eDtaMode & 0x0F) == NFA_DTA_DEFAULT_MODE)) {
       /* Configure listen technologies and protocols and register callback to
        * NFA DM discovery */
-      P2P_TRACE_DEBUG1(
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
           "%s: DTA mode:Registering nfa_dm_poll_disc_cback to avoid LLCP in "
           "P2P",
           __func__);
@@ -651,8 +657,8 @@
 **
 *******************************************************************************/
 void nfa_p2p_disable_listening(tNFA_SYS_ID sys_id, bool update_wks) {
-  P2P_TRACE_DEBUG2("nfa_p2p_disable_listening ()  sys_id = %d, update_wks = %d",
-                   sys_id, update_wks);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("sys_id = %d, update_wks = %d", sys_id, update_wks);
 
   if (sys_id == NFA_ID_P2P)
     nfa_p2p_cb.is_p2p_listening = false;
@@ -686,8 +692,8 @@
 **
 *******************************************************************************/
 void nfa_p2p_update_listen_tech(tNFA_TECHNOLOGY_MASK tech_mask) {
-  P2P_TRACE_DEBUG1("nfa_p2p_update_listen_tech ()  tech_mask = 0x%x",
-                   tech_mask);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("tech_mask = 0x%x", tech_mask);
 
   if (nfa_p2p_cb.listen_tech_mask_to_restore) {
     nfa_p2p_cb.listen_tech_mask_to_restore = 0;
@@ -726,30 +732,24 @@
   bool delete_msg = true;
   uint16_t event;
 
-  tNFA_P2P_MSG* p_msg = (tNFA_P2P_MSG*)p_hdr;
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("LLCP State [%s], Event [%s]",
+                      nfa_p2p_llcp_state_code(nfa_p2p_cb.llcp_state).c_str(),
+                      nfa_p2p_evt_code(p_hdr->event).c_str());
 
-#if (BT_TRACE_VERBOSE == TRUE)
-  P2P_TRACE_DEBUG2("nfa_p2p_evt_hdlr (): LLCP State [%s], Event [%s]",
-                   nfa_p2p_llcp_state_code(nfa_p2p_cb.llcp_state),
-                   nfa_p2p_evt_code(p_msg->hdr.event));
-#else
-  P2P_TRACE_DEBUG2("nfa_p2p_evt_hdlr (): State 0x%02x, Event 0x%02x",
-                   nfa_p2p_cb.llcp_state, p_msg->hdr.event);
-#endif
-
-  event = p_msg->hdr.event & 0x00ff;
+  event = p_hdr->event & 0x00ff;
 
   /* execute action functions */
   if (event < NFA_P2P_NUM_ACTIONS) {
+    tNFA_P2P_MSG* p_msg = (tNFA_P2P_MSG*)p_hdr;
     delete_msg = (*nfa_p2p_action[event])(p_msg);
   } else {
-    P2P_TRACE_ERROR0("Unhandled event");
+    LOG(ERROR) << StringPrintf("Unhandled event");
   }
 
   return delete_msg;
 }
 
-#if (BT_TRACE_VERBOSE == TRUE)
 /*******************************************************************************
 **
 ** Function         nfa_p2p_llcp_state_code
@@ -759,7 +759,7 @@
 ** Returns          string of state
 **
 *******************************************************************************/
-static char* nfa_p2p_llcp_state_code(tNFA_P2P_LLCP_STATE state_code) {
+static std::string nfa_p2p_llcp_state_code(tNFA_P2P_LLCP_STATE state_code) {
   switch (state_code) {
     case NFA_P2P_LLCP_STATE_IDLE:
       return "Link IDLE";
@@ -781,7 +781,7 @@
 ** Returns          string of event
 **
 *******************************************************************************/
-char* nfa_p2p_evt_code(uint16_t evt_code) {
+static std::string nfa_p2p_evt_code(uint16_t evt_code) {
   switch (evt_code) {
     case NFA_P2P_API_REG_SERVER_EVT:
       return "API_REG_SERVER";
@@ -815,4 +815,3 @@
       return "Unknown event";
   }
 }
-#endif /* Debug Functions */
diff --git a/src/nfa/rw/nfa_rw_act.c b/src/nfa/rw/nfa_rw_act.cc
similarity index 93%
rename from src/nfa/rw/nfa_rw_act.c
rename to src/nfa/rw/nfa_rw_act.cc
index 393ce02..7f9dcfa 100644
--- a/src/nfa/rw/nfa_rw_act.c
+++ b/src/nfa/rw/nfa_rw_act.cc
@@ -23,12 +23,18 @@
  ******************************************************************************/
 #include <log/log.h>
 #include <string.h>
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "ndef_utils.h"
 #include "nfa_dm_int.h"
 #include "nfa_mem_co.h"
 #include "nfa_rw_int.h"
-#include "nfa_sys_int.h"
-#include "rw_api.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 #define NFA_RW_OPTION_INVALID 0xFF
 
@@ -44,7 +50,7 @@
 static void nfa_rw_error_cleanup(uint8_t event);
 static void nfa_rw_presence_check(tNFA_RW_MSG* p_data);
 static void nfa_rw_handle_t2t_evt(tRW_EVENT event, tRW_DATA* p_rw_data);
-static bool nfa_rw_detect_ndef(tNFA_RW_MSG* p_data);
+static bool nfa_rw_detect_ndef(void);
 static void nfa_rw_cback(tRW_EVENT event, tRW_DATA* p_rw_data);
 
 /*******************************************************************************
@@ -84,9 +90,10 @@
            p_rw_data->data.p_data->len);
     nfa_rw_cb.ndef_rd_offset += p_rw_data->data.p_data->len;
   } else {
-    NFA_TRACE_ERROR0("RW_SetActivatedTagType failed.");
+    LOG(ERROR) << StringPrintf("Exceed ndef_cur_size error");
     android_errorWriteLog(0x534e4554, "123583388");
   }
+
   GKI_freebuf(p_rw_data->data.p_data);
   p_rw_data->data.p_data = NULL;
 }
@@ -107,14 +114,10 @@
       (p_rw_data->data.p_data == NULL))
     return;
 
-#if (BT_TRACE_VERBOSE == TRUE)
-  NFA_TRACE_DEBUG2("nfa_rw_send_data_to_upper: Len [0x%X] Status [%s]",
-                   p_rw_data->data.p_data->len,
-                   NFC_GetStatusName(p_rw_data->data.status));
-#else
-  NFA_TRACE_DEBUG2("nfa_rw_send_data_to_upper: Len [0x%X] Status [0x%X]",
-                   p_rw_data->data.p_data->len, p_rw_data->data.status);
-#endif
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfa_rw_send_data_to_upper: Len [0x%X] Status [%s]",
+                      p_rw_data->data.p_data->len,
+                      NFC_GetStatusName(p_rw_data->data.status).c_str());
 
   /* Notify conn cback of NFA_DATA_EVT */
   conn_evt_data.data.status = p_rw_data->data.status;
@@ -162,7 +165,8 @@
 
   if (nfa_rw_cb.flags & NFA_RW_FL_NOT_EXCL_RF_MODE) {
     if (presence_check_start_delay) {
-      NFA_TRACE_DEBUG0("Starting presence check timer...");
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("Starting presence check timer...");
       nfa_sys_start_timer(&nfa_rw_cb.tle, NFA_RW_PRESENCE_CHECK_TICK_EVT,
                           presence_check_start_delay);
     } else {
@@ -183,7 +187,8 @@
 *******************************************************************************/
 void nfa_rw_stop_presence_check_timer(void) {
   nfa_sys_stop_timer(&nfa_rw_cb.tle);
-  NFA_TRACE_DEBUG0("Stopped presence check timer (if started)");
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("Stopped presence check timer (if started)");
 }
 
 /*******************************************************************************
@@ -195,10 +200,10 @@
 ** Returns          Nothing
 **
 *******************************************************************************/
-static void nfa_rw_handle_ndef_detect(tRW_EVENT event, tRW_DATA* p_rw_data) {
+static void nfa_rw_handle_ndef_detect(tRW_DATA* p_rw_data) {
   tNFA_CONN_EVT_DATA conn_evt_data;
 
-  NFA_TRACE_DEBUG3(
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
       "NDEF Detection completed: cur_size=%i, max_size=%i, flags=0x%x",
       p_rw_data->ndef.cur_size, p_rw_data->ndef.max_size,
       p_rw_data->ndef.flags);
@@ -306,7 +311,7 @@
 ** Returns          Nothing
 **
 *******************************************************************************/
-static void nfa_rw_handle_tlv_detect(tRW_EVENT event, tRW_DATA* p_rw_data) {
+static void nfa_rw_handle_tlv_detect(tRW_DATA* p_rw_data) {
   tNFA_CONN_EVT_DATA conn_evt_data;
 
   /* Set TLV detection state */
@@ -326,8 +331,8 @@
 
   /* Check if TLV detection succeeded */
   if (p_rw_data->tlv.status == NFC_STATUS_OK) {
-    NFA_TRACE_DEBUG1("TLV Detection succeeded: num_bytes=%i",
-                     p_rw_data->tlv.num_bytes);
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "TLV Detection succeeded: num_bytes=%i", p_rw_data->tlv.num_bytes);
 
     /* Store tlv properties */
     conn_evt_data.tlv_detect.status = NFA_STATUS_OK;
@@ -385,12 +390,12 @@
       (nfa_rw_cb.activated_tech_mode == NFC_DISCOVERY_TYPE_POLL_A) &&
       (nfa_rw_cb.protocol == NFC_PROTOCOL_T2T) &&
       (nfa_rw_cb.pa_sel_res == NFC_SEL_RES_NFC_FORUM_T2T)) {
-    NFA_TRACE_DEBUG0(
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
         "nfa_rw_handle_sleep_wakeup_rsp; Attempt to wake up Type 2 tag from "
         "HALT State is complete");
     if (status == NFC_STATUS_OK) {
       /* Type 2 Tag is wakeup from HALT state */
-      NFA_TRACE_DEBUG0(
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
           "nfa_rw_handle_sleep_wakeup_rsp; Handle the NACK rsp received now");
       /* Initialize control block */
       activate_params.protocol = nfa_rw_cb.protocol;
@@ -401,7 +406,7 @@
       if ((RW_SetActivatedTagType(&activate_params, nfa_rw_cback)) !=
           NFC_STATUS_OK) {
         /* Log error (stay in NFA_RW_ST_ACTIVATED state until deactivation) */
-        NFA_TRACE_ERROR0("RW_SetActivatedTagType failed.");
+        LOG(ERROR) << StringPrintf("RW_SetActivatedTagType failed.");
         if (nfa_rw_cb.halt_event == RW_T2T_READ_CPLT_EVT) {
           if (nfa_rw_cb.rw_data.data.p_data)
             GKI_freebuf(nfa_rw_cb.rw_data.data.p_data);
@@ -433,11 +438,12 @@
      * mode) then deactivate the link if sleep wakeup failed */
     if ((nfa_rw_cb.flags & NFA_RW_FL_NOT_EXCL_RF_MODE) &&
         (status != NFC_STATUS_OK)) {
-      NFA_TRACE_DEBUG0("Sleep wakeup failed. Deactivating...");
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("Sleep wakeup failed. Deactivating...");
       nfa_dm_rf_deactivate(NFA_DEACTIVATE_TYPE_DISCOVERY);
     }
   } else {
-    NFA_TRACE_DEBUG0(
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
         "nfa_rw_handle_sleep_wakeup_rsp; Legacy presence check performed");
     /* Legacy presence check performed */
     nfa_rw_handle_presence_check_rsp(status);
@@ -477,15 +483,17 @@
        * app of result */
       if (nfa_rw_cb.p_pending_msg->op_req.op == NFA_RW_OP_PRESENCE_CHECK) {
         /* Notify app of presence check status */
+        tNFA_CONN_EVT_DATA nfa_conn_evt_data;
+        nfa_conn_evt_data.status = status;
         nfa_dm_act_conn_cback_notify(NFA_PRESENCE_CHECK_EVT,
-                                     (tNFA_CONN_EVT_DATA*)&status);
+                                     &nfa_conn_evt_data);
         GKI_freebuf(nfa_rw_cb.p_pending_msg);
         nfa_rw_cb.p_pending_msg = NULL;
       }
       /* For all other APIs called during auto-presence check, perform the
          command now (if tag is still present) */
       else if (status == NFC_STATUS_OK) {
-        NFA_TRACE_DEBUG0(
+        DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
             "Performing deferred operation after presence check...");
         p_pending_msg = (NFC_HDR*)nfa_rw_cb.p_pending_msg;
         nfa_rw_cb.p_pending_msg = NULL;
@@ -500,21 +508,24 @@
 
     /* Auto-presence check failed. Deactivate */
     if (status != NFC_STATUS_OK) {
-      NFA_TRACE_DEBUG0("Auto presence check failed. Deactivating...");
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("Auto presence check failed. Deactivating...");
       nfa_dm_rf_deactivate(NFA_DEACTIVATE_TYPE_DISCOVERY);
     }
   }
   /* Handle presence check due to NFA_RwPresenceCheck API call */
   else {
     /* Notify app of presence check status */
-    nfa_dm_act_conn_cback_notify(NFA_PRESENCE_CHECK_EVT,
-                                 (tNFA_CONN_EVT_DATA*)&status);
+    tNFA_CONN_EVT_DATA nfa_conn_evt_data;
+    nfa_conn_evt_data.status = status;
+    nfa_dm_act_conn_cback_notify(NFA_PRESENCE_CHECK_EVT, &nfa_conn_evt_data);
 
     /* If in normal mode (not-exclusive RF mode) then deactivate the link if
      * presence check failed */
     if ((nfa_rw_cb.flags & NFA_RW_FL_NOT_EXCL_RF_MODE) &&
-        (status != NFC_STATUS_OK)) {
-      NFA_TRACE_DEBUG0("Presence check failed. Deactivating...");
+        (nfa_conn_evt_data.status != NFC_STATUS_OK)) {
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("Presence check failed. Deactivating...");
       nfa_dm_rf_deactivate(NFA_DEACTIVATE_TYPE_DISCOVERY);
     }
   }
@@ -585,7 +596,7 @@
       break;
 
     case RW_T1T_TLV_DETECT_EVT:
-      nfa_rw_handle_tlv_detect(event, p_rw_data);
+      nfa_rw_handle_tlv_detect(p_rw_data);
       break;
 
     case RW_T1T_NDEF_DETECT_EVT:
@@ -601,7 +612,7 @@
         if (RW_T1tFormatNDef() == NFC_STATUS_OK) break;
       }
 
-      nfa_rw_handle_ndef_detect(event, p_rw_data);
+      nfa_rw_handle_ndef_detect(p_rw_data);
 
       break;
 
@@ -712,8 +723,8 @@
   conn_evt_data.status = p_rw_data->status;
 
   if (p_rw_data->status == NFC_STATUS_REJECTED) {
-    NFA_TRACE_DEBUG0(
-        "nfa_rw_handle_t2t_evt(); Waking the tag first before handling the "
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "; Waking the tag first before handling the "
         "response!");
     /* Received NACK. Let DM wakeup the tag first (by putting tag to sleep and
      * then waking it up) */
@@ -753,18 +764,18 @@
           (nfa_rw_cb.skip_dyn_locks == true)) {
         /* NDEF Detection is complete */
         nfa_rw_cb.skip_dyn_locks = false;
-        nfa_rw_handle_ndef_detect(event, p_rw_data);
+        nfa_rw_handle_ndef_detect(p_rw_data);
       } else {
         /* Try to detect NDEF again, this time without reading dynamic lock
          * bytes */
         nfa_rw_cb.skip_dyn_locks = true;
-        nfa_rw_detect_ndef(NULL);
+        nfa_rw_detect_ndef();
       }
       break;
 
     case RW_T2T_TLV_DETECT_EVT: /* Lock control/Mem/Prop tlv detection complete
                                    */
-      nfa_rw_handle_tlv_detect(event, p_rw_data);
+      nfa_rw_handle_tlv_detect(p_rw_data);
       break;
 
     case RW_T2T_NDEF_READ_EVT: /* NDEF read completed     */
@@ -858,7 +869,7 @@
 
   switch (event) {
     case RW_T3T_NDEF_DETECT_EVT: /* NDEF detection complete */
-      nfa_rw_handle_ndef_detect(event, p_rw_data);
+      nfa_rw_handle_ndef_detect(p_rw_data);
       break;
 
     case RW_T3T_UPDATE_CPLT_EVT: /* Write completed */
@@ -966,8 +977,8 @@
       break;
 
     default:
-      NFA_TRACE_DEBUG1("nfa_rw_handle_t3t_evt(); Unhandled RW event 0x%X",
-                       event);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("; Unhandled RW event 0x%X", event);
       break;
   }
 }
@@ -986,7 +997,7 @@
 
   switch (event) {
     case RW_T4T_NDEF_DETECT_EVT: /* Result of NDEF detection procedure */
-      nfa_rw_handle_ndef_detect(event, p_rw_data);
+      nfa_rw_handle_ndef_detect(p_rw_data);
       break;
 
     case RW_T4T_NDEF_FORMAT_CPLT_EVT:
@@ -1099,8 +1110,8 @@
       break;
 
     default:
-      NFA_TRACE_DEBUG1("nfa_rw_handle_t4t_evt(); Unhandled RW event 0x%X",
-                       event);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("; Unhandled RW event 0x%X", event);
       break;
   }
 }
@@ -1120,7 +1131,7 @@
 
   switch (event) {
     case RW_I93_NDEF_DETECT_EVT: /* Result of NDEF detection procedure */
-      nfa_rw_handle_ndef_detect(event, p_rw_data);
+      nfa_rw_handle_ndef_detect(p_rw_data);
       break;
 
     case RW_I93_NDEF_READ_EVT: /* Segment of data received from type 4 tag */
@@ -1373,8 +1384,8 @@
       break;
 
     default:
-      NFA_TRACE_DEBUG1("nfa_rw_handle_i93_evt(); Unhandled RW event 0x%X",
-                       event);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("; Unhandled RW event 0x%X", event);
       break;
   }
 }
@@ -1389,7 +1400,8 @@
 **
 *******************************************************************************/
 static void nfa_rw_cback(tRW_EVENT event, tRW_DATA* p_rw_data) {
-  NFA_TRACE_DEBUG1("nfa_rw_cback: event=0x%02x", event);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfa_rw_cback: event=0x%02x", event);
 
   /* Call appropriate event handler for tag type */
   if (event < RW_T1T_MAX_EVT) {
@@ -1408,7 +1420,7 @@
     /* Handle ISO 15693 tag events */
     nfa_rw_handle_i93_evt(event, p_rw_data);
   } else {
-    NFA_TRACE_ERROR1("nfa_rw_cback: unhandled event=0x%02x", event);
+    LOG(ERROR) << StringPrintf("nfa_rw_cback: unhandled event=0x%02x", event);
   }
 }
 
@@ -1463,7 +1475,8 @@
 
   /* Handle zero length NDEF message */
   if (nfa_rw_cb.ndef_cur_size == 0) {
-    NFA_TRACE_DEBUG0("NDEF message is zero-length");
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("NDEF message is zero-length");
 
     /* Send zero-lengh NDEF message to ndef callback */
     nfa_dm_ndef_handle_message(NFA_STATUS_OK, NULL, 0);
@@ -1480,8 +1493,9 @@
   nfa_rw_free_ndef_rx_buf();
   nfa_rw_cb.p_ndef_buf = (uint8_t*)nfa_mem_co_alloc(nfa_rw_cb.ndef_cur_size);
   if (nfa_rw_cb.p_ndef_buf == NULL) {
-    NFA_TRACE_ERROR1("Unable to allocate a buffer for reading NDEF (size=%i)",
-                     nfa_rw_cb.ndef_cur_size);
+    LOG(ERROR) << StringPrintf(
+        "Unable to allocate a buffer for reading NDEF (size=%i)",
+        nfa_rw_cb.ndef_cur_size);
 
     /* Command complete - perform cleanup, notify app */
     nfa_rw_command_complete();
@@ -1524,9 +1538,9 @@
 ** Returns          TRUE (message buffer to be freed by caller)
 **
 *******************************************************************************/
-static bool nfa_rw_detect_ndef(tNFA_RW_MSG* p_data) {
+static bool nfa_rw_detect_ndef() {
   tNFA_CONN_EVT_DATA conn_evt_data;
-  NFA_TRACE_DEBUG0("nfa_rw_detect_ndef");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   conn_evt_data.ndef_detect.status = nfa_rw_start_ndef_detection();
   if (conn_evt_data.ndef_detect.status != NFC_STATUS_OK) {
@@ -1557,13 +1571,13 @@
   if (nfa_rw_cb.flags & NFA_RW_FL_TAG_IS_READONLY) {
     /* error: ndef tag is read-only */
     status = NFC_STATUS_FAILED;
-    NFA_TRACE_ERROR0("Unable to write NDEF. Tag is read-only")
+    LOG(ERROR) << StringPrintf("Unable to write NDEF. Tag is read-only");
   } else if (nfa_rw_cb.ndef_max_size < nfa_rw_cb.ndef_wr_len) {
     /* error: ndef tag size is too small */
     status = NFC_STATUS_BUFFER_FULL;
-    NFA_TRACE_ERROR2(
+    LOG(ERROR) << StringPrintf(
         "Unable to write NDEF. Tag maxsize=%i, request write size=%i",
-        nfa_rw_cb.ndef_max_size, nfa_rw_cb.ndef_wr_len)
+        nfa_rw_cb.ndef_max_size, nfa_rw_cb.ndef_wr_len);
   } else {
     if (NFC_PROTOCOL_T1T == protocol) {
       /* Type1Tag    - NFC-A */
@@ -1601,11 +1615,11 @@
 ** Returns          TRUE (message buffer to be freed by caller)
 **
 *******************************************************************************/
-static bool nfa_rw_read_ndef(tNFA_RW_MSG* p_data) {
+static bool nfa_rw_read_ndef() {
   tNFA_STATUS status = NFA_STATUS_OK;
   tNFA_CONN_EVT_DATA conn_evt_data;
 
-  NFA_TRACE_DEBUG0("nfa_rw_read_ndef");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* Check if ndef detection has been performed yet */
   if (nfa_rw_cb.ndef_st == NFA_RW_NDEF_ST_UNKNOWN) {
@@ -1643,14 +1657,14 @@
   tNDEF_STATUS ndef_status;
   tNFA_STATUS write_status = NFA_STATUS_OK;
   tNFA_CONN_EVT_DATA conn_evt_data;
-  NFA_TRACE_DEBUG0("nfa_rw_write_ndef");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* Validate NDEF message */
   ndef_status = NDEF_MsgValidate(p_data->op_req.params.write_ndef.p_data,
                                  p_data->op_req.params.write_ndef.len, false);
   if (ndef_status != NDEF_OK) {
-    NFA_TRACE_ERROR1("Invalid NDEF message. NDEF_MsgValidate returned %i",
-                     ndef_status);
+    LOG(ERROR) << StringPrintf(
+        "Invalid NDEF message. NDEF_MsgValidate returned %i", ndef_status);
 
     /* Command complete - perform cleanup, notify app */
     nfa_rw_command_complete();
@@ -1736,48 +1750,14 @@
         option = RW_T4T_CHK_EMPTY_I_BLOCK;
         break;
 
-      case NFA_RW_PRES_CHK_RESET:
-        /* option is initialized to NFA_RW_OPTION_INVALID, which will Deactivate
-         * to Sleep; Re-activate */
-        break;
-
-      case NFA_RW_PRES_CHK_RB_CH0:
-        option = RW_T4T_CHK_READ_BINARY_CH0;
-        break;
-
-      case NFA_RW_PRES_CHK_RB_CH3:
-        option = RW_T4T_CHK_READ_BINARY_CH3;
-        break;
-
       case NFA_RW_PRES_CHK_ISO_DEP_NAK:
         if (NFC_GetNCIVersion() == NCI_VERSION_2_0) {
           option = RW_T4T_CHK_ISO_DEP_NAK_PRES_CHK;
         }
         break;
       default:
-        if (nfa_rw_cb.flags & NFA_RW_FL_NDEF_OK) {
-          /* read binary on channel 0 */
-          option = RW_T4T_CHK_READ_BINARY_CH0;
-        } else {
-          /* NDEF DETECT failed.*/
-          if (nfa_dm_is_raw_frame_session()) {
-            /* NFA_SendRawFrame() is called */
-            if (p_nfa_dm_cfg->presence_check_option &
-                NFA_DM_PCO_EMPTY_I_BLOCK) {
-              /* empty I block */
-              option = RW_T4T_CHK_EMPTY_I_BLOCK;
-            } else {
-              /* read binary on channel 3 */
-              option = RW_T4T_CHK_READ_BINARY_CH3;
-            }
-          } else if (!(p_nfa_dm_cfg->presence_check_option &
-                       NFA_DM_PCO_ISO_SLEEP_WAKE) &&
-                     (nfa_rw_cb.intf_type == NFC_INTERFACE_ISO_DEP)) {
-            /* the option indicates to use empty I block && ISODEP interface is
-             * activated */
-            option = RW_T4T_CHK_EMPTY_I_BLOCK;
-          }
-        }
+        /* empty I block */
+        option = RW_T4T_CHK_EMPTY_I_BLOCK;
     }
 
     if (option != NFA_RW_OPTION_INVALID) {
@@ -1825,11 +1805,12 @@
 ** Returns          TRUE (caller frees message buffer)
 **
 *******************************************************************************/
-bool nfa_rw_presence_check_tick(tNFA_RW_MSG* p_data) {
+bool nfa_rw_presence_check_tick(__attribute__((unused)) tNFA_RW_MSG* p_data) {
   /* Store the current operation */
   nfa_rw_cb.cur_op = NFA_RW_OP_PRESENCE_CHECK;
   nfa_rw_cb.flags |= NFA_RW_FL_AUTO_PRESENCE_CHECK_BUSY;
-  NFA_TRACE_DEBUG0("Auto-presence check starting...");
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("Auto-presence check starting...");
 
   /* Perform presence check */
   nfa_rw_presence_check(NULL);
@@ -1846,7 +1827,8 @@
 ** Returns          TRUE (caller frees message buffer)
 **
 *******************************************************************************/
-bool nfa_rw_presence_check_timeout(tNFA_RW_MSG* p_data) {
+bool nfa_rw_presence_check_timeout(__attribute__((unused))
+                                   tNFA_RW_MSG* p_data) {
   nfa_rw_handle_presence_check_rsp(NFC_STATUS_FAILED);
   return true;
 }
@@ -1860,7 +1842,7 @@
 ** Returns          Nothing
 **
 *******************************************************************************/
-static void nfa_rw_format_tag(tNFA_RW_MSG* p_data) {
+static void nfa_rw_format_tag() {
   tNFC_PROTOCOL protocol = nfa_rw_cb.protocol;
   tNFC_STATUS status = NFC_STATUS_FAILED;
 
@@ -1890,8 +1872,8 @@
 ** Returns          TRUE (message buffer to be freed by caller)
 **
 *******************************************************************************/
-static bool nfa_rw_detect_tlv(tNFA_RW_MSG* p_data, uint8_t tlv) {
-  NFA_TRACE_DEBUG0("nfa_rw_detect_tlv");
+static bool nfa_rw_detect_tlv(uint8_t tlv) {
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   switch (nfa_rw_cb.protocol) {
     case NFC_PROTOCOL_T1T:
@@ -1926,7 +1908,7 @@
   tNFC_PROTOCOL protocol = nfa_rw_cb.protocol;
   tNFC_STATUS status = NFC_STATUS_FAILED;
 
-  NFA_TRACE_DEBUG0("nfa_rw_config_tag_ro ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (NFC_PROTOCOL_T1T == protocol) {
     /* Type1Tag    - NFC-A */
@@ -1971,7 +1953,7 @@
 ** Returns          TRUE (message buffer to be freed by caller)
 **
 *******************************************************************************/
-static bool nfa_rw_t1t_rid(tNFA_RW_MSG* p_data) {
+static bool nfa_rw_t1t_rid() {
   if (RW_T1tRid() != NFC_STATUS_OK) nfa_rw_error_cleanup(NFA_READ_CPLT_EVT);
 
   return true;
@@ -1986,7 +1968,7 @@
 ** Returns          TRUE (message buffer to be freed by caller)
 **
 *******************************************************************************/
-static bool nfa_rw_t1t_rall(tNFA_RW_MSG* p_data) {
+static bool nfa_rw_t1t_rall() {
   if (RW_T1tReadAll() != NFC_STATUS_OK) nfa_rw_error_cleanup(NFA_READ_CPLT_EVT);
 
   return true;
@@ -2229,7 +2211,7 @@
 ** Returns          TRUE (message buffer to be freed by caller)
 **
 *******************************************************************************/
-static bool nfa_rw_t3t_get_system_codes(tNFA_RW_MSG* p_data) {
+static bool nfa_rw_t3t_get_system_codes() {
   tNFC_STATUS status;
   tNFA_TAG_PARAMS tag_params;
 
@@ -2386,12 +2368,12 @@
 ** Returns          nothing
 **
 *******************************************************************************/
-static void nfa_rw_raw_mode_data_cback(uint8_t conn_id, tNFC_CONN_EVT event,
-                                       tNFC_CONN* p_data) {
+static void nfa_rw_raw_mode_data_cback(__attribute__((unused)) uint8_t conn_id,
+                                       tNFC_CONN_EVT event, tNFC_CONN* p_data) {
   NFC_HDR* p_msg;
   tNFA_CONN_EVT_DATA evt_data;
 
-  NFA_TRACE_DEBUG1("nfa_rw_raw_mode_data_cback(): event = 0x%X", event);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("event = 0x%X", event);
 
   if ((event == NFC_DATA_CEVT) &&
       ((p_data->data.status == NFC_STATUS_OK) ||
@@ -2407,9 +2389,8 @@
 
       GKI_freebuf(p_msg);
     } else {
-      NFA_TRACE_ERROR0(
-          "nfa_rw_raw_mode_data_cback (): received NFC_DATA_CEVT with NULL "
-          "data pointer");
+      LOG(ERROR) << StringPrintf(
+          "received NFC_DATA_CEVT with NULL data pointer");
     }
   } else if (event == NFC_DEACTIVATE_CEVT) {
     NFC_SetStaticRfCback(NULL);
@@ -2429,7 +2410,6 @@
   tNFC_ACTIVATE_DEVT* p_activate_params =
       p_data->activate_ntf.p_activate_params;
   tNFA_TAG_PARAMS tag_params;
-  tNFA_RW_OPERATION msg;
   bool activate_notify = true;
   uint8_t* p;
 
@@ -2442,12 +2422,12 @@
       GKI_freebuf(nfa_dm_cb.p_activate_ntf);
       nfa_dm_cb.p_activate_ntf = NULL;
     }
-    NFA_TRACE_DEBUG0(
-        "nfa_rw_activate_ntf () - Type 2 tag wake up from HALT State");
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("- Type 2 tag wake up from HALT State");
     return true;
   }
 
-  NFA_TRACE_DEBUG0("nfa_rw_activate_ntf");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* Initialize control block */
   nfa_rw_cb.protocol = p_activate_params->protocol;
@@ -2515,7 +2495,7 @@
   if ((RW_SetActivatedTagType(p_activate_params, nfa_rw_cback)) !=
       NFC_STATUS_OK) {
     /* Log error (stay in NFA_RW_ST_ACTIVATED state until deactivation) */
-    NFA_TRACE_ERROR0("RW_SetActivatedTagType failed.");
+    LOG(ERROR) << StringPrintf("RW_SetActivatedTagType failed.");
     return true;
   }
 
@@ -2532,8 +2512,9 @@
       memcpy(tag_params.t1t.hr,
              p_activate_params->intf_param.intf_param.frame.param,
              NFA_T1T_HR_LEN);
-      msg.op = NFA_RW_OP_T1T_RID;
-      nfa_rw_handle_op_req((tNFA_RW_MSG*)&msg);
+      tNFA_RW_MSG msg;
+      msg.op_req.op = NFA_RW_OP_T1T_RID;
+      nfa_rw_handle_op_req(&msg);
       /* Delay notifying upper layer of NFA_ACTIVATED_EVT
          until HR0/HR1 is received */
       activate_notify = false;
@@ -2553,8 +2534,9 @@
       activate_notify = false;
 
       /* Issue command to get Felica system codes */
-      msg.op = NFA_RW_OP_T3T_GET_SYSTEM_CODES;
-      nfa_rw_handle_op_req((tNFA_RW_MSG*)&msg);
+      tNFA_RW_MSG msg;
+      msg.op_req.op = NFA_RW_OP_T3T_GET_SYSTEM_CODES;
+      nfa_rw_handle_op_req(&msg);
     }
   } else if (NFA_PROTOCOL_T5T == nfa_rw_cb.protocol) {
     /* Delay notifying upper layer of NFA_ACTIVATED_EVT to retrieve additional
@@ -2642,7 +2624,7 @@
 ** Returns          TRUE (message buffer to be freed by caller)
 **
 *******************************************************************************/
-bool nfa_rw_deactivate_ntf(tNFA_RW_MSG* p_data) {
+bool nfa_rw_deactivate_ntf(__attribute__((unused)) tNFA_RW_MSG* p_data) {
   /* Clear the activated flag */
   nfa_rw_cb.flags &= ~NFA_RW_FL_ACTIVATED;
 
@@ -2690,7 +2672,7 @@
 
   /* Check if activated */
   if (!(nfa_rw_cb.flags & NFA_RW_FL_ACTIVATED)) {
-    NFA_TRACE_ERROR0("nfa_rw_handle_op_req: not activated");
+    LOG(ERROR) << StringPrintf("nfa_rw_handle_op_req: not activated");
     return true;
   }
   /* Check if currently busy with another API call */
@@ -2701,7 +2683,7 @@
   else if (nfa_rw_cb.flags & NFA_RW_FL_AUTO_PRESENCE_CHECK_BUSY) {
     /* Cache the command (will be handled once auto-presence check is completed)
      */
-    NFA_TRACE_DEBUG1(
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
         "Deferring operation %i until after auto-presence check is completed",
         p_data->op_req.op);
     nfa_rw_cb.p_pending_msg = p_data;
@@ -2709,7 +2691,8 @@
     return false;
   }
 
-  NFA_TRACE_DEBUG1("nfa_rw_handle_op_req: op=0x%02x", p_data->op_req.op);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfa_rw_handle_op_req: op=0x%02x", p_data->op_req.op);
 
   nfa_rw_cb.flags |= NFA_RW_FL_API_BUSY;
 
@@ -2723,11 +2706,11 @@
   switch (p_data->op_req.op) {
     case NFA_RW_OP_DETECT_NDEF:
       nfa_rw_cb.skip_dyn_locks = false;
-      nfa_rw_detect_ndef(p_data);
+      nfa_rw_detect_ndef();
       break;
 
     case NFA_RW_OP_READ_NDEF:
-      nfa_rw_read_ndef(p_data);
+      nfa_rw_read_ndef();
       break;
 
     case NFA_RW_OP_WRITE_NDEF:
@@ -2752,15 +2735,15 @@
       break;
 
     case NFA_RW_OP_FORMAT_TAG:
-      nfa_rw_format_tag(p_data);
+      nfa_rw_format_tag();
       break;
 
     case NFA_RW_OP_DETECT_LOCK_TLV:
-      nfa_rw_detect_tlv(p_data, TAG_LOCK_CTRL_TLV);
+      nfa_rw_detect_tlv(TAG_LOCK_CTRL_TLV);
       break;
 
     case NFA_RW_OP_DETECT_MEM_TLV:
-      nfa_rw_detect_tlv(p_data, TAG_MEM_CTRL_TLV);
+      nfa_rw_detect_tlv(TAG_MEM_CTRL_TLV);
       break;
 
     case NFA_RW_OP_SET_TAG_RO:
@@ -2769,11 +2752,11 @@
       break;
 
     case NFA_RW_OP_T1T_RID:
-      nfa_rw_t1t_rid(p_data);
+      nfa_rw_t1t_rid();
       break;
 
     case NFA_RW_OP_T1T_RALL:
-      nfa_rw_t1t_rall(p_data);
+      nfa_rw_t1t_rall();
       break;
 
     case NFA_RW_OP_T1T_READ:
@@ -2819,7 +2802,7 @@
       break;
 
     case NFA_RW_OP_T3T_GET_SYSTEM_CODES:
-      nfa_rw_t3t_get_system_codes(p_data);
+      nfa_rw_t3t_get_system_codes();
       break;
 
     /* ISO 15693 tag commands */
@@ -2842,8 +2825,8 @@
       break;
 
     default:
-      NFA_TRACE_ERROR1("nfa_rw_handle_api: unhandled operation: %i",
-                       p_data->op_req.op);
+      LOG(ERROR) << StringPrintf("nfa_rw_handle_api: unhandled operation: %i",
+                                 p_data->op_req.op);
       break;
   }
 
@@ -2865,7 +2848,7 @@
   tNFA_CONN_EVT_DATA conn_evt_data;
   uint8_t event;
 
-  NFA_TRACE_ERROR0("nfa_rw_op_req_while_busy: unable to handle API");
+  LOG(ERROR) << StringPrintf("nfa_rw_op_req_while_busy: unable to handle API");
 
   /* Return appropriate event for requested API, with status=BUSY */
   conn_evt_data.status = NFA_STATUS_BUSY;
diff --git a/src/nfa/rw/nfa_rw_api.c b/src/nfa/rw/nfa_rw_api.cc
similarity index 94%
rename from src/nfa/rw/nfa_rw_api.c
rename to src/nfa/rw/nfa_rw_api.cc
index c21414d..a55962a 100644
--- a/src/nfa/rw/nfa_rw_api.c
+++ b/src/nfa/rw/nfa_rw_api.cc
@@ -22,10 +22,16 @@
  *
  ******************************************************************************/
 #include <string.h>
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "nfa_api.h"
 #include "nfa_rw_int.h"
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 /*****************************************************************************
 **  Constants
@@ -61,7 +67,7 @@
 tNFA_STATUS NFA_RwDetectNDef(void) {
   tNFA_RW_OPERATION* p_msg;
 
-  NFA_TRACE_API0("NFA_RwDetectNDef");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_msg = (tNFA_RW_OPERATION*)GKI_getbuf((uint16_t)(sizeof(tNFA_RW_OPERATION)));
   if (p_msg != NULL) {
@@ -106,7 +112,7 @@
 tNFA_STATUS NFA_RwReadNDef(void) {
   tNFA_RW_OPERATION* p_msg;
 
-  NFA_TRACE_API0("NFA_RwReadNDef");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_msg = (tNFA_RW_OPERATION*)GKI_getbuf((uint16_t)(sizeof(tNFA_RW_OPERATION)));
   if (p_msg != NULL) {
@@ -145,7 +151,7 @@
 tNFA_STATUS NFA_RwWriteNDef(uint8_t* p_data, uint32_t len) {
   tNFA_RW_OPERATION* p_msg;
 
-  NFA_TRACE_API2("NFA_RwWriteNDef (): ndef p_data=%08x, len: %i", p_data, len);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("ndef len: %i", len);
 
   /* Validate parameters */
   if (p_data == NULL) return (NFA_STATUS_INVALID_PARAM);
@@ -183,7 +189,7 @@
 tNFA_STATUS NFA_RwPresenceCheck(tNFA_RW_PRES_CHK_OPTION option) {
   tNFA_RW_OPERATION* p_msg;
 
-  NFA_TRACE_API0("NFA_RwPresenceCheck");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_msg = (tNFA_RW_OPERATION*)GKI_getbuf((uint16_t)(sizeof(tNFA_RW_OPERATION)));
   if (p_msg != NULL) {
@@ -216,7 +222,7 @@
 tNFA_STATUS NFA_RwFormatTag(void) {
   tNFA_RW_OPERATION* p_msg;
 
-  NFA_TRACE_API0("NFA_RwFormatTag");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_msg = (tNFA_RW_OPERATION*)GKI_getbuf((uint16_t)(sizeof(tNFA_RW_OPERATION)));
   if (p_msg != NULL) {
@@ -255,8 +261,8 @@
   if ((protocol != NFC_PROTOCOL_T1T) && (protocol != NFC_PROTOCOL_T2T) &&
       (protocol != NFC_PROTOCOL_T5T) && (protocol != NFC_PROTOCOL_ISO_DEP) &&
       (protocol != NFC_PROTOCOL_T3T)) {
-    NFA_TRACE_API1(
-        "NFA_RwSetTagReadOnly (): Cannot Configure as read only for Protocol: "
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "Cannot Configure as read only for Protocol: "
         "%d",
         protocol);
     return (NFA_STATUS_REJECTED);
@@ -264,13 +270,14 @@
 
   if ((!b_hard_lock && (protocol == NFC_PROTOCOL_T5T)) ||
       (b_hard_lock && (protocol == NFC_PROTOCOL_ISO_DEP))) {
-    NFA_TRACE_API2("NFA_RwSetTagReadOnly (): Cannot %s for Protocol: %d",
-                   b_hard_lock ? "Hard lock" : "Soft lock", protocol);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Cannot %s for Protocol: %d",
+                        b_hard_lock ? "Hard lock" : "Soft lock", protocol);
     return (NFA_STATUS_REJECTED);
   }
 
-  NFA_TRACE_API1("NFA_RwSetTagReadOnly (): %s",
-                 b_hard_lock ? "Hard lock" : "Soft lock");
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("%s", b_hard_lock ? "Hard lock" : "Soft lock");
 
   p_msg = (tNFA_RW_OPERATION*)GKI_getbuf((uint16_t)(sizeof(tNFA_RW_OPERATION)));
   if (p_msg != NULL) {
@@ -328,7 +335,7 @@
 tNFA_STATUS NFA_RwLocateTlv(uint8_t tlv_type) {
   tNFA_RW_OPERATION* p_msg;
 
-  NFA_TRACE_API0("NFA_RwLocateTlv");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_msg = (tNFA_RW_OPERATION*)GKI_getbuf((uint16_t)(sizeof(tNFA_RW_OPERATION)));
   if (p_msg != NULL) {
@@ -601,7 +608,8 @@
 tNFA_STATUS NFA_RwT2tRead(uint8_t block_number) {
   tNFA_RW_OPERATION* p_msg;
 
-  NFA_TRACE_API1("NFA_RwT2tRead (): Block to read: %d", block_number);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("Block to read: %d", block_number);
 
   p_msg = (tNFA_RW_OPERATION*)GKI_getbuf((uint16_t)(sizeof(tNFA_RW_OPERATION)));
   if (p_msg != NULL) {
@@ -634,7 +642,8 @@
 tNFA_STATUS NFA_RwT2tWrite(uint8_t block_number, uint8_t* p_data) {
   tNFA_RW_OPERATION* p_msg;
 
-  NFA_TRACE_API1("NFA_RwT2tWrite (): Block to write: %d", block_number);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("Block to write: %d", block_number);
 
   p_msg = (tNFA_RW_OPERATION*)GKI_getbuf((uint16_t)(sizeof(tNFA_RW_OPERATION)));
   if (p_msg != NULL) {
@@ -670,7 +679,8 @@
 tNFA_STATUS NFA_RwT2tSectorSelect(uint8_t sector_number) {
   tNFA_RW_OPERATION* p_msg;
 
-  NFA_TRACE_API1("NFA_RwT2tRead (): sector to select: %d", sector_number);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("sector to select: %d", sector_number);
 
   p_msg = (tNFA_RW_OPERATION*)GKI_getbuf((uint16_t)(sizeof(tNFA_RW_OPERATION)));
   if (p_msg != NULL) {
@@ -706,7 +716,8 @@
   tNFA_RW_OPERATION* p_msg;
   uint8_t* p_block_desc;
 
-  NFA_TRACE_API1("NFA_RwT3tRead (): num_blocks to read: %i", num_blocks);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("num_blocks to read: %i", num_blocks);
 
   /* Validate parameters */
   if ((num_blocks == 0) || (t3t_blocks == NULL))
@@ -757,7 +768,8 @@
   tNFA_RW_OPERATION* p_msg;
   uint8_t *p_block_desc, *p_data_area;
 
-  NFA_TRACE_API1("NFA_RwT3tWrite (): num_blocks to write: %i", num_blocks);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("num_blocks to write: %i", num_blocks);
 
   /* Validate parameters */
   if ((num_blocks == 0) || (t3t_blocks == NULL) | (p_data == NULL))
@@ -814,8 +826,8 @@
 tNFA_STATUS NFA_RwI93Inventory(bool afi_present, uint8_t afi, uint8_t* p_uid) {
   tNFA_RW_OPERATION* p_msg;
 
-  NFA_TRACE_API2("NFA_RwI93Inventory (): afi_present:%d, AFI: 0x%02X",
-                 afi_present, afi);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("afi_present:%d, AFI: 0x%02X", afi_present, afi);
 
   if (nfa_rw_cb.protocol != NFC_PROTOCOL_T5T) {
     return (NFA_STATUS_WRONG_PROTOCOL);
@@ -864,7 +876,7 @@
 tNFA_STATUS NFA_RwI93StayQuiet(void) {
   tNFA_RW_OPERATION* p_msg;
 
-  NFA_TRACE_API0("NFA_RwI93StayQuiet ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (nfa_rw_cb.protocol != NFC_PROTOCOL_T5T) {
     return (NFA_STATUS_WRONG_PROTOCOL);
@@ -904,8 +916,8 @@
 tNFA_STATUS NFA_RwI93ReadSingleBlock(uint8_t block_number) {
   tNFA_RW_OPERATION* p_msg;
 
-  NFA_TRACE_API1("NFA_RwI93ReadSingleBlock (): block_number: 0x%02X",
-                 block_number);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("block_number: 0x%02X", block_number);
 
   if (nfa_rw_cb.protocol != NFC_PROTOCOL_T5T) {
     return (NFA_STATUS_WRONG_PROTOCOL);
@@ -946,8 +958,8 @@
 tNFA_STATUS NFA_RwI93WriteSingleBlock(uint8_t block_number, uint8_t* p_data) {
   tNFA_RW_OPERATION* p_msg;
 
-  NFA_TRACE_API1("NFA_RwI93WriteSingleBlock (): block_number: 0x%02X",
-                 block_number);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("block_number: 0x%02X", block_number);
 
   if (nfa_rw_cb.protocol != NFC_PROTOCOL_T5T) {
     return (NFA_STATUS_WRONG_PROTOCOL);
@@ -997,7 +1009,8 @@
 tNFA_STATUS NFA_RwI93LockBlock(uint8_t block_number) {
   tNFA_RW_OPERATION* p_msg;
 
-  NFA_TRACE_API1("NFA_RwI93LockBlock (): block_number: 0x%02X", block_number);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("block_number: 0x%02X", block_number);
 
   if (nfa_rw_cb.protocol != NFC_PROTOCOL_T5T) {
     return (NFA_STATUS_WRONG_PROTOCOL);
@@ -1040,8 +1053,8 @@
                                         uint16_t number_blocks) {
   tNFA_RW_OPERATION* p_msg;
 
-  NFA_TRACE_API2("NFA_RwI93ReadMultipleBlocks(): %d, %d", first_block_number,
-                 number_blocks);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("%d, %d", first_block_number, number_blocks);
 
   if (nfa_rw_cb.protocol != NFC_PROTOCOL_T5T) {
     return (NFA_STATUS_WRONG_PROTOCOL);
@@ -1086,8 +1099,8 @@
   tNFA_RW_OPERATION* p_msg;
   uint16_t data_length;
 
-  NFA_TRACE_API2("NFA_RwI93WriteMultipleBlocks (): %d, %d", first_block_number,
-                 number_blocks);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("%d, %d", first_block_number, number_blocks);
 
   if (nfa_rw_cb.protocol != NFC_PROTOCOL_T5T) {
     return (NFA_STATUS_WRONG_PROTOCOL);
@@ -1145,8 +1158,8 @@
 tNFA_STATUS NFA_RwI93Select(uint8_t* p_uid) {
   tNFA_RW_OPERATION* p_msg;
 
-  NFA_TRACE_API3("NFA_RwI93Select (): UID: [%02X%02X%02X...]", *(p_uid),
-                 *(p_uid + 1), *(p_uid + 2));
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "UID: [%02X%02X%02X...]", *(p_uid), *(p_uid + 1), *(p_uid + 2));
 
   if (nfa_rw_cb.protocol != NFC_PROTOCOL_T5T) {
     return (NFA_STATUS_WRONG_PROTOCOL);
@@ -1189,7 +1202,7 @@
 tNFA_STATUS NFA_RwI93ResetToReady(void) {
   tNFA_RW_OPERATION* p_msg;
 
-  NFA_TRACE_API0("NFA_RwI93ResetToReady ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (nfa_rw_cb.protocol != NFC_PROTOCOL_T5T) {
     return (NFA_STATUS_WRONG_PROTOCOL);
@@ -1228,7 +1241,7 @@
 tNFA_STATUS NFA_RwI93WriteAFI(uint8_t afi) {
   tNFA_RW_OPERATION* p_msg;
 
-  NFA_TRACE_API1("NFA_RwI93WriteAFI (): AFI: 0x%02X", afi);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("AFI: 0x%02X", afi);
 
   if (nfa_rw_cb.protocol != NFC_PROTOCOL_T5T) {
     return (NFA_STATUS_WRONG_PROTOCOL);
@@ -1269,7 +1282,7 @@
 tNFA_STATUS NFA_RwI93LockAFI(void) {
   tNFA_RW_OPERATION* p_msg;
 
-  NFA_TRACE_API0("NFA_RwI93LockAFI ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (nfa_rw_cb.protocol != NFC_PROTOCOL_T5T) {
     return (NFA_STATUS_WRONG_PROTOCOL);
@@ -1308,7 +1321,7 @@
 tNFA_STATUS NFA_RwI93WriteDSFID(uint8_t dsfid) {
   tNFA_RW_OPERATION* p_msg;
 
-  NFA_TRACE_API1("NFA_RwI93WriteDSFID (): DSFID: 0x%02X", dsfid);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("DSFID: 0x%02X", dsfid);
 
   if (nfa_rw_cb.protocol != NFC_PROTOCOL_T5T) {
     return (NFA_STATUS_WRONG_PROTOCOL);
@@ -1349,7 +1362,7 @@
 tNFA_STATUS NFA_RwI93LockDSFID(void) {
   tNFA_RW_OPERATION* p_msg;
 
-  NFA_TRACE_API0("NFA_RwI93LockDSFID ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (nfa_rw_cb.protocol != NFC_PROTOCOL_T5T) {
     return (NFA_STATUS_WRONG_PROTOCOL);
@@ -1389,7 +1402,7 @@
 tNFA_STATUS NFA_RwI93GetSysInfo(uint8_t* p_uid) {
   tNFA_RW_OPERATION* p_msg;
 
-  NFA_TRACE_API0("NFA_RwI93GetSysInfo ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (nfa_rw_cb.protocol != NFC_PROTOCOL_T5T) {
     return (NFA_STATUS_WRONG_PROTOCOL);
@@ -1438,8 +1451,8 @@
                                                  uint16_t number_blocks) {
   tNFA_RW_OPERATION* p_msg;
 
-  NFA_TRACE_API2("NFA_RwI93GetMultiBlockSecurityStatus(): %d, %d",
-                 first_block_number, number_blocks);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("%d, %d", first_block_number, number_blocks);
 
   if (nfa_rw_cb.protocol != NFC_PROTOCOL_T5T) {
     return (NFA_STATUS_WRONG_PROTOCOL);
diff --git a/src/nfa/rw/nfa_rw_main.c b/src/nfa/rw/nfa_rw_main.cc
similarity index 89%
rename from src/nfa/rw/nfa_rw_main.c
rename to src/nfa/rw/nfa_rw_main.cc
index e1b594b..a8f83b5 100644
--- a/src/nfa/rw/nfa_rw_main.c
+++ b/src/nfa/rw/nfa_rw_main.cc
@@ -22,11 +22,17 @@
  *
  ******************************************************************************/
 #include <string.h>
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "nfa_dm_int.h"
 #include "nfa_rw_api.h"
 #include "nfa_rw_int.h"
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 /* NFA_RW control block */
 tNFA_RW_CB nfa_rw_cb;
@@ -49,9 +55,7 @@
 /*****************************************************************************
 ** Local function prototypes
 *****************************************************************************/
-#if (BT_TRACE_VERBOSE == TRUE)
-static char* nfa_rw_evt_2_str(uint16_t event);
-#endif
+static std::string nfa_rw_evt_2_str(uint16_t event);
 
 /*******************************************************************************
 **
@@ -63,7 +67,7 @@
 **
 *******************************************************************************/
 void nfa_rw_init(void) {
-  NFA_TRACE_DEBUG0("nfa_rw_init ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* initialize control block */
   memset(&nfa_rw_cb, 0, sizeof(tNFA_RW_CB));
@@ -172,27 +176,21 @@
 bool nfa_rw_handle_event(NFC_HDR* p_msg) {
   uint16_t act_idx;
 
-#if (BT_TRACE_VERBOSE == TRUE)
-  NFA_TRACE_EVENT3("nfa_rw_handle_event event: %s (0x%02x), flags: %08x",
-                   nfa_rw_evt_2_str(p_msg->event), p_msg->event,
-                   nfa_rw_cb.flags);
-#else
-  NFA_TRACE_EVENT2("nfa_rw_handle_event event: 0x%x, flags: %08x", p_msg->event,
-                   nfa_rw_cb.flags);
-#endif
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "nfa_rw_handle_event event: %s (0x%02x), flags: %08x",
+      nfa_rw_evt_2_str(p_msg->event).c_str(), p_msg->event, nfa_rw_cb.flags);
 
   /* Get NFA_RW sub-event */
   act_idx = (p_msg->event & 0x00FF);
   if (act_idx < (NFA_RW_MAX_EVT & 0xFF)) {
     return (*nfa_rw_action_tbl[act_idx])((tNFA_RW_MSG*)p_msg);
   } else {
-    NFA_TRACE_ERROR1("nfa_rw_handle_event: unhandled event 0x%02X",
-                     p_msg->event);
+    LOG(ERROR) << StringPrintf("nfa_rw_handle_event: unhandled event 0x%02X",
+                               p_msg->event);
     return true;
   }
 }
 
-#if (BT_TRACE_VERBOSE == TRUE)
 /*******************************************************************************
 **
 ** Function         nfa_rw_evt_2_str
@@ -200,25 +198,19 @@
 ** Description      convert nfa_rw evt to string
 **
 *******************************************************************************/
-static char* nfa_rw_evt_2_str(uint16_t event) {
+static std::string nfa_rw_evt_2_str(uint16_t event) {
   switch (event) {
     case NFA_RW_OP_REQUEST_EVT:
       return "NFA_RW_OP_REQUEST_EVT";
-
     case NFA_RW_ACTIVATE_NTF_EVT:
       return "NFA_RW_ACTIVATE_NTF_EVT";
-
     case NFA_RW_DEACTIVATE_NTF_EVT:
       return "NFA_RW_DEACTIVATE_NTF_EVT";
-
     case NFA_RW_PRESENCE_CHECK_TICK_EVT:
       return "NFA_RW_PRESENCE_CHECK_TICK_EVT";
-
     case NFA_RW_PRESENCE_CHECK_TIMEOUT_EVT:
       return "NFA_RW_PRESENCE_CHECK_TIMEOUT_EVT";
-
     default:
       return "Unknown";
   }
 }
-#endif /* BT_TRACE_VERBOSE */
diff --git a/src/nfa/sys/nfa_sys_cback.c b/src/nfa/sys/nfa_sys_cback.cc
similarity index 90%
rename from src/nfa/sys/nfa_sys_cback.c
rename to src/nfa/sys/nfa_sys_cback.cc
index 0ccd3d8..4ca898c 100644
--- a/src/nfa/sys/nfa_sys_cback.c
+++ b/src/nfa/sys/nfa_sys_cback.cc
@@ -21,9 +21,16 @@
  *  Registration/deregistration functions for inter-module callbacks
  *
  ******************************************************************************/
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "nfa_sys.h"
 #include "nfa_sys_int.h"
 
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
+
 /*******************************************************************************
 **
 ** Function         nfa_sys_cback_reg_enable_complete
@@ -52,9 +59,8 @@
 void nfa_sys_cback_notify_enable_complete(uint8_t id) {
   nfa_sys_cb.enable_cplt_flags |= (0x0001 << id);
 
-  NFA_TRACE_DEBUG2(
-      "nfa_sys_cback_notify_enable_complete () enable_cplt_flags=0x%x, "
-      "enable_cplt_mask=0x%x",
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "enable_cplt_flags=0x%x, enable_cplt_mask=0x%x",
       nfa_sys_cb.enable_cplt_flags, nfa_sys_cb.enable_cplt_mask);
 
   if ((nfa_sys_cb.enable_cplt_flags == nfa_sys_cb.enable_cplt_mask) &&
@@ -93,10 +99,8 @@
 void nfa_sys_cback_notify_nfcc_power_mode_proc_complete(uint8_t id) {
   nfa_sys_cb.proc_nfcc_pwr_mode_cplt_flags |= (0x0001 << id);
 
-  NFA_TRACE_DEBUG2(
-      "nfa_sys_cback_notify_nfcc_power_mode_proc_complete () flags=0x%x, "
-      "mask=0x%x",
-      nfa_sys_cb.proc_nfcc_pwr_mode_cplt_flags,
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "flags=0x%x, mask=0x%x", nfa_sys_cb.proc_nfcc_pwr_mode_cplt_flags,
       nfa_sys_cb.proc_nfcc_pwr_mode_cplt_mask);
 
   /* except SYS */
diff --git a/src/nfa/sys/nfa_sys_cfg.c b/src/nfa/sys/nfa_sys_cfg.cc
similarity index 93%
rename from src/nfa/sys/nfa_sys_cfg.c
rename to src/nfa/sys/nfa_sys_cfg.cc
index 0c6a199..ccf01f2 100644
--- a/src/nfa/sys/nfa_sys_cfg.c
+++ b/src/nfa/sys/nfa_sys_cfg.cc
@@ -25,13 +25,11 @@
 
 #include "gki.h"
 #include "nfa_sys.h"
-#include "nfc_target.h"
 
 const tNFA_SYS_CFG nfa_sys_cfg = {
     NFA_MBOX_EVT_MASK,       /* GKI mailbox event */
     NFA_MBOX_ID,             /* GKI mailbox id */
     NFA_TIMER_ID,            /* GKI timer id */
-    APPL_INITIAL_TRACE_LEVEL /* initial trace level */
 };
 
 tNFA_SYS_CFG* p_nfa_sys_cfg = (tNFA_SYS_CFG*)&nfa_sys_cfg;
diff --git a/src/nfa/sys/nfa_sys_main.c b/src/nfa/sys/nfa_sys_main.cc
similarity index 90%
rename from src/nfa/sys/nfa_sys_main.c
rename to src/nfa/sys/nfa_sys_main.cc
index fafbf15..147d1b0 100644
--- a/src/nfa/sys/nfa_sys_main.c
+++ b/src/nfa/sys/nfa_sys_main.cc
@@ -22,11 +22,17 @@
  *
  ******************************************************************************/
 #include <string.h>
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "nfa_api.h"
 #include "nfa_dm_int.h"
-#include "nfa_sys.h"
 #include "nfa_sys_int.h"
-#include "nfa_sys_ptim.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 /* protocol timer update period, in milliseconds */
 #ifndef NFA_SYS_TIMER_PERIOD
@@ -34,9 +40,8 @@
 #endif
 
 /* system manager control block definition */
-tNFA_SYS_CB nfa_sys_cb = {
-    0,
-}; /* nfa_sys control block. statically initialize 'flags' field to 0 */
+tNFA_SYS_CB nfa_sys_cb = {};
+/* nfa_sys control block. statically initialize 'flags' field to 0 */
 
 /*******************************************************************************
 **
@@ -53,7 +58,6 @@
   nfa_sys_cb.flags |= NFA_SYS_FL_INITIALIZED;
   nfa_sys_ptim_init(&nfa_sys_cb.ptim_cb, NFA_SYS_TIMER_PERIOD,
                     p_nfa_sys_cfg->timer);
-  nfa_sys_cb.trace_level = p_nfa_sys_cfg->trace_level;
 }
 
 /*******************************************************************************
@@ -70,7 +74,8 @@
   uint8_t id;
   bool freebuf = true;
 
-  NFA_TRACE_EVENT1("NFA got event 0x%04X", p_msg->event);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("NFA got event 0x%04X", p_msg->event);
 
   /* get subsystem id from event */
   id = (uint8_t)(p_msg->event >> 8);
@@ -79,7 +84,7 @@
   if ((id < NFA_ID_MAX) && (nfa_sys_cb.is_reg[id])) {
     freebuf = (*nfa_sys_cb.reg[id]->evt_hdlr)(p_msg);
   } else {
-    NFA_TRACE_WARNING1("NFA got unregistered event id %d", id);
+    LOG(WARNING) << StringPrintf("NFA got unregistered event id %d", id);
   }
 
   if (freebuf) {
@@ -125,8 +130,8 @@
       nfa_sys_cb.proc_nfcc_pwr_mode_cplt_mask |= (0x0001 << id);
   }
 
-  NFA_TRACE_DEBUG2("nfa_sys_register () id=%i, enable_cplt_mask=0x%x", id,
-                   nfa_sys_cb.enable_cplt_mask);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "id=%i, enable_cplt_mask=0x%x", id, nfa_sys_cb.enable_cplt_mask);
 }
 
 /*******************************************************************************
@@ -170,7 +175,8 @@
 **
 *******************************************************************************/
 void nfa_sys_deregister(uint8_t id) {
-  NFA_TRACE_DEBUG1("nfa_sys: deregistering subsystem %i", id);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfa_sys: deregistering subsystem %i", id);
 
   nfa_sys_cb.is_reg[id] = false;
 
@@ -227,7 +233,8 @@
 void nfa_sys_enable_subsystems(void) {
   uint8_t id;
 
-  NFA_TRACE_DEBUG0("nfa_sys: enabling subsystems");
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfa_sys: enabling subsystems");
 
   /* Enable all subsystems except SYS */
   for (id = NFA_ID_DM; id < NFA_ID_MAX; id++) {
@@ -257,7 +264,8 @@
   uint8_t id;
   bool done = true;
 
-  NFA_TRACE_DEBUG1("nfa_sys: disabling subsystems:%d", graceful);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfa_sys: disabling subsystems:%d", graceful);
   nfa_sys_cb.graceful_disable = graceful;
 
   /* Disable all subsystems above NFA_DM. (NFA_DM and NFA_SYS will be disabled
@@ -294,8 +302,8 @@
 void nfa_sys_notify_nfcc_power_mode(uint8_t nfcc_power_mode) {
   uint8_t id;
 
-  NFA_TRACE_DEBUG1("nfa_sys: notify NFCC power mode(%d) to subsystems",
-                   nfcc_power_mode);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "nfa_sys: notify NFCC power mode(%d) to subsystems", nfcc_power_mode);
 
   /* Notify NFCC power state to all subsystems except NFA_SYS */
   for (id = NFA_ID_DM; id < NFA_ID_MAX; id++) {
@@ -360,14 +368,3 @@
 **
 *******************************************************************************/
 void nfa_sys_disable_timers(void) { nfa_sys_cb.timers_disabled = true; }
-
-/*******************************************************************************
-**
-** Function         nfa_sys_set_trace_level
-**
-** Description      Set trace level for BTA
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfa_sys_set_trace_level(uint8_t level) { nfa_sys_cb.trace_level = level; }
diff --git a/src/nfa/sys/nfa_sys_ptim.c b/src/nfa/sys/nfa_sys_ptim.cc
similarity index 88%
rename from src/nfa/sys/nfa_sys_ptim.c
rename to src/nfa/sys/nfa_sys_ptim.cc
index 0e42042..3f0d48a 100644
--- a/src/nfa/sys/nfa_sys_ptim.c
+++ b/src/nfa/sys/nfa_sys_ptim.cc
@@ -21,12 +21,15 @@
  *  Protocol timer services (taken from bta ptim)
  *
  ******************************************************************************/
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
 
 #include "nfa_sys_ptim.h"
-#include "gki.h"
 #include "nfa_sys.h"
-#include "nfa_sys_int.h"
-#include "nfc_target.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 /*******************************************************************************
 **
@@ -86,7 +89,8 @@
          (p_cb->timer_queue.p_first->ticks <= 0)) {
     /* removed expired timer from list */
     p_tle = p_cb->timer_queue.p_first;
-    NFA_TRACE_DEBUG1("nfa_sys_ptim_timer_update expired: %08x", p_tle);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("nfa_sys_ptim_timer_update expired: %p", p_tle);
     GKI_remove_from_timer_list(&p_cb->timer_queue, p_tle);
 
     /* call timer callback */
@@ -104,7 +108,7 @@
 
   /* if timer list is empty stop periodic GKI timer */
   if (p_cb->timer_queue.p_first == NULL) {
-    NFA_TRACE_DEBUG0("ptim timer stop");
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("ptim timer stop");
     GKI_stop_timer(p_cb->timer_id);
   }
 }
@@ -121,11 +125,12 @@
 *******************************************************************************/
 void nfa_sys_ptim_start_timer(tPTIM_CB* p_cb, TIMER_LIST_ENT* p_tle,
                               uint16_t type, int32_t timeout) {
-  NFA_TRACE_DEBUG1("nfa_sys_ptim_start_timer %08x", p_tle);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfa_sys_ptim_start_timer %p", p_tle);
 
   /* if timer list is currently empty, start periodic GKI timer */
   if (p_cb->timer_queue.p_first == NULL) {
-    NFA_TRACE_DEBUG0("ptim timer start");
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("ptim timer start");
     p_cb->last_gki_ticks = GKI_get_tick_count();
     GKI_start_timer(p_cb->timer_id, GKI_MS_TO_TICKS(p_cb->period), true);
   }
@@ -148,13 +153,14 @@
 **
 *******************************************************************************/
 void nfa_sys_ptim_stop_timer(tPTIM_CB* p_cb, TIMER_LIST_ENT* p_tle) {
-  NFA_TRACE_DEBUG1("nfa_sys_ptim_stop_timer %08x", p_tle);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfa_sys_ptim_stop_timer %p", p_tle);
 
   GKI_remove_from_timer_list(&p_cb->timer_queue, p_tle);
 
   /* if timer list is empty stop periodic GKI timer */
   if (p_cb->timer_queue.p_first == NULL) {
-    NFA_TRACE_DEBUG0("ptim timer stop");
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("ptim timer stop");
     GKI_stop_timer(p_cb->timer_id);
   }
 }
diff --git a/src/nfc/include/ce_api.h b/src/nfc/include/ce_api.h
index 0432545..1ed0f91 100644
--- a/src/nfc/include/ce_api.h
+++ b/src/nfc/include/ce_api.h
@@ -38,28 +38,18 @@
   CE_T3T_NDEF_UPDATE_START_EVT = CE_T3T_FIRST_EVT,
   CE_T3T_NDEF_UPDATE_CPLT_EVT,
   CE_T3T_UPDATE_EVT,
-  CE_T3T_CHECK_EVT,
   CE_T3T_RAW_FRAME_EVT,
-  CE_T3T_MAX_EVT,
 
   CE_T4T_NDEF_UPDATE_START_EVT = CE_T4T_FIRST_EVT,
   CE_T4T_NDEF_UPDATE_CPLT_EVT,
   CE_T4T_NDEF_UPDATE_ABORT_EVT,
-  CE_T4T_RAW_FRAME_EVT,
-  CE_T4T_MAX_EVT
+  CE_T4T_RAW_FRAME_EVT
 };
 
-#define CE_RAW_FRAME_EVT 0xFF
-
 typedef uint8_t tCE_EVENT;
 
 typedef struct {
   tNFC_STATUS status;
-  NFC_HDR* p_data;
-} tCE_T2T_DATA;
-
-typedef struct {
-  tNFC_STATUS status;
   uint8_t* p_data;
   bool b_updated;
   uint32_t length;
@@ -194,33 +184,6 @@
 
 /*******************************************************************************
 **
-** Function         CE_T4TTestSetCC
-**
-** Description      Set fields in Capability Container File for testing
-**
-** Returns          NFC_STATUS_OK if success
-**
-*******************************************************************************/
-extern tNFC_STATUS CE_T4TTestSetCC(uint16_t cc_len, uint8_t version,
-                                   uint16_t max_le, uint16_t max_lc);
-
-/*******************************************************************************
-**
-** Function         CE_T4TTestSetNDEFCtrlTLV
-**
-** Description      Set fields in NDEF File Control TLV for testing
-**
-** Returns          NFC_STATUS_OK if success
-**
-*******************************************************************************/
-extern tNFC_STATUS CE_T4TTestSetNDEFCtrlTLV(uint8_t type, uint8_t length,
-                                            uint16_t file_id,
-                                            uint16_t max_file_size,
-                                            uint8_t read_access,
-                                            uint8_t write_access);
-
-/*******************************************************************************
-**
 ** Function         CE_SendRawFrame
 **
 ** Description      This function sends a raw frame to the peer device.
@@ -242,18 +205,4 @@
 extern tNFC_STATUS CE_SetActivatedTagType(tNFC_ACTIVATE_DEVT* p_activate_params,
                                           uint16_t t3t_system_code,
                                           tCE_CBACK* p_cback);
-
-/*******************************************************************************
-**
-** Function         CE_SetTraceLevel
-**
-** Description      This function sets the trace level for Card Emulation mode.
-**                  If called with a value of 0xFF,
-**                  it simply returns the current trace level.
-**
-** Returns          The new or current trace level
-**
-*******************************************************************************/
-extern uint8_t CE_SetTraceLevel(uint8_t new_level);
-
 #endif /* CE_API_H */
diff --git a/src/nfc/int/ce_int.h b/src/nfc/include/ce_int.h
similarity index 96%
rename from src/nfc/int/ce_int.h
rename to src/nfc/include/ce_int.h
index 338d61f..1a48a36 100644
--- a/src/nfc/int/ce_int.h
+++ b/src/nfc/include/ce_int.h
@@ -36,9 +36,6 @@
 #define CE_MAX_SUP_PROTO NCI_PROTOCOL_MIFARE
 #endif
 
-/* 2^8=256. CB use uint8_t for BytesPerPage, so max is 7 */
-#define CE_MAX_BYTE_PER_PAGE 7
-
 /* CE Type 3 Tag structures */
 
 /* Type 3 Tag NDEF card-emulation */
@@ -133,8 +130,6 @@
   uint16_t ndef_max; /* max size of p_ndef */
   uint16_t ndef_cur; /* current size of p_ndef */
   tNFC_RF_TECH tech;
-  uint8_t trace_level;
-
 } tCE_CB;
 
 /*
@@ -155,9 +150,6 @@
 /*****************************************************************************
 **  EXTERNAL FUNCTION DECLARATIONS
 *****************************************************************************/
-#ifdef __cplusplus
-extern "C" {
-#endif
 
 /* Global NFC data */
 extern tCE_CB ce_cb;
@@ -173,8 +165,4 @@
 extern tNFC_STATUS ce_select_t4t(void);
 extern void ce_t4t_process_timeout(TIMER_LIST_ENT* p_tle);
 
-#ifdef __cplusplus
-}
-#endif
-
 #endif /* CE_INT_H_ */
diff --git a/src/nfc/include/llcp_api.h b/src/nfc/include/llcp_api.h
index 50b0740..b71fca4 100644
--- a/src/nfc/include/llcp_api.h
+++ b/src/nfc/include/llcp_api.h
@@ -24,6 +24,7 @@
 #ifndef LLCP_API_H
 #define LLCP_API_H
 
+#include <string>
 #include "llcp_defs.h"
 #include "nfc_target.h"
 
@@ -86,8 +87,6 @@
 #define LLCP_LINK_VERSION_FAILED 0x01
 /* Failed to parse received general bytes   */
 #define LLCP_LINK_BAD_GEN_BYTES 0x02
-/* internal error                           */
-#define LLCP_LINK_INTERNAL_ERROR 0x03
 /* Link has been deactivated by local       */
 #define LLCP_LINK_LOCAL_INITIATED 0x04
 /* Link has been deactivated by remote      */
@@ -98,9 +97,6 @@
 #define LLCP_LINK_FRAME_ERROR 0x07
 /* RF link loss without any rx LLC PDU      */
 #define LLCP_LINK_RF_LINK_LOSS_NO_RX_LLC 0x08
-#define LLCP_LINK_RF_TRANSMISSION_ERR NFC_STATUS_RF_TRANSMISSION_ERR
-#define LLCP_LINK_RF_PROTOCOL_ERR NFC_STATUS_RF_PROTOCOL_ERR
-#define LLCP_LINK_RF_TIMEOUT NFC_STATUS_TIMEOUT
 #define LLCP_LINK_RF_LINK_LOSS_ERR NFC_STATUS_LINK_LOSS
 
 typedef void(tLLCP_LINK_CBACK)(uint8_t event, uint8_t reason);
@@ -222,9 +218,6 @@
 /*****************************************************************************
 **  External Function Declarations
 *****************************************************************************/
-#ifdef __cplusplus
-extern "C" {
-#endif
 
 /*******************************************************************************
 **
@@ -356,7 +349,7 @@
 **
 *******************************************************************************/
 extern uint8_t LLCP_RegisterServer(uint8_t reg_sap, uint8_t link_type,
-                                   char* p_service_name,
+                                   std::string p_service_name,
                                    tLLCP_APP_CBACK* p_sap_cback);
 
 /*******************************************************************************
@@ -660,18 +653,6 @@
 
 /*******************************************************************************
 **
-** Function         LLCP_SetTraceLevel
-**
-** Description      This function sets the trace level for LLCP.  If called with
-**                  a value of 0xFF, it simply returns the current trace level.
-**
-** Returns          The new or current trace level
-**
-*******************************************************************************/
-
-extern uint8_t LLCP_SetTraceLevel(uint8_t new_level);
-/*******************************************************************************
-**
 ** Function         LLCP_RegisterDtaCback
 **
 ** Description      Register callback function for LLCP DTA testing
@@ -695,8 +676,4 @@
 extern void LLCP_SetTestParams(uint8_t version, uint16_t wks);
 #endif
 
-#ifdef __cplusplus
-}
-#endif
-
 #endif /* LLCP_API_H */
diff --git a/src/nfc/include/llcp_defs.h b/src/nfc/include/llcp_defs.h
index ba25710..f79c029 100644
--- a/src/nfc/include/llcp_defs.h
+++ b/src/nfc/include/llcp_defs.h
@@ -52,12 +52,9 @@
 #define LLCP_PDU_DM_TYPE 7
 #define LLCP_PDU_FRMR_TYPE 8
 #define LLCP_PDU_SNL_TYPE 9
-#define LLCP_PDU_RESERVED_1010 10
-#define LLCP_PDU_RESERVED_1011 11
 #define LLCP_PDU_I_TYPE 12
 #define LLCP_PDU_RR_TYPE 13
 #define LLCP_PDU_RNR_TYPE 14
-#define LLCP_PDU_RESERVED_1111 15
 
 #define LLCP_PDU_SYMM_SIZE 2
 #define LLCP_PDU_DISC_SIZE 2
@@ -81,16 +78,6 @@
 #define LLCP_FRMR_R_ERROR_FLAG 0x02 /* Receive Sequence Error */
 #define LLCP_FRMR_S_ERROR_FLAG 0x01 /* Send Sequence Error */
 
-#define LLCP_GET_FRMR_W_ERROR_FLAG(u8) (((uint8_t)(u8) >> 7) & 0x01)
-#define LLCP_GET_FRMR_I_ERROR_FLAG(u8) (((uint8_t)(u8) >> 6) & 0x01)
-#define LLCP_GET_FRMR_R_ERROR_FLAG(u8) (((uint8_t)(u8) >> 5) & 0x01)
-#define LLCP_GET_FRMR_S_ERROR_FLAG(u8) (((uint8_t)(u8) >> 4) & 0x01)
-#define LLCP_GET_FRMR_PTYPE(u8) ((uint8_t)(u8)&0x0F)
-#define LLCP_GET_FRMR_VS(u16) (((uint16_t)(u16) >> 12) & 0x000F)
-#define LLCP_GET_FRMR_VR(u16) (((uint16_t)(u16) >> 8) & 0x000F)
-#define LLCP_GET_FRMR_VSA(u16) (((uint16_t)(u16) >> 4) & 0x000F)
-#define LLCP_GET_FRMR_VRA(u16) (((uint16_t)(u16) >> 0) & 0x000F)
-
 /*
 ** LLCP Parameter Descriptions
 */
@@ -122,21 +109,10 @@
 
 /* Well-Known Service Bitmap */
 #define LLCP_WKS_MASK_LM 0x0001  /* Link Management */
-#define LLCP_WKS_MASK_SDP 0x0002 /* Service Discovery "urn:nfc:sn:sdp" */
-#define LLCP_WKS_MASK_IP 0x0004  /* IP over LLCP Binding "urn:nfc:sn:ip" */
-/* OBEX over LLCP Binding "urn:nfc:sn:obex" */
-#define LLCP_WKS_MASK_OBEX 0x0008
-/* Simple NDEP Exchange Protocol "urn:nfc:sn:snep" */
-#define LLCP_WKS_MASK_SNEP 0x0010
 
 /* Well-Known Service Access Points */
 #define LLCP_SAP_LM 0x00  /* Link Management */
 #define LLCP_SAP_SDP 0x01 /* Service Discovery "urn:nfc:sn:sdp" */
-#define LLCP_SAP_IP 0x02  /* IP over LLCP Binding "urn:nfc:sn:ip" */
-/* OBEX over LLCP Binding "urn:nfc:sn:obex" */
-#define LLCP_SAP_OBEX 0x03
-/* Simple NDEP Exchange Protocol "urn:nfc:sn:snep" */
-#define LLCP_SAP_SNEP 0x04
 
 /* Link Timeout, LTO */
 #define LLCP_LTO_TYPE 0x04
@@ -157,7 +133,6 @@
 /* Option, OPT */
 #define LLCP_OPT_TYPE 0x07
 #define LLCP_OPT_LEN 0x01
-#define LLCP_GET_OPT_LSC(u8) ((uint8_t)(u8)&0x03)
 
 /* Service Discovery Request, SDREQ */
 #define LLCP_SDREQ_TYPE 0x08
@@ -182,7 +157,6 @@
 #define LLCP_SEQ_MODULO 16
 
 #define LLCP_NUM_SAPS 64
-#define LLCP_LOWER_BOUND_WK_SAP 0x00
 #define LLCP_UPPER_BOUND_WK_SAP 0x0F
 #define LLCP_LOWER_BOUND_SDP_SAP 0x10
 #define LLCP_UPPER_BOUND_SDP_SAP 0x1F
@@ -192,10 +166,6 @@
 /* Max Payload */
 /* Maximum Payload size, Length Reduction LRi/LRt */
 #define LLCP_NCI_MAX_PAYL_SIZE 254
-/* Data exchange protocol header, 3 bytes */
-#define LLCP_NFC_DEP_HEADER_SIZE 3
-#define LLCP_MAX_PAYLOAD_SIZE \
-  (LLCP_NCI_MAX_PAYL_SIZE - LLCP_NFC_DEP_HEADER_SIZE)
 
 #define LLCP_MAX_GEN_BYTES 48
 
diff --git a/src/nfc/int/llcp_int.h b/src/nfc/include/llcp_int.h
similarity index 97%
rename from src/nfc/int/llcp_int.h
rename to src/nfc/include/llcp_int.h
index fdf1c70..6051ca0 100644
--- a/src/nfc/int/llcp_int.h
+++ b/src/nfc/include/llcp_int.h
@@ -107,8 +107,8 @@
 */
 
 typedef struct {
-  uint8_t link_type;       /* logical link and/or data link                */
-  uint8_t* p_service_name; /* GKI buffer containing service name           */
+  uint8_t link_type;    /* logical link and/or data link                */
+  char* p_service_name; /* GKI buffer containing service name           */
   tLLCP_APP_CBACK* p_app_cback; /* application's callback pointer */
 
   BUFFER_Q ui_xmit_q;      /* UI PDU queue for transmitting                */
@@ -126,8 +126,7 @@
   LLCP_DLC_STATE_W4_LOCAL_RESP,  /* waiting for connection confirm from upper
                                     layer  */
   LLCP_DLC_STATE_CONNECTED,      /* data link connection has been established */
-  LLCP_DLC_STATE_W4_REMOTE_DM, /* waiting for disconnection confirm from peer */
-  LLCP_DLC_STATE_MAX
+  LLCP_DLC_STATE_W4_REMOTE_DM /* waiting for disconnection confirm from peer */
 };
 typedef uint8_t tLLCP_DLC_STATE;
 
@@ -217,8 +216,6 @@
 */
 
 typedef struct {
-  uint8_t trace_level; /* LLCP trace level                             */
-
   tLLCP_SDP_CB sdp_cb; /* SDP control block                            */
   tLLCP_LCB lcb;       /* LLCP link control block                      */
   tLLCP_APP_CB wks_cb[LLCP_MAX_WKS]; /* Application's registration for
@@ -285,10 +282,6 @@
 
 #endif
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 /*
 ** LLCP global data
 */
@@ -364,8 +357,4 @@
 tLLCP_STATUS llcp_sdp_proc_snl(uint16_t sdu_length, uint8_t* p);
 void llcp_sdp_check_send_snl(void);
 void llcp_sdp_proc_deactivation(void);
-#ifdef __cplusplus
-}
-#endif
-
 #endif
diff --git a/src/nfc/include/nci_hmsgs.h b/src/nfc/include/nci_hmsgs.h
index d013cde..2ea0c70 100644
--- a/src/nfc/include/nci_hmsgs.h
+++ b/src/nfc/include/nci_hmsgs.h
@@ -24,10 +24,6 @@
 #ifndef NFC_NCI_HMSGS_H
 #define NFC_NCI_HMSGS_H
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 #include "nci_defs.h"
 #include "nfc_types.h"
 
@@ -69,10 +65,7 @@
 uint8_t nci_snd_set_routing_cmd(bool more, uint8_t num_tlv, uint8_t tlv_size,
                                 uint8_t* p_param_tlvs);
 uint8_t nci_snd_get_routing_cmd(void);
-#endif
-
-#ifdef __cplusplus
-}
+uint8_t nci_snd_nfcee_power_link_control(uint8_t nfcee_id, uint8_t pl_config);
 #endif
 
 #endif /* NFC_NCI_MSGS_H */
diff --git a/src/nfc/include/ndef_utils.h b/src/nfc/include/ndef_utils.h
index 960185e..a30d40f 100644
--- a/src/nfc/include/ndef_utils.h
+++ b/src/nfc/include/ndef_utils.h
@@ -68,19 +68,6 @@
 };
 typedef uint8_t tNDEF_STATUS;
 
-#define HR_REC_TYPE_LEN 2        /* Handover Request Record Type     */
-#define HS_REC_TYPE_LEN 2        /* Handover Select Record Type      */
-#define HC_REC_TYPE_LEN 2        /* Handover Carrier recrod Type     */
-#define CR_REC_TYPE_LEN 2        /* Collision Resolution Record Type */
-#define AC_REC_TYPE_LEN 2        /* Alternative Carrier Record Type  */
-#define ERR_REC_TYPE_LEN 3       /* Error Record Type                */
-#define BT_OOB_REC_TYPE_LEN 32   /* Bluetooth OOB Data Type          */
-#define WIFI_WSC_REC_TYPE_LEN 23 /* Wifi WSC Data Type               */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 /* Functions to parse a received NDEF Message
 */
 /*******************************************************************************
@@ -280,39 +267,6 @@
 
 /*******************************************************************************
 **
-** Function         NDEF_MsgInsertRec
-**
-** Description      This function inserts a record at a specific index into the
-**                  given NDEF message
-**
-** Returns          OK, or error if the record did not fit
-**                  *p_cur_size is updated
-**
-*******************************************************************************/
-extern tNDEF_STATUS NDEF_MsgInsertRec(uint8_t* p_msg, uint32_t max_size,
-                                      uint32_t* p_cur_size, int32_t index,
-                                      uint8_t tnf, uint8_t* p_type,
-                                      uint8_t type_len, uint8_t* p_id,
-                                      uint8_t id_len, uint8_t* p_payload,
-                                      uint32_t payload_len);
-
-/*******************************************************************************
-**
-** Function         NDEF_MsgAppendRec
-**
-** Description      This function adds NDEF records to the end of an NDEF
-**                  message.
-**
-** Returns          OK, or error if the record did not fit
-**                  *p_cur_size is updated
-**
-*******************************************************************************/
-extern tNDEF_STATUS NDEF_MsgAppendRec(uint8_t* p_msg, uint32_t max_size,
-                                      uint32_t* p_cur_size, uint8_t* p_new_rec,
-                                      uint32_t new_rec_len);
-
-/*******************************************************************************
-**
 ** Function         NDEF_MsgAppendPayload
 **
 ** Description      This function appends extra payload to a specific record in
@@ -403,9 +357,4 @@
 extern tNDEF_STATUS NDEF_MsgCopyAndDechunk(uint8_t* p_src, uint32_t src_len,
                                            uint8_t* p_dest,
                                            uint32_t* p_out_len);
-
-#ifdef __cplusplus
-}
-#endif
-
 #endif /* NDEF_UTILS_H */
diff --git a/src/nfc/include/nfc_api.h b/src/nfc/include/nfc_api.h
index 2a35942..c4a654e 100644
--- a/src/nfc/include/nfc_api.h
+++ b/src/nfc/include/nfc_api.h
@@ -113,51 +113,22 @@
  * NFC Config Parameter IDs defined by NCI
  **********************************************/
 #define NFC_PMID_TOTAL_DURATION NCI_PARAM_ID_TOTAL_DURATION
-#define NFC_PMID_CON_DEVICES_LIMIT NCI_PARAM_ID_CON_DEVICES_LIMIT
-#define NFC_PMID_PA_BAILOUT NCI_PARAM_ID_PA_BAILOUT
-#define NFC_PMID_CON_DISCOVERY_PARAM NCI_PARAM_ID_CON_DISCOVERY_PARAM
-#define NFC_PMID_PB_AFI NCI_PARAM_ID_PB_AFI
-#define NFC_PMID_PB_BAILOUT NCI_PARAM_ID_PB_BAILOUT
-#define NFC_PMID_PB_ATTRIB_PARAM1 NCI_PARAM_ID_PB_ATTRIB_PARAM1
-#define NFC_PMID_PF_BIT_RATE NCI_PARAM_ID_PF_BIT_RATE
 #define NFC_PMID_PF_RC NCI_PARAM_ID_PF_RC
-#define NFC_PMID_PB_H_INFO NCI_PARAM_ID_PB_H_INFO
-#define NFC_PMID_BITR_NFC_DEP NCI_PARAM_ID_BITR_NFC_DEP
 #define NFC_PMID_ATR_REQ_GEN_BYTES NCI_PARAM_ID_ATR_REQ_GEN_BYTES
-#define NFC_PMID_ATR_REQ_CONFIG NCI_PARAM_ID_ATR_REQ_CONFIG
 #define NFC_PMID_LA_HIST_BY NCI_PARAM_ID_LA_HIST_BY
 #define NFC_PMID_LA_NFCID1 NCI_PARAM_ID_LA_NFCID1
-#define NFC_PMID_PI_BIT_RATE NCI_PARAM_ID_PI_BIT_RATE
 #define NFC_PMID_LA_BIT_FRAME_SDD NCI_PARAM_ID_LA_BIT_FRAME_SDD
 #define NFC_PMID_LA_PLATFORM_CONFIG NCI_PARAM_ID_LA_PLATFORM_CONFIG
 #define NFC_PMID_LA_SEL_INFO NCI_PARAM_ID_LA_SEL_INFO
-#define NFC_PMID_LI_BIT_RATE NCI_PARAM_ID_LI_BIT_RATE
 #define NFC_PMID_LB_SENSB_INFO NCI_PARAM_ID_LB_SENSB_INFO
-#define NFC_PMID_LB_PROTOCOL NCI_PARAM_ID_LB_PROTOCOL
 #define NFC_PMID_LB_H_INFO NCI_PARAM_ID_LB_H_INFO_RSP
 #define NFC_PMID_LB_NFCID0 NCI_PARAM_ID_LB_NFCID0
 #define NFC_PMID_LB_APPDATA NCI_PARAM_ID_LB_APPDATA
 #define NFC_PMID_LB_SFGI NCI_PARAM_ID_LB_SFGI
 #define NFC_PMID_LB_ADC_FO NCI_PARAM_ID_LB_ADC_FO
 #define NFC_PMID_LF_T3T_ID1 NCI_PARAM_ID_LF_T3T_ID1
-#define NFC_PMID_LF_T3T_ID2 NCI_PARAM_ID_LF_T3T_ID2
-#define NFC_PMID_LF_T3T_ID3 NCI_PARAM_ID_LF_T3T_ID3
-#define NFC_PMID_LF_T3T_ID4 NCI_PARAM_ID_LF_T3T_ID4
-#define NFC_PMID_LF_T3T_ID5 NCI_PARAM_ID_LF_T3T_ID5
-#define NFC_PMID_LF_T3T_ID6 NCI_PARAM_ID_LF_T3T_ID6
-#define NFC_PMID_LF_T3T_ID7 NCI_PARAM_ID_LF_T3T_ID7
-#define NFC_PMID_LF_T3T_ID8 NCI_PARAM_ID_LF_T3T_ID8
-#define NFC_PMID_LF_T3T_ID9 NCI_PARAM_ID_LF_T3T_ID9
-#define NFC_PMID_LF_T3T_ID10 NCI_PARAM_ID_LF_T3T_ID10
-#define NFC_PMID_LF_T3T_ID11 NCI_PARAM_ID_LF_T3T_ID11
-#define NFC_PMID_LF_T3T_ID12 NCI_PARAM_ID_LF_T3T_ID12
-#define NFC_PMID_LF_T3T_ID13 NCI_PARAM_ID_LF_T3T_ID13
-#define NFC_PMID_LF_T3T_ID14 NCI_PARAM_ID_LF_T3T_ID14
-#define NFC_PMID_LF_T3T_ID15 NCI_PARAM_ID_LF_T3T_ID15
-#define NFC_PMID_LF_T3T_ID16 NCI_PARAM_ID_LF_T3T_ID16
 #define NFC_PMID_LF_PROTOCOL NCI_PARAM_ID_LF_PROTOCOL
 #define NFC_PMID_LF_T3T_PMM NCI_PARAM_ID_LF_T3T_PMM
-#define NFC_PMID_LF_T3T_MAX NCI_PARAM_ID_LF_T3T_MAX
 #define NFC_PMID_LF_T3T_FLAGS2 NCI_PARAM_ID_LF_T3T_FLAGS2
 #define NFC_PMID_FWI NCI_PARAM_ID_FWI
 #define NFC_PMID_LF_CON_BITR_F NCI_PARAM_ID_LF_CON_BITR_F
@@ -165,17 +136,14 @@
 #define NFC_PMID_ATR_RES_GEN_BYTES NCI_PARAM_ID_ATR_RES_GEN_BYTES
 #define NFC_PMID_ATR_RSP_CONFIG NCI_PARAM_ID_ATR_RSP_CONFIG
 #define NFC_PMID_RF_FIELD_INFO NCI_PARAM_ID_RF_FIELD_INFO
-#define NFC_PMID_NFC_DEP_OP NCI_PARAM_ID_NFC_DEP_OP
-#define NFC_PARAM_ID_RF_EE_ACTION NCI_PARAM_ID_RF_EE_ACTION
-#define NFC_PARAM_ID_ISO_DEP_OP NCI_PARAM_ID_ISO_DEP_OP
 
 /* Technology based routing  */
 #define NFC_ROUTE_TAG_TECH NCI_ROUTE_TAG_TECH
 /* Protocol based routing  */
 #define NFC_ROUTE_TAG_PROTO NCI_ROUTE_TAG_PROTO
 #define NFC_ROUTE_TAG_AID NCI_ROUTE_TAG_AID /* AID routing */
+#define NFC_ROUTE_TAG_SYSCODE NCI_ROUTE_TAG_SYSCODE /* System Code routing*/
 /* tag, len, 2 byte value for technology/protocol based routing */
-#define NFC_ROUTE_TLV_ENTRY_SIZE 4
 
 /* For routing */
 #define NFC_DH_ID NCI_DH_ID /* for DH */
@@ -183,7 +151,6 @@
 /* use a proprietary range */
 #define NFC_TEST_ID NCI_TEST_ID
 
-typedef uint8_t tNFC_PMID;
 #define NFC_TL_SIZE 2
 #define NFC_SAVED_CMD_SIZE 2
 
@@ -223,7 +190,9 @@
   NFC_NFCC_TRANSPORT_ERR_REVT,      /* 16 NCI Tranport error            */
   NFC_NFCC_POWER_OFF_REVT,          /* 17 NFCC turned off               */
   NFC_SET_POWER_SUB_STATE_REVT,     /* 18 Set power sub state response  */
-  NFC_FIRST_VS_REVT                 /* First vendor-specific rsp event  */
+  NFC_NFCEE_PL_CONTROL_REVT,        /* NFCEE Power/Link Ctrl response*/
+  NFC_NFCEE_STATUS_REVT             /* NFCEE Status Notification     */
+                                    /* First vendor-specific rsp event  */
 };
 typedef uint16_t tNFC_RESPONSE_EVT;
 
@@ -284,7 +253,6 @@
 #define NFC_NFCEE_INTERFACE_T3T NCI_NFCEE_INTERFACE_T3T
 #define NFC_NFCEE_INTERFACE_TRANSPARENT NCI_NFCEE_INTERFACE_TRANSPARENT
 #define NFC_NFCEE_INTERFACE_PROPRIETARY NCI_NFCEE_INTERFACE_PROPRIETARY
-typedef uint8_t tNFC_NFCEE_INTERFACE;
 
 #define NFC_NFCEE_TAG_HW_ID NCI_NFCEE_TAG_HW_ID
 #define NFC_NFCEE_TAG_ATR_BYTES NCI_NFCEE_TAG_ATR_BYTES
@@ -298,12 +266,15 @@
   uint8_t info[NFC_MAX_EE_INFO];
 } tNFC_NFCEE_TLV;
 
+/* NFCEE unrecoverable error */
+#define NFC_NFCEE_STATUS_UNRECOVERABLE_ERROR NCI_NFCEE_STS_UNRECOVERABLE_ERROR
 /* NFCEE connected and inactive */
 #define NFC_NFCEE_STATUS_INACTIVE NCI_NFCEE_STS_CONN_INACTIVE
 /* NFCEE connected and active   */
 #define NFC_NFCEE_STATUS_ACTIVE NCI_NFCEE_STS_CONN_ACTIVE
 /* NFCEE removed                */
 #define NFC_NFCEE_STATUS_REMOVED NCI_NFCEE_STS_REMOVED
+
 /* the data type associated with NFC_NFCEE_INFO_REVT */
 typedef struct {
   tNFC_STATUS status;    /* The event status - place holder  */
@@ -313,6 +284,7 @@
   uint8_t ee_interface[NFC_MAX_EE_INTERFACE]; /* NFCEE interface       */
   uint8_t num_tlvs;                       /* number of TLVs                   */
   tNFC_NFCEE_TLV ee_tlv[NFC_MAX_EE_TLVS]; /* The TLVs associated with NFCEE   */
+  bool nfcee_power_ctrl; /* 1, if NFCC has control of NFCEE Power Supply */
 } tNFC_NFCEE_INFO_REVT;
 
 #define NFC_MODE_ACTIVATE NCI_NFCEE_MD_ACTIVATE
@@ -364,25 +336,29 @@
   NFC_HDR* p_data;    /* The received Data                */
 } tNFC_DATA_CEVT;
 
+/* the data type associated with NFC_NFCEE_PL_CONTROL_REVT */
+typedef struct {
+  tNFC_STATUS status;              /* The event status */
+  uint8_t nfcee_id;                /* NFCEE ID */
+  tNCI_NFCEE_PL_CONFIG pl_control; /* Power/Link Control command */
+} tNFC_NFCEE_PL_CONTROL_REVT;
+
+/* the data type associated with NFC_NFCEE_STATUS_REVT */
+typedef struct {
+  tNFC_STATUS status;              /* The event status */
+  uint8_t nfcee_id;                /* NFCEE ID */
+  tNCI_EE_NTF_STATUS nfcee_status; /* NFCEE status */
+} tNFC_NFCEE_STATUS_REVT;
 /* RF Field Status */
-/* No field generated by remote device  */
-#define NFC_RF_STS_NO_REMOTE NCI_RF_STS_NO_REMOTE
-/* field generated by remote device     */
-#define NFC_RF_STS_REMOTE NCI_RF_STS_REMOTE
 typedef uint8_t tNFC_RF_STS;
 
 /* RF Field Technologies */
 #define NFC_RF_TECHNOLOGY_A NCI_RF_TECHNOLOGY_A
 #define NFC_RF_TECHNOLOGY_B NCI_RF_TECHNOLOGY_B
 #define NFC_RF_TECHNOLOGY_F NCI_RF_TECHNOLOGY_F
-#define NFC_RF_TECHNOLOGY_V NCI_RF_TECHNOLOGY_V
 typedef uint8_t tNFC_RF_TECH;
 
-#ifdef __cplusplus
-extern "C" uint8_t NFC_GetNCIVersion();
-#else
 extern uint8_t NFC_GetNCIVersion();
-#endif
 
 /* Supported Protocols */
 #define NFC_PROTOCOL_UNKNOWN NCI_PROTOCOL_UNKNOWN /* Unknown */
@@ -395,7 +371,7 @@
 /* Type5Tag    - NFC-V/ISO15693*/
 #define NFC_PROTOCOL_T5T NFC_PROTOCOL_T5T_(NFC_GetNCIVersion())
 #define NFC_PROTOCOL_T5T_(x) \
-  ((x == NCI_VERSION_2_0) ? NCI_PROTOCOL_T5T : NCI_PROTOCOL_15693)
+  (((x) == NCI_VERSION_2_0) ? NCI_PROTOCOL_T5T : NCI_PROTOCOL_15693)
 /* Type 4A,4B  - NFC-A or NFC-B   */
 #define NFC_PROTOCOL_ISO_DEP NCI_PROTOCOL_ISO_DEP
 /* NFCDEP/LLCP - NFC-A or NFC-F       */
@@ -429,16 +405,10 @@
 
 /* Select Response codes */
 #define NFC_SEL_RES_NFC_FORUM_T2T 0x00
-#define NFC_SEL_RES_MF_CLASSIC 0x08
 
 /* Bit Rates */
-#define NFC_BIT_RATE_106 NCI_BIT_RATE_106   /* 106 kbit/s */
 #define NFC_BIT_RATE_212 NCI_BIT_RATE_212   /* 212 kbit/s */
 #define NFC_BIT_RATE_424 NCI_BIT_RATE_424   /* 424 kbit/s */
-#define NFC_BIT_RATE_848 NCI_BIT_RATE_848   /* 848 Kbit/s */
-#define NFC_BIT_RATE_1696 NCI_BIT_RATE_1696 /* 1696 Kbit/s*/
-#define NFC_BIT_RATE_3392 NCI_BIT_RATE_3392 /* 3392 Kbit/s*/
-#define NFC_BIT_RATE_6784 NCI_BIT_RATE_6784 /* 6784 Kbit/s*/
 typedef uint8_t tNFC_BIT_RATE;
 
 /**********************************************
@@ -447,11 +417,7 @@
 #define NFC_INTERFACE_EE_DIRECT_RF NCI_INTERFACE_EE_DIRECT_RF
 #define NFC_INTERFACE_FRAME NCI_INTERFACE_FRAME
 #define NFC_INTERFACE_ISO_DEP NCI_INTERFACE_ISO_DEP
-#define NFC_INTERFACE_NDEF NCI_INTERFACE_NDEF
 #define NFC_INTERFACE_NFC_DEP NCI_INTERFACE_NFC_DEP
-#define NFC_INTERFACE_LLCP_LOW NCI_INTERFACE_LLCP_LOW
-#define NFC_INTERFACE_LLCP_HIGH NCI_INTERFACE_LLCP_HIGH
-#define NFC_INTERFACE_VS_T2T_CE NCI_INTERFACE_VS_T2T_CE
 #define NFC_INTERFACE_MIFARE NCI_INTERFACE_VS_MIFARE
 typedef tNCI_INTF_TYPE tNFC_INTF_TYPE;
 
@@ -467,10 +433,6 @@
 /**********************************************
  *  Deactivation Reasons
  **********************************************/
-#define NFC_DEACTIVATE_REASON_DH_REQ NCI_DEACTIVATE_REASON_DH_REQ
-#define NFC_DEACTIVATE_REASON_ENDPOINT_REQ NCI_DEACTIVATE_REASON_ENDPOINT_REQ
-#define NFC_DEACTIVATE_REASON_RF_LINK_LOSS NCI_DEACTIVATE_REASON_RF_LINK_LOSS
-#define NFC_DEACTIVATE_REASON_NFCB_BAD_AFI NCI_DEACTIVATE_REASON_NFCB_BAD_AFI
 #define NFC_DEACTIVATE_REASON_DH_REQ_FAILED NCI_DEACTIVATE_REASON_DH_REQ_FAILED
 typedef uint8_t tNFC_DEACT_REASON;
 
@@ -519,7 +481,6 @@
 } tNFC_EE_ACTION_REVT;
 
 #define NFC_EE_DISC_OP_ADD 0
-#define NFC_EE_DISC_OP_REMOVE 1
 typedef uint8_t tNFC_EE_DISC_OP;
 typedef struct {
   tNFC_EE_DISC_OP op;              /* add or remove this entry         */
@@ -550,6 +511,8 @@
   tNFC_NFCEE_DISCOVER_REVT nfcee_discover;
   tNFC_NFCEE_INFO_REVT nfcee_info;
   tNFC_NFCEE_MODE_SET_REVT mode_set;
+  tNFC_NFCEE_PL_CONTROL_REVT pl_control;
+  tNFC_NFCEE_STATUS_REVT nfcee_status;
   tNFC_RF_FIELD_REVT rf_field;
   tNFC_STATUS cfg_routing;
   tNFC_GET_ROUTING_REVT get_routing;
@@ -772,30 +735,6 @@
   tNFC_DEACTIVATE_DEVT deactivate;
 } tNFC_DISCOVER;
 
-/* Min TR0 indicates to tag the min delay before responding after the end of
- * command */
-#define NFC_RF_PARAM_MIN_TR0_DEFAULT 0x00
-#define NFC_RF_PARAM_MIN_TR0_48X 0x01 /* 48 x 16/fc */
-#define NFC_RF_PARAM_MIN_TR0_16X 0x02 /* 16 x 16/fc */
-
-/* Min TR1 indicates to tag the min delay between subcarrier modulation and data
- * transmission */
-#define NFC_RF_PARAM_MIN_TR1_DEFAULT 0x00
-#define NFC_RF_PARAM_MIN_TR1_64X 0x01 /* 64 x 16/fc */
-#define NFC_RF_PARAM_MIN_TR1_16X 0x02 /* 16 x 16/fc */
-
-/* Min TR2 indicates to RW the min delay between EoS of tag and SoS of RW */
-#define NFC_RF_PARAM_MIN_TR2_1792 0x00 /* 1792/fc (10etu + 32/fc) */
-#define NFC_RF_PARAM_MIN_TR2_3328 0x01 /* 3328/fc (10etu + 128/fc) */
-#define NFC_RF_PARAM_MIN_TR2_5376 0x02 /* 5376/fc (10etu + 256/fc) */
-#define NFC_RF_PARAM_MIN_TR2_9472 0x03 /* 9472/fc (10etu + 512/fc) */
-
-#define NFC_RF_PARAM_EOS_REQUIRED 0x00     /* EoS required */
-#define NFC_RF_PARAM_EOS_NOT_REQUIRED 0x01 /* EoS not required */
-
-#define NFC_RF_PARAM_SOS_REQUIRED 0x00     /* SoS required */
-#define NFC_RF_PARAM_SOS_NOT_REQUIRED 0x01 /* SoS not required */
-
 typedef struct {
   bool include_rf_tech_mode; /* TRUE if including RF Tech and Mode update    */
   tNFC_RF_TECH_N_MODE rf_tech_n_mode; /* RF tech and mode */
@@ -817,12 +756,6 @@
 typedef void(tNFC_DISCOVER_CBACK)(tNFC_DISCOVER_EVT event,
                                   tNFC_DISCOVER* p_data);
 
-/* the events reported on tNFC_TEST_CBACK */
-enum {
-  NFC_LOOPBACK_TEVT = NFC_FIRST_TEVT, /* 0  Loopback test             */
-  NFC_RF_CONTROL_TEVT,                /* 1  RF control Test response  */
-  NFC_RF_FIELD_DONE_TEVT              /* 1  RF control Test notificatn*/
-};
 typedef uint16_t tNFC_TEST_EVT;
 
 /* the data type associated with NFC_LOOPBACK_TEVT */
@@ -863,18 +796,12 @@
 #define NFC_ILLEGAL_CONN_ID 0xFF
 /* the static connection ID for RF traffic */
 #define NFC_RF_CONN_ID 0
-
-/*************************************
-**  Status callback function
-**************************************/
-typedef void(tNFC_STATUS_CBACK)(tNFC_STATUS status);
+/* the static connection ID for HCI transport */
+#define NFC_HCI_CONN_ID 1
 
 /*****************************************************************************
 **  EXTERNAL FUNCTION DECLARATIONS
 *****************************************************************************/
-#ifdef __cplusplus
-extern "C" {
-#endif
 
 /*******************************************************************************
 **
@@ -1330,18 +1257,6 @@
 
 /*******************************************************************************
 **
-** Function         NFC_SetTraceLevel
-**
-** Description      This function sets the trace level for NFC.  If called with
-**                  a value of 0xFF, it simply returns the current trace level.
-**
-** Returns          The new or current trace level
-**
-*******************************************************************************/
-extern uint8_t NFC_SetTraceLevel(uint8_t new_level);
-
-/*******************************************************************************
-**
 ** Function         NFC_ISODEPNakPresCheck
 **
 ** Description      This function is called to send the ISO DEP nak presence
@@ -1366,7 +1281,45 @@
 extern tNFC_FW_VERSION nfc_ncif_getFWVersion();
 #endif
 
-#if (BT_TRACE_VERBOSE == TRUE)
+/*******************************************************************************
+**
+** Function         NFC_NfceePLConfig
+**
+** Description      This function is called to set the Power and Link Control
+**                  to an NFCEE connected to the NFCC.
+**                  The response from NFCC is reported by tNFC_RESPONSE_CBACK
+**                  as NFC_NFCEE_PL_CONTROL_REVT.
+**
+** Parameters       nfcee_id - the NFCEE to activate or de-activate.
+**                 pl_config -
+**                 NFCEE_PL_CONFIG_NFCC_DECIDES -NFCC decides (default)
+**                 NFCEE_PL_CONFIG_PWR_ALWAYS_ON -NFCEE power supply always on
+**                 NFCEE_PL_CONFIG_LNK_ON_WHEN_PWR_ON -
+**                                     communication link is always active
+**                                     when NFCEE is powered on
+**                 NFCEE_PL_CONFIG_PWR_LNK_ALWAYS_ON -
+**                                     power supply and communication
+**                                     link are always on
+** Returns          tNFC_STATUS
+**
+*******************************************************************************/
+extern tNFC_STATUS NFC_NfceePLConfig(uint8_t nfcee_id,
+                                     tNCI_NFCEE_PL_CONFIG pl_config);
+
+/*******************************************************************************
+**
+** Function         NFC_SetStaticHciCback
+**
+** Description      This function to update the data callback function
+**                  to receive the data for the static Hci connection id.
+**
+** Parameters       p_cback - the connection callback function
+**
+** Returns          Nothing
+**
+*******************************************************************************/
+extern void NFC_SetStaticHciCback(tNFC_CONN_CBACK* p_cback);
+
 /*******************************************************************************
 **
 ** Function         NFC_GetStatusName
@@ -1378,11 +1331,6 @@
 ** Returns          pointer to the name
 **
 *******************************************************************************/
-extern char* NFC_GetStatusName(tNFC_STATUS status);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
+extern std::string NFC_GetStatusName(tNFC_STATUS status);
 
 #endif /* NFC_API_H */
diff --git a/src/nfc/int/nfc_int.h b/src/nfc/include/nfc_int.h
similarity index 90%
rename from src/nfc/int/nfc_int.h
rename to src/nfc/include/nfc_int.h
index c3fb85c..71b8564 100644
--- a/src/nfc/int/nfc_int.h
+++ b/src/nfc/include/nfc_int.h
@@ -31,10 +31,6 @@
 #include "nfc_api.h"
 #include "nfc_target.h"
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 /****************************************************************************
 ** Internal NFC constants and definitions
 ****************************************************************************/
@@ -50,6 +46,7 @@
 #define NFC_TTYPE_NCI_WAIT_RSP 0
 #define NFC_TTYPE_WAIT_2_DEACTIVATE 1
 #define NFC_WAIT_RSP_RAW_VS 0x02
+#define NFC_TTYPE_WAIT_MODE_SET_NTF 2
 
 #define NFC_TTYPE_LLCP_LINK_MANAGER 100
 #define NFC_TTYPE_LLCP_LINK_INACT 101
@@ -65,8 +62,8 @@
 #define NFC_TTYPE_P2P_PRIO_RESPONSE 110
 /* added for p2p prio logic clenaup */
 #define NFC_TTYPE_P2P_PRIO_LOGIC_CLEANUP 111
-#define NFC_TTYPE_VS_BASE 200
-
+/* time out for mode set notification */
+#define NFC_MODE_SET_NTF_TIMEOUT 2
 /* NFC Task event messages */
 
 enum {
@@ -105,13 +102,13 @@
 #define NFC_FL_DISCOVER_PENDING 0x0040
 /* NFC_FL_CONTROL_REQUESTED on HAL request      */
 #define NFC_FL_HAL_REQUESTED 0x0080
+/* Waiting for NFCEE Mode Set NTF                 */
+#define NFC_FL_WAIT_MODE_SET_NTF 0x0100
 
 #define NFC_PEND_CONN_ID 0xFE
-#define NFC_CONN_ID_INT_MASK 0xF0
 #define NFC_CONN_ID_ID_MASK NCI_CID_MASK
 /* set num_buff to this for no flow control */
 #define NFC_CONN_NO_FC 0xFF
-#define NFC_NCI_CONN_NO_FC 0xFF
 
 #if (NFC_RW_ONLY == FALSE)
 /* only allow the entries that the NFCC can support */
@@ -125,15 +122,15 @@
 
 typedef struct {
   tNFC_CONN_CBACK* p_cback; /* the callback function to receive the data */
-  BUFFER_Q tx_q;        /* transmit queue                                   */
-  BUFFER_Q rx_q;        /* receive queue                                    */
-  uint8_t id;           /* NFCEE ID or RF Discovery ID or NFC_TEST_ID       */
-  uint8_t act_protocol; /* the active protocol on this logical connection   */
+  BUFFER_Q tx_q;         /* transmit queue                                   */
+  BUFFER_Q rx_q;         /* receive queue                                    */
+  uint8_t id;            /* NFCEE ID or RF Discovery ID or NFC_TEST_ID       */
+  uint8_t act_protocol;  /* the active protocol on this logical connection   */
   uint8_t act_interface; /* the active interface on this logical connection   */
-  uint8_t conn_id;      /* the connection id assigned by NFCC for this conn */
-  uint8_t buff_size;    /* the max buffer size for this connection.     .   */
-  uint8_t num_buff;     /* num of buffers left to send on this connection   */
-  uint8_t init_credits; /* initial num of buffer credits                    */
+  uint8_t conn_id;       /* the connection id assigned by NFCC for this conn */
+  uint8_t buff_size;     /* the max buffer size for this connection.     .   */
+  uint8_t num_buff;      /* num of buffers left to send on this connection   */
+  uint8_t init_credits;  /* initial num of buffer credits                    */
 } tNFC_CONN_CB;
 
 /* This data type is for NFC task to send a NCI VS command to NCIT task */
@@ -152,8 +149,6 @@
 /* callback function pointer(8; use 8 to be safe + NFC_SAVED_CMD_SIZE(2) */
 #define NFC_RECEIVE_MSGS_OFFSET (10)
 
-/* NFCC power state change pending callback */
-typedef void(tNFC_PWR_ST_CBACK)(void);
 #define NFC_SAVED_HDR_SIZE (2)
 /* data Reassembly error (in NFC_HDR.layer_specific) */
 #define NFC_RAS_TOO_BIG 0x08
@@ -196,12 +191,11 @@
   /* NFC_TASK timer management */
   TIMER_LIST_Q timer_queue; /* 1-sec timer event queue */
   TIMER_LIST_Q quick_timer_queue;
-
-  TIMER_LIST_ENT deactivate_timer; /* Timer to wait for deactivation */
+  TIMER_LIST_ENT mode_set_ntf_timer; /* Timer to wait for deactivation */
+  TIMER_LIST_ENT deactivate_timer;   /* Timer to wait for deactivation */
 
   tNFC_STATE nfc_state;
   bool reassembly; /* Reassemble fragmented data pkt */
-  uint8_t trace_level;
   uint8_t last_hdr[NFC_SAVED_HDR_SIZE]; /* part of last NCI command header */
   uint8_t last_cmd[NFC_SAVED_CMD_SIZE]; /* part of last NCI command payload */
   void* p_vsc_cback;       /* the callback function for last VSC command */
@@ -220,6 +214,8 @@
 
   uint8_t nci_version; /* NCI version used for NCI communication*/
 
+  bool isScbrSupported; /* indicating if system code based route is supported */
+
   uint8_t hci_packet_size; /* maximum hci payload size*/
 
   uint8_t hci_conn_credits; /* maximum conn credits for static HCI*/
@@ -229,6 +225,8 @@
   uint8_t rawVsCbflag;
   uint8_t deact_reason;
 
+  TIMER_LIST_ENT nci_mode_set_ntf_timer; /*Mode set notification timer*/
+
 } tNFC_CB;
 
 /*****************************************************************************
@@ -243,11 +241,9 @@
 ****************************************************************************/
 
 #define NCI_CALCULATE_ACK(a, v) \
-  { a &= ((1 << v) - 1); }
+  { (a) &= ((1 << (v)) - 1); }
 #define MAX_NUM_VALID_BITS_FOR_ACK 0x07
 
-extern void nfc_init(void);
-
 /* from nfc_utils.c */
 extern tNFC_CONN_CB* nfc_alloc_conn_cb(tNFC_CONN_CBACK* p_cback);
 extern tNFC_CONN_CB* nfc_find_conn_cb_by_conn_id(uint8_t conn_id);
@@ -257,10 +253,10 @@
 extern void nfc_reset_all_conn_cbs(void);
 extern void nfc_data_event(tNFC_CONN_CB* p_cb);
 
-void nfc_ncif_send(NFC_HDR* p_buf, bool is_cmd);
 extern uint8_t nfc_ncif_send_data(tNFC_CONN_CB* p_cb, NFC_HDR* p_data);
 extern void nfc_ncif_cmd_timeout(void);
 extern void nfc_wait_2_deactivate_timeout(void);
+extern void nfc_mode_set_ntf_timeout(void);
 
 extern bool nfc_ncif_process_event(NFC_HDR* p_msg);
 extern void nfc_ncif_check_cmd_queue(NFC_HDR* p_buf);
@@ -302,7 +298,7 @@
 #endif
 
 /* From nfc_task.c */
-extern uint32_t nfc_task(uint32_t param);
+extern uint32_t nfc_task(uint32_t);
 void nfc_task_shutdown_nfcc(void);
 
 /* From nfc_main.c */
@@ -321,9 +317,4 @@
                            uint32_t timeout);
 void nfc_stop_quick_timer(TIMER_LIST_ENT* p_tle);
 void nfc_process_quick_timer_evt(void);
-
-#ifdef __cplusplus
-}
-#endif
-
 #endif /* NFC_INT_H_ */
diff --git a/src/nfc/int/nfc_vs.h b/src/nfc/include/nfc_vs.h
similarity index 71%
rename from src/nfc/int/nfc_vs.h
rename to src/nfc/include/nfc_vs.h
index adc2f25..8cedbdd 100644
--- a/src/nfc/int/nfc_vs.h
+++ b/src/nfc/include/nfc_vs.h
@@ -25,17 +25,4 @@
 #ifndef NFC_VS_H_
 #define NFC_VS_H_
 
-// DTA API for MW Version need to change according to release
-#define NXP_EN_PN547C2 0
-#define NXP_EN_PN65T 0
-#define NXP_EN_PN548C2 0
-#define NXP_EN_PN66T 0
-#define NXP_EN_PN551 0
-#define NXP_EN_PN67T 0
-#define NXP_EN_PN553 1
-#define NXP_EN_PN80T 1
-#define NXP_ANDROID_VER (7U)        /* NXP android version */
-#define NFC_NXP_MW_VERSION_MAJ (4U) /* MW Major Version */
-#define NFC_NXP_MW_VERSION_MIN (9U) /* MW Minor Version */
-
 #endif /* NFC_VS_H_ */
diff --git a/src/nfc/include/rw_api.h b/src/nfc/include/rw_api.h
index c8bb55b..edf7e83 100644
--- a/src/nfc/include/rw_api.h
+++ b/src/nfc/include/rw_api.h
@@ -25,10 +25,11 @@
 
 #ifndef RW_API_H
 #define RW_API_H
+#include "nfc_api.h"
 #include "tags_defs.h"
 
-#define RW_T1T_BLD_ADD(a, k, y) a = ((k & 0xF) << 3) | (y & 0x7);
-#define RW_T1T_BLD_ADDS(a, s) a = ((s & 0xF) << 4);
+#define RW_T1T_BLD_ADD(a, k, y) (a) = (((k) & 0xF) << 3) | ((y) & 0x7);
+#define RW_T1T_BLD_ADDS(a, s) (a) = (((s) & 0xF) << 4);
 
 #define RW_T1T_FIRST_EVT 0x20
 #define RW_T2T_FIRST_EVT 0x40
@@ -148,17 +149,8 @@
 typedef uint8_t tRW_NDEF_FLAG;
 
 /* options for RW_T4tPresenceCheck  */
-#define RW_T4T_CHK_READ_BINARY_CH0 0
-#define RW_T4T_CHK_READ_BINARY_CH1 1
-#define RW_T4T_CHK_READ_BINARY_CH2 2
-#define RW_T4T_CHK_READ_BINARY_CH3 3
-#define RW_T4T_CHK_EMPTY_I_BLOCK 4
+#define RW_T4T_CHK_EMPTY_I_BLOCK 1
 #define RW_T4T_CHK_ISO_DEP_NAK_PRES_CHK 5
-typedef struct {
-  tNFC_STATUS status;
-  uint8_t hr[T1T_HR_LEN];
-  uint8_t uid[T1T_CMD_UID_LEN];
-} tRW_T1T_RID_EVT;
 
 typedef struct {
   tNFC_STATUS status;
@@ -1077,7 +1069,7 @@
 **                  NFC_STATUS_FAILED if other error
 **
 *******************************************************************************/
-extern tNFC_STATUS RW_I93WriteMultipleBlocks(uint8_t first_block_number,
+extern tNFC_STATUS RW_I93WriteMultipleBlocks(uint16_t first_block_number,
                                              uint16_t number_blocks,
                                              uint8_t* p_data);
 
@@ -1339,18 +1331,4 @@
 *******************************************************************************/
 extern tNFC_STATUS RW_SetActivatedTagType(tNFC_ACTIVATE_DEVT* p_activate_params,
                                           tRW_CBACK* p_cback);
-
-/*******************************************************************************
-**
-** Function         RW_SetTraceLevel
-**
-** Description      This function sets the trace level for Reader/Writer mode.
-**                  If called with a value of 0xFF,
-**                  it simply returns the current trace level.
-**
-** Returns          The new or current trace level
-**
-*******************************************************************************/
-extern uint8_t RW_SetTraceLevel(uint8_t new_level);
-
 #endif /* RW_API_H */
diff --git a/src/nfc/int/rw_int.h b/src/nfc/include/rw_int.h
similarity index 97%
rename from src/nfc/int/rw_int.h
rename to src/nfc/include/rw_int.h
index 38958b2..b6e1dc5 100644
--- a/src/nfc/int/rw_int.h
+++ b/src/nfc/include/rw_int.h
@@ -31,14 +31,6 @@
 #include "tags_int.h"
 
 /* Proprietary definitions for HR0 and HR1 */
-/* HI NIB Tag                                               */
-#define RW_T1T_HR0_HI_NIB 0xF0
-/* Jewel 64 Tag                                             */
-#define RW_T1T_IS_JEWEL64 0x20
-/* Jewel Tag                                                */
-#define RW_T1T_IS_JEWEL 0x00
-/* TOPAZ Tag                                                */
-#define RW_T1T_IS_TOPAZ 0x10
 /* TOPAZ96 Tag                                              */
 #define RW_T1T_IS_TOPAZ96 0x11
 /* TOPAZ512 Tag                                             */
@@ -257,11 +249,6 @@
 #define T2T_NDEF_DETECTED 0x01
 #define T2T_NDEF_READ 0x02
 
-/* Max offset of an NDEF message in a T2 tag */
-#define T2T_MAX_NDEF_OFFSET 128
-#define T2T_MAX_RESERVED_BYTES_IN_TAG 0x64
-#define T2T_MAX_LOCK_BYTES_IN_TAG 0x64
-
 /* Maximum supported Memory control TLVS in the tag         */
 #define RW_T2T_MAX_MEM_TLVS 0x05
 /* Maximum supported Lock control TLVS in the tag           */
@@ -632,6 +619,8 @@
 #define RW_I93_FLAG_RESET_AFI 0x08
 /* use 2 bytes for number of blocks        */
 #define RW_I93_FLAG_16BIT_NUM_BLOCK 0x10
+/* use extended commands */
+#define RW_I93_FLAG_EXT_COMMANDS 0x20
 
 /* searching for type                      */
 #define RW_I93_TLV_DETECT_STATE_TYPE 0x01
@@ -660,6 +649,8 @@
   RW_I93_STM_M24LR04E_R,             /* STM M24LR04E-R                   */
   RW_I93_STM_M24LR16E_R,             /* STM M24LR16E-R                   */
   RW_I93_STM_M24LR64E_R,             /* STM M24LR64E-R                   */
+  RW_I93_STM_ST25DV04K,              /* STM ST25DV04K                    */
+  RW_I93_STM_ST25DVHIK,              /* STM ST25DV 16K OR 64K            */
   RW_I93_UNKNOWN_PRODUCT             /* Unknwon product version          */
 };
 
@@ -713,17 +704,12 @@
 #if (RW_STATS_INCLUDED == TRUE)
   tRW_STATS stats;
 #endif /* RW_STATS_INCLUDED */
-  uint8_t trace_level;
 } tRW_CB;
 
 /*****************************************************************************
 **  EXTERNAL FUNCTION DECLARATIONS
 *****************************************************************************/
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 /* Global NFC data */
 extern tRW_CB rw_cb;
 
@@ -760,7 +746,7 @@
 extern tNFC_STATUS rw_t2t_sector_change(uint8_t sector);
 extern tNFC_STATUS rw_t2t_read(uint16_t block);
 extern tNFC_STATUS rw_t2t_write(uint16_t block, uint8_t* p_write_data);
-extern void rw_t2t_process_timeout(TIMER_LIST_ENT* p_tle);
+extern void rw_t2t_process_timeout();
 extern tNFC_STATUS rw_t2t_select(void);
 void rw_t2t_handle_op_complete(void);
 
@@ -788,8 +774,4 @@
 void rw_main_log_stats(void);
 #endif /* RW_STATS_INCLUDED */
 
-#ifdef __cplusplus
-}
-#endif
-
 #endif /* RW_INT_H_ */
diff --git a/src/nfc/include/tags_defs.h b/src/nfc/include/tags_defs.h
index 6ac16ed..d7adc60 100644
--- a/src/nfc/include/tags_defs.h
+++ b/src/nfc/include/tags_defs.h
@@ -81,27 +81,17 @@
 /* HRO value to indicate static Tag               */
 #define T1T_STATIC_HR0 0x11
 /* 0x1y, as long as (y!=1)                        */
-#define T1T_DYNAMIC_HR0 0x12
 /* HR0 value is 0x1y, indicates NDEF supported    */
 #define T1T_NDEF_SUPPORTED 0x10
-/* should be ignored                              */
-#define T1T_HR1 0x00
 /* UID block                                      */
 #define T1T_UID_BLOCK 0x00
 /* Reserved block                                 */
 #define T1T_RES_BLOCK 0x0D
 /* Static lock block                              */
 #define T1T_LOCK_BLOCK 0x0E
-/* Manufacturer ID offset                         */
-#define T1T_MID_OFFSET 0x06
-/* Reserved bytes offset                          */
-#define T1T_STATIC_RES_OFFSET 0x68
 /* Static lock offset                             */
 #define T1T_LOCK_0_OFFSET 0x70
-/* Static lock offset                             */
-#define T1T_LOCK_1_OFFSET 0x71
 /* Block F - typically used for dynamic locks     */
-#define T1T_DYNAMIC_LOCK_OFFSET 0x78
 #define T1T_DYNAMIC_LOCK_BYTES 0x08
 
 /* the len of reserved byte in T1T block 0        */
@@ -115,10 +105,6 @@
 /* CC offset */
 /* Offset for NDEF magic number in CC             */
 #define T1T_CC_NMN_OFFSET 0x00
-/* Offset for Version number in CC                */
-#define T1T_CC_VNO_OFFSET 0x01
-/* Offset for Tag memory size in CC               */
-#define T1T_CC_TMS_OFFSET 0x02
 /* Offset for Read/Write access in CC             */
 #define T1T_CC_RWA_OFFSET 0x03
 /* NDEF Magic Number byte number                  */
@@ -135,26 +121,11 @@
 #define T1T_CC_LEGACY_VNO 0x10
 /* Version Number                                 */
 #define T1T_CC_VNO 0x11
-/* TMS static memory - (8 * (n+1)).               */
-#define T1T_CC_TMS_STATIC 0x0E
 /* RWA - Read/write allowed                       */
 #define T1T_CC_RWA_RW 0x00
 /* RWA - Read only                                */
 #define T1T_CC_RWA_RO 0x0F
 
-/* May be used for padding. SHALL ignore this     */
-#define T1T_TAG_NULL 0
-/* Defines details of the lock bytes              */
-#define T1T_TAG_LOCK_CTRL 1
-/* Identifies reserved memory areas               */
-#define T1T_TAG_MEM_CTRL 2
-/* Contains the NDEF message                      */
-#define T1T_TAG_NDEF 3
-/* Tag proprietary information                    */
-#define T1T_TAG_PROPRIETARY 0xFD
-/* Last TLV block in the data area                */
-#define T1T_TAG_TERMINATOR 0xFE
-
 /* Tlv len for LOCK_CTRL/MEM TLV per spec         */
 #define T1T_DEFAULT_TLV_LEN 3
 /* Tlv type identifier len                        */
@@ -177,7 +148,6 @@
 /* Byte 0 in Length field to indicate LNDEF*/
 #define T1T_LONG_NDEF_LEN_FIELD_BYTE0 0xFF
 /* Min. len of NDEF to qualify as LNDEF  */
-#define T1T_LONG_NDEF_MIN_LEN 0x00FF
 
 /* Type 1 Tag Commands (7 bits) */
 /* read id                                      */
@@ -204,43 +174,27 @@
 /* Number of static lock bytes in tag   */
 #define T1T_NUM_STATIC_LOCK_BYTES 2
 /* Bytes locked by one static lock bit  */
-#define T1T_BYTES_LOCKED_BY_STATIC_LOCK_BIT 4
 
 /* Type 2 Tag related definitions */
-#define T2T_STATIC_MEM_STR 0
-#define T2T_DYNAMIC_MEM_STR 1
 #define T2T_STATIC_SIZE 64
-#define T2T_STATIC_BLOCKS 16 /* block 0 to Block 15 */
 #define T2T_BLOCK_SIZE 4
-#define T2T_HEADER_BLOCKS 4
 #define T2T_HEADER_SIZE 16
 #define T2T_SECTOR_SIZE 1024
 #define T2T_BLOCKS_PER_SECTOR 0x100
 
 #define T2T_UID_LEN 4        /* the len of UID used in T2T tag */
-#define T2T_BLOCK0_UID_LEN 3 /* the len of UID in Block 0 of T2T tag */
-#define T2T_BCC0_LEN 1       /* the len of BCC0 of T2T tag */
-#define T2T_BLOCK1_UID_LEN 4 /* the len of UID in Block 1 of T2T tag */
-#define T2T_BCC1_LEN 1       /* the len of BCC0 of T2T tag */
 /* the len of Serial number used in T2T tag */
-#define T2T_SNO_LEN 4
 #define T2T_INTERNAL_BYTES_LEN 2 /* the len of internal used in T2T tag */
-/* the len of static lock used in T2T tag */
-#define T2T_STATIC_LOCK_LEN 2
 /* Static Lock Bytes */
 #define T2T_STATIC_LOCK0 0x0A /* Static Lock 0 offset */
 #define T2T_STATIC_LOCK1 0x0B /* Static Lock 1 offset */
 
-/* the len of CC used in T2T tag                  */
-#define T2T_CC_LEN 4
-
 /* Capability Container definitions */
 #define T2T_CC_BLOCK 0x03     /* Capability container block */
 #define T2T_CC0_NMN_BYTE 0x0C /* NDEF Magic Number byte number */
 #define T2T_CC1_VNO_BYTE 0x0D /* Version Number byte number*/
 #define T2T_CC2_TMS_BYTE 0x0E /* Tag Memory Size byte number */
 #define T2T_CC3_RWA_BYTE 0x0F /* Read Write Access byte number */
-#define T2T_DATA_MEM 0x10     /* Data Memory */
 
 #define T2T_CC0_NMN 0xE1        /* NDEF Magic Number */
 #define T2T_CC1_VNO 0x11        /* Version Number */
@@ -260,15 +214,8 @@
 #define T2T_CMD_WRITE 0xA2   /* write 1 block  (4 bytes)  */
 #define T2T_CMD_SEC_SEL 0xC2 /* Sector select             */
 #define T2T_RSP_ACK 0xA
-#define T2T_RSP_NACK5 0x5
-#define T2T_RSP_NACK1 0x1 /* Nack can be either 1    */
 
 #define T2T_STATUS_OK_1_BIT 0x11
-#define T2T_STATUS_OK_2_BIT 0x12
-#define T2T_STATUS_OK_3_BIT 0x13
-#define T2T_STATUS_OK_4_BIT 0x14
-#define T2T_STATUS_OK_5_BIT 0x15
-#define T2T_STATUS_OK_6_BIT 0x16
 #define T2T_STATUS_OK_7_BIT 0x17
 
 #define T2T_FIRST_DATA_BLOCK 4
@@ -279,16 +226,10 @@
 
 /* Type 2 TLV definitions */
 /* May be used for padding. SHALL ignore this */
-#define T2T_TLV_TYPE_NULL 0
 #define T2T_TLV_TYPE_LOCK_CTRL 1      /* Defines details of the lock bytes */
-#define T2T_TLV_TYPE_MEM_CTRL 2       /* Identifies reserved memory areas */
-#define T2T_TLV_TYPE_NDEF 3           /* Contains the NDEF message */
-#define T2T_TLV_TYPE_PROPRIETARY 0xFD /* Tag proprietary information */
-#define T2T_TLV_TYPE_TERMINATOR 0xFE  /* Last TLV block in the data area */
 
 /* Tag len for LOCK_CTRL TLV per spec */
 #define T2T_TLEN_LOCK_CTRL_TLV 3
-#define T2T_TLEN_MEM_CTRL_TLV 3 /* Tag len for MEM_CTRL TLV per spec */
 
 /* Maximum number of sectors supported */
 #if (APPL_DTA_MODE == TRUE)
@@ -299,8 +240,6 @@
 /* Tlv type identifier len                */
 #define T2T_TLV_TYPE_LEN 1
 
-/* Tlv len for LOCK_CTRL/MEM TLV per spec     */
-#define T2T_DEFAULT_TLV_LEN 3
 /* Length Field size of short NDEF Message    */
 #define T2T_SHORT_NDEF_LEN_FIELD_LEN 1
 /* Length Field size of Long NDEF Message     */
@@ -313,11 +252,7 @@
 /* Lock */
 /* Number of static lock bytes in tag   */
 #define T2T_NUM_STATIC_LOCK_BYTES 2
-/* Bytes locked by one static lock bit  */
-#define T2T_BYTES_LOCKED_BY_STATIC_LOCK_BIT 4
 
-#define T2T_CC2_TMS_MUL 0x06
-#define T2T_CC2_TMS_MULC 0x12
 /*
 **
 **  Type 3 Tag Definitions
@@ -339,10 +274,7 @@
 } tT3T_BLOCK_DESC;
 
 /* Poll RC (request code) definitions */
-#define T3T_POLL_RC_NONE 0 /* No RD requested in SENSF_RES */
 #define T3T_POLL_RC_SC 1   /* System code requested in SENSF_RES */
-/* Avanced protocol features requested in SENSF_RES */
-#define T3T_POLL_RC_COMM 2
 typedef uint8_t tT3T_POLL_RC;
 
 /* Definitions for constructing t3t command messages */
@@ -357,7 +289,6 @@
 #define T3T_MSG_OPC_POLL_CMD 0x00
 #define T3T_MSG_OPC_POLL_RSP 0x01
 #define T3T_MSG_OPC_REQ_SERVICE_CMD 0x02
-#define T3T_MSG_OPC_REQ_SERVICE_RSP 0x03
 #define T3T_MSG_OPC_REQ_RESPONSE_CMD 0x04
 #define T3T_MSG_OPC_REQ_RESPONSE_RSP 0x05
 #define T3T_MSG_OPC_REQ_SYSTEMCODE_CMD 0x0C
@@ -375,22 +306,12 @@
 /* Size of NDEF attribute info block (minus checksum) */
 #define T3T_MSG_NDEF_ATTR_INFO_SIZE 14
 
-/* offset of Manufacturer ID in UPDATE/CHECK messages */
-#define T3T_MSG_OFFSET_IDM 1
-/* offset of Number of Services parameter in UPDATE/CHECK messages */
-#define T3T_MSG_OFFSET_NUM_SERVICES 9
-/* offset of Service Code List parameter in UPDATE/CHECK messages */
-#define T3T_MSG_OFFSET_SERVICE_CODE_LIST 10
 /* len flag for Block List Element */
 #define T3T_MSG_MASK_TWO_BYTE_BLOCK_DESC_FORMAT 0x80
 /* service code list mask */
 #define T3T_MSG_SERVICE_LIST_MASK 0x0F
 #define T3T_MSG_SERVICE_LIST_MAX 16
 
-/* Max Number of Services per UPDATE command */
-#define T3T_MSG_NUM_SERVICES_UPDATE_MAX 12
-/* Max Number of Services per CHECK command */
-#define T3T_MSG_NUM_SERVICES_CHECK_MAX 15
 /* Max Number of Blocks per UPDATE command */
 #define T3T_MSG_NUM_BLOCKS_UPDATE_MAX 13
 /* Max Number of Blocks per CHECK command */
@@ -406,8 +327,6 @@
 /* Common header definition for T3t responses */
 /* Common header: rspcode + NFCID2 + StatusFlag1 + StatusFlag2  */
 #define T3T_MSG_RSP_COMMON_HDR_LEN 11
-/* Common header + NumBlocks */
-#define T3T_MSG_RSP_CHECK_HDR_LEN (T3T_MSG_RSP_COMMON_HDR_LEN + 1)
 /* Offset for Response code */
 #define T3T_MSG_RSP_OFFSET_RSPCODE 0
 /* Offset for Manufacturer ID */
@@ -418,22 +337,13 @@
 #define T3T_MSG_RSP_OFFSET_NUMBLOCKS 11
 /* Offset for Block Data (in CHECK response) */
 #define T3T_MSG_RSP_OFFSET_CHECK_DATA 12
-/* Offset for PMm (in POLL response) */
-#define T3T_MSG_RSP_OFFSET_POLL_PMM 9
-/* Offset for RD (in POLL response) */
-#define T3T_MSG_RSP_OFFSET_POLL_RD 17
-/* Offset for Number of Systems */
-#define T3T_MSG_RSP_OFFSET_NUMSYS 9
 
 #define T3T_MSG_RSP_STATUS_OK 0x00
 #define T3T_MSG_RSP_STATUS_ERROR 0x01
 
 #define T3T_MSG_RSP_STATUS2_ERROR_MEMORY 0x70
-#define T3T_MSG_RSP_STATUS2_ERROR_EXCESSIVE_WRITES 0x71
 #define T3T_MSG_RSP_STATUS2_ERROR_PROCESSING 0xFF
 
-/* Maximum payload lenght for NFC-F messages (including SoD) */
-#define T3T_NFC_F_MAX_PAYLOAD_LEN 0xFE
 
 /* Felica Lite defintions */
 /* Block ID for MC (memory configuration)                       */
@@ -442,9 +352,6 @@
 /* Memory Configuration Block offset: MC_SP (Memory Configuration for scratch
  * pad)   */
 #define T3T_MSG_FELICALITE_MC_OFFSET_MC_SP 0x00
-/* Memory Configuration Block offset: MC_ALL (Memory Configuration for system
- * block) */
-#define T3T_MSG_FELICALITE_MC_OFFSET_MC_ALL 0x02
 /* Memory Configuration Block offset: SYS_OP (System Option) */
 #define T3T_MSG_FELICALITE_MC_OFFSET_SYS_OP 0x03
 /* Memory Configuration Block offset: RF_PRM (Memory Configuration for RF
@@ -463,7 +370,6 @@
 #define T4T_VERSION_1_0 0x10 /* version 1.0 */
 #define T4T_MY_VERSION T4T_VERSION_2_0
 #define T4T_GET_MAJOR_VERSION(x) ((x) >> 4)
-#define T4T_GET_MINOR_VERSION(x) ((x)&0x0F)
 
 #define T4T_CMD_CLASS 0x00
 #define T4T_CMD_INS_SELECT 0xA4
@@ -513,8 +419,6 @@
 #define T4T_FC_WRITE_ACCESS_OFFSET_IN_TLV 0x07
 
 #define T4T_NDEF_FILE_CONTROL_TYPE 0x04 /* NDEF File Control Type */
-/* Proprietary File Control Type */
-#define T4T_PROP_FILE_CONTROL_TYPE 0x05
 
 /* size of T(1),L(1),V(6) for file control */
 #define T4T_FILE_CONTROL_TLV_SIZE 0x08
@@ -548,104 +452,48 @@
 **
 */
 
-/* Request flags 1 to 4 definition */
-#define I93_FLAG_SUB_CARRIER_MASK 0x01 /* Sub_carrier_flag */
 /* A single sub-carrier frequency shall be used by VICC */
 #define I93_FLAG_SUB_CARRIER_SINGLE 0x00
-/* Two sub-carriers shall be used by VICC               */
-#define I93_FLAG_SUB_CARRIER_DOUBLE 0x01
 
-#define I93_FLAG_DATA_RATE_MASK 0x02 /* Data_rate_flag */
-/* Low data rate shall be used  */
-#define I93_FLAG_DATA_RATE_LOW 0x00
 /* High data rate shall be used */
 #define I93_FLAG_DATA_RATE_HIGH 0x02
 
-#define I93_FLAG_INVENTORY_MASK 0x04 /* Inventory_flag */
-/* Flags 5 to 8 meaning is according to table 4 */
-#define I93_FLAG_INVENTORY_UNSET 0x00
 /* Flags 5 to 8 meaning is according to table 5 */
 #define I93_FLAG_INVENTORY_SET 0x04
 
-/* Protocol_Extension_flag */
-#define I93_FLAG_PROT_EXT_MASK 0x08
 /* No protocol format extension                         */
 #define I93_FLAG_PROT_EXT_NO 0x00
 /* Protocol format is extended. Reserved for future use */
 #define I93_FLAG_PROT_EXT_YES 0x08
 
-/* Request flags 5 to 6 definition when inventory flag is not set */
-#define I93_FLAG_SELECT_MASK 0x10 /* Select_flag */
-/* Request shall be executed by any VICC according to the setting of
- * Address_flag */
-#define I93_FLAG_SELECT_UNSET 0x00
-/* Request shall be executed only by VICC in selected state */
-#define I93_FLAG_SELECT_SET 0x10
-/* The Address_flag shall be set to 0 and the UID field shall bot be included in
- * the request */
-
-#define I93_FLAG_ADDRESS_MASK 0x20 /* Address_flag */
-/* Request is not addressed. UID field is not included. It shall be executed by
- * any VICC */
-#define I93_FLAG_ADDRESS_UNSET 0x00
 /* Request is addressed. UID field is included. It shall be executed only by
  * VICC */
 #define I93_FLAG_ADDRESS_SET 0x20
 /* whose UID matches the UID specified in the request */
 
-/* Request flags 5 to 6 definition when inventory flag is set */
-#define I93_FLAG_AFI_MASK 0x10 /* AFI_flag */
-/* AFI field is not present */
-#define I93_FLAG_AFI_NOT_PRESENT 0x00
 /* AFI field is present     */
 #define I93_FLAG_AFI_PRESENT 0x10
 
-#define I93_FLAG_SLOT_MASK 0x20 /* Nb_slots_flag */
-#define I93_FLAG_SLOT_16 0x00   /* 16 slots */
 #define I93_FLAG_SLOT_ONE 0x20  /* 1 slot   */
 
-/* Request flags 6 to 8 definition when inventory flag is set or not set */
-
-#define I93_FLAG_OPTION_MASK 0x40 /* Option_flag */
-/* Meaning is defined by the command description. */
-#define I93_FLAG_OPTION_UNSET 0x00
 /* It shall be set to 0 if not otherwise defined by command */
 /* Meaning is defined by the command description. */
 #define I93_FLAG_OPTION_SET 0x40
 
-/* Response flags */
-#define I93_FLAG_ERROR_MASK 0x01 /* Error_flag */
-/* No error                                           */
-#define I93_FLAG_ERORR_NOT_DETECTED 0x00
 /* Error detected, Error code is in the "Error" field */
 #define I93_FLAG_ERROR_DETECTED 0x01
 
 /* Response error code */
-/* The command is not supported, i.e. the request code is not recognized */
-#define I93_ERROR_CODE_NOT_SUPPORTED 0x01
-/* The command is not recognized, for example: a format error occured    */
-#define I93_ERROR_CODE_NOT_RECOGNIZED 0x02
 /* The command option is not supported                                   */
 #define I93_ERROR_CODE_OPTION_NOT_SUPPORTED 0x03
-/* Error with no information given or a specific error code is not supported */
-#define I93_ERROR_CODE_NO_INFO 0x0F
-/* The specific block is not available (doesn't exist)                   */
-#define I93_ERROR_CODE_BLOCK_NOT_AVAILABLE 0x10
-/* The specific block is already locked and thus cannot be locked again  */
-#define I93_ERROR_CODE_BLOCK_ALREADY_LOCKED 0x11
-/* The specific block is locked and its content cannot be changed        */
-#define I93_ERROR_CODE_BLOCK_LOCKED 0x12
 /* The specific block is was not successfully programmed                 */
 #define I93_ERROR_CODE_BLOCK_FAIL_TO_WRITE 0x13
 /* The specific block is was not successfully locked                     */
-#define I93_ERROR_CODE_BLOCK_FAIL_TO_LOCK 0x14
 
 /* UID length in bytes                  */
 #define I93_UID_BYTE_LEN 8
 /* Data Storage Format is not supported */
 #define I93_DFS_UNSUPPORTED 0x00
-/* Block is not locked                  */
-#define I93_BLOCK_UNLOCKED 0x00
 /* Block is locked                      */
 #define I93_BLOCK_LOCKED 0x01
 
@@ -655,10 +503,15 @@
 
 /* ISO 15693 Optional commands */
 #define I93_CMD_READ_SINGLE_BLOCK 0x20  /* Read single block     */
+#define I93_CMD_EXT_READ_SINGLE_BLOCK 0x30 /* Extended Read single block */
 #define I93_CMD_WRITE_SINGLE_BLOCK 0x21 /* Write single block    */
+#define I93_CMD_EXT_WRITE_SINGLE_BLOCK 0x31 /* Extended Write single block */
 #define I93_CMD_LOCK_BLOCK 0x22         /* Lock block            */
+#define I93_CMD_EXT_LOCK_BLOCK 0x32     /* Extended Lock block            */
 #define I93_CMD_READ_MULTI_BLOCK 0x23   /* Read multiple blocks  */
+#define I93_CMD_EXT_READ_MULTI_BLOCK 0x33 /* Extended Read multiple blocks  */
 #define I93_CMD_WRITE_MULTI_BLOCK 0x24  /* Write multiple blocks */
+#define I93_CMD_EXT_WRITE_MULTI_BLOCK 0x34 /* Write multiple blocks */
 #define I93_CMD_SELECT 0x25             /* Select                */
 #define I93_CMD_RESET_TO_READY 0x26     /* Reset to ready        */
 #define I93_CMD_WRITE_AFI 0x27          /* Wreite AFI            */
@@ -667,8 +520,12 @@
 #define I93_CMD_LOCK_DSFID 0x2A         /* Lock DSFID            */
 /* Get system information             */
 #define I93_CMD_GET_SYS_INFO 0x2B
+/* Get extended system information    */
+#define I93_CMD_EXT_GET_SYS_INFO 0x3B
 /* Get multiple block security status */
 #define I93_CMD_GET_MULTI_BLK_SEC 0x2C
+/* Get extended multiple block security status */
+#define I93_CMD_EXT_GET_MULTI_BLK_SEC 0x3C
 
 /* Information flags definition */
 /* DSFID is supported and DSFID field is present */
@@ -677,18 +534,19 @@
 #define I93_INFO_FLAG_AFI 0x02
 /* VICC memory size field is present             */
 #define I93_INFO_FLAG_MEM_SIZE 0x04
+/* 16bit num of blocks info length */
+#define I93_INFO_16BIT_NUM_BLOCK_LEN 0x02
 /* IC reference field is present                 */
 #define I93_INFO_FLAG_IC_REF 0x08
+/* Memory coded in 2 bytes address               */
+#define I93_INFO_FLAG_MOI 0x10
 
 /* Max block size in bytes */
 #define I93_MAX_BLOCK_LENGH 32
-/* Max number of blocks    */
-#define I93_MAX_NUM_BLOCK 256
 
 /* ICODE Capability Container(CC) definition */
-#define I93_ICODE_CC_MAGIC_NUMER 0xE1    /* magic number in CC[0]  */
-#define I93_ICODE_CC_MAJOR_VER_MASK 0xC0 /* major version in CC[1] */
-#define I93_ICODE_CC_MINOR_VER_MASK 0x30 /* minor version in CC[1] */
+#define I93_ICODE_CC_MAGIC_NUMER_E1 0xE1 /* magic number in CC[0]  */
+#define I93_ICODE_CC_MAGIC_NUMER_E2 0xE2 /* magic number in CC[0]  */
 /* read access condition in CC[1]        */
 #define I93_ICODE_CC_READ_ACCESS_MASK 0x0C
 /* read access granted without security  */
@@ -776,6 +634,13 @@
 /* IC Reference for M24LR64E-R: 01011110(b), blockSize: 4, numberBlocks: 0x800
  */
 #define I93_IC_REF_STM_M24LR64E_R 0x5E
+/* IC Reference for ST25DV04K: 00100100(b), blockSize: 4, numberBlocks: 0x80
+ */
+#define I93_IC_REF_STM_ST25DV04K 0x24
+/* IC Reference for ST25DVHIK: 00100110(b), blockSize: 4, numberBlocks: 0x800
+ * or 0x200
+ */
+#define I93_IC_REF_STM_ST25DVHIK 0x26
 
 #define I93_STM_BLOCKS_PER_SECTOR 32
 #define I93_STM_MAX_BLOCKS_PER_READ 32
diff --git a/src/nfc/int/tags_int.h b/src/nfc/include/tags_int.h
similarity index 96%
rename from src/nfc/int/tags_int.h
rename to src/nfc/include/tags_int.h
index edaecdf..b7fc8d3 100644
--- a/src/nfc/int/tags_int.h
+++ b/src/nfc/include/tags_int.h
@@ -82,13 +82,8 @@
 extern const tT2T_CMD_RSP_INFO* t2t_cmd_to_rsp_info(uint8_t opcode);
 extern uint8_t t2t_info_to_evt(const tT2T_CMD_RSP_INFO* p_info);
 
-#if (BT_TRACE_PROTOCOL == TRUE)
 extern const char* t1t_info_to_str(const tT1T_CMD_RSP_INFO* p_info);
 extern const char* t2t_info_to_str(const tT2T_CMD_RSP_INFO* p_info);
-#else
-#define t1t_info_to_str(x) ""
-#define t2t_info_to_str(x) ""
-#endif
 extern int tags_pow(int x, int y);
 extern unsigned int tags_log2(register unsigned int x);
 
diff --git a/src/nfc/llcp/llcp_api.c b/src/nfc/llcp/llcp_api.cc
similarity index 82%
rename from src/nfc/llcp/llcp_api.c
rename to src/nfc/llcp/llcp_api.cc
index 9d87ec0..289af2a 100644
--- a/src/nfc/llcp/llcp_api.c
+++ b/src/nfc/llcp/llcp_api.cc
@@ -22,13 +22,16 @@
  *
  ******************************************************************************/
 
-#include "llcp_api.h"
-#include <string.h>
-#include "bt_types.h"
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "gki.h"
-#include "llcp_defs.h"
+#include "llcp_api.h"
 #include "llcp_int.h"
-#include "nfc_target.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 #if (LLCP_TEST_INCLUDED == TRUE) /* this is for LLCP testing */
 
@@ -47,8 +50,8 @@
 **
 *******************************************************************************/
 void LLCP_SetTestParams(uint8_t version, uint16_t wks) {
-  LLCP_TRACE_API2("LLCP_SetTestParams () version:0x%02X, wks:0x%04X", version,
-                  wks);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("version:0x%02X, wks:0x%04X", version, wks);
 
   if (version != 0xFF) llcp_test_params.version = version;
 
@@ -67,7 +70,7 @@
 **
 *******************************************************************************/
 void LLCP_RegisterDtaCback(tLLCP_DTA_CBACK* p_dta_cback) {
-  LLCP_TRACE_API1("%s", __func__);
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   llcp_cb.p_dta_cback = p_dta_cback;
 }
@@ -95,25 +98,25 @@
                     uint16_t inact_timeout_target, uint16_t symm_delay,
                     uint16_t data_link_timeout,
                     uint16_t delay_first_pdu_timeout) {
-  LLCP_TRACE_API4(
-      "LLCP_SetConfig () link_miu:%d, opt:0x%02X, wt:%d, link_timeout:%d",
-      link_miu, opt, wt, link_timeout);
-  LLCP_TRACE_API4(
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("link_miu:%d, opt:0x%02X, wt:%d, link_timeout:%d",
+                      link_miu, opt, wt, link_timeout);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
       "                 inact_timeout (init:%d,target:%d), symm_delay:%d, "
       "data_link_timeout:%d",
       inact_timeout_init, inact_timeout_target, symm_delay, data_link_timeout);
-  LLCP_TRACE_API1("                 delay_first_pdu_timeout:%d",
-                  delay_first_pdu_timeout);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "                 delay_first_pdu_timeout:%d", delay_first_pdu_timeout);
 
   if (link_miu < LLCP_DEFAULT_MIU) {
-    LLCP_TRACE_ERROR1(
-        "LLCP_SetConfig (): link_miu shall not be smaller than "
+    LOG(ERROR) << StringPrintf(
+        "link_miu shall not be smaller than "
         "LLCP_DEFAULT_MIU (%d)",
         LLCP_DEFAULT_MIU);
     link_miu = LLCP_DEFAULT_MIU;
   } else if (link_miu > LLCP_MAX_MIU) {
-    LLCP_TRACE_ERROR1(
-        "LLCP_SetConfig (): link_miu shall not be bigger than LLCP_MAX_MIU "
+    LOG(ERROR) << StringPrintf(
+        "link_miu shall not be bigger than LLCP_MAX_MIU "
         "(%d)",
         LLCP_MAX_MIU);
     link_miu = LLCP_MAX_MIU;
@@ -121,9 +124,8 @@
 
   /* if Link MIU is bigger than GKI buffer */
   if (link_miu > LLCP_MIU) {
-    LLCP_TRACE_ERROR1(
-        "LLCP_SetConfig (): link_miu shall not be bigger than LLCP_MIU (%d)",
-        LLCP_MIU);
+    LOG(ERROR) << StringPrintf(
+        "link_miu shall not be bigger than LLCP_MIU (%zu)", LLCP_MIU);
     llcp_cb.lcb.local_link_miu = LLCP_MIU;
   } else
     llcp_cb.lcb.local_link_miu = link_miu;
@@ -132,14 +134,14 @@
   llcp_cb.lcb.local_wt = wt;
 
   if (link_timeout < LLCP_LTO_UNIT) {
-    LLCP_TRACE_ERROR1(
-        "LLCP_SetConfig (): link_timeout shall not be smaller than "
+    LOG(ERROR) << StringPrintf(
+        "link_timeout shall not be smaller than "
         "LLCP_LTO_UNIT (%d ms)",
         LLCP_LTO_UNIT);
     llcp_cb.lcb.local_lto = LLCP_DEFAULT_LTO_IN_MS;
   } else if (link_timeout > LLCP_MAX_LTO_IN_MS) {
-    LLCP_TRACE_ERROR1(
-        "LLCP_SetConfig (): link_timeout shall not be bigger than "
+    LOG(ERROR) << StringPrintf(
+        "link_timeout shall not be bigger than "
         "LLCP_MAX_LTO_IN_MS (%d ms)",
         LLCP_MAX_LTO_IN_MS);
     llcp_cb.lcb.local_lto = LLCP_MAX_LTO_IN_MS;
@@ -186,16 +188,15 @@
   *p_data_link_timeout = llcp_cb.lcb.data_link_timeout;
   *p_delay_first_pdu_timeout = llcp_cb.lcb.delay_first_pdu_timeout;
 
-  LLCP_TRACE_API4(
-      "LLCP_GetConfig () link_miu:%d, opt:0x%02X, wt:%d, link_timeout:%d",
-      *p_link_miu, *p_opt, *p_wt, *p_link_timeout);
-  LLCP_TRACE_API4(
-      "                 inact_timeout (init:%d, target:%d), symm_delay:%d, "
-      "data_link_timeout:%d",
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("link_miu:%d, opt:0x%02X, wt:%d, link_timeout:%d",
+                      *p_link_miu, *p_opt, *p_wt, *p_link_timeout);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "inact_timeout (init:%d, target:%d), symm_delay:%d, data_link_timeout:%d",
       *p_inact_timeout_init, *p_inact_timeout_target, *p_symm_delay,
       *p_data_link_timeout);
-  LLCP_TRACE_API1("                 delay_first_pdu_timeout:%d",
-                  *p_delay_first_pdu_timeout);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("delay_first_pdu_timeout:%d", *p_delay_first_pdu_timeout);
 }
 
 /*******************************************************************************
@@ -227,11 +228,11 @@
                              uint8_t* p_gen_bytes_len) {
   uint8_t* p = p_gen_bytes;
 
-  LLCP_TRACE_API0("LLCP_GetDiscoveryConfig ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (*p_gen_bytes_len < LLCP_MIN_GEN_BYTES) {
-    LLCP_TRACE_ERROR1(
-        "LLCP_GetDiscoveryConfig (): GenBytes length shall not be smaller than "
+    LOG(ERROR) << StringPrintf(
+        "GenBytes length shall not be smaller than "
         "LLCP_MIN_GEN_BYTES (%d)",
         LLCP_MIN_GEN_BYTES);
     *p_gen_bytes_len = 0;
@@ -302,8 +303,8 @@
 *******************************************************************************/
 tLLCP_STATUS LLCP_ActivateLink(tLLCP_ACTIVATE_CONFIG config,
                                tLLCP_LINK_CBACK* p_link_cback) {
-  LLCP_TRACE_API1("LLCP_ActivateLink () link_state = %d",
-                  llcp_cb.lcb.link_state);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("link_state = %d", llcp_cb.lcb.link_state);
 
   if ((llcp_cb.lcb.link_state == LLCP_LINK_STATE_DEACTIVATED) &&
       (p_link_cback)) {
@@ -327,8 +328,8 @@
 **
 *******************************************************************************/
 tLLCP_STATUS LLCP_DeactivateLink(void) {
-  LLCP_TRACE_API1("LLCP_DeactivateLink () link_state = %d",
-                  llcp_cb.lcb.link_state);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("link_state = %d", llcp_cb.lcb.link_state);
 
   if (llcp_cb.lcb.link_state != LLCP_LINK_STATE_DEACTIVATED) {
     llcp_link_deactivate(LLCP_LINK_LOCAL_INITIATED);
@@ -357,7 +358,7 @@
 **
 *******************************************************************************/
 uint8_t LLCP_RegisterServer(uint8_t reg_sap, uint8_t link_type,
-                            char* p_service_name,
+                            std::string p_service_name,
                             tLLCP_APP_CBACK* p_app_cback) {
   uint8_t sap;
   uint16_t length;
@@ -365,18 +366,16 @@
       0,
   };
 
-  LLCP_TRACE_API3(
-      "LLCP_RegisterServer (): SAP:0x%x, link_type:0x%x, ServiceName:<%s>",
-      reg_sap, link_type, ((p_service_name == NULL) ? "" : p_service_name));
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "SAP:0x%x, link_type:0x%x, ServiceName:<%s>", reg_sap, link_type,
+      ((p_service_name.empty()) ? "" : p_service_name.c_str()));
 
   if (!p_app_cback) {
-    LLCP_TRACE_ERROR0("LLCP_RegisterServer (): Callback must be provided");
+    LOG(ERROR) << StringPrintf("Callback must be provided");
     return LLCP_INVALID_SAP;
   } else if (((link_type & LLCP_LINK_TYPE_LOGICAL_DATA_LINK) == 0x00) &&
              ((link_type & LLCP_LINK_TYPE_DATA_LINK_CONNECTION) == 0x00)) {
-    LLCP_TRACE_ERROR1(
-        "LLCP_RegisterServer (): link type (0x%x) must be specified",
-        link_type);
+    LOG(ERROR) << StringPrintf("link type (0x%x) must be specified", link_type);
     return LLCP_INVALID_SAP;
   }
 
@@ -391,63 +390,55 @@
     }
 
     if (reg_sap == LLCP_INVALID_SAP) {
-      LLCP_TRACE_ERROR0("LLCP_RegisterServer (): out of resource");
+      LOG(ERROR) << StringPrintf("out of resource");
       return LLCP_INVALID_SAP;
     }
   } else if (reg_sap == LLCP_SAP_LM) {
-    LLCP_TRACE_ERROR1("LLCP_RegisterServer (): SAP (0x%x) is for link manager",
-                      reg_sap);
+    LOG(ERROR) << StringPrintf("SAP (0x%x) is for link manager", reg_sap);
     return LLCP_INVALID_SAP;
   } else if (reg_sap <= LLCP_UPPER_BOUND_WK_SAP) {
     if (reg_sap >= LLCP_MAX_WKS) {
-      LLCP_TRACE_ERROR1(
-          "LLCP_RegisterServer (): out of resource for SAP (0x%x)", reg_sap);
+      LOG(ERROR) << StringPrintf("out of resource for SAP (0x%x)", reg_sap);
       return LLCP_INVALID_SAP;
     } else if (llcp_cb.wks_cb[reg_sap].p_app_cback) {
-      LLCP_TRACE_ERROR1(
-          "LLCP_RegisterServer (): SAP (0x%x) is already registered", reg_sap);
+      LOG(ERROR) << StringPrintf("SAP (0x%x) is already registered", reg_sap);
       return LLCP_INVALID_SAP;
     } else {
       p_app_cb = &llcp_cb.wks_cb[reg_sap];
     }
   } else if (reg_sap <= LLCP_UPPER_BOUND_SDP_SAP) {
     if (reg_sap - LLCP_LOWER_BOUND_SDP_SAP >= LLCP_MAX_SERVER) {
-      LLCP_TRACE_ERROR1(
-          "LLCP_RegisterServer (): out of resource for SAP (0x%x)", reg_sap);
+      LOG(ERROR) << StringPrintf("out of resource for SAP (0x%x)", reg_sap);
       return LLCP_INVALID_SAP;
     } else if (llcp_cb.server_cb[reg_sap - LLCP_LOWER_BOUND_SDP_SAP]
                    .p_app_cback) {
-      LLCP_TRACE_ERROR1(
-          "LLCP_RegisterServer (): SAP (0x%x) is already registered", reg_sap);
+      LOG(ERROR) << StringPrintf("SAP (0x%x) is already registered", reg_sap);
       return LLCP_INVALID_SAP;
     } else {
       p_app_cb = &llcp_cb.server_cb[reg_sap - LLCP_LOWER_BOUND_SDP_SAP];
     }
   } else if (reg_sap >= LLCP_LOWER_BOUND_LOCAL_SAP) {
-    LLCP_TRACE_ERROR2(
-        "LLCP_RegisterServer (): SAP (0x%x) must be less than 0x%x", reg_sap,
-        LLCP_LOWER_BOUND_LOCAL_SAP);
+    LOG(ERROR) << StringPrintf("SAP (0x%x) must be less than 0x%x", reg_sap,
+                               LLCP_LOWER_BOUND_LOCAL_SAP);
     return LLCP_INVALID_SAP;
   }
 
   memset(p_app_cb, 0x00, sizeof(tLLCP_APP_CB));
 
-  if (p_service_name) {
-    length = (uint8_t)strlen(p_service_name);
+  if (!p_service_name.empty()) {
+    length = p_service_name.length();
     if (length > LLCP_MAX_SN_LEN) {
-      LLCP_TRACE_ERROR1(
-          "LLCP_RegisterServer (): Service Name (%d bytes) is too long",
-          length);
+      LOG(ERROR) << StringPrintf("Service Name (%d bytes) is too long", length);
       return LLCP_INVALID_SAP;
     }
 
-    p_app_cb->p_service_name = (uint8_t*)GKI_getbuf((uint16_t)(length + 1));
+    p_app_cb->p_service_name = (char*)GKI_getbuf((uint16_t)(length + 1));
     if (p_app_cb->p_service_name == NULL) {
-      LLCP_TRACE_ERROR0("LLCP_RegisterServer (): Out of resource");
+      LOG(ERROR) << StringPrintf("Out of resource");
       return LLCP_INVALID_SAP;
     }
 
-    strncpy((char*)p_app_cb->p_service_name, (char*)p_service_name, length + 1);
+    strncpy(p_app_cb->p_service_name, p_service_name.c_str(), length + 1);
     p_app_cb->p_service_name[length] = 0;
   } else
     p_app_cb->p_service_name = NULL;
@@ -459,7 +450,8 @@
     llcp_cb.lcb.wks |= (1 << reg_sap);
   }
 
-  LLCP_TRACE_DEBUG1("LLCP_RegisterServer (): Registered SAP = 0x%02X", reg_sap);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("Registered SAP = 0x%02X", reg_sap);
 
   if (link_type & LLCP_LINK_TYPE_LOGICAL_DATA_LINK) {
     llcp_cb.num_logical_data_link++;
@@ -487,16 +479,15 @@
   uint8_t sap;
   tLLCP_APP_CB* p_app_cb;
 
-  LLCP_TRACE_API1("LLCP_RegisterClient (): link_type = 0x%x", link_type);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("link_type = 0x%x", link_type);
 
   if (!p_app_cback) {
-    LLCP_TRACE_ERROR0("LLCP_RegisterClient (): Callback must be provided");
+    LOG(ERROR) << StringPrintf("Callback must be provided");
     return LLCP_INVALID_SAP;
   } else if (((link_type & LLCP_LINK_TYPE_LOGICAL_DATA_LINK) == 0x00) &&
              ((link_type & LLCP_LINK_TYPE_DATA_LINK_CONNECTION) == 0x00)) {
-    LLCP_TRACE_ERROR1(
-        "LLCP_RegisterClient (): link type (0x%x) must be specified",
-        link_type);
+    LOG(ERROR) << StringPrintf("link type (0x%x) must be specified", link_type);
     return LLCP_INVALID_SAP;
   }
 
@@ -511,7 +502,7 @@
   }
 
   if (reg_sap == LLCP_INVALID_SAP) {
-    LLCP_TRACE_ERROR0("LLCP_RegisterClient (): out of resource");
+    LOG(ERROR) << StringPrintf("out of resource");
     return LLCP_INVALID_SAP;
   }
 
@@ -519,7 +510,8 @@
   p_app_cb->p_service_name = NULL;
   p_app_cb->link_type = link_type;
 
-  LLCP_TRACE_DEBUG1("LLCP_RegisterClient (): Registered SAP = 0x%02X", reg_sap);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("Registered SAP = 0x%02X", reg_sap);
 
   if (link_type & LLCP_LINK_TYPE_LOGICAL_DATA_LINK) {
     llcp_cb.num_logical_data_link++;
@@ -543,13 +535,12 @@
   uint8_t idx;
   tLLCP_APP_CB* p_app_cb;
 
-  LLCP_TRACE_API1("LLCP_Deregister () SAP:0x%x", local_sap);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("SAP:0x%x", local_sap);
 
   p_app_cb = llcp_util_get_app_cb(local_sap);
 
   if ((!p_app_cb) || (p_app_cb->p_app_cback == NULL)) {
-    LLCP_TRACE_ERROR1("LLCP_Deregister (): SAP (0x%x) is not registered",
-                      local_sap);
+    LOG(ERROR) << StringPrintf("SAP (0x%x) is not registered", local_sap);
     return LLCP_STATUS_FAIL;
   }
 
@@ -606,9 +597,9 @@
                                  uint8_t total_pending_i_pdu) {
   tLLCP_APP_CB* p_app_cb;
 
-  LLCP_TRACE_API4(
-      "LLCP_IsLogicalLinkCongested () Local SAP:0x%x, pending = (%d, %d, %d)",
-      local_sap, num_pending_ui_pdu, total_pending_ui_pdu, total_pending_i_pdu);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "Local SAP:0x%x, pending = (%d, %d, %d)", local_sap, num_pending_ui_pdu,
+      total_pending_ui_pdu, total_pending_i_pdu);
 
   p_app_cb = llcp_util_get_app_cb(local_sap);
 
@@ -648,34 +639,34 @@
   tLLCP_STATUS status = LLCP_STATUS_FAIL;
   tLLCP_APP_CB* p_app_cb;
 
-  LLCP_TRACE_API2("LLCP_SendUI () SSAP=0x%x, DSAP=0x%x", ssap, dsap);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("SSAP=0x%x, DSAP=0x%x", ssap, dsap);
 
   p_app_cb = llcp_util_get_app_cb(ssap);
 
   if ((p_app_cb == NULL) || (p_app_cb->p_app_cback == NULL)) {
-    LLCP_TRACE_ERROR1("LLCP_SendUI (): SSAP (0x%x) is not registered", ssap);
+    LOG(ERROR) << StringPrintf("SSAP (0x%x) is not registered", ssap);
   } else if ((p_app_cb->link_type & LLCP_LINK_TYPE_LOGICAL_DATA_LINK) == 0) {
-    LLCP_TRACE_ERROR1(
-        "LLCP_SendUI (): Logical link on SSAP (0x%x) is not enabled", ssap);
+    LOG(ERROR) << StringPrintf("Logical link on SSAP (0x%x) is not enabled",
+                               ssap);
   } else if (llcp_cb.lcb.link_state != LLCP_LINK_STATE_ACTIVATED) {
-    LLCP_TRACE_ERROR0("LLCP_SendUI (): LLCP link is not activated");
+    LOG(ERROR) << StringPrintf("LLCP link is not activated");
   } else if ((llcp_cb.lcb.peer_opt == LLCP_LSC_UNKNOWN) ||
              (llcp_cb.lcb.peer_opt & LLCP_LSC_1)) {
     if (p_buf->len <= llcp_cb.lcb.peer_miu) {
       if (p_buf->offset >= LLCP_MIN_OFFSET) {
         status = llcp_util_send_ui(ssap, dsap, p_app_cb, p_buf);
       } else {
-        LLCP_TRACE_ERROR2("LLCP_SendUI (): offset (%d) must be %d at least",
-                          p_buf->offset, LLCP_MIN_OFFSET);
+        LOG(ERROR) << StringPrintf("offset (%d) must be %d at least",
+                                   p_buf->offset, LLCP_MIN_OFFSET);
       }
     } else {
-      LLCP_TRACE_ERROR0(
-          "LLCP_SendUI (): Data length shall not be bigger than peer's link "
+      LOG(ERROR) << StringPrintf(
+          "Data length shall not be bigger than peer's link "
           "MIU");
     }
   } else {
-    LLCP_TRACE_ERROR0(
-        "LLCP_SendUI (): Peer doesn't support connectionless link");
+    LOG(ERROR) << StringPrintf("Peer doesn't support connectionless link");
   }
 
   if (status == LLCP_STATUS_FAIL) {
@@ -708,7 +699,7 @@
   uint8_t* p_ui_pdu;
   uint16_t pdu_hdr, ui_pdu_length;
 
-  LLCP_TRACE_API1("LLCP_ReadLogicalLinkData () Local SAP:0x%x", local_sap);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("Local SAP:0x%x", local_sap);
 
   *p_data_len = 0;
 
@@ -771,8 +762,7 @@
       return false;
     }
   } else {
-    LLCP_TRACE_ERROR1("LLCP_ReadLogicalLinkData (): Unregistered SAP:0x%x",
-                      local_sap);
+    LOG(ERROR) << StringPrintf("Unregistered SAP:0x%x", local_sap);
 
     return false;
   }
@@ -795,7 +785,7 @@
   uint8_t* p_ui_pdu;
   uint16_t ui_pdu_length;
 
-  LLCP_TRACE_API1("LLCP_FlushLogicalLinkRxData () Local SAP:0x%x", local_sap);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("Local SAP:0x%x", local_sap);
 
   p_app_cb = llcp_util_get_app_cb(local_sap);
 
@@ -828,8 +818,7 @@
     /* number of received UI PDU is decreased so check rx congestion status */
     llcp_util_check_rx_congested_status();
   } else {
-    LLCP_TRACE_ERROR1("LLCP_FlushLogicalLinkRxData (): Unregistered SAP:0x%x",
-                      local_sap);
+    LOG(ERROR) << StringPrintf("Unregistered SAP:0x%x", local_sap);
   }
 
   return (flushed_length);
@@ -854,12 +843,12 @@
   tLLCP_APP_CB* p_app_cb;
   tLLCP_CONNECTION_PARAMS params;
 
-  LLCP_TRACE_API2("LLCP_ConnectReq () reg_sap=0x%x, DSAP=0x%x", reg_sap, dsap);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("reg_sap=0x%x, DSAP=0x%x", reg_sap, dsap);
 
   if ((llcp_cb.lcb.peer_opt != LLCP_LSC_UNKNOWN) &&
       ((llcp_cb.lcb.peer_opt & LLCP_LSC_2) == 0)) {
-    LLCP_TRACE_ERROR0(
-        "LLCP_ConnectReq (): Peer doesn't support connection-oriented link");
+    LOG(ERROR) << StringPrintf("Peer doesn't support connection-oriented link");
     return LLCP_STATUS_FAIL;
   }
 
@@ -874,29 +863,27 @@
 
   /* if application is registered */
   if ((p_app_cb == NULL) || (p_app_cb->p_app_cback == NULL)) {
-    LLCP_TRACE_ERROR1("LLCP_ConnectReq (): SSAP (0x%x) is not registered",
-                      reg_sap);
+    LOG(ERROR) << StringPrintf("SSAP (0x%x) is not registered", reg_sap);
     return LLCP_STATUS_FAIL;
   }
 
   if (dsap == LLCP_SAP_LM) {
-    LLCP_TRACE_ERROR1(
-        "LLCP_ConnectReq (): DSAP (0x%x) must not be link manager SAP", dsap);
+    LOG(ERROR) << StringPrintf("DSAP (0x%x) must not be link manager SAP",
+                               dsap);
     return LLCP_STATUS_FAIL;
   }
 
   if (dsap == LLCP_SAP_SDP) {
     if (strlen(p_params->sn) > LLCP_MAX_SN_LEN) {
-      LLCP_TRACE_ERROR1(
-          "LLCP_ConnectReq (): Service Name (%d bytes) is too long",
-          strlen(p_params->sn));
+      LOG(ERROR) << StringPrintf("Service Name (%zu bytes) is too long",
+                                 strlen(p_params->sn));
       return LLCP_STATUS_FAIL;
     }
   }
 
   if ((p_params) && (p_params->miu > llcp_cb.lcb.local_link_miu)) {
-    LLCP_TRACE_ERROR0(
-        "LLCP_ConnectReq (): Data link MIU shall not be bigger than local link "
+    LOG(ERROR) << StringPrintf(
+        "Data link MIU shall not be bigger than local link "
         "MIU");
     return LLCP_STATUS_FAIL;
   }
@@ -909,8 +896,8 @@
     ** link connection if there is multiple pending connection request on
     ** the same local SAP.
     */
-    LLCP_TRACE_ERROR0(
-        "LLCP_ConnectReq (): There is pending connect request on this reg_sap");
+    LOG(ERROR) << StringPrintf(
+        "There is pending connect request on this reg_sap");
     return LLCP_STATUS_FAIL;
   }
 
@@ -920,7 +907,7 @@
     status =
         llcp_dlsm_execute(p_dlcb, LLCP_DLC_EVENT_API_CONNECT_REQ, p_params);
     if (status != LLCP_STATUS_SUCCESS) {
-      LLCP_TRACE_ERROR0("LLCP_ConnectReq (): Error in state machine");
+      LOG(ERROR) << StringPrintf("Error in state machine");
       llcp_util_deallocate_data_link(p_dlcb);
       return LLCP_STATUS_FAIL;
     }
@@ -948,8 +935,8 @@
   tLLCP_DLCB* p_dlcb;
   tLLCP_CONNECTION_PARAMS params;
 
-  LLCP_TRACE_API2("LLCP_ConnectCfm () Local SAP:0x%x, Remote SAP:0x%x)",
-                  local_sap, remote_sap);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "Local SAP:0x%x, Remote SAP:0x%x)", local_sap, remote_sap);
 
   if (!p_params) {
     params.miu = LLCP_DEFAULT_MIU;
@@ -958,8 +945,8 @@
     p_params = &params;
   }
   if (p_params->miu > llcp_cb.lcb.local_link_miu) {
-    LLCP_TRACE_ERROR0(
-        "LLCP_ConnectCfm (): Data link MIU shall not be bigger than local link "
+    LOG(ERROR) << StringPrintf(
+        "Data link MIU shall not be bigger than local link "
         "MIU");
     return LLCP_STATUS_FAIL;
   }
@@ -970,7 +957,7 @@
     status =
         llcp_dlsm_execute(p_dlcb, LLCP_DLC_EVENT_API_CONNECT_CFM, p_params);
   } else {
-    LLCP_TRACE_ERROR0("LLCP_ConnectCfm (): No data link");
+    LOG(ERROR) << StringPrintf("No data link");
     status = LLCP_STATUS_FAIL;
   }
 
@@ -998,9 +985,9 @@
   tLLCP_STATUS status;
   tLLCP_DLCB* p_dlcb;
 
-  LLCP_TRACE_API3(
-      "LLCP_ConnectReject () Local SAP:0x%x, Remote SAP:0x%x, reason:0x%x",
-      local_sap, remote_sap, reason);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("Local SAP:0x%x, Remote SAP:0x%x, reason:0x%x", local_sap,
+                      remote_sap, reason);
 
   p_dlcb = llcp_dlc_find_dlcb_by_sap(local_sap, remote_sap);
 
@@ -1009,7 +996,7 @@
         llcp_dlsm_execute(p_dlcb, LLCP_DLC_EVENT_API_CONNECT_REJECT, &reason);
     llcp_util_deallocate_data_link(p_dlcb);
   } else {
-    LLCP_TRACE_ERROR0("LLCP_ConnectReject (): No data link");
+    LOG(ERROR) << StringPrintf("No data link");
     status = LLCP_STATUS_FAIL;
   }
 
@@ -1032,8 +1019,8 @@
                               uint8_t total_pending_i_pdu) {
   tLLCP_DLCB* p_dlcb;
 
-  LLCP_TRACE_API5(
-      "LLCP_IsDataLinkCongested () Local SAP:0x%x, Remote SAP:0x%x, pending = "
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "Local SAP:0x%x, Remote SAP:0x%x, pending = "
       "(%d, %d, %d)",
       local_sap, remote_sap, num_pending_i_pdu, total_pending_ui_pdu,
       total_pending_i_pdu);
@@ -1073,8 +1060,8 @@
   tLLCP_STATUS status = LLCP_STATUS_FAIL;
   tLLCP_DLCB* p_dlcb;
 
-  LLCP_TRACE_API2("LLCP_SendData () Local SAP:0x%x, Remote SAP:0x%x", local_sap,
-                  remote_sap);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("Local SAP:0x%x, Remote SAP:0x%x", local_sap, remote_sap);
 
   p_dlcb = llcp_dlc_find_dlcb_by_sap(local_sap, remote_sap);
 
@@ -1083,17 +1070,17 @@
       if (p_buf->offset >= LLCP_MIN_OFFSET) {
         status = llcp_dlsm_execute(p_dlcb, LLCP_DLC_EVENT_API_DATA_REQ, p_buf);
       } else {
-        LLCP_TRACE_ERROR2("LLCP_SendData (): offset (%d) must be %d at least",
-                          p_buf->offset, LLCP_MIN_OFFSET);
+        LOG(ERROR) << StringPrintf("offset (%d) must be %d at least",
+                                   p_buf->offset, LLCP_MIN_OFFSET);
       }
     } else {
-      LLCP_TRACE_ERROR2(
-          "LLCP_SendData (): Information (%d bytes) cannot be more than peer "
+      LOG(ERROR) << StringPrintf(
+          "Information (%d bytes) cannot be more than peer "
           "MIU (%d bytes)",
           p_buf->len, p_dlcb->remote_miu);
     }
   } else {
-    LLCP_TRACE_ERROR0("LLCP_SendData (): No data link");
+    LOG(ERROR) << StringPrintf("No data link");
   }
 
   if (status == LLCP_STATUS_FAIL) {
@@ -1126,8 +1113,8 @@
   uint8_t* p_i_pdu;
   uint16_t i_pdu_length;
 
-  LLCP_TRACE_API2("LLCP_ReadDataLinkData () Local SAP:0x%x, Remote SAP:0x%x",
-                  local_sap, remote_sap);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("Local SAP:0x%x, Remote SAP:0x%x", local_sap, remote_sap);
 
   p_dlcb = llcp_dlc_find_dlcb_by_sap(local_sap, remote_sap);
 
@@ -1194,7 +1181,7 @@
       return false;
     }
   } else {
-    LLCP_TRACE_ERROR0("LLCP_ReadDataLinkData (): No data link connection");
+    LOG(ERROR) << StringPrintf("No data link connection");
 
     return false;
   }
@@ -1217,8 +1204,8 @@
   uint8_t* p_i_pdu;
   uint16_t i_pdu_length;
 
-  LLCP_TRACE_API2("LLCP_FlushDataLinkRxData () Local SAP:0x%x, Remote SAP:0x%x",
-                  local_sap, remote_sap);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("Local SAP:0x%x, Remote SAP:0x%x", local_sap, remote_sap);
 
   p_dlcb = llcp_dlc_find_dlcb_by_sap(local_sap, remote_sap);
 
@@ -1258,7 +1245,7 @@
     /* number of received I PDU is decreased so check rx congestion status */
     llcp_util_check_rx_congested_status();
   } else {
-    LLCP_TRACE_ERROR0("LLCP_FlushDataLinkRxData (): No data link connection");
+    LOG(ERROR) << StringPrintf("No data link connection");
   }
 
   return (flushed_length);
@@ -1279,9 +1266,9 @@
   tLLCP_STATUS status;
   tLLCP_DLCB* p_dlcb;
 
-  LLCP_TRACE_API3(
-      "LLCP_DisconnectReq () Local SAP:0x%x, Remote SAP:0x%x, flush=%d",
-      local_sap, remote_sap, flush);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("Local SAP:0x%x, Remote SAP:0x%x, flush=%d", local_sap,
+                      remote_sap, flush);
 
   p_dlcb = llcp_dlc_find_dlcb_by_sap(local_sap, remote_sap);
 
@@ -1289,7 +1276,7 @@
     status =
         llcp_dlsm_execute(p_dlcb, LLCP_DLC_EVENT_API_DISCONNECT_REQ, &flush);
   } else {
-    LLCP_TRACE_ERROR0("LLCP_DisconnectReq (): No data link");
+    LOG(ERROR) << StringPrintf("No data link");
     status = LLCP_STATUS_FAIL;
   }
 
@@ -1312,8 +1299,8 @@
   tLLCP_STATUS status;
   tLLCP_DLCB* p_dlcb;
 
-  LLCP_TRACE_API2("LLCP_SetTxCompleteNtf () Local SAP:0x%x, Remote SAP:0x%x",
-                  local_sap, remote_sap);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("Local SAP:0x%x, Remote SAP:0x%x", local_sap, remote_sap);
 
   p_dlcb = llcp_dlc_find_dlcb_by_sap(local_sap, remote_sap);
 
@@ -1322,7 +1309,7 @@
     p_dlcb->flags |= LLCP_DATA_LINK_FLAG_NOTIFY_TX_DONE;
     status = LLCP_STATUS_SUCCESS;
   } else {
-    LLCP_TRACE_ERROR0("LLCP_SetTxCompleteNtf (): No data link");
+    LOG(ERROR) << StringPrintf("No data link");
     status = LLCP_STATUS_FAIL;
   }
 
@@ -1344,8 +1331,8 @@
   tLLCP_STATUS status;
   tLLCP_DLCB* p_dlcb;
 
-  LLCP_TRACE_API2("LLCP_SetLocalBusyStatus () Local SAP:0x%x, is_busy=%d",
-                  local_sap, is_busy);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("Local SAP:0x%x, is_busy=%d", local_sap, is_busy);
 
   p_dlcb = llcp_dlc_find_dlcb_by_sap(local_sap, remote_sap);
 
@@ -1364,7 +1351,7 @@
     }
     status = LLCP_STATUS_SUCCESS;
   } else {
-    LLCP_TRACE_ERROR0("LLCP_SetLocalBusyStatus (): No data link");
+    LOG(ERROR) << StringPrintf("No data link");
     status = LLCP_STATUS_FAIL;
   }
 
@@ -1382,10 +1369,10 @@
 **
 *******************************************************************************/
 uint16_t LLCP_GetRemoteWKS(void) {
-  LLCP_TRACE_API1("LLCP_GetRemoteWKS () WKS:0x%04x",
-                  (llcp_cb.lcb.link_state == LLCP_LINK_STATE_ACTIVATED)
-                      ? llcp_cb.lcb.peer_wks
-                      : 0);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "WKS:0x%04x", (llcp_cb.lcb.link_state == LLCP_LINK_STATE_ACTIVATED)
+                        ? llcp_cb.lcb.peer_wks
+                        : 0);
 
   if (llcp_cb.lcb.link_state == LLCP_LINK_STATE_ACTIVATED)
     return (llcp_cb.lcb.peer_wks);
@@ -1404,8 +1391,8 @@
 **
 *******************************************************************************/
 uint8_t LLCP_GetRemoteLSC(void) {
-  LLCP_TRACE_API1("LLCP_GetRemoteLSC () LSC:0x%x",
-                  (llcp_cb.lcb.link_state == LLCP_LINK_STATE_ACTIVATED)
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "LSC:0x%x", (llcp_cb.lcb.link_state == LLCP_LINK_STATE_ACTIVATED)
                       ? llcp_cb.lcb.peer_opt & (LLCP_LSC_1 | LLCP_LSC_2)
                       : 0);
 
@@ -1426,10 +1413,10 @@
 **
 *******************************************************************************/
 uint8_t LLCP_GetRemoteVersion(void) {
-  LLCP_TRACE_API1("LLCP_GetRemoteVersion () Version: 0x%x",
-                  (llcp_cb.lcb.link_state == LLCP_LINK_STATE_ACTIVATED)
-                      ? llcp_cb.lcb.peer_version
-                      : 0);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "Version: 0x%x", (llcp_cb.lcb.link_state == LLCP_LINK_STATE_ACTIVATED)
+                           ? llcp_cb.lcb.peer_version
+                           : 0);
 
   if (llcp_cb.lcb.link_state == LLCP_LINK_STATE_ACTIVATED)
     return (llcp_cb.lcb.peer_version);
@@ -1448,7 +1435,7 @@
 **
 *******************************************************************************/
 void LLCP_GetLinkMIU(uint16_t* p_local_link_miu, uint16_t* p_remote_link_miu) {
-  LLCP_TRACE_API0("LLCP_GetLinkMIU ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (llcp_cb.lcb.link_state == LLCP_LINK_STATE_ACTIVATED) {
     *p_local_link_miu = llcp_cb.lcb.local_link_miu;
@@ -1458,9 +1445,9 @@
     *p_remote_link_miu = 0;
   }
 
-  LLCP_TRACE_DEBUG2(
-      "LLCP_GetLinkMIU (): local_link_miu = %d, remote_link_miu = %d",
-      *p_local_link_miu, *p_remote_link_miu);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("local_link_miu = %d, remote_link_miu = %d",
+                      *p_local_link_miu, *p_remote_link_miu);
 }
 
 /*******************************************************************************
@@ -1479,22 +1466,22 @@
   tLLCP_STATUS status;
   uint8_t i;
 
-  LLCP_TRACE_API1("LLCP_DiscoverService () Service Name:%s", p_name);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("Service Name:%s", p_name);
 
   if (llcp_cb.lcb.link_state != LLCP_LINK_STATE_ACTIVATED) {
-    LLCP_TRACE_ERROR0("LLCP_DiscoverService (): Link is not activated");
+    LOG(ERROR) << StringPrintf("Link is not activated");
     return LLCP_STATUS_FAIL;
   }
 
   if (!p_cback) {
-    LLCP_TRACE_ERROR0("LLCP_DiscoverService (): Callback must be provided.");
+    LOG(ERROR) << StringPrintf("Callback must be provided.");
     return LLCP_STATUS_FAIL;
   }
 
   /* if peer version is less than V1.1 then SNL is not supported */
   if ((llcp_cb.lcb.agreed_major_version == 0x01) &&
       (llcp_cb.lcb.agreed_minor_version < 0x01)) {
-    LLCP_TRACE_ERROR0("LLCP_DiscoverService (): Peer doesn't support SNL");
+    LOG(ERROR) << StringPrintf("Peer doesn't support SNL");
     return LLCP_STATUS_FAIL;
   }
 
@@ -1515,7 +1502,7 @@
     }
   }
 
-  LLCP_TRACE_ERROR0("LLCP_DiscoverService (): Out of resource");
+  LOG(ERROR) << StringPrintf("Out of resource");
 
   return LLCP_STATUS_FAIL;
 }
diff --git a/src/nfc/llcp/llcp_dlc.c b/src/nfc/llcp/llcp_dlc.cc
similarity index 84%
rename from src/nfc/llcp/llcp_dlc.c
rename to src/nfc/llcp/llcp_dlc.cc
index c17c419..22fd548 100644
--- a/src/nfc/llcp/llcp_dlc.c
+++ b/src/nfc/llcp/llcp_dlc.cc
@@ -22,14 +22,18 @@
  *
  ******************************************************************************/
 
+#include <string>
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
 #include <log/log.h>
-#include <string.h>
 #include "bt_types.h"
 #include "gki.h"
 #include "llcp_defs.h"
 #include "llcp_int.h"
 #include "nfc_int.h"
-#include "nfc_target.h"
+
+using android::base::StringPrintf;
 
 static tLLCP_STATUS llcp_dlsm_idle(tLLCP_DLCB* p_dlcb, tLLCP_DLC_EVENT event,
                                    void* p_data);
@@ -42,13 +46,12 @@
 static tLLCP_STATUS llcp_dlsm_connected(tLLCP_DLCB* p_dlcb,
                                         tLLCP_DLC_EVENT event, void* p_data);
 static tLLCP_STATUS llcp_dlsm_w4_remote_dm(tLLCP_DLCB* p_dlcb,
-                                           tLLCP_DLC_EVENT event, void* p_data);
-extern unsigned char appl_dta_mode_flag;
+                                           tLLCP_DLC_EVENT event);
+static std::string llcp_dlsm_get_state_name(tLLCP_DLC_STATE state);
+static std::string llcp_dlsm_get_event_name(tLLCP_DLC_EVENT event);
 
-#if (BT_TRACE_VERBOSE == TRUE)
-static char* llcp_dlsm_get_state_name(tLLCP_DLC_STATE state);
-static char* llcp_dlsm_get_event_name(tLLCP_DLC_EVENT event);
-#endif
+extern bool nfc_debug_enabled;
+extern unsigned char appl_dta_mode_flag;
 
 /*******************************************************************************
 **
@@ -64,14 +67,10 @@
                                void* p_data) {
   tLLCP_STATUS status;
 
-#if (BT_TRACE_VERBOSE == TRUE)
-  LLCP_TRACE_EVENT3("DLC (0x%02X) - state: %s, evt: %s", p_dlcb->local_sap,
-                    llcp_dlsm_get_state_name(p_dlcb->state),
-                    llcp_dlsm_get_event_name(event));
-#else
-  LLCP_TRACE_EVENT3("DLC (0x%02X) - state: %d, evt: %d", p_dlcb->local_sap,
-                    p_dlcb->state, event);
-#endif
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("DLC (0x%02X) - state: %s, evt: %s", p_dlcb->local_sap,
+                      llcp_dlsm_get_state_name(p_dlcb->state).c_str(),
+                      llcp_dlsm_get_event_name(event).c_str());
 
   switch (p_dlcb->state) {
     case LLCP_DLC_STATE_IDLE:
@@ -91,7 +90,7 @@
       break;
 
     case LLCP_DLC_STATE_W4_REMOTE_DM:
-      status = llcp_dlsm_w4_remote_dm(p_dlcb, event, p_data);
+      status = llcp_dlsm_w4_remote_dm(p_dlcb, event);
       break;
 
     default:
@@ -145,8 +144,8 @@
       p_params = (tLLCP_CONNECTION_PARAMS*)p_data;
 
       if (p_params->miu > llcp_cb.lcb.peer_miu) {
-        LLCP_TRACE_WARNING0(
-            "llcp_dlsm_idle (): Peer sent data link MIU bigger than peer's "
+        LOG(WARNING) << StringPrintf(
+            "Peer sent data link MIU bigger than peer's "
             "link MIU");
         p_params->miu = llcp_cb.lcb.peer_miu;
       }
@@ -162,8 +161,8 @@
       p_dlcb->remote_miu = p_params->miu;
       p_dlcb->remote_rw = p_params->rw;
 
-      LLCP_TRACE_DEBUG2("llcp_dlsm_idle (): Remote MIU:%d, RW:%d",
-                        p_dlcb->remote_miu, p_dlcb->remote_rw);
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+          "Remote MIU:%d, RW:%d", p_dlcb->remote_miu, p_dlcb->remote_rw);
 
       /* wait for response from upper layer */
       p_dlcb->state = LLCP_DLC_STATE_W4_LOCAL_RESP;
@@ -178,7 +177,7 @@
       break;
 
     default:
-      LLCP_TRACE_ERROR0("llcp_dlsm_idle (): Unexpected event");
+      LOG(ERROR) << StringPrintf("Unexpected event");
       status = LLCP_STATUS_FAIL;
       break;
   }
@@ -213,8 +212,8 @@
 
       /* data link MIU must be up to link MIU */
       if (p_params->miu > llcp_cb.lcb.peer_miu) {
-        LLCP_TRACE_WARNING0(
-            "llcp_dlsm_w4_remote_resp (): Peer sent data link MIU bigger than "
+        LOG(WARNING) << StringPrintf(
+            "Peer sent data link MIU bigger than "
             "peer's link MIU");
         p_params->miu = llcp_cb.lcb.peer_miu;
       }
@@ -222,8 +221,8 @@
       p_dlcb->remote_miu = p_params->miu;
       p_dlcb->remote_rw = p_params->rw;
 
-      LLCP_TRACE_DEBUG2("llcp_dlsm_w4_remote_resp (): Remote MIU:%d, RW:%d",
-                        p_dlcb->remote_miu, p_dlcb->remote_rw);
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+          "Remote MIU:%d, RW:%d", p_dlcb->remote_miu, p_dlcb->remote_rw);
 
       p_dlcb->state = LLCP_DLC_STATE_CONNECTED;
       llcp_util_adjust_dl_rx_congestion();
@@ -272,7 +271,7 @@
       break;
 
     default:
-      LLCP_TRACE_ERROR0("llcp_dlsm_w4_remote_resp (): Unexpected event");
+      LOG(ERROR) << StringPrintf("Unexpected event");
       status = LLCP_STATUS_FAIL;
       break;
   }
@@ -360,7 +359,7 @@
       break;
 
     default:
-      LLCP_TRACE_ERROR0("llcp_dlsm_w4_local_resp (): Unexpected event");
+      LOG(ERROR) << StringPrintf("Unexpected event");
       status = LLCP_STATUS_FAIL;
       break;
   }
@@ -445,8 +444,8 @@
             (p_dlcb->i_xmit_q.count >=
              p_dlcb->remote_rw)) /*if enough data to send next round */
         {
-          LLCP_TRACE_DEBUG3(
-              "llcp_dlsm_connected (): Data link (SSAP:DSAP=0x%X:0x%X) "
+          DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+              "Data link (SSAP:DSAP=0x%X:0x%X) "
               "congested: xmit_q.count=%d",
               p_dlcb->local_sap, p_dlcb->remote_sap, p_dlcb->i_xmit_q.count);
 
@@ -456,8 +455,7 @@
           status = LLCP_STATUS_CONGESTED;
         }
       } else {
-        LLCP_TRACE_ERROR0(
-            "llcp_dlsm_connected (): Remote RW is zero: discard data");
+        LOG(ERROR) << StringPrintf("Remote RW is zero: discard data");
         /* buffer will be freed when returned to API function */
         status = LLCP_STATUS_FAIL;
       }
@@ -489,7 +487,7 @@
       break;
 
     default:
-      LLCP_TRACE_ERROR0("llcp_dlsm_connected (): Unexpected event");
+      LOG(ERROR) << StringPrintf("Unexpected event");
       status = LLCP_STATUS_FAIL;
       break;
   }
@@ -508,8 +506,7 @@
 **
 *******************************************************************************/
 static tLLCP_STATUS llcp_dlsm_w4_remote_dm(tLLCP_DLCB* p_dlcb,
-                                           tLLCP_DLC_EVENT event,
-                                           void* p_data) {
+                                           tLLCP_DLC_EVENT event) {
   tLLCP_STATUS status = LLCP_STATUS_SUCCESS;
   tLLCP_SAP_CBACK_DATA data;
 
@@ -551,7 +548,7 @@
       break;
 
     default:
-      LLCP_TRACE_ERROR0("llcp_dlsm_w4_remote_dm (): Unexpected event");
+      LOG(ERROR) << StringPrintf("Unexpected event");
       status = LLCP_STATUS_FAIL;
       break;
   }
@@ -599,8 +596,8 @@
 *******************************************************************************/
 void llcp_dlc_flush_q(tLLCP_DLCB* p_dlcb) {
   if (p_dlcb) {
-    LLCP_TRACE_DEBUG1("llcp_dlc_flush_q (): local SAP:0x%02X",
-                      p_dlcb->local_sap);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("local SAP:0x%02X", p_dlcb->local_sap);
 
     /* Release any held buffers */
     while (p_dlcb->i_xmit_q.p_first) {
@@ -611,7 +608,7 @@
     /* discard any received I PDU on data link  including in AGF */
     LLCP_FlushDataLinkRxData(p_dlcb->local_sap, p_dlcb->remote_sap);
   } else {
-    LLCP_TRACE_ERROR0("llcp_dlc_flush_q (): p_dlcb is NULL");
+    LOG(ERROR) << StringPrintf("p_dlcb is NULL");
   }
 }
 
@@ -632,21 +629,20 @@
 
   tLLCP_CONNECTION_PARAMS params;
 
-  LLCP_TRACE_DEBUG0("llcp_dlc_proc_connect_pdu ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_app_cb = llcp_util_get_app_cb(dsap);
 
   if ((p_app_cb == NULL) || (p_app_cb->p_app_cback == NULL) ||
       ((p_app_cb->link_type & LLCP_LINK_TYPE_DATA_LINK_CONNECTION) == 0)) {
-    LLCP_TRACE_ERROR1("llcp_dlc_proc_connect_pdu (): Unregistered SAP:0x%x",
-                      dsap);
+    LOG(ERROR) << StringPrintf("Unregistered SAP:0x%x", dsap);
     llcp_util_send_dm(ssap, dsap, LLCP_SAP_DM_REASON_NO_SERVICE);
     return;
   }
 
   /* parse CONNECT PDU and get connection parameters */
   if (llcp_util_parse_connect(p_data, length, &params) != LLCP_STATUS_SUCCESS) {
-    LLCP_TRACE_ERROR0("llcp_dlc_proc_connect_pdu (): Bad format CONNECT");
+    LOG(ERROR) << StringPrintf("Bad format CONNECT");
     /* fix to pass TC_CTO_TAR_BI_02_x (x=5) test case
      * As per the LLCP test specification v1.2.00 by receiving erroneous SNL PDU
      * i'e with improper length and service name "urn:nfc:sn:dta-co-echo-in",
@@ -654,7 +650,8 @@
 
     if (appl_dta_mode_flag == 1 &&
         p_data[1] == strlen((const char*)&p_data[2])) {
-      LLCP_TRACE_DEBUG1("%s: Strings are not equal", __func__);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("%s: Strings are not equal", __func__);
       llcp_util_send_dm(ssap, dsap, LLCP_SAP_DM_REASON_NO_SERVICE);
     } else {
       llcp_util_send_dm(ssap, dsap, LLCP_SAP_DM_REASON_NO_SERVICE);
@@ -680,15 +677,13 @@
     }
 
     if (dsap == LLCP_SAP_SDP) {
-      LLCP_TRACE_ERROR0(
-          "llcp_dlc_proc_connect_pdu (): SDP doesn't accept connection");
+      LOG(ERROR) << StringPrintf("SDP doesn't accept connection");
 
       llcp_util_send_dm(ssap, LLCP_SAP_SDP,
                         LLCP_SAP_DM_REASON_PERM_REJECT_THIS);
       return;
     } else if (dsap == 0) {
-      LLCP_TRACE_ERROR1("llcp_dlc_proc_connect_pdu (): Unregistered Service:%s",
-                        params.sn);
+      LOG(ERROR) << StringPrintf("Unregistered Service:%s", params.sn);
 
       llcp_util_send_dm(ssap, LLCP_SAP_SDP, LLCP_SAP_DM_REASON_NO_SERVICE);
       return;
@@ -698,8 +693,8 @@
 
       if ((p_app_cb == NULL) || (p_app_cb->p_app_cback == NULL) ||
           ((p_app_cb->link_type & LLCP_LINK_TYPE_DATA_LINK_CONNECTION) == 0)) {
-        LLCP_TRACE_ERROR1(
-            "llcp_dlc_proc_connect_pdu (): SAP(0x%x) doesn't support "
+        LOG(ERROR) << StringPrintf(
+            "SAP(0x%x) doesn't support "
             "connection-oriented",
             dsap);
         llcp_util_send_dm(ssap, dsap, LLCP_SAP_DM_REASON_NO_SERVICE);
@@ -711,8 +706,7 @@
   /* check if any data link */
   p_dlcb = llcp_dlc_find_dlcb_by_sap(dsap, ssap);
   if (p_dlcb) {
-    LLCP_TRACE_ERROR0(
-        "llcp_dlc_proc_connect_pdu (): Data link is aleady established");
+    LOG(ERROR) << StringPrintf("Data link is aleady established");
     llcp_util_send_dm(ssap, dsap, LLCP_SAP_DM_REASON_TEMP_REJECT_THIS);
   } else {
     /* allocate data link connection control block and notify upper layer
@@ -723,12 +717,11 @@
       status =
           llcp_dlsm_execute(p_dlcb, LLCP_DLC_EVENT_PEER_CONNECT_IND, &params);
       if (status != LLCP_STATUS_SUCCESS) {
-        LLCP_TRACE_ERROR0(
-            "llcp_dlc_proc_connect_pdu (): Error in state machine");
+        LOG(ERROR) << StringPrintf("Error in state machine");
         llcp_util_deallocate_data_link(p_dlcb);
       }
     } else {
-      LLCP_TRACE_ERROR0("llcp_dlc_proc_connect_pdu (): Out of resource");
+      LOG(ERROR) << StringPrintf("Out of resource");
       llcp_util_send_dm(ssap, dsap, LLCP_SAP_DM_REASON_TEMP_REJECT_ANY);
     }
   }
@@ -743,17 +736,17 @@
 ** Returns          void
 **
 *******************************************************************************/
-static void llcp_dlc_proc_disc_pdu(uint8_t dsap, uint8_t ssap, uint16_t length,
-                                   uint8_t* p_data) {
+static void llcp_dlc_proc_disc_pdu(uint8_t dsap, uint8_t ssap,
+                                   uint16_t length) {
   tLLCP_DLCB* p_dlcb;
 
-  LLCP_TRACE_DEBUG0("llcp_dlc_proc_disc_pdu ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_dlcb = llcp_dlc_find_dlcb_by_sap(dsap, ssap);
   if (p_dlcb) {
     if (length > 0) {
-      LLCP_TRACE_ERROR1(
-          "llcp_dlc_proc_disc_pdu (): Received extra data (%d bytes) in DISC "
+      LOG(ERROR) << StringPrintf(
+          "Received extra data (%d bytes) in DISC "
           "PDU",
           length);
 
@@ -765,9 +758,7 @@
       llcp_dlsm_execute(p_dlcb, LLCP_DLC_EVENT_PEER_DISCONNECT_IND, NULL);
     }
   } else {
-    LLCP_TRACE_ERROR2(
-        "llcp_dlc_proc_disc_pdu (): No data link for SAP (0x%x,0x%x)", dsap,
-        ssap);
+    LOG(ERROR) << StringPrintf("No data link for SAP (0x%x,0x%x)", dsap, ssap);
   }
 }
 
@@ -786,7 +777,7 @@
   tLLCP_CONNECTION_PARAMS params;
   tLLCP_STATUS status;
 
-  LLCP_TRACE_DEBUG0("llcp_dlc_proc_cc_pdu ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* find a DLCB waiting for CC on this local SAP */
   p_dlcb = llcp_dlc_find_dlcb_by_sap(dsap, LLCP_INVALID_SAP);
@@ -800,7 +791,7 @@
       status =
           llcp_dlsm_execute(p_dlcb, LLCP_DLC_EVENT_PEER_CONNECT_CFM, &params);
       if (status != LLCP_STATUS_SUCCESS) {
-        LLCP_TRACE_ERROR0("llcp_dlc_proc_cc_pdu (): Error in state machine");
+        LOG(ERROR) << StringPrintf("Error in state machine");
         llcp_util_deallocate_data_link(p_dlcb);
       }
     } else {
@@ -810,9 +801,7 @@
       llcp_dlsm_execute(p_dlcb, LLCP_DLC_EVENT_FRAME_ERROR, NULL);
     }
   } else {
-    LLCP_TRACE_ERROR2(
-        "llcp_dlc_proc_cc_pdu (): No data link for SAP (0x%x,0x%x)", dsap,
-        ssap);
+    LOG(ERROR) << StringPrintf("No data link for SAP (0x%x,0x%x)", dsap, ssap);
   }
 }
 
@@ -829,10 +818,10 @@
                                  uint8_t* p_data) {
   tLLCP_DLCB* p_dlcb;
 
-  LLCP_TRACE_DEBUG0("llcp_dlc_proc_dm_pdu ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (length != LLCP_PDU_DM_SIZE - LLCP_PDU_HEADER_SIZE) {
-    LLCP_TRACE_ERROR0("llcp_dlc_proc_dm_pdu (): Received invalid DM PDU");
+    LOG(ERROR) << StringPrintf("Received invalid DM PDU");
   } else {
     if (*p_data == LLCP_SAP_DM_REASON_RESP_DISC) {
       /* local device initiated disconnecting */
@@ -847,9 +836,8 @@
       llcp_dlsm_execute(p_dlcb, LLCP_DLC_EVENT_PEER_DISCONNECT_RESP,
                         p_data); /* passing reason */
     } else {
-      LLCP_TRACE_ERROR2(
-          "llcp_dlc_proc_dm_pdu (): No data link for SAP (0x%x,0x%x)", dsap,
-          ssap);
+      LOG(ERROR) << StringPrintf("No data link for SAP (0x%x,0x%x)", dsap,
+                                 ssap);
     }
   }
 }
@@ -871,7 +859,7 @@
   bool appended;
   NFC_HDR* p_last_buf;
 
-  LLCP_TRACE_DEBUG0("llcp_dlc_proc_i_pdu ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_dlcb = llcp_dlc_find_dlcb_by_sap(dsap, ssap);
 
@@ -885,7 +873,7 @@
 
     if (i_pdu_length < LLCP_PDU_HEADER_SIZE + LLCP_SEQUENCE_SIZE) {
       android_errorWriteLog(0x534e4554, "116722267");
-      LLCP_TRACE_ERROR1("Insufficient I PDU length %d", i_pdu_length);
+      LOG(ERROR) << StringPrintf("Insufficient I PDU length %d", i_pdu_length);
       if (p_msg) {
         GKI_freebuf(p_msg);
       }
@@ -895,8 +883,8 @@
     info_len = i_pdu_length - LLCP_PDU_HEADER_SIZE - LLCP_SEQUENCE_SIZE;
 
     if (info_len > p_dlcb->local_miu) {
-      LLCP_TRACE_ERROR2(
-          "llcp_dlc_proc_i_pdu (): exceeding local MIU (%d bytes): got %d "
+      LOG(ERROR) << StringPrintf(
+          "exceeding local MIU (%d bytes): got %d "
           "bytes SDU",
           p_dlcb->local_miu, info_len);
 
@@ -909,26 +897,24 @@
     send_seq = LLCP_GET_NS(*p);
     rcv_seq = LLCP_GET_NR(*p);
 
-#if (BT_TRACE_VERBOSE == TRUE)
-    LLCP_TRACE_DEBUG6(
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
         "LLCP RX I PDU - N(S,R):(%d,%d) V(S,SA,R,RA):(%d,%d,%d,%d)", send_seq,
         rcv_seq, p_dlcb->next_tx_seq, p_dlcb->rcvd_ack_seq, p_dlcb->next_rx_seq,
         p_dlcb->sent_ack_seq);
-#endif
 
     /* if send sequence number, N(S) is not expected one, V(R) */
     if (p_dlcb->next_rx_seq != send_seq) {
-      LLCP_TRACE_ERROR2("llcp_dlc_proc_i_pdu (): Bad N(S) got:%d, expected:%d",
-                        send_seq, p_dlcb->next_rx_seq);
+      LOG(ERROR) << StringPrintf("Bad N(S) got:%d, expected:%d", send_seq,
+                                 p_dlcb->next_rx_seq);
 
       error_flags |= LLCP_FRMR_S_ERROR_FLAG;
     } else {
       /* if peer device sends more than our receiving window size */
       if ((uint8_t)(send_seq - p_dlcb->sent_ack_seq) % LLCP_SEQ_MODULO >=
           p_dlcb->local_rw) {
-        LLCP_TRACE_ERROR3(
-            "llcp_dlc_proc_i_pdu (): Bad N(S):%d >= V(RA):%d + RW(L):%d",
-            send_seq, p_dlcb->sent_ack_seq, p_dlcb->local_rw);
+        LOG(ERROR) << StringPrintf("Bad N(S):%d >= V(RA):%d + RW(L):%d",
+                                   send_seq, p_dlcb->sent_ack_seq,
+                                   p_dlcb->local_rw);
 
         error_flags |= LLCP_FRMR_S_ERROR_FLAG;
       }
@@ -940,9 +926,9 @@
         (uint8_t)(p_dlcb->next_tx_seq - p_dlcb->rcvd_ack_seq) %
             LLCP_SEQ_MODULO) {
       error_flags |= LLCP_FRMR_R_ERROR_FLAG;
-      LLCP_TRACE_ERROR3(
-          "llcp_dlc_proc_i_pdu (): Bad N(R):%d valid range [V(SA):%d, V(S):%d]",
-          rcv_seq, p_dlcb->rcvd_ack_seq, p_dlcb->next_tx_seq);
+      LOG(ERROR) << StringPrintf("Bad N(R):%d valid range [V(SA):%d, V(S):%d]",
+                                 rcv_seq, p_dlcb->rcvd_ack_seq,
+                                 p_dlcb->next_tx_seq);
     }
 
     /* if any error is found */
@@ -1018,7 +1004,7 @@
             p_msg->len = LLCP_PDU_AGF_LEN_SIZE + info_len;
             p_msg->layer_specific = 0;
           } else {
-            LLCP_TRACE_ERROR0("llcp_dlc_proc_i_pdu (): out of buffer");
+            LOG(ERROR) << StringPrintf("out of buffer");
           }
         }
 
@@ -1042,8 +1028,8 @@
 
       if ((!p_dlcb->is_rx_congested) &&
           (p_dlcb->num_rx_i_pdu >= p_dlcb->rx_congest_threshold)) {
-        LLCP_TRACE_DEBUG2(
-            "llcp_dlc_proc_i_pdu (): congested num_rx_i_pdu=%d, "
+        DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+            "congested num_rx_i_pdu=%d, "
             "rx_congest_threshold=%d",
             p_dlcb->num_rx_i_pdu, p_dlcb->rx_congest_threshold);
 
@@ -1053,8 +1039,7 @@
       }
     }
   } else {
-    LLCP_TRACE_ERROR2(
-        "llcp_dlc_proc_i_pdu (): No data link for SAP (0x%x,0x%x)", dsap, ssap);
+    LOG(ERROR) << StringPrintf("No data link for SAP (0x%x,0x%x)", dsap, ssap);
     llcp_util_send_dm(ssap, dsap, LLCP_SAP_DM_REASON_NO_ACTIVE_CONNECTION);
   }
 
@@ -1080,7 +1065,7 @@
   tLLCP_SAP_CBACK_DATA cback_data;
   bool old_remote_busy;
 
-  LLCP_TRACE_DEBUG0("llcp_dlc_proc_rr_rnr_pdu ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_dlcb = llcp_dlc_find_dlcb_by_sap(dsap, ssap);
   if (p_dlcb != NULL) {
@@ -1102,8 +1087,8 @@
         (uint8_t)(p_dlcb->next_tx_seq - p_dlcb->rcvd_ack_seq) %
             LLCP_SEQ_MODULO) {
       error_flags |= LLCP_FRMR_R_ERROR_FLAG;
-      LLCP_TRACE_ERROR3(
-          "llcp_dlc_proc_rr_rnr_pdu (): Bad N(R):%d valid range [V(SA):%d, "
+      LOG(ERROR) << StringPrintf(
+          "Bad N(R):%d valid range [V(SA):%d, "
           "V(S):%d]",
           rcv_seq, p_dlcb->rcvd_ack_seq, p_dlcb->next_tx_seq);
     }
@@ -1114,18 +1099,17 @@
     } else {
       p_dlcb->rcvd_ack_seq = rcv_seq;
 
-#if (BT_TRACE_VERBOSE == TRUE)
-      LLCP_TRACE_DEBUG5("LLCP RX - N(S,R):(NA,%d) V(S,SA,R,RA):(%d,%d,%d,%d)",
-                        rcv_seq, p_dlcb->next_tx_seq, p_dlcb->rcvd_ack_seq,
-                        p_dlcb->next_rx_seq, p_dlcb->sent_ack_seq);
-#endif
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("LLCP RX - N(S,R):(NA,%d) V(S,SA,R,RA):(%d,%d,%d,%d)",
+                          rcv_seq, p_dlcb->next_tx_seq, p_dlcb->rcvd_ack_seq,
+                          p_dlcb->next_rx_seq, p_dlcb->sent_ack_seq);
       old_remote_busy = p_dlcb->remote_busy;
       if (ptype == LLCP_PDU_RNR_TYPE) {
         p_dlcb->remote_busy = true;
         /* if upper layer hasn't get congestion started notification */
         if ((!old_remote_busy) && (!p_dlcb->is_tx_congested)) {
-          LLCP_TRACE_WARNING3(
-              "llcp_dlc_proc_rr_rnr_pdu (): Data link (SSAP:DSAP=0x%X:0x%X) "
+          LOG(WARNING) << StringPrintf(
+              "Data link (SSAP:DSAP=0x%X:0x%X) "
               "congestion start: i_xmit_q.count=%d",
               p_dlcb->local_sap, p_dlcb->remote_sap, p_dlcb->i_xmit_q.count);
 
@@ -1142,8 +1126,8 @@
         /* if upper layer hasn't get congestion ended notification and data link
          * is not congested */
         if ((old_remote_busy) && (!p_dlcb->is_tx_congested)) {
-          LLCP_TRACE_WARNING3(
-              "llcp_dlc_proc_rr_rnr_pdu (): Data link (SSAP:DSAP=0x%X:0x%X) "
+          LOG(WARNING) << StringPrintf(
+              "Data link (SSAP:DSAP=0x%X:0x%X) "
               "congestion end: i_xmit_q.count=%d",
               p_dlcb->local_sap, p_dlcb->remote_sap, p_dlcb->i_xmit_q.count);
 
@@ -1169,9 +1153,7 @@
       }
     }
   } else {
-    LLCP_TRACE_ERROR2(
-        "llcp_dlc_proc_rr_rnr_pdu (): No data link for SAP (0x%x,0x%x)", dsap,
-        ssap);
+    LOG(ERROR) << StringPrintf("No data link for SAP (0x%x,0x%x)", dsap, ssap);
   }
 }
 
@@ -1188,13 +1170,11 @@
                           uint16_t length, uint8_t* p_data) {
   tLLCP_DLCB* p_dlcb;
 
-  LLCP_TRACE_DEBUG3("llcp_dlc_proc_rx_pdu (): DSAP:0x%x, PTYPE:0x%x, SSAP:0x%x",
-                    dsap, ptype, ssap);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("DSAP:0x%x, PTYPE:0x%x, SSAP:0x%x", dsap, ptype, ssap);
 
   if (dsap == LLCP_SAP_LM) {
-    LLCP_TRACE_ERROR2(
-        "llcp_dlc_proc_rx_pdu (): Invalid SAP:0x%x for PTYPE:0x%x", dsap,
-        ptype);
+    LOG(ERROR) << StringPrintf("Invalid SAP:0x%x for PTYPE:0x%x", dsap, ptype);
     return;
   }
 
@@ -1204,7 +1184,7 @@
       break;
 
     case LLCP_PDU_DISC_TYPE:
-      llcp_dlc_proc_disc_pdu(dsap, ssap, length, p_data);
+      llcp_dlc_proc_disc_pdu(dsap, ssap, length);
       break;
 
     case LLCP_PDU_CC_TYPE:
@@ -1228,8 +1208,7 @@
       break;
 
     default:
-      LLCP_TRACE_ERROR1("llcp_dlc_proc_rx_pdu (): Unexpected PDU type (0x%x)",
-                        ptype);
+      LOG(ERROR) << StringPrintf("Unexpected PDU type (0x%x)", ptype);
 
       p_dlcb = llcp_dlc_find_dlcb_by_sap(dsap, ssap);
       if (p_dlcb) {
@@ -1253,7 +1232,7 @@
   uint8_t idx;
   bool flush = true;
 
-  LLCP_TRACE_DEBUG0("llcp_dlc_check_to_send_rr_rnr ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /*
   ** DLC doesn't send RR PDU for each received I PDU because multiple I PDUs
@@ -1297,9 +1276,9 @@
       p_dlcb->remote_rw) {
     return true;
   } else {
-    LLCP_TRACE_DEBUG3(
-        "llcp_dlc_is_rw_open ():Flow Off, V(S):%d, V(SA):%d, RW(R):%d",
-        p_dlcb->next_tx_seq, p_dlcb->rcvd_ack_seq, p_dlcb->remote_rw);
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "Flow Off, V(S):%d, V(SA):%d, RW(R):%d", p_dlcb->next_tx_seq,
+        p_dlcb->rcvd_ack_seq, p_dlcb->remote_rw);
     return false;
   }
 }
@@ -1318,9 +1297,7 @@
   bool flush = true;
   tLLCP_SAP_CBACK_DATA data;
 
-#if (BT_TRACE_VERBOSE == TRUE)
   uint8_t send_seq = p_dlcb->next_tx_seq;
-#endif
 
   /* if there is data to send and remote device can receive it */
   if ((p_dlcb->i_xmit_q.count) && (!p_dlcb->remote_busy) &&
@@ -1335,16 +1312,13 @@
 
       p_dlcb->next_tx_seq = (p_dlcb->next_tx_seq + 1) % LLCP_SEQ_MODULO;
 
-#if (BT_TRACE_VERBOSE == TRUE)
-      LLCP_TRACE_DEBUG6("LLCP TX - N(S,R):(%d,%d) V(S,SA,R,RA):(%d,%d,%d,%d)",
-                        send_seq, p_dlcb->next_rx_seq, p_dlcb->next_tx_seq,
-                        p_dlcb->rcvd_ack_seq, p_dlcb->next_rx_seq,
-                        p_dlcb->sent_ack_seq);
-#endif
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+          "LLCP TX - N(S,R):(%d,%d) V(S,SA,R,RA):(%d,%d,%d,%d)", send_seq,
+          p_dlcb->next_rx_seq, p_dlcb->next_tx_seq, p_dlcb->rcvd_ack_seq,
+          p_dlcb->next_rx_seq, p_dlcb->sent_ack_seq);
     } else {
-      LLCP_TRACE_ERROR2(
-          "LLCP - llcp_dlc_get_next_pdu (): offset (%d) must be %d at least",
-          p_msg->offset, LLCP_MIN_OFFSET);
+      LOG(ERROR) << StringPrintf("offset (%d) must be %d at least",
+                                 p_msg->offset, LLCP_MIN_OFFSET);
       GKI_freebuf(p_msg);
       p_msg = NULL;
     }
@@ -1397,7 +1371,6 @@
   return 0;
 }
 
-#if (BT_TRACE_VERBOSE == TRUE)
 /*******************************************************************************
 **
 ** Function         llcp_dlsm_get_state_name
@@ -1407,20 +1380,20 @@
 ** Returns          pointer to the name
 **
 *******************************************************************************/
-static char* llcp_dlsm_get_state_name(tLLCP_DLC_STATE state) {
+static std::string llcp_dlsm_get_state_name(tLLCP_DLC_STATE state) {
   switch (state) {
     case LLCP_DLC_STATE_IDLE:
-      return ("IDLE");
+      return "IDLE";
     case LLCP_DLC_STATE_W4_REMOTE_RESP:
-      return ("W4_REMOTE_RESP");
+      return "W4_REMOTE_RESP";
     case LLCP_DLC_STATE_W4_LOCAL_RESP:
-      return ("W4_LOCAL_RESP");
+      return "W4_LOCAL_RESP";
     case LLCP_DLC_STATE_CONNECTED:
-      return ("CONNECTED");
+      return "CONNECTED";
     case LLCP_DLC_STATE_W4_REMOTE_DM:
-      return ("W4_REMOTE_DM");
+      return "W4_REMOTE_DM";
     default:
-      return ("???? UNKNOWN STATE");
+      return "???? UNKNOWN STATE";
   }
 }
 
@@ -1433,41 +1406,35 @@
 ** Returns          pointer to the name
 **
 *******************************************************************************/
-static char* llcp_dlsm_get_event_name(tLLCP_DLC_EVENT event) {
+static std::string llcp_dlsm_get_event_name(tLLCP_DLC_EVENT event) {
   switch (event) {
     case LLCP_DLC_EVENT_API_CONNECT_REQ:
-      return ("API_CONNECT_REQ");
+      return "API_CONNECT_REQ";
     case LLCP_DLC_EVENT_API_CONNECT_CFM:
-      return ("API_CONNECT_CFM");
+      return "API_CONNECT_CFM";
     case LLCP_DLC_EVENT_API_CONNECT_REJECT:
-      return ("API_CONNECT_REJECT");
+      return "API_CONNECT_REJECT";
     case LLCP_DLC_EVENT_PEER_CONNECT_IND:
-      return ("PEER_CONNECT_IND");
+      return "PEER_CONNECT_IND";
     case LLCP_DLC_EVENT_PEER_CONNECT_CFM:
-      return ("PEER_CONNECT_CFM");
-
+      return "PEER_CONNECT_CFM";
     case LLCP_DLC_EVENT_API_DATA_REQ:
-      return ("API_DATA_REQ");
+      return "API_DATA_REQ";
     case LLCP_DLC_EVENT_PEER_DATA_IND:
-      return ("PEER_DATA_IND");
-
+      return "PEER_DATA_IND";
     case LLCP_DLC_EVENT_API_DISCONNECT_REQ:
-      return ("API_DISCONNECT_REQ");
+      return "API_DISCONNECT_REQ";
     case LLCP_DLC_EVENT_PEER_DISCONNECT_IND:
-      return ("PEER_DISCONNECT_IND");
+      return "PEER_DISCONNECT_IND";
     case LLCP_DLC_EVENT_PEER_DISCONNECT_RESP:
-      return ("PEER_DISCONNECT_RESP");
-
+      return "PEER_DISCONNECT_RESP";
     case LLCP_DLC_EVENT_FRAME_ERROR:
-      return ("FRAME_ERROR");
+      return "FRAME_ERROR";
     case LLCP_DLC_EVENT_LINK_ERROR:
-      return ("LINK_ERROR");
-
+      return "LINK_ERROR";
     case LLCP_DLC_EVENT_TIMEOUT:
-      return ("TIMEOUT");
-
+      return "TIMEOUT";
     default:
-      return ("???? UNKNOWN EVENT");
+      return "???? UNKNOWN EVENT";
   }
 }
-#endif /* (BT_TRACE_VERBOSE == TRUE) */
diff --git a/src/nfc/llcp/llcp_link.c b/src/nfc/llcp/llcp_link.cc
similarity index 92%
rename from src/nfc/llcp/llcp_link.c
rename to src/nfc/llcp/llcp_link.cc
index 78d3b51..f144d45 100644
--- a/src/nfc/llcp/llcp_link.c
+++ b/src/nfc/llcp/llcp_link.cc
@@ -22,17 +22,21 @@
  *
  ******************************************************************************/
 
-#include <log/log.h>
 #include <string.h>
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+#include <log/log.h>
 #include "bt_types.h"
 #include "gki.h"
 #include "llcp_defs.h"
 #include "llcp_int.h"
 #include "nfa_dm_int.h"
 #include "nfc_int.h"
-#include "nfc_target.h"
 #include "trace_api.h"
 
+using android::base::StringPrintf;
+
 const uint16_t llcp_link_rwt
     [15] = /* RWT = (302us)*2**WT; 302us = 256*16/fc; fc = 13.56MHz */
     {
@@ -78,12 +82,11 @@
 extern tLLCP_TEST_PARAMS llcp_test_params;
 #endif
 
+extern bool nfc_debug_enabled;
 extern unsigned char appl_dta_mode_flag;
 
 /* debug functions type */
-#if (BT_TRACE_VERBOSE == TRUE)
-static char* llcp_pdu_type(uint8_t ptype);
-#endif
+static std::string llcp_pdu_type(uint8_t ptype);
 
 /*******************************************************************************
 **
@@ -97,8 +100,8 @@
 static void llcp_link_start_inactivity_timer(void) {
   if ((llcp_cb.lcb.inact_timer.in_use == false) &&
       (llcp_cb.lcb.inact_timeout > 0)) {
-    LLCP_TRACE_DEBUG1("Start inactivity_timer: %d ms",
-                      llcp_cb.lcb.inact_timeout);
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "Start inactivity_timer: %d ms", llcp_cb.lcb.inact_timeout);
 
     nfc_start_quick_timer(&llcp_cb.lcb.inact_timer, NFC_TTYPE_LLCP_LINK_INACT,
                           ((uint32_t)llcp_cb.lcb.inact_timeout) *
@@ -117,7 +120,7 @@
 *******************************************************************************/
 static void llcp_link_stop_inactivity_timer(void) {
   if (llcp_cb.lcb.inact_timer.in_use) {
-    LLCP_TRACE_DEBUG0("Stop inactivity_timer");
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("Stop inactivity_timer");
 
     nfc_stop_quick_timer(&llcp_cb.lcb.inact_timer);
   }
@@ -170,23 +173,23 @@
 **
 *******************************************************************************/
 tLLCP_STATUS llcp_link_activate(tLLCP_ACTIVATE_CONFIG* p_config) {
-  LLCP_TRACE_DEBUG0("llcp_link_activate ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* At this point, MAC link activation procedure has been successfully
    * completed */
 
   /* The Length Reduction values LRi and LRt MUST be 11b. (254bytes) */
   if (p_config->max_payload_size != LLCP_NCI_MAX_PAYL_SIZE) {
-    LLCP_TRACE_WARNING2(
-        "llcp_link_activate (): max payload size (%d) must be %d bytes",
-        p_config->max_payload_size, LLCP_NCI_MAX_PAYL_SIZE);
+    LOG(WARNING) << StringPrintf("max payload size (%d) must be %d bytes",
+                                 p_config->max_payload_size,
+                                 LLCP_NCI_MAX_PAYL_SIZE);
   }
 
   /* Processing the parametes that have been received with the MAC link
    * activation */
   if (llcp_link_parse_gen_bytes(p_config->gen_bytes_len,
                                 p_config->p_gen_bytes) == false) {
-    LLCP_TRACE_ERROR0("llcp_link_activate (): Failed to parse general bytes");
+    LOG(ERROR) << StringPrintf("Failed to parse general bytes");
     /* For LLCP DTA test, In case of bad magic bytes normal p2p communication is
      * expected,but in case of wrong magic bytes in ATR_REQ, LLC layer will be
      * disconnected but P2P connection is expected to be in connected state
@@ -225,8 +228,8 @@
   */
   if ((p_config->is_initiator) &&
       (llcp_link_rwt[p_config->waiting_time] > llcp_cb.lcb.peer_lto)) {
-    LLCP_TRACE_WARNING3(
-        "llcp_link_activate (): WT (%d, %dms) must be less than or equal to "
+    LOG(WARNING) << StringPrintf(
+        "WT (%d, %dms) must be less than or equal to "
         "LTO (%dms)",
         p_config->waiting_time, llcp_link_rwt[p_config->waiting_time],
         llcp_cb.lcb.peer_lto);
@@ -240,7 +243,7 @@
   }
   /* LLCP version number agreement */
   if (llcp_link_version_agreement() == false) {
-    LLCP_TRACE_ERROR0("llcp_link_activate (): Failed to agree version");
+    LOG(ERROR) << StringPrintf("Failed to agree version");
     (*llcp_cb.lcb.p_link_cback)(LLCP_LINK_ACTIVATION_FAILED_EVT,
                                 LLCP_LINK_VERSION_FAILED);
 
@@ -270,7 +273,7 @@
   ** symmetry procedure.
   */
   if (llcp_cb.lcb.is_initiator) {
-    LLCP_TRACE_DEBUG0("llcp_link_activate (): Connected as Initiator");
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("Connected as Initiator");
 
     llcp_cb.lcb.inact_timeout = llcp_cb.lcb.inact_timeout_init;
     llcp_cb.lcb.symm_state = LLCP_LINK_SYMM_LOCAL_XMIT_NEXT;
@@ -285,7 +288,7 @@
       llcp_link_send_SYMM();
     }
   } else {
-    LLCP_TRACE_DEBUG0("llcp_link_activate (): Connected as Target");
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("Connected as Target");
     llcp_cb.lcb.inact_timeout = llcp_cb.lcb.inact_timeout_target;
     llcp_cb.lcb.symm_state = LLCP_LINK_SYMM_REMOTE_XMIT_NEXT;
 
@@ -353,8 +356,8 @@
     if ((llcp_cb.lcb.symm_delay > 0) &&
         (llcp_cb.lcb.symm_state == LLCP_LINK_SYMM_LOCAL_XMIT_NEXT)) {
       /* upper layer doesn't have anything to send */
-      LLCP_TRACE_DEBUG0(
-          "llcp_link_process_link_timeout (): LEVT_TIMEOUT in state of "
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+          "LEVT_TIMEOUT in state of "
           "LLCP_LINK_SYMM_LOCAL_XMIT_NEXT");
       llcp_link_send_SYMM();
 
@@ -366,8 +369,8 @@
         llcp_link_start_inactivity_timer();
       }
     } else {
-      LLCP_TRACE_ERROR0(
-          "llcp_link_process_link_timeout (): LEVT_TIMEOUT in state of "
+      LOG(ERROR) << StringPrintf(
+          "LEVT_TIMEOUT in state of "
           "LLCP_LINK_SYMM_REMOTE_XMIT_NEXT");
       llcp_link_deactivate(LLCP_LINK_TIMEOUT);
     }
@@ -392,7 +395,7 @@
   tLLCP_DLCB* p_dlcb;
   tLLCP_APP_CB* p_app_cb;
 
-  LLCP_TRACE_DEBUG1("llcp_link_deactivate () reason = 0x%x", reason);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("reason = 0x%x", reason);
 
   /* Release any held buffers in signaling PDU queue */
   while (llcp_cb.lcb.sig_xmit_q.p_first)
@@ -449,8 +452,8 @@
     llcp_util_send_disc(LLCP_SAP_LM, LLCP_SAP_LM);
 
     /* Wait until DISC is sent to peer */
-    LLCP_TRACE_DEBUG0(
-        "llcp_link_deactivate (): Wait until DISC is sent to peer");
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Wait until DISC is sent to peer");
 
     llcp_cb.lcb.link_state = LLCP_LINK_STATE_DEACTIVATING;
 
@@ -528,8 +531,8 @@
   peer_minor_version = LLCP_GET_MINOR_VERSION(llcp_cb.lcb.peer_version);
 
   if (peer_major_version < LLCP_MIN_MAJOR_VERSION) {
-    LLCP_TRACE_ERROR1(
-        "llcp_link_version_agreement(): unsupported peer version number. Peer "
+    LOG(ERROR) << StringPrintf(
+        "unsupported peer version number. Peer "
         "Major Version:%d",
         peer_major_version);
     return false;
@@ -551,7 +554,7 @@
       llcp_cb.lcb.agreed_minor_version = LLCP_VERSION_MINOR;
     }
 
-    LLCP_TRACE_DEBUG6(
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
         "local version:%d.%d, remote version:%d.%d, agreed version:%d.%d",
         LLCP_VERSION_MAJOR, LLCP_VERSION_MINOR, peer_major_version,
         peer_minor_version, llcp_cb.lcb.agreed_major_version,
@@ -615,7 +618,7 @@
     /* overall buffer usage is high */
     llcp_cb.overall_tx_congested = true;
 
-    LLCP_TRACE_WARNING2(
+    LOG(WARNING) << StringPrintf(
         "overall tx congestion start: total_tx_ui_pdu=%d, total_tx_i_pdu=%d",
         llcp_cb.total_tx_ui_pdu, llcp_cb.total_tx_i_pdu);
 
@@ -635,7 +638,7 @@
         if (!p_app_cb->is_ui_tx_congested) {
           p_app_cb->is_ui_tx_congested = true;
 
-          LLCP_TRACE_WARNING2(
+          LOG(WARNING) << StringPrintf(
               "Logical link (SAP=0x%X) congestion start: count=%d", sap,
               p_app_cb->ui_xmit_q.count);
 
@@ -654,7 +657,7 @@
           (llcp_cb.dlcb[idx].is_tx_congested == false)) {
         llcp_cb.dlcb[idx].is_tx_congested = true;
 
-        LLCP_TRACE_WARNING3(
+        LOG(WARNING) << StringPrintf(
             "Data link (SSAP:DSAP=0x%X:0x%X) congestion start: count=%d",
             llcp_cb.dlcb[idx].local_sap, llcp_cb.dlcb[idx].remote_sap,
             llcp_cb.dlcb[idx].i_xmit_q.count);
@@ -690,7 +693,7 @@
       /* overall congestion is cleared */
       llcp_cb.overall_tx_congested = false;
 
-      LLCP_TRACE_WARNING2(
+      LOG(WARNING) << StringPrintf(
           "overall tx congestion end: total_tx_ui_pdu=%d, total_tx_i_pdu=%d",
           llcp_cb.total_tx_ui_pdu, llcp_cb.total_tx_i_pdu);
     } else {
@@ -726,8 +729,9 @@
           /* if it was congested but now tx queue count is below threshold */
           p_app_cb->is_ui_tx_congested = false;
 
-          LLCP_TRACE_DEBUG2("Logical link (SAP=0x%X) congestion end: count=%d",
-                            sap, p_app_cb->ui_xmit_q.count);
+          DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+              "Logical link (SAP=0x%X) congestion end: count=%d", sap,
+              p_app_cb->ui_xmit_q.count);
 
           data.congest.local_sap = sap;
           p_app_cb->p_app_cback(&data);
@@ -771,7 +775,7 @@
       llcp_cb.dlcb[idx].is_tx_congested = false;
 
       if (llcp_cb.dlcb[idx].remote_busy == false) {
-        LLCP_TRACE_DEBUG3(
+        DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
             "Data link (SSAP:DSAP=0x%X:0x%X) congestion end: count=%d",
             llcp_cb.dlcb[idx].local_sap, llcp_cb.dlcb[idx].remote_sap,
             llcp_cb.dlcb[idx].i_xmit_q.count);
@@ -876,8 +880,8 @@
   if (llcp_cb.lcb.symm_state == LLCP_LINK_SYMM_LOCAL_XMIT_NEXT ||
       (appl_dta_mode_flag &&
        llcp_cb.lcb.link_state == LLCP_LINK_STATE_DEACTIVATING)) {
-    LLCP_TRACE_DEBUG0(
-        "llcp_link_check_send_data () in state of "
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "in state of "
         "LLCP_LINK_SYMM_LOCAL_XMIT_NEXT");
 
     p_pdu = llcp_link_build_next_pdu(NULL);
@@ -974,9 +978,8 @@
   /* if application is registered and expecting UI PDU on logical data link */
   if ((p_app_cb) && (p_app_cb->p_app_cback) &&
       (p_app_cb->link_type & LLCP_LINK_TYPE_LOGICAL_DATA_LINK)) {
-    LLCP_TRACE_DEBUG2(
-        "llcp_link_proc_ui_pdu () Local SAP:0x%x, Remote SAP:0x%x", local_sap,
-        remote_sap);
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "Local SAP:0x%x, Remote SAP:0x%x", local_sap, remote_sap);
 
     /* if this is not from AGF PDU */
     if (p_msg) {
@@ -1039,7 +1042,7 @@
           p_msg->len = LLCP_PDU_AGF_LEN_SIZE + ui_pdu_length;
           p_msg->layer_specific = 0;
         } else {
-          LLCP_TRACE_ERROR0("llcp_link_proc_ui_pdu (): out of buffer");
+          LOG(ERROR) << StringPrintf("out of buffer");
         }
       }
 
@@ -1051,8 +1054,8 @@
     }
 
     if (p_app_cb->ui_rx_q.count > llcp_cb.ll_rx_congest_start) {
-      LLCP_TRACE_WARNING2(
-          "llcp_link_proc_ui_pdu (): SAP:0x%x, rx link is congested (%d), "
+      LOG(WARNING) << StringPrintf(
+          "SAP:0x%x, rx link is congested (%d), "
           "discard oldest UI PDU",
           local_sap, p_app_cb->ui_rx_q.count);
 
@@ -1068,8 +1071,7 @@
       (*p_app_cb->p_app_cback)(&data);
     }
   } else {
-    LLCP_TRACE_ERROR1("llcp_link_proc_ui_pdu (): Unregistered SAP:0x%x",
-                      local_sap);
+    LOG(ERROR) << StringPrintf("Unregistered SAP:0x%x", local_sap);
 
     if (p_msg) {
       GKI_freebuf(p_msg);
@@ -1106,8 +1108,7 @@
     if (agf_length > LLCP_PDU_AGF_LEN_SIZE) {
       BE_STREAM_TO_UINT16(pdu_length, p);
       if (pdu_length < LLCP_PDU_HEADER_SIZE) {
-        LLCP_TRACE_ERROR0(
-            "llcp_link_proc_agf_pdu (): Received invalid encapsulated PDU");
+        LOG(ERROR) << StringPrintf("Received invalid encapsulated PDU");
         break;
       }
       agf_length -= LLCP_PDU_AGF_LEN_SIZE;
@@ -1126,7 +1127,7 @@
 
   if (agf_length != 0 || pdu_num < 2) {
     android_errorWriteLog(0x534e4554, "116791157");
-    LLCP_TRACE_ERROR0("llcp_link_proc_agf_pdu (): Received invalid AGF PDU");
+    LOG(ERROR) << StringPrintf("Received invalid AGF PDU");
     GKI_freebuf(p_agf);
     return;
   }
@@ -1151,12 +1152,10 @@
     ptype = (uint8_t)(LLCP_GET_PTYPE(pdu_hdr));
     ssap = LLCP_GET_SSAP(pdu_hdr);
 
-#if (BT_TRACE_VERBOSE == TRUE)
-    LLCP_TRACE_DEBUG4(
-        "llcp_link_proc_agf_pdu (): Rx DSAP:0x%x, PTYPE:%s (0x%x), SSAP:0x%x "
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "Rx DSAP:0x%x, PTYPE:%s (0x%x), SSAP:0x%x "
         "in AGF",
-        dsap, llcp_pdu_type(ptype), ptype, ssap);
-#endif
+        dsap, llcp_pdu_type(ptype).c_str(), ptype, ssap);
 
     if ((ptype == LLCP_PDU_DISC_TYPE) && (dsap == LLCP_SAP_LM) &&
         (ssap == LLCP_SAP_LM)) {
@@ -1164,14 +1163,11 @@
       llcp_link_deactivate(LLCP_LINK_REMOTE_INITIATED);
       return;
     } else if (ptype == LLCP_PDU_AGF_TYPE) {
-      LLCP_TRACE_ERROR0(
-          "llcp_link_proc_agf_pdu (): AGF PDU shall not be in AGF");
+      LOG(ERROR) << StringPrintf("AGF PDU shall not be in AGF");
     } else if (ptype == LLCP_PDU_SYMM_TYPE) {
-      LLCP_TRACE_ERROR0(
-          "llcp_link_proc_agf_pdu (): SYMM PDU exchange shall not be in AGF");
+      LOG(ERROR) << StringPrintf("SYMM PDU exchange shall not be in AGF");
     } else if (ptype == LLCP_PDU_PAX_TYPE) {
-      LLCP_TRACE_ERROR0(
-          "llcp_link_proc_agf_pdu (): PAX PDU exchange shall not be used");
+      LOG(ERROR) << StringPrintf("PAX PDU exchange shall not be used");
     } else if (ptype == LLCP_PDU_SNL_TYPE) {
       llcp_sdp_proc_snl((uint16_t)(pdu_length - LLCP_PDU_HEADER_SIZE), p_info);
     } else if ((ptype == LLCP_PDU_UI_TYPE) &&
@@ -1209,8 +1205,7 @@
 
   switch (ptype) {
     case LLCP_PDU_PAX_TYPE:
-      LLCP_TRACE_ERROR0(
-          "llcp_link_proc_rx_pdu (); PAX PDU exchange shall not be used");
+      LOG(ERROR) << StringPrintf("; PAX PDU exchange shall not be used");
       break;
 
     case LLCP_PDU_DISC_TYPE:
@@ -1289,7 +1284,8 @@
         llcp_link_process_link_timeout();
     } else {
       if (p_msg->len < LLCP_PDU_HEADER_SIZE) {
-        LLCP_TRACE_ERROR1("Received too small PDU: got %d bytes", p_msg->len);
+        LOG(ERROR) << StringPrintf("Received too small PDU: got %d bytes",
+                                   p_msg->len);
         frame_error = true;
       } else {
         p = (uint8_t*)(p_msg + 1) + p_msg->offset;
@@ -1306,7 +1302,8 @@
             info_length =
                 p_msg->len - LLCP_PDU_HEADER_SIZE - LLCP_SEQUENCE_SIZE;
           } else {
-            LLCP_TRACE_ERROR0("Received I/RR/RNR PDU without sequence");
+            LOG(ERROR) << StringPrintf(
+                "Received I/RR/RNR PDU without sequence");
             frame_error = true;
           }
         } else {
@@ -1315,22 +1312,21 @@
 
         /* check if length of information is bigger than link MIU */
         if ((!frame_error) && (info_length > llcp_cb.lcb.local_link_miu)) {
-          LLCP_TRACE_ERROR2("Received exceeding MIU (%d): got %d bytes SDU",
-                            llcp_cb.lcb.local_link_miu, info_length);
+          LOG(ERROR) << StringPrintf(
+              "Received exceeding MIU (%d): got %d bytes SDU",
+              llcp_cb.lcb.local_link_miu, info_length);
 
           frame_error = true;
         } else {
-#if (BT_TRACE_VERBOSE == TRUE)
-          LLCP_TRACE_DEBUG4(
-              "llcp_link_proc_rx_data (): DSAP:0x%x, PTYPE:%s (0x%x), "
+          DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+              "DSAP:0x%x, PTYPE:%s (0x%x), "
               "SSAP:0x%x",
-              dsap, llcp_pdu_type(ptype), ptype, ssap);
-#endif
+              dsap, llcp_pdu_type(ptype).c_str(), ptype, ssap);
 
           if (ptype == LLCP_PDU_SYMM_TYPE) {
             if (info_length > 0) {
-              LLCP_TRACE_ERROR1("Received extra data (%d bytes) in SYMM PDU",
-                                info_length);
+              LOG(ERROR) << StringPrintf(
+                  "Received extra data (%d bytes) in SYMM PDU", info_length);
               frame_error = true;
             }
           } else {
@@ -1349,7 +1345,7 @@
       llcp_link_check_send_data();
     }
   } else {
-    LLCP_TRACE_ERROR0("Received PDU in state of SYMM_MUST_XMIT_NEXT");
+    LOG(ERROR) << StringPrintf("Received PDU in state of SYMM_MUST_XMIT_NEXT");
   }
 
   if (free_buffer) GKI_freebuf(p_msg);
@@ -1485,7 +1481,7 @@
   uint8_t *p, ptype;
   uint16_t next_pdu_length, pdu_hdr;
 
-  LLCP_TRACE_DEBUG0("llcp_link_build_next_pdu ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* add any pending SNL PDU into sig_xmit_q for transmitting */
   llcp_sdp_check_send_snl();
@@ -1536,7 +1532,7 @@
           GKI_freebuf(p_msg);
           p_msg = p_agf;
         } else {
-          LLCP_TRACE_ERROR0("llcp_link_build_next_pdu (): Out of buffer");
+          LOG(ERROR) << StringPrintf("Out of buffer");
           return p_msg;
         }
       } else {
@@ -1583,9 +1579,7 @@
 **
 *******************************************************************************/
 static void llcp_link_send_to_lower(NFC_HDR* p_pdu) {
-#if (BT_TRACE_PROTOCOL == TRUE)
   DispLLCP(p_pdu, false);
-#endif
 
   llcp_cb.lcb.symm_state = LLCP_LINK_SYMM_REMOTE_XMIT_NEXT;
 
@@ -1601,12 +1595,10 @@
 ** Returns          void
 **
 *******************************************************************************/
-void llcp_link_connection_cback(uint8_t conn_id, tNFC_CONN_EVT event,
-                                tNFC_CONN* p_data) {
+void llcp_link_connection_cback(__attribute__((unused)) uint8_t conn_id,
+                                tNFC_CONN_EVT event, tNFC_CONN* p_data) {
   if (event == NFC_DATA_CEVT) {
-#if (BT_TRACE_PROTOCOL == TRUE)
     DispLLCP((NFC_HDR*)p_data->data.p_data, true);
-#endif
     if (llcp_cb.lcb.link_state == LLCP_LINK_STATE_DEACTIVATED) {
       /* respoding SYMM while LLCP is deactivated but RF link is not deactivated
        * yet */
@@ -1656,7 +1648,6 @@
   */
 }
 
-#if (BT_TRACE_VERBOSE == TRUE)
 /*******************************************************************************
 **
 ** Function         llcp_pdu_type
@@ -1666,7 +1657,7 @@
 ** Returns          string of PDU type
 **
 *******************************************************************************/
-static char* llcp_pdu_type(uint8_t ptype) {
+static std::string llcp_pdu_type(uint8_t ptype) {
   switch (ptype) {
     case LLCP_PDU_SYMM_TYPE:
       return "SYMM";
@@ -1694,10 +1685,7 @@
       return "RR";
     case LLCP_PDU_RNR_TYPE:
       return "RNR";
-
     default:
       return "RESERVED";
   }
 }
-
-#endif
diff --git a/src/nfc/llcp/llcp_main.c b/src/nfc/llcp/llcp_main.cc
similarity index 83%
rename from src/nfc/llcp/llcp_main.c
rename to src/nfc/llcp/llcp_main.cc
index 577777c..1185e01 100644
--- a/src/nfc/llcp/llcp_main.c
+++ b/src/nfc/llcp/llcp_main.cc
@@ -23,13 +23,19 @@
  ******************************************************************************/
 
 #include <string.h>
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "bt_types.h"
 #include "gki.h"
 #include "llcp_api.h"
-#include "llcp_defs.h"
 #include "llcp_int.h"
 #include "nfc_int.h"
-#include "nfc_target.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 tLLCP_CB llcp_cb;
 
@@ -48,9 +54,7 @@
 
   memset(&llcp_cb, 0, sizeof(tLLCP_CB));
 
-  llcp_cb.trace_level = LLCP_INITIAL_TRACE_LEVEL;
-
-  LLCP_TRACE_DEBUG0("LLCP - llcp_init ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   llcp_cb.lcb.local_link_miu =
       (LLCP_MIU <= LLCP_MAX_MIU ? LLCP_MIU : LLCP_MAX_MIU);
@@ -82,7 +86,7 @@
   llcp_cb.max_num_ll_rx_buff =
       (uint8_t)((llcp_cb.num_rx_buff * LLCP_LL_RX_BUFF_LIMIT) / 100);
 
-  LLCP_TRACE_DEBUG4(
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
       "num_rx_buff = %d, rx_congest_start = %d, rx_congest_end = %d, "
       "max_num_ll_rx_buff = %d",
       llcp_cb.num_rx_buff, llcp_cb.overall_rx_congest_start,
@@ -95,8 +99,9 @@
   llcp_cb.max_num_ll_tx_buff =
       (uint8_t)((llcp_cb.max_num_tx_buff * LLCP_LL_TX_BUFF_LIMIT) / 100);
 
-  LLCP_TRACE_DEBUG2("max_num_tx_buff = %d, max_num_ll_tx_buff = %d",
-                    llcp_cb.max_num_tx_buff, llcp_cb.max_num_ll_tx_buff);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("max_num_tx_buff = %d, max_num_ll_tx_buff = %d",
+                      llcp_cb.max_num_tx_buff, llcp_cb.max_num_ll_tx_buff);
 
   llcp_cb.ll_tx_uncongest_ntf_start_sap = LLCP_SAP_SDP + 1;
 
@@ -117,7 +122,7 @@
   uint8_t sap;
   tLLCP_APP_CB* p_app_cb;
 
-  LLCP_TRACE_DEBUG0("LLCP - llcp_cleanup ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   for (sap = LLCP_SAP_SDP; sap < LLCP_NUM_SAPS; sap++) {
     p_app_cb = llcp_util_get_app_cb(sap);
@@ -143,7 +148,8 @@
 void llcp_process_timeout(TIMER_LIST_ENT* p_tle) {
   uint8_t reason;
 
-  LLCP_TRACE_DEBUG1("llcp_process_timeout: event=%d", p_tle->event);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("llcp_process_timeout: event=%d", p_tle->event);
 
   switch (p_tle->event) {
     case NFC_TTYPE_LLCP_LINK_MANAGER:
@@ -170,19 +176,3 @@
       break;
   }
 }
-
-/*******************************************************************************
-**
-** Function         LLCP_SetTraceLevel
-**
-** Description      This function sets the trace level for LLCP.  If called with
-**                  a value of 0xFF, it simply returns the current trace level.
-**
-** Returns          The new or current trace level
-**
-*******************************************************************************/
-uint8_t LLCP_SetTraceLevel(uint8_t new_level) {
-  if (new_level != 0xFF) llcp_cb.trace_level = new_level;
-
-  return (llcp_cb.trace_level);
-}
diff --git a/src/nfc/llcp/llcp_sdp.c b/src/nfc/llcp/llcp_sdp.cc
similarity index 89%
rename from src/nfc/llcp/llcp_sdp.c
rename to src/nfc/llcp/llcp_sdp.cc
index 2c40263..affa4ff 100644
--- a/src/nfc/llcp/llcp_sdp.c
+++ b/src/nfc/llcp/llcp_sdp.cc
@@ -23,13 +23,19 @@
  ******************************************************************************/
 
 #include <string.h>
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "bt_types.h"
 #include "gki.h"
 #include "llcp_api.h"
-#include "llcp_defs.h"
 #include "llcp_int.h"
 #include "nfa_dm_int.h"
-#include "nfc_target.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 /*******************************************************************************
 **
@@ -41,7 +47,7 @@
 ** Returns          void
 **
 *******************************************************************************/
-void llcp_sdp_proc_data(tLLCP_SAP_CBACK_DATA* p_data) {
+void llcp_sdp_proc_data(__attribute__((unused)) tLLCP_SAP_CBACK_DATA* p_data) {
   /*
   ** Do nothing
   ** llcp_sdp_proc_SNL () is called by link layer
@@ -63,7 +69,7 @@
   uint8_t* p;
 
   if (llcp_cb.sdp_cb.p_snl) {
-    LLCP_TRACE_DEBUG0("SDP: llcp_sdp_check_send_snl ()");
+    DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
     llcp_cb.sdp_cb.p_snl->len += LLCP_PDU_HEADER_SIZE;
     llcp_cb.sdp_cb.p_snl->offset -= LLCP_PDU_HEADER_SIZE;
@@ -124,8 +130,8 @@
   uint16_t name_len;
   uint16_t available_bytes;
 
-  LLCP_TRACE_DEBUG2("llcp_sdp_send_sdreq (): tid=0x%x, ServiceName=%s", tid,
-                    p_name);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("tid=0x%x, ServiceName=%s", tid, p_name);
 
   /* if there is no pending SNL */
   if (!llcp_cb.sdp_cb.p_snl) {
@@ -219,7 +225,8 @@
   tLLCP_STATUS status;
   uint16_t available_bytes;
 
-  LLCP_TRACE_DEBUG2("llcp_sdp_send_sdres (): tid=0x%x, SAP=0x%x", tid, sap);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("tid=0x%x, SAP=0x%x", tid, sap);
 
   /* if there is no pending SNL */
   if (!llcp_cb.sdp_cb.p_snl) {
@@ -318,7 +325,8 @@
 static void llcp_sdp_return_sap(uint8_t tid, uint8_t sap) {
   uint8_t i;
 
-  LLCP_TRACE_DEBUG2("llcp_sdp_return_sap (): tid=0x%x, SAP=0x%x", tid, sap);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("tid=0x%x, SAP=0x%x", tid, sap);
 
   for (i = 0; i < LLCP_MAX_SDP_TRANSAC; i++) {
     if ((llcp_cb.sdp_cb.transac[i].p_cback) &&
@@ -344,7 +352,7 @@
 void llcp_sdp_proc_deactivation(void) {
   uint8_t i;
 
-  LLCP_TRACE_DEBUG0("llcp_sdp_proc_deactivation ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   for (i = 0; i < LLCP_MAX_SDP_TRANSAC; i++) {
     if (llcp_cb.sdp_cb.transac[i].p_cback) {
@@ -377,13 +385,13 @@
 tLLCP_STATUS llcp_sdp_proc_snl(uint16_t sdu_length, uint8_t* p) {
   uint8_t type, length, tid, sap, *p_value;
 
-  LLCP_TRACE_DEBUG0("llcp_sdp_proc_snl ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if ((llcp_cb.lcb.agreed_major_version < LLCP_MIN_SNL_MAJOR_VERSION) ||
       ((llcp_cb.lcb.agreed_major_version == LLCP_MIN_SNL_MAJOR_VERSION) &&
        (llcp_cb.lcb.agreed_minor_version < LLCP_MIN_SNL_MINOR_VERSION))) {
-    LLCP_TRACE_DEBUG0(
-        "llcp_sdp_proc_snl(): version number less than 1.1, SNL not "
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "version number less than 1.1, SNL not "
         "supported.");
     return LLCP_STATUS_FAIL;
   }
@@ -406,10 +414,11 @@
            * SNL PDU i'e with improper service name "urn:nfc:sn:dta-co-echo-in",
            * the IUT should not send any PDU except SYMM PDU */
           if (appl_dta_mode_flag == 1 && sap == 0x00) {
-            LLCP_TRACE_DEBUG2("%s: In dta mode sap == 0x00 p_value = %s",
-                              __func__, p_value);
+            DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+                "%s: In dta mode sap == 0x00 p_value = %s", __func__, p_value);
             if ((length - 1) == strlen((const char*)p_value)) {
-              LLCP_TRACE_DEBUG1("%s: Strings are not equal", __func__);
+              DLOG_IF(INFO, nfc_debug_enabled)
+                  << StringPrintf("%s: Strings are not equal", __func__);
               llcp_sdp_send_sdres(tid, sap);
             }
           } else {
@@ -419,14 +428,14 @@
           /*For P2P in LLCP mode TC_CTO_TAR_BI_03_x(x=3) fix*/
           if (appl_dta_mode_flag == 1 &&
               ((nfa_dm_cb.eDtaMode & 0x0F) == NFA_DTA_LLCP_MODE)) {
-            LLCP_TRACE_ERROR1("%s: Calling llcp_sdp_send_sdres", __func__);
+            LOG(ERROR) << StringPrintf("%s: Calling llcp_sdp_send_sdres",
+                                       __func__);
             tid = 0x01;
             sap = 0x00;
             llcp_sdp_send_sdres(tid, sap);
           }
-          LLCP_TRACE_ERROR1(
-              "llcp_sdp_proc_snl (): bad length (%d) in LLCP_SDREQ_TYPE",
-              length);
+          LOG(ERROR) << StringPrintf("bad length (%d) in LLCP_SDREQ_TYPE",
+                                     length);
         }
         break;
 
@@ -439,15 +448,13 @@
           BE_STREAM_TO_UINT8(sap, p_value);
           llcp_sdp_return_sap(tid, sap);
         } else {
-          LLCP_TRACE_ERROR1(
-              "llcp_sdp_proc_snl (): bad length (%d) in LLCP_SDRES_TYPE",
-              length);
+          LOG(ERROR) << StringPrintf("bad length (%d) in LLCP_SDRES_TYPE",
+                                     length);
         }
         break;
 
       default:
-        LLCP_TRACE_WARNING1(
-            "llcp_sdp_proc_snl (): Unknown type (0x%x) is ignored", type);
+        LOG(WARNING) << StringPrintf("Unknown type (0x%x) is ignored", type);
         break;
     }
 
@@ -461,7 +468,7 @@
   }
 
   if (sdu_length) {
-    LLCP_TRACE_ERROR0("llcp_sdp_proc_snl (): Bad format of SNL");
+    LOG(ERROR) << StringPrintf("Bad format of SNL");
     return LLCP_STATUS_FAIL;
   } else {
     return LLCP_STATUS_SUCCESS;
diff --git a/src/nfc/llcp/llcp_util.c b/src/nfc/llcp/llcp_util.cc
similarity index 86%
rename from src/nfc/llcp/llcp_util.c
rename to src/nfc/llcp/llcp_util.cc
index 3b984e3..7c5d851 100644
--- a/src/nfc/llcp/llcp_util.c
+++ b/src/nfc/llcp/llcp_util.cc
@@ -22,16 +22,21 @@
  *
  ******************************************************************************/
 
-#include <log/log.h>
 #include <string.h>
 
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+#include <log/log.h>
+
 #include "bt_types.h"
 #include "gki.h"
 #include "llcp_defs.h"
 #include "llcp_int.h"
 #include "nfc_int.h"
-#include "nfc_target.h"
-#include "trace_api.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 /*******************************************************************************
 **
@@ -50,7 +55,7 @@
     BE_STREAM_TO_UINT8(param_len, p);
     if (length < param_len + 2) {
       android_errorWriteLog(0x534e4554, "114238578");
-      LLCP_TRACE_ERROR0("llcp_util_parse_link_params (): Bad TLV's");
+      LOG(ERROR) << StringPrintf("Bad TLV's");
       return false;
     }
     length -= param_len + 2;
@@ -59,60 +64,63 @@
       case LLCP_VERSION_TYPE:
         if (param_len != LLCP_VERSION_LEN) {
           android_errorWriteLog(0x534e4554, "114238578");
-          LLCP_TRACE_ERROR0("llcp_util_parse_link_params (): Bad TLV's");
+          LOG(ERROR) << StringPrintf("Bad TLV's");
           return false;
         }
         BE_STREAM_TO_UINT8(llcp_cb.lcb.peer_version, p);
-        LLCP_TRACE_DEBUG1("Peer Version - 0x%02X", llcp_cb.lcb.peer_version);
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("Peer Version - 0x%02X", llcp_cb.lcb.peer_version);
         break;
 
       case LLCP_MIUX_TYPE:
         if (param_len != LLCP_MIUX_LEN) {
           android_errorWriteLog(0x534e4554, "114238578");
-          LLCP_TRACE_ERROR0("llcp_util_parse_link_params (): Bad TLV's");
+          LOG(ERROR) << StringPrintf("Bad TLV's");
           return false;
         }
         BE_STREAM_TO_UINT16(llcp_cb.lcb.peer_miu, p);
         llcp_cb.lcb.peer_miu &= LLCP_MIUX_MASK;
         llcp_cb.lcb.peer_miu += LLCP_DEFAULT_MIU;
-        LLCP_TRACE_DEBUG1("Peer MIU - %d bytes", llcp_cb.lcb.peer_miu);
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("Peer MIU - %d bytes", llcp_cb.lcb.peer_miu);
         break;
 
       case LLCP_WKS_TYPE:
         if (param_len != LLCP_WKS_LEN) {
           android_errorWriteLog(0x534e4554, "114238578");
-          LLCP_TRACE_ERROR0("llcp_util_parse_link_params (): Bad TLV's");
+          LOG(ERROR) << StringPrintf("Bad TLV's");
           return false;
         }
         BE_STREAM_TO_UINT16(llcp_cb.lcb.peer_wks, p);
-        LLCP_TRACE_DEBUG1("Peer WKS - 0x%04X", llcp_cb.lcb.peer_wks);
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("Peer WKS - 0x%04X", llcp_cb.lcb.peer_wks);
         break;
 
       case LLCP_LTO_TYPE:
         if (param_len != LLCP_LTO_LEN) {
           android_errorWriteLog(0x534e4554, "114238578");
-          LLCP_TRACE_ERROR0("llcp_util_parse_link_params (): Bad TLV's");
+          LOG(ERROR) << StringPrintf("Bad TLV's");
           return false;
         }
         BE_STREAM_TO_UINT8(llcp_cb.lcb.peer_lto, p);
         llcp_cb.lcb.peer_lto *= LLCP_LTO_UNIT; /* 10ms unit */
-        LLCP_TRACE_DEBUG1("Peer LTO - %d ms", llcp_cb.lcb.peer_lto);
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("Peer LTO - %d ms", llcp_cb.lcb.peer_lto);
         break;
 
       case LLCP_OPT_TYPE:
         if (param_len != LLCP_OPT_LEN) {
           android_errorWriteLog(0x534e4554, "114238578");
-          LLCP_TRACE_ERROR0("llcp_util_parse_link_params (): Bad TLV's");
+          LOG(ERROR) << StringPrintf("Bad TLV's");
           return false;
         }
         BE_STREAM_TO_UINT8(llcp_cb.lcb.peer_opt, p);
-        LLCP_TRACE_DEBUG1("Peer OPT - 0x%02X", llcp_cb.lcb.peer_opt);
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("Peer OPT - 0x%02X", llcp_cb.lcb.peer_opt);
         break;
 
       default:
-        LLCP_TRACE_ERROR1(
-            "llcp_util_parse_link_params (): Unexpected type 0x%x", param_type);
-        BE_STREAM_TO_UINT8(param_len, p);
+        LOG(ERROR) << StringPrintf("Unexpected type 0x%x", param_type);
         p += param_len;
         break;
     }
@@ -155,7 +163,7 @@
     llcp_cb.ll_tx_congest_end = 0;
   }
 
-  LLCP_TRACE_DEBUG4(
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
       "num_logical_data_link=%d, ll_tx_congest_start=%d, ll_tx_congest_end=%d, "
       "ll_rx_congest_start=%d",
       llcp_cb.num_logical_data_link, llcp_cb.ll_tx_congest_start,
@@ -193,9 +201,9 @@
           llcp_cb.dlcb[idx].rx_congest_threshold = LLCP_DL_MIN_RX_CONGEST;
         }
 
-        LLCP_TRACE_DEBUG3("DLC[%d], local_rw=%d, rx_congest_threshold=%d", idx,
-                          llcp_cb.dlcb[idx].local_rw,
-                          llcp_cb.dlcb[idx].rx_congest_threshold);
+        DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+            "DLC[%d], local_rw=%d, rx_congest_threshold=%d", idx,
+            llcp_cb.dlcb[idx].local_rw, llcp_cb.dlcb[idx].rx_congest_threshold);
       }
     }
   }
@@ -217,8 +225,8 @@
     /* check if rx congestion clear */
     if (llcp_cb.total_rx_ui_pdu + llcp_cb.total_rx_i_pdu <=
         llcp_cb.overall_rx_congest_end) {
-      LLCP_TRACE_DEBUG3(
-          "llcp_util_check_rx_congested_status (): rx link is uncongested, "
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+          "rx link is uncongested, "
           "%d+%d <= %d",
           llcp_cb.total_rx_ui_pdu, llcp_cb.total_rx_i_pdu,
           llcp_cb.overall_rx_congest_end);
@@ -237,8 +245,8 @@
     /* check if rx link is congested */
     if (llcp_cb.total_rx_ui_pdu + llcp_cb.total_rx_i_pdu >=
         llcp_cb.overall_rx_congest_start) {
-      LLCP_TRACE_WARNING3(
-          "llcp_util_check_rx_congested_status (): rx link is congested, %d+%d "
+      LOG(WARNING) << StringPrintf(
+          "rx link is congested, %d+%d "
           ">= %d",
           llcp_cb.total_rx_ui_pdu, llcp_cb.total_rx_i_pdu,
           llcp_cb.overall_rx_congest_start);
@@ -290,8 +298,9 @@
     /* or notify uncongestion later */
     p_app_cb->is_ui_tx_congested = true;
 
-    LLCP_TRACE_WARNING2("Logical link (SAP=0x%X) congested: ui_xmit_q.count=%d",
-                        ssap, p_app_cb->ui_xmit_q.count);
+    LOG(WARNING) << StringPrintf(
+        "Logical link (SAP=0x%X) congested: ui_xmit_q.count=%d", ssap,
+        p_app_cb->ui_xmit_q.count);
 
     status = LLCP_STATUS_CONGESTED;
   }
@@ -339,9 +348,8 @@
   tLLCP_DLCB* p_dlcb = NULL;
   int idx;
 
-  LLCP_TRACE_DEBUG2(
-      "llcp_util_allocate_data_link (): reg_sap = 0x%x, remote_sap = 0x%x",
-      reg_sap, remote_sap);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("reg_sap = 0x%x, remote_sap = 0x%x", reg_sap, remote_sap);
 
   for (idx = 0; idx < LLCP_MAX_DATA_LINK; idx++) {
     if (llcp_cb.dlcb[idx].state == LLCP_DLC_STATE_IDLE) {
@@ -353,7 +361,7 @@
   }
 
   if (!p_dlcb) {
-    LLCP_TRACE_ERROR0("llcp_util_allocate_data_link (): Out of DLCB");
+    LOG(ERROR) << StringPrintf("Out of DLCB");
   } else {
     p_dlcb->p_app_cb = llcp_util_get_app_cb(reg_sap);
     p_dlcb->local_sap = reg_sap;
@@ -363,8 +371,8 @@
     /* this is for inactivity timer and congestion control. */
     llcp_cb.num_data_link_connection++;
 
-    LLCP_TRACE_DEBUG3(
-        "llcp_util_allocate_data_link (): local_sap = 0x%x, remote_sap = 0x%x, "
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "local_sap = 0x%x, remote_sap = 0x%x, "
         "num_data_link_connection = %d",
         p_dlcb->local_sap, p_dlcb->remote_sap,
         llcp_cb.num_data_link_connection);
@@ -383,8 +391,8 @@
 ******************************************************************************/
 void llcp_util_deallocate_data_link(tLLCP_DLCB* p_dlcb) {
   if (p_dlcb) {
-    LLCP_TRACE_DEBUG1("llcp_util_deallocate_data_link (): local_sap = 0x%x",
-                      p_dlcb->local_sap);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("local_sap = 0x%x", p_dlcb->local_sap);
 
     if (p_dlcb->state != LLCP_DLC_STATE_IDLE) {
       nfc_stop_quick_timer(&p_dlcb->timer);
@@ -396,9 +404,8 @@
         llcp_cb.num_data_link_connection--;
       }
 
-      LLCP_TRACE_DEBUG1(
-          "llcp_util_deallocate_data_link (): num_data_link_connection = %d",
-          llcp_cb.num_data_link_connection);
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+          "num_data_link_connection = %d", llcp_cb.num_data_link_connection);
     }
   }
 }
@@ -492,7 +499,7 @@
     /* check remaining lengh */
     if (length < param_len + 2) {
       android_errorWriteLog(0x534e4554, "111660010");
-      LLCP_TRACE_ERROR0("llcp_util_parse_connect (): Bad TLV's");
+      LOG(ERROR) << StringPrintf("Bad TLV's");
       return LLCP_STATUS_FAIL;
     }
     length -= param_len + 2;
@@ -501,28 +508,28 @@
       case LLCP_MIUX_TYPE:
         if (param_len != LLCP_MIUX_LEN) {
           android_errorWriteLog(0x534e4554, "111660010");
-          LLCP_TRACE_ERROR0("llcp_util_parse_connect (): Bad TLV's");
+          LOG(ERROR) << StringPrintf("Bad TLV's");
           return LLCP_STATUS_FAIL;
         }
         BE_STREAM_TO_UINT16(p_params->miu, p);
         p_params->miu &= LLCP_MIUX_MASK;
         p_params->miu += LLCP_DEFAULT_MIU;
 
-        LLCP_TRACE_DEBUG1("llcp_util_parse_connect (): LLCP_MIUX_TYPE:%d",
-                          p_params->miu);
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("LLCP_MIUX_TYPE:%d", p_params->miu);
         break;
 
       case LLCP_RW_TYPE:
         if (param_len != LLCP_RW_LEN) {
           android_errorWriteLog(0x534e4554, "111660010");
-          LLCP_TRACE_ERROR0("llcp_util_parse_connect (): Bad TLV's");
+          LOG(ERROR) << StringPrintf("Bad TLV's");
           return LLCP_STATUS_FAIL;
         }
         BE_STREAM_TO_UINT8(p_params->rw, p);
         p_params->rw &= 0x0F;
 
-        LLCP_TRACE_DEBUG1("llcp_util_parse_connect (): LLCP_RW_TYPE:%d",
-                          p_params->rw);
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("LLCP_RW_TYPE:%d", p_params->rw);
         break;
 
       case LLCP_SN_TYPE:
@@ -538,14 +545,12 @@
         }
         p += param_len;
 
-        LLCP_TRACE_DEBUG1("llcp_util_parse_connect (): LLCP_SN_TYPE:<%s>",
-                          p_params->sn);
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("LLCP_SN_TYPE:<%s>", p_params->sn);
         break;
 
       default:
-        LLCP_TRACE_ERROR1("llcp_util_parse_connect (): Unexpected type 0x%x",
-                          param_type);
-        BE_STREAM_TO_UINT8(param_len, p);
+        LOG(ERROR) << StringPrintf("Unexpected type 0x%x", param_type);
         p += param_len;
         break;
     }
@@ -630,7 +635,7 @@
     BE_STREAM_TO_UINT8(param_len, p);
     if (length < param_len + 2) {
       android_errorWriteLog(0x534e4554, "114237888");
-      LLCP_TRACE_ERROR0("llcp_util_parse_cc (): Bad TLV's");
+      LOG(ERROR) << StringPrintf("Bad TLV's");
       return LLCP_STATUS_FAIL;
     }
     length -= param_len + 2;
@@ -639,32 +644,32 @@
       case LLCP_MIUX_TYPE:
         if (param_len != LLCP_MIUX_LEN) {
           android_errorWriteLog(0x534e4554, "114237888");
-          LLCP_TRACE_ERROR0("llcp_util_parse_cc (): Bad TLV's");
+          LOG(ERROR) << StringPrintf("Bad TLV's");
           return LLCP_STATUS_FAIL;
         }
         BE_STREAM_TO_UINT16((*p_miu), p);
         (*p_miu) &= LLCP_MIUX_MASK;
         (*p_miu) += LLCP_DEFAULT_MIU;
 
-        LLCP_TRACE_DEBUG1("llcp_util_parse_cc (): LLCP_MIUX_TYPE:%d", *p_miu);
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("LLCP_MIUX_TYPE:%d", *p_miu);
         break;
 
       case LLCP_RW_TYPE:
         if (param_len != LLCP_RW_LEN) {
           android_errorWriteLog(0x534e4554, "114237888");
-          LLCP_TRACE_ERROR0("llcp_util_parse_cc (): Bad TLV's");
+          LOG(ERROR) << StringPrintf("Bad TLV's");
           return LLCP_STATUS_FAIL;
         }
         BE_STREAM_TO_UINT8((*p_rw), p);
         (*p_rw) &= 0x0F;
 
-        LLCP_TRACE_DEBUG1("llcp_util_parse_cc (): LLCP_RW_TYPE:%d", *p_rw);
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("LLCP_RW_TYPE:%d", *p_rw);
         break;
 
       default:
-        LLCP_TRACE_ERROR1("llcp_util_parse_cc (): Unexpected type 0x%x",
-                          param_type);
-        BE_STREAM_TO_UINT8(param_len, p);
+        LOG(ERROR) << StringPrintf("Unexpected type 0x%x", param_type);
         p += param_len;
         break;
     }
@@ -769,7 +774,7 @@
 
     return LLCP_STATUS_SUCCESS;
   } else {
-    LLCP_TRACE_ERROR0("llcp_util_send_frmr (): Out of resource");
+    LOG(ERROR) << StringPrintf("Out of resource");
     return LLCP_STATUS_FAIL;
   }
 }
@@ -808,8 +813,8 @@
 
   if ((p_dlcb->local_busy) || (p_dlcb->is_rx_congested) ||
       (llcp_cb.overall_rx_congested)) {
-    LLCP_TRACE_DEBUG3(
-        "llcp_util_send_rr_rnr (): "
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        ""
         "local_busy=%d,is_rx_congested=%d,overall_rx_congested=%d",
         p_dlcb->local_busy, p_dlcb->is_rx_congested,
         llcp_cb.overall_rx_congested);
@@ -842,16 +847,14 @@
 
     UINT8_TO_BE_STREAM(p, rcv_seq);
 
-#if (BT_TRACE_VERBOSE == TRUE)
-    LLCP_TRACE_DEBUG5("LLCP TX - N(S,R):(NA,%d) V(S,SA,R,RA):(%d,%d,%d,%d)",
-                      p_dlcb->next_rx_seq, p_dlcb->next_tx_seq,
-                      p_dlcb->rcvd_ack_seq, p_dlcb->next_rx_seq,
-                      p_dlcb->sent_ack_seq);
-#endif
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "LLCP TX - N(S,R):(NA,%d) V(S,SA,R,RA):(%d,%d,%d,%d)",
+        p_dlcb->next_rx_seq, p_dlcb->next_tx_seq, p_dlcb->rcvd_ack_seq,
+        p_dlcb->next_rx_seq, p_dlcb->sent_ack_seq);
     GKI_enqueue(&llcp_cb.lcb.sig_xmit_q, p_msg);
     llcp_link_check_send_data();
   } else {
-    LLCP_TRACE_ERROR0("llcp_util_send_rr_rnr (): Out of resource");
+    LOG(ERROR) << StringPrintf("Out of resource");
   }
 }
 
diff --git a/src/nfc/nci/nci_hmsgs.c b/src/nfc/nci/nci_hmsgs.cc
similarity index 93%
rename from src/nfc/nci/nci_hmsgs.c
rename to src/nfc/nci/nci_hmsgs.cc
index aa4aa94..245b06a 100644
--- a/src/nfc/nci/nci_hmsgs.c
+++ b/src/nfc/nci/nci_hmsgs.cc
@@ -260,20 +260,22 @@
   NFC_HDR* p;
   uint8_t* pp;
 
-  p = NCI_GET_CMD_BUF(NCI_PARAM_SIZE_DISCOVER_NFCEE);
+  p = NCI_GET_CMD_BUF(NCI_PARAM_SIZE_DISCOVER_NFCEE(NFC_GetNCIVersion()));
   if (p == NULL) return (NCI_STATUS_FAILED);
 
   p->event = BT_EVT_TO_NFC_NCI;
-  p->len = NCI_MSG_HDR_SIZE + NCI_PARAM_SIZE_DISCOVER_NFCEE;
+  p->len =
+      NCI_MSG_HDR_SIZE + NCI_PARAM_SIZE_DISCOVER_NFCEE(NFC_GetNCIVersion());
   p->offset = NCI_MSG_OFFSET_SIZE;
   p->layer_specific = 0;
   pp = (uint8_t*)(p + 1) + p->offset;
 
   NCI_MSG_BLD_HDR0(pp, NCI_MT_CMD, NCI_GID_EE_MANAGE);
   NCI_MSG_BLD_HDR1(pp, NCI_MSG_NFCEE_DISCOVER);
-  UINT8_TO_STREAM(pp, NCI_PARAM_SIZE_DISCOVER_NFCEE);
-  UINT8_TO_STREAM(pp, discover_action);
-
+  UINT8_TO_STREAM(pp, NCI_PARAM_SIZE_DISCOVER_NFCEE(NFC_GetNCIVersion()));
+  if (NFC_GetNCIVersion() != NCI_VERSION_2_0) {
+    UINT8_TO_STREAM(pp, discover_action);
+  }
   nfc_ncif_send_cmd(p);
   return (NCI_STATUS_OK);
 }
@@ -579,6 +581,37 @@
   return (NCI_STATUS_OK);
 }
 
+/*******************************************************************************
+**
+** Function         nci_snd_nfcee_power_link_control
+**
+** Description      compose and send NFCEE Management NFCEE Power and Link
+**                  Control command to command queue
+**
+** Returns          status
+**
+*******************************************************************************/
+uint8_t nci_snd_nfcee_power_link_control(uint8_t nfcee_id, uint8_t pl_config) {
+  uint8_t* pp;
+  NFC_HDR* p = NCI_GET_CMD_BUF(NCI_CORE_PARAM_SIZE_NFCEE_PL_CTRL);
+  if (p == NULL) return NCI_STATUS_FAILED;
+
+  p->event = NFC_EVT_TO_NFC_NCI;
+  p->len = NCI_MSG_HDR_SIZE + NCI_CORE_PARAM_SIZE_NFCEE_PL_CTRL;
+  p->offset = NCI_MSG_OFFSET_SIZE;
+  p->layer_specific = 0;
+  pp = (uint8_t*)(p + 1) + p->offset;
+
+  NCI_MSG_BLD_HDR0(pp, NCI_MT_CMD, NCI_GID_EE_MANAGE);
+  NCI_MSG_BLD_HDR1(pp, NCI_MSG_NFCEE_POWER_LINK_CTRL);
+  UINT8_TO_STREAM(pp, NCI_CORE_PARAM_SIZE_NFCEE_PL_CTRL);
+  UINT8_TO_STREAM(pp, nfcee_id);
+  UINT8_TO_STREAM(pp, pl_config);
+
+  nfc_ncif_send_cmd(p);
+  return NCI_STATUS_OK;
+}
+
 #if (NFC_NFCEE_INCLUDED == TRUE)
 #if (NFC_RW_ONLY == FALSE)
 /*******************************************************************************
diff --git a/src/nfc/nci/nci_hrcv.c b/src/nfc/nci/nci_hrcv.cc
similarity index 77%
rename from src/nfc/nci/nci_hrcv.c
rename to src/nfc/nci/nci_hrcv.cc
index 07757de..e42d04c 100644
--- a/src/nfc/nci/nci_hrcv.c
+++ b/src/nfc/nci/nci_hrcv.cc
@@ -23,15 +23,23 @@
  *
  ******************************************************************************/
 #include <string.h>
-#include "bt_types.h"
-#include "gki.h"
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "nfc_target.h"
 
+#include "bt_types.h"
+#include "gki.h"
 #include "nci_defs.h"
 #include "nci_hmsgs.h"
 #include "nfc_api.h"
 #include "nfc_int.h"
 
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
+
 /*******************************************************************************
 **
 ** Function         nci_proc_core_rsp
@@ -51,7 +59,8 @@
   p = (uint8_t*)(p_msg + 1) + p_msg->offset;
   pp = p + 1;
   NCI_MSG_PRS_HDR1(pp, op_code);
-  NFC_TRACE_DEBUG1("nci_proc_core_rsp opcode:0x%x", op_code);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nci_proc_core_rsp opcode:0x%x", op_code);
   len = *pp++;
 
   /* process the message based on the opcode and message type */
@@ -84,7 +93,7 @@
       nfc_ncif_event_status(NFC_SET_POWER_SUB_STATE_REVT, *pp);
       break;
     default:
-      NFC_TRACE_ERROR1("unknown opcode:0x%x", op_code);
+      LOG(ERROR) << StringPrintf("unknown opcode:0x%x", op_code);
       break;
   }
 
@@ -109,7 +118,8 @@
   p = (uint8_t*)(p_msg + 1) + p_msg->offset;
   pp = p + 1;
   NCI_MSG_PRS_HDR1(pp, op_code);
-  NFC_TRACE_DEBUG1("nci_proc_core_ntf opcode:0x%x", op_code);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nci_proc_core_ntf opcode:0x%x", op_code);
   len = *pp++;
 
   /* process the message based on the opcode and message type */
@@ -135,7 +145,7 @@
       break;
 
     default:
-      NFC_TRACE_ERROR1("unknown opcode:0x%x", op_code);
+      LOG(ERROR) << StringPrintf("unknown opcode:0x%x", op_code);
       break;
   }
 }
@@ -206,7 +216,7 @@
       nfc_ncif_proc_isodep_nak_presence_check_status(*pp, false);
       break;
     default:
-      NFC_TRACE_ERROR1("unknown opcode:0x%x", op_code);
+      LOG(ERROR) << StringPrintf("unknown opcode:0x%x", op_code);
       break;
   }
 }
@@ -280,7 +290,7 @@
       nfc_ncif_proc_isodep_nak_presence_check_status(*pp, true);
       break;
     default:
-      NFC_TRACE_ERROR1("unknown opcode:0x%x", op_code);
+      LOG(ERROR) << StringPrintf("unknown opcode:0x%x", op_code);
       break;
   }
 }
@@ -301,10 +311,7 @@
   uint8_t* p;
   uint8_t *pp, len, op_code;
   tNFC_RESPONSE_CBACK* p_cback = nfc_cb.p_resp_cback;
-  tNFC_NFCEE_DISCOVER_REVT nfcee_discover;
-  tNFC_NFCEE_INFO_REVT nfcee_info;
-  tNFC_NFCEE_MODE_SET_REVT mode_set;
-  tNFC_RESPONSE* p_evt = (tNFC_RESPONSE*)&nfcee_info;
+  tNFC_RESPONSE nfc_response;
   tNFC_RESPONSE_EVT event = NFC_NFCEE_INFO_REVT;
   uint8_t* p_old = nfc_cb.last_cmd;
 
@@ -312,36 +319,47 @@
   p = (uint8_t*)(p_msg + 1) + p_msg->offset;
   pp = p + 1;
   NCI_MSG_PRS_HDR1(pp, op_code);
-  NFC_TRACE_DEBUG1("nci_proc_ee_management_rsp opcode:0x%x", op_code);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nci_proc_ee_management_rsp opcode:0x%x", op_code);
   len = *pp++;
 
   switch (op_code) {
     case NCI_MSG_NFCEE_DISCOVER:
-      p_evt = (tNFC_RESPONSE*)&nfcee_discover;
-      nfcee_discover.status = *pp++;
-      nfcee_discover.num_nfcee = *pp++;
+      nfc_response.nfcee_discover.status = *pp++;
+      nfc_response.nfcee_discover.num_nfcee = *pp++;
 
-      if (nfcee_discover.status != NFC_STATUS_OK) nfcee_discover.num_nfcee = 0;
+      if (nfc_response.nfcee_discover.status != NFC_STATUS_OK)
+        nfc_response.nfcee_discover.num_nfcee = 0;
 
       event = NFC_NFCEE_DISCOVER_REVT;
       break;
 
     case NCI_MSG_NFCEE_MODE_SET:
-      p_evt = (tNFC_RESPONSE*)&mode_set;
-      mode_set.status = *pp;
-      mode_set.nfcee_id = 0;
-      event = NFC_NFCEE_MODE_SET_REVT;
-      mode_set.nfcee_id = *p_old++;
-      mode_set.mode = *p_old++;
+      nfc_response.mode_set.status = *pp;
+      nfc_response.mode_set.nfcee_id = *p_old++;
+      nfc_response.mode_set.mode = *p_old++;
+      if (nfc_cb.nci_version != NCI_VERSION_2_0 || *pp != NCI_STATUS_OK) {
+        nfc_cb.flags &= ~NFC_FL_WAIT_MODE_SET_NTF;
+        event = NFC_NFCEE_MODE_SET_REVT;
+      } else {
+        /* else response reports OK status on notification */
+        return;
+      }
       break;
 
+    case NCI_MSG_NFCEE_POWER_LINK_CTRL:
+      nfc_response.pl_control.status = *pp;
+      nfc_response.pl_control.nfcee_id = *p_old++;
+      nfc_response.pl_control.pl_control = *p_old++;
+      event = NFC_NFCEE_PL_CONTROL_REVT;
+      break;
     default:
       p_cback = NULL;
-      NFC_TRACE_ERROR1("unknown opcode:0x%x", op_code);
+      LOG(ERROR) << StringPrintf("unknown opcode:0x%x", op_code);
       break;
   }
 
-  if (p_cback) (*p_cback)(event, p_evt);
+  if (p_cback) (*p_cback)(event, &nfc_response);
 }
 
 /*******************************************************************************
@@ -357,63 +375,75 @@
   uint8_t* p;
   uint8_t *pp, len, op_code;
   tNFC_RESPONSE_CBACK* p_cback = nfc_cb.p_resp_cback;
-  tNFC_NFCEE_INFO_REVT nfcee_info;
-  tNFC_RESPONSE* p_evt = (tNFC_RESPONSE*)&nfcee_info;
+  tNFC_RESPONSE nfc_response;
   tNFC_RESPONSE_EVT event = NFC_NFCEE_INFO_REVT;
+  uint8_t* p_old = nfc_cb.last_cmd;
   uint8_t xx;
   uint8_t yy;
-  uint8_t ee_status;
   tNFC_NFCEE_TLV* p_tlv;
-
   /* find the start of the NCI message and parse the NCI header */
   p = (uint8_t*)(p_msg + 1) + p_msg->offset;
   pp = p + 1;
   NCI_MSG_PRS_HDR1(pp, op_code);
-  NFC_TRACE_DEBUG1("nci_proc_ee_management_ntf opcode:0x%x", op_code);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nci_proc_ee_management_ntf opcode:0x%x", op_code);
   len = *pp++;
 
   if (op_code == NCI_MSG_NFCEE_DISCOVER) {
-    nfcee_info.nfcee_id = *pp++;
-    ee_status = *pp++;
+    nfc_response.nfcee_info.nfcee_id = *pp++;
 
-    nfcee_info.ee_status = ee_status;
+    nfc_response.nfcee_info.ee_status = *pp++;
     yy = *pp;
-    nfcee_info.num_interface = *pp++;
+    nfc_response.nfcee_info.num_interface = *pp++;
     p = pp;
 
-    if (nfcee_info.num_interface > NFC_MAX_EE_INTERFACE)
-      nfcee_info.num_interface = NFC_MAX_EE_INTERFACE;
+    if (nfc_response.nfcee_info.num_interface > NFC_MAX_EE_INTERFACE)
+      nfc_response.nfcee_info.num_interface = NFC_MAX_EE_INTERFACE;
 
-    for (xx = 0; xx < nfcee_info.num_interface; xx++) {
-      nfcee_info.ee_interface[xx] = *pp++;
+    for (xx = 0; xx < nfc_response.nfcee_info.num_interface; xx++) {
+      nfc_response.nfcee_info.ee_interface[xx] = *pp++;
     }
 
     pp = p + yy;
-    nfcee_info.num_tlvs = *pp++;
-    NFC_TRACE_DEBUG4("nfcee_id: 0x%x num_interface:0x%x/0x%x, num_tlvs:0x%x",
-                     nfcee_info.nfcee_id, nfcee_info.num_interface, yy,
-                     nfcee_info.num_tlvs);
+    nfc_response.nfcee_info.num_tlvs = *pp++;
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "nfcee_id: 0x%x num_interface:0x%x/0x%x, num_tlvs:0x%x",
+        nfc_response.nfcee_info.nfcee_id, nfc_response.nfcee_info.num_interface,
+        yy, nfc_response.nfcee_info.num_tlvs);
 
-    if (nfcee_info.num_tlvs > NFC_MAX_EE_TLVS)
-      nfcee_info.num_tlvs = NFC_MAX_EE_TLVS;
+    if (nfc_response.nfcee_info.num_tlvs > NFC_MAX_EE_TLVS)
+      nfc_response.nfcee_info.num_tlvs = NFC_MAX_EE_TLVS;
 
-    p_tlv = &nfcee_info.ee_tlv[0];
+    p_tlv = &nfc_response.nfcee_info.ee_tlv[0];
 
-    for (xx = 0; xx < nfcee_info.num_tlvs; xx++, p_tlv++) {
+    for (xx = 0; xx < nfc_response.nfcee_info.num_tlvs; xx++, p_tlv++) {
       p_tlv->tag = *pp++;
       p_tlv->len = yy = *pp++;
-      NFC_TRACE_DEBUG2("tag:0x%x, len:0x%x", p_tlv->tag, p_tlv->len);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("tag:0x%x, len:0x%x", p_tlv->tag, p_tlv->len);
       if (p_tlv->len > NFC_MAX_EE_INFO) p_tlv->len = NFC_MAX_EE_INFO;
       p = pp;
       STREAM_TO_ARRAY(p_tlv->info, pp, p_tlv->len);
       pp = p += yy;
     }
+  } else if (op_code == NCI_MSG_NFCEE_MODE_SET) {
+    nfc_response.mode_set.status = *pp;
+    nfc_response.mode_set.nfcee_id = *p_old++;
+    nfc_response.mode_set.mode = *p_old++;
+    event = NFC_NFCEE_MODE_SET_REVT;
+    nfc_cb.flags &= ~NFC_FL_WAIT_MODE_SET_NTF;
+    nfc_stop_timer(&nfc_cb.nci_mode_set_ntf_timer);
+  } else if (op_code == NCI_MSG_NFCEE_STATUS) {
+    event = NFC_NFCEE_STATUS_REVT;
+    nfc_response.nfcee_status.status = NCI_STATUS_OK;
+    nfc_response.nfcee_status.nfcee_id = *pp++;
+    nfc_response.nfcee_status.nfcee_status = *pp;
   } else {
     p_cback = NULL;
-    NFC_TRACE_ERROR1("unknown opcode:0x%x", op_code);
+    LOG(ERROR) << StringPrintf("unknown opcode:0x%x", op_code);
   }
 
-  if (p_cback) (*p_cback)(event, p_evt);
+  if (p_cback) (*p_cback)(event, &nfc_response);
 }
 
 #endif
diff --git a/src/nfc/ndef/ndef_utils.c b/src/nfc/ndef/ndef_utils.cc
similarity index 89%
rename from src/nfc/ndef/ndef_utils.c
rename to src/nfc/ndef/ndef_utils.cc
index 01663f0..993efd8 100644
--- a/src/nfc/ndef/ndef_utils.c
+++ b/src/nfc/ndef/ndef_utils.cc
@@ -39,9 +39,9 @@
 **
 *******************************************************************************/
 static void shiftdown(uint8_t* p_mem, uint32_t len, uint32_t shift_amount) {
-  register uint8_t* ps = p_mem + len - 1;
-  register uint8_t* pd = ps + shift_amount;
-  register uint32_t xx;
+  uint8_t* ps = p_mem + len - 1;
+  uint8_t* pd = ps + shift_amount;
+  uint32_t xx;
 
   for (xx = 0; xx < len; xx++) *pd-- = *ps--;
 }
@@ -54,9 +54,9 @@
 **
 *******************************************************************************/
 static void shiftup(uint8_t* p_dest, uint8_t* p_src, uint32_t len) {
-  register uint8_t* ps = p_src;
-  register uint8_t* pd = p_dest;
-  register uint32_t xx;
+  uint8_t* ps = p_src;
+  uint8_t* pd = p_dest;
+  uint32_t xx;
 
   for (xx = 0; xx < len; xx++) *pd++ = *ps++;
 }
@@ -883,143 +883,6 @@
 
 /*******************************************************************************
 **
-** Function         NDEF_MsgInsertRec
-**
-** Description      This function inserts a record at a specific index into the
-**                  given NDEF message
-**
-** Returns          OK, or error if the record did not fit
-**                  *p_cur_size is updated
-**
-*******************************************************************************/
-extern tNDEF_STATUS NDEF_MsgInsertRec(uint8_t* p_msg, uint32_t max_size,
-                                      uint32_t* p_cur_size, int32_t index,
-                                      uint8_t tnf, uint8_t* p_type,
-                                      uint8_t type_len, uint8_t* p_id,
-                                      uint8_t id_len, uint8_t* p_payload,
-                                      uint32_t payload_len) {
-  uint8_t* p_rec;
-  uint32_t recSize;
-  int32_t plen = (payload_len < 256) ? 1 : 4;
-  int32_t ilen = (id_len == 0) ? 0 : 1;
-
-  /* First, make sure the record will fit. we need at least 2 bytes for header
-   * and type length */
-  recSize = payload_len + 2 + type_len + plen + ilen + id_len;
-
-  if ((*p_cur_size + recSize) > max_size) return (NDEF_MSG_INSUFFICIENT_MEM);
-
-  /* See where the new record goes. If at the end, call the 'AddRec' function */
-  if ((index >= NDEF_MsgGetNumRecs(p_msg)) ||
-      ((p_rec = NDEF_MsgGetRecByIndex(p_msg, index)) == NULL)) {
-    return NDEF_MsgAddRec(p_msg, max_size, p_cur_size, tnf, p_type, type_len,
-                          p_id, id_len, p_payload, payload_len);
-  }
-
-  /* If we are inserting at the beginning, remove the MB bit from the current
-   * first */
-  if (index == 0) *p_msg &= ~NDEF_MB_MASK;
-
-  /* Make space for the new record */
-  shiftdown(p_rec, (uint32_t)(*p_cur_size - (p_rec - p_msg)), recSize);
-
-  /* If adding at the beginning, set begin bit */
-  if (index == 0)
-    *p_rec = tnf | NDEF_MB_MASK;
-  else
-    *p_rec = tnf;
-
-  if (plen == 1) *p_rec |= NDEF_SR_MASK;
-
-  if (ilen != 0) *p_rec |= NDEF_IL_MASK;
-
-  p_rec++;
-
-  /* The next byte is the type field length */
-  *p_rec++ = type_len;
-
-  /* Payload length - can be 1 or 4 bytes */
-  if (plen == 1)
-    *p_rec++ = (uint8_t)payload_len;
-  else
-    UINT32_TO_BE_STREAM(p_rec, payload_len);
-
-  /* ID field Length (optional) */
-  if (ilen != 0) *p_rec++ = id_len;
-
-  /* Next comes the type */
-  if (type_len) {
-    if (p_type) memcpy(p_rec, p_type, type_len);
-
-    p_rec += type_len;
-  }
-
-  /* Next comes the ID */
-  if (ilen != 0) {
-    if (p_id) memcpy(p_rec, p_id, id_len);
-
-    p_rec += id_len;
-  }
-
-  /* And lastly the payload. If NULL, the app just wants to reserve memory */
-  if (p_payload) memcpy(p_rec, p_payload, payload_len);
-
-  *p_cur_size += recSize;
-
-  return (NDEF_OK);
-}
-
-/*******************************************************************************
-**
-** Function         NDEF_MsgAppendRec
-**
-** Description      This function adds NDEF records to the end of an NDEF
-**                  message.
-**
-** Returns          OK, or error if the record did not fit
-**                  *p_cur_size is updated
-**
-*******************************************************************************/
-extern tNDEF_STATUS NDEF_MsgAppendRec(uint8_t* p_msg, uint32_t max_size,
-                                      uint32_t* p_cur_size, uint8_t* p_new_rec,
-                                      uint32_t new_rec_len) {
-  uint8_t* p_rec;
-  tNDEF_STATUS status;
-
-  /* First, validate new records */
-  status = NDEF_MsgValidate(p_new_rec, new_rec_len, false);
-  if (status != NDEF_OK) return (status);
-
-  /* First, make sure the record will fit */
-  if ((*p_cur_size + new_rec_len) > max_size)
-    return (NDEF_MSG_INSUFFICIENT_MEM);
-
-  /* Find where to copy new record */
-  if (*p_cur_size == 0)
-    p_rec = p_msg;
-  else {
-    /* Find the previous last and clear his 'Message End' bit */
-    uint8_t* pLast = NDEF_MsgGetLastRecInMsg(p_msg);
-
-    if (!pLast) return (NDEF_MSG_NO_MSG_END);
-
-    *pLast &= ~NDEF_ME_MASK;
-    p_rec = p_msg + *p_cur_size;
-
-    /* clear 'Message Begin' bit of new record */
-    *p_new_rec &= ~NDEF_MB_MASK;
-  }
-
-  /* append new records */
-  memcpy(p_rec, p_new_rec, new_rec_len);
-
-  *p_cur_size += new_rec_len;
-
-  return (NDEF_OK);
-}
-
-/*******************************************************************************
-**
 ** Function         NDEF_MsgAppendPayload
 **
 ** Description      This function appends extra payload to a specific record in
diff --git a/src/nfc/nfc/nfc_ee.c b/src/nfc/nfc/nfc_ee.cc
similarity index 63%
rename from src/nfc/nfc/nfc_ee.c
rename to src/nfc/nfc/nfc_ee.cc
index c2c4115..728cd55 100644
--- a/src/nfc/nfc/nfc_ee.c
+++ b/src/nfc/nfc/nfc_ee.cc
@@ -22,14 +22,19 @@
  *
  ******************************************************************************/
 #include <string.h>
-#include "bt_types.h"
-#include "gki.h"
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "nfc_target.h"
 
+#include "gki.h"
 #include "nci_hmsgs.h"
 #include "nfc_api.h"
 #include "nfc_int.h"
 
+using android::base::StringPrintf;
+
 /*******************************************************************************
 **
 ** Function         NFC_NfceeDiscover
@@ -67,12 +72,29 @@
 **
 *******************************************************************************/
 tNFC_STATUS NFC_NfceeModeSet(uint8_t nfcee_id, tNFC_NFCEE_MODE mode) {
-  if (mode >= NCI_NUM_NFCEE_MODE) {
-    NFC_TRACE_ERROR1("NFC_NfceeModeSet bad mode:%d", mode);
+  tNFC_STATUS status = NCI_STATUS_OK;
+  if (mode >= NCI_NUM_NFCEE_MODE || nfcee_id == NCI_DH_ID) {
+    LOG(ERROR) << StringPrintf("%s invalid parameter:%d", __func__, mode);
     return NFC_STATUS_FAILED;
   }
-
-  return nci_snd_nfcee_mode_set(nfcee_id, mode);
+  if (nfc_cb.nci_version != NCI_VERSION_2_0)
+    status = nci_snd_nfcee_mode_set(nfcee_id, mode);
+  else {
+    if (nfc_cb.flags & NFC_FL_WAIT_MODE_SET_NTF)
+      status = NFC_STATUS_REFUSED;
+    else {
+      status = nci_snd_nfcee_mode_set(nfcee_id, mode);
+      if (status == NCI_STATUS_OK) {
+        /* Mode set command is successfully queued or sent.
+         * do not allow another Mode Set command until NTF is received */
+        nfc_cb.flags |= NFC_FL_WAIT_MODE_SET_NTF;
+        nfc_start_timer(&nfc_cb.nci_mode_set_ntf_timer,
+                        (uint16_t)(NFC_TTYPE_WAIT_MODE_SET_NTF),
+                        NFC_MODE_SET_NTF_TIMEOUT);
+      }
+    }
+  }
+  return status;
 }
 
 /*******************************************************************************
@@ -105,3 +127,30 @@
 **
 *******************************************************************************/
 tNFC_STATUS NFC_GetRouting(void) { return nci_snd_get_routing_cmd(); }
+
+/*******************************************************************************
+**
+** Function         NFC_NfceePLConfig
+**
+** Description      This function is called to set the Power and Link Control to
+**                  an NFCEE connected to the NFCC.
+**                  The response from NFCC is reported by tNFC_RESPONSE_CBACK
+**                  as NFC_NFCEE_PL_CONTROL_REVT.
+**
+** Parameters       nfcee_id - the NFCEE to activate or de-activate.
+**                  pl_config -
+**                   NFCEE_PL_CONFIG_NFCC_DECIDES  NFCC decides (default)
+**                   NFCEE_PL_CONFIG_PWR_ALWAYS_ON  NFCEE power supply is
+**                                                          always on
+**                   NFCEE_PL_CONFIG_LNK_ON_WHEN_PWR_ON  communication link is
+**                                       always active when NFCEE is powered on
+**                   NFCEE_PL_CONFIG_PWR_LNK_ALWAYS_ON  power supply and
+**                                       communication link are always on
+**
+** Returns          tNFC_STATUS
+**
+*******************************************************************************/
+tNFC_STATUS NFC_NfceePLConfig(uint8_t nfcee_id,
+                              tNCI_NFCEE_PL_CONFIG pl_config) {
+  return nci_snd_nfcee_power_link_control(nfcee_id, pl_config);
+}
diff --git a/src/nfc/nfc/nfc_main.c b/src/nfc/nfc/nfc_main.cc
similarity index 88%
rename from src/nfc/nfc/nfc_main.c
rename to src/nfc/nfc/nfc_main.cc
index 9eb147d..77c0485 100644
--- a/src/nfc/nfc/nfc_main.c
+++ b/src/nfc/nfc/nfc_main.cc
@@ -24,20 +24,22 @@
  *
  ******************************************************************************/
 #include <string.h>
-#include "bt_types.h"
-#include "gki.h"
+
+#include <android-base/stringprintf.h>
+#include <android/hardware/nfc/1.1/types.h>
+#include <base/logging.h>
+
 #include "nfc_target.h"
 
+#include "bt_types.h"
 #include "ce_int.h"
+#include "gki.h"
 #include "nci_hmsgs.h"
-#include "nfc_api.h"
-#include "nfc_hal_api.h"
 #include "nfc_int.h"
 #include "rw_int.h"
 
 #if (NFC_RW_ONLY == FALSE)
-#include "ce_api.h"
-#include "ce_int.h"
+
 #include "llcp_int.h"
 
 /* NFC mandates support for at least one logical connection;
@@ -52,6 +54,13 @@
 #define NFC_SET_MAX_CONN_DEFAULT()
 
 #endif /* NFC_RW_ONLY */
+
+using android::base::StringPrintf;
+using android::hardware::nfc::V1_1::NfcEvent;
+
+extern bool nfc_debug_enabled;
+extern void delete_stack_non_volatile_store(bool forceDelete);
+
 /****************************************************************************
 ** Declarations
 ****************************************************************************/
@@ -76,7 +85,6 @@
 #endif
 };
 
-#if (BT_TRACE_VERBOSE == TRUE)
 /*******************************************************************************
 **
 ** Function         nfc_state_name
@@ -88,28 +96,28 @@
 ** Returns          pointer to the name
 **
 *******************************************************************************/
-static char* nfc_state_name(uint8_t state) {
+static std::string nfc_state_name(uint8_t state) {
   switch (state) {
     case NFC_STATE_NONE:
-      return ("NONE");
+      return "NONE";
     case NFC_STATE_W4_HAL_OPEN:
-      return ("W4_HAL_OPEN");
+      return "W4_HAL_OPEN";
     case NFC_STATE_CORE_INIT:
-      return ("CORE_INIT");
+      return "CORE_INIT";
     case NFC_STATE_W4_POST_INIT_CPLT:
-      return ("W4_POST_INIT_CPLT");
+      return "W4_POST_INIT_CPLT";
     case NFC_STATE_IDLE:
-      return ("IDLE");
+      return "IDLE";
     case NFC_STATE_OPEN:
-      return ("OPEN");
+      return "OPEN";
     case NFC_STATE_CLOSING:
-      return ("CLOSING");
+      return "CLOSING";
     case NFC_STATE_W4_HAL_CLOSE:
-      return ("W4_HAL_CLOSE");
+      return "W4_HAL_CLOSE";
     case NFC_STATE_NFCC_POWER_OFF_SLEEP:
-      return ("NFCC_POWER_OFF_SLEEP");
+      return "NFCC_POWER_OFF_SLEEP";
     default:
-      return ("???? UNKNOWN STATE");
+      return "???? UNKNOWN STATE";
   }
 }
 
@@ -124,34 +132,28 @@
 ** Returns          pointer to the name
 **
 *******************************************************************************/
-static char* nfc_hal_event_name(uint8_t event) {
+static std::string nfc_hal_event_name(uint8_t event) {
   switch (event) {
     case HAL_NFC_OPEN_CPLT_EVT:
-      return ("HAL_NFC_OPEN_CPLT_EVT");
-
+      return "HAL_NFC_OPEN_CPLT_EVT";
     case HAL_NFC_CLOSE_CPLT_EVT:
-      return ("HAL_NFC_CLOSE_CPLT_EVT");
-
+      return "HAL_NFC_CLOSE_CPLT_EVT";
     case HAL_NFC_POST_INIT_CPLT_EVT:
-      return ("HAL_NFC_POST_INIT_CPLT_EVT");
-
+      return "HAL_NFC_POST_INIT_CPLT_EVT";
     case HAL_NFC_PRE_DISCOVER_CPLT_EVT:
-      return ("HAL_NFC_PRE_DISCOVER_CPLT_EVT");
-
+      return "HAL_NFC_PRE_DISCOVER_CPLT_EVT";
     case HAL_NFC_REQUEST_CONTROL_EVT:
-      return ("HAL_NFC_REQUEST_CONTROL_EVT");
-
+      return "HAL_NFC_REQUEST_CONTROL_EVT";
     case HAL_NFC_RELEASE_CONTROL_EVT:
-      return ("HAL_NFC_RELEASE_CONTROL_EVT");
-
+      return "HAL_NFC_RELEASE_CONTROL_EVT";
     case HAL_NFC_ERROR_EVT:
-      return ("HAL_NFC_ERROR_EVT");
-
+      return "HAL_NFC_ERROR_EVT";
+    case (uint32_t)NfcEvent::HCI_NETWORK_RESET:
+      return "HCI_NETWORK_RESET";
     default:
-      return ("???? UNKNOWN EVENT");
+      return "???? UNKNOWN EVENT";
   }
 }
-#endif /* BT_TRACE_VERBOSE == TRUE */
 
 /*******************************************************************************
 **
@@ -236,8 +238,21 @@
     p_cb->init_credits = p_cb->num_buff = 0;
     nfc_set_conn_id(p_cb, NFC_RF_CONN_ID);
     if (nfc_cb.nci_version == NCI_VERSION_2_0) {
-      evt_data.enable.hci_packet_size = *p++;
-      evt_data.enable.hci_conn_credits = *p++;
+      if (evt_data.enable.nci_features & NCI_FEAT_HCI_NETWORK) {
+        p_cb = &nfc_cb.conn_cb[NFC_HCI_CONN_ID];
+        nfc_set_conn_id(p_cb, NFC_HCI_CONN_ID);
+        p_cb->id = NFC_HCI_CONN_ID;
+        STREAM_TO_UINT8(p_cb->buff_size, p);
+        STREAM_TO_UINT8(p_cb->num_buff, p);
+        p_cb->init_credits = p_cb->num_buff;
+        evt_data.enable.hci_packet_size = p_cb->buff_size;
+        evt_data.enable.hci_conn_credits = p_cb->init_credits;
+        DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+            "hci num_buf=%d buf_size=%d", p_cb->num_buff, p_cb->buff_size);
+      } else {
+        /*HCI n/w not enabled skip data buff size and data credit HCI conn */
+        p += 2;
+      }
       STREAM_TO_UINT16(evt_data.enable.max_nfc_v_size, p);
       STREAM_TO_UINT8(num_interfaces, p);
 #if (NFC_RW_ONLY == FALSE)
@@ -308,13 +323,10 @@
 **
 *******************************************************************************/
 void nfc_set_state(tNFC_STATE nfc_state) {
-#if (BT_TRACE_VERBOSE == TRUE)
-  NFC_TRACE_DEBUG4("nfc_set_state %d (%s)->%d (%s)", nfc_cb.nfc_state,
-                   nfc_state_name(nfc_cb.nfc_state), nfc_state,
-                   nfc_state_name(nfc_state));
-#else
-  NFC_TRACE_DEBUG2("nfc_set_state %d->%d", nfc_cb.nfc_state, nfc_state);
-#endif
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfc_set_state %d (%s)->%d (%s)", nfc_cb.nfc_state,
+                      nfc_state_name(nfc_cb.nfc_state).c_str(), nfc_state,
+                      nfc_state_name(nfc_state).c_str());
   nfc_cb.nfc_state = nfc_state;
 }
 
@@ -364,7 +376,8 @@
 void nfc_main_handle_hal_evt(tNFC_HAL_EVT_MSG* p_msg) {
   uint8_t* ps;
 
-  NFC_TRACE_DEBUG1("nfc_main_handle_hal_evt(): HAL event=0x%x", p_msg->hal_evt);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("HAL event=0x%x", p_msg->hal_evt);
 
   switch (p_msg->hal_evt) {
     case HAL_NFC_OPEN_CPLT_EVT: /* only for failure case */
@@ -474,14 +487,17 @@
           }
           break;
 
+        case (uint32_t)NfcEvent::HCI_NETWORK_RESET:
+          delete_stack_non_volatile_store(true);
+          break;
+
         default:
           break;
       }
       break;
 
     default:
-      NFC_TRACE_ERROR1("nfc_main_handle_hal_evt (): unhandled event (0x%x).",
-                       p_msg->hal_evt);
+      LOG(ERROR) << StringPrintf("unhandled event (0x%x).", p_msg->hal_evt);
       break;
   }
 }
@@ -498,7 +514,7 @@
 void nfc_main_flush_cmd_queue(void) {
   NFC_HDR* p_msg;
 
-  NFC_TRACE_DEBUG0("nfc_main_flush_cmd_queue ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* initialize command window */
   nfc_cb.nci_cmd_window = NCI_MAX_CMD_WINDOW;
@@ -535,7 +551,7 @@
     p_msg->status = status;
     GKI_send_msg(NFC_TASK, NFC_MBOX_ID, p_msg);
   } else {
-    NFC_TRACE_ERROR0("nfc_main_post_hal_evt (): No buffer");
+    LOG(ERROR) << StringPrintf("No buffer");
   }
 }
 
@@ -549,12 +565,9 @@
 **
 *******************************************************************************/
 static void nfc_main_hal_cback(uint8_t event, tHAL_NFC_STATUS status) {
-#if (BT_TRACE_VERBOSE == TRUE)
-  NFC_TRACE_DEBUG3("nfc_main_hal_cback event: %s(0x%x), status=%d",
-                   nfc_hal_event_name(event), event, status);
-#else
-  NFC_TRACE_DEBUG2("nfc_main_hal_cback event: 0x%x, status=%d", event, status);
-#endif
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfc_main_hal_cback event: %s(0x%x), status=%d",
+                      nfc_hal_event_name(event).c_str(), event, status);
 
   switch (event) {
     case HAL_NFC_OPEN_CPLT_EVT:
@@ -578,11 +591,13 @@
     case HAL_NFC_REQUEST_CONTROL_EVT:
     case HAL_NFC_RELEASE_CONTROL_EVT:
     case HAL_NFC_ERROR_EVT:
+    case (uint32_t)NfcEvent::HCI_NETWORK_RESET:
       nfc_main_post_hal_evt(event, status);
       break;
 
     default:
-      NFC_TRACE_DEBUG1("nfc_main_hal_cback unhandled event %x", event);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("nfc_main_hal_cback unhandled event %x", event);
       break;
   }
 }
@@ -617,7 +632,7 @@
 
       GKI_send_msg(NFC_TASK, NFC_MBOX_ID, p_msg);
     } else {
-      NFC_TRACE_ERROR0("nfc_main_hal_data_cback (): No buffer");
+      LOG(ERROR) << StringPrintf("No buffer");
     }
   }
 }
@@ -646,7 +661,7 @@
 **
 *******************************************************************************/
 tNFC_STATUS NFC_Enable(tNFC_RESPONSE_CBACK* p_cback) {
-  NFC_TRACE_API0("NFC_Enable ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* Validate callback */
   if (!p_cback) {
@@ -677,7 +692,8 @@
 **
 *******************************************************************************/
 void NFC_Disable(void) {
-  NFC_TRACE_API1("NFC_Disable (): nfc_state = %d", nfc_cb.nfc_state);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfc_state = %d", nfc_cb.nfc_state);
 
   if ((nfc_cb.nfc_state == NFC_STATE_NONE) ||
       (nfc_cb.nfc_state == NFC_STATE_NFCC_POWER_OFF_SLEEP)) {
@@ -720,7 +736,6 @@
   nfc_cb.nci_wait_rsp_tout = NFC_CMD_CMPL_TIMEOUT;
   nfc_cb.p_disc_maps = nfc_interface_mapping;
   nfc_cb.num_disc_maps = NFC_NUM_INTERFACE_MAP;
-  nfc_cb.trace_level = NFC_INITIAL_TRACE_LEVEL;
   nfc_cb.nci_ctrl_size = NCI_CTRL_INIT_SIZE;
   nfc_cb.reassembly = true;
   nfc_cb.nci_version = NCI_VERSION_UNKNOWN;
@@ -809,8 +824,8 @@
 
   nfc_cb.p_discv_cback = p_cback;
   num_intf = 0;
-  NFC_TRACE_DEBUG1("nci_interfaces supported by NFCC: 0x%x",
-                   nfc_cb.nci_interfaces);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "nci_interfaces supported by NFCC: 0x%x", nfc_cb.nci_interfaces);
 
   for (xx = 0; xx < NFC_NFCC_MAX_NUM_VS_INTERFACE + NCI_INTERFACE_MAX; xx++) {
     memset(&max_maps[xx], 0x00, sizeof(tNFC_DISCOVER_MAPS));
@@ -823,20 +838,22 @@
         if (nfc_cb.vs_interface[yy] == p_maps[xx].intf_type)
           is_supported = true;
       }
-      NFC_TRACE_DEBUG3("[%d]: vs intf_type:0x%x is_supported:%d", xx,
-                       p_maps[xx].intf_type, is_supported);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("[%d]: vs intf_type:0x%x is_supported:%d", xx,
+                          p_maps[xx].intf_type, is_supported);
     } else {
       intf_mask = (1 << (p_maps[xx].intf_type));
       if (intf_mask & nfc_cb.nci_interfaces) {
         is_supported = true;
       }
-      NFC_TRACE_DEBUG4("[%d]: intf_type:%d intf_mask: 0x%x is_supported:%d", xx,
-                       p_maps[xx].intf_type, intf_mask, is_supported);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("[%d]: intf_type:%d intf_mask: 0x%x is_supported:%d",
+                          xx, p_maps[xx].intf_type, intf_mask, is_supported);
     }
     if (is_supported)
       memcpy(&max_maps[num_intf++], &p_maps[xx], sizeof(tNFC_DISCOVER_MAPS));
     else {
-      NFC_TRACE_WARNING1(
+      LOG(WARNING) << StringPrintf(
           "NFC_DiscoveryMap interface=0x%x is not supported by NFCC",
           p_maps[xx].intf_type);
     }
@@ -868,9 +885,9 @@
   int params_size;
   tNFC_STATUS status = NFC_STATUS_NO_BUFFERS;
 
-  NFC_TRACE_API0("NFC_DiscoveryStart");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
   if (nfc_cb.p_disc_pending) {
-    NFC_TRACE_ERROR0("There's pending NFC_DiscoveryStart");
+    LOG(ERROR) << StringPrintf("There's pending NFC_DiscoveryStart");
     status = NFC_STATUS_BUSY;
   } else {
     nfc_cb.p_discv_cback = p_cback;
@@ -888,7 +905,8 @@
     }
   }
 
-  NFC_TRACE_API1("NFC_DiscoveryStart status: 0x%x", status);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("NFC_DiscoveryStart status: 0x%x", status);
   return status;
 }
 
@@ -1106,13 +1124,9 @@
   tNFC_CONN_CB* p_cb = &nfc_cb.conn_cb[NFC_RF_CONN_ID];
   tNFC_STATUS status = NFC_STATUS_OK;
 
-#if (BT_TRACE_VERBOSE == TRUE)
-  NFC_TRACE_API3("NFC_Deactivate %d (%s) deactivate_type:%d", nfc_cb.nfc_state,
-                 nfc_state_name(nfc_cb.nfc_state), deactivate_type);
-#else
-  NFC_TRACE_API2("NFC_Deactivate %d deactivate_type:%d", nfc_cb.nfc_state,
-                 deactivate_type);
-#endif
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "NFC_Deactivate %d (%s) deactivate_type:%d", nfc_cb.nfc_state,
+      nfc_state_name(nfc_cb.nfc_state).c_str(), deactivate_type);
 
   if (nfc_cb.flags & NFC_FL_DISCOVER_PENDING) {
     /* the HAL pre-discover is still active - clear the pending flag */
@@ -1128,8 +1142,9 @@
 
   if (nfc_cb.nfc_state == NFC_STATE_OPEN) {
     nfc_set_state(NFC_STATE_CLOSING);
-    NFC_TRACE_DEBUG3("act_protocol %d credits:%d/%d", p_cb->act_protocol,
-                     p_cb->init_credits, p_cb->num_buff);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("act_protocol %d credits:%d/%d", p_cb->act_protocol,
+                        p_cb->init_credits, p_cb->num_buff);
     if ((p_cb->act_protocol == NCI_PROTOCOL_NFC_DEP) &&
         (p_cb->init_credits != p_cb->num_buff)) {
       nfc_cb.flags |= NFC_FL_DEACTIVATING;
@@ -1229,7 +1244,7 @@
 **
 *******************************************************************************/
 tNFC_STATUS NFC_SetPowerOffSleep(bool enable) {
-  NFC_TRACE_API1("NFC_SetPowerOffSleep () enable = %d", enable);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("enable = %d", enable);
 
   if ((enable == false) &&
       (nfc_cb.nfc_state == NFC_STATE_NFCC_POWER_OFF_SLEEP)) {
@@ -1248,8 +1263,7 @@
     return NFC_STATUS_OK;
   }
 
-  NFC_TRACE_ERROR1("NFC_SetPowerOffSleep () invalid state = %d",
-                   nfc_cb.nfc_state);
+  LOG(ERROR) << StringPrintf("invalid state = %d", nfc_cb.nfc_state);
   return NFC_STATUS_FAILED;
 }
 
@@ -1263,7 +1277,7 @@
 **
 *******************************************************************************/
 tNFC_STATUS NFC_PowerCycleNFCC(void) {
-  NFC_TRACE_API0("NFC_PowerCycleNFCC ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (nfc_cb.nfc_state == NFC_STATE_IDLE) {
     /* power cycle NFCC */
@@ -1273,31 +1287,12 @@
     return NFC_STATUS_OK;
   }
 
-  NFC_TRACE_ERROR1("NFC_PowerCycleNFCC () invalid state = %d",
-                   nfc_cb.nfc_state);
+  LOG(ERROR) << StringPrintf("invalid state = %d", nfc_cb.nfc_state);
   return NFC_STATUS_FAILED;
 }
 
 /*******************************************************************************
 **
-** Function         NFC_SetTraceLevel
-**
-** Description      This function sets the trace level for NFC.  If called with
-**                  a value of 0xFF, it simply returns the current trace level.
-**
-** Returns          The new or current trace level
-**
-*******************************************************************************/
-uint8_t NFC_SetTraceLevel(uint8_t new_level) {
-  NFC_TRACE_API1("NFC_SetTraceLevel () new_level = %d", new_level);
-
-  if (new_level != 0xFF) nfc_cb.trace_level = new_level;
-
-  return (nfc_cb.trace_level);
-}
-
-/*******************************************************************************
-**
 ** Function         NFC_GetNCIVersion
 **
 ** Description      Called by higher layer to get the current nci
@@ -1326,7 +1321,37 @@
   return nci_snd_iso_dep_nak_presence_check_cmd();
 }
 
-#if (BT_TRACE_VERBOSE == TRUE)
+/*******************************************************************************
+**
+** Function         NFC_SetStaticHciCback
+**
+** Description      This function is called to update the data callback function
+**                  to receive the data for the static Hci connection id.
+**
+** Parameters       p_cback - the connection callback function
+**
+** Returns          Nothing
+**
+*******************************************************************************/
+void NFC_SetStaticHciCback(tNFC_CONN_CBACK* p_cback) {
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("%s dest: %d", __func__, NCI_DEST_TYPE_NFCEE);
+  tNFC_CONN_CB* p_cb = &nfc_cb.conn_cb[NFC_HCI_CONN_ID];
+  tNFC_CONN evt_data;
+
+  p_cb->p_cback = p_cback;
+  if (p_cback && p_cb->buff_size && p_cb->num_buff) {
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("%s dest: %d", __func__, NCI_DEST_TYPE_NFCEE);
+    evt_data.conn_create.status = NFC_STATUS_OK;
+    evt_data.conn_create.dest_type = NCI_DEST_TYPE_NFCEE;
+    evt_data.conn_create.id = p_cb->id;
+    evt_data.conn_create.buff_size = p_cb->buff_size;
+    evt_data.conn_create.num_buffs = p_cb->num_buff;
+    (*p_cback)(NFC_HCI_CONN_ID, NFC_CONN_CREATE_CEVT, &evt_data);
+  }
+}
+
 /*******************************************************************************
 **
 ** Function         NFC_GetStatusName
@@ -1338,7 +1363,7 @@
 ** Returns          pointer to the name
 **
 *******************************************************************************/
-char* NFC_GetStatusName(tNFC_STATUS status) {
+std::string NFC_GetStatusName(tNFC_STATUS status) {
   switch (status) {
     case NFC_STATUS_OK:
       return "OK";
@@ -1414,4 +1439,3 @@
       return "UNKNOWN";
   }
 }
-#endif
diff --git a/src/nfc/nfc/nfc_ncif.cc b/src/nfc/nfc/nfc_ncif.cc
index 8e0048a..6d6607d 100644
--- a/src/nfc/nfc/nfc_ncif.cc
+++ b/src/nfc/nfc/nfc_ncif.cc
@@ -23,10 +23,10 @@
  *  (callback). On the transmit side, it manages the command transmission.
  *
  ******************************************************************************/
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
 #include <log/log.h>
 #include <metricslogger/metrics_logger.h>
-#include <stdlib.h>
-#include <string.h>
 
 #include "nfc_target.h"
 
@@ -34,10 +34,12 @@
 #include "nci_defs.h"
 #include "nci_hmsgs.h"
 #include "nfc_api.h"
-#include "nfc_hal_api.h"
 #include "nfc_int.h"
 #include "rw_api.h"
 #include "rw_int.h"
+
+using android::base::StringPrintf;
+
 #if (NFC_RW_ONLY == FALSE)
 static const uint8_t nfc_mpl_code_to_size[] = {64, 128, 192, 254};
 
@@ -50,6 +52,8 @@
 #define NFC_LB_ATTRIB_REQ_FIXED_BYTES 8
 
 extern unsigned char appl_dta_mode_flag;
+extern bool nfc_debug_enabled;
+
 /*******************************************************************************
 **
 ** Function         nfc_ncif_update_window
@@ -63,7 +67,7 @@
   /* Sanity check - see if we were expecting a update_window */
   if (nfc_cb.nci_cmd_window == NCI_MAX_CMD_WINDOW) {
     if (nfc_cb.nfc_state != NFC_STATE_W4_HAL_CLOSE) {
-      NFC_TRACE_ERROR0("nfc_ncif_update_window: Unexpected call");
+      LOG(ERROR) << StringPrintf("nfc_ncif_update_window: Unexpected call");
     }
     return;
   }
@@ -88,7 +92,7 @@
 **
 *******************************************************************************/
 void nfc_ncif_cmd_timeout(void) {
-  NFC_TRACE_ERROR0("nfc_ncif_cmd_timeout");
+  LOG(ERROR) << StringPrintf("nfc_ncif_cmd_timeout");
 
   /* report an error */
   nfc_ncif_event_status(NFC_GEN_ERROR_REVT, NFC_STATUS_HW_TIMEOUT);
@@ -113,7 +117,7 @@
 **
 *******************************************************************************/
 void nfc_wait_2_deactivate_timeout(void) {
-  NFC_TRACE_ERROR0("nfc_wait_2_deactivate_timeout");
+  LOG(ERROR) << StringPrintf("nfc_wait_2_deactivate_timeout");
   nfc_cb.flags &= ~NFC_FL_DEACTIVATING;
   nci_snd_deactivate_cmd((uint8_t)nfc_cb.deactivate_timer.param);
 }
@@ -139,8 +143,9 @@
   uint8_t hdr0 = p_cb->conn_id;
   bool fragmented = false;
 
-  NFC_TRACE_DEBUG3("nfc_ncif_send_data :%d, num_buff:%d qc:%d", p_cb->conn_id,
-                   p_cb->num_buff, p_cb->tx_q.count);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfc_ncif_send_data :%d, num_buff:%d qc:%d",
+                      p_cb->conn_id, p_cb->num_buff, p_cb->tx_q.count);
   if (p_cb->id == NFC_RF_CONN_ID) {
     if (nfc_cb.nfc_state != NFC_STATE_OPEN) {
       if (nfc_cb.nfc_state == NFC_STATE_CLOSING) {
@@ -149,7 +154,7 @@
           if (p_cb->init_credits == p_cb->num_buff) {
             /* all the credits are back */
             nfc_cb.flags &= ~NFC_FL_DEACTIVATING;
-            NFC_TRACE_DEBUG2(
+            DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
                 "deactivating NFC-DEP init_credits:%d, num_buff:%d",
                 p_cb->init_credits, p_cb->num_buff);
             nfc_stop_timer(&nfc_cb.deactivate_timer);
@@ -369,13 +374,14 @@
   nfcsnoop_capture(p_msg, true);
   switch (mt) {
     case NCI_MT_DATA:
-      NFC_TRACE_DEBUG0("NFC received data");
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("NFC received data");
       nfc_ncif_proc_data(p_msg);
       free = false;
       break;
 
     case NCI_MT_RSP:
-      NFC_TRACE_DEBUG1("NFC received rsp gid:%d", gid);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("NFC received rsp gid:%d", gid);
       oid = ((*pp) & NCI_OID_MASK);
       p_old = nfc_cb.last_hdr;
       NCI_MSG_PRS_HDR0(p_old, old_mt, pbf, old_gid);
@@ -383,7 +389,7 @@
       /* make sure this is the RSP we are waiting for before updating the
        * command window */
       if ((old_gid != gid) || (old_oid != oid)) {
-        NFC_TRACE_ERROR2(
+        LOG(ERROR) << StringPrintf(
             "nfc_ncif_process_event unexpected rsp: gid:0x%x, oid:0x%x", gid,
             oid);
         return true;
@@ -407,7 +413,7 @@
           nci_proc_prop_rsp(p_msg);
           break;
         default:
-          NFC_TRACE_ERROR1("NFC: Unknown gid:%d", gid);
+          LOG(ERROR) << StringPrintf("NFC: Unknown gid:%d", gid);
           break;
       }
 
@@ -415,7 +421,8 @@
       break;
 
     case NCI_MT_NTF:
-      NFC_TRACE_DEBUG1("NFC received ntf gid:%d", gid);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("NFC received ntf gid:%d", gid);
       switch (gid) {
         case NCI_GID_CORE: /* 0000b NCI Core group */
           nci_proc_core_ntf(p_msg);
@@ -434,13 +441,14 @@
           nci_proc_prop_ntf(p_msg);
           break;
         default:
-          NFC_TRACE_ERROR1("NFC: Unknown gid:%d", gid);
+          LOG(ERROR) << StringPrintf("NFC: Unknown gid:%d", gid);
           break;
       }
       break;
 
     default:
-      NFC_TRACE_DEBUG2("NFC received unknown mt:0x%x, gid:%d", mt, gid);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("NFC received unknown mt:0x%x, gid:%d", mt, gid);
   }
 
   return (free);
@@ -477,7 +485,7 @@
   if (nfc_cb.p_resp_cback) {
     evt_data.set_config.num_param_id = 0;
     if (len == 0) {
-      NFC_TRACE_ERROR0("Insufficient RSP length");
+      LOG(ERROR) << StringPrintf("Insufficient RSP length");
       evt_data.set_config.status = NFC_STATUS_SYNTAX_ERROR;
       (*nfc_cb.p_resp_cback)(NFC_SET_CONFIG_REVT, &evt_data);
       return;
@@ -487,15 +495,15 @@
       evt_data.set_config.num_param_id = *p++;
       if (evt_data.set_config.num_param_id > NFC_MAX_NUM_IDS) {
         android_errorWriteLog(0x534e4554, "114047681");
-        NFC_TRACE_ERROR1("OOB write num_param_id %d",
-                         evt_data.set_config.num_param_id);
+        LOG(ERROR) << StringPrintf("OOB write num_param_id %d",
+                                   evt_data.set_config.num_param_id);
         evt_data.set_config.num_param_id = 0;
       } else if (evt_data.set_config.num_param_id <= len - 2) {
         STREAM_TO_ARRAY(evt_data.set_config.param_ids, p,
                         evt_data.set_config.num_param_id);
       } else {
-        NFC_TRACE_ERROR2("Insufficient RSP length %d,num_param_id %d", len,
-                         evt_data.set_config.num_param_id);
+        LOG(ERROR) << StringPrintf("Insufficient RSP length %d,num_param_id %d",
+                                   len, evt_data.set_config.num_param_id);
         evt_data.set_config.num_param_id = 0;
       }
     }
@@ -533,10 +541,11 @@
 **
 *******************************************************************************/
 void nfc_ncif_error_status(uint8_t conn_id, uint8_t status) {
-  tNFC_CONN_CB* p_cb;
-  p_cb = nfc_find_conn_cb_by_conn_id(conn_id);
+  tNFC_CONN_CB* p_cb = nfc_find_conn_cb_by_conn_id(conn_id);
   if (p_cb && p_cb->p_cback) {
-    (*p_cb->p_cback)(conn_id, NFC_ERROR_CEVT, (tNFC_CONN*)&status);
+    tNFC_CONN nfc_conn;
+    nfc_conn.status = status;
+    (*p_cb->p_cback)(conn_id, NFC_ERROR_CEVT, &nfc_conn);
   }
   if (status == NFC_STATUS_TIMEOUT)
     android::metricslogger::LogCounter("nfc_rf_timeout_error", 1);
@@ -585,7 +594,7 @@
 ** Returns          void
 **
 *******************************************************************************/
-void nfc_ncif_proc_credits(uint8_t* p, uint16_t plen) {
+void nfc_ncif_proc_credits(uint8_t* p, __attribute__((unused)) uint16_t plen) {
   uint8_t num, xx;
   tNFC_CONN_CB* p_cb;
 
@@ -600,8 +609,8 @@
           /* if this happens in activated state, it's very likely that our NFCC
            * has issues */
           /* However, credit may be returned after deactivation */
-          NFC_TRACE_ERROR2("num_buff:0x%x, init_credits:0x%x", p_cb->num_buff,
-                           p_cb->init_credits);
+          LOG(ERROR) << StringPrintf("num_buff:0x%x, init_credits:0x%x",
+                                     p_cb->num_buff, p_cb->init_credits);
         }
         p_cb->num_buff = p_cb->init_credits;
       }
@@ -720,8 +729,8 @@
   } else if (NCI_DISCOVERY_TYPE_POLL_KOVIO == p_param->mode) {
     p_param->param.pk.uid_len = len;
     if (p_param->param.pk.uid_len > NFC_KOVIO_MAX_LEN) {
-      NFC_TRACE_ERROR2("Kovio UID len:0x%x exceeds max(0x%x)",
-                       p_param->param.pk.uid_len, NFC_KOVIO_MAX_LEN);
+      LOG(ERROR) << StringPrintf("Kovio UID len:0x%x exceeds max(0x%x)",
+                                 p_param->param.pk.uid_len, NFC_KOVIO_MAX_LEN);
       p_param->param.pk.uid_len = NFC_KOVIO_MAX_LEN;
     }
     STREAM_TO_ARRAY(p_param->param.pk.uid, p, p_param->param.pk.uid_len);
@@ -782,7 +791,8 @@
 ** Returns          void
 **
 *******************************************************************************/
-void nfc_ncif_proc_discover_ntf(uint8_t* p, uint16_t plen) {
+void nfc_ncif_proc_discover_ntf(uint8_t* p,
+                                __attribute__((unused)) uint16_t plen) {
   tNFC_DISCOVER evt_data;
 
   if (nfc_cb.p_discv_cback) {
@@ -863,8 +873,8 @@
   evt_data.activate.rx_bitrate = *p++;
   mode = evt_data.activate.rf_tech_param.mode;
   len_act = *p++;
-  NFC_TRACE_DEBUG3("nfc_ncif_proc_activate:%d %d, mode:0x%02x", len, len_act,
-                   mode);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "nfc_ncif_proc_activate:%d %d, mode:0x%02x", len, len_act, mode);
   /* just in case the interface reports activation parameters not defined in the
    * NCI spec */
   p_intf->intf_param.frame.param_len = len_act;
@@ -1052,17 +1062,15 @@
 *******************************************************************************/
 void nfc_ncif_proc_deactivate(uint8_t status, uint8_t deact_type, bool is_ntf) {
   tNFC_DISCOVER evt_data;
-  tNFC_DEACTIVATE_DEVT* p_deact;
   tNFC_CONN_CB* p_cb = &nfc_cb.conn_cb[NFC_RF_CONN_ID];
   void* p_data;
 
   nfc_set_state(NFC_STATE_IDLE);
-  p_deact = &evt_data.deactivate;
-  p_deact->status = status;
-  p_deact->type = deact_type;
-  p_deact->is_ntf = is_ntf;
+  evt_data.deactivate.status = status;
+  evt_data.deactivate.type = deact_type;
+  evt_data.deactivate.is_ntf = is_ntf;
   if (NFC_GetNCIVersion() == NCI_VERSION_2_0) {
-    p_deact->reason = nfc_cb.deact_reason;
+    evt_data.deactivate.reason = nfc_cb.deact_reason;
   }
 
   while ((p_data = GKI_dequeue(&p_cb->rx_q)) != NULL) {
@@ -1073,8 +1081,11 @@
     GKI_freebuf(p_data);
   }
 
-  if (p_cb->p_cback)
-    (*p_cb->p_cback)(NFC_RF_CONN_ID, NFC_DEACTIVATE_CEVT, (tNFC_CONN*)p_deact);
+  if (p_cb->p_cback) {
+    tNFC_CONN nfc_conn;
+    nfc_conn.deactivate = evt_data.deactivate;
+    (*p_cb->p_cback)(NFC_RF_CONN_ID, NFC_DEACTIVATE_CEVT, &nfc_conn);
+  }
 
   if (nfc_cb.p_discv_cback) {
     (*nfc_cb.p_discv_cback)(NFC_DEACTIVATE_DEVT, &evt_data);
@@ -1145,7 +1156,9 @@
         }
         break;
     }
-    (*p_cback)(NFC_EE_ACTION_REVT, (tNFC_RESPONSE*)&evt_data);
+    tNFC_RESPONSE nfc_response;
+    nfc_response.ee_action = evt_data;
+    (*p_cback)(NFC_EE_ACTION_REVT, &nfc_response);
   }
 }
 
@@ -1164,7 +1177,8 @@
   tNFC_EE_DISCOVER_INFO* p_info;
   uint8_t u8;
 
-  NFC_TRACE_DEBUG2("nfc_ncif_proc_ee_discover_req %d len:%d", *p, plen);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfc_ncif_proc_ee_discover_req %d len:%d", *p, plen);
   if (p_cback) {
     u8 = *p;
     ee_disc_req.status = NFC_STATUS_OK;
@@ -1175,7 +1189,8 @@
       p_info->op = *p++;                  /* T */
       if (*p != NFC_EE_DISCOVER_INFO_LEN) /* L */
       {
-        NFC_TRACE_DEBUG1("bad entry len:%d", *p);
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("bad entry len:%d", *p);
         return;
       }
       p++;
@@ -1187,7 +1202,9 @@
       plen -= NFC_EE_DISCOVER_ENTRY_LEN;
       p_info++;
     }
-    (*p_cback)(NFC_EE_DISCOVER_REQ_REVT, (tNFC_RESPONSE*)&ee_disc_req);
+    tNFC_RESPONSE nfc_response;
+    nfc_response.ee_discover_req = ee_disc_req;
+    (*p_cback)(NFC_EE_DISCOVER_REQ_REVT, &nfc_response);
   }
 }
 
@@ -1200,7 +1217,8 @@
 ** Returns          void
 **
 *******************************************************************************/
-void nfc_ncif_proc_get_routing(uint8_t* p, uint8_t len) {
+void nfc_ncif_proc_get_routing(uint8_t* p,
+                               __attribute__((unused)) uint8_t len) {
   tNFC_GET_ROUTING_REVT evt_data;
   uint8_t more, num_entries, xx, yy, *pn, tl;
   tNFC_STATUS status = NFC_STATUS_CONTINUE;
@@ -1221,13 +1239,15 @@
         evt_data.tlv_size += tl;
         if (evt_data.tlv_size > NFC_MAX_EE_TLV_SIZE) {
           android_errorWriteLog(0x534e4554, "117554809");
-          NFC_TRACE_ERROR1("%s Invalid data format", __func__);
+          LOG(ERROR) << __func__ << "Invalid data format";
           return;
         }
         STREAM_TO_ARRAY(pn, p, tl);
         pn += tl;
       }
-      (*nfc_cb.p_resp_cback)(NFC_GET_ROUTING_REVT, (tNFC_RESPONSE*)&evt_data);
+      tNFC_RESPONSE nfc_response;
+      nfc_response.get_routing = evt_data;
+      (*nfc_cb.p_resp_cback)(NFC_GET_ROUTING_REVT, &nfc_response);
     }
   }
 }
@@ -1243,7 +1263,8 @@
 ** Returns          void
 **
 *******************************************************************************/
-void nfc_ncif_proc_conn_create_rsp(uint8_t* p, uint16_t plen,
+void nfc_ncif_proc_conn_create_rsp(uint8_t* p,
+                                   __attribute__((unused)) uint16_t plen,
                                    uint8_t dest_type) {
   tNFC_CONN_CB* p_cb;
   tNFC_STATUS status;
@@ -1313,22 +1334,25 @@
   uint8_t status = *p++;
   uint8_t wait_for_ntf = FALSE;
   if (is_ntf) {
-    NFC_TRACE_ERROR1("reset notification!!:0x%x ", status);
+    LOG(ERROR) << StringPrintf("reset notification!!:0x%x ", status);
     /* clean up, if the state is OPEN
      * FW does not report reset ntf right now */
     if (status == NCI2_0_RESET_TRIGGER_TYPE_CORE_RESET_CMD_RECEIVED ||
         status == NCI2_0_RESET_TRIGGER_TYPE_POWERED_ON) {
-      NFC_TRACE_DEBUG2("CORE_RESET_NTF Received status nfc_state : 0x%x : 0x%x",
-                       status, nfc_cb.nfc_state);
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+          "CORE_RESET_NTF Received status nfc_state : 0x%x : 0x%x", status,
+          nfc_cb.nfc_state);
       nfc_stop_timer(&nfc_cb.nci_wait_rsp_timer);
       p++;
       STREAM_TO_UINT8(nfc_cb.nci_version, p);
-      NFC_TRACE_DEBUG1(" CORE_RESET_NTF nci_version%x", nfc_cb.nci_version);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf(" CORE_RESET_NTF nci_version%x", nfc_cb.nci_version);
       status = NCI_STATUS_OK;
     } else {
       /* CORE_RESET_NTF received error case , trigger recovery*/
-      NFC_TRACE_DEBUG2("CORE_RESET_NTF Received status nfc_state : 0x%x : 0x%x",
-                       status, nfc_cb.nfc_state);
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+          "CORE_RESET_NTF Received status nfc_state : 0x%x : 0x%x", status,
+          nfc_cb.nfc_state);
       nfc_ncif_cmd_timeout();
       status = NCI_STATUS_FAILED;
     }
@@ -1338,7 +1362,8 @@
       nfc_reset_all_conn_cbs();
     }
   } else {
-    NFC_TRACE_DEBUG1("CORE_RESET_RSP len :0x%x ", *p_len);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("CORE_RESET_RSP len :0x%x ", *p_len);
     if ((*p_len) == NCI_CORE_RESET_RSP_LEN(NCI_VERSION_2_0)) {
       wait_for_ntf = TRUE;
     } else if ((*p_len) == NCI_CORE_RESET_RSP_LEN(NCI_VERSION_1_0)) {
@@ -1364,7 +1389,7 @@
         nci_snd_core_init(NCI_VERSION_2_0);
     }
   } else {
-    NFC_TRACE_ERROR0("Failed to reset NFCC");
+    LOG(ERROR) << StringPrintf("Failed to reset NFCC");
     nfc_enabled(status, NULL);
   }
 }
@@ -1391,12 +1416,16 @@
       nci_snd_core_reset(NCI_RESET_TYPE_RESET_CFG);
     } else {
       p_cb->id = NFC_RF_CONN_ID;
+      // check scbr bit as per NCI 2.0 spec
+      nfc_cb.isScbrSupported = p[5] & NCI_SCBR_MASK;
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("scbr support: 0x%x", nfc_cb.isScbrSupported);
       p_cb->act_protocol = NCI_PROTOCOL_UNKNOWN;
 
       nfc_set_state(NFC_STATE_W4_POST_INIT_CPLT);
 
       nfc_cb.p_nci_init_rsp = p_msg;
-      nfc_cb.p_hal->core_initialized(p_msg->len - p_msg->offset, p);
+      nfc_cb.p_hal->core_initialized(p_msg->len, p);
     }
   } else {
     if (nfc_cb.nci_version == NCI_VERSION_UNKNOWN) {
@@ -1512,7 +1541,8 @@
             if ((data_cevt.status != NFC_STATUS_OK) &&
                 ((data_cevt.status >= T2T_STATUS_OK_1_BIT) &&
                  (data_cevt.status <= T2T_STATUS_OK_7_BIT))) {
-              NFC_TRACE_DEBUG1("%s: T2T tag data xchange", __func__);
+              DLOG_IF(INFO, nfc_debug_enabled)
+                  << StringPrintf("%s: T2T tag data xchange", __func__);
               data_cevt.status = NFC_STATUS_OK;
             }
           }
@@ -1524,7 +1554,9 @@
           data_cevt.status = *(p + p_evt->offset + p_evt->len);
         }
       }
-      (*p_cb->p_cback)(p_cb->conn_id, NFC_DATA_CEVT, (tNFC_CONN*)&data_cevt);
+      tNFC_CONN nfc_conn;
+      nfc_conn.data = data_cevt;
+      (*p_cb->p_cback)(p_cb->conn_id, NFC_DATA_CEVT, &nfc_conn);
       p_evt = NULL;
     }
   }
@@ -1552,14 +1584,19 @@
   uint16_t len;
 
   pp = (uint8_t*)(p_msg + 1) + p_msg->offset;
-  NFC_TRACE_DEBUG3("nfc_ncif_proc_data 0x%02x%02x%02x", pp[0], pp[1], pp[2]);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfc_ncif_proc_data 0x%02x%02x%02x", pp[0], pp[1], pp[2]);
   NCI_DATA_PRS_HDR(pp, pbf, cid, len);
   p_cb = nfc_find_conn_cb_by_conn_id(cid);
   if (p_cb && (p_msg->len >= NCI_DATA_HDR_SIZE)) {
-    NFC_TRACE_DEBUG1("nfc_ncif_proc_data len:%d", len);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("nfc_ncif_proc_data len:%d", len);
 
     p_msg->layer_specific = 0;
-    if (pbf) p_msg->layer_specific = NFC_RAS_FRAGMENTED;
+    if (pbf) {
+      NFC_SetReassemblyFlag(true);
+      p_msg->layer_specific = NFC_RAS_FRAGMENTED;
+    }
     p_last = (NFC_HDR*)GKI_getlast(&p_cb->rx_q);
     if (p_last && (p_last->layer_specific & NFC_RAS_FRAGMENTED)) {
       /* last data buffer is not last fragment, append this new packet to the
@@ -1602,7 +1639,8 @@
         p_last->len += len;
         /* do not need to update pbf and len in NCI header.
          * They are stripped off at NFC_DATA_CEVT and len may exceed 255 */
-        NFC_TRACE_DEBUG1("nfc_ncif_proc_data len:%d", p_last->len);
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("nfc_ncif_proc_data len:%d", p_last->len);
         p_last->layer_specific = p_msg->layer_specific;
         GKI_freebuf(p_msg);
 #ifdef DISP_NCI
@@ -1647,7 +1685,8 @@
 *******************************************************************************/
 bool nfc_ncif_proc_proprietary_rsp(uint8_t mt, uint8_t gid, uint8_t oid) {
   bool stat = FALSE;
-  NFC_TRACE_DEBUG4("%s: mt=%u, gid=%u, oid=%u", __func__, mt, gid, oid);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("%s: mt=%u, gid=%u, oid=%u", __func__, mt, gid, oid);
 
   switch (mt) {
     case NCI_MT_DATA:
@@ -1679,6 +1718,27 @@
       stat = TRUE;
       break;
   }
-  NFC_TRACE_DEBUG2("%s: exit status=%u", __func__, stat);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("%s: exit status=%u", __func__, stat);
   return stat;
 }
+
+/*******************************************************************************
+** Function         nfc_mode_set_ntf_timeout
+**
+** Description      This function is invoked on mode set ntf timeout
+**
+** Returns          void
+**
+*******************************************************************************/
+void nfc_mode_set_ntf_timeout() {
+  LOG(ERROR) << StringPrintf("%s", __func__);
+  tNFC_RESPONSE nfc_response;
+  nfc_response.mode_set.status = NCI_STATUS_FAILED;
+  nfc_response.mode_set.nfcee_id = *nfc_cb.last_cmd;
+  nfc_response.mode_set.mode = NCI_NFCEE_MD_DEACTIVATE;
+
+  tNFC_RESPONSE_CBACK* p_cback = nfc_cb.p_resp_cback;
+  tNFC_RESPONSE_EVT event = NFC_NFCEE_MODE_SET_REVT;
+  if (p_cback) (*p_cback)(event, &nfc_response);
+}
diff --git a/src/nfc/nfc/nfc_task.c b/src/nfc/nfc/nfc_task.cc
similarity index 91%
rename from src/nfc/nfc/nfc_task.c
rename to src/nfc/nfc/nfc_task.cc
index 3cd9c7a..bf0a7a7 100644
--- a/src/nfc/nfc/nfc_task.c
+++ b/src/nfc/nfc/nfc_task.cc
@@ -22,14 +22,16 @@
  *
  ******************************************************************************/
 #include <string.h>
-#include "bt_types.h"
-#include "gki.h"
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "nfc_target.h"
 
+#include "bt_types.h"
 #include "ce_int.h"
+#include "gki.h"
 #include "nci_hmsgs.h"
-#include "nfc_api.h"
-#include "nfc_hal_api.h"
 #include "nfc_int.h"
 #include "rw_int.h"
 #if (NFC_RW_ONLY == FALSE)
@@ -39,7 +41,10 @@
 #endif
 
 #include "nfa_dm_int.h"
-#include "nfa_sys.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 /*******************************************************************************
 **
@@ -118,11 +123,14 @@
       case NFC_TTYPE_WAIT_2_DEACTIVATE:
         nfc_wait_2_deactivate_timeout();
         break;
-
+      case NFC_TTYPE_WAIT_MODE_SET_NTF:
+        nfc_mode_set_ntf_timeout();
+        break;
       default:
-        NFC_TRACE_DEBUG2("nfc_process_timer_evt: timer:0x%x event (0x%04x)",
-                         p_tle, p_tle->event);
-        NFC_TRACE_DEBUG1(
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("nfc_process_timer_evt: timer:0x%p event (0x%04x)",
+                            p_tle, p_tle->event);
+        DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
             "nfc_process_timer_evt: unhandled timer event (0x%04x)",
             p_tle->event);
     }
@@ -245,7 +253,7 @@
         rw_t1t_process_timeout(p_tle);
         break;
       case NFC_TTYPE_RW_T2T_RESPONSE:
-        rw_t2t_process_timeout(p_tle);
+        rw_t2t_process_timeout();
         break;
       case NFC_TTYPE_RW_T3T_RESPONSE:
         rw_t3t_process_timeout(p_tle);
@@ -268,7 +276,7 @@
         break;
 #endif
       default:
-        NFC_TRACE_DEBUG1(
+        DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
             "nfc_process_quick_timer_evt: unhandled timer event (0x%04x)",
             p_tle->event);
         break;
@@ -329,16 +337,15 @@
 ** Returns          nothing
 **
 *******************************************************************************/
-uint32_t nfc_task(uint32_t param) {
+uint32_t nfc_task(__attribute__((unused)) uint32_t arg) {
   uint16_t event;
   NFC_HDR* p_msg;
   bool free_buf;
 
   /* Initialize the nfc control block */
   memset(&nfc_cb, 0, sizeof(tNFC_CB));
-  nfc_cb.trace_level = NFC_INITIAL_TRACE_LEVEL;
 
-  NFC_TRACE_DEBUG0("NFC_TASK started.");
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("NFC_TASK started.");
 
   /* main loop */
   while (true) {
@@ -348,7 +355,8 @@
     }
     /* Handle NFC_TASK_EVT_TRANSPORT_READY from NFC HAL */
     if (event & NFC_TASK_EVT_TRANSPORT_READY) {
-      NFC_TRACE_DEBUG0("NFC_TASK got NFC_TASK_EVT_TRANSPORT_READY.");
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("NFC_TASK got NFC_TASK_EVT_TRANSPORT_READY.");
 
       /* Reset the NFC controller. */
       nfc_set_state(NFC_STATE_CORE_INIT);
@@ -383,8 +391,8 @@
             break;
 
           default:
-            NFC_TRACE_DEBUG1("nfc_task: unhandle mbox message, event=%04x",
-                             p_msg->event);
+            DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+                "nfc_task: unhandle mbox message, event=%04x", p_msg->event);
             break;
         }
 
@@ -415,7 +423,7 @@
     }
   }
 
-  NFC_TRACE_DEBUG0("nfc_task terminated");
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("nfc_task terminated");
 
   GKI_exit_task(GKI_get_taskid());
   return 0;
diff --git a/src/nfc/nfc/nfc_test.c b/src/nfc/nfc/nfc_test.cc
similarity index 100%
rename from src/nfc/nfc/nfc_test.c
rename to src/nfc/nfc/nfc_test.cc
diff --git a/src/nfc/nfc/nfc_utils.c b/src/nfc/nfc/nfc_utils.cc
similarity index 93%
rename from src/nfc/nfc/nfc_utils.c
rename to src/nfc/nfc/nfc_utils.cc
index 290af0f..93fa7c6 100644
--- a/src/nfc/nfc/nfc_utils.c
+++ b/src/nfc/nfc/nfc_utils.cc
@@ -23,12 +23,17 @@
  *  (callback). On the transmit side, it manages the command transmission.
  *
  ******************************************************************************/
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "bt_types.h"
 #include "nfc_api.h"
-#include "nfc_target.h"
-
 #include "nfc_int.h"
 
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
+
 /*******************************************************************************
 **
 ** Function         nfc_alloc_conn_cb
@@ -74,7 +79,8 @@
   p_cb->conn_id = conn_id;
   handle = (uint8_t)(p_cb - nfc_cb.conn_cb + 1);
   nfc_cb.conn_id[conn_id] = handle;
-  NFC_TRACE_DEBUG2("nfc_set_conn_id conn_id:%d, handle:%d", conn_id, handle);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("nfc_set_conn_id conn_id:%d, handle:%d", conn_id, handle);
 }
 
 /*******************************************************************************
@@ -178,9 +184,12 @@
   deact.is_ntf = TRUE;
   for (xx = 0; xx < NCI_MAX_CONN_CBS; xx++, p_conn_cb++) {
     if (p_conn_cb->conn_id != NFC_ILLEGAL_CONN_ID) {
-      if (p_conn_cb->p_cback)
+      if (p_conn_cb->p_cback) {
+        tNFC_CONN nfc_conn;
+        nfc_conn.deactivate = deact;
         (*p_conn_cb->p_cback)(p_conn_cb->conn_id, NFC_DEACTIVATE_CEVT,
-                              (tNFC_CONN*)&deact);
+                              &nfc_conn);
+      }
       nfc_free_conn_cb(p_conn_cb);
     }
   }
diff --git a/src/nfc/nfc/nfc_vs.c b/src/nfc/nfc/nfc_vs.cc
similarity index 93%
rename from src/nfc/nfc/nfc_vs.c
rename to src/nfc/nfc/nfc_vs.cc
index 5e2548a..c23daf7 100644
--- a/src/nfc/nfc/nfc_vs.c
+++ b/src/nfc/nfc/nfc_vs.cc
@@ -24,11 +24,17 @@
  *
  ******************************************************************************/
 #include <string.h>
-#include "gki.h"
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "nfc_target.h"
 
+#include "gki.h"
 #include "nfc_int.h"
 
+using android::base::StringPrintf;
+
 /****************************************************************************
 ** Declarations
 ****************************************************************************/
@@ -87,7 +93,8 @@
 tNFC_STATUS NFC_SendRawVsCommand(NFC_HDR* p_data, tNFC_VS_CBACK* p_cback) {
   /* Validate parameters */
   if (p_data == NULL || (p_data->len > NCI_MAX_VSC_SIZE)) {
-    NFC_TRACE_ERROR1("buffer offset must be >= %d", NCI_VSC_MSG_HDR_SIZE);
+    LOG(ERROR) << StringPrintf("buffer offset must be >= %d",
+                               NCI_VSC_MSG_HDR_SIZE);
     if (p_data) GKI_freebuf(p_data);
     return NFC_STATUS_INVALID_PARAM;
   }
@@ -132,7 +139,8 @@
   /* Validate parameters */
   if ((p_data == NULL) || (p_data->offset < NCI_VSC_MSG_HDR_SIZE) ||
       (p_data->len > NCI_MAX_VSC_SIZE)) {
-    NFC_TRACE_ERROR1("buffer offset must be >= %d", NCI_VSC_MSG_HDR_SIZE);
+    LOG(ERROR) << StringPrintf("buffer offset must be >= %d",
+                               NCI_VSC_MSG_HDR_SIZE);
     if (p_data) GKI_freebuf(p_data);
     return NFC_STATUS_INVALID_PARAM;
   }
diff --git a/src/nfc/tags/ce_main.c b/src/nfc/tags/ce_main.cc
similarity index 80%
rename from src/nfc/tags/ce_main.c
rename to src/nfc/tags/ce_main.cc
index cf207cb..46e6955 100644
--- a/src/nfc/tags/ce_main.c
+++ b/src/nfc/tags/ce_main.cc
@@ -24,14 +24,19 @@
  *
  ******************************************************************************/
 #include <string.h>
-#include "bt_types.h"
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "nfc_target.h"
 
+#include "bt_types.h"
 #include "ce_api.h"
 #include "ce_int.h"
-#include "gki.h"
-#include "nci_hmsgs.h"
-#include "nfc_api.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 tCE_CB ce_cb;
 
@@ -39,7 +44,6 @@
 *******************************************************************************/
 void ce_init(void) {
   memset(&ce_cb, 0, sizeof(tCE_CB));
-  ce_cb.trace_level = NFC_INITIAL_TRACE_LEVEL;
 
   /* Initialize tag-specific fields of ce control block */
   ce_t3t_init();
@@ -67,7 +71,8 @@
       p = (uint8_t*)(p_data + 1) + p_data->offset;
       memcpy(p, p_raw_data, data_len);
       p_data->len = data_len;
-      CE_TRACE_EVENT1("CE SENT raw frame (0x%x)", data_len);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("CE SENT raw frame (0x%x)", data_len);
       status = NFC_SendData(NFC_RF_CONN_ID, p_data);
     }
   }
@@ -89,7 +94,8 @@
   tNFC_STATUS status = NFC_STATUS_FAILED;
   tNFC_PROTOCOL protocol = p_activate_params->protocol;
 
-  CE_TRACE_API1("CE_SetActivatedTagType protocol:%d", protocol);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("CE_SetActivatedTagType protocol:%d", protocol);
 
   switch (protocol) {
     case NFC_PROTOCOL_T1T:
@@ -110,7 +116,7 @@
       break;
 
     default:
-      CE_TRACE_ERROR0("CE_SetActivatedTagType Invalid protocol");
+      LOG(ERROR) << StringPrintf("CE_SetActivatedTagType Invalid protocol");
       return NFC_STATUS_FAILED;
   }
 
@@ -120,20 +126,3 @@
   }
   return status;
 }
-
-/*******************************************************************************
-**
-** Function         CE_SetTraceLevel
-**
-** Description      This function sets the trace level for Card Emulation mode.
-**                  If called with a value of 0xFF,
-**                  it simply returns the current trace level.
-**
-** Returns          The new or current trace level
-**
-*******************************************************************************/
-uint8_t CE_SetTraceLevel(uint8_t new_level) {
-  if (new_level != 0xFF) ce_cb.trace_level = new_level;
-
-  return (ce_cb.trace_level);
-}
diff --git a/src/nfc/tags/ce_t3t.c b/src/nfc/tags/ce_t3t.cc
similarity index 88%
rename from src/nfc/tags/ce_t3t.c
rename to src/nfc/tags/ce_t3t.cc
index cd1ae00..461b9ed 100644
--- a/src/nfc/tags/ce_t3t.c
+++ b/src/nfc/tags/ce_t3t.cc
@@ -23,16 +23,20 @@
  *
  ******************************************************************************/
 #include <string.h>
-#include "bt_types.h"
-#include "nfc_target.h"
-#include "trace_api.h"
 
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
+#include "nfc_target.h"
+
+#include "bt_types.h"
 #include "ce_api.h"
 #include "ce_int.h"
-#include "gki.h"
-#include "nfc_api.h"
-#include "nfc_int.h"
-#include "tags_int.h"
+#include "trace_api.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 enum {
   CE_T3T_COMMAND_INVALID,
@@ -90,12 +94,8 @@
   UINT8_TO_STREAM(p, (p_msg->len + 1));
   p_msg->len += 1; /* Increment len to include SoD */
 
-#if (BT_TRACE_PROTOCOL == TRUE)
-  DispT3TagMessage(p_msg, false);
-#endif
-
   if (NFC_SendData(NFC_RF_CONN_ID, p_msg) != NFC_STATUS_OK) {
-    CE_TRACE_ERROR0("ce_t3t_send_to_lower (): NFC_SendData () failed");
+    LOG(ERROR) << StringPrintf("failed");
   }
 }
 
@@ -182,7 +182,8 @@
     p_rsp_msg->len = (uint16_t)(p_dst - p_rsp_start);
     ce_t3t_send_to_lower(p_rsp_msg);
   } else {
-    CE_TRACE_ERROR0("CE: Unable to allocat buffer for response message");
+    LOG(ERROR) << StringPrintf(
+        "CE: Unable to allocat buffer for response message");
   }
 }
 
@@ -206,7 +207,6 @@
   tCE_T3T_NDEF_INFO ndef_info;
   tNFC_STATUS nfc_status = NFC_STATUS_OK;
   uint8_t update_flags = 0;
-  tCE_UPDATE_INFO update_info;
 
   /* If in idle state, notify app that update is starting */
   if (p_cb->state == CE_T3T_STATE_IDLE) {
@@ -230,7 +230,7 @@
     /* Reject UPDATE command if service code=T3T_MSG_NDEF_SC_RO */
     if (service_code == T3T_MSG_NDEF_SC_RO) {
       /* Error: invalid block number to update */
-      CE_TRACE_ERROR0("CE: UPDATE request using read-only service");
+      LOG(ERROR) << StringPrintf("CE: UPDATE request using read-only service");
       nfc_status = NFC_STATUS_FAILED;
       break;
     }
@@ -238,18 +238,19 @@
     /* Check for NDEF */
     if (service_code == T3T_MSG_NDEF_SC_RW) {
       if (p_cb->cur_cmd.num_blocks > p_cb->ndef_info.nbw) {
-        CE_TRACE_ERROR2(
+        LOG(ERROR) << StringPrintf(
             "CE: Requested too many blocks to update (requested: %i, max: %i)",
             p_cb->cur_cmd.num_blocks, p_cb->ndef_info.nbw);
         nfc_status = NFC_STATUS_FAILED;
         break;
       } else if (p_cb->ndef_info.rwflag == T3T_MSG_NDEF_RWFLAG_RO) {
-        CE_TRACE_ERROR0("CE: error: write-request to read-only NDEF message.");
+        LOG(ERROR) << StringPrintf(
+            "CE: error: write-request to read-only NDEF message.");
         nfc_status = NFC_STATUS_FAILED;
         break;
       } else if (block_number == 0) {
-        CE_TRACE_DEBUG2("CE: Update sc 0x%04x block %i.", service_code,
-                        block_number);
+        DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+            "CE: Update sc 0x%04x block %i.", service_code, block_number);
 
         /* Special caes: NDEF block0 is the ndef attribute block */
         p_temp = p_block_data;
@@ -271,7 +272,8 @@
 
         /* Compare calcuated checksum with received checksum */
         if (checksum != checksum_rx) {
-          CE_TRACE_ERROR0("CE: Checksum failed for NDEF attribute block.");
+          LOG(ERROR) << StringPrintf(
+              "CE: Checksum failed for NDEF attribute block.");
           nfc_status = NFC_STATUS_FAILED;
         } else {
           /* Update NDEF attribute block (only allowed to update current length
@@ -289,13 +291,13 @@
           }
         }
       } else {
-        CE_TRACE_DEBUG2("CE: Udpate sc 0x%04x block %i.", service_code,
-                        block_number);
+        DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+            "CE: Udpate sc 0x%04x block %i.", service_code, block_number);
 
         /* Verify that block_number is within NDEF memory */
         if (block_number > p_cb->ndef_info.nmaxb) {
           /* Error: invalid block number to update */
-          CE_TRACE_ERROR2(
+          LOG(ERROR) << StringPrintf(
               "CE: Requested invalid NDEF block number to update %i (max is "
               "%i).",
               block_number, p_cb->ndef_info.nmaxb);
@@ -314,8 +316,8 @@
       }
     } else {
       /* Error: invalid service code */
-      CE_TRACE_ERROR1("CE: Requested invalid service code: 0x%04x.",
-                      service_code);
+      LOG(ERROR) << StringPrintf("CE: Requested invalid service code: 0x%04x.",
+                                 service_code);
       nfc_status = NFC_STATUS_FAILED;
       break;
     }
@@ -344,11 +346,12 @@
 
   if (update_flags & CE_T3T_UPDATE_FL_NDEF_UPDATE_CPLT) {
     /* NDEF attribute got updated with WriteF=FALSE */
-    update_info.status = nfc_status;
-    update_info.p_data = p_cb->ndef_info.p_scratch_buf;
-    update_info.length = p_cb->ndef_info.scratch_ln;
+    tCE_DATA ce_data;
+    ce_data.update_info.status = nfc_status;
+    ce_data.update_info.p_data = p_cb->ndef_info.p_scratch_buf;
+    ce_data.update_info.length = p_cb->ndef_info.scratch_ln;
     p_cb->state = CE_T3T_STATE_IDLE;
-    p_ce_cb->p_cback(CE_T3T_NDEF_UPDATE_CPLT_EVT, (tCE_DATA*)&update_info);
+    p_ce_cb->p_cback(CE_T3T_NDEF_UPDATE_CPLT_EVT, &ce_data);
   }
 
   GKI_freebuf(p_cmd_msg);
@@ -412,7 +415,7 @@
         /* Verify Nbr (NDEF only) */
         if (p_cb->cur_cmd.num_blocks > p_cb->ndef_info.nbr) {
           /* Error: invalid number of blocks to check */
-          CE_TRACE_ERROR2(
+          LOG(ERROR) << StringPrintf(
               "CE: Requested too many blocks to check (requested: %i, max: %i)",
               p_cb->cur_cmd.num_blocks, p_cb->ndef_info.nbr);
 
@@ -456,8 +459,8 @@
             /* Invalid block number */
             p_dst = p_status;
 
-            CE_TRACE_ERROR1("CE: Requested block number to check %i.",
-                            block_number);
+            LOG(ERROR) << StringPrintf(
+                "CE: Requested block number to check %i.", block_number);
 
             /* Error: invalid number of blocks to check */
             UINT8_TO_STREAM(p_dst, T3T_MSG_RSP_STATUS_ERROR);
@@ -483,8 +486,8 @@
         }
       } else {
         /* Error: invalid service code */
-        CE_TRACE_ERROR1("CE: Requested invalid service code: 0x%04x.",
-                        service_code);
+        LOG(ERROR) << StringPrintf(
+            "CE: Requested invalid service code: 0x%04x.", service_code);
 
         p_dst = p_status;
         UINT8_TO_STREAM(p_dst, T3T_MSG_RSP_STATUS_ERROR);
@@ -496,7 +499,8 @@
     p_rsp_msg->len = (uint16_t)(p_dst - p_rsp_start);
     ce_t3t_send_to_lower(p_rsp_msg);
   } else {
-    CE_TRACE_ERROR0("CE: Unable to allocat buffer for response message");
+    LOG(ERROR) << StringPrintf(
+        "CE: Unable to allocat buffer for response message");
   }
 
   GKI_freebuf(p_cmd_msg);
@@ -583,7 +587,7 @@
       case T3T_MSG_OPC_REQ_SERVICE_CMD:
       default:
         /* Unhandled command */
-        CE_TRACE_ERROR1("Unhandled CE opcode: %02x", cmd_id);
+        LOG(ERROR) << StringPrintf("Unhandled CE opcode: %02x", cmd_id);
         send_response = false;
         break;
     }
@@ -595,7 +599,8 @@
       GKI_freebuf(p_rsp_msg);
     }
   } else {
-    CE_TRACE_ERROR0("CE: Unable to allocat buffer for response message");
+    LOG(ERROR) << StringPrintf(
+        "CE: Unable to allocat buffer for response message");
   }
   GKI_freebuf(p_cmd_msg);
 }
@@ -609,7 +614,7 @@
 ** Returns          none
 **
 *******************************************************************************/
-void ce_t3t_data_cback(uint8_t conn_id, tNFC_DATA_CEVT* p_data) {
+void ce_t3t_data_cback(tNFC_DATA_CEVT* p_data) {
   tCE_CB* p_ce_cb = &ce_cb;
   tCE_T3T_MEM* p_cb = &p_ce_cb->mem.t3t;
   NFC_HDR* p_msg = p_data->p_data;
@@ -624,10 +629,6 @@
   uint8_t sod;
   uint8_t cmd_type;
 
-#if (BT_TRACE_PROTOCOL == TRUE)
-  DispT3TagMessage(p_msg, true);
-#endif
-
   /* If activate system code is not NDEF, or if no local NDEF contents was set,
    * then pass data up to the app */
   if ((p_cb->system_code != T3T_SYSTEM_CODE_NDEF) ||
@@ -640,8 +641,8 @@
 
   /* Verify that message contains at least Sod and cmd_id */
   if (p_msg->len < 2) {
-    CE_TRACE_ERROR1("CE: received invalid T3t message (invalid length: %i)",
-                    p_msg->len);
+    LOG(ERROR) << StringPrintf(
+        "CE: received invalid T3t message (invalid length: %i)", p_msg->len);
   } else {
     /* Get and validate command opcode */
     STREAM_TO_UINT8(sod, p);
@@ -650,7 +651,7 @@
     /* Valid command and message length */
     cmd_type = ce_t3t_is_valid_opcode(cmd_id);
     if (cmd_type == CE_T3T_COMMAND_INVALID) {
-      CE_TRACE_ERROR1(
+      LOG(ERROR) << StringPrintf(
           "CE: received invalid T3t message (invalid command: 0x%02X)", cmd_id);
     } else if (cmd_type == CE_T3T_COMMAND_FELICA) {
       ce_t3t_handle_non_nfc_forum_cmd(p_ce_cb, cmd_id, p_msg);
@@ -658,8 +659,9 @@
     } else {
       /* Verify that message contains at least NFCID2 and NUM services */
       if (p_msg->len < T3T_MSG_CMD_COMMON_HDR_LEN) {
-        CE_TRACE_ERROR1("CE: received invalid T3t message (invalid length: %i)",
-                        p_msg->len);
+        LOG(ERROR) << StringPrintf(
+            "CE: received invalid T3t message (invalid length: %i)",
+            p_msg->len);
       } else {
         /* Handle NFC_FORUM command (UPDATE or CHECK) */
         STREAM_TO_ARRAY(cmd_nfcid2, p, NCI_RF_F_UID_LEN);
@@ -670,17 +672,18 @@
             T3T_MSG_CMD_COMMON_HDR_LEN + 2 * p_cb->cur_cmd.num_services + 1;
 
         if (p_cb->state == CE_T3T_STATE_NOT_ACTIVATED) {
-          CE_TRACE_ERROR2(
+          LOG(ERROR) << StringPrintf(
               "CE: received command 0x%02X while in bad state (%i))", cmd_id,
               p_cb->state);
         } else if (memcmp(cmd_nfcid2, p_cb->local_nfcid2, NCI_RF_F_UID_LEN) !=
                    0) {
-          CE_TRACE_ERROR0("CE: received invalid T3t message (invalid NFCID2)");
+          LOG(ERROR) << StringPrintf(
+              "CE: received invalid T3t message (invalid NFCID2)");
           p_nfcid2 = cmd_nfcid2; /* respond with ERROR using the NFCID2 from the
                                     command message */
         } else if (p_msg->len < block_list_start_offset) {
           /* Does not have minimum (including number_of_blocks field) */
-          CE_TRACE_ERROR0("CE: incomplete message");
+          LOG(ERROR) << StringPrintf("CE: incomplete message");
         } else {
           /* Parse service code list */
           for (i = 0; i < p_cb->cur_cmd.num_services; i++) {
@@ -696,7 +699,7 @@
             /* Each entry is at lease 2 bytes long */
             if (remaining < 2) {
               /* Unexpected end of message (while reading block-list) */
-              CE_TRACE_ERROR0(
+              LOG(ERROR) << StringPrintf(
                   "CE: received invalid T3t message (unexpected end of "
                   "block-list)");
               block_list_ok = false;
@@ -710,7 +713,7 @@
             if ((bl0 & T3T_MSG_SERVICE_LIST_MASK) >=
                 p_cb->cur_cmd.num_services) {
               /* Invalid service code */
-              CE_TRACE_ERROR1(
+              LOG(ERROR) << StringPrintf(
                   "CE: received invalid T3t message (invalid service index: "
                   "%i)",
                   (bl0 & T3T_MSG_SERVICE_LIST_MASK));
@@ -719,7 +722,7 @@
             } else if ((!(bl0 & T3T_MSG_MASK_TWO_BYTE_BLOCK_DESC_FORMAT)) &&
                        (remaining < 3)) {
               /* Unexpected end of message (while reading 3-byte entry) */
-              CE_TRACE_ERROR0(
+              LOG(ERROR) << StringPrintf(
                   "CE: received invalid T3t message (unexpected end of "
                   "block-list)");
               block_list_ok = false;
@@ -739,9 +742,9 @@
               /* This is a CHECK command. Sanity check: there shouldn't be any
                * more data remaining after reading block list */
               if (remaining) {
-                CE_TRACE_ERROR1(
-                    "CE: unexpected data after after CHECK command (#i bytes)",
-                    remaining);
+                LOG(ERROR) << StringPrintf(
+                    "CE: unexpected data after after CHECK command (%u bytes)",
+                    (unsigned int)remaining);
               }
               ce_t3t_handle_check_cmd(p_ce_cb, p_msg);
               msg_processed = true;
@@ -749,7 +752,7 @@
               /* This is an UPDATE command. See if message contains all the
                * expected block data */
               if (remaining < p_cb->cur_cmd.num_blocks * T3T_MSG_BLOCKSIZE) {
-                CE_TRACE_ERROR0("CE: unexpected end of block-data");
+                LOG(ERROR) << StringPrintf("CE: unexpected end of block-data");
               } else {
                 ce_t3t_handle_update_cmd(p_ce_cb, p_msg);
                 msg_processed = true;
@@ -782,7 +785,8 @@
                        tNFC_CONN* p_data) {
   tCE_T3T_MEM* p_cb = &ce_cb.mem.t3t;
 
-  CE_TRACE_DEBUG2("ce_t3t_conn_cback: conn_id=%i, evt=%i", conn_id, event);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("ce_t3t_conn_cback: conn_id=%i, evt=%i", conn_id, event);
 
   switch (event) {
     case NFC_CONN_CREATE_CEVT:
@@ -794,7 +798,7 @@
 
     case NFC_DATA_CEVT:
       if (p_data->data.status == NFC_STATUS_OK) {
-        ce_t3t_data_cback(conn_id, &p_data->data);
+        ce_t3t_data_cback(&p_data->data);
       }
       break;
 
@@ -821,7 +825,7 @@
                           uint8_t nfcid2[NCI_RF_F_UID_LEN]) {
   tCE_T3T_MEM* p_cb = &ce_cb.mem.t3t;
 
-  CE_TRACE_DEBUG0("ce_select_t3t ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_cb->state = CE_T3T_STATE_IDLE;
   p_cb->system_code = system_code;
@@ -845,13 +849,14 @@
                                   uint8_t* p_scratch_buf) {
   tCE_T3T_MEM* p_cb = &ce_cb.mem.t3t;
 
-  CE_TRACE_API3("CE_T3tSetContent: ro=%i, size_max=%i, size_current=%i",
-                read_only, size_max, size_current);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("CE_T3tSetContent: ro=%i, size_max=%i, size_current=%i",
+                      read_only, size_max, size_current);
 
   /* Verify scratch buffer was provided if NDEF message is read/write */
   if ((!read_only) && (!p_scratch_buf)) {
-    CE_TRACE_ERROR0(
-        "CE_T3tSetLocalNDEFMsg (): p_scratch_buf cannot be NULL if not "
+    LOG(ERROR) << StringPrintf(
+        "p_scratch_buf cannot be NULL if not "
         "read-only");
     return NFC_STATUS_FAILED;
   }
@@ -897,12 +902,13 @@
 tNFC_STATUS CE_T3tSetLocalNDefParams(uint8_t nbr, uint8_t nbw) {
   tCE_T3T_MEM* p_cb = &ce_cb.mem.t3t;
 
-  CE_TRACE_API2("CE_T3tSetLocalNDefParams: nbr=%i, nbw=%i", nbr, nbw);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("CE_T3tSetLocalNDefParams: nbr=%i, nbw=%i", nbr, nbw);
 
   /* Validate */
   if ((nbr > T3T_MSG_NUM_BLOCKS_CHECK_MAX) ||
       (nbw > T3T_MSG_NUM_BLOCKS_UPDATE_MAX) || (nbr < 1) || (nbw < 1)) {
-    CE_TRACE_ERROR0("CE_T3tSetLocalNDefParams: invalid params");
+    LOG(ERROR) << StringPrintf("CE_T3tSetLocalNDefParams: invalid params");
     return NFC_STATUS_FAILED;
   }
 
@@ -928,13 +934,15 @@
   NFC_HDR* p_rsp_msg;
   uint8_t *p_dst, *p_rsp_start;
 
-  CE_TRACE_API3("CE_T3tCheckRsp: status1=0x%02X, status2=0x%02X, num_blocks=%i",
-                status1, status2, num_blocks);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "CE_T3tCheckRsp: status1=0x%02X, status2=0x%02X, num_blocks=%i", status1,
+      status2, num_blocks);
 
   /* Validate num_blocks */
   if (num_blocks > T3T_MSG_NUM_BLOCKS_CHECK_MAX) {
-    CE_TRACE_ERROR2("CE_T3tCheckRsp num_blocks (%i) exceeds maximum (%i)",
-                    num_blocks, T3T_MSG_NUM_BLOCKS_CHECK_MAX);
+    LOG(ERROR) << StringPrintf(
+        "CE_T3tCheckRsp num_blocks (%i) exceeds maximum (%i)", num_blocks,
+        T3T_MSG_NUM_BLOCKS_CHECK_MAX);
     return (NFC_STATUS_FAILED);
   }
 
@@ -960,7 +968,8 @@
     p_rsp_msg->len = (uint16_t)(p_dst - p_rsp_start);
     ce_t3t_send_to_lower(p_rsp_msg);
   } else {
-    CE_TRACE_ERROR0("CE: Unable to allocate buffer for response message");
+    LOG(ERROR) << StringPrintf(
+        "CE: Unable to allocate buffer for response message");
   }
 
   return (retval);
@@ -979,8 +988,8 @@
   tNFC_STATUS retval = NFC_STATUS_OK;
   tCE_CB* p_ce_cb = &ce_cb;
 
-  CE_TRACE_API2("CE_T3tUpdateRsp: status1=0x%02X, status2=0x%02X", status1,
-                status2);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "CE_T3tUpdateRsp: status1=0x%02X, status2=0x%02X", status1, status2);
   ce_t3t_send_rsp(p_ce_cb, NULL, T3T_MSG_OPC_UPDATE_RSP, status1, status2);
 
   return (retval);
diff --git a/src/nfc/tags/ce_t4t.c b/src/nfc/tags/ce_t4t.cc
similarity index 77%
rename from src/nfc/tags/ce_t4t.c
rename to src/nfc/tags/ce_t4t.cc
index f204c8a..9b859e2 100644
--- a/src/nfc/tags/ce_t4t.c
+++ b/src/nfc/tags/ce_t4t.cc
@@ -24,16 +24,22 @@
  ******************************************************************************/
 #include <log/log.h>
 #include <string.h>
-#include "bt_types.h"
-#include "nfc_target.h"
-#include "trace_api.h"
 
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
+#include "nfc_target.h"
+
+#include "bt_types.h"
 #include "ce_api.h"
 #include "ce_int.h"
-#include "gki.h"
-#include "nfc_api.h"
 #include "nfc_int.h"
 #include "tags_int.h"
+#include "trace_api.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 #if (CE_TEST_INCLUDED == TRUE) /* test only */
 bool mapping_aid_test_enabled = false;
@@ -51,12 +57,8 @@
 **
 *******************************************************************************/
 static bool ce_t4t_send_to_lower(NFC_HDR* p_r_apdu) {
-#if (BT_TRACE_PROTOCOL == TRUE)
-  DispCET4Tags(p_r_apdu, false);
-#endif
-
   if (NFC_SendData(NFC_RF_CONN_ID, p_r_apdu) != NFC_STATUS_OK) {
-    CE_TRACE_ERROR0("ce_t4t_send_to_lower (): NFC_SendData () failed");
+    LOG(ERROR) << StringPrintf("failed");
     return false;
   }
   return true;
@@ -75,12 +77,12 @@
   NFC_HDR* p_r_apdu;
   uint8_t* p;
 
-  CE_TRACE_DEBUG1("ce_t4t_send_status (): Status:0x%04X", status);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("Status:0x%04X", status);
 
   p_r_apdu = (NFC_HDR*)GKI_getpoolbuf(NFC_CE_POOL_ID);
 
   if (!p_r_apdu) {
-    CE_TRACE_ERROR0("ce_t4t_send_status (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return false;
   }
 
@@ -109,10 +111,10 @@
 static bool ce_t4t_select_file(uint16_t file_id) {
   tCE_T4T_MEM* p_t4t = &ce_cb.mem.t4t;
 
-  CE_TRACE_DEBUG1("ce_t4t_select_file (): FileID:0x%04X", file_id);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("FileID:0x%04X", file_id);
 
   if (file_id == T4T_CC_FILE_ID) {
-    CE_TRACE_DEBUG0("ce_t4t_select_file (): Select CC file");
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("Select CC file");
 
     p_t4t->status |= CE_T4T_STATUS_CC_FILE_SELECTED;
     p_t4t->status &= ~(CE_T4T_STATUS_NDEF_SELECTED);
@@ -121,8 +123,8 @@
   }
 
   if (file_id == CE_T4T_MANDATORY_NDEF_FILE_ID) {
-    CE_TRACE_DEBUG3(
-        "ce_t4t_select_file (): NLEN:0x%04X, MaxFileSize:0x%04X, "
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "NLEN:0x%04X, MaxFileSize:0x%04X, "
         "WriteAccess:%s",
         p_t4t->nlen, p_t4t->max_file_size,
         (p_t4t->status & CE_T4T_STATUS_NDEF_FILE_READ_ONLY ? "RW" : "RO"));
@@ -132,8 +134,7 @@
 
     return true;
   } else {
-    CE_TRACE_ERROR1("ce_t4t_select_file (): Cannot find file ID (0x%04X)",
-                    file_id);
+    LOG(ERROR) << StringPrintf("Cannot find file ID (0x%04X)", file_id);
 
     p_t4t->status &= ~(CE_T4T_STATUS_CC_FILE_SELECTED);
     p_t4t->status &= ~(CE_T4T_STATUS_NDEF_SELECTED);
@@ -156,8 +157,8 @@
   uint8_t *p_src = NULL, *p_dst;
   NFC_HDR* p_r_apdu;
 
-  CE_TRACE_DEBUG3(
-      "ce_t4t_read_binary (): Offset:0x%04X, Length:0x%04X, selected status = "
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "Offset:0x%04X, Length:0x%04X, selected status = "
       "0x%02X",
       offset, length, p_t4t->status);
 
@@ -174,7 +175,7 @@
     p_r_apdu = (NFC_HDR*)GKI_getpoolbuf(NFC_CE_POOL_ID);
 
     if (!p_r_apdu) {
-      CE_TRACE_ERROR0("ce_t4t_read_binary (): Cannot allocate buffer");
+      LOG(ERROR) << StringPrintf("Cannot allocate buffer");
       return false;
     }
 
@@ -217,7 +218,7 @@
     }
     return true;
   } else {
-    CE_TRACE_ERROR0("ce_t4t_read_binary (): No selected file");
+    LOG(ERROR) << StringPrintf("No selected file");
 
     if (!ce_t4t_send_status(T4T_RSP_CMD_NOT_ALLOWED)) {
       return false;
@@ -243,8 +244,8 @@
   uint16_t starting_offset;
   tCE_DATA ce_data;
 
-  CE_TRACE_DEBUG3(
-      "ce_t4t_update_binary (): Offset:0x%04X, Length:0x%04X, selected status "
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "Offset:0x%04X, Length:0x%04X, selected status "
       "= 0x%02X",
       offset, length, p_t4t->status);
 
@@ -278,8 +279,8 @@
       ce_data.update_info.p_data = p_t4t->p_scratch_buf;
 
       (*ce_cb.p_cback)(CE_T4T_NDEF_UPDATE_CPLT_EVT, &ce_data);
-      CE_TRACE_DEBUG0(
-          "ce_t4t_update_binary (): Sent CE_T4T_NDEF_UPDATE_CPLT_EVT");
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("Sent CE_T4T_NDEF_UPDATE_CPLT_EVT");
     }
 
     p_t4t->status &= ~(CE_T4T_STATUS_NDEF_FILE_UPDATING);
@@ -318,7 +319,7 @@
   tCE_T4T_MEM* p_t4t = &ce_cb.mem.t4t;
   uint8_t* p;
 
-  CE_TRACE_DEBUG1("ce_t4t_set_version_in_cc (): version = 0x%02X", version);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("version = 0x%02X", version);
 
   p = p_t4t->cc_file + T4T_VERSION_OFFSET_IN_CC;
 
@@ -338,7 +339,7 @@
   uint8_t data_len;
   uint16_t file_id, status_words;
 
-  CE_TRACE_DEBUG0("ce_t4t_process_select_file_cmd ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_cmd++; /* skip P2 */
 
@@ -383,7 +384,7 @@
   tCE_DATA ce_data;
   uint8_t xx;
 
-  CE_TRACE_DEBUG0("ce_t4t_process_select_app_cmd ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_cmd++; /* skip P2 */
 
@@ -392,7 +393,7 @@
 
   /*CLS+INS+P1+P2+Lc+Data*/
   if (data_len > (p_c_apdu->len - T4T_CMD_MAX_HDR_SIZE)) {
-    CE_TRACE_ERROR0("Wrong length in ce_t4t_process_select_app_cmd");
+    LOG(ERROR) << StringPrintf("Wrong length in ce_t4t_process_select_app_cmd");
     android_errorWriteLog(0x534e4554, "115635871");
     ce_t4t_send_status(T4T_RSP_WRONG_LENGTH);
     GKI_freebuf(p_c_apdu);
@@ -433,8 +434,8 @@
     ce_cb.mem.t4t.status &= ~(CE_T4T_STATUS_WILDCARD_AID_SELECTED);
     ce_cb.mem.t4t.status |= CE_T4T_STATUS_REG_AID_SELECTED;
 
-    CE_TRACE_DEBUG4(
-        "ce_t4t_process_select_app_cmd (): Registered AID[%02X%02X%02X%02X...] "
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "Registered AID[%02X%02X%02X%02X...] "
         "is selected",
         ce_cb.mem.t4t.reg_aid[ce_cb.mem.t4t.selected_aid_idx].aid[0],
         ce_cb.mem.t4t.reg_aid[ce_cb.mem.t4t.selected_aid_idx].aid[1],
@@ -462,8 +463,7 @@
       ce_t4t_set_version_in_cc(T4T_VERSION_2_0);
       status_words = T4T_RSP_CMD_CMPLTED;
     } else {
-      CE_TRACE_DEBUG0(
-          "ce_t4t_process_select_app_cmd (): Not found matched AID");
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("Not found matched AID");
       status_words = T4T_RSP_NOT_FOUND;
     }
   } else if (ce_cb.mem.t4t.p_wildcard_aid_cback) {
@@ -478,12 +478,12 @@
     ce_data.raw_frame.aid_handle = CE_T4T_WILDCARD_AID_HANDLE;
     p_c_apdu = NULL;
 
-    CE_TRACE_DEBUG0(
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
         "CET4T: Forward raw frame (SELECT APP) to wildcard AID handler");
     (*(ce_cb.mem.t4t.p_wildcard_aid_cback))(CE_T4T_RAW_FRAME_EVT, &ce_data);
   } else {
-    CE_TRACE_DEBUG0(
-        "ce_t4t_process_select_app_cmd (): Not found matched AID or not "
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "Not found matched AID or not "
         "listening T4T NDEF");
     status_words = T4T_RSP_NOT_FOUND;
   }
@@ -497,7 +497,7 @@
       ce_cb.mem.t4t.status &= ~(CE_T4T_STATUS_WILDCARD_AID_SELECTED);
       ce_cb.mem.t4t.status |= CE_T4T_STATUS_T4T_APP_SELECTED;
 
-      CE_TRACE_DEBUG0("ce_t4t_process_select_app_cmd (): T4T CE App selected");
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("T4T CE App selected");
     }
 
     ce_t4t_send_status(status_words);
@@ -521,7 +521,7 @@
   tCE_T4T_MEM* p_t4t = &ce_cb.mem.t4t;
   tCE_DATA ce_data;
 
-  CE_TRACE_DEBUG1("ce_t4t_process_timeout () event=%d", p_tle->event);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("event=%d", p_tle->event);
 
   if (p_tle->event == NFC_TTYPE_CE_T4T_UPDATE) {
     if (p_t4t->status & CE_T4T_STATUS_NDEF_FILE_UPDATING) {
@@ -533,7 +533,7 @@
       p_t4t->status &= ~(CE_T4T_STATUS_NDEF_FILE_UPDATING);
     }
   } else {
-    CE_TRACE_ERROR1("ce_t4t_process_timeout () unknown event=%d", p_tle->event);
+    LOG(ERROR) << StringPrintf("unknown event=%d", p_tle->event);
   }
 }
 
@@ -564,16 +564,12 @@
 
   p_c_apdu = (NFC_HDR*)p_data->data.p_data;
 
-#if (BT_TRACE_PROTOCOL == TRUE)
-  DispCET4Tags(p_c_apdu, true);
-#endif
-
-  CE_TRACE_DEBUG1("ce_t4t_data_cback (): conn_id = 0x%02X", conn_id);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("conn_id = 0x%02X", conn_id);
 
   p_cmd = (uint8_t*)(p_c_apdu + 1) + p_c_apdu->offset;
 
   if (p_c_apdu->len == 0) {
-    CE_TRACE_ERROR0("Wrong length in ce_t4t_data_cback");
+    LOG(ERROR) << StringPrintf("Wrong length in ce_t4t_data_cback");
     android_errorWriteLog(0x534e4554, "115635871");
     ce_t4t_send_status(T4T_RSP_WRONG_LENGTH);
     if (p_c_apdu) GKI_freebuf(p_c_apdu);
@@ -607,7 +603,7 @@
           ce_t4t_process_select_app_cmd(p_cmd, p_c_apdu);
           return;
         } else {
-          CE_TRACE_ERROR0("Wrong length in select app cmd");
+          LOG(ERROR) << StringPrintf("Wrong length in select app cmd");
           android_errorWriteLog(0x534e4554, "115635871");
           ce_t4t_send_status(T4T_RSP_NOT_FOUND);
           if (p_c_apdu) GKI_freebuf(p_c_apdu);
@@ -619,7 +615,8 @@
 
   /* if registered AID is selected */
   if (ce_cb.mem.t4t.status & CE_T4T_STATUS_REG_AID_SELECTED) {
-    CE_TRACE_DEBUG0("CET4T: Forward raw frame to registered AID");
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("CET4T: Forward raw frame to registered AID");
 
     /* forward raw frame to upper layer */
     if (ce_cb.mem.t4t.selected_aid_idx < CE_T4T_MAX_REG_AID) {
@@ -635,7 +632,8 @@
       ce_t4t_send_status(T4T_RSP_NOT_FOUND);
     }
   } else if (ce_cb.mem.t4t.status & CE_T4T_STATUS_WILDCARD_AID_SELECTED) {
-    CE_TRACE_DEBUG0("CET4T: Forward raw frame to wildcard AID handler");
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("CET4T: Forward raw frame to wildcard AID handler");
 
     /* forward raw frame to upper layer */
     ce_data.raw_frame.status = p_data->data.status;
@@ -650,7 +648,7 @@
       if (select_type == T4T_CMD_P1_SELECT_BY_FILE_ID) {
         ce_t4t_process_select_file_cmd(p_cmd);
       } else {
-        CE_TRACE_ERROR1("CET4T: Bad P1 byte (0x%02X)", select_type);
+        LOG(ERROR) << StringPrintf("CET4T: Bad P1 byte (0x%02X)", select_type);
         ce_t4t_send_status(T4T_RSP_WRONG_PARAMS);
       }
     } else if (instruct == T4T_CMD_INS_READ_BINARY) {
@@ -673,19 +671,20 @@
             if (offset < max_file_size) {
               length = (uint8_t)(max_file_size - offset);
 
-              CE_TRACE_DEBUG2(
+              DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
                   "CET4T: length is reduced to %d by max_file_size (%d)",
                   length, max_file_size);
             } else {
-              CE_TRACE_ERROR2(
+              LOG(ERROR) << StringPrintf(
                   "CET4T: offset (%d) must be less than max_file_size (%d)",
                   offset, max_file_size);
               length = 0;
             }
           }
         } else {
-          CE_TRACE_ERROR2("CET4T: length (%d) must be less than MLe (%d)",
-                          length, CE_T4T_MAX_LE);
+          LOG(ERROR) << StringPrintf(
+              "CET4T: length (%d) must be less than MLe (%zu)", length,
+              CE_T4T_MAX_LE);
           length = 0;
         }
 
@@ -694,12 +693,12 @@
         else
           ce_t4t_send_status(T4T_RSP_WRONG_PARAMS);
       } else {
-        CE_TRACE_ERROR0("CET4T: File has not been selected");
+        LOG(ERROR) << StringPrintf("CET4T: File has not been selected");
         ce_t4t_send_status(T4T_RSP_CMD_NOT_ALLOWED);
       }
     } else if (instruct == T4T_CMD_INS_UPDATE_BINARY) {
       if (ce_cb.mem.t4t.status & CE_T4T_STATUS_NDEF_FILE_READ_ONLY) {
-        CE_TRACE_ERROR0("CET4T: No access right");
+        LOG(ERROR) << StringPrintf("CET4T: No access right");
         ce_t4t_send_status(T4T_RSP_CMD_NOT_ALLOWED);
       } else if (ce_cb.mem.t4t.status & CE_T4T_STATUS_NDEF_SELECTED) {
         BE_STREAM_TO_UINT16(offset, p_cmd); /* Offset */
@@ -708,15 +707,16 @@
         /* check if valid parameters */
         if ((uint32_t)length <= CE_T4T_MAX_LC) {
           if (length + offset > ce_cb.mem.t4t.max_file_size) {
-            CE_TRACE_ERROR3(
+            LOG(ERROR) << StringPrintf(
                 "CET4T: length (%d) + offset (%d) must be less than "
                 "max_file_size (%d)",
                 length, offset, ce_cb.mem.t4t.max_file_size);
             length = 0;
           }
         } else {
-          CE_TRACE_ERROR2("CET4T: length (%d) must be less than MLc (%d)",
-                          length, CE_T4T_MAX_LC);
+          LOG(ERROR) << StringPrintf(
+              "CET4T: length (%d) must be less than MLc (%zu)", length,
+              CE_T4T_MAX_LC);
           length = 0;
         }
 
@@ -725,15 +725,16 @@
         else
           ce_t4t_send_status(T4T_RSP_WRONG_PARAMS);
       } else {
-        CE_TRACE_ERROR0("CET4T: NDEF File has not been selected");
+        LOG(ERROR) << StringPrintf("CET4T: NDEF File has not been selected");
         ce_t4t_send_status(T4T_RSP_CMD_NOT_ALLOWED);
       }
     } else {
-      CE_TRACE_ERROR1("CET4T: Unsupported Instruction byte (0x%02X)", instruct);
+      LOG(ERROR) << StringPrintf("CET4T: Unsupported Instruction byte (0x%02X)",
+                                 instruct);
       ce_t4t_send_status(T4T_RSP_INSTR_NOT_SUPPORTED);
     }
   } else {
-    CE_TRACE_ERROR0("CET4T: Application has not been selected");
+    LOG(ERROR) << StringPrintf("CET4T: Application has not been selected");
     ce_t4t_send_status(T4T_RSP_CMD_NOT_ALLOWED);
   }
 
@@ -752,7 +753,7 @@
 tNFC_STATUS ce_select_t4t(void) {
   tCE_T4T_MEM* p_t4t = &ce_cb.mem.t4t;
 
-  CE_TRACE_DEBUG0("ce_select_t4t ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   nfc_stop_quick_timer(&p_t4t->timer);
 
@@ -791,20 +792,20 @@
   tCE_T4T_MEM* p_t4t = &ce_cb.mem.t4t;
   uint8_t* p;
 
-  CE_TRACE_API3(
-      "CE_T4tSetLocalNDEFMsg () read_only=%d, ndef_msg_max=%d, ndef_msg_len=%d",
-      read_only, ndef_msg_max, ndef_msg_len);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("read_only=%d, ndef_msg_max=%d, ndef_msg_len=%d",
+                      read_only, ndef_msg_max, ndef_msg_len);
 
   if (!p_ndef_msg) {
     p_t4t->p_ndef_msg = NULL;
 
-    CE_TRACE_DEBUG0("CE_T4tSetLocalNDEFMsg (): T4T is disabled");
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("T4T is disabled");
     return NFC_STATUS_OK;
   }
 
   if ((!read_only) && (!p_scratch_buf)) {
-    CE_TRACE_ERROR0(
-        "CE_T4tSetLocalNDEFMsg (): p_scratch_buf cannot be NULL if not "
+    LOG(ERROR) << StringPrintf(
+        "p_scratch_buf cannot be NULL if not "
         "read-only");
     return NFC_STATUS_FAILED;
   }
@@ -873,43 +874,43 @@
 
   /* Handle registering callback for wildcard AID (all AIDs) */
   if (aid_len == 0) {
-    CE_TRACE_API0(
-        "CE_T4tRegisterAID (): registering callback for wildcard AID ");
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("registering callback for wildcard AID ");
 
     /* Check if a wildcard callback is already registered (only one is allowed)
      */
     if (p_t4t->p_wildcard_aid_cback != NULL) {
-      CE_TRACE_ERROR0(
-          "CE_T4tRegisterAID (): only one wildcard AID can be registered at "
+      LOG(ERROR) << StringPrintf(
+          "only one wildcard AID can be registered at "
           "time.");
       return CE_T4T_AID_HANDLE_INVALID;
     }
 
-    CE_TRACE_DEBUG1(
-        "CE_T4tRegisterAID (): handle 0x%02x registered (for wildcard AID)",
-        CE_T4T_WILDCARD_AID_HANDLE);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("handle 0x%02x registered (for wildcard AID)",
+                        CE_T4T_WILDCARD_AID_HANDLE);
     p_t4t->p_wildcard_aid_cback = p_cback;
     return CE_T4T_WILDCARD_AID_HANDLE;
   }
 
-  CE_TRACE_API5("CE_T4tRegisterAID () AID [%02X%02X%02X%02X...], %d bytes",
-                *p_aid, *(p_aid + 1), *(p_aid + 2), *(p_aid + 3), aid_len);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("AID [%02X%02X%02X%02X...], %d bytes", *p_aid,
+                      *(p_aid + 1), *(p_aid + 2), *(p_aid + 3), aid_len);
 
   if (aid_len > NFC_MAX_AID_LEN) {
-    CE_TRACE_ERROR1("CE_T4tRegisterAID (): AID is up to %d bytes",
-                    NFC_MAX_AID_LEN);
+    LOG(ERROR) << StringPrintf("AID is up to %d bytes", NFC_MAX_AID_LEN);
     return CE_T4T_AID_HANDLE_INVALID;
   }
 
   if (p_cback == NULL) {
-    CE_TRACE_ERROR0("CE_T4tRegisterAID (): callback must be provided");
+    LOG(ERROR) << StringPrintf("callback must be provided");
     return CE_T4T_AID_HANDLE_INVALID;
   }
 
   for (xx = 0; xx < CE_T4T_MAX_REG_AID; xx++) {
     if ((p_t4t->reg_aid[xx].aid_len == aid_len) &&
         (!(memcmp(p_t4t->reg_aid[xx].aid, p_aid, aid_len)))) {
-      CE_TRACE_ERROR0("CE_T4tRegisterAID (): already registered");
+      LOG(ERROR) << StringPrintf("already registered");
       return CE_T4T_AID_HANDLE_INVALID;
     }
   }
@@ -924,10 +925,11 @@
   }
 
   if (xx >= CE_T4T_MAX_REG_AID) {
-    CE_TRACE_ERROR0("CE_T4tRegisterAID (): No resource");
+    LOG(ERROR) << StringPrintf("No resource");
     return CE_T4T_AID_HANDLE_INVALID;
   } else {
-    CE_TRACE_DEBUG1("CE_T4tRegisterAID (): handle 0x%02x registered", xx);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("handle 0x%02x registered", xx);
   }
 
   return (xx);
@@ -945,14 +947,14 @@
 extern void CE_T4tDeregisterAID(tCE_T4T_AID_HANDLE aid_handle) {
   tCE_T4T_MEM* p_t4t = &ce_cb.mem.t4t;
 
-  CE_TRACE_API1("CE_T4tDeregisterAID () handle 0x%02x", aid_handle);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("handle 0x%02x", aid_handle);
 
   /* Check if deregistering wildcard AID */
   if (aid_handle == CE_T4T_WILDCARD_AID_HANDLE) {
     if (p_t4t->p_wildcard_aid_cback != NULL) {
       p_t4t->p_wildcard_aid_cback = NULL;
     } else {
-      CE_TRACE_ERROR0("CE_T4tDeregisterAID (): Invalid handle");
+      LOG(ERROR) << StringPrintf("Invalid handle");
     }
     return;
   }
@@ -960,129 +962,9 @@
   /* Deregister AID */
   if ((aid_handle >= CE_T4T_MAX_REG_AID) ||
       (p_t4t->reg_aid[aid_handle].aid_len == 0)) {
-    CE_TRACE_ERROR0("CE_T4tDeregisterAID (): Invalid handle");
+    LOG(ERROR) << StringPrintf("Invalid handle");
   } else {
     p_t4t->reg_aid[aid_handle].aid_len = 0;
     p_t4t->reg_aid[aid_handle].p_cback = NULL;
   }
 }
-
-/*******************************************************************************
-**
-** Function         CE_T4TTestSetCC
-**
-** Description      Set fields in Capability Container File for testing
-**
-** Returns          NFC_STATUS_OK if success
-**
-*******************************************************************************/
-tNFC_STATUS CE_T4TTestSetCC(uint16_t cc_len, uint8_t version, uint16_t max_le,
-                            uint16_t max_lc) {
-#if (CE_TEST_INCLUDED == TRUE)
-  tCE_T4T_MEM* p_t4t = &ce_cb.mem.t4t;
-  uint8_t* p;
-
-  CE_TRACE_DEBUG4(
-      "CE_T4TTestSetCC (): CCLen:0x%04X, Ver:0x%02X, MaxLe:0x%04X, "
-      "MaxLc:0x%04X",
-      cc_len, version, max_le, max_lc);
-
-  /* CC file */
-  p = p_t4t->cc_file;
-
-  if (cc_len != 0xFFFF) {
-    UINT16_TO_BE_STREAM(p, cc_len);
-  } else
-    p += 2;
-
-  if (version != 0xFF) {
-    mapping_aid_test_enabled = true;
-    if (version == T4T_VERSION_1_0)
-      ce_test_tag_app_id[T4T_V20_NDEF_TAG_AID_LEN - 1] = 0x00;
-    else if (version == T4T_VERSION_2_0)
-      ce_test_tag_app_id[T4T_V20_NDEF_TAG_AID_LEN - 1] = 0x01;
-    else /* Undefined version */
-      ce_test_tag_app_id[T4T_V20_NDEF_TAG_AID_LEN - 1] = 0xFF;
-
-    UINT8_TO_BE_STREAM(p, version);
-  } else {
-    mapping_aid_test_enabled = false;
-    p += 1;
-  }
-
-  if (max_le != 0xFFFF) {
-    UINT16_TO_BE_STREAM(p, max_le);
-  } else
-    p += 2;
-
-  if (max_lc != 0xFFFF) {
-    UINT16_TO_BE_STREAM(p, max_lc);
-  } else
-    p += 2;
-
-  return NFC_STATUS_OK;
-#else
-  return NFC_STATUS_FAILED;
-#endif
-}
-
-/*******************************************************************************
-**
-** Function         CE_T4TTestSetNDEFCtrlTLV
-**
-** Description      Set fields in NDEF File Control TLV for testing
-**
-** Returns          NFC_STATUS_OK if success
-**
-*******************************************************************************/
-tNFC_STATUS CE_T4TTestSetNDEFCtrlTLV(uint8_t type, uint8_t length,
-                                     uint16_t file_id, uint16_t max_file_size,
-                                     uint8_t read_access,
-                                     uint8_t write_access) {
-#if (CE_TEST_INCLUDED == TRUE)
-  tCE_T4T_MEM* p_t4t = &ce_cb.mem.t4t;
-  uint8_t* p;
-
-  CE_TRACE_DEBUG6(
-      "CE_T4TTestSetNDEFCtrlTLV (): type:0x%02X, len:0x%02X, FileID:0x%04X, "
-      "MaxFile:0x%04X, RdAcc:0x%02X, WrAcc:0x%02X",
-      type, length, file_id, max_file_size, read_access, write_access);
-
-  /* NDEF File control TLV */
-  p = p_t4t->cc_file + T4T_FC_TLV_OFFSET_IN_CC;
-
-  if (type != 0xFF) {
-    UINT8_TO_BE_STREAM(p, type);
-  } else
-    p += 1;
-
-  if (length != 0xFF) {
-    UINT8_TO_BE_STREAM(p, length);
-  } else
-    p += 1;
-
-  if (file_id != 0xFFFF) {
-    UINT16_TO_BE_STREAM(p, file_id);
-  } else
-    p += 2;
-
-  if (max_file_size != 0xFFFF) {
-    UINT16_TO_BE_STREAM(p, max_file_size);
-  } else
-    p += 2;
-
-  if (read_access != 0xFF) {
-    UINT8_TO_BE_STREAM(p, read_access);
-  } else
-    p += 1;
-
-  if (write_access != 0xFF) {
-    UINT8_TO_BE_STREAM(p, write_access);
-  } else
-    p += 1;
-
-  return NFC_STATUS_OK;
-#else
-  return NFC_STATUS_FAILED;
-#endif
-}
diff --git a/src/nfc/tags/rw_i93.c b/src/nfc/tags/rw_i93.cc
similarity index 83%
rename from src/nfc/tags/rw_i93.c
rename to src/nfc/tags/rw_i93.cc
index 6c6f4bd..a8e095c 100644
--- a/src/nfc/tags/rw_i93.c
+++ b/src/nfc/tags/rw_i93.cc
@@ -24,14 +24,22 @@
  ******************************************************************************/
 #include <log/log.h>
 #include <string.h>
-#include "bt_types.h"
-#include "nfc_target.h"
-#include "trace_api.h"
 
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
+#include "nfc_target.h"
+
+#include "bt_types.h"
 #include "nfc_api.h"
 #include "nfc_int.h"
 #include "rw_api.h"
 #include "rw_int.h"
+#include "trace_api.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 /* Response timeout     */
 #define RW_I93_TOUT_RESP 1000
@@ -81,16 +89,15 @@
   RW_I93_SUBSTATE_WAIT_LOCK_CC    /* lock block of CC                     */
 };
 
-#if (BT_TRACE_VERBOSE == TRUE)
-static char* rw_i93_get_state_name(uint8_t state);
-static char* rw_i93_get_sub_state_name(uint8_t sub_state);
-static char* rw_i93_get_tag_name(uint8_t product_version);
-#endif
+static std::string rw_i93_get_state_name(uint8_t state);
+static std::string rw_i93_get_sub_state_name(uint8_t sub_state);
+static std::string rw_i93_get_tag_name(uint8_t product_version);
 
 static void rw_i93_data_cback(uint8_t conn_id, tNFC_CONN_EVT event,
                               tNFC_CONN* p_data);
 void rw_i93_handle_error(tNFC_STATUS status);
 tNFC_STATUS rw_i93_send_cmd_get_sys_info(uint8_t* p_uid, uint8_t extra_flag);
+tNFC_STATUS rw_i93_send_cmd_get_ext_sys_info(uint8_t* p_uid);
 
 /*******************************************************************************
 **
@@ -108,7 +115,7 @@
     return;
   }
 
-  RW_TRACE_DEBUG0("rw_i93_get_product_version ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   memcpy(p_i93->uid, p_uid, I93_UID_BYTE_LEN);
 
@@ -144,6 +151,10 @@
       p_i93->product_version = RW_I93_STM_M24LR16E_R;
     else if (p_i93->ic_reference == I93_IC_REF_STM_M24LR64E_R)
       p_i93->product_version = RW_I93_STM_M24LR64E_R;
+    else if (p_i93->ic_reference == I93_IC_REF_STM_ST25DVHIK)
+      p_i93->product_version = RW_I93_STM_ST25DVHIK;
+    else if (p_i93->ic_reference == I93_IC_REF_STM_ST25DV04K)
+      p_i93->product_version = RW_I93_STM_ST25DV04K;
     else {
       switch (p_i93->ic_reference & I93_IC_REF_STM_MASK) {
         case I93_IC_REF_STM_LRI1K:
@@ -170,12 +181,9 @@
     p_i93->product_version = RW_I93_UNKNOWN_PRODUCT;
   }
 
-#if (BT_TRACE_VERBOSE == TRUE)
-  RW_TRACE_DEBUG1("product_version = <%s>",
-                  rw_i93_get_tag_name(p_i93->product_version));
-#else
-  RW_TRACE_DEBUG1("product_version = %d", p_i93->product_version);
-#endif
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("product_version = <%s>",
+                      rw_i93_get_tag_name(p_i93->product_version).c_str());
 
   switch (p_i93->product_version) {
     case RW_I93_TAG_IT_HF_I_STD_CHIP_INLAY:
@@ -193,6 +201,90 @@
 
 /*******************************************************************************
 **
+** Function         rw_i93_process_ext_sys_info
+**
+** Description      Store extended system information of tag
+**
+** Returns          FALSE if retrying with protocol extension flag
+**
+*******************************************************************************/
+bool rw_i93_process_ext_sys_info(uint8_t* p_data, uint16_t length) {
+  uint8_t* p = p_data;
+  tRW_I93_CB* p_i93 = &rw_cb.tcb.i93;
+  uint8_t uid[I93_UID_BYTE_LEN], *p_uid;
+
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
+
+  if (length < (I93_UID_BYTE_LEN + 1)) {
+    android_errorWriteLog(0x534e4554, "122316913");
+    return false;
+  }
+
+  STREAM_TO_UINT8(p_i93->info_flags, p);
+  length--;
+
+  p_uid = uid;
+  STREAM_TO_ARRAY8(p_uid, p);
+  length -= I93_UID_BYTE_LEN;
+
+  if (p_i93->info_flags & I93_INFO_FLAG_DSFID) {
+    if (length < 1) {
+      android_errorWriteLog(0x534e4554, "122316913");
+      return false;
+    }
+    STREAM_TO_UINT8(p_i93->dsfid, p);
+    length--;
+  }
+  if (p_i93->info_flags & I93_INFO_FLAG_AFI) {
+    if (length < 1) {
+      android_errorWriteLog(0x534e4554, "122316913");
+      return false;
+    }
+    STREAM_TO_UINT8(p_i93->afi, p);
+    length--;
+  }
+  if (p_i93->info_flags & I93_INFO_FLAG_MEM_SIZE) {
+    if (length < 3) {
+      android_errorWriteLog(0x534e4554, "122316913");
+      return false;
+    }
+    STREAM_TO_UINT16(p_i93->num_block, p);
+    length -= I93_INFO_16BIT_NUM_BLOCK_LEN;
+
+    /* it is one less than actual number of bytes */
+    p_i93->num_block += 1;
+
+    STREAM_TO_UINT8(p_i93->block_size, p);
+    length--;
+    /* it is one less than actual number of blocks */
+    p_i93->block_size = (p_i93->block_size & 0x1F) + 1;
+  }
+  if (p_i93->info_flags & I93_INFO_FLAG_IC_REF) {
+    if (length < 1) {
+      android_errorWriteLog(0x534e4554, "122316913");
+      return false;
+    }
+    STREAM_TO_UINT8(p_i93->ic_reference, p);
+    length--;
+
+    /* clear existing UID to set product version */
+    p_i93->uid[0] = 0x00;
+
+    /* store UID and get product version */
+    rw_i93_get_product_version(p_uid);
+
+    if (p_i93->uid[0] == I93_UID_FIRST_BYTE) {
+      if (p_i93->uid[1] == I93_UID_IC_MFG_CODE_STM) {
+        /* STM supports more than 2040 bytes */
+        p_i93->intl_flags |= RW_I93_FLAG_EXT_COMMANDS;
+      }
+    }
+  }
+  return true;
+}
+
+/*******************************************************************************
+**
 ** Function         rw_i93_process_sys_info
 **
 ** Description      Store system information of tag
@@ -205,7 +297,7 @@
   tRW_I93_CB* p_i93 = &rw_cb.tcb.i93;
   uint8_t uid[I93_UID_BYTE_LEN], *p_uid;
 
-  RW_TRACE_DEBUG0("rw_i93_process_sys_info ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (length < (I93_UID_BYTE_LEN + 1)) {
     android_errorWriteLog(0x534e4554, "121259048");
@@ -301,12 +393,20 @@
               return false;
             }
           }
-          return true;
         } else if ((p_i93->product_version == RW_I93_STM_LRI2K) &&
                    (p_i93->ic_reference == 0x21)) {
           /* workaround of byte order in memory size information */
           p_i93->num_block = 64;
           p_i93->block_size = 4;
+        } else if (!(p_i93->info_flags & I93_INFO_FLAG_MEM_SIZE)) {
+          if (!(p_i93->intl_flags & RW_I93_FLAG_EXT_COMMANDS)) {
+            if (rw_i93_send_cmd_get_ext_sys_info(NULL) == NFC_STATUS_OK) {
+              /* STM supports more than 2040 bytes */
+              p_i93->intl_flags |= RW_I93_FLAG_EXT_COMMANDS;
+
+              return false;
+            }
+          }
         }
       }
     }
@@ -328,7 +428,7 @@
 bool rw_i93_check_sys_info_prot_ext(uint8_t error_code) {
   tRW_I93_CB* p_i93 = &rw_cb.tcb.i93;
 
-  RW_TRACE_DEBUG0("rw_i93_check_sys_info_prot_ext ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if ((p_i93->uid[1] == I93_UID_IC_MFG_CODE_STM) &&
       (p_i93->sent_cmd == I93_CMD_GET_SYS_INFO) &&
@@ -351,7 +451,7 @@
 **
 *******************************************************************************/
 void rw_i93_send_to_upper(NFC_HDR* p_resp) {
-  uint8_t *p = (uint8_t *)(p_resp + 1) + p_resp->offset, *p_uid;
+  uint8_t *p = (uint8_t*)(p_resp + 1) + p_resp->offset, *p_uid;
   uint16_t length = p_resp->len;
   tRW_I93_CB* p_i93 = &rw_cb.tcb.i93;
   tRW_DATA rw_data;
@@ -359,7 +459,7 @@
   uint8_t flags;
   NFC_HDR* p_buff;
 
-  RW_TRACE_DEBUG0("rw_i93_send_to_upper ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   STREAM_TO_UINT8(flags, p);
   length--;
@@ -399,8 +499,11 @@
       break;
 
     case I93_CMD_READ_SINGLE_BLOCK:
+    case I93_CMD_EXT_READ_SINGLE_BLOCK:
     case I93_CMD_READ_MULTI_BLOCK:
+    case I93_CMD_EXT_READ_MULTI_BLOCK:
     case I93_CMD_GET_MULTI_BLK_SEC:
+    case I93_CMD_EXT_GET_MULTI_BLK_SEC:
 
       /* forward tag data or security status */
       p_buff = (NFC_HDR*)GKI_getbuf((uint16_t)(length + NFC_HDR_SIZE));
@@ -426,8 +529,11 @@
       break;
 
     case I93_CMD_WRITE_SINGLE_BLOCK:
+    case I93_CMD_EXT_WRITE_SINGLE_BLOCK:
     case I93_CMD_LOCK_BLOCK:
+    case I93_CMD_EXT_LOCK_BLOCK:
     case I93_CMD_WRITE_MULTI_BLOCK:
+    case I93_CMD_EXT_WRITE_MULTI_BLOCK:
     case I93_CMD_SELECT:
     case I93_CMD_RESET_TO_READY:
     case I93_CMD_WRITE_AFI:
@@ -464,6 +570,28 @@
       }
       break;
 
+    case I93_CMD_EXT_GET_SYS_INFO:
+
+      if (rw_i93_process_ext_sys_info(p, length)) {
+        rw_data.i93_sys_info.status = NFC_STATUS_OK;
+        rw_data.i93_sys_info.info_flags = p_i93->info_flags;
+        rw_data.i93_sys_info.dsfid = p_i93->dsfid;
+        rw_data.i93_sys_info.afi = p_i93->afi;
+        rw_data.i93_sys_info.num_block = p_i93->num_block;
+        rw_data.i93_sys_info.block_size = p_i93->block_size;
+        rw_data.i93_sys_info.IC_reference = p_i93->ic_reference;
+
+        memcpy(rw_data.i93_sys_info.uid, p_i93->uid, I93_UID_BYTE_LEN);
+
+        event = RW_I93_SYS_INFO_EVT;
+      } else {
+        /* retrying with protocol extension flag or with extended sys info
+         * command */
+        p_i93->state = RW_I93_STATE_BUSY;
+        return;
+      }
+      break;
+
     default:
       break;
   }
@@ -472,7 +600,7 @@
   if (event != RW_I93_MAX_EVT) {
     (*(rw_cb.p_cback))(event, &rw_data);
   } else {
-    RW_TRACE_ERROR0("rw_i93_send_to_upper (): Invalid response");
+    LOG(ERROR) << StringPrintf("Invalid response");
   }
 }
 
@@ -486,10 +614,6 @@
 **
 *******************************************************************************/
 bool rw_i93_send_to_lower(NFC_HDR* p_msg) {
-#if (BT_TRACE_PROTOCOL == TRUE)
-  DispRWI93Tag(p_msg, false, 0x00);
-#endif
-
   /* store command for retransmitting */
   if (rw_cb.tcb.i93.p_retry_cmd) {
     GKI_freebuf(rw_cb.tcb.i93.p_retry_cmd);
@@ -504,7 +628,7 @@
   }
 
   if (NFC_SendData(NFC_RF_CONN_ID, p_msg) != NFC_STATUS_OK) {
-    RW_TRACE_ERROR0("rw_i93_send_to_lower (): NFC_SendData () failed");
+    LOG(ERROR) << StringPrintf("failed");
     return false;
   }
 
@@ -528,13 +652,13 @@
   NFC_HDR* p_cmd;
   uint8_t *p, flags;
 
-  RW_TRACE_DEBUG2("rw_i93_send_cmd_inventory () including_afi:%d, AFI:0x%02X",
-                  including_afi, afi);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("including_afi:%d, AFI:0x%02X", including_afi, afi);
 
   p_cmd = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_cmd) {
-    RW_TRACE_ERROR0("rw_i93_send_cmd_inventory (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return NFC_STATUS_NO_BUFFERS;
   }
 
@@ -589,12 +713,12 @@
   NFC_HDR* p_cmd;
   uint8_t* p;
 
-  RW_TRACE_DEBUG0("rw_i93_send_cmd_stay_quiet ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_cmd = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_cmd) {
-    RW_TRACE_ERROR0("rw_i93_send_cmd_stay_quiet (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return NFC_STATUS_NO_BUFFERS;
   }
 
@@ -639,13 +763,12 @@
   NFC_HDR* p_cmd;
   uint8_t *p, flags;
 
-  RW_TRACE_DEBUG0("rw_i93_send_cmd_read_single_block ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_cmd = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_cmd) {
-    RW_TRACE_ERROR0(
-        "rw_i93_send_cmd_read_single_block (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return NFC_STATUS_NO_BUFFERS;
   }
 
@@ -665,12 +788,17 @@
   UINT8_TO_STREAM(p, flags);
 
   /* Command Code */
-  UINT8_TO_STREAM(p, I93_CMD_READ_SINGLE_BLOCK);
+  if (rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_EXT_COMMANDS) {
+    UINT8_TO_STREAM(p, I93_CMD_EXT_READ_SINGLE_BLOCK);
+  } else {
+    UINT8_TO_STREAM(p, I93_CMD_READ_SINGLE_BLOCK);
+  }
 
   /* Parameters */
   ARRAY8_TO_STREAM(p, rw_cb.tcb.i93.uid); /* UID */
 
-  if (rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_16BIT_NUM_BLOCK) {
+  if (rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_16BIT_NUM_BLOCK ||
+      rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_EXT_COMMANDS) {
     UINT16_TO_STREAM(p, block_number); /* Block number */
     p_cmd->len++;
   } else {
@@ -678,7 +806,10 @@
   }
 
   if (rw_i93_send_to_lower(p_cmd)) {
-    rw_cb.tcb.i93.sent_cmd = I93_CMD_READ_SINGLE_BLOCK;
+    if (rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_EXT_COMMANDS)
+      rw_cb.tcb.i93.sent_cmd = I93_CMD_EXT_READ_SINGLE_BLOCK;
+    else
+      rw_cb.tcb.i93.sent_cmd = I93_CMD_READ_SINGLE_BLOCK;
     return NFC_STATUS_OK;
   } else {
     return NFC_STATUS_FAILED;
@@ -699,13 +830,12 @@
   NFC_HDR* p_cmd;
   uint8_t *p, flags;
 
-  RW_TRACE_DEBUG0("rw_i93_send_cmd_write_single_block ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_cmd = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_cmd) {
-    RW_TRACE_ERROR0(
-        "rw_i93_send_cmd_write_single_block (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return NFC_STATUS_NO_BUFFERS;
   }
 
@@ -732,12 +862,17 @@
   UINT8_TO_STREAM(p, flags);
 
   /* Command Code */
-  UINT8_TO_STREAM(p, I93_CMD_WRITE_SINGLE_BLOCK);
+  if (rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_EXT_COMMANDS) {
+    UINT8_TO_STREAM(p, I93_CMD_EXT_WRITE_SINGLE_BLOCK);
+  } else {
+    UINT8_TO_STREAM(p, I93_CMD_WRITE_SINGLE_BLOCK);
+  }
 
   /* Parameters */
   ARRAY8_TO_STREAM(p, rw_cb.tcb.i93.uid); /* UID */
 
-  if (rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_16BIT_NUM_BLOCK) {
+  if (rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_16BIT_NUM_BLOCK ||
+      rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_EXT_COMMANDS) {
     UINT16_TO_STREAM(p, block_number); /* Block number */
     p_cmd->len++;
   } else {
@@ -748,7 +883,10 @@
   ARRAY_TO_STREAM(p, p_data, rw_cb.tcb.i93.block_size);
 
   if (rw_i93_send_to_lower(p_cmd)) {
-    rw_cb.tcb.i93.sent_cmd = I93_CMD_WRITE_SINGLE_BLOCK;
+    if (rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_EXT_COMMANDS)
+      rw_cb.tcb.i93.sent_cmd = I93_CMD_EXT_WRITE_SINGLE_BLOCK;
+    else
+      rw_cb.tcb.i93.sent_cmd = I93_CMD_WRITE_SINGLE_BLOCK;
     return NFC_STATUS_OK;
   } else {
     return NFC_STATUS_FAILED;
@@ -771,12 +909,12 @@
   NFC_HDR* p_cmd;
   uint8_t* p;
 
-  RW_TRACE_DEBUG0("rw_i93_send_cmd_lock_block ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_cmd = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_cmd) {
-    RW_TRACE_ERROR0("rw_i93_send_cmd_lock_block (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return NFC_STATUS_NO_BUFFERS;
   }
 
@@ -798,14 +936,27 @@
   }
 
   /* Command Code */
-  UINT8_TO_STREAM(p, I93_CMD_LOCK_BLOCK);
+  if (rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_EXT_COMMANDS) {
+    UINT8_TO_STREAM(p, I93_CMD_EXT_LOCK_BLOCK);
+  } else {
+    UINT8_TO_STREAM(p, I93_CMD_LOCK_BLOCK);
+  }
 
   /* Parameters */
   ARRAY8_TO_STREAM(p, rw_cb.tcb.i93.uid); /* UID */
-  UINT8_TO_STREAM(p, block_number);       /* Block number */
+
+  if (rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_EXT_COMMANDS) {
+    UINT16_TO_STREAM(p, block_number); /* Block number */
+    p_cmd->len++;
+  } else {
+    UINT8_TO_STREAM(p, block_number); /* Block number */
+  }
 
   if (rw_i93_send_to_lower(p_cmd)) {
-    rw_cb.tcb.i93.sent_cmd = I93_CMD_LOCK_BLOCK;
+    if (rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_EXT_COMMANDS)
+      rw_cb.tcb.i93.sent_cmd = I93_CMD_EXT_LOCK_BLOCK;
+    else
+      rw_cb.tcb.i93.sent_cmd = I93_CMD_LOCK_BLOCK;
     return NFC_STATUS_OK;
   } else {
     return NFC_STATUS_FAILED;
@@ -826,13 +977,12 @@
   NFC_HDR* p_cmd;
   uint8_t *p, flags;
 
-  RW_TRACE_DEBUG0("rw_i93_send_cmd_read_multi_blocks ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_cmd = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_cmd) {
-    RW_TRACE_ERROR0(
-        "rw_i93_send_cmd_read_multi_blocks (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return NFC_STATUS_NO_BUFFERS;
   }
 
@@ -844,29 +994,44 @@
   flags =
       (I93_FLAG_ADDRESS_SET | RW_I93_FLAG_SUB_CARRIER | RW_I93_FLAG_DATA_RATE);
 
-  if (rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_16BIT_NUM_BLOCK)
+  if (rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_16BIT_NUM_BLOCK) {
     flags |= I93_FLAG_PROT_EXT_YES;
+  }
 
   UINT8_TO_STREAM(p, flags);
 
   /* Command Code */
-  UINT8_TO_STREAM(p, I93_CMD_READ_MULTI_BLOCK);
+  if (rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_EXT_COMMANDS) {
+    UINT8_TO_STREAM(p, I93_CMD_EXT_READ_MULTI_BLOCK);
+  } else {
+    UINT8_TO_STREAM(p, I93_CMD_READ_MULTI_BLOCK);
+  }
 
   /* Parameters */
   ARRAY8_TO_STREAM(p, rw_cb.tcb.i93.uid); /* UID */
 
-  if (rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_16BIT_NUM_BLOCK) {
+  if (rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_16BIT_NUM_BLOCK ||
+      rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_EXT_COMMANDS) {
     UINT16_TO_STREAM(p, first_block_number); /* First block number */
     p_cmd->len++;
   } else {
     UINT8_TO_STREAM(p, first_block_number); /* First block number */
   }
 
-  UINT8_TO_STREAM(
-      p, number_blocks - 1); /* Number of blocks, 0x00 to read one block */
+  if (rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_EXT_COMMANDS) {
+    UINT16_TO_STREAM(
+        p, number_blocks - 1); /* Number of blocks, 0x00 to read one block */
+    p_cmd->len++;
+  } else {
+    UINT8_TO_STREAM(
+        p, number_blocks - 1); /* Number of blocks, 0x00 to read one block */
+  }
 
   if (rw_i93_send_to_lower(p_cmd)) {
-    rw_cb.tcb.i93.sent_cmd = I93_CMD_READ_MULTI_BLOCK;
+    if (rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_EXT_COMMANDS)
+      rw_cb.tcb.i93.sent_cmd = I93_CMD_EXT_READ_MULTI_BLOCK;
+    else
+      rw_cb.tcb.i93.sent_cmd = I93_CMD_READ_MULTI_BLOCK;
     return NFC_STATUS_OK;
   } else {
     return NFC_STATUS_FAILED;
@@ -882,19 +1047,18 @@
 ** Returns          tNFC_STATUS
 **
 *******************************************************************************/
-tNFC_STATUS rw_i93_send_cmd_write_multi_blocks(uint8_t first_block_number,
+tNFC_STATUS rw_i93_send_cmd_write_multi_blocks(uint16_t first_block_number,
                                                uint16_t number_blocks,
                                                uint8_t* p_data) {
   NFC_HDR* p_cmd;
   uint8_t* p;
 
-  RW_TRACE_DEBUG0("rw_i93_send_cmd_write_multi_blocks ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_cmd = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_cmd) {
-    RW_TRACE_ERROR0(
-        "rw_i93_send_cmd_write_multi_blocks (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return NFC_STATUS_NO_BUFFERS;
   }
 
@@ -907,11 +1071,25 @@
                       RW_I93_FLAG_DATA_RATE));
 
   /* Command Code */
-  UINT8_TO_STREAM(p, I93_CMD_WRITE_MULTI_BLOCK);
+  if (rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_EXT_COMMANDS) {
+    INT8_TO_STREAM(p, I93_CMD_EXT_WRITE_MULTI_BLOCK);
+  } else {
+    UINT8_TO_STREAM(p, I93_CMD_WRITE_MULTI_BLOCK);
+  }
 
   /* Parameters */
   ARRAY8_TO_STREAM(p, rw_cb.tcb.i93.uid); /* UID */
-  UINT8_TO_STREAM(p, first_block_number); /* First block number */
+  if (rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_EXT_COMMANDS) {
+    UINT16_TO_STREAM(p, first_block_number); /* Block number */
+    UINT16_TO_STREAM(
+        p, number_blocks - 1); /* Number of blocks, 0x00 to read one block */
+    p_cmd->len += 2;
+  } else {
+    UINT8_TO_STREAM(p, first_block_number); /* Block number */
+    UINT8_TO_STREAM(
+        p, number_blocks - 1); /* Number of blocks, 0x00 to read one block */
+  }
+
   UINT8_TO_STREAM(
       p, number_blocks - 1); /* Number of blocks, 0x00 to read one block */
 
@@ -919,7 +1097,10 @@
   ARRAY_TO_STREAM(p, p_data, number_blocks * rw_cb.tcb.i93.block_size);
 
   if (rw_i93_send_to_lower(p_cmd)) {
-    rw_cb.tcb.i93.sent_cmd = I93_CMD_WRITE_MULTI_BLOCK;
+    if (rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_EXT_COMMANDS)
+      rw_cb.tcb.i93.sent_cmd = I93_CMD_EXT_WRITE_MULTI_BLOCK;
+    else
+      rw_cb.tcb.i93.sent_cmd = I93_CMD_WRITE_MULTI_BLOCK;
     return NFC_STATUS_OK;
   } else {
     return NFC_STATUS_FAILED;
@@ -939,12 +1120,12 @@
   NFC_HDR* p_cmd;
   uint8_t* p;
 
-  RW_TRACE_DEBUG0("rw_i93_send_cmd_select ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_cmd = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_cmd) {
-    RW_TRACE_ERROR0("rw_i93_send_cmd_select (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return NFC_STATUS_NO_BUFFERS;
   }
 
@@ -983,13 +1164,12 @@
   NFC_HDR* p_cmd;
   uint8_t* p;
 
-  RW_TRACE_DEBUG0("rw_i93_send_cmd_reset_to_ready ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_cmd = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_cmd) {
-    RW_TRACE_ERROR0(
-        "rw_i93_send_cmd_reset_to_ready (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return NFC_STATUS_NO_BUFFERS;
   }
 
@@ -1028,12 +1208,12 @@
   NFC_HDR* p_cmd;
   uint8_t* p;
 
-  RW_TRACE_DEBUG0("rw_i93_send_cmd_write_afi ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_cmd = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_cmd) {
-    RW_TRACE_ERROR0("rw_i93_send_cmd_write_afi (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return NFC_STATUS_NO_BUFFERS;
   }
 
@@ -1073,12 +1253,12 @@
   NFC_HDR* p_cmd;
   uint8_t* p;
 
-  RW_TRACE_DEBUG0("rw_i93_send_cmd_lock_afi ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_cmd = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_cmd) {
-    RW_TRACE_ERROR0("rw_i93_send_cmd_lock_afi (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return NFC_STATUS_NO_BUFFERS;
   }
 
@@ -1117,12 +1297,12 @@
   NFC_HDR* p_cmd;
   uint8_t* p;
 
-  RW_TRACE_DEBUG0("rw_i93_send_cmd_write_dsfid ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_cmd = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_cmd) {
-    RW_TRACE_ERROR0("rw_i93_send_cmd_write_dsfid (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return NFC_STATUS_NO_BUFFERS;
   }
 
@@ -1162,12 +1342,12 @@
   NFC_HDR* p_cmd;
   uint8_t* p;
 
-  RW_TRACE_DEBUG0("rw_i93_send_cmd_lock_dsfid ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_cmd = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_cmd) {
-    RW_TRACE_ERROR0("rw_i93_send_cmd_lock_dsfid (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return NFC_STATUS_NO_BUFFERS;
   }
 
@@ -1195,6 +1375,59 @@
 
 /*******************************************************************************
 **
+** Function         rw_i93_send_cmd_get_ext_sys_info
+**
+** Description      Send Get Extended System Information Request to VICC
+**
+** Returns          tNFC_STATUS
+**
+*******************************************************************************/
+tNFC_STATUS rw_i93_send_cmd_get_ext_sys_info(uint8_t* p_uid) {
+  NFC_HDR* p_cmd;
+  uint8_t* p;
+
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
+
+  p_cmd = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
+
+  if (!p_cmd) {
+    DLOG_IF(INFO, nfc_debug_enabled) << __func__ << "Cannot allocate buffer";
+    return NFC_STATUS_NO_BUFFERS;
+  }
+
+  p_cmd->offset = NCI_MSG_OFFSET_SIZE + NCI_DATA_HDR_SIZE;
+  p_cmd->len = 11;
+  p = (uint8_t*)(p_cmd + 1) + p_cmd->offset;
+
+  /* Flags */
+  UINT8_TO_STREAM(p, (I93_FLAG_ADDRESS_SET | RW_I93_FLAG_SUB_CARRIER |
+                      RW_I93_FLAG_DATA_RATE));
+
+  /* Command Code */
+  UINT8_TO_STREAM(p, I93_CMD_EXT_GET_SYS_INFO);
+
+  /* Parameters request field */
+  UINT8_TO_STREAM(p,
+                  (I93_INFO_FLAG_MOI | I93_INFO_FLAG_DSFID | I93_INFO_FLAG_AFI |
+                   I93_INFO_FLAG_MEM_SIZE | I93_INFO_FLAG_IC_REF));
+
+  /* Parameters */
+  if (p_uid) {
+    ARRAY8_TO_STREAM(p, p_uid); /* UID */
+  } else {
+    ARRAY8_TO_STREAM(p, rw_cb.tcb.i93.uid); /* UID */
+  }
+
+  if (rw_i93_send_to_lower(p_cmd)) {
+    rw_cb.tcb.i93.sent_cmd = I93_CMD_EXT_GET_SYS_INFO;
+    return NFC_STATUS_OK;
+  } else {
+    return NFC_STATUS_FAILED;
+  }
+}
+
+/*******************************************************************************
+**
 ** Function         rw_i93_send_cmd_get_sys_info
 **
 ** Description      Send Get System Information Request to VICC
@@ -1206,12 +1439,12 @@
   NFC_HDR* p_cmd;
   uint8_t* p;
 
-  RW_TRACE_DEBUG0("rw_i93_send_cmd_get_sys_info ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_cmd = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_cmd) {
-    RW_TRACE_ERROR0("rw_i93_send_cmd_get_sys_info (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return NFC_STATUS_NO_BUFFERS;
   }
 
@@ -1255,13 +1488,12 @@
   NFC_HDR* p_cmd;
   uint8_t *p, flags;
 
-  RW_TRACE_DEBUG0("rw_i93_send_cmd_get_multi_block_sec ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   p_cmd = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_cmd) {
-    RW_TRACE_ERROR0(
-        "rw_i93_send_cmd_get_multi_block_sec (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return NFC_STATUS_NO_BUFFERS;
   }
 
@@ -1279,12 +1511,17 @@
   UINT8_TO_STREAM(p, flags);
 
   /* Command Code */
-  UINT8_TO_STREAM(p, I93_CMD_GET_MULTI_BLK_SEC);
+  if (rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_EXT_COMMANDS) {
+    UINT8_TO_STREAM(p, I93_CMD_EXT_GET_MULTI_BLK_SEC);
+  } else {
+    UINT8_TO_STREAM(p, I93_CMD_GET_MULTI_BLK_SEC);
+  }
 
   /* Parameters */
   ARRAY8_TO_STREAM(p, rw_cb.tcb.i93.uid); /* UID */
 
-  if (rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_16BIT_NUM_BLOCK) {
+  if (rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_16BIT_NUM_BLOCK ||
+      rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_EXT_COMMANDS) {
     UINT16_TO_STREAM(p, first_block_number); /* First block number */
     UINT16_TO_STREAM(
         p, number_blocks - 1); /* Number of blocks, 0x00 to read one block */
@@ -1296,7 +1533,10 @@
   }
 
   if (rw_i93_send_to_lower(p_cmd)) {
-    rw_cb.tcb.i93.sent_cmd = I93_CMD_GET_MULTI_BLK_SEC;
+    if (rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_EXT_COMMANDS)
+      rw_cb.tcb.i93.sent_cmd = I93_CMD_EXT_GET_MULTI_BLK_SEC;
+    else
+      rw_cb.tcb.i93.sent_cmd = I93_CMD_GET_MULTI_BLK_SEC;
     return NFC_STATUS_OK;
   } else {
     return NFC_STATUS_FAILED;
@@ -1318,7 +1558,7 @@
   uint16_t first_block;
   uint16_t num_block;
 
-  RW_TRACE_DEBUG0("rw_i93_get_next_blocks ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   first_block = offset / p_i93->block_size;
 
@@ -1372,11 +1612,12 @@
   tRW_I93_CB* p_i93 = &rw_cb.tcb.i93;
   uint16_t num_blocks;
 
-  RW_TRACE_DEBUG0("rw_i93_get_next_block_sec ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (p_i93->num_block <= p_i93->rw_offset) {
-    RW_TRACE_ERROR2("rw_offset(0x%x) must be less than num_block(0x%x)",
-                    p_i93->rw_offset, p_i93->num_block);
+    LOG(ERROR) << StringPrintf(
+        "rw_offset(0x%x) must be less than num_block(0x%x)", p_i93->rw_offset,
+        p_i93->num_block);
     return NFC_STATUS_FAILED;
   }
 
@@ -1385,6 +1626,8 @@
   if (num_blocks > RW_I93_GET_MULTI_BLOCK_SEC_SIZE)
     num_blocks = RW_I93_GET_MULTI_BLOCK_SEC_SIZE;
 
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << __func__ << std::hex << rw_cb.tcb.i93.intl_flags;
   return rw_i93_send_cmd_get_multi_block_sec(p_i93->rw_offset, num_blocks);
 }
 
@@ -1405,20 +1648,16 @@
 **
 *******************************************************************************/
 void rw_i93_sm_detect_ndef(NFC_HDR* p_resp) {
-  uint8_t *p = (uint8_t *)(p_resp + 1) + p_resp->offset, *p_uid;
+  uint8_t *p = (uint8_t*)(p_resp + 1) + p_resp->offset, *p_uid;
   uint8_t flags, u8 = 0, cc[4];
   uint16_t length = p_resp->len, xx, block, first_block, last_block, num_blocks;
   tRW_I93_CB* p_i93 = &rw_cb.tcb.i93;
   tRW_DATA rw_data;
   tNFC_STATUS status = NFC_STATUS_FAILED;
 
-#if (BT_TRACE_VERBOSE == TRUE)
-  RW_TRACE_DEBUG2("rw_i93_sm_detect_ndef () sub_state:%s (0x%x)",
-                  rw_i93_get_sub_state_name(p_i93->sub_state),
-                  p_i93->sub_state);
-#else
-  RW_TRACE_DEBUG1("rw_i93_sm_detect_ndef () sub_state:0x%x", p_i93->sub_state);
-#endif
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "sub_state:%s (0x%x)",
+      rw_i93_get_sub_state_name(p_i93->sub_state).c_str(), p_i93->sub_state);
 
   if (length == 0) {
     android_errorWriteLog(0x534e4554, "121260197");
@@ -1434,7 +1673,8 @@
       /* This STM tag supports more than 2040 bytes */
       p_i93->intl_flags |= RW_I93_FLAG_16BIT_NUM_BLOCK;
     } else {
-      RW_TRACE_DEBUG1("Got error flags (0x%02x)", flags);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("Got error flags (0x%02x)", flags);
       rw_i93_handle_error(NFC_STATUS_FAILED);
     }
     return;
@@ -1454,7 +1694,8 @@
 
       if (u8 != I93_DFS_UNSUPPORTED) {
         /* if Data Storage Format is unknown */
-        RW_TRACE_DEBUG1("Got unknown DSFID (0x%02x)", u8);
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("Got unknown DSFID (0x%02x)", u8);
         rw_i93_handle_error(NFC_STATUS_FAILED);
       } else {
         /* get system information to get memory size */
@@ -1478,7 +1719,8 @@
       }
 
       if ((p_i93->block_size == 0) || (p_i93->num_block == 0)) {
-        RW_TRACE_DEBUG0("Unable to get tag memory size");
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("Unable to get tag memory size");
         rw_i93_handle_error(status);
       } else {
         /* read CC in the first block */
@@ -1514,16 +1756,14 @@
       **       : Bit 2:More than 2040 bytes are supported [STM]
       */
 
-      RW_TRACE_DEBUG4(
-          "rw_i93_sm_detect_ndef (): cc: 0x%02X 0x%02X 0x%02X 0x%02X", cc[0],
-          cc[1], cc[2], cc[3]);
-      RW_TRACE_DEBUG2(
-          "rw_i93_sm_detect_ndef (): Total blocks:0x%04X, Block size:0x%02X",
-          p_i93->num_block, p_i93->block_size);
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+          "cc: 0x%02X 0x%02X 0x%02X 0x%02X", cc[0], cc[1], cc[2], cc[3]);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("Total blocks:0x%04X, Block size:0x%02X",
+                          p_i93->num_block, p_i93->block_size);
 
-      if ((cc[0] == I93_ICODE_CC_MAGIC_NUMER) &&
-          ((cc[3] & I93_STM_CC_OVERFLOW_MASK) ||
-           (cc[2] * 8) == (p_i93->num_block * p_i93->block_size))) {
+      if ((cc[0] == I93_ICODE_CC_MAGIC_NUMER_E1) ||
+          (cc[0] == I93_ICODE_CC_MAGIC_NUMER_E2)) {
         if ((cc[1] & I93_ICODE_CC_READ_ACCESS_MASK) ==
             I93_ICODE_CC_READ_ACCESS_GRANTED) {
           if ((cc[1] & I93_ICODE_CC_WRITE_ACCESS_MASK) !=
@@ -1535,6 +1775,9 @@
             /* tag supports read multi blocks command */
             p_i93->intl_flags |= RW_I93_FLAG_READ_MULTI_BLOCK;
           }
+          if (cc[0] == I93_ICODE_CC_MAGIC_NUMER_E2) {
+            p_i93->intl_flags |= RW_I93_FLAG_EXT_COMMANDS;
+          }
           status = NFC_STATUS_OK;
         }
       }
@@ -1578,7 +1821,8 @@
             p_i93->tlv_type = I93_ICODE_TLV_TYPE_TERM;
             break;
           } else {
-            RW_TRACE_DEBUG1("Invalid type: 0x%02x", *(p + xx));
+            DLOG_IF(INFO, nfc_debug_enabled)
+                << StringPrintf("Invalid type: 0x%02x", *(p + xx));
             rw_i93_handle_error(NFC_STATUS_FAILED);
             return;
           }
@@ -1773,9 +2017,9 @@
       p_i93->state = RW_I93_STATE_IDLE;
       p_i93->sent_cmd = 0;
 
-      RW_TRACE_DEBUG3("NDEF cur_size(%d),max_size (%d), flags (0x%x)",
-                      rw_data.ndef.cur_size, rw_data.ndef.max_size,
-                      rw_data.ndef.flags);
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+          "NDEF cur_size(%d),max_size (%d), flags (0x%x)",
+          rw_data.ndef.cur_size, rw_data.ndef.max_size, rw_data.ndef.flags);
 
       (*(rw_cb.p_cback))(RW_I93_NDEF_DETECT_EVT, &rw_data);
       break;
@@ -1801,7 +2045,7 @@
   tRW_I93_CB* p_i93 = &rw_cb.tcb.i93;
   tRW_DATA rw_data;
 
-  RW_TRACE_DEBUG0("rw_i93_sm_read_ndef ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (length == 0) {
     android_errorWriteLog(0x534e4554, "122035770");
@@ -1813,7 +2057,8 @@
   length--;
 
   if (flags & I93_FLAG_ERROR_DETECTED) {
-    RW_TRACE_DEBUG1("Got error flags (0x%02x)", flags);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("Got error flags (0x%02x)", flags);
     rw_i93_handle_error(NFC_STATUS_FAILED);
     return;
   }
@@ -1859,13 +2104,15 @@
     p_i93->state = RW_I93_STATE_IDLE;
     p_i93->sent_cmd = 0;
 
-    RW_TRACE_DEBUG2("NDEF read complete read (%d)/total (%d)", p_resp->len,
-                    p_i93->ndef_length);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("NDEF read complete read (%d)/total (%d)", p_resp->len,
+                        p_i93->ndef_length);
 
     (*(rw_cb.p_cback))(RW_I93_NDEF_READ_CPLT_EVT, &rw_data);
   } else {
-    RW_TRACE_DEBUG2("NDEF read segment read (%d)/total (%d)", p_resp->len,
-                    p_i93->ndef_length);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("NDEF read segment read (%d)/total (%d)", p_resp->len,
+                        p_i93->ndef_length);
 
     if (p_resp->len > 0) {
       (*(rw_cb.p_cback))(RW_I93_NDEF_READ_EVT, &rw_data);
@@ -1900,13 +2147,9 @@
   tRW_I93_CB* p_i93 = &rw_cb.tcb.i93;
   tRW_DATA rw_data;
 
-#if (BT_TRACE_VERBOSE == TRUE)
-  RW_TRACE_DEBUG2("rw_i93_sm_update_ndef () sub_state:%s (0x%x)",
-                  rw_i93_get_sub_state_name(p_i93->sub_state),
-                  p_i93->sub_state);
-#else
-  RW_TRACE_DEBUG1("rw_i93_sm_update_ndef () sub_state:0x%x", p_i93->sub_state);
-#endif
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "sub_state:%s (0x%x)",
+      rw_i93_get_sub_state_name(p_i93->sub_state).c_str(), p_i93->sub_state);
 
   if (length == 0 || p_i93->block_size > I93_MAX_BLOCK_LENGH) {
     android_errorWriteLog(0x534e4554, "122320256");
@@ -1925,7 +2168,8 @@
         (*p == I93_ERROR_CODE_BLOCK_FAIL_TO_WRITE)) {
       /* ignore error */
     } else {
-      RW_TRACE_DEBUG1("Got error flags (0x%02x)", flags);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("Got error flags (0x%02x)", flags);
       rw_i93_handle_error(NFC_STATUS_FAILED);
       return;
     }
@@ -2136,9 +2380,9 @@
           }
         }
       } else {
-        RW_TRACE_DEBUG3("NDEF update complete, %d bytes, (%d-%d)",
-                        p_i93->ndef_length, p_i93->ndef_tlv_start_offset,
-                        p_i93->ndef_tlv_last_offset);
+        DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+            "NDEF update complete, %d bytes, (%d-%d)", p_i93->ndef_length,
+            p_i93->ndef_tlv_start_offset, p_i93->ndef_tlv_last_offset);
 
         p_i93->state = RW_I93_STATE_IDLE;
         p_i93->sent_cmd = 0;
@@ -2169,20 +2413,16 @@
 **
 *******************************************************************************/
 void rw_i93_sm_format(NFC_HDR* p_resp) {
-  uint8_t *p = (uint8_t *)(p_resp + 1) + p_resp->offset, *p_uid;
+  uint8_t *p = (uint8_t*)(p_resp + 1) + p_resp->offset, *p_uid;
   uint8_t flags;
   uint16_t length = p_resp->len, xx, block_number;
   tRW_I93_CB* p_i93 = &rw_cb.tcb.i93;
   tRW_DATA rw_data;
   tNFC_STATUS status = NFC_STATUS_FAILED;
 
-#if (BT_TRACE_VERBOSE == TRUE)
-  RW_TRACE_DEBUG2("rw_i93_sm_format () sub_state:%s (0x%x)",
-                  rw_i93_get_sub_state_name(p_i93->sub_state),
-                  p_i93->sub_state);
-#else
-  RW_TRACE_DEBUG1("rw_i93_sm_format () sub_state:0x%x", p_i93->sub_state);
-#endif
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "sub_state:%s (0x%x)",
+      rw_i93_get_sub_state_name(p_i93->sub_state).c_str(), p_i93->sub_state);
 
   STREAM_TO_UINT8(flags, p);
   length--;
@@ -2200,7 +2440,8 @@
       p_i93->intl_flags |= RW_I93_FLAG_16BIT_NUM_BLOCK;
       return;
     } else {
-      RW_TRACE_DEBUG1("Got error flags (0x%02x)", flags);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("Got error flags (0x%02x)", flags);
       rw_i93_handle_error(NFC_STATUS_FAILED);
       return;
     }
@@ -2246,7 +2487,8 @@
       }
 
       if ((p_i93->block_size == 0) || (p_i93->num_block == 0)) {
-        RW_TRACE_DEBUG0("Unable to get tag memory size");
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("Unable to get tag memory size");
         rw_i93_handle_error(status);
       } else if (p_i93->intl_flags & RW_I93_FLAG_RESET_DSFID) {
         if (rw_i93_send_cmd_write_dsfid(I93_DFS_UNSUPPORTED) == NFC_STATUS_OK) {
@@ -2392,7 +2634,7 @@
       p_i93->p_update_data = (uint8_t*)GKI_getbuf(RW_I93_FORMAT_DATA_LEN);
 
       if (!p_i93->p_update_data) {
-        RW_TRACE_ERROR0("rw_i93_sm_format (): Cannot allocate buffer");
+        LOG(ERROR) << StringPrintf("Cannot allocate buffer");
         rw_i93_handle_error(NFC_STATUS_FAILED);
         break;
       }
@@ -2400,7 +2642,7 @@
       p = p_i93->p_update_data;
 
       /* Capability Container */
-      *(p++) = I93_ICODE_CC_MAGIC_NUMER; /* magic number */
+      *(p++) = I93_ICODE_CC_MAGIC_NUMER_E1; /* magic number */
       *(p++) = 0x40;                     /* version 1.0, read/write */
 
       /* if memory size is less than 2048 bytes */
@@ -2508,14 +2750,9 @@
   tRW_I93_CB* p_i93 = &rw_cb.tcb.i93;
   tRW_DATA rw_data;
 
-#if (BT_TRACE_VERBOSE == TRUE)
-  RW_TRACE_DEBUG2("rw_i93_sm_set_read_only () sub_state:%s (0x%x)",
-                  rw_i93_get_sub_state_name(p_i93->sub_state),
-                  p_i93->sub_state);
-#else
-  RW_TRACE_DEBUG1("rw_i93_sm_set_read_only () sub_state:0x%x",
-                  p_i93->sub_state);
-#endif
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "sub_state:%s (0x%x)",
+      rw_i93_get_sub_state_name(p_i93->sub_state).c_str(), p_i93->sub_state);
 
   STREAM_TO_UINT8(flags, p);
   length--;
@@ -2528,7 +2765,8 @@
         (*p == I93_ERROR_CODE_BLOCK_FAIL_TO_WRITE)) {
       /* ignore error */
     } else {
-      RW_TRACE_DEBUG1("Got error flags (0x%02x)", flags);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("Got error flags (0x%02x)", flags);
       rw_i93_handle_error(NFC_STATUS_FAILED);
       return;
     }
@@ -2621,8 +2859,8 @@
   tRW_DATA rw_data;
   tRW_EVENT event;
 
-  RW_TRACE_DEBUG2("rw_i93_handle_error (): status:0x%02X, state:0x%X", status,
-                  p_i93->state);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("status:0x%02X, state:0x%X", status, p_i93->state);
 
   nfc_stop_quick_timer(&p_i93->timer);
 
@@ -2709,15 +2947,14 @@
 void rw_i93_process_timeout(TIMER_LIST_ENT* p_tle) {
   NFC_HDR* p_buf;
 
-  RW_TRACE_DEBUG1("rw_i93_process_timeout () event=%d", p_tle->event);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("event=%d", p_tle->event);
 
   if (p_tle->event == NFC_TTYPE_RW_I93_RESPONSE) {
     if ((rw_cb.tcb.i93.retry_count < RW_MAX_RETRIES) &&
         (rw_cb.tcb.i93.p_retry_cmd) &&
         (rw_cb.tcb.i93.sent_cmd != I93_CMD_STAY_QUIET)) {
       rw_cb.tcb.i93.retry_count++;
-      RW_TRACE_ERROR1("rw_i93_process_timeout (): retry_count = %d",
-                      rw_cb.tcb.i93.retry_count);
+      LOG(ERROR) << StringPrintf("retry_count = %d", rw_cb.tcb.i93.retry_count);
 
       p_buf = rw_cb.tcb.i93.p_retry_cmd;
       rw_cb.tcb.i93.p_retry_cmd = NULL;
@@ -2735,7 +2972,7 @@
     }
     rw_i93_handle_error(NFC_STATUS_TIMEOUT);
   } else {
-    RW_TRACE_ERROR1("rw_i93_process_timeout () unknown event=%d", p_tle->event);
+    LOG(ERROR) << StringPrintf("unknown event=%d", p_tle->event);
   }
 }
 
@@ -2748,17 +2985,15 @@
 ** Returns          none
 **
 *******************************************************************************/
-static void rw_i93_data_cback(uint8_t conn_id, tNFC_CONN_EVT event,
-                              tNFC_CONN* p_data) {
+static void rw_i93_data_cback(__attribute__((unused)) uint8_t conn_id,
+                              tNFC_CONN_EVT event, tNFC_CONN* p_data) {
   tRW_I93_CB* p_i93 = &rw_cb.tcb.i93;
   NFC_HDR* p_resp;
   tRW_DATA rw_data;
 
-#if (BT_TRACE_VERBOSE == TRUE)
   uint8_t begin_state = p_i93->state;
-#endif
 
-  RW_TRACE_DEBUG1("rw_i93_data_cback () event = 0x%X", event);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("event = 0x%X", event);
 
   if ((event == NFC_DEACTIVATE_CEVT) || (event == NFC_ERROR_CEVT) ||
       ((event == NFC_DATA_CEVT) && (p_data->status != NFC_STATUS_OK))) {
@@ -2768,8 +3003,7 @@
       if ((p_i93->retry_count < RW_MAX_RETRIES) && (p_i93->p_retry_cmd)) {
         p_i93->retry_count++;
 
-        RW_TRACE_ERROR1("rw_i93_data_cback (): retry_count = %d",
-                        p_i93->retry_count);
+        LOG(ERROR) << StringPrintf("retry_count = %d", p_i93->retry_count);
 
         p_resp = p_i93->p_retry_cmd;
         p_i93->p_retry_cmd = NULL;
@@ -2814,16 +3048,9 @@
     p_i93->retry_count = 0;
   }
 
-#if (BT_TRACE_PROTOCOL == TRUE)
-  DispRWI93Tag(p_resp, true, p_i93->sent_cmd);
-#endif
-
-#if (BT_TRACE_VERBOSE == TRUE)
-  RW_TRACE_DEBUG2("RW I93 state: <%s (%d)>",
-                  rw_i93_get_state_name(p_i93->state), p_i93->state);
-#else
-  RW_TRACE_DEBUG1("RW I93 state: %d", p_i93->state);
-#endif
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "RW I93 state: <%s (%d)>", rw_i93_get_state_name(p_i93->state).c_str(),
+      p_i93->state);
 
   switch (p_i93->state) {
     case RW_I93_STATE_IDLE:
@@ -2881,18 +3108,17 @@
       break;
 
     default:
-      RW_TRACE_ERROR1("rw_i93_data_cback (): invalid state=%d", p_i93->state);
+      LOG(ERROR) << StringPrintf("invalid state=%d", p_i93->state);
       GKI_freebuf(p_resp);
       break;
   }
 
-#if (BT_TRACE_VERBOSE == TRUE)
   if (begin_state != p_i93->state) {
-    RW_TRACE_DEBUG2("RW I93 state changed:<%s> -> <%s>",
-                    rw_i93_get_state_name(begin_state),
-                    rw_i93_get_state_name(p_i93->state));
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("RW I93 state changed:<%s> -> <%s>",
+                        rw_i93_get_state_name(begin_state).c_str(),
+                        rw_i93_get_state_name(p_i93->state).c_str());
   }
-#endif
 }
 
 /*******************************************************************************
@@ -2908,7 +3134,7 @@
   tRW_I93_CB* p_i93 = &rw_cb.tcb.i93;
   uint8_t uid[I93_UID_BYTE_LEN], *p;
 
-  RW_TRACE_DEBUG0("rw_i93_select ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   NFC_SetStaticRfCback(rw_i93_data_cback);
 
@@ -2941,13 +3167,12 @@
 tNFC_STATUS RW_I93Inventory(bool including_afi, uint8_t afi, uint8_t* p_uid) {
   tNFC_STATUS status;
 
-  RW_TRACE_API2("RW_I93Inventory (), including_afi:%d, AFI:0x%02X",
-                including_afi, afi);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf(", including_afi:%d, AFI:0x%02X", including_afi, afi);
 
   if (rw_cb.tcb.i93.state != RW_I93_STATE_IDLE) {
-    RW_TRACE_ERROR1(
-        "RW_I93Inventory ():Unable to start command at state (0x%X)",
-        rw_cb.tcb.i93.state);
+    LOG(ERROR) << StringPrintf("Unable to start command at state (0x%X)",
+                               rw_cb.tcb.i93.state);
     return NFC_STATUS_BUSY;
   }
 
@@ -2977,12 +3202,11 @@
 tNFC_STATUS RW_I93StayQuiet(void) {
   tNFC_STATUS status;
 
-  RW_TRACE_API0("RW_I93StayQuiet ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (rw_cb.tcb.i93.state != RW_I93_STATE_IDLE) {
-    RW_TRACE_ERROR1(
-        "RW_I93StayQuiet ():Unable to start command at state (0x%X)",
-        rw_cb.tcb.i93.state);
+    LOG(ERROR) << StringPrintf("Unable to start command at state (0x%X)",
+                               rw_cb.tcb.i93.state);
     return NFC_STATUS_BUSY;
   }
 
@@ -3011,12 +3235,12 @@
 tNFC_STATUS RW_I93ReadSingleBlock(uint16_t block_number) {
   tNFC_STATUS status;
 
-  RW_TRACE_API1("RW_I93ReadSingleBlock () block_number:0x%02X", block_number);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("block_number:0x%02X", block_number);
 
   if (rw_cb.tcb.i93.state != RW_I93_STATE_IDLE) {
-    RW_TRACE_ERROR1(
-        "RW_I93ReadSingleBlock ():Unable to start command at state (0x%X)",
-        rw_cb.tcb.i93.state);
+    LOG(ERROR) << StringPrintf("Unable to start command at state (0x%X)",
+                               rw_cb.tcb.i93.state);
     return NFC_STATUS_BUSY;
   }
 
@@ -3047,17 +3271,16 @@
 tNFC_STATUS RW_I93WriteSingleBlock(uint16_t block_number, uint8_t* p_data) {
   tNFC_STATUS status;
 
-  RW_TRACE_API0("RW_I93WriteSingleBlock ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (rw_cb.tcb.i93.state != RW_I93_STATE_IDLE) {
-    RW_TRACE_ERROR1(
-        "RW_I93WriteSingleBlock ():Unable to start command at state (0x%X)",
-        rw_cb.tcb.i93.state);
+    LOG(ERROR) << StringPrintf("Unable to start command at state (0x%X)",
+                               rw_cb.tcb.i93.state);
     return NFC_STATUS_BUSY;
   }
 
   if (rw_cb.tcb.i93.block_size == 0) {
-    RW_TRACE_ERROR0("RW_I93WriteSingleBlock ():Block size is unknown");
+    LOG(ERROR) << StringPrintf("Block size is unknown");
     return NFC_STATUS_FAILED;
   }
 
@@ -3086,12 +3309,11 @@
 tNFC_STATUS RW_I93LockBlock(uint8_t block_number) {
   tNFC_STATUS status;
 
-  RW_TRACE_API0("RW_I93LockBlock ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (rw_cb.tcb.i93.state != RW_I93_STATE_IDLE) {
-    RW_TRACE_ERROR1(
-        "RW_I93LockBlock ():Unable to start command at state (0x%X)",
-        rw_cb.tcb.i93.state);
+    LOG(ERROR) << StringPrintf("Unable to start command at state (0x%X)",
+                               rw_cb.tcb.i93.state);
     return NFC_STATUS_BUSY;
   }
 
@@ -3121,12 +3343,11 @@
                                      uint16_t number_blocks) {
   tNFC_STATUS status;
 
-  RW_TRACE_API0("RW_I93ReadMultipleBlocks ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (rw_cb.tcb.i93.state != RW_I93_STATE_IDLE) {
-    RW_TRACE_ERROR1(
-        "RW_I93ReadMultipleBlocks ():Unable to start command at state (0x%X)",
-        rw_cb.tcb.i93.state);
+    LOG(ERROR) << StringPrintf("Unable to start command at state (0x%X)",
+                               rw_cb.tcb.i93.state);
     return NFC_STATUS_BUSY;
   }
 
@@ -3152,21 +3373,20 @@
 **                  NFC_STATUS_FAILED if other error
 **
 *******************************************************************************/
-tNFC_STATUS RW_I93WriteMultipleBlocks(uint8_t first_block_number,
+tNFC_STATUS RW_I93WriteMultipleBlocks(uint16_t first_block_number,
                                       uint16_t number_blocks, uint8_t* p_data) {
   tNFC_STATUS status;
 
-  RW_TRACE_API0("RW_I93WriteMultipleBlocks ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (rw_cb.tcb.i93.state != RW_I93_STATE_IDLE) {
-    RW_TRACE_ERROR1(
-        "RW_I93WriteMultipleBlocks ():Unable to start command at state (0x%X)",
-        rw_cb.tcb.i93.state);
+    LOG(ERROR) << StringPrintf("Unable to start command at state (0x%X)",
+                               rw_cb.tcb.i93.state);
     return NFC_STATUS_BUSY;
   }
 
   if (rw_cb.tcb.i93.block_size == 0) {
-    RW_TRACE_ERROR0("RW_I93WriteSingleBlock ():Block size is unknown");
+    LOG(ERROR) << StringPrintf("Block size is unknown");
     return NFC_STATUS_FAILED;
   }
 
@@ -3201,11 +3421,11 @@
 tNFC_STATUS RW_I93Select(uint8_t* p_uid) {
   tNFC_STATUS status;
 
-  RW_TRACE_API0("RW_I93Select ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (rw_cb.tcb.i93.state != RW_I93_STATE_IDLE) {
-    RW_TRACE_ERROR1("RW_I93Select ():Unable to start command at state (0x%X)",
-                    rw_cb.tcb.i93.state);
+    LOG(ERROR) << StringPrintf("Unable to start command at state (0x%X)",
+                               rw_cb.tcb.i93.state);
     return NFC_STATUS_BUSY;
   }
 
@@ -3215,7 +3435,7 @@
       rw_cb.tcb.i93.state = RW_I93_STATE_BUSY;
     }
   } else {
-    RW_TRACE_ERROR0("RW_I93Select ():UID shall be provided");
+    LOG(ERROR) << StringPrintf("UID shall be provided");
     status = NFC_STATUS_FAILED;
   }
 
@@ -3239,12 +3459,11 @@
 tNFC_STATUS RW_I93ResetToReady(void) {
   tNFC_STATUS status;
 
-  RW_TRACE_API0("RW_I93ResetToReady ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (rw_cb.tcb.i93.state != RW_I93_STATE_IDLE) {
-    RW_TRACE_ERROR1(
-        "RW_I93ResetToReady ():Unable to start command at state (0x%X)",
-        rw_cb.tcb.i93.state);
+    LOG(ERROR) << StringPrintf("Unable to start command at state (0x%X)",
+                               rw_cb.tcb.i93.state);
     return NFC_STATUS_BUSY;
   }
 
@@ -3273,11 +3492,11 @@
 tNFC_STATUS RW_I93WriteAFI(uint8_t afi) {
   tNFC_STATUS status;
 
-  RW_TRACE_API0("RW_I93WriteAFI ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (rw_cb.tcb.i93.state != RW_I93_STATE_IDLE) {
-    RW_TRACE_ERROR1("RW_I93WriteAFI ():Unable to start command at state (0x%X)",
-                    rw_cb.tcb.i93.state);
+    LOG(ERROR) << StringPrintf("Unable to start command at state (0x%X)",
+                               rw_cb.tcb.i93.state);
     return NFC_STATUS_BUSY;
   }
 
@@ -3306,11 +3525,11 @@
 tNFC_STATUS RW_I93LockAFI(void) {
   tNFC_STATUS status;
 
-  RW_TRACE_API0("RW_I93LockAFI ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (rw_cb.tcb.i93.state != RW_I93_STATE_IDLE) {
-    RW_TRACE_ERROR1("RW_I93LockAFI ():Unable to start command at state (0x%X)",
-                    rw_cb.tcb.i93.state);
+    LOG(ERROR) << StringPrintf("Unable to start command at state (0x%X)",
+                               rw_cb.tcb.i93.state);
     return NFC_STATUS_BUSY;
   }
 
@@ -3339,12 +3558,11 @@
 tNFC_STATUS RW_I93WriteDSFID(uint8_t dsfid) {
   tNFC_STATUS status;
 
-  RW_TRACE_API0("RW_I93WriteDSFID ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (rw_cb.tcb.i93.state != RW_I93_STATE_IDLE) {
-    RW_TRACE_ERROR1(
-        "RW_I93WriteDSFID ():Unable to start command at state (0x%X)",
-        rw_cb.tcb.i93.state);
+    LOG(ERROR) << StringPrintf("Unable to start command at state (0x%X)",
+                               rw_cb.tcb.i93.state);
     return NFC_STATUS_BUSY;
   }
 
@@ -3373,12 +3591,11 @@
 tNFC_STATUS RW_I93LockDSFID(void) {
   tNFC_STATUS status;
 
-  RW_TRACE_API0("RW_I93LockDSFID ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (rw_cb.tcb.i93.state != RW_I93_STATE_IDLE) {
-    RW_TRACE_ERROR1(
-        "RW_I93LockDSFID ():Unable to start command at state (0x%X)",
-        rw_cb.tcb.i93.state);
+    LOG(ERROR) << StringPrintf("Unable to start command at state (0x%X)",
+                               rw_cb.tcb.i93.state);
     return NFC_STATUS_BUSY;
   }
 
@@ -3407,12 +3624,11 @@
 tNFC_STATUS RW_I93GetSysInfo(uint8_t* p_uid) {
   tNFC_STATUS status;
 
-  RW_TRACE_API0("RW_I93GetSysInfo ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (rw_cb.tcb.i93.state != RW_I93_STATE_IDLE) {
-    RW_TRACE_ERROR1(
-        "RW_I93GetSysInfo ():Unable to start command at state (0x%X)",
-        rw_cb.tcb.i93.state);
+    LOG(ERROR) << StringPrintf("Unable to start command at state (0x%X)",
+                               rw_cb.tcb.i93.state);
     return NFC_STATUS_BUSY;
   }
 
@@ -3448,11 +3664,11 @@
                                               uint16_t number_blocks) {
   tNFC_STATUS status;
 
-  RW_TRACE_API0("RW_I93GetMultiBlockSecurityStatus ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (rw_cb.tcb.i93.state != RW_I93_STATE_IDLE) {
-    RW_TRACE_ERROR1(
-        "RW_I93GetMultiBlockSecurityStatus ():Unable to start command at state "
+    LOG(ERROR) << StringPrintf(
+        "Unable to start command at state "
         "(0x%X)",
         rw_cb.tcb.i93.state);
     return NFC_STATUS_BUSY;
@@ -3483,12 +3699,11 @@
   tNFC_STATUS status;
   tRW_I93_RW_SUBSTATE sub_state;
 
-  RW_TRACE_API0("RW_I93DetectNDef ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (rw_cb.tcb.i93.state != RW_I93_STATE_IDLE) {
-    RW_TRACE_ERROR1(
-        "RW_I93DetectNDef ():Unable to start command at state (0x%X)",
-        rw_cb.tcb.i93.state);
+    LOG(ERROR) << StringPrintf("Unable to start command at state (0x%X)",
+                               rw_cb.tcb.i93.state);
     return NFC_STATUS_FAILED;
   }
 
@@ -3538,11 +3753,11 @@
 **
 *******************************************************************************/
 tNFC_STATUS RW_I93ReadNDef(void) {
-  RW_TRACE_API0("RW_I93ReadNDef ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (rw_cb.tcb.i93.state != RW_I93_STATE_IDLE) {
-    RW_TRACE_ERROR1("RW_I93ReadNDef ():Unable to start command at state (0x%X)",
-                    rw_cb.tcb.i93.state);
+    LOG(ERROR) << StringPrintf("Unable to start command at state (0x%X)",
+                               rw_cb.tcb.i93.state);
     return NFC_STATUS_FAILED;
   }
 
@@ -3557,7 +3772,7 @@
       return NFC_STATUS_FAILED;
     }
   } else {
-    RW_TRACE_ERROR0("RW_I93ReadNDef ():No NDEF detected");
+    LOG(ERROR) << StringPrintf("No NDEF detected");
     return NFC_STATUS_FAILED;
   }
 
@@ -3584,23 +3799,22 @@
 tNFC_STATUS RW_I93UpdateNDef(uint16_t length, uint8_t* p_data) {
   uint16_t block_number;
 
-  RW_TRACE_API1("RW_I93UpdateNDef () length:%d", length);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("length:%d", length);
 
   if (rw_cb.tcb.i93.state != RW_I93_STATE_IDLE) {
-    RW_TRACE_ERROR1(
-        "RW_I93UpdateNDef ():Unable to start command at state (0x%X)",
-        rw_cb.tcb.i93.state);
+    LOG(ERROR) << StringPrintf("Unable to start command at state (0x%X)",
+                               rw_cb.tcb.i93.state);
     return NFC_STATUS_FAILED;
   }
 
   if (rw_cb.tcb.i93.tlv_type == I93_ICODE_TLV_TYPE_NDEF) {
     if (rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_READ_ONLY) {
-      RW_TRACE_ERROR0("RW_I93UpdateNDef ():NDEF is read-only");
+      LOG(ERROR) << StringPrintf("NDEF is read-only");
       return NFC_STATUS_FAILED;
     }
     if (rw_cb.tcb.i93.max_ndef_length < length) {
-      RW_TRACE_ERROR2(
-          "RW_I93UpdateNDef ():data (%d bytes) is more than max NDEF length "
+      LOG(ERROR) << StringPrintf(
+          "data (%d bytes) is more than max NDEF length "
           "(%d)",
           length, rw_cb.tcb.i93.max_ndef_length);
       return NFC_STATUS_FAILED;
@@ -3623,7 +3837,7 @@
       return NFC_STATUS_FAILED;
     }
   } else {
-    RW_TRACE_ERROR0("RW_I93ReadNDef ():No NDEF detected");
+    LOG(ERROR) << StringPrintf("No NDEF detected");
     return NFC_STATUS_FAILED;
   }
 
@@ -3646,12 +3860,11 @@
   tNFC_STATUS status;
   tRW_I93_RW_SUBSTATE sub_state;
 
-  RW_TRACE_API0("RW_I93FormatNDef ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (rw_cb.tcb.i93.state != RW_I93_STATE_IDLE) {
-    RW_TRACE_ERROR1(
-        "RW_I93FormatNDef ():Unable to start command at state (0x%X)",
-        rw_cb.tcb.i93.state);
+    LOG(ERROR) << StringPrintf("Unable to start command at state (0x%X)",
+                               rw_cb.tcb.i93.state);
     return NFC_STATUS_FAILED;
   }
 
@@ -3694,18 +3907,17 @@
 **
 *******************************************************************************/
 tNFC_STATUS RW_I93SetTagReadOnly(void) {
-  RW_TRACE_API0("RW_I93SetTagReadOnly ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (rw_cb.tcb.i93.state != RW_I93_STATE_IDLE) {
-    RW_TRACE_ERROR1(
-        "RW_I93SetTagReadOnly ():Unable to start command at state (0x%X)",
-        rw_cb.tcb.i93.state);
+    LOG(ERROR) << StringPrintf("Unable to start command at state (0x%X)",
+                               rw_cb.tcb.i93.state);
     return NFC_STATUS_FAILED;
   }
 
   if (rw_cb.tcb.i93.tlv_type == I93_ICODE_TLV_TYPE_NDEF) {
     if (rw_cb.tcb.i93.intl_flags & RW_I93_FLAG_READ_ONLY) {
-      RW_TRACE_ERROR0("RW_I93SetTagReadOnly ():NDEF is already read-only");
+      LOG(ERROR) << StringPrintf("NDEF is already read-only");
       return NFC_STATUS_FAILED;
     }
 
@@ -3717,7 +3929,7 @@
       return NFC_STATUS_FAILED;
     }
   } else {
-    RW_TRACE_ERROR0("RW_I93SetTagReadOnly ():No NDEF detected");
+    LOG(ERROR) << StringPrintf("No NDEF detected");
     return NFC_STATUS_FAILED;
   }
 
@@ -3743,7 +3955,7 @@
   tNFC_STATUS status;
   tRW_DATA evt_data;
 
-  RW_TRACE_API0("RW_I93PresenceCheck ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (!rw_cb.p_cback) {
     return NFC_STATUS_FAILED;
@@ -3768,7 +3980,6 @@
   return (status);
 }
 
-#if (BT_TRACE_VERBOSE == TRUE)
 /*******************************************************************************
 **
 ** Function         rw_i93_get_state_name
@@ -3780,30 +3991,28 @@
 ** Returns          pointer to the name
 **
 *******************************************************************************/
-static char* rw_i93_get_state_name(uint8_t state) {
+static std::string rw_i93_get_state_name(uint8_t state) {
   switch (state) {
     case RW_I93_STATE_NOT_ACTIVATED:
-      return ("NOT_ACTIVATED");
+      return "NOT_ACTIVATED";
     case RW_I93_STATE_IDLE:
-      return ("IDLE");
+      return "IDLE";
     case RW_I93_STATE_BUSY:
-      return ("BUSY");
-
+      return "BUSY";
     case RW_I93_STATE_DETECT_NDEF:
-      return ("NDEF_DETECTION");
+      return "NDEF_DETECTION";
     case RW_I93_STATE_READ_NDEF:
-      return ("READ_NDEF");
+      return "READ_NDEF";
     case RW_I93_STATE_UPDATE_NDEF:
-      return ("UPDATE_NDEF");
+      return "UPDATE_NDEF";
     case RW_I93_STATE_FORMAT:
-      return ("FORMAT");
+      return "FORMAT";
     case RW_I93_STATE_SET_READ_ONLY:
-      return ("SET_READ_ONLY");
-
+      return "SET_READ_ONLY";
     case RW_I93_STATE_PRESENCE_CHECK:
-      return ("PRESENCE_CHECK");
+      return "PRESENCE_CHECK";
     default:
-      return ("???? UNKNOWN STATE");
+      return "???? UNKNOWN STATE";
   }
 }
 
@@ -3818,38 +4027,38 @@
 ** Returns          pointer to the name
 **
 *******************************************************************************/
-static char* rw_i93_get_sub_state_name(uint8_t sub_state) {
+static std::string rw_i93_get_sub_state_name(uint8_t sub_state) {
   switch (sub_state) {
     case RW_I93_SUBSTATE_WAIT_UID:
-      return ("WAIT_UID");
+      return "WAIT_UID";
     case RW_I93_SUBSTATE_WAIT_SYS_INFO:
-      return ("WAIT_SYS_INFO");
+      return "WAIT_SYS_INFO";
     case RW_I93_SUBSTATE_WAIT_CC:
-      return ("WAIT_CC");
+      return "WAIT_CC";
     case RW_I93_SUBSTATE_SEARCH_NDEF_TLV:
-      return ("SEARCH_NDEF_TLV");
+      return "SEARCH_NDEF_TLV";
     case RW_I93_SUBSTATE_CHECK_LOCK_STATUS:
-      return ("CHECK_LOCK_STATUS");
+      return "CHECK_LOCK_STATUS";
     case RW_I93_SUBSTATE_RESET_LEN:
-      return ("RESET_LEN");
+      return "RESET_LEN";
     case RW_I93_SUBSTATE_WRITE_NDEF:
-      return ("WRITE_NDEF");
+      return "WRITE_NDEF";
     case RW_I93_SUBSTATE_UPDATE_LEN:
-      return ("UPDATE_LEN");
+      return "UPDATE_LEN";
     case RW_I93_SUBSTATE_WAIT_RESET_DSFID_AFI:
-      return ("WAIT_RESET_DSFID_AFI");
+      return "WAIT_RESET_DSFID_AFI";
     case RW_I93_SUBSTATE_CHECK_READ_ONLY:
-      return ("CHECK_READ_ONLY");
+      return "CHECK_READ_ONLY";
     case RW_I93_SUBSTATE_WRITE_CC_NDEF_TLV:
-      return ("WRITE_CC_NDEF_TLV");
+      return "WRITE_CC_NDEF_TLV";
     case RW_I93_SUBSTATE_WAIT_UPDATE_CC:
-      return ("WAIT_UPDATE_CC");
+      return "WAIT_UPDATE_CC";
     case RW_I93_SUBSTATE_LOCK_NDEF_TLV:
-      return ("LOCK_NDEF_TLV");
+      return "LOCK_NDEF_TLV";
     case RW_I93_SUBSTATE_WAIT_LOCK_CC:
-      return ("WAIT_LOCK_CC");
+      return "WAIT_LOCK_CC";
     default:
-      return ("???? UNKNOWN SUBSTATE");
+      return "???? UNKNOWN SUBSTATE";
   }
 }
 
@@ -3864,42 +4073,44 @@
 ** Returns          pointer to the name
 **
 *******************************************************************************/
-static char* rw_i93_get_tag_name(uint8_t product_version) {
+static std::string rw_i93_get_tag_name(uint8_t product_version) {
   switch (product_version) {
     case RW_I93_ICODE_SLI:
-      return ("SLI/SLIX");
+      return "SLI/SLIX";
     case RW_I93_ICODE_SLI_S:
-      return ("SLI-S/SLIX-S");
+      return "SLI-S/SLIX-S";
     case RW_I93_ICODE_SLI_L:
-      return ("SLI-L/SLIX-L");
+      return "SLI-L/SLIX-L";
     case RW_I93_TAG_IT_HF_I_PLUS_INLAY:
-      return ("Tag-it HF-I Plus Inlay");
+      return "Tag-it HF-I Plus Inlay";
     case RW_I93_TAG_IT_HF_I_PLUS_CHIP:
-      return ("Tag-it HF-I Plus Chip");
+      return "Tag-it HF-I Plus Chip";
     case RW_I93_TAG_IT_HF_I_STD_CHIP_INLAY:
-      return ("Tag-it HF-I Standard Chip/Inlyas");
+      return "Tag-it HF-I Standard Chip/Inlyas";
     case RW_I93_TAG_IT_HF_I_PRO_CHIP_INLAY:
-      return ("Tag-it HF-I Pro Chip/Inlays");
+      return "Tag-it HF-I Pro Chip/Inlays";
     case RW_I93_STM_LRI1K:
-      return ("LRi1K");
+      return "LRi1K";
     case RW_I93_STM_LRI2K:
-      return ("LRi2K");
+      return "LRi2K";
     case RW_I93_STM_LRIS2K:
-      return ("LRiS2K");
+      return "LRiS2K";
     case RW_I93_STM_LRIS64K:
-      return ("LRiS64K");
+      return "LRiS64K";
     case RW_I93_STM_M24LR64_R:
-      return ("M24LR64");
+      return "M24LR64";
     case RW_I93_STM_M24LR04E_R:
-      return ("M24LR04E");
+      return "M24LR04E";
     case RW_I93_STM_M24LR16E_R:
-      return ("M24LR16E");
+      return "M24LR16E";
     case RW_I93_STM_M24LR64E_R:
-      return ("M24LR64E");
+      return "M24LR64E";
+    case RW_I93_STM_ST25DV04K:
+      return "ST25DV04";
+    case RW_I93_STM_ST25DVHIK:
+      return "ST25DV";
     case RW_I93_UNKNOWN_PRODUCT:
     default:
-      return ("UNKNOWN");
+      return "UNKNOWN";
   }
 }
-
-#endif
diff --git a/src/nfc/tags/rw_main.c b/src/nfc/tags/rw_main.cc
similarity index 86%
rename from src/nfc/tags/rw_main.c
rename to src/nfc/tags/rw_main.cc
index 9ff1d14..34dadae 100644
--- a/src/nfc/tags/rw_main.c
+++ b/src/nfc/tags/rw_main.cc
@@ -24,20 +24,28 @@
  *
 ******************************************************************************/
 #include <string.h>
-#include "bt_types.h"
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "nfc_target.h"
 
+#include "bt_types.h"
 #include "nci_hmsgs.h"
 #include "nfc_api.h"
 #include "rw_api.h"
 #include "rw_int.h"
 
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
+
 tRW_CB rw_cb;
+
 /*******************************************************************************
 *******************************************************************************/
 void rw_init(void) {
   memset(&rw_cb, 0, sizeof(tRW_CB));
-  rw_cb.trace_level = NFC_INITIAL_TRACE_LEVEL;
 }
 
 #if (RW_STATS_INCLUDED == TRUE)
@@ -137,14 +145,16 @@
   ticks = GKI_get_tick_count() - rw_cb.stats.start_tick;
   elapsed_ms = GKI_TICKS_TO_MS(ticks);
 
-  RW_TRACE_DEBUG5(
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
       "NFC tx stats: cmds:%i, retries:%i, aborted: %i, tx_errs: %i, bytes "
       "sent:%i",
       rw_cb.stats.num_ops, rw_cb.stats.num_retries, rw_cb.stats.num_fail,
       rw_cb.stats.num_trans_err, rw_cb.stats.bytes_sent);
-  RW_TRACE_DEBUG2("    rx stats: rx-crc errors %i, bytes received: %i",
-                  rw_cb.stats.num_crc, rw_cb.stats.bytes_received);
-  RW_TRACE_DEBUG1("    time activated %i ms", elapsed_ms);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("    rx stats: rx-crc errors %i, bytes received: %i",
+                      rw_cb.stats.num_crc, rw_cb.stats.bytes_received);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("    time activated %i ms", elapsed_ms);
 }
 #endif /* RW_STATS_INCLUDED */
 
@@ -171,7 +181,8 @@
       memcpy(p, p_raw_data, data_len);
       p_data->len = data_len;
 
-      RW_TRACE_EVENT1("RW SENT raw frame (0x%x)", data_len);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("RW SENT raw frame (0x%x)", data_len);
       status = NFC_SendData(NFC_RF_CONN_ID, p_data);
     }
   }
@@ -192,13 +203,14 @@
   tNFC_STATUS status = NFC_STATUS_FAILED;
 
   /* check for null cback here / remove checks from rw_t?t */
-  RW_TRACE_DEBUG3("RW_SetActivatedTagType protocol:%d, technology:%d, SAK:%d",
-                  p_activate_params->protocol,
-                  p_activate_params->rf_tech_param.mode,
-                  p_activate_params->rf_tech_param.param.pa.sel_rsp);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "RW_SetActivatedTagType protocol:%d, technology:%d, SAK:%d",
+      p_activate_params->protocol, p_activate_params->rf_tech_param.mode,
+      p_activate_params->rf_tech_param.param.pa.sel_rsp);
 
   if (p_cback == NULL) {
-    RW_TRACE_ERROR0("RW_SetActivatedTagType called with NULL callback");
+    LOG(ERROR) << StringPrintf(
+        "RW_SetActivatedTagType called with NULL callback");
     return (NFC_STATUS_FAILED);
   }
 
@@ -247,26 +259,9 @@
   }
   /* TODO set up callback for proprietary protocol */
   else {
-    RW_TRACE_ERROR0("RW_SetActivatedTagType Invalid protocol");
+    LOG(ERROR) << StringPrintf("RW_SetActivatedTagType Invalid protocol");
   }
 
   if (status != NFC_STATUS_OK) rw_cb.p_cback = NULL;
   return status;
 }
-
-/*******************************************************************************
-**
-** Function         RW_SetTraceLevel
-**
-** Description      This function sets the trace level for Reader/Writer mode.
-**                  If called with a value of 0xFF,
-**                  it simply returns the current trace level.
-**
-** Returns          The new or current trace level
-**
-*******************************************************************************/
-uint8_t RW_SetTraceLevel(uint8_t new_level) {
-  if (new_level != 0xFF) rw_cb.trace_level = new_level;
-
-  return (rw_cb.trace_level);
-}
diff --git a/src/nfc/tags/rw_t1t.c b/src/nfc/tags/rw_t1t.cc
similarity index 83%
rename from src/nfc/tags/rw_t1t.c
rename to src/nfc/tags/rw_t1t.cc
index 2c7e02d..b7e8aa8 100644
--- a/src/nfc/tags/rw_t1t.c
+++ b/src/nfc/tags/rw_t1t.cc
@@ -22,7 +22,11 @@
  *  mode.
  *
  ******************************************************************************/
-#include <string.h>
+#include <string>
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "nfc_target.h"
 
 #include "gki.h"
@@ -32,7 +36,11 @@
 #include "rw_api.h"
 #include "rw_int.h"
 
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 extern unsigned char appl_dta_mode_flag;
+
 /* Local Functions */
 static tRW_EVENT rw_t1t_handle_rid_rsp(NFC_HDR* p_pkt);
 static void rw_t1t_data_cback(uint8_t conn_id, tNFC_CONN_EVT event,
@@ -40,11 +48,7 @@
 static void rw_t1t_process_frame_error(void);
 static void rw_t1t_process_error(void);
 static void rw_t1t_handle_presence_check_rsp(tNFC_STATUS status);
-#if (BT_TRACE_VERBOSE == TRUE)
-static char* rw_t1t_get_state_name(uint8_t state);
-static char* rw_t1t_get_sub_state_name(uint8_t sub_state);
-static char* rw_t1t_get_event_name(uint8_t event);
-#endif
+static std::string rw_t1t_get_state_name(uint8_t state);
 
 /*******************************************************************************
 **
@@ -55,7 +59,8 @@
 ** Returns          none
 **
 *******************************************************************************/
-static void rw_t1t_data_cback(uint8_t conn_id, tNFC_CONN_EVT event,
+static void rw_t1t_data_cback(__attribute__((unused)) uint8_t conn_id,
+                              __attribute__((unused)) tNFC_CONN_EVT event,
                               tNFC_CONN* p_data) {
   tRW_T1T_CB* p_t1t = &rw_cb.tcb.t1t;
   tRW_EVENT rw_event = RW_RAW_FRAME_EVT;
@@ -65,21 +70,16 @@
   uint8_t* p;
   tT1T_CMD_RSP_INFO* p_cmd_rsp_info =
       (tT1T_CMD_RSP_INFO*)rw_cb.tcb.t1t.p_cmd_rsp_info;
-#if (BT_TRACE_VERBOSE == TRUE)
   uint8_t begin_state = p_t1t->state;
-#endif
 
   p_pkt = (NFC_HDR*)(p_data->data.p_data);
   if (p_pkt == NULL) return;
   /* Assume the data is just the response byte sequence */
   p = (uint8_t*)(p_pkt + 1) + p_pkt->offset;
 
-#if (BT_TRACE_VERBOSE == TRUE)
-  RW_TRACE_DEBUG2("rw_t1t_data_cback (): state:%s (%d)",
-                  rw_t1t_get_state_name(p_t1t->state), p_t1t->state);
-#else
-  RW_TRACE_DEBUG1("rw_t1t_data_cback (): state=%d", p_t1t->state);
-#endif
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "state:%s (%d)", rw_t1t_get_state_name(p_t1t->state).c_str(),
+      p_t1t->state);
 
   evt_data.status = NFC_STATUS_OK;
 
@@ -97,7 +97,7 @@
          (p_t1t->prev_cmd_rsp_info.op_code == T1T_CMD_RALL) ||
          (p_t1t->prev_cmd_rsp_info.addr == *p))) {
       /* Response to previous command retransmission */
-      RW_TRACE_ERROR2(
+      LOG(ERROR) << StringPrintf(
           "T1T Response to previous command in Idle state. command=0x%02x, "
           "Remaining max retx rsp:0x%02x ",
           p_t1t->prev_cmd_rsp_info.op_code,
@@ -107,7 +107,7 @@
     } else {
       /* Raw frame event */
       evt_data.data.p_data = p_pkt;
-      (*rw_cb.p_cback)(RW_T1T_RAW_FRAME_EVT, (tRW_DATA*)&evt_data);
+      (*rw_cb.p_cback)(RW_T1T_RAW_FRAME_EVT, &evt_data);
     }
     return;
   }
@@ -134,7 +134,7 @@
         ((p_t1t->prev_cmd_rsp_info.op_code == T1T_CMD_RID) ||
          (p_t1t->prev_cmd_rsp_info.op_code == T1T_CMD_RALL) ||
          (p_t1t->prev_cmd_rsp_info.addr == *p))) {
-      RW_TRACE_ERROR2(
+      LOG(ERROR) << StringPrintf(
           "T1T Response to previous command. command=0x%02x, Remaining max "
           "retx rsp:0x%02x",
           p_t1t->prev_cmd_rsp_info.op_code,
@@ -144,14 +144,9 @@
       /* Stop timer as some response to current command is received */
       nfc_stop_quick_timer(&p_t1t->timer);
 /* Retrasmit the last sent command if retry-count < max retry */
-#if (BT_TRACE_VERBOSE == TRUE)
-      RW_TRACE_ERROR2("T1T Frame error. state=%s command (opcode) = 0x%02x",
-                      rw_t1t_get_state_name(p_t1t->state),
-                      p_cmd_rsp_info->opcode);
-#else
-      RW_TRACE_ERROR2("T1T Frame error. state=0x%02x command = 0x%02x ",
-                      p_t1t->state, p_cmd_rsp_info->opcode);
-#endif
+      LOG(ERROR) << StringPrintf(
+          "T1T Frame error. state=%s command (opcode) = 0x%02x",
+          rw_t1t_get_state_name(p_t1t->state).c_str(), p_cmd_rsp_info->opcode);
       rw_t1t_process_frame_error();
     }
     GKI_freebuf(p_pkt);
@@ -161,8 +156,9 @@
   /* Stop timer as response to current command is received */
   nfc_stop_quick_timer(&p_t1t->timer);
 
-  RW_TRACE_EVENT2("RW RECV [%s]:0x%x RSP", t1t_info_to_str(p_cmd_rsp_info),
-                  p_cmd_rsp_info->opcode);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("RW RECV [%s]:0x%x RSP", t1t_info_to_str(p_cmd_rsp_info),
+                      p_cmd_rsp_info->opcode);
 
   /* If we did not receive response to all retransmitted previous command,
    * dont expect that as response have come for the current command itself.
@@ -203,17 +199,16 @@
       evt_data.data.p_data = p_pkt;
     }
     rw_t1t_handle_op_complete();
-    (*rw_cb.p_cback)(rw_event, (tRW_DATA*)&evt_data);
+    (*rw_cb.p_cback)(rw_event, &evt_data);
   } else
     GKI_freebuf(p_pkt);
 
-#if (BT_TRACE_VERBOSE == TRUE)
   if (begin_state != p_t1t->state) {
-    RW_TRACE_DEBUG2("RW T1T state changed:<%s> -> <%s>",
-                    rw_t1t_get_state_name(begin_state),
-                    rw_t1t_get_state_name(p_t1t->state));
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("RW T1T state changed:<%s> -> <%s>",
+                        rw_t1t_get_state_name(begin_state).c_str(),
+                        rw_t1t_get_state_name(p_t1t->state).c_str());
   }
-#endif
 }
 
 /*******************************************************************************
@@ -228,13 +223,13 @@
 void rw_t1t_conn_cback(uint8_t conn_id, tNFC_CONN_EVT event,
                        tNFC_CONN* p_data) {
   tRW_T1T_CB* p_t1t = &rw_cb.tcb.t1t;
-  tRW_READ_DATA evt_data;
 
-  RW_TRACE_DEBUG2("rw_t1t_conn_cback: conn_id=%i, evt=0x%x", conn_id, event);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "rw_t1t_conn_cback: conn_id=%i, evt=0x%x", conn_id, event);
   /* Only handle static conn_id */
   if (conn_id != NFC_RF_CONN_ID) {
-    RW_TRACE_WARNING1("rw_t1t_conn_cback - Not static connection id: =%i",
-                      conn_id);
+    LOG(WARNING) << StringPrintf(
+        "rw_t1t_conn_cback - Not static connection id: =%i", conn_id);
     return;
   }
 
@@ -282,6 +277,7 @@
         rw_main_update_trans_error_stats();
 #endif /* RW_STATS_INCLUDED */
 
+        tRW_READ_DATA evt_data;
         if (event == NFC_ERROR_CEVT)
           evt_data.status = (tNFC_STATUS)(*(uint8_t*)p_data);
         else if (p_data)
@@ -290,7 +286,9 @@
           evt_data.status = NFC_STATUS_FAILED;
 
         evt_data.p_data = NULL;
-        (*rw_cb.p_cback)(RW_T1T_INTF_ERROR_EVT, (tRW_DATA*)&evt_data);
+        tRW_DATA rw_data;
+        rw_data.data = evt_data;
+        (*rw_cb.p_cback)(RW_T1T_INTF_ERROR_EVT, &rw_data);
         break;
       }
       nfc_stop_quick_timer(&p_t1t->timer);
@@ -355,8 +353,9 @@
       rw_main_update_tx_stats(p_data->len, false);
 #endif /* RW_STATS_INCLUDED */
 
-      RW_TRACE_EVENT2("RW SENT [%s]:0x%x CMD", t1t_info_to_str(p_cmd_rsp_info),
-                      p_cmd_rsp_info->opcode);
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+          "RW SENT [%s]:0x%x CMD", t1t_info_to_str(p_cmd_rsp_info),
+          p_cmd_rsp_info->opcode);
       status = NFC_SendData(NFC_RF_CONN_ID, p_data);
       if (status == NFC_STATUS_OK) {
         nfc_start_quick_timer(
@@ -419,8 +418,9 @@
       rw_main_update_tx_stats(p_data->len, false);
 #endif /* RW_STATS_INCLUDED */
 
-      RW_TRACE_EVENT2("RW SENT [%s]:0x%x CMD", t1t_info_to_str(p_cmd_rsp_info),
-                      p_cmd_rsp_info->opcode);
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+          "RW SENT [%s]:0x%x CMD", t1t_info_to_str(p_cmd_rsp_info),
+          p_cmd_rsp_info->opcode);
 
       status = NFC_SendData(NFC_RF_CONN_ID, p_data);
       if (status == NFC_STATUS_OK) {
@@ -465,13 +465,11 @@
   /* Extract HR and UID from response */
   STREAM_TO_ARRAY(p_t1t->hr, p_rid_rsp, T1T_HR_LEN);
 
-#if (BT_TRACE_VERBOSE == TRUE)
-  RW_TRACE_DEBUG2("hr0:0x%x, hr1:0x%x", p_t1t->hr[0], p_t1t->hr[1]);
-  RW_TRACE_DEBUG4("rw_t1t_handle_rid_rsp (): UID0-3=%02x%02x%02x%02x",
-                  p_rid_rsp[0], p_rid_rsp[1], p_rid_rsp[2], p_rid_rsp[3]);
-#else
-  RW_TRACE_DEBUG0("rw_t1t_handle_rid_rsp ()");
-#endif
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("hr0:0x%x, hr1:0x%x", p_t1t->hr[0], p_t1t->hr[1]);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("UID0-3=%02x%02x%02x%02x", p_rid_rsp[0], p_rid_rsp[1],
+                      p_rid_rsp[2], p_rid_rsp[3]);
 
   /* Fetch UID0-3 from RID response message */
   STREAM_TO_ARRAY(p_t1t->mem, p_rid_rsp, T1T_CMD_UID_LEN);
@@ -501,7 +499,7 @@
   if (p_t1t->p_cur_cmd_buf == NULL) {
     p_t1t->p_cur_cmd_buf = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
     if (p_t1t->p_cur_cmd_buf == NULL) {
-      RW_TRACE_ERROR0(
+      LOG(ERROR) << StringPrintf(
           "rw_t1t_select: unable to allocate buffer for retransmission");
       return status;
     }
@@ -526,17 +524,12 @@
 ** Returns          none
 **
 *******************************************************************************/
-void rw_t1t_process_timeout(TIMER_LIST_ENT* p_tle) {
+void rw_t1t_process_timeout(__attribute__((unused)) TIMER_LIST_ENT* p_tle) {
   tRW_T1T_CB* p_t1t = &rw_cb.tcb.t1t;
 
-#if (BT_TRACE_VERBOSE == TRUE)
-  RW_TRACE_ERROR2("T1T timeout. state=%s command (opcode)=0x%02x ",
-                  rw_t1t_get_state_name(p_t1t->state),
-                  (rw_cb.tcb.t1t.p_cmd_rsp_info)->opcode);
-#else
-  RW_TRACE_ERROR2("T1T timeout. state=0x%02x command=0x%02x ", p_t1t->state,
-                  (rw_cb.tcb.t1t.p_cmd_rsp_info)->opcode);
-#endif
+  LOG(ERROR) << StringPrintf("T1T timeout. state=%s command (opcode)=0x%02x ",
+                             rw_t1t_get_state_name(p_t1t->state).c_str(),
+                             (rw_cb.tcb.t1t.p_cmd_rsp_info)->opcode);
 
   if (p_t1t->state == RW_T1T_STATE_CHECK_PRESENCE) {
     /* Tag has moved from range */
@@ -575,30 +568,28 @@
 **
 *******************************************************************************/
 static void rw_t1t_process_error(void) {
-  tRW_READ_DATA evt_data;
   tRW_EVENT rw_event;
   NFC_HDR* p_cmd_buf;
   tRW_T1T_CB* p_t1t = &rw_cb.tcb.t1t;
   tT1T_CMD_RSP_INFO* p_cmd_rsp_info =
       (tT1T_CMD_RSP_INFO*)rw_cb.tcb.t1t.p_cmd_rsp_info;
-  tRW_DETECT_NDEF_DATA ndef_data;
 
-  RW_TRACE_DEBUG1("rw_t1t_process_error () State: %u", p_t1t->state);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("State: %u", p_t1t->state);
 
   /* Retry sending command if retry-count < max */
   if (rw_cb.cur_retry < RW_MAX_RETRIES) {
     /* retry sending the command */
     rw_cb.cur_retry++;
 
-    RW_TRACE_DEBUG2("T1T retransmission attempt %i of %i", rw_cb.cur_retry,
-                    RW_MAX_RETRIES);
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "T1T retransmission attempt %i of %i", rw_cb.cur_retry, RW_MAX_RETRIES);
 
     /* allocate a new buffer for message */
     p_cmd_buf = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
     if (p_cmd_buf != NULL) {
-      memcpy(p_cmd_buf, p_t1t->p_cur_cmd_buf,
-             sizeof(NFC_HDR) + p_t1t->p_cur_cmd_buf->offset +
-                 p_t1t->p_cur_cmd_buf->len);
+      memcpy(p_cmd_buf, p_t1t->p_cur_cmd_buf, sizeof(NFC_HDR) +
+                                                  p_t1t->p_cur_cmd_buf->offset +
+                                                  p_t1t->p_cur_cmd_buf->len);
 
 #if (RW_STATS_INCLUDED == TRUE)
       /* Update stats */
@@ -617,8 +608,8 @@
   } else {
     /* we might get response later to all or some of the retrasnmission
      * of the current command, update previous command response information */
-    RW_TRACE_DEBUG1("T1T maximum retransmission attempts reached (%i)",
-                    RW_MAX_RETRIES);
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "T1T maximum retransmission attempts reached (%i)", RW_MAX_RETRIES);
     p_t1t->prev_cmd_rsp_info.addr = ((p_cmd_rsp_info->opcode != T1T_CMD_RALL) &&
                                      (p_cmd_rsp_info->opcode != T1T_CMD_RID))
                                         ? p_t1t->addr
@@ -636,17 +627,23 @@
   rw_event = rw_t1t_info_to_event(p_cmd_rsp_info);
   if (p_t1t->state != RW_T1T_STATE_NOT_ACTIVATED) rw_t1t_handle_op_complete();
 
-  evt_data.status = NFC_STATUS_TIMEOUT;
   if (rw_event == RW_T2T_NDEF_DETECT_EVT) {
-    ndef_data.status = evt_data.status;
+    tRW_DETECT_NDEF_DATA ndef_data;
+    ndef_data.status = NFC_STATUS_TIMEOUT;
     ndef_data.protocol = NFC_PROTOCOL_T1T;
     ndef_data.flags = RW_NDEF_FL_UNKNOWN;
     ndef_data.max_size = 0;
     ndef_data.cur_size = 0;
-    (*rw_cb.p_cback)(rw_event, (tRW_DATA*)&ndef_data);
+    tRW_DATA rw_data;
+    rw_data.ndef = ndef_data;
+    (*rw_cb.p_cback)(rw_event, &rw_data);
   } else {
+    tRW_READ_DATA evt_data;
+    evt_data.status = NFC_STATUS_TIMEOUT;
     evt_data.p_data = NULL;
-    (*rw_cb.p_cback)(rw_event, (tRW_DATA*)&evt_data);
+    tRW_DATA rw_data;
+    rw_data.data = evt_data;
+    (*rw_cb.p_cback)(rw_event, &rw_data);
   }
 }
 
@@ -660,13 +657,13 @@
 **
 *****************************************************************************/
 void rw_t1t_handle_presence_check_rsp(tNFC_STATUS status) {
-  tRW_READ_DATA evt_data;
+  tRW_DATA rw_data;
 
   /* Notify, Tag is present or not */
-  evt_data.status = status;
+  rw_data.data.status = status;
   rw_t1t_handle_op_complete();
 
-  (*(rw_cb.p_cback))(RW_T1T_PRESENCE_CHECK_EVT, (tRW_DATA*)&evt_data);
+  (*(rw_cb.p_cback))(RW_T1T_PRESENCE_CHECK_EVT, &rw_data);
 }
 
 /*****************************************************************************
@@ -713,7 +710,7 @@
   tRW_DATA evt_data;
   tRW_CB* p_rw_cb = &rw_cb;
 
-  RW_TRACE_API0("RW_T1tPresenceCheck");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* If RW_SelectTagType was not called (no conn_callback) return failure */
   if (!p_rw_cb->p_cback) {
@@ -756,10 +753,10 @@
   tRW_T1T_CB* p_t1t = &rw_cb.tcb.t1t;
   tNFC_STATUS status = NFC_STATUS_FAILED;
 
-  RW_TRACE_API0("RW_T1tRid");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (p_t1t->state != RW_T1T_STATE_IDLE) {
-    RW_TRACE_WARNING1("RW_T1tRid - Busy - State: %u", p_t1t->state);
+    LOG(WARNING) << StringPrintf("RW_T1tRid - Busy - State: %u", p_t1t->state);
     return (NFC_STATUS_BUSY);
   }
 
@@ -785,10 +782,11 @@
   tRW_T1T_CB* p_t1t = &rw_cb.tcb.t1t;
   tNFC_STATUS status = NFC_STATUS_FAILED;
 
-  RW_TRACE_API0("RW_T1tReadAll");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (p_t1t->state != RW_T1T_STATE_IDLE) {
-    RW_TRACE_WARNING1("RW_T1tReadAll - Busy - State: %u", p_t1t->state);
+    LOG(WARNING) << StringPrintf("RW_T1tReadAll - Busy - State: %u",
+                                 p_t1t->state);
     return (NFC_STATUS_BUSY);
   }
 
@@ -816,7 +814,7 @@
   uint8_t addr;
 
   if (p_t1t->state != RW_T1T_STATE_IDLE) {
-    RW_TRACE_WARNING1("RW_T1tRead - Busy - State: %u", p_t1t->state);
+    LOG(WARNING) << StringPrintf("RW_T1tRead - Busy - State: %u", p_t1t->state);
     return (NFC_STATUS_BUSY);
   }
 
@@ -845,22 +843,23 @@
   uint8_t addr;
 
   if (p_t1t->state != RW_T1T_STATE_IDLE) {
-    RW_TRACE_WARNING1("RW_T1tWriteErase - Busy - State: %u", p_t1t->state);
+    LOG(WARNING) << StringPrintf("RW_T1tWriteErase - Busy - State: %u",
+                                 p_t1t->state);
     return (NFC_STATUS_BUSY);
   }
   if ((p_t1t->tag_attribute == RW_T1_TAG_ATTRB_READ_ONLY) &&
       (block != T1T_CC_BLOCK) && (byte != T1T_CC_RWA_OFFSET)) {
-    RW_TRACE_ERROR0("RW_T1tWriteErase - Tag is in Read only state");
+    LOG(ERROR) << StringPrintf("RW_T1tWriteErase - Tag is in Read only state");
     return (NFC_STATUS_REFUSED);
   }
   if ((block >= T1T_STATIC_BLOCKS) || (byte >= T1T_BLOCK_SIZE)) {
-    RW_TRACE_ERROR2("RW_T1tWriteErase - Invalid Block/byte: %u / %u", block,
-                    byte);
+    LOG(ERROR) << StringPrintf("RW_T1tWriteErase - Invalid Block/byte: %u / %u",
+                               block, byte);
     return (NFC_STATUS_REFUSED);
   }
   if ((block == T1T_UID_BLOCK) || (block == T1T_RES_BLOCK)) {
-    RW_TRACE_WARNING1("RW_T1tWriteErase - Cannot write to Locked block: %u",
-                      block);
+    LOG(WARNING) << StringPrintf(
+        "RW_T1tWriteErase - Cannot write to Locked block: %u", block);
     return (NFC_STATUS_REFUSED);
   }
   /* send WRITE-E command */
@@ -892,22 +891,23 @@
   uint8_t addr;
 
   if (p_t1t->state != RW_T1T_STATE_IDLE) {
-    RW_TRACE_WARNING1("RW_T1tWriteNoErase - Busy - State: %u", p_t1t->state);
+    LOG(WARNING) << StringPrintf("RW_T1tWriteNoErase - Busy - State: %u",
+                                 p_t1t->state);
     return (NFC_STATUS_BUSY);
   }
   if ((p_t1t->tag_attribute == RW_T1_TAG_ATTRB_READ_ONLY) &&
       (block != T1T_CC_BLOCK) && (byte != T1T_CC_RWA_OFFSET)) {
-    RW_TRACE_ERROR0("RW_T1tWriteErase - Tag is in Read only state");
+    LOG(ERROR) << StringPrintf("RW_T1tWriteErase - Tag is in Read only state");
     return (NFC_STATUS_REFUSED);
   }
   if ((block >= T1T_STATIC_BLOCKS) || (byte >= T1T_BLOCK_SIZE)) {
-    RW_TRACE_ERROR2("RW_T1tWriteErase - Invalid Block/byte: %u / %u", block,
-                    byte);
+    LOG(ERROR) << StringPrintf("RW_T1tWriteErase - Invalid Block/byte: %u / %u",
+                               block, byte);
     return (NFC_STATUS_REFUSED);
   }
   if ((block == T1T_UID_BLOCK) || (block == T1T_RES_BLOCK)) {
-    RW_TRACE_WARNING1("RW_T1tWriteNoErase - Cannot write to Locked block: %u",
-                      block);
+    LOG(WARNING) << StringPrintf(
+        "RW_T1tWriteNoErase - Cannot write to Locked block: %u", block);
     return (NFC_STATUS_REFUSED);
   }
   /* send WRITE-NE command */
@@ -938,11 +938,12 @@
   uint8_t adds;
 
   if (p_t1t->state != RW_T1T_STATE_IDLE) {
-    RW_TRACE_WARNING1("RW_T1tReadSeg - Busy - State: %u", p_t1t->state);
+    LOG(WARNING) << StringPrintf("RW_T1tReadSeg - Busy - State: %u",
+                                 p_t1t->state);
     return (NFC_STATUS_BUSY);
   }
   if (segment >= T1T_MAX_SEGMENTS) {
-    RW_TRACE_ERROR1("RW_T1tReadSeg - Invalid Segment: %u", segment);
+    LOG(ERROR) << StringPrintf("RW_T1tReadSeg - Invalid Segment: %u", segment);
     return (NFC_STATUS_REFUSED);
   }
   if (rw_cb.tcb.t1t.hr[0] != T1T_STATIC_HR0) {
@@ -970,7 +971,8 @@
   tRW_T1T_CB* p_t1t = &rw_cb.tcb.t1t;
 
   if (p_t1t->state != RW_T1T_STATE_IDLE) {
-    RW_TRACE_WARNING1("RW_T1tRead8 - Busy - State: %u", p_t1t->state);
+    LOG(WARNING) << StringPrintf("RW_T1tRead8 - Busy - State: %u",
+                                 p_t1t->state);
     return (NFC_STATUS_BUSY);
   }
 
@@ -1000,19 +1002,20 @@
   tNFC_STATUS status = NFC_STATUS_FAILED;
 
   if (p_t1t->state != RW_T1T_STATE_IDLE) {
-    RW_TRACE_WARNING1("RW_T1tWriteErase8 - Busy - State: %u", p_t1t->state);
+    LOG(WARNING) << StringPrintf("RW_T1tWriteErase8 - Busy - State: %u",
+                                 p_t1t->state);
     return (NFC_STATUS_BUSY);
   }
 
   if ((p_t1t->tag_attribute == RW_T1_TAG_ATTRB_READ_ONLY) &&
       (block != T1T_CC_BLOCK)) {
-    RW_TRACE_ERROR0("RW_T1tWriteErase8 - Tag is in Read only state");
+    LOG(ERROR) << StringPrintf("RW_T1tWriteErase8 - Tag is in Read only state");
     return (NFC_STATUS_REFUSED);
   }
 
   if ((block == T1T_UID_BLOCK) || (block == T1T_RES_BLOCK)) {
-    RW_TRACE_WARNING1("RW_T1tWriteErase8 - Cannot write to Locked block: %u",
-                      block);
+    LOG(WARNING) << StringPrintf(
+        "RW_T1tWriteErase8 - Cannot write to Locked block: %u", block);
     return (NFC_STATUS_REFUSED);
   }
 
@@ -1046,19 +1049,21 @@
   tRW_T1T_CB* p_t1t = &rw_cb.tcb.t1t;
 
   if (p_t1t->state != RW_T1T_STATE_IDLE) {
-    RW_TRACE_WARNING1("RW_T1tWriteNoErase8 - Busy - State: %u", p_t1t->state);
+    LOG(WARNING) << StringPrintf("RW_T1tWriteNoErase8 - Busy - State: %u",
+                                 p_t1t->state);
     return (NFC_STATUS_BUSY);
   }
 
   if ((p_t1t->tag_attribute == RW_T1_TAG_ATTRB_READ_ONLY) &&
       (block != T1T_CC_BLOCK)) {
-    RW_TRACE_ERROR0("RW_T1tWriteNoErase8 - Tag is in Read only state");
+    LOG(ERROR) << StringPrintf(
+        "RW_T1tWriteNoErase8 - Tag is in Read only state");
     return (NFC_STATUS_REFUSED);
   }
 
   if ((block == T1T_UID_BLOCK) || (block == T1T_RES_BLOCK)) {
-    RW_TRACE_WARNING1("RW_T1tWriteNoErase8 - Cannot write to Locked block: %u",
-                      block);
+    LOG(WARNING) << StringPrintf(
+        "RW_T1tWriteNoErase8 - Cannot write to Locked block: %u", block);
     return (NFC_STATUS_REFUSED);
   }
 
@@ -1077,7 +1082,6 @@
   return status;
 }
 
-#if (BT_TRACE_VERBOSE == TRUE)
 /*******************************************************************************
 **
 ** Function         rw_t1t_get_state_name
@@ -1089,31 +1093,29 @@
 ** Returns          pointer to the name
 **
 *******************************************************************************/
-static char* rw_t1t_get_state_name(uint8_t state) {
+static std::string rw_t1t_get_state_name(uint8_t state) {
   switch (state) {
     case RW_T1T_STATE_IDLE:
-      return ("IDLE");
+      return "IDLE";
     case RW_T1T_STATE_NOT_ACTIVATED:
-      return ("NOT_ACTIVATED");
+      return "NOT_ACTIVATED";
     case RW_T1T_STATE_READ:
-      return ("APP_READ");
+      return "APP_READ";
     case RW_T1T_STATE_WRITE:
-      return ("APP_WRITE");
+      return "APP_WRITE";
     case RW_T1T_STATE_TLV_DETECT:
-      return ("TLV_DETECTION");
+      return "TLV_DETECTION";
     case RW_T1T_STATE_READ_NDEF:
-      return ("READING_NDEF");
+      return "READING_NDEF";
     case RW_T1T_STATE_WRITE_NDEF:
-      return ("WRITING_NDEF");
+      return "WRITING_NDEF";
     case RW_T1T_STATE_SET_TAG_RO:
-      return ("SET_TAG_RO");
+      return "SET_TAG_RO";
     case RW_T1T_STATE_CHECK_PRESENCE:
-      return ("CHECK_PRESENCE");
+      return "CHECK_PRESENCE";
     case RW_T1T_STATE_FORMAT_TAG:
-      return ("FORMAT_TAG");
+      return "FORMAT_TAG";
     default:
-      return ("???? UNKNOWN STATE");
+      return "???? UNKNOWN STATE";
   }
 }
-
-#endif /* (BT_TRACE_VERBOSE == TRUE) */
diff --git a/src/nfc/tags/rw_t1t_ndef.c b/src/nfc/tags/rw_t1t_ndef.cc
similarity index 95%
rename from src/nfc/tags/rw_t1t_ndef.c
rename to src/nfc/tags/rw_t1t_ndef.cc
index 915dade..9568327 100644
--- a/src/nfc/tags/rw_t1t_ndef.c
+++ b/src/nfc/tags/rw_t1t_ndef.cc
@@ -22,16 +22,22 @@
  *  Reader/Writer mode.
  *
  ******************************************************************************/
-#include <string.h>
+#include <string>
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "nfc_target.h"
 
-#include "gki.h"
 #include "nci_hmsgs.h"
 #include "nfc_api.h"
-#include "nfc_int.h"
 #include "rw_api.h"
 #include "rw_int.h"
 
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
+
 #if (RW_NDEF_INCLUDED == TRUE)
 
 /* Local Functions */
@@ -577,7 +583,6 @@
   tRW_DETECT_NDEF_DATA ndef_data;
   tRW_DETECT_TLV_DATA tlv_data;
   uint8_t count;
-  tRW_READ_DATA evt_data;
 
   *p_notify = false;
   /* Handle the response based on the current state */
@@ -589,10 +594,11 @@
     case RW_T1T_STATE_READ_NDEF:
       status = rw_t1t_handle_ndef_rall_rsp();
       if (status != NFC_STATUS_CONTINUE) {
-        evt_data.status = status;
-        evt_data.p_data = NULL;
+        tRW_DATA rw_data;
+        rw_data.data.status = status;
+        rw_data.data.p_data = NULL;
         rw_t1t_handle_op_complete();
-        (*rw_cb.p_cback)(RW_T1T_NDEF_READ_EVT, (tRW_DATA*)&evt_data);
+        (*rw_cb.p_cback)(RW_T1T_NDEF_READ_EVT, &rw_data);
       }
       break;
 
@@ -608,7 +614,9 @@
               tlv_data.num_bytes = p_t1t->num_lockbytes;
               tlv_data.status = status;
               rw_t1t_handle_op_complete();
-              (*rw_cb.p_cback)(RW_T1T_TLV_DETECT_EVT, (tRW_DATA*)&tlv_data);
+              tRW_DATA rw_data;
+              rw_data.tlv = tlv_data;
+              (*rw_cb.p_cback)(RW_T1T_TLV_DETECT_EVT, &rw_data);
             } else if (p_t1t->tlv_detect == TAG_NDEF_TLV) {
               ndef_data.protocol = NFC_PROTOCOL_T1T;
               ndef_data.flags = rw_t1t_get_ndef_flags();
@@ -628,7 +636,9 @@
               }
               ndef_data.status = status;
               rw_t1t_handle_op_complete();
-              (*rw_cb.p_cback)(RW_T1T_NDEF_DETECT_EVT, (tRW_DATA*)&ndef_data);
+              tRW_DATA rw_data;
+              rw_data.ndef = ndef_data;
+              (*rw_cb.p_cback)(RW_T1T_NDEF_DETECT_EVT, &rw_data);
             }
           }
           break;
@@ -646,7 +656,9 @@
             }
             rw_t1t_handle_op_complete();
             /* Send response to upper layer */
-            (*rw_cb.p_cback)(RW_T1T_TLV_DETECT_EVT, (tRW_DATA*)&tlv_data);
+            tRW_DATA rw_data;
+            rw_data.tlv = tlv_data;
+            (*rw_cb.p_cback)(RW_T1T_TLV_DETECT_EVT, &rw_data);
           } else if (p_t1t->tlv_detect == TAG_LOCK_CTRL_TLV) {
             tlv_data.status = rw_t1t_handle_tlv_detect_rsp(p_t1t->mem);
             tlv_data.protocol = NFC_PROTOCOL_T1T;
@@ -656,7 +668,9 @@
               rw_t1t_handle_op_complete();
 
               /* Send Negative response to upper layer */
-              (*rw_cb.p_cback)(RW_T1T_TLV_DETECT_EVT, (tRW_DATA*)&tlv_data);
+              tRW_DATA rw_data;
+              rw_data.tlv = tlv_data;
+              (*rw_cb.p_cback)(RW_T1T_TLV_DETECT_EVT, &rw_data);
             } else {
               rw_t1t_extract_lock_bytes(p_data);
               status = rw_t1t_read_locks();
@@ -665,7 +679,9 @@
                 tlv_data.status = status;
                 rw_t1t_handle_op_complete();
 
-                (*rw_cb.p_cback)(RW_T1T_TLV_DETECT_EVT, (tRW_DATA*)&tlv_data);
+                tRW_DATA rw_data;
+                rw_data.tlv = tlv_data;
+                (*rw_cb.p_cback)(RW_T1T_TLV_DETECT_EVT, &rw_data);
               }
             }
           } else if (p_t1t->tlv_detect == TAG_NDEF_TLV) {
@@ -688,7 +704,9 @@
                 /* Send Negative response to upper layer */
                 rw_t1t_handle_op_complete();
 
-                (*rw_cb.p_cback)(RW_T1T_NDEF_DETECT_EVT, (tRW_DATA*)&ndef_data);
+                tRW_DATA rw_data;
+                rw_data.ndef = ndef_data;
+                (*rw_cb.p_cback)(RW_T1T_NDEF_DETECT_EVT, &rw_data);
               } else {
                 ndef_data.flags |= RW_NDEF_FL_FORMATED;
                 rw_t1t_extract_lock_bytes(p_data);
@@ -709,8 +727,9 @@
                   ndef_data.status = status;
                   rw_t1t_handle_op_complete();
 
-                  (*rw_cb.p_cback)(RW_T1T_NDEF_DETECT_EVT,
-                                   (tRW_DATA*)&ndef_data);
+                  tRW_DATA rw_data;
+                  rw_data.ndef = ndef_data;
+                  (*rw_cb.p_cback)(RW_T1T_NDEF_DETECT_EVT, &rw_data);
                 }
               }
             } else {
@@ -728,7 +747,9 @@
               }
               rw_t1t_handle_op_complete();
 
-              (*rw_cb.p_cback)(RW_T1T_NDEF_DETECT_EVT, (tRW_DATA*)&ndef_data);
+              tRW_DATA rw_data;
+              rw_data.ndef = ndef_data;
+              (*rw_cb.p_cback)(RW_T1T_NDEF_DETECT_EVT, &rw_data);
             }
           }
           break;
@@ -798,7 +819,7 @@
   p_data +=
       T1T_UID_LEN + T1T_RES_BYTE_LEN; /* skip Block 0, UID and Reserved byte */
 
-  RW_TRACE_DEBUG0("rw_t1t_handle_rall_rsp ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   rw_t1t_update_tag_state();
   rw_t1t_update_attributes();
@@ -1023,7 +1044,7 @@
                       p_t1t->lockbyte[p_t1t->num_lockbytes].b_lock_read = false;
                       p_t1t->num_lockbytes++;
                     } else
-                      RW_TRACE_ERROR1(
+                      LOG(ERROR) << StringPrintf(
                           "T1T Buffer overflow error. Max supported lock "
                           "bytes=0x%02X",
                           RW_T1T_MAX_LOCK_BYTES);
@@ -1032,7 +1053,7 @@
                   p_t1t->num_lock_tlvs++;
                   rw_t1t_update_attributes();
                 } else
-                  RW_TRACE_ERROR1(
+                  LOG(ERROR) << StringPrintf(
                       "T1T Buffer overflow error. Max supported lock "
                       "tlvs=0x%02X",
                       RW_T1T_MAX_LOCK_TLVS);
@@ -1053,7 +1074,7 @@
               tlv_value[2 - bytes_count] = p_readbytes[offset];
               if (bytes_count == 0) {
                 if (p_t1t->num_mem_tlvs >= RW_T1T_MAX_MEM_TLVS) {
-                  RW_TRACE_ERROR0(
+                  LOG(ERROR) << StringPrintf(
                       "rw_t1t_handle_tlv_detect_rsp - Maximum buffer allocated "
                       "for Memory tlv has reached");
                   failed = true;
@@ -1171,8 +1192,9 @@
         }
       }
     } else {
-      RW_TRACE_ERROR1("RW_T1tReadNDef - Invalid NDEF len: %u or NDEF corrupted",
-                      p_t1t->ndef_msg_len);
+      LOG(ERROR) << StringPrintf(
+          "RW_T1tReadNDef - Invalid NDEF len: %u or NDEF corrupted",
+          p_t1t->ndef_msg_len);
       status = NFC_STATUS_FAILED;
     }
   } else {
@@ -2125,13 +2147,14 @@
   uint8_t* p;
 
   if (p_t1t->state != RW_T1T_STATE_IDLE) {
-    RW_TRACE_WARNING1("RW_T1tFormatNDef - Tag not initialized/ Busy! State: %u",
-                      p_t1t->state);
+    LOG(WARNING) << StringPrintf(
+        "RW_T1tFormatNDef - Tag not initialized/ Busy! State: %u",
+        p_t1t->state);
     return (NFC_STATUS_FAILED);
   }
 
   if ((p_t1t->hr[0] & 0xF0) != T1T_NDEF_SUPPORTED) {
-    RW_TRACE_WARNING1(
+    LOG(WARNING) << StringPrintf(
         "RW_T1tFormatNDef - Cannot format tag as NDEF not supported. HR0: %u",
         p_t1t->hr[0]);
     return (NFC_STATUS_REJECTED);
@@ -2139,8 +2162,9 @@
 
   p_ret = t1t_tag_init_data(p_t1t->hr[0]);
   if (p_ret == NULL) {
-    RW_TRACE_WARNING2("RW_T1tFormatNDef - Invalid HR - HR0: %u, HR1: %u",
-                      p_t1t->hr[0], p_t1t->hr[1]);
+    LOG(WARNING) << StringPrintf(
+        "RW_T1tFormatNDef - Invalid HR - HR0: %u, HR1: %u", p_t1t->hr[0],
+        p_t1t->hr[1]);
     return (NFC_STATUS_REJECTED);
   }
 
@@ -2220,14 +2244,16 @@
   uint8_t adds;
 
   if (p_t1t->state != RW_T1T_STATE_IDLE) {
-    RW_TRACE_WARNING1("RW_T1tLocateTlv - Busy - State: %u", p_t1t->state);
+    LOG(WARNING) << StringPrintf("RW_T1tLocateTlv - Busy - State: %u",
+                                 p_t1t->state);
     return (NFC_STATUS_FAILED);
   }
   p_t1t->tlv_detect = tlv_type;
 
   if ((p_t1t->tlv_detect == TAG_NDEF_TLV) &&
       (((p_t1t->hr[0]) & 0xF0) != T1T_NDEF_SUPPORTED)) {
-    RW_TRACE_ERROR0("RW_T1tLocateTlv - Error: NDEF not supported by the tag");
+    LOG(ERROR) << StringPrintf(
+        "RW_T1tLocateTlv - Error: NDEF not supported by the tag");
     return (NFC_STATUS_REFUSED);
   }
 
@@ -2305,18 +2331,20 @@
       t1t_cmd_to_rsp_info(T1T_CMD_RSEG);
 
   if (p_t1t->state != RW_T1T_STATE_IDLE) {
-    RW_TRACE_WARNING1("RW_T1tReadNDef - Busy - State: %u", p_t1t->state);
+    LOG(WARNING) << StringPrintf("RW_T1tReadNDef - Busy - State: %u",
+                                 p_t1t->state);
     return (NFC_STATUS_FAILED);
   }
 
   /* Check HR0 if NDEF supported by the tag */
   if (((p_t1t->hr[0]) & 0xF0) != T1T_NDEF_SUPPORTED) {
-    RW_TRACE_ERROR0("RW_T1tReadNDef - Error: NDEF not supported by the tag");
+    LOG(ERROR) << StringPrintf(
+        "RW_T1tReadNDef - Error: NDEF not supported by the tag");
     return (NFC_STATUS_REFUSED);
   }
 
   if (p_t1t->tag_attribute == RW_T1_TAG_ATTRB_INITIALIZED_NDEF) {
-    RW_TRACE_WARNING1(
+    LOG(WARNING) << StringPrintf(
         "RW_T1tReadNDef - NDEF Message length is zero, NDEF Length : %u ",
         p_t1t->ndef_msg_len);
     return (NFC_STATUS_NOT_INITIALIZED);
@@ -2324,14 +2352,14 @@
 
   if ((p_t1t->tag_attribute != RW_T1_TAG_ATTRB_READ_WRITE) &&
       (p_t1t->tag_attribute != RW_T1_TAG_ATTRB_READ_ONLY)) {
-    RW_TRACE_ERROR0(
+    LOG(ERROR) << StringPrintf(
         "RW_T1tReadNDef - Error: NDEF detection not performed yet/ Tag is in "
         "Initialized state");
     return (NFC_STATUS_FAILED);
   }
 
   if (buf_len < p_t1t->ndef_msg_len) {
-    RW_TRACE_WARNING2(
+    LOG(WARNING) << StringPrintf(
         "RW_T1tReadNDef - buffer size: %u  less than NDEF msg sise: %u",
         buf_len, p_t1t->ndef_msg_len);
     return (NFC_STATUS_FAILED);
@@ -2394,24 +2422,26 @@
   uint16_t init_ndef_msg_offset;
 
   if (p_t1t->state != RW_T1T_STATE_IDLE) {
-    RW_TRACE_WARNING1("RW_T1tWriteNDef - Busy - State: %u", p_t1t->state);
+    LOG(WARNING) << StringPrintf("RW_T1tWriteNDef - Busy - State: %u",
+                                 p_t1t->state);
     return (NFC_STATUS_FAILED);
   }
 
   /* Check HR0 if NDEF supported by the tag */
   if (((p_t1t->hr[0]) & 0xF0) != T1T_NDEF_SUPPORTED) {
-    RW_TRACE_ERROR0("RW_T1tWriteNDef - Error: NDEF not supported by the tag");
+    LOG(ERROR) << StringPrintf(
+        "RW_T1tWriteNDef - Error: NDEF not supported by the tag");
     return (NFC_STATUS_REFUSED);
   }
 
   if ((p_t1t->tag_attribute != RW_T1_TAG_ATTRB_READ_WRITE) &&
       (p_t1t->tag_attribute != RW_T1_TAG_ATTRB_INITIALIZED_NDEF)) {
-    RW_TRACE_ERROR0("RW_T1tWriteNDef - Tag cannot update NDEF");
+    LOG(ERROR) << StringPrintf("RW_T1tWriteNDef - Tag cannot update NDEF");
     return (NFC_STATUS_REFUSED);
   }
 
   if (msg_len > p_t1t->max_ndef_msg_len) {
-    RW_TRACE_ERROR1(
+    LOG(ERROR) << StringPrintf(
         "RW_T1tWriteNDef - Cannot write NDEF of size greater than %u bytes",
         p_t1t->max_ndef_msg_len);
     return (NFC_STATUS_REFUSED);
@@ -2499,7 +2529,8 @@
   uint8_t num_locks;
 
   if (p_t1t->state != RW_T1T_STATE_IDLE) {
-    RW_TRACE_WARNING1("RW_T1tSetTagReadOnly - Busy - State: %u", p_t1t->state);
+    LOG(WARNING) << StringPrintf("RW_T1tSetTagReadOnly - Busy - State: %u",
+                                 p_t1t->state);
     return (NFC_STATUS_BUSY);
   }
 
@@ -2530,47 +2561,4 @@
   return status;
 }
 
-#if (BT_TRACE_VERBOSE == TRUE)
-/*******************************************************************************
-**
-** Function         rw_t1t_get_sub_state_name
-**
-** Description      This function returns the sub_state name.
-**
-** NOTE             conditionally compiled to save memory.
-**
-** Returns          pointer to the name
-**
-*******************************************************************************/
-static char* rw_t1t_get_sub_state_name(uint8_t sub_state) {
-  switch (sub_state) {
-    case RW_T1T_SUBSTATE_NONE:
-      return ("NONE");
-    case RW_T1T_SUBSTATE_WAIT_READ_TLV_VALUE:
-      return ("EXTRACT_TLV_VALUE");
-    case RW_T1T_SUBSTATE_WAIT_READ_LOCKS:
-      return ("READING_LOCKS");
-    case RW_T1T_SUBSTATE_WAIT_READ_NDEF_BLOCK:
-      return ("READ_NDEF_FINAL_BLOCK");
-    case RW_T1T_SUBSTATE_WAIT_INVALIDATE_NDEF:
-      return ("INVALIDATING_NDEF");
-    case RW_T1T_SUBSTATE_WAIT_NDEF_WRITE:
-      return ("WRITE_NDEF_TLV_MESSAGE");
-    case RW_T1T_SUBSTATE_WAIT_NDEF_UPDATED:
-      return ("WAITING_RSP_FOR_LAST_NDEF_WRITE");
-    case RW_T1T_SUBSTATE_WAIT_VALIDATE_NDEF:
-      return ("VALIDATING_NDEF");
-    case RW_T1T_SUBSTATE_WAIT_SET_CC_RWA_RO:
-      return ("SET_RWA_RO");
-    case RW_T1T_SUBSTATE_WAIT_SET_ST_LOCK_BITS:
-      return ("SET_STATIC_LOCK_BITS");
-    case RW_T1T_SUBSTATE_WAIT_SET_DYN_LOCK_BITS:
-      return ("SET_DYNAMIC_LOCK_BITS");
-
-    default:
-      return ("???? UNKNOWN SUBSTATE");
-  }
-}
-#endif /* (BT_TRACE_VERBOSE == TRUE) */
-
 #endif /* (RW_NDEF_INCLUDED == TRUE) */
diff --git a/src/nfc/tags/rw_t2t.c b/src/nfc/tags/rw_t2t.cc
similarity index 83%
rename from src/nfc/tags/rw_t2t.c
rename to src/nfc/tags/rw_t2t.cc
index c215340..a05c942 100644
--- a/src/nfc/tags/rw_t2t.c
+++ b/src/nfc/tags/rw_t2t.cc
@@ -22,10 +22,14 @@
  *  mode.
  *
  ******************************************************************************/
-#include <string.h>
-#include "bt_types.h"
+#include <string>
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
 #include "nfc_target.h"
 
+#include "bt_types.h"
 #include "gki.h"
 #include "nci_hmsgs.h"
 #include "nfc_api.h"
@@ -33,6 +37,10 @@
 #include "rw_api.h"
 #include "rw_int.h"
 
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
+
 /* Static local functions */
 static void rw_t2t_proc_data(uint8_t conn_id, tNFC_DATA_CEVT* p_data);
 static tNFC_STATUS rw_t2t_send_cmd(uint8_t opcode, uint8_t* p_dat);
@@ -41,10 +49,8 @@
 static void rw_t2t_handle_presence_check_rsp(tNFC_STATUS status);
 static void rw_t2t_resume_op(void);
 
-#if (BT_TRACE_VERBOSE == TRUE)
-static char* rw_t2t_get_state_name(uint8_t state);
-static char* rw_t2t_get_substate_name(uint8_t substate);
-#endif
+static std::string rw_t2t_get_state_name(uint8_t state);
+static std::string rw_t2t_get_substate_name(uint8_t substate);
 
 /*******************************************************************************
 **
@@ -62,27 +68,21 @@
   bool b_notify = true;
   bool b_release = true;
   uint8_t* p;
-  tRW_READ_DATA evt_data = {
-      0,
-  };
+  tRW_READ_DATA evt_data = {};
   tT2T_CMD_RSP_INFO* p_cmd_rsp_info =
       (tT2T_CMD_RSP_INFO*)rw_cb.tcb.t2t.p_cmd_rsp_info;
   tRW_DETECT_NDEF_DATA ndef_data;
-#if (BT_TRACE_VERBOSE == TRUE)
   uint8_t begin_state = p_t2t->state;
-#endif
 
   if ((p_t2t->state == RW_T2T_STATE_IDLE) || (p_cmd_rsp_info == NULL)) {
-#if (BT_TRACE_VERBOSE == TRUE)
-    RW_TRACE_DEBUG2("RW T2T Raw Frame: Len [0x%X] Status [%s]", p_pkt->len,
-                    NFC_GetStatusName(p_data->status));
-#else
-    RW_TRACE_DEBUG2("RW T2T Raw Frame: Len [0x%X] Status [0x%X]", p_pkt->len,
-                    p_data->status);
-#endif
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("RW T2T Raw Frame: Len [0x%X] Status [%s]", p_pkt->len,
+                        NFC_GetStatusName(p_data->status).c_str());
     evt_data.status = p_data->status;
     evt_data.p_data = p_pkt;
-    (*rw_cb.p_cback)(RW_T2T_RAW_FRAME_EVT, (tRW_DATA*)&evt_data);
+    tRW_DATA rw_data;
+    rw_data.data = evt_data;
+    (*rw_cb.p_cback)(RW_T2T_RAW_FRAME_EVT, &rw_data);
     return;
   }
 #if (RW_STATS_INCLUDED == TRUE)
@@ -92,20 +92,16 @@
   /* Stop timer as response is received */
   nfc_stop_quick_timer(&p_t2t->t2_timer);
 
-  RW_TRACE_EVENT2("RW RECV [%s]:0x%x RSP", t2t_info_to_str(p_cmd_rsp_info),
-                  p_cmd_rsp_info->opcode);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("RW RECV [%s]:0x%x RSP", t2t_info_to_str(p_cmd_rsp_info),
+                      p_cmd_rsp_info->opcode);
 
   if (((p_pkt->len != p_cmd_rsp_info->rsp_len) &&
        (p_pkt->len != p_cmd_rsp_info->nack_rsp_len) &&
        (p_t2t->substate != RW_T2T_SUBSTATE_WAIT_SELECT_SECTOR)) ||
       (p_t2t->state == RW_T2T_STATE_HALT)) {
-#if (BT_TRACE_VERBOSE == TRUE)
-    RW_TRACE_ERROR1("T2T Frame error. state=%s ",
-                    rw_t2t_get_state_name(p_t2t->state));
-#else
-    RW_TRACE_ERROR1("T2T Frame error. state=0x%02X command=0x%02X ",
-                    p_t2t->state);
-#endif
+    LOG(ERROR) << StringPrintf("T2T Frame error. state=%s ",
+                               rw_t2t_get_state_name(p_t2t->state).c_str());
     if (p_t2t->state != RW_T2T_STATE_HALT) {
       /* Retrasmit the last sent command if retry-count < max retry */
       rw_t2t_process_frame_error();
@@ -119,7 +115,7 @@
   /* Assume the data is just the response byte sequence */
   p = (uint8_t*)(p_pkt + 1) + p_pkt->offset;
 
-  RW_TRACE_EVENT4(
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
       "rw_t2t_proc_data State: %u  conn_id: %u  len: %u  data[0]: 0x%02x",
       p_t2t->state, conn_id, p_pkt->len, *p);
 
@@ -133,7 +129,7 @@
       else
         evt_data.status = NFC_STATUS_FAILED;
     } else {
-      RW_TRACE_EVENT1(
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
           "rw_t2t_proc_data - Received NACK response(0x%x) to SEC-SELCT CMD",
           (*p & 0x0f));
       evt_data.status = NFC_STATUS_REJECTED;
@@ -147,8 +143,8 @@
     evt_data.p_data = p_pkt;
     if (p_t2t->state == RW_T2T_STATE_READ) b_release = false;
 
-    RW_TRACE_EVENT1("rw_t2t_proc_data - Received NACK response(0x%x)",
-                    (*p & 0x0f));
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "rw_t2t_proc_data - Received NACK response(0x%x)", (*p & 0x0f));
 
     if (!p_t2t->check_tag_halt) {
       /* Just received first NACK. Retry just one time to find if tag went in to
@@ -210,23 +206,26 @@
       ndef_data.cur_size = 0;
       /* Move back to idle state */
       rw_t2t_handle_op_complete();
-      (*rw_cb.p_cback)(rw_event, (tRW_DATA*)&ndef_data);
+      tRW_DATA rw_data;
+      rw_data.ndef = ndef_data;
+      (*rw_cb.p_cback)(rw_event, &rw_data);
     } else {
       /* Move back to idle state */
       rw_t2t_handle_op_complete();
-      (*rw_cb.p_cback)(rw_event, (tRW_DATA*)&evt_data);
+      tRW_DATA rw_data;
+      rw_data.data = evt_data;
+      (*rw_cb.p_cback)(rw_event, &rw_data);
     }
   }
 
   if (b_release) GKI_freebuf(p_pkt);
 
-#if (BT_TRACE_VERBOSE == TRUE)
   if (begin_state != p_t2t->state) {
-    RW_TRACE_DEBUG2("RW T2T state changed:<%s> -> <%s>",
-                    rw_t2t_get_state_name(begin_state),
-                    rw_t2t_get_state_name(p_t2t->state));
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("RW T2T state changed:<%s> -> <%s>",
+                        rw_t2t_get_state_name(begin_state).c_str(),
+                        rw_t2t_get_state_name(p_t2t->state).c_str());
   }
-#endif
 }
 
 /*******************************************************************************
@@ -243,7 +242,8 @@
   tRW_T2T_CB* p_t2t = &rw_cb.tcb.t2t;
   tRW_READ_DATA evt_data;
 
-  RW_TRACE_DEBUG2("rw_t2t_conn_cback: conn_id=%i, evt=%i", conn_id, event);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("rw_t2t_conn_cback: conn_id=%i, evt=%i", conn_id, event);
   /* Only handle static conn_id */
   if (conn_id != NFC_RF_CONN_ID) {
     return;
@@ -306,7 +306,9 @@
           evt_data.status = NFC_STATUS_FAILED;
 
         evt_data.p_data = NULL;
-        (*rw_cb.p_cback)(RW_T2T_INTF_ERROR_EVT, (tRW_DATA*)&evt_data);
+        tRW_DATA rw_data;
+        rw_data.data = evt_data;
+        (*rw_cb.p_cback)(RW_T2T_INTF_ERROR_EVT, &rw_data);
         break;
       }
       nfc_stop_quick_timer(&p_t2t->t2_timer);
@@ -375,8 +377,9 @@
       /* Update stats */
       rw_main_update_tx_stats(p_data->len, false);
 #endif
-      RW_TRACE_EVENT2("RW SENT [%s]:0x%x CMD", t2t_info_to_str(p_cmd_rsp_info),
-                      p_cmd_rsp_info->opcode);
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+          "RW SENT [%s]:0x%x CMD", t2t_info_to_str(p_cmd_rsp_info),
+          p_cmd_rsp_info->opcode);
 
       status = NFC_SendData(NFC_RF_CONN_ID, p_data);
       if (status == NFC_STATUS_OK) {
@@ -384,15 +387,10 @@
             &p_t2t->t2_timer, NFC_TTYPE_RW_T2T_RESPONSE,
             (RW_T2T_TOUT_RESP * QUICK_TIMER_TICKS_PER_SEC) / 1000);
       } else {
-#if (BT_TRACE_VERBOSE == TRUE)
-        RW_TRACE_ERROR2("T2T NFC Send data failed. state=%s substate=%s ",
-                        rw_t2t_get_state_name(p_t2t->state),
-                        rw_t2t_get_substate_name(p_t2t->substate));
-#else
-        RW_TRACE_ERROR2(
-            "T2T NFC Send data failed. state=0x%02X substate=0x%02X ",
-            p_t2t->state, p_t2t->substate);
-#endif
+        LOG(ERROR) << StringPrintf(
+            "T2T NFC Send data failed. state=%s substate=%s ",
+            rw_t2t_get_state_name(p_t2t->state).c_str(),
+            rw_t2t_get_substate_name(p_t2t->substate).c_str());
       }
     } else {
       status = NFC_STATUS_NO_BUFFERS;
@@ -410,7 +408,7 @@
 ** Returns          none
 **
 *******************************************************************************/
-void rw_t2t_process_timeout(TIMER_LIST_ENT* p_tle) {
+void rw_t2t_process_timeout() {
   tRW_READ_DATA evt_data;
   tRW_T2T_CB* p_t2t = &rw_cb.tcb.t2t;
 
@@ -433,18 +431,16 @@
       rw_t2t_handle_op_complete();
       evt_data.status = NFC_STATUS_OK;
       evt_data.p_data = NULL;
-      (*rw_cb.p_cback)(RW_T2T_SELECT_CPLT_EVT, (tRW_DATA*)&evt_data);
+      tRW_DATA rw_data;
+      rw_data.data = evt_data;
+      (*rw_cb.p_cback)(RW_T2T_SELECT_CPLT_EVT, &rw_data);
     } else {
       /* Resume operation from where we stopped before sector change */
       rw_t2t_resume_op();
     }
   } else if (p_t2t->state != RW_T2T_STATE_IDLE) {
-#if (BT_TRACE_VERBOSE == TRUE)
-    RW_TRACE_ERROR1("T2T timeout. state=%s ",
-                    rw_t2t_get_state_name(p_t2t->state));
-#else
-    RW_TRACE_ERROR1("T2T timeout. state=0x%02X ", p_t2t->state);
-#endif
+    LOG(ERROR) << StringPrintf("T2T timeout. state=%s ",
+                               rw_t2t_get_state_name(p_t2t->state).c_str());
     /* Handle timeout error as no response to the command sent */
     rw_t2t_process_error();
   }
@@ -488,22 +484,22 @@
       (tT2T_CMD_RSP_INFO*)rw_cb.tcb.t2t.p_cmd_rsp_info;
   tRW_DETECT_NDEF_DATA ndef_data;
 
-  RW_TRACE_DEBUG1("rw_t2t_process_error () State: %u", p_t2t->state);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("State: %u", p_t2t->state);
 
   /* Retry sending command if retry-count < max */
   if ((!p_t2t->check_tag_halt) && (rw_cb.cur_retry < RW_MAX_RETRIES)) {
     /* retry sending the command */
     rw_cb.cur_retry++;
 
-    RW_TRACE_DEBUG2("T2T retransmission attempt %i of %i", rw_cb.cur_retry,
-                    RW_MAX_RETRIES);
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "T2T retransmission attempt %i of %i", rw_cb.cur_retry, RW_MAX_RETRIES);
 
     /* allocate a new buffer for message */
     p_cmd_buf = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
     if (p_cmd_buf != NULL) {
-      memcpy(p_cmd_buf, p_t2t->p_cur_cmd_buf,
-             sizeof(NFC_HDR) + p_t2t->p_cur_cmd_buf->offset +
-                 p_t2t->p_cur_cmd_buf->len);
+      memcpy(p_cmd_buf, p_t2t->p_cur_cmd_buf, sizeof(NFC_HDR) +
+                                                  p_t2t->p_cur_cmd_buf->offset +
+                                                  p_t2t->p_cur_cmd_buf->len);
 #if (RW_STATS_INCLUDED == TRUE)
       /* Update stats */
       rw_main_update_tx_stats(p_cmd_buf->len, true);
@@ -519,10 +515,11 @@
     }
   } else {
     if (p_t2t->check_tag_halt) {
-      RW_TRACE_DEBUG0("T2T Went to HALT State!");
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("T2T Went to HALT State!");
     } else {
-      RW_TRACE_DEBUG1("T2T maximum retransmission attempts reached (%i)",
-                      RW_MAX_RETRIES);
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+          "T2T maximum retransmission attempts reached (%i)", RW_MAX_RETRIES);
     }
   }
   rw_event = rw_t2t_info_to_event(p_cmd_rsp_info);
@@ -548,14 +545,18 @@
     /* If not Halt move to idle state */
     rw_t2t_handle_op_complete();
 
-    (*rw_cb.p_cback)(rw_event, (tRW_DATA*)&ndef_data);
+    tRW_DATA rw_data;
+    rw_data.ndef = ndef_data;
+    (*rw_cb.p_cback)(rw_event, &rw_data);
   } else {
     evt_data.p_data = NULL;
     /* If activated and not Halt move to idle state */
     if (p_t2t->state != RW_T2T_STATE_NOT_ACTIVATED) rw_t2t_handle_op_complete();
 
     p_t2t->substate = RW_T2T_SUBSTATE_NONE;
-    (*rw_cb.p_cback)(rw_event, (tRW_DATA*)&evt_data);
+    tRW_DATA rw_data;
+    rw_data.data = evt_data;
+    (*rw_cb.p_cback)(rw_event, &rw_data);
   }
 }
 
@@ -569,13 +570,13 @@
 **
 *****************************************************************************/
 void rw_t2t_handle_presence_check_rsp(tNFC_STATUS status) {
-  tRW_READ_DATA evt_data;
+  tRW_DATA rw_data;
 
   /* Notify, Tag is present or not */
-  evt_data.status = status;
+  rw_data.data.status = status;
   rw_t2t_handle_op_complete();
 
-  (*rw_cb.p_cback)(RW_T2T_PRESENCE_CHECK_EVT, (tRW_DATA*)&evt_data);
+  (*rw_cb.p_cback)(RW_T2T_PRESENCE_CHECK_EVT, &rw_data);
 }
 
 /*******************************************************************************
@@ -607,9 +608,9 @@
   /* allocate a new buffer for message */
   p_cmd_buf = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
   if (p_cmd_buf != NULL) {
-    memcpy(p_cmd_buf, p_t2t->p_sec_cmd_buf,
-           sizeof(NFC_HDR) + p_t2t->p_sec_cmd_buf->offset +
-               p_t2t->p_sec_cmd_buf->len);
+    memcpy(p_cmd_buf, p_t2t->p_sec_cmd_buf, sizeof(NFC_HDR) +
+                                                p_t2t->p_sec_cmd_buf->offset +
+                                                p_t2t->p_sec_cmd_buf->len);
     memcpy(p_t2t->p_cur_cmd_buf, p_t2t->p_sec_cmd_buf,
            sizeof(NFC_HDR) + p_t2t->p_sec_cmd_buf->offset +
                p_t2t->p_sec_cmd_buf->len);
@@ -629,7 +630,9 @@
       evt_data.status = NFC_STATUS_FAILED;
       event = rw_t2t_info_to_event(p_cmd_rsp_info);
       rw_t2t_handle_op_complete();
-      (*rw_cb.p_cback)(event, (tRW_DATA*)&evt_data);
+      tRW_DATA rw_data;
+      rw_data.data = evt_data;
+      (*rw_cb.p_cback)(event, &rw_data);
     }
   }
 }
@@ -652,7 +655,7 @@
 
   p_data = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
   if (p_data == NULL) {
-    RW_TRACE_ERROR0("rw_t2t_sector_change - No buffer");
+    LOG(ERROR) << StringPrintf("rw_t2t_sector_change - No buffer");
     return (NFC_STATUS_NO_BUFFERS);
   }
 
@@ -672,12 +675,13 @@
     p_t2t->p_cmd_rsp_info = NULL;
     p_t2t->substate = RW_T2T_SUBSTATE_WAIT_SELECT_SECTOR;
 
-    RW_TRACE_EVENT0("rw_t2t_sector_change Sent Second Command");
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("rw_t2t_sector_change Sent Second Command");
     nfc_start_quick_timer(
         &p_t2t->t2_timer, NFC_TTYPE_RW_T2T_RESPONSE,
         (RW_T2T_SEC_SEL_TOUT_RESP * QUICK_TIMER_TICKS_PER_SEC) / 1000);
   } else {
-    RW_TRACE_ERROR1(
+    LOG(ERROR) << StringPrintf(
         "rw_t2t_sector_change Send failed at rw_t2t_send_cmd, error: %u",
         status);
   }
@@ -735,7 +739,8 @@
   status = rw_t2t_send_cmd(T2T_CMD_READ, (uint8_t*)read_cmd);
   if (status == NFC_STATUS_OK) {
     p_t2t->block_read = block;
-    RW_TRACE_EVENT1("rw_t2t_read Sent Command for Block: %u", block);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("rw_t2t_read Sent Command for Block: %u", block);
   }
 
   return status;
@@ -792,7 +797,8 @@
   /* Send Write command as sector change is not needed */
   status = rw_t2t_send_cmd(T2T_CMD_WRITE, write_cmd);
   if (status == NFC_STATUS_OK) {
-    RW_TRACE_EVENT1("rw_t2t_write Sent Command for Block: %u", block);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("rw_t2t_write Sent Command for Block: %u", block);
   }
 
   return status;
@@ -817,7 +823,7 @@
   if (p_t2t->p_cur_cmd_buf == NULL) {
     p_t2t->p_cur_cmd_buf = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
     if (p_t2t->p_cur_cmd_buf == NULL) {
-      RW_TRACE_ERROR0(
+      LOG(ERROR) << StringPrintf(
           "rw_t2t_select: unable to allocate buffer for retransmission");
       return (NFC_STATUS_FAILED);
     }
@@ -826,7 +832,7 @@
   if (p_t2t->p_sec_cmd_buf == NULL) {
     p_t2t->p_sec_cmd_buf = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
     if (p_t2t->p_sec_cmd_buf == NULL) {
-      RW_TRACE_ERROR0(
+      LOG(ERROR) << StringPrintf(
           "rw_t2t_select: unable to allocate buffer used during sector change");
       return (NFC_STATUS_FAILED);
     }
@@ -883,7 +889,7 @@
   tRW_CB* p_rw_cb = &rw_cb;
   uint8_t sector_blk = 0; /* block 0 of current sector */
 
-  RW_TRACE_API0("RW_T2tPresenceCheck");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* If RW_SelectTagType was not called (no conn_callback) return failure */
   if (!p_rw_cb->p_cback) {
@@ -925,15 +931,16 @@
   tNFC_STATUS status;
 
   if (p_t2t->state != RW_T2T_STATE_IDLE) {
-    RW_TRACE_ERROR1("Error: Type 2 tag not activated or Busy - State: %u",
-                    p_t2t->state);
+    LOG(ERROR) << StringPrintf(
+        "Error: Type 2 tag not activated or Busy - State: %u", p_t2t->state);
     return (NFC_STATUS_FAILED);
   }
 
   status = rw_t2t_read(block);
   if (status == NFC_STATUS_OK) {
     p_t2t->state = RW_T2T_STATE_READ;
-    RW_TRACE_EVENT0("RW_T2tRead Sent Read command");
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("RW_T2tRead Sent Read command");
   }
 
   return status;
@@ -957,8 +964,8 @@
   tNFC_STATUS status;
 
   if (p_t2t->state != RW_T2T_STATE_IDLE) {
-    RW_TRACE_ERROR1("Error: Type 2 tag not activated or Busy - State: %u",
-                    p_t2t->state);
+    LOG(ERROR) << StringPrintf(
+        "Error: Type 2 tag not activated or Busy - State: %u", p_t2t->state);
     return (NFC_STATUS_FAILED);
   }
 
@@ -969,7 +976,8 @@
       p_t2t->b_read_hdr = false;
     else if (block < (T2T_FIRST_DATA_BLOCK + T2T_READ_BLOCKS))
       p_t2t->b_read_data = false;
-    RW_TRACE_EVENT0("RW_T2tWrite Sent Write command");
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("RW_T2tWrite Sent Write command");
   }
 
   return status;
@@ -999,13 +1007,13 @@
   uint8_t sector_byte2[1];
 
   if (p_t2t->state != RW_T2T_STATE_IDLE) {
-    RW_TRACE_ERROR1("Error: Type 2 tag not activated or Busy - State: %u",
-                    p_t2t->state);
+    LOG(ERROR) << StringPrintf(
+        "Error: Type 2 tag not activated or Busy - State: %u", p_t2t->state);
     return (NFC_STATUS_FAILED);
   }
 
   if (sector >= T2T_MAX_SECTOR) {
-    RW_TRACE_ERROR2(
+    LOG(ERROR) << StringPrintf(
         "RW_T2tSectorSelect - Invalid sector: %u, T2 Max supported sector "
         "value: %u",
         sector, T2T_MAX_SECTOR - 1);
@@ -1020,13 +1028,13 @@
     p_t2t->select_sector = sector;
     p_t2t->substate = RW_T2T_SUBSTATE_WAIT_SELECT_SECTOR_SUPPORT;
 
-    RW_TRACE_EVENT0("RW_T2tSectorSelect Sent Sector select first command");
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("RW_T2tSectorSelect Sent Sector select first command");
   }
 
   return status;
 }
 
-#if (BT_TRACE_VERBOSE == TRUE)
 /*******************************************************************************
 **
 ** Function         rw_t2t_get_state_name
@@ -1035,33 +1043,33 @@
 **
 ** NOTE             conditionally compiled to save memory.
 **
-** Returns          pointer to the name
+** Returns          string
 **
 *******************************************************************************/
-static char* rw_t2t_get_state_name(uint8_t state) {
+static std::string rw_t2t_get_state_name(uint8_t state) {
   switch (state) {
     case RW_T2T_STATE_NOT_ACTIVATED:
-      return ("NOT_ACTIVATED");
+      return "NOT_ACTIVATED";
     case RW_T2T_STATE_IDLE:
-      return ("IDLE");
+      return "IDLE";
     case RW_T2T_STATE_READ:
-      return ("APP_READ");
+      return "APP_READ";
     case RW_T2T_STATE_WRITE:
-      return ("APP_WRITE");
+      return "APP_WRITE";
     case RW_T2T_STATE_SELECT_SECTOR:
-      return ("SECTOR_SELECT");
+      return "SECTOR_SELECT";
     case RW_T2T_STATE_DETECT_TLV:
-      return ("TLV_DETECT");
+      return "TLV_DETECT";
     case RW_T2T_STATE_READ_NDEF:
-      return ("READ_NDEF");
+      return "READ_NDEF";
     case RW_T2T_STATE_WRITE_NDEF:
-      return ("WRITE_NDEF");
+      return "WRITE_NDEF";
     case RW_T2T_STATE_SET_TAG_RO:
-      return ("SET_TAG_RO");
+      return "SET_TAG_RO";
     case RW_T2T_STATE_CHECK_PRESENCE:
-      return ("CHECK_PRESENCE");
+      return "CHECK_PRESENCE";
     default:
-      return ("???? UNKNOWN STATE");
+      return "???? UNKNOWN STATE";
   }
 }
 
@@ -1076,51 +1084,49 @@
 ** Returns          pointer to the name
 **
 *******************************************************************************/
-static char* rw_t2t_get_substate_name(uint8_t substate) {
+static std::string rw_t2t_get_substate_name(uint8_t substate) {
   switch (substate) {
     case RW_T2T_SUBSTATE_NONE:
-      return ("RW_T2T_SUBSTATE_NONE");
+      return "RW_T2T_SUBSTATE_NONE";
     case RW_T2T_SUBSTATE_WAIT_SELECT_SECTOR_SUPPORT:
-      return ("RW_T2T_SUBSTATE_WAIT_SELECT_SECTOR_SUPPORT");
+      return "RW_T2T_SUBSTATE_WAIT_SELECT_SECTOR_SUPPORT";
     case RW_T2T_SUBSTATE_WAIT_SELECT_SECTOR:
-      return ("RW_T2T_SUBSTATE_WAIT_SELECT_SECTOR");
+      return "RW_T2T_SUBSTATE_WAIT_SELECT_SECTOR";
     case RW_T2T_SUBSTATE_WAIT_READ_CC:
-      return ("RW_T2T_SUBSTATE_WAIT_READ_CC");
+      return "RW_T2T_SUBSTATE_WAIT_READ_CC";
     case RW_T2T_SUBSTATE_WAIT_TLV_DETECT:
-      return ("RW_T2T_SUBSTATE_WAIT_TLV_DETECT");
+      return "RW_T2T_SUBSTATE_WAIT_TLV_DETECT";
     case RW_T2T_SUBSTATE_WAIT_FIND_LEN_FIELD_LEN:
-      return ("RW_T2T_SUBSTATE_WAIT_FIND_LEN_FIELD_LEN");
+      return "RW_T2T_SUBSTATE_WAIT_FIND_LEN_FIELD_LEN";
     case RW_T2T_SUBSTATE_WAIT_READ_TLV_LEN0:
-      return ("RW_T2T_SUBSTATE_WAIT_READ_TLV_LEN0");
+      return "RW_T2T_SUBSTATE_WAIT_READ_TLV_LEN0";
     case RW_T2T_SUBSTATE_WAIT_READ_TLV_LEN1:
-      return ("RW_T2T_SUBSTATE_WAIT_READ_TLV_LEN1");
+      return "RW_T2T_SUBSTATE_WAIT_READ_TLV_LEN1";
     case RW_T2T_SUBSTATE_WAIT_READ_TLV_VALUE:
-      return ("RW_T2T_SUBSTATE_WAIT_READ_TLV_VALUE");
+      return "RW_T2T_SUBSTATE_WAIT_READ_TLV_VALUE";
     case RW_T2T_SUBSTATE_WAIT_READ_LOCKS:
-      return ("RW_T2T_SUBSTATE_WAIT_READ_LOCKS");
+      return "RW_T2T_SUBSTATE_WAIT_READ_LOCKS";
     case RW_T2T_SUBSTATE_WAIT_READ_NDEF_FIRST_BLOCK:
-      return ("RW_T2T_SUBSTATE_WAIT_READ_NDEF_FIRST_BLOCK");
+      return "RW_T2T_SUBSTATE_WAIT_READ_NDEF_FIRST_BLOCK";
     case RW_T2T_SUBSTATE_WAIT_READ_NDEF_LAST_BLOCK:
-      return ("RW_T2T_SUBSTATE_WAIT_READ_NDEF_LAST_BLOCK");
+      return "RW_T2T_SUBSTATE_WAIT_READ_NDEF_LAST_BLOCK";
     case RW_T2T_SUBSTATE_WAIT_READ_TERM_TLV_BLOCK:
-      return ("RW_T2T_SUBSTATE_WAIT_READ_TERM_TLV_BLOCK");
+      return "RW_T2T_SUBSTATE_WAIT_READ_TERM_TLV_BLOCK";
     case RW_T2T_SUBSTATE_WAIT_READ_NDEF_NEXT_BLOCK:
-      return ("RW_T2T_SUBSTATE_WAIT_READ_NDEF_NEXT_BLOCK");
+      return "RW_T2T_SUBSTATE_WAIT_READ_NDEF_NEXT_BLOCK";
     case RW_T2T_SUBSTATE_WAIT_WRITE_NDEF_NEXT_BLOCK:
-      return ("RW_T2T_SUBSTATE_WAIT_WRITE_NDEF_NEXT_BLOCK");
+      return "RW_T2T_SUBSTATE_WAIT_WRITE_NDEF_NEXT_BLOCK";
     case RW_T2T_SUBSTATE_WAIT_WRITE_NDEF_LAST_BLOCK:
-      return ("RW_T2T_SUBSTATE_WAIT_WRITE_NDEF_LAST_BLOCK");
+      return "RW_T2T_SUBSTATE_WAIT_WRITE_NDEF_LAST_BLOCK";
     case RW_T2T_SUBSTATE_WAIT_READ_NDEF_LEN_BLOCK:
-      return ("RW_T2T_SUBSTATE_WAIT_READ_NDEF_LEN_BLOCK");
+      return "RW_T2T_SUBSTATE_WAIT_READ_NDEF_LEN_BLOCK";
     case RW_T2T_SUBSTATE_WAIT_WRITE_NDEF_LEN_BLOCK:
-      return ("RW_T2T_SUBSTATE_WAIT_WRITE_NDEF_LEN_BLOCK");
+      return "RW_T2T_SUBSTATE_WAIT_WRITE_NDEF_LEN_BLOCK";
     case RW_T2T_SUBSTATE_WAIT_WRITE_NDEF_LEN_NEXT_BLOCK:
-      return ("RW_T2T_SUBSTATE_WAIT_WRITE_NDEF_LEN_NEXT_BLOCK");
+      return "RW_T2T_SUBSTATE_WAIT_WRITE_NDEF_LEN_NEXT_BLOCK";
     case RW_T2T_SUBSTATE_WAIT_WRITE_TERM_TLV_CMPLT:
-      return ("RW_T2T_SUBSTATE_WAIT_WRITE_TERM_TLV_CMPLT");
+      return "RW_T2T_SUBSTATE_WAIT_WRITE_TERM_TLV_CMPLT";
     default:
-      return ("???? UNKNOWN SUBSTATE");
+      return "???? UNKNOWN SUBSTATE";
   }
 }
-
-#endif /* (BT_TRACE_VERBOSE == TRUE) */
diff --git a/src/nfc/tags/rw_t2t_ndef.c b/src/nfc/tags/rw_t2t_ndef.cc
similarity index 97%
rename from src/nfc/tags/rw_t2t_ndef.c
rename to src/nfc/tags/rw_t2t_ndef.cc
index def45bb..c18c685 100644
--- a/src/nfc/tags/rw_t2t_ndef.c
+++ b/src/nfc/tags/rw_t2t_ndef.cc
@@ -22,17 +22,23 @@
  *  Reader/Writer mode.
  *
  ******************************************************************************/
-#include <log/log.h>
 #include <string.h>
+
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+#include <log/log.h>
+
 #include "nfc_target.h"
 
-#include "gki.h"
 #include "nci_hmsgs.h"
 #include "nfc_api.h"
-#include "nfc_int.h"
 #include "rw_api.h"
 #include "rw_int.h"
 
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
+
 #if (RW_NDEF_INCLUDED == TRUE)
 
 /* Local static functions */
@@ -108,7 +114,7 @@
           if (p_t2t->tag_hdr[T2T_CC0_NMN_BYTE] == T2T_CC0_NMN) {
             rw_t2t_handle_cc_read_rsp();
           } else {
-            RW_TRACE_WARNING3(
+            LOG(WARNING) << StringPrintf(
                 "NDEF Detection failed!, CC[0]: 0x%02x, CC[1]: 0x%02x, CC[3]: "
                 "0x%02x",
                 p_t2t->tag_hdr[T2T_CC0_NMN_BYTE],
@@ -238,15 +244,11 @@
 *******************************************************************************/
 static void rw_t2t_ntf_tlv_detect_complete(tNFC_STATUS status) {
   tRW_T2T_CB* p_t2t = &rw_cb.tcb.t2t;
-  tRW_DETECT_NDEF_DATA ndef_data = {
-      0,
-  };
-  tRW_DETECT_TLV_DATA tlv_data;
-  tRW_T2T_DETECT evt_data;
   uint8_t xx;
 
   if (p_t2t->tlv_detect == TAG_NDEF_TLV) {
     /* Notify upper layer the result of NDEF detect op */
+    tRW_DETECT_NDEF_DATA ndef_data = {};
     ndef_data.status = status;
     ndef_data.protocol = NFC_PROTOCOL_T2T;
     ndef_data.flags = rw_t2t_get_ndef_flags();
@@ -270,14 +272,19 @@
     }
 
     rw_t2t_handle_op_complete();
-    (*rw_cb.p_cback)(RW_T2T_NDEF_DETECT_EVT, (tRW_DATA*)&ndef_data);
+    tRW_DATA rw_data;
+    rw_data.ndef = ndef_data;
+    (*rw_cb.p_cback)(RW_T2T_NDEF_DETECT_EVT, &rw_data);
   } else if (p_t2t->tlv_detect == TAG_PROPRIETARY_TLV) {
+    tRW_T2T_DETECT evt_data;
     evt_data.msg_len = p_t2t->prop_msg_len;
     evt_data.status = status;
     rw_t2t_handle_op_complete();
+    /* FIXME: Unsafe cast */
     (*rw_cb.p_cback)(RW_T2T_TLV_DETECT_EVT, (tRW_DATA*)&evt_data);
   } else {
     /* Notify upper layer the result of Lock/Mem TLV detect op */
+    tRW_DETECT_TLV_DATA tlv_data;
     tlv_data.protocol = NFC_PROTOCOL_T2T;
     if (p_t2t->tlv_detect == TAG_LOCK_CTRL_TLV) {
       tlv_data.num_bytes = p_t2t->num_lockbytes;
@@ -289,7 +296,9 @@
     }
     tlv_data.status = status;
     rw_t2t_handle_op_complete();
-    (*rw_cb.p_cback)(RW_T2T_TLV_DETECT_EVT, (tRW_DATA*)&tlv_data);
+    tRW_DATA rw_data;
+    rw_data.tlv = tlv_data;
+    (*rw_cb.p_cback)(RW_T2T_TLV_DETECT_EVT, &rw_data);
   }
 }
 
@@ -588,7 +597,7 @@
             if (p_t2t->bytes_count > 0) {
               p_t2t->bytes_count--;
             } else {
-              RW_TRACE_ERROR0("Underflow p_t2t->bytes_count!");
+              LOG(ERROR) << StringPrintf("Underflow p_t2t->bytes_count!");
               android_errorWriteLog(0x534e4554, "120506143");
             }
             if ((tlvtype == TAG_LOCK_CTRL_TLV) || (tlvtype == TAG_NDEF_TLV)) {
@@ -641,14 +650,14 @@
             if (p_t2t->bytes_count > 0) {
               p_t2t->bytes_count--;
             } else {
-              RW_TRACE_ERROR0("bytes_count underflow!");
+              LOG(ERROR) << StringPrintf("bytes_count underflow!");
               android_errorWriteLog(0x534e4554, "120506143");
             }
             if ((tlvtype == TAG_MEM_CTRL_TLV) || (tlvtype == TAG_NDEF_TLV)) {
               p_t2t->tlv_value[2 - p_t2t->bytes_count] = p_data[offset];
               if (p_t2t->bytes_count == 0) {
                 if (p_t2t->num_mem_tlvs >= RW_T2T_MAX_MEM_TLVS) {
-                  RW_TRACE_ERROR0(
+                  LOG(ERROR) << StringPrintf(
                       "rw_t2t_handle_tlv_detect_rsp - Maximum buffer allocated "
                       "for Memory tlv has reached");
                   failed = true;
@@ -678,7 +687,7 @@
             if (p_t2t->bytes_count > 0) {
               p_t2t->bytes_count--;
             } else {
-              RW_TRACE_ERROR0("bytes_count underflow!");
+              LOG(ERROR) << StringPrintf("bytes_count underflow!");
               android_errorWriteLog(0x534e4554, "120506143");
             }
             if (tlvtype == TAG_PROPRIETARY_TLV) {
@@ -1500,7 +1509,9 @@
     evt_data.status = failed ? NFC_STATUS_FAILED : NFC_STATUS_OK;
     evt_data.p_data = NULL;
     rw_t2t_handle_op_complete();
-    (*rw_cb.p_cback)(RW_T2T_NDEF_READ_EVT, (tRW_DATA*)&evt_data);
+    tRW_DATA rw_data;
+    rw_data.data = evt_data;
+    (*rw_cb.p_cback)(RW_T2T_NDEF_READ_EVT, &rw_data);
   }
 }
 
@@ -1666,7 +1677,9 @@
       p_t2t->ndef_msg_len = p_t2t->new_ndef_msg_len;
     }
     rw_t2t_handle_op_complete();
-    (*rw_cb.p_cback)(RW_T2T_NDEF_WRITE_EVT, (tRW_DATA*)&evt_data);
+    tRW_DATA rw_data;
+    rw_data.data = evt_data;
+    (*rw_cb.p_cback)(RW_T2T_NDEF_WRITE_EVT, &rw_data);
   }
 }
 
@@ -1711,7 +1724,6 @@
   tNFC_STATUS status = NFC_STATUS_FAILED;
   bool b_notify = false;
   uint8_t write_block[T2T_BLOCK_SIZE];
-  tRW_DATA evt;
   bool b_pending = false;
   uint8_t read_lock = 0;
   uint8_t num_locks = 0;
@@ -1795,9 +1807,10 @@
 
   if (status != NFC_STATUS_OK || b_notify) {
     /* Notify upper layer the result of Configuring Tag as Read only */
+    tRW_DATA evt;
     evt.status = status;
     rw_t2t_handle_op_complete();
-    (*rw_cb.p_cback)(RW_T2T_SET_TAG_RO_EVT, (tRW_DATA*)&evt);
+    (*rw_cb.p_cback)(RW_T2T_SET_TAG_RO_EVT, &evt);
   }
 }
 
@@ -1811,7 +1824,6 @@
 **
 *******************************************************************************/
 static void rw_t2t_handle_format_tag_rsp(uint8_t* p_data) {
-  tRW_DATA evt;
   uint8_t* p;
   tRW_T2T_CB* p_t2t = &rw_cb.tcb.t2t;
   tNFC_STATUS status = NFC_STATUS_FAILED;
@@ -1913,9 +1925,10 @@
 
   if (status != NFC_STATUS_OK || b_notify) {
     /* Notify upper layer the result of Format op */
+    tRW_DATA evt;
     evt.status = status;
     rw_t2t_handle_op_complete();
-    (*rw_cb.p_cback)(RW_T2T_FORMAT_CPLT_EVT, (tRW_DATA*)&evt);
+    (*rw_cb.p_cback)(RW_T2T_FORMAT_CPLT_EVT, &evt);
   }
 }
 
@@ -2565,7 +2578,7 @@
 
   p_ret = t2t_tag_init_data(p_t2t->tag_hdr[0], false, 0);
   if (p_ret == NULL) {
-    RW_TRACE_WARNING1(
+    LOG(WARNING) << StringPrintf(
         "rw_t2t_format_tag - Unknown Manufacturer ID: %u, Cannot Format the "
         "tag!",
         p_t2t->tag_hdr[0]);
@@ -2575,7 +2588,7 @@
   if (p_t2t->tag_hdr[T2T_CC2_TMS_BYTE] != 0) {
     /* If OTP tag has valid NDEF Message, cannot format the tag */
     if ((p_t2t->ndef_msg_len > 0) && (p_ret->b_otp)) {
-      RW_TRACE_WARNING0(
+      LOG(WARNING) << StringPrintf(
           "rw_t2t_format_tag - Cannot Format a OTP tag with NDEF Message!");
       return (NFC_STATUS_FAILED);
     }
@@ -2586,7 +2599,8 @@
          (p_t2t->tag_hdr[T2T_CC1_VNO_BYTE] != T2T_CC1_LEGACY_VNO) &&
          (p_t2t->tag_hdr[T2T_CC1_VNO_BYTE] != T2T_CC1_VNO) &&
          (p_t2t->tag_hdr[T2T_CC1_VNO_BYTE] != T2T_CC1_NEW_VNO))) {
-      RW_TRACE_WARNING0("rw_t2t_format_tag - Tag not blank to Format!");
+      LOG(WARNING) << StringPrintf(
+          "rw_t2t_format_tag - Tag not blank to Format!");
       return (NFC_STATUS_FAILED);
     } else {
       tms = p_t2t->tag_hdr[T2T_CC2_TMS_BYTE];
@@ -2637,7 +2651,7 @@
 
   /* If CC block is read and cc3 is soft locked, reject the command */
   if ((p_t2t->tag_hdr[T2T_CC3_RWA_BYTE] & T2T_CC3_RWA_RO) == T2T_CC3_RWA_RO) {
-    RW_TRACE_ERROR1(
+    LOG(ERROR) << StringPrintf(
         "rw_t2t_soft_lock_tag: Error: Type 2 tag is in Read only state, CC3: "
         "%u",
         p_t2t->tag_hdr[T2T_CC3_RWA_BYTE]);
@@ -2652,7 +2666,7 @@
 
     if ((p_t2t->tag_hdr[T2T_CC2_TMS_BYTE] != T2T_CC2_TMS_STATIC) &&
         (p_t2t->num_lockbytes == 0)) {
-      RW_TRACE_ERROR0(
+      LOG(ERROR) << StringPrintf(
           "rw_t2t_soft_lock_tag: Error: Lock TLV not detected! Cannot hard "
           "lock the tag");
       return (NFC_STATUS_FAILED);
@@ -2700,8 +2714,9 @@
   tNFC_STATUS status = NFC_STATUS_FAILED;
 
   if (p_t2t->state != RW_T2T_STATE_IDLE) {
-    RW_TRACE_WARNING1("RW_T2tFormatNDef - Tag not initialized/ Busy! State: %u",
-                      p_t2t->state);
+    LOG(WARNING) << StringPrintf(
+        "RW_T2tFormatNDef - Tag not initialized/ Busy! State: %u",
+        p_t2t->state);
     return (NFC_STATUS_FAILED);
   }
 
@@ -2744,21 +2759,22 @@
   uint16_t block;
 
   if (p_t2t->state != RW_T2T_STATE_IDLE) {
-    RW_TRACE_ERROR1("Error: Type 2 tag not activated or Busy - State: %u",
-                    p_t2t->state);
+    LOG(ERROR) << StringPrintf(
+        "Error: Type 2 tag not activated or Busy - State: %u", p_t2t->state);
     return (NFC_STATUS_BUSY);
   }
 
   if ((tlv_type != TAG_LOCK_CTRL_TLV) && (tlv_type != TAG_MEM_CTRL_TLV) &&
       (tlv_type != TAG_NDEF_TLV) && (tlv_type != TAG_PROPRIETARY_TLV)) {
-    RW_TRACE_API1("RW_T2tLocateTlv - Cannot search TLV: 0x%02x", tlv_type);
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "RW_T2tLocateTlv - Cannot search TLV: 0x%02x", tlv_type);
     return (NFC_STATUS_FAILED);
   }
 
   if ((tlv_type == TAG_LOCK_CTRL_TLV) && (p_t2t->b_read_hdr) &&
       (p_t2t->tag_hdr[T2T_CC2_TMS_BYTE] == T2T_CC2_TMS_STATIC)) {
     p_t2t->b_read_hdr = false;
-    RW_TRACE_API1(
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
         "RW_T2tLocateTlv - No Lock tlv in static structure tag, CC[0]: 0x%02x",
         p_t2t->tag_hdr[T2T_CC2_TMS_BYTE]);
     return (NFC_STATUS_FAILED);
@@ -2767,7 +2783,7 @@
   if ((tlv_type == TAG_NDEF_TLV) && (p_t2t->b_read_hdr) &&
       (p_t2t->tag_hdr[T2T_CC0_NMN_BYTE] != T2T_CC0_NMN)) {
     p_t2t->b_read_hdr = false;
-    RW_TRACE_WARNING3(
+    LOG(WARNING) << StringPrintf(
         "RW_T2tLocateTlv - Invalid NDEF Magic Number!, CC[0]: 0x%02x, CC[1]: "
         "0x%02x, CC[3]: 0x%02x",
         p_t2t->tag_hdr[T2T_CC0_NMN_BYTE], p_t2t->tag_hdr[T2T_CC1_VNO_BYTE],
@@ -2868,26 +2884,27 @@
   uint16_t block;
 
   if (p_t2t->state != RW_T2T_STATE_IDLE) {
-    RW_TRACE_ERROR1("Error: Type 2 tag not activated or Busy - State: %u",
-                    p_t2t->state);
+    LOG(ERROR) << StringPrintf(
+        "Error: Type 2 tag not activated or Busy - State: %u", p_t2t->state);
     return (NFC_STATUS_FAILED);
   }
 
   if (p_t2t->ndef_status == T2T_NDEF_NOT_DETECTED) {
-    RW_TRACE_ERROR0("RW_T2tReadNDef - Error: NDEF detection not performed yet");
+    LOG(ERROR) << StringPrintf(
+        "RW_T2tReadNDef - Error: NDEF detection not performed yet");
     return (NFC_STATUS_FAILED);
   }
 
   if (buf_len < p_t2t->ndef_msg_len) {
-    RW_TRACE_WARNING2(
+    LOG(WARNING) << StringPrintf(
         "RW_T2tReadNDef - buffer size: %u  less than NDEF msg sise: %u",
         buf_len, p_t2t->ndef_msg_len);
     return (NFC_STATUS_FAILED);
   }
 
   if (!p_t2t->ndef_msg_len) {
-    RW_TRACE_WARNING1("RW_T2tReadNDef - NDEF Message length is zero ",
-                      p_t2t->ndef_msg_len);
+    LOG(WARNING) << StringPrintf(
+        "RW_T2tReadNDef - NDEF Message length is zero");
     return (NFC_STATUS_NOT_INITIALIZED);
   }
 
@@ -2945,25 +2962,27 @@
   tNFC_STATUS status = NFC_STATUS_OK;
 
   if (p_t2t->state != RW_T2T_STATE_IDLE) {
-    RW_TRACE_ERROR1("Error: Type 2 tag not activated or Busy - State: %u",
-                    p_t2t->state);
+    LOG(ERROR) << StringPrintf(
+        "Error: Type 2 tag not activated or Busy - State: %u", p_t2t->state);
     return (NFC_STATUS_FAILED);
   }
 
   if (p_t2t->ndef_status == T2T_NDEF_NOT_DETECTED) {
-    RW_TRACE_ERROR0("RW_T2tWriteNDef - Error: NDEF detection not performed!");
+    LOG(ERROR) << StringPrintf(
+        "RW_T2tWriteNDef - Error: NDEF detection not performed!");
     return (NFC_STATUS_FAILED);
   }
 
   if (p_t2t->tag_hdr[T2T_CC3_RWA_BYTE] != T2T_CC3_RWA_RW) {
-    RW_TRACE_ERROR1("RW_T2tWriteNDef - Write access not granted - CC3: %u",
-                    p_t2t->tag_hdr[T2T_CC3_RWA_BYTE]);
+    LOG(ERROR) << StringPrintf(
+        "RW_T2tWriteNDef - Write access not granted - CC3: %u",
+        p_t2t->tag_hdr[T2T_CC3_RWA_BYTE]);
     return (NFC_STATUS_REFUSED);
   }
 
   /* Check if there is enough memory on the tag */
   if (msg_len > p_t2t->max_ndef_msg_len) {
-    RW_TRACE_ERROR1(
+    LOG(ERROR) << StringPrintf(
         "RW_T2tWriteNDef - Cannot write NDEF of size greater than %u bytes",
         p_t2t->max_ndef_msg_len);
     return (NFC_STATUS_FAILED);
@@ -2974,7 +2993,7 @@
   if ((p_t2t->ndef_msg_len > 0) &&
       ((p_ret = t2t_tag_init_data(p_t2t->tag_hdr[0], false, 0)) != NULL) &&
       (p_ret->b_otp)) {
-    RW_TRACE_WARNING0(
+    LOG(WARNING) << StringPrintf(
         "RW_T2tWriteNDef - Cannot Overwrite NDEF Message on a OTP tag!");
     return (NFC_STATUS_FAILED);
   }
@@ -3021,7 +3040,7 @@
   tRW_T2T_CB* p_t2t = &rw_cb.tcb.t2t;
 
   if (p_t2t->state != RW_T2T_STATE_IDLE) {
-    RW_TRACE_ERROR1(
+    LOG(ERROR) << StringPrintf(
         "RW_T2tSetTagReadOnly: Error: Type 2 tag not activated or Busy - "
         "State: %u",
         p_t2t->state);
diff --git a/src/nfc/tags/rw_t3t.c b/src/nfc/tags/rw_t3t.cc
similarity index 90%
rename from src/nfc/tags/rw_t3t.c
rename to src/nfc/tags/rw_t3t.cc
index c5df1b7..ea88fc9 100644
--- a/src/nfc/tags/rw_t3t.c
+++ b/src/nfc/tags/rw_t3t.cc
@@ -22,20 +22,25 @@
  *  mode.
  *
  ******************************************************************************/
-#include <log/log.h>
 #include <string.h>
 
-#include "bt_types.h"
-#include "nfc_target.h"
-#include "trace_api.h"
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+#include <log/log.h>
 
-#include "gki.h"
+#include "nfc_target.h"
+
+#include "bt_types.h"
 #include "nci_hmsgs.h"
 #include "nfc_api.h"
 #include "nfc_int.h"
 #include "rw_api.h"
 #include "rw_int.h"
-#include "tags_int.h"
+#include "trace_api.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 /* Definitions for constructing t3t command messages */
 #define RW_T3T_FL_PADDING 0x01 /* Padding needed for last NDEF block */
@@ -62,7 +67,7 @@
 #define RW_T3T_MIN_TIMEOUT_TICKS 10
 
 /* Macro to extract major version from NDEF version byte */
-#define T3T_GET_MAJOR_VERSION(ver) (ver >> 4)
+#define T3T_GET_MAJOR_VERSION(ver) ((ver) >> 4)
 
 /* Enumeration of API commands */
 enum {
@@ -123,14 +128,12 @@
                                   block-write to complete */
 };
 
-#if (BT_TRACE_VERBOSE == TRUE)
-static char* rw_t3t_cmd_str(uint8_t cmd_id);
-static char* rw_t3t_state_str(uint8_t state_id);
-#endif
+static std::string rw_t3t_cmd_str(uint8_t cmd_id);
+static std::string rw_t3t_state_str(uint8_t state_id);
 
 /* Local static functions */
 static void rw_t3t_update_ndef_flag(uint8_t* p_flag);
-static tNFC_STATUS rw_t3t_unselect(uint8_t peer_nfcid2[]);
+static tNFC_STATUS rw_t3t_unselect();
 static NFC_HDR* rw_t3t_get_cmd_buf(void);
 static tNFC_STATUS rw_t3t_send_to_lower(NFC_HDR* p_msg);
 static void rw_t3t_handle_get_system_codes_cplt(void);
@@ -140,17 +143,11 @@
                                           uint8_t* p_sensf_res_buf);
 static void rw_t3t_handle_ndef_detect_poll_rsp(tRW_T3T_CB* p_cb,
                                                uint8_t nci_status,
-                                               uint8_t num_responses,
-                                               uint8_t sensf_res_buf_size,
-                                               uint8_t* p_sensf_res_buf);
+                                               uint8_t num_responses);
 static void rw_t3t_handle_fmt_poll_rsp(tRW_T3T_CB* p_cb, uint8_t nci_status,
-                                       uint8_t num_responses,
-                                       uint8_t sensf_res_buf_size,
-                                       uint8_t* p_sensf_res_buf);
+                                       uint8_t num_responses);
 static void rw_t3t_handle_sro_poll_rsp(tRW_T3T_CB* p_cb, uint8_t nci_status,
-                                       uint8_t num_responses,
-                                       uint8_t sensf_res_buf_size,
-                                       uint8_t* p_sensf_res_buf);
+                                       uint8_t num_responses);
 
 /* Default NDEF attribute information block (used when formatting Felica-Lite
  * tags) */
@@ -258,15 +255,16 @@
       /* retry sending the command */
       rw_cb.cur_retry++;
 
-      RW_TRACE_DEBUG2("T3T retransmission attempt %i of %i", rw_cb.cur_retry,
-                      RW_MAX_RETRIES);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("T3T retransmission attempt %i of %i",
+                          rw_cb.cur_retry, RW_MAX_RETRIES);
 
       /* allocate a new buffer for message */
       p_cmd_buf = rw_t3t_get_cmd_buf();
       if (p_cmd_buf != NULL) {
-        memcpy(p_cmd_buf, p_cb->p_cur_cmd_buf,
-               sizeof(NFC_HDR) + p_cb->p_cur_cmd_buf->offset +
-                   p_cb->p_cur_cmd_buf->len);
+        memcpy(p_cmd_buf, p_cb->p_cur_cmd_buf, sizeof(NFC_HDR) +
+                                                   p_cb->p_cur_cmd_buf->offset +
+                                                   p_cb->p_cur_cmd_buf->len);
 
         if (rw_t3t_send_to_lower(p_cmd_buf) == NFC_STATUS_OK) {
           /* Start timer for waiting for response */
@@ -279,8 +277,8 @@
         }
       }
     } else {
-      RW_TRACE_DEBUG1("T3T maximum retransmission attempts reached (%i)",
-                      RW_MAX_RETRIES);
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+          "T3T maximum retransmission attempts reached (%i)", RW_MAX_RETRIES);
     }
 
 #if (RW_STATS_INCLUDED == TRUE)
@@ -348,7 +346,7 @@
     p_cb->flags &= ~RW_T3T_FL_W4_PRESENCE_CHECK_POLL_RSP;
     evt_data.status = nci_status;
     p_cb->rw_state = RW_T3T_STATE_IDLE;
-    (*(rw_cb.p_cback))(RW_T3T_PRESENCE_CHECK_EVT, (tRW_DATA*)&evt_data);
+    (*(rw_cb.p_cback))(RW_T3T_PRESENCE_CHECK_EVT, &evt_data);
   } else if (p_cb->flags & RW_T3T_FL_W4_GET_SC_POLL_RSP) {
     /* Handle POLL ntf in response to get system codes */
     p_cb->flags &= ~RW_T3T_FL_W4_GET_SC_POLL_RSP;
@@ -357,18 +355,15 @@
   } else if (p_cb->flags & RW_T3T_FL_W4_FMT_FELICA_LITE_POLL_RSP) {
     /* Handle POLL ntf in response to get system codes */
     p_cb->flags &= ~RW_T3T_FL_W4_FMT_FELICA_LITE_POLL_RSP;
-    rw_t3t_handle_fmt_poll_rsp(p_cb, nci_status, num_responses,
-                               sensf_res_buf_size, p_sensf_res_buf);
+    rw_t3t_handle_fmt_poll_rsp(p_cb, nci_status, num_responses);
   } else if (p_cb->flags & RW_T3T_FL_W4_SRO_FELICA_LITE_POLL_RSP) {
     /* Handle POLL ntf in response to get system codes */
     p_cb->flags &= ~RW_T3T_FL_W4_SRO_FELICA_LITE_POLL_RSP;
-    rw_t3t_handle_sro_poll_rsp(p_cb, nci_status, num_responses,
-                               sensf_res_buf_size, p_sensf_res_buf);
+    rw_t3t_handle_sro_poll_rsp(p_cb, nci_status, num_responses);
   } else if (p_cb->flags & RW_T3T_FL_W4_NDEF_DETECT_POLL_RSP) {
     /* Handle POLL ntf in response to ndef detection */
     p_cb->flags &= ~RW_T3T_FL_W4_NDEF_DETECT_POLL_RSP;
-    rw_t3t_handle_ndef_detect_poll_rsp(p_cb, nci_status, num_responses,
-                                       sensf_res_buf_size, p_sensf_res_buf);
+    rw_t3t_handle_ndef_detect_poll_rsp(p_cb, nci_status, num_responses);
   } else {
     /* Handle POLL ntf in response to RW_T3tPoll */
     evt_data.t3t_poll.status = nci_status;
@@ -402,10 +397,11 @@
   evt_data.t3t_sc.num_system_codes = p_cb->num_system_codes;
   evt_data.t3t_sc.p_system_codes = p_cb->system_codes;
 
-  RW_TRACE_DEBUG1("rw_t3t_handle_get_system_codes_cplt, number of systems: %i",
-                  evt_data.t3t_sc.num_system_codes);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "number of systems: %i", evt_data.t3t_sc.num_system_codes);
   for (i = 0; i < evt_data.t3t_sc.num_system_codes; i++) {
-    RW_TRACE_DEBUG2("   system %i: %04X", i, evt_data.t3t_sc.p_system_codes[i]);
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "system %i: %04X", i, evt_data.t3t_sc.p_system_codes[i]);
   }
 
   p_cb->rw_state = RW_T3T_STATE_IDLE;
@@ -480,19 +476,14 @@
   /* Check which timer timed out */
   if (p_tle == &p_cb->timer) {
 /* UPDATE/CHECK response timeout */
-#if (BT_TRACE_VERBOSE == TRUE)
-    RW_TRACE_ERROR3("T3T timeout. state=%s cur_cmd=0x%02X (%s)",
-                    rw_t3t_state_str(rw_cb.tcb.t3t.rw_state),
-                    rw_cb.tcb.t3t.cur_cmd,
-                    rw_t3t_cmd_str(rw_cb.tcb.t3t.cur_cmd));
-#else
-    RW_TRACE_ERROR2("T3T timeout. state=0x%02X cur_cmd=0x%02X",
-                    rw_cb.tcb.t3t.rw_state, rw_cb.tcb.t3t.cur_cmd);
-#endif
+LOG(ERROR) << StringPrintf("T3T timeout. state=%s cur_cmd=0x%02X (%s)",
+                           rw_t3t_state_str(rw_cb.tcb.t3t.rw_state).c_str(),
+                           rw_cb.tcb.t3t.cur_cmd,
+                           rw_t3t_cmd_str(rw_cb.tcb.t3t.cur_cmd).c_str());
 
-    rw_t3t_process_error(NFC_STATUS_TIMEOUT);
+rw_t3t_process_error(NFC_STATUS_TIMEOUT);
   } else {
-    RW_TRACE_ERROR0("T3T POLL timeout.");
+    LOG(ERROR) << StringPrintf("T3T POLL timeout.");
 
     /* POLL response timeout */
     if (p_cb->flags & RW_T3T_FL_W4_PRESENCE_CHECK_POLL_RSP) {
@@ -500,7 +491,7 @@
       p_cb->flags &= ~RW_T3T_FL_W4_PRESENCE_CHECK_POLL_RSP;
       evt_data.status = NFC_STATUS_FAILED;
       p_cb->rw_state = RW_T3T_STATE_IDLE;
-      (*(rw_cb.p_cback))(RW_T3T_PRESENCE_CHECK_EVT, (tRW_DATA*)&evt_data);
+      (*(rw_cb.p_cback))(RW_T3T_PRESENCE_CHECK_EVT, &evt_data);
     } else if (p_cb->flags & RW_T3T_FL_W4_GET_SC_POLL_RSP) {
       /* POLL timeout for getting system codes */
       p_cb->flags &= ~RW_T3T_FL_W4_GET_SC_POLL_RSP;
@@ -508,22 +499,22 @@
     } else if (p_cb->flags & RW_T3T_FL_W4_FMT_FELICA_LITE_POLL_RSP) {
       /* POLL timeout for formatting Felica Lite */
       p_cb->flags &= ~RW_T3T_FL_W4_FMT_FELICA_LITE_POLL_RSP;
-      RW_TRACE_ERROR0("Felica-Lite tag not detected");
+      LOG(ERROR) << StringPrintf("Felica-Lite tag not detected");
       rw_t3t_format_cplt(NFC_STATUS_FAILED);
     } else if (p_cb->flags & RW_T3T_FL_W4_SRO_FELICA_LITE_POLL_RSP) {
       /* POLL timeout for configuring Felica Lite read only */
       p_cb->flags &= ~RW_T3T_FL_W4_SRO_FELICA_LITE_POLL_RSP;
-      RW_TRACE_ERROR0("Felica-Lite tag not detected");
+      LOG(ERROR) << StringPrintf("Felica-Lite tag not detected");
       rw_t3t_set_readonly_cplt(NFC_STATUS_FAILED);
     } else if (p_cb->flags & RW_T3T_FL_W4_NDEF_DETECT_POLL_RSP) {
       /* POLL timeout for ndef detection */
       p_cb->flags &= ~RW_T3T_FL_W4_NDEF_DETECT_POLL_RSP;
-      rw_t3t_handle_ndef_detect_poll_rsp(p_cb, NFC_STATUS_TIMEOUT, 0, 0, NULL);
+      rw_t3t_handle_ndef_detect_poll_rsp(p_cb, NFC_STATUS_TIMEOUT, 0);
     } else {
       /* Timeout waiting for response for RW_T3tPoll */
       evt_data.t3t_poll.status = NFC_STATUS_FAILED;
       p_cb->rw_state = RW_T3T_STATE_IDLE;
-      (*(rw_cb.p_cback))(RW_T3T_POLL_EVT, (tRW_DATA*)&evt_data);
+      (*(rw_cb.p_cback))(RW_T3T_POLL_EVT, &evt_data);
     }
   }
 }
@@ -538,14 +529,10 @@
 **
 *******************************************************************************/
 void rw_t3t_process_frame_error(void) {
-#if (BT_TRACE_VERBOSE == TRUE)
-  RW_TRACE_ERROR3("T3T frame error. state=%s cur_cmd=0x%02X (%s)",
-                  rw_t3t_state_str(rw_cb.tcb.t3t.rw_state),
-                  rw_cb.tcb.t3t.cur_cmd, rw_t3t_cmd_str(rw_cb.tcb.t3t.cur_cmd));
-#else
-  RW_TRACE_ERROR2("T3T frame error. state=0x%02X cur_cmd=0x%02X",
-                  rw_cb.tcb.t3t.rw_state, rw_cb.tcb.t3t.cur_cmd);
-#endif
+  LOG(ERROR) << StringPrintf("T3T frame error. state=%s cur_cmd=0x%02X (%s)",
+                             rw_t3t_state_str(rw_cb.tcb.t3t.rw_state).c_str(),
+                             rw_cb.tcb.t3t.cur_cmd,
+                             rw_t3t_cmd_str(rw_cb.tcb.t3t.cur_cmd).c_str());
 
 #if (RW_STATS_INCLUDED == TRUE)
   /* Update stats */
@@ -580,10 +567,6 @@
   UINT8_TO_STREAM(p, (p_msg->len + 1));
   p_msg->len += 1; /* Increment len to include SoD */
 
-#if (BT_TRACE_PROTOCOL == TRUE)
-  DispT3TagMessage(p_msg, false);
-#endif
-
   return (NFC_SendData(NFC_RF_CONN_ID, p_msg));
 }
 
@@ -642,8 +625,9 @@
     p_cb->rw_state = RW_T3T_STATE_IDLE;
   }
 
-  RW_TRACE_DEBUG3("rw_t3t_send_cmd: cur_tout: %d, timeout_ticks: %d ret:%d",
-                  p_cb->cur_tout, timeout_ticks, retval);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("cur_tout: %d, timeout_ticks: %d ret:%d", p_cb->cur_tout,
+                      timeout_ticks, retval);
   return (retval);
 }
 
@@ -927,9 +911,8 @@
       p_cb->ndef_rx_readlen = ((uint32_t)p_cb->ndef_attrib.nbr * 16);
     }
 
-    RW_TRACE_DEBUG3(
-        "rw_t3t_send_next_ndef_check_cmd: bytes_remaining: %i, "
-        "cur_blocks_to_read: %i, is_final: %i",
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "bytes_remaining: %i, cur_blocks_to_read: %i, is_final: %i",
         ndef_bytes_remaining, cur_blocks_to_read,
         (p_cb->flags & RW_T3T_FL_IS_FINAL_NDEF_SEGMENT));
 
@@ -1186,7 +1169,7 @@
     return rw_t3t_send_cmd(p_cb, p_cb->cur_cmd, p_cmd_buf,
                            rw_t3t_check_timeout(1));
   } else {
-    RW_TRACE_ERROR0("Unable to allocate buffer to read MC block");
+    LOG(ERROR) << StringPrintf("Unable to allocate buffer to read MC block");
     return (NFC_STATUS_NO_BUFFERS);
   }
 }
@@ -1253,9 +1236,9 @@
 
   /* Check if response code is CHECK resp (for reading NDEF attribute block) */
   if (p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE] != T3T_MSG_OPC_CHECK_RSP) {
-    RW_TRACE_ERROR2("Response error: expecting rsp_code %02X, but got %02X",
-                    T3T_MSG_OPC_CHECK_RSP,
-                    p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE]);
+    LOG(ERROR) << StringPrintf(
+        "Response error: expecting rsp_code %02X, but got %02X",
+        T3T_MSG_OPC_CHECK_RSP, p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE]);
     evt_data.status = NFC_STATUS_FAILED;
   }
   /* Validate status code and NFCID2 response from tag */
@@ -1287,7 +1270,7 @@
           NFC_STATUS_FAILED; /* only ok or failed passed to the app. can be
                                 boolean*/
 
-      RW_TRACE_ERROR0("RW_T3tDetectNDEF checksum failed");
+      LOG(ERROR) << StringPrintf("RW_T3tDetectNDEF checksum failed");
     } else {
       p_cb->ndef_attrib.status = NFC_STATUS_OK;
 
@@ -1298,7 +1281,7 @@
           T3T_GET_MAJOR_VERSION(p_cb->ndef_attrib.version)) {
         /* Remote tag's MajorVer is newer than our's. Reject NDEF as per T3TOP
          * RQ_T3T_NDA_024 */
-        RW_TRACE_ERROR2(
+        LOG(ERROR) << StringPrintf(
             "RW_T3tDetectNDEF: incompatible NDEF version. Local=0x%02x, "
             "Remote=0x%02x",
             T3T_MSG_NDEF_VERSION, p_cb->ndef_attrib.version);
@@ -1332,8 +1315,9 @@
         BE_STREAM_TO_UINT16(p_cb->ndef_attrib.ln, p); /* Ln: lo-word */
         p_cb->ndef_attrib.ln += (temp << 16);
 
-        RW_TRACE_DEBUG1("Detected NDEF Ver: 0x%02x", p_cb->ndef_attrib.version);
-        RW_TRACE_DEBUG6(
+        DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+            "Detected NDEF Ver: 0x%02x", p_cb->ndef_attrib.version);
+        DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
             "Detected NDEF Attributes: Nbr=%i, Nbw=%i, Nmaxb=%i, WriteF=%i, "
             "RWFlag=%i, Ln=%i",
             p_cb->ndef_attrib.nbr, p_cb->ndef_attrib.nbw,
@@ -1352,12 +1336,15 @@
     }
   }
 
-  RW_TRACE_DEBUG1("RW_T3tDetectNDEF response: %i", evt_data.status);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("RW_T3tDetectNDEF response: %i", evt_data.status);
 
   p_cb->rw_state = RW_T3T_STATE_IDLE;
   rw_t3t_update_ndef_flag(&evt_data.flags);
   /* Notify app of NDEF detection result */
-  (*(rw_cb.p_cback))(RW_T3T_NDEF_DETECT_EVT, (tRW_DATA*)&evt_data);
+  tRW_DATA rw_data;
+  rw_data.ndef = evt_data;
+  (*(rw_cb.p_cback))(RW_T3T_NDEF_DETECT_EVT, &rw_data);
 
   GKI_freebuf(p_msg_rsp);
 }
@@ -1385,9 +1372,9 @@
     nfc_status = NFC_STATUS_FAILED;
     GKI_freebuf(p_msg_rsp);
   } else if (p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE] != T3T_MSG_OPC_CHECK_RSP) {
-    RW_TRACE_ERROR2("Response error: expecting rsp_code %02X, but got %02X",
-                    T3T_MSG_OPC_CHECK_RSP,
-                    p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE]);
+    LOG(ERROR) << StringPrintf(
+        "Response error: expecting rsp_code %02X, but got %02X",
+        T3T_MSG_OPC_CHECK_RSP, p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE]);
     nfc_status = NFC_STATUS_FAILED;
     GKI_freebuf(p_msg_rsp);
   } else if (p_msg_rsp->len >= T3T_MSG_RSP_OFFSET_CHECK_DATA) {
@@ -1397,7 +1384,9 @@
     p_msg_rsp->len -= T3T_MSG_RSP_OFFSET_CHECK_DATA;
     evt_data.status = NFC_STATUS_OK;
     evt_data.p_data = p_msg_rsp;
-    (*(rw_cb.p_cback))(RW_T3T_CHECK_EVT, (tRW_DATA*)&evt_data);
+    tRW_DATA rw_data;
+    rw_data.data = evt_data;
+    (*(rw_cb.p_cback))(RW_T3T_CHECK_EVT, &rw_data);
   } else {
     android_errorWriteLog(0x534e4554, "120503926");
     nfc_status = NFC_STATUS_FAILED;
@@ -1406,7 +1395,9 @@
 
   p_cb->rw_state = RW_T3T_STATE_IDLE;
 
-  (*(rw_cb.p_cback))(RW_T3T_CHECK_CPLT_EVT, (tRW_DATA*)&nfc_status);
+  tRW_DATA rw_data;
+  rw_data.status = nfc_status;
+  (*(rw_cb.p_cback))(RW_T3T_CHECK_CPLT_EVT, &rw_data);
 }
 
 /*****************************************************************************
@@ -1430,9 +1421,9 @@
   {
     evt_data.status = NFC_STATUS_FAILED;
   } else if (p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE] != T3T_MSG_OPC_UPDATE_RSP) {
-    RW_TRACE_ERROR2("Response error: expecting rsp_code %02X, but got %02X",
-                    T3T_MSG_OPC_UPDATE_RSP,
-                    p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE]);
+    LOG(ERROR) << StringPrintf(
+        "Response error: expecting rsp_code %02X, but got %02X",
+        T3T_MSG_OPC_UPDATE_RSP, p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE]);
     evt_data.status = NFC_STATUS_FAILED;
   } else {
     /* Copy incoming data into buffer */
@@ -1441,7 +1432,9 @@
 
   p_cb->rw_state = RW_T3T_STATE_IDLE;
 
-  (*(rw_cb.p_cback))(RW_T3T_UPDATE_CPLT_EVT, (tRW_DATA*)&evt_data);
+  tRW_DATA rw_data;
+  rw_data.data = evt_data;
+  (*(rw_cb.p_cback))(RW_T3T_UPDATE_CPLT_EVT, &rw_data);
 
   GKI_freebuf(p_msg_rsp);
 }
@@ -1460,13 +1453,9 @@
   tRW_READ_DATA evt_data;
   NFC_HDR* p_pkt = p_data->p_data;
 
-#if (BT_TRACE_VERBOSE == TRUE)
-  RW_TRACE_DEBUG2("RW T3T Raw Frame: Len [0x%X] Status [%s]", p_pkt->len,
-                  NFC_GetStatusName(p_data->status));
-#else
-  RW_TRACE_DEBUG2("RW T3T Raw Frame: Len [0x%X] Status [0x%X]", p_pkt->len,
-                  p_data->status);
-#endif
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("RW T3T Raw Frame: Len [0x%X] Status [%s]", p_pkt->len,
+                      NFC_GetStatusName(p_data->status).c_str());
 
   /* Copy incoming data into buffer */
   evt_data.status = p_data->status;
@@ -1474,7 +1463,9 @@
 
   p_cb->rw_state = RW_T3T_STATE_IDLE;
 
-  (*(rw_cb.p_cback))(RW_T3T_RAW_FRAME_EVT, (tRW_DATA*)&evt_data);
+  tRW_DATA rw_data;
+  rw_data.data = evt_data;
+  (*(rw_cb.p_cback))(RW_T3T_RAW_FRAME_EVT, &rw_data);
 }
 
 /*****************************************************************************
@@ -1489,8 +1480,6 @@
 void rw_t3t_act_handle_check_ndef_rsp(tRW_T3T_CB* p_cb, NFC_HDR* p_msg_rsp) {
   bool check_complete = true;
   tNFC_STATUS nfc_status = NFC_STATUS_OK;
-  tRW_READ_DATA read_data;
-  tRW_DATA evt_data;
   uint8_t* p_t3t_rsp = (uint8_t*)(p_msg_rsp + 1) + p_msg_rsp->offset;
   uint8_t rsp_num_bytes_rx;
 
@@ -1502,15 +1491,16 @@
       || (p_t3t_rsp[T3T_MSG_RSP_OFFSET_NUMBLOCKS] !=
           ((p_cb->ndef_rx_readlen + 15) >> 4))) /* verify length of response */
   {
-    RW_TRACE_ERROR2("Response error: bad status, nfcid2, or invalid len: %i %i",
-                    p_t3t_rsp[T3T_MSG_RSP_OFFSET_NUMBLOCKS],
-                    ((p_cb->ndef_rx_readlen + 15) >> 4));
+    LOG(ERROR) << StringPrintf(
+        "Response error: bad status, nfcid2, or invalid len: %i %i",
+        p_t3t_rsp[T3T_MSG_RSP_OFFSET_NUMBLOCKS],
+        ((p_cb->ndef_rx_readlen + 15) >> 4));
     nfc_status = NFC_STATUS_FAILED;
     GKI_freebuf(p_msg_rsp);
   } else if (p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE] != T3T_MSG_OPC_CHECK_RSP) {
-    RW_TRACE_ERROR2("Response error: expecting rsp_code %02X, but got %02X",
-                    T3T_MSG_OPC_CHECK_RSP,
-                    p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE]);
+    LOG(ERROR) << StringPrintf(
+        "Response error: expecting rsp_code %02X, but got %02X",
+        T3T_MSG_OPC_CHECK_RSP, p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE]);
     nfc_status = NFC_STATUS_FAILED;
     GKI_freebuf(p_msg_rsp);
   } else if (p_msg_rsp->len >= T3T_MSG_RSP_OFFSET_CHECK_DATA &&
@@ -1519,7 +1509,6 @@
     /* Number of bytes received, according to header */
     rsp_num_bytes_rx = p_t3t_rsp[T3T_MSG_RSP_OFFSET_NUMBLOCKS] * 16;
     p_cb->ndef_rx_offset += p_cb->ndef_rx_readlen;
-    read_data.status = NFC_STATUS_OK;
     p_msg_rsp->offset +=
         T3T_MSG_RSP_OFFSET_CHECK_DATA; /* Skip over t3t header (point to block
                                           data) */
@@ -1528,7 +1517,7 @@
     /* Verify that the bytes received is really the amount indicated in the
      * check-response header */
     if (rsp_num_bytes_rx > p_msg_rsp->len) {
-      RW_TRACE_ERROR2(
+      LOG(ERROR) << StringPrintf(
           "Response error: CHECK rsp header indicates %i bytes, but only "
           "received %i bytes",
           rsp_num_bytes_rx, p_msg_rsp->len);
@@ -1543,8 +1532,10 @@
       }
 
       p_msg_rsp->len = rsp_num_bytes_rx;
-      read_data.p_data = p_msg_rsp;
-      (*(rw_cb.p_cback))(RW_T3T_CHECK_EVT, (tRW_DATA*)&read_data);
+      tRW_DATA rw_data;
+      rw_data.data.status = NFC_STATUS_OK;
+      rw_data.data.p_data = p_msg_rsp;
+      (*(rw_cb.p_cback))(RW_T3T_CHECK_EVT, &rw_data);
 
       /* Send CHECK cmd for next NDEF segment, if needed */
       if (!(p_cb->flags & RW_T3T_FL_IS_FINAL_NDEF_SEGMENT)) {
@@ -1560,15 +1551,16 @@
     android_errorWriteLog(0x534e4554, "120502559");
     GKI_freebuf(p_msg_rsp);
     nfc_status = NFC_STATUS_FAILED;
-    RW_TRACE_ERROR0("Underflow in p_msg_rsp->len!");
+    LOG(ERROR) << StringPrintf("Underflow in p_msg_rsp->len!");
   }
 
   /* Notify app of RW_T3T_CHECK_CPLT_EVT if entire NDEF has been read, or if
    * failure */
   if (check_complete) {
     p_cb->rw_state = RW_T3T_STATE_IDLE;
+    tRW_DATA evt_data;
     evt_data.status = nfc_status;
-    (*(rw_cb.p_cback))(RW_T3T_CHECK_CPLT_EVT, (tRW_DATA*)&evt_data);
+    (*(rw_cb.p_cback))(RW_T3T_CHECK_CPLT_EVT, &evt_data);
   }
 }
 
@@ -1584,7 +1576,6 @@
 void rw_t3t_act_handle_update_ndef_rsp(tRW_T3T_CB* p_cb, NFC_HDR* p_msg_rsp) {
   bool update_complete = true;
   tNFC_STATUS nfc_status = NFC_STATUS_OK;
-  tRW_DATA evt_data;
   uint8_t* p_t3t_rsp = (uint8_t*)(p_msg_rsp + 1) + p_msg_rsp->offset;
 
   /* Check nfcid2 and status of response */
@@ -1597,9 +1588,9 @@
   }
   /* Validate response opcode */
   else if (p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE] != T3T_MSG_OPC_UPDATE_RSP) {
-    RW_TRACE_ERROR2("Response error: expecting rsp_code %02X, but got %02X",
-                    T3T_MSG_OPC_UPDATE_RSP,
-                    p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE]);
+    LOG(ERROR) << StringPrintf(
+        "Response error: expecting rsp_code %02X, but got %02X",
+        T3T_MSG_OPC_UPDATE_RSP, p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE]);
     nfc_status = NFC_STATUS_FAILED;
   }
   /* If this is response to final UPDATE, then update NDEF local size */
@@ -1630,8 +1621,9 @@
   /* If update is completed, then notify app */
   if (update_complete) {
     p_cb->rw_state = RW_T3T_STATE_IDLE;
+    tRW_DATA evt_data;
     evt_data.status = nfc_status;
-    (*(rw_cb.p_cback))(RW_T3T_UPDATE_CPLT_EVT, (tRW_DATA*)&evt_data);
+    (*(rw_cb.p_cback))(RW_T3T_UPDATE_CPLT_EVT, &evt_data);
   }
 
   GKI_freebuf(p_msg_rsp);
@@ -1662,11 +1654,12 @@
     p = &p_sensf_res_buf[RW_T3T_SENSF_RES_RD_OFFSET];
     BE_STREAM_TO_UINT16(sc, p);
 
-    RW_TRACE_DEBUG1("FeliCa detected (RD, system code %04X)", sc);
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("FeliCa detected (RD, system code %04X)", sc);
     if (p_cb->num_system_codes < T3T_MAX_SYSTEM_CODES) {
       p_cb->system_codes[p_cb->num_system_codes++] = sc;
     } else {
-      RW_TRACE_ERROR0("Exceed T3T_MAX_SYSTEM_CODES!");
+      LOG(ERROR) << StringPrintf("Exceed T3T_MAX_SYSTEM_CODES!");
       android_errorWriteLog(0x534e4554, "120499324");
     }
   }
@@ -1685,9 +1678,7 @@
 *****************************************************************************/
 static void rw_t3t_handle_ndef_detect_poll_rsp(tRW_T3T_CB* p_cb,
                                                uint8_t nci_status,
-                                               uint8_t num_responses,
-                                               uint8_t sensf_res_buf_size,
-                                               uint8_t* p_sensf_res_buf) {
+                                               uint8_t num_responses) {
   NFC_HDR* p_cmd_buf;
   uint8_t *p, *p_cmd_start;
   tRW_DATA evt_data;
@@ -1809,9 +1800,7 @@
 **
 *****************************************************************************/
 static void rw_t3t_handle_fmt_poll_rsp(tRW_T3T_CB* p_cb, uint8_t nci_status,
-                                       uint8_t num_responses,
-                                       uint8_t sensf_res_buf_size,
-                                       uint8_t* p_sensf_res_buf) {
+                                       uint8_t num_responses) {
   tRW_DATA evt_data;
 
   evt_data.status = NFC_STATUS_OK;
@@ -1820,14 +1809,15 @@
   if ((nci_status == NCI_STATUS_OK) && (num_responses > 0)) {
     /* Tag responded for Felica-Lite poll */
     /* Get MemoryControl block */
-    RW_TRACE_DEBUG0("Felica-Lite tag detected...getting Memory Control block.");
+    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+        "Felica-Lite tag detected...getting Memory Control block.");
 
     p_cb->rw_substate = RW_T3T_FMT_SST_CHECK_MC_BLK;
 
     /* Send command to check Memory Configuration block */
     evt_data.status = rw_t3t_check_mc_block(p_cb);
   } else {
-    RW_TRACE_ERROR0("Felica-Lite tag not detected");
+    LOG(ERROR) << StringPrintf("Felica-Lite tag not detected");
     evt_data.status = NFC_STATUS_FAILED;
   }
 
@@ -1857,9 +1847,9 @@
   if (p_cb->rw_substate == RW_T3T_FMT_SST_CHECK_MC_BLK) {
     /* Validate response opcode */
     if (p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE] != T3T_MSG_OPC_CHECK_RSP) {
-      RW_TRACE_ERROR2("Response error: expecting rsp_code %02X, but got %02X",
-                      T3T_MSG_OPC_CHECK_RSP,
-                      p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE]);
+      LOG(ERROR) << StringPrintf(
+          "Response error: expecting rsp_code %02X, but got %02X",
+          T3T_MSG_OPC_CHECK_RSP, p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE]);
       evt_data.status = NFC_STATUS_FAILED;
     }
     /* Validate status code and NFCID2 response from tag */
@@ -1912,9 +1902,9 @@
         (p_t3t_rsp[T3T_MSG_RSP_OFFSET_STATUS1] != T3T_MSG_RSP_STATUS_OK))
 
     {
-      RW_TRACE_ERROR2("Response error: rsp_code=%02X, status=%02X",
-                      p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE],
-                      p_t3t_rsp[T3T_MSG_RSP_OFFSET_STATUS1]);
+      LOG(ERROR) << StringPrintf("Response error: rsp_code=%02X, status=%02X",
+                                 p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE],
+                                 p_t3t_rsp[T3T_MSG_RSP_OFFSET_STATUS1]);
       evt_data.status = NFC_STATUS_FAILED;
     } else {
       /* SYS_OP=1: ndef already enabled. Just need to update attribute
@@ -1934,9 +1924,9 @@
         (p_t3t_rsp[T3T_MSG_RSP_OFFSET_STATUS1] != T3T_MSG_RSP_STATUS_OK))
 
     {
-      RW_TRACE_ERROR2("Response error: rsp_code=%02X, status=%02X",
-                      p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE],
-                      p_t3t_rsp[T3T_MSG_RSP_OFFSET_STATUS1]);
+      LOG(ERROR) << StringPrintf("Response error: rsp_code=%02X, status=%02X",
+                                 p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE],
+                                 p_t3t_rsp[T3T_MSG_RSP_OFFSET_STATUS1]);
       evt_data.status = NFC_STATUS_FAILED;
     }
 
@@ -1956,9 +1946,7 @@
 **
 *****************************************************************************/
 static void rw_t3t_handle_sro_poll_rsp(tRW_T3T_CB* p_cb, uint8_t nci_status,
-                                       uint8_t num_responses,
-                                       uint8_t sensf_res_buf_size,
-                                       uint8_t* p_sensf_res_buf) {
+                                       uint8_t num_responses) {
   tRW_DATA evt_data;
   uint8_t rw_t3t_ndef_attrib_info[T3T_MSG_BLOCKSIZE];
   uint8_t* p;
@@ -1973,7 +1961,7 @@
     /* Tag responded for Felica-Lite poll */
     if (p_cb->ndef_attrib.rwflag != T3T_MSG_NDEF_RWFLAG_RO) {
       /* First update attribute information block */
-      RW_TRACE_DEBUG0(
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
           "Felica-Lite tag detected...update NDef attribution block.");
 
       p_cb->rw_substate = RW_T3T_SRO_SST_UPDATE_NDEF_ATTRIB;
@@ -2015,7 +2003,7 @@
           rw_t3t_update_block(p_cb, 0, (uint8_t*)rw_t3t_ndef_attrib_info);
     } else if (p_cb->cur_cmd == RW_T3T_CMD_SET_READ_ONLY_HARD) {
       /* NDEF is already read only, Read and update MemoryControl block */
-      RW_TRACE_DEBUG0(
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
           "Felica-Lite tag detected...getting Memory Control block.");
       p_cb->rw_substate = RW_T3T_SRO_SST_CHECK_MC_BLK;
 
@@ -2023,7 +2011,7 @@
       evt_data.status = rw_t3t_check_mc_block(p_cb);
     }
   } else {
-    RW_TRACE_ERROR0("Felica-Lite tag not detected");
+    LOG(ERROR) << StringPrintf("Felica-Lite tag not detected");
     evt_data.status = NFC_STATUS_FAILED;
   }
 
@@ -2055,9 +2043,9 @@
         (p_t3t_rsp[T3T_MSG_RSP_OFFSET_STATUS1] != T3T_MSG_RSP_STATUS_OK))
 
     {
-      RW_TRACE_ERROR2("Response error: rsp_code=%02X, status=%02X",
-                      p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE],
-                      p_t3t_rsp[T3T_MSG_RSP_OFFSET_STATUS1]);
+      LOG(ERROR) << StringPrintf("Response error: rsp_code=%02X, status=%02X",
+                                 p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE],
+                                 p_t3t_rsp[T3T_MSG_RSP_OFFSET_STATUS1]);
       evt_data.status = NFC_STATUS_FAILED;
     } else {
       p_cb->ndef_attrib.rwflag = T3T_MSG_NDEF_RWFLAG_RO;
@@ -2074,9 +2062,9 @@
     /* Check tags's response for reading MemoryControl block, Validate response
      * opcode */
     if (p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE] != T3T_MSG_OPC_CHECK_RSP) {
-      RW_TRACE_ERROR2("Response error: expecting rsp_code %02X, but got %02X",
-                      T3T_MSG_OPC_CHECK_RSP,
-                      p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE]);
+      LOG(ERROR) << StringPrintf(
+          "Response error: expecting rsp_code %02X, but got %02X",
+          T3T_MSG_OPC_CHECK_RSP, p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE]);
       evt_data.status = NFC_STATUS_FAILED;
     }
     /* Validate status code and NFCID2 response from tag */
@@ -2120,9 +2108,9 @@
         (p_t3t_rsp[T3T_MSG_RSP_OFFSET_STATUS1] != T3T_MSG_RSP_STATUS_OK))
 
     {
-      RW_TRACE_ERROR2("Response error: rsp_code=%02X, status=%02X",
-                      p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE],
-                      p_t3t_rsp[T3T_MSG_RSP_OFFSET_STATUS1]);
+      LOG(ERROR) << StringPrintf("Response error: rsp_code=%02X, status=%02X",
+                                 p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE],
+                                 p_t3t_rsp[T3T_MSG_RSP_OFFSET_STATUS1]);
       evt_data.status = NFC_STATUS_FAILED;
     } else {
       rw_t3t_set_readonly_cplt(evt_data.status);
@@ -2146,7 +2134,8 @@
 ** Returns          none
 **
 *******************************************************************************/
-void rw_t3t_data_cback(uint8_t conn_id, tNFC_DATA_CEVT* p_data) {
+void rw_t3t_data_cback(__attribute__((unused)) uint8_t conn_id,
+                       tNFC_DATA_CEVT* p_data) {
   tRW_T3T_CB* p_cb = &rw_cb.tcb.t3t;
   NFC_HDR* p_msg = p_data->p_data;
   bool free_msg = false; /* if TRUE, free msg buffer before returning */
@@ -2170,8 +2159,8 @@
   }
   /* Sanity check: verify msg len is big enough to contain t3t header */
   else if (p_msg->len < T3T_MSG_RSP_COMMON_HDR_LEN) {
-    RW_TRACE_ERROR1("T3T: invalid Type3 Tag Message (invalid len: %i)",
-                    p_msg->len);
+    LOG(ERROR) << StringPrintf(
+        "T3T: invalid Type3 Tag Message (invalid len: %i)", p_msg->len);
     free_msg = true;
 
     rw_t3t_process_frame_error();
@@ -2180,17 +2169,13 @@
     p = (uint8_t*)(p_msg + 1) + p_msg->offset;
     sod = p[0];
     if (p[sod] != NCI_STATUS_OK) {
-      RW_TRACE_ERROR1("T3T: rf frame error (crc status=%i)", p[sod]);
+      LOG(ERROR) << StringPrintf("T3T: rf frame error (crc status=%i)", p[sod]);
       GKI_freebuf(p_msg);
 
       rw_t3t_process_frame_error();
       return;
     }
 
-#if (BT_TRACE_PROTOCOL == TRUE)
-    DispT3TagMessage(p_msg, true);
-#endif
-
     /* Skip over SoD */
     p_msg->offset++;
     p_msg->len--;
@@ -2253,7 +2238,8 @@
 void rw_t3t_conn_cback(uint8_t conn_id, tNFC_CONN_EVT event,
                        tNFC_CONN* p_data) {
   tRW_T3T_CB* p_cb = &rw_cb.tcb.t3t;
-  RW_TRACE_DEBUG2("rw_t3t_conn_cback: conn_id=%i, evt=0x%02x", conn_id, event);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "rw_t3t_conn_cback: conn_id=%i, evt=0x%02x", conn_id, event);
 
   /* Only handle NFC_RF_CONN_ID conn_id */
   if (conn_id != NFC_RF_CONN_ID) {
@@ -2262,7 +2248,7 @@
 
   switch (event) {
     case NFC_DEACTIVATE_CEVT:
-      rw_t3t_unselect(NULL);
+      rw_t3t_unselect();
       break;
 
     case NFC_DATA_CEVT: /* check for status in tNFC_CONN */
@@ -2331,7 +2317,7 @@
                           uint8_t mrti_check, uint8_t mrti_update) {
   tRW_T3T_CB* p_cb = &rw_cb.tcb.t3t;
 
-  RW_TRACE_API0("rw_t3t_select");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   memcpy(p_cb->peer_nfcid2, peer_nfcid2,
          NCI_NFCID2_LEN); /* Store tag's NFCID2 */
@@ -2347,7 +2333,7 @@
   if (p_cb->p_cur_cmd_buf == NULL) {
     p_cb->p_cur_cmd_buf = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
     if (p_cb->p_cur_cmd_buf == NULL) {
-      RW_TRACE_ERROR0(
+      LOG(ERROR) << StringPrintf(
           "rw_t3t_select: unable to allocate buffer for retransmission");
       p_cb->rw_state = RW_T3T_STATE_NOT_ACTIVATED;
       return (NFC_STATUS_FAILED);
@@ -2368,7 +2354,7 @@
 ** Returns          NFC_STATUS_OK
 **
 *******************************************************************************/
-static tNFC_STATUS rw_t3t_unselect(uint8_t peer_nfcid2[]) {
+static tNFC_STATUS rw_t3t_unselect() {
   tRW_T3T_CB* p_cb = &rw_cb.tcb.t3t;
 
 #if (RW_STATS_INCLUDED == TRUE)
@@ -2413,7 +2399,6 @@
   }
 }
 
-#if (BT_TRACE_VERBOSE == TRUE)
 /*******************************************************************************
 **
 ** Function         rw_t3t_cmd_str
@@ -2423,29 +2408,22 @@
 ** Returns          command string
 **
 *******************************************************************************/
-static char* rw_t3t_cmd_str(uint8_t cmd_id) {
+static std::string rw_t3t_cmd_str(uint8_t cmd_id) {
   switch (cmd_id) {
     case RW_T3T_CMD_DETECT_NDEF:
       return "RW_T3T_CMD_DETECT_NDEF";
-
     case RW_T3T_CMD_CHECK_NDEF:
       return "RW_T3T_CMD_CHECK_NDEF";
-
     case RW_T3T_CMD_UPDATE_NDEF:
       return "RW_T3T_CMD_UPDATE_NDEF";
-
     case RW_T3T_CMD_CHECK:
       return "RW_T3T_CMD_CHECK";
-
     case RW_T3T_CMD_UPDATE:
       return "RW_T3T_CMD_UPDATE";
-
     case RW_T3T_CMD_SEND_RAW_FRAME:
       return "RW_T3T_CMD_SEND_RAW_FRAME";
-
     case RW_T3T_CMD_GET_SYSTEM_CODES:
       return "RW_T3T_CMD_GET_SYSTEM_CODES";
-
     default:
       return "Unknown";
   }
@@ -2460,22 +2438,18 @@
 ** Returns          command string
 **
 *******************************************************************************/
-static char* rw_t3t_state_str(uint8_t state_id) {
+static std::string rw_t3t_state_str(uint8_t state_id) {
   switch (state_id) {
     case RW_T3T_STATE_NOT_ACTIVATED:
       return "RW_T3T_STATE_NOT_ACTIVATED";
-
     case RW_T3T_STATE_IDLE:
       return "RW_T3T_STATE_IDLE";
-
     case RW_T3T_STATE_COMMAND_PENDING:
       return "RW_T3T_STATE_COMMAND_PENDING";
-
     default:
       return "Unknown";
   }
 }
-#endif
 
 /*****************************************************************************
 **  Type3 Tag API Functions
@@ -2503,12 +2477,12 @@
   tRW_T3T_CB* p_cb = &rw_cb.tcb.t3t;
   tNFC_STATUS retval = NFC_STATUS_OK;
 
-  RW_TRACE_API0("RW_T3tDetectNDef");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* Check if we are in valid state to handle this API */
   if (p_cb->rw_state != RW_T3T_STATE_IDLE) {
-    RW_TRACE_ERROR1("Error: invalid state to handle API (0x%x)",
-                    p_cb->rw_state);
+    LOG(ERROR) << StringPrintf("Error: invalid state to handle API (0x%x)",
+                               p_cb->rw_state);
     return (NFC_STATUS_FAILED);
   }
 
@@ -2556,20 +2530,20 @@
   tNFC_STATUS retval = NFC_STATUS_OK;
   tRW_T3T_CB* p_cb = &rw_cb.tcb.t3t;
 
-  RW_TRACE_API0("RW_T3tCheckNDef");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* Check if we are in valid state to handle this API */
   if (p_cb->rw_state != RW_T3T_STATE_IDLE) {
-    RW_TRACE_ERROR1("Error: invalid state to handle API (0x%x)",
-                    p_cb->rw_state);
+    LOG(ERROR) << StringPrintf("Error: invalid state to handle API (0x%x)",
+                               p_cb->rw_state);
     return (NFC_STATUS_FAILED);
   } else if (p_cb->ndef_attrib.status !=
              NFC_STATUS_OK) /* NDEF detection not performed yet? */
   {
-    RW_TRACE_ERROR0("Error: NDEF detection not performed yet");
+    LOG(ERROR) << StringPrintf("Error: NDEF detection not performed yet");
     return (NFC_STATUS_NOT_INITIALIZED);
   } else if (p_cb->ndef_attrib.ln == 0) {
-    RW_TRACE_ERROR0("Type 3 tag contains empty NDEF message");
+    LOG(ERROR) << StringPrintf("Type 3 tag contains empty NDEF message");
     return (NFC_STATUS_FAILED);
   }
 
@@ -2611,17 +2585,18 @@
   tNFC_STATUS retval = NFC_STATUS_OK;
   tRW_T3T_CB* p_cb = &rw_cb.tcb.t3t;
 
-  RW_TRACE_API1("RW_T3tUpdateNDef (len=%i)", len);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("RW_T3tUpdateNDef (len=%i)", len);
 
   /* Check if we are in valid state to handle this API */
   if (p_cb->rw_state != RW_T3T_STATE_IDLE) {
-    RW_TRACE_ERROR1("Error: invalid state to handle API (0x%x)",
-                    p_cb->rw_state);
+    LOG(ERROR) << StringPrintf("Error: invalid state to handle API (0x%x)",
+                               p_cb->rw_state);
     return (NFC_STATUS_FAILED);
   } else if (p_cb->ndef_attrib.status !=
              NFC_STATUS_OK) /* NDEF detection not performed yet? */
   {
-    RW_TRACE_ERROR0("Error: NDEF detection not performed yet");
+    LOG(ERROR) << StringPrintf("Error: NDEF detection not performed yet");
     return (NFC_STATUS_NOT_INITIALIZED);
   } else if (len > (((uint32_t)p_cb->ndef_attrib.nmaxb) *
                     16)) /* Len exceed's tag's NDEF memory? */
@@ -2670,12 +2645,13 @@
   tNFC_STATUS retval = NFC_STATUS_OK;
   tRW_T3T_CB* p_cb = &rw_cb.tcb.t3t;
 
-  RW_TRACE_API1("RW_T3tCheck (num_blocks = %i)", num_blocks);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("RW_T3tCheck (num_blocks = %i)", num_blocks);
 
   /* Check if we are in valid state to handle this API */
   if (p_cb->rw_state != RW_T3T_STATE_IDLE) {
-    RW_TRACE_ERROR1("Error: invalid state to handle API (0x%x)",
-                    p_cb->rw_state);
+    LOG(ERROR) << StringPrintf("Error: invalid state to handle API (0x%x)",
+                               p_cb->rw_state);
     return (NFC_STATUS_FAILED);
   }
 
@@ -2710,12 +2686,13 @@
   tNFC_STATUS retval = NFC_STATUS_OK;
   tRW_T3T_CB* p_cb = &rw_cb.tcb.t3t;
 
-  RW_TRACE_API1("RW_T3tUpdate (num_blocks = %i)", num_blocks);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("RW_T3tUpdate (num_blocks = %i)", num_blocks);
 
   /* Check if we are in valid state to handle this API */
   if (p_cb->rw_state != RW_T3T_STATE_IDLE) {
-    RW_TRACE_ERROR1("Error: invalid state to handle API (0x%x)",
-                    p_cb->rw_state);
+    LOG(ERROR) << StringPrintf("Error: invalid state to handle API (0x%x)",
+                               p_cb->rw_state);
     return (NFC_STATUS_FAILED);
   }
 
@@ -2746,7 +2723,7 @@
   tRW_DATA evt_data;
   tRW_CB* p_rw_cb = &rw_cb;
 
-  RW_TRACE_API0("RW_T3tPresenceCheck");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* If RW_SelectTagType was not called (no conn_callback) return failure */
   if (!(p_rw_cb->p_cback)) {
@@ -2761,7 +2738,8 @@
   else if (p_rw_cb->tcb.t3t.rw_state == RW_T3T_STATE_COMMAND_PENDING) {
     /* If already performing presence check, return error */
     if (p_rw_cb->tcb.t3t.flags & RW_T3T_FL_W4_PRESENCE_CHECK_POLL_RSP) {
-      RW_TRACE_DEBUG0("RW_T3tPresenceCheck already in progress");
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("RW_T3tPresenceCheck already in progress");
       retval = NFC_STATUS_FAILED;
     }
     /* If busy with any other command, assume that the tag is present */
@@ -2780,7 +2758,7 @@
       /* start timer for waiting for responses */
       rw_t3t_start_poll_timer(&p_rw_cb->tcb.t3t);
     } else {
-      RW_TRACE_DEBUG1(
+      DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
           "RW_T3tPresenceCheck error sending NCI_RF_T3T_POLLING cmd (status = "
           "0x%0x)",
           retval);
@@ -2807,12 +2785,12 @@
   tNFC_STATUS retval = NFC_STATUS_OK;
   tRW_T3T_CB* p_cb = &rw_cb.tcb.t3t;
 
-  RW_TRACE_API0("RW_T3tPoll");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* Check if we are in valid state to handle this API */
   if (p_cb->rw_state != RW_T3T_STATE_IDLE) {
-    RW_TRACE_ERROR1("Error: invalid state to handle API (0x%x)",
-                    p_cb->rw_state);
+    LOG(ERROR) << StringPrintf("Error: invalid state to handle API (0x%x)",
+                               p_cb->rw_state);
     return (NFC_STATUS_FAILED);
   }
 
@@ -2851,12 +2829,13 @@
   tNFC_STATUS retval = NFC_STATUS_OK;
   tRW_T3T_CB* p_cb = &rw_cb.tcb.t3t;
 
-  RW_TRACE_API1("RW_T3tSendRawFrame (len = %i)", len);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("RW_T3tSendRawFrame (len = %i)", len);
 
   /* Check if we are in valid state to handle this API */
   if (p_cb->rw_state != RW_T3T_STATE_IDLE) {
-    RW_TRACE_ERROR1("Error: invalid state to handle API (0x%x)",
-                    p_cb->rw_state);
+    LOG(ERROR) << StringPrintf("Error: invalid state to handle API (0x%x)",
+                               p_cb->rw_state);
     return (NFC_STATUS_FAILED);
   }
 
@@ -2887,12 +2866,12 @@
   tNFC_STATUS retval = NFC_STATUS_OK;
   tRW_T3T_CB* p_cb = &rw_cb.tcb.t3t;
 
-  RW_TRACE_API0("RW_T3tGetSystemCodes");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* Check if we are in valid state to handle this API */
   if (p_cb->rw_state != RW_T3T_STATE_IDLE) {
-    RW_TRACE_ERROR1("Error: invalid state to handle API (0x%x)",
-                    p_cb->rw_state);
+    LOG(ERROR) << StringPrintf("Error: invalid state to handle API (0x%x)",
+                               p_cb->rw_state);
     return (NFC_STATUS_FAILED);
   } else {
     retval = (tNFC_STATUS)nci_snd_t3t_polling(0xFFFF, T3T_POLL_RC_SC, 0);
@@ -2932,12 +2911,12 @@
   tNFC_STATUS retval = NFC_STATUS_OK;
   tRW_T3T_CB* p_cb = &rw_cb.tcb.t3t;
 
-  RW_TRACE_API0("RW_T3tFormatNDef");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   /* Check if we are in valid state to handle this API */
   if (p_cb->rw_state != RW_T3T_STATE_IDLE) {
-    RW_TRACE_ERROR1("Error: invalid state to handle API (0x%x)",
-                    p_cb->rw_state);
+    LOG(ERROR) << StringPrintf("Error: invalid state to handle API (0x%x)",
+                               p_cb->rw_state);
     return (NFC_STATUS_FAILED);
   } else {
     /* Poll tag, to see if Felica-Lite system is supported */
@@ -2978,19 +2957,20 @@
   tRW_T3T_CB* p_cb = &rw_cb.tcb.t3t;
   tRW_DATA evt_data;
 
-  RW_TRACE_API1("RW_T3tSetReadOnly (): b_hard_lock=%d", b_hard_lock);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("b_hard_lock=%d", b_hard_lock);
 
   /* Check if we are in valid state to handle this API */
   if (p_cb->rw_state != RW_T3T_STATE_IDLE) {
-    RW_TRACE_ERROR1("Error: invalid state to handle API (0x%x)",
-                    p_cb->rw_state);
+    LOG(ERROR) << StringPrintf("Error: invalid state to handle API (0x%x)",
+                               p_cb->rw_state);
     return (NFC_STATUS_FAILED);
   }
 
   if (p_cb->ndef_attrib.status !=
       NFC_STATUS_OK) /* NDEF detection not performed yet? */
   {
-    RW_TRACE_ERROR0("Error: NDEF detection not performed yet");
+    LOG(ERROR) << StringPrintf("Error: NDEF detection not performed yet");
     return (NFC_STATUS_NOT_INITIALIZED);
   }
 
diff --git a/src/nfc/tags/rw_t4t.c b/src/nfc/tags/rw_t4t.cc
similarity index 84%
rename from src/nfc/tags/rw_t4t.c
rename to src/nfc/tags/rw_t4t.cc
index e7b3c96..fd0bbdf 100644
--- a/src/nfc/tags/rw_t4t.c
+++ b/src/nfc/tags/rw_t4t.cc
@@ -23,16 +23,22 @@
  *
  ******************************************************************************/
 #include <string.h>
-#include "bt_types.h"
-#include "nfc_target.h"
-#include "trace_api.h"
 
-#include "gki.h"
+#include <android-base/stringprintf.h>
+#include <base/logging.h>
+
+#include "nfc_target.h"
+
+#include "bt_types.h"
 #include "nfc_api.h"
 #include "nfc_int.h"
 #include "rw_api.h"
 #include "rw_int.h"
-#include "tags_int.h"
+#include "trace_api.h"
+
+using android::base::StringPrintf;
+
+extern bool nfc_debug_enabled;
 
 /* main state */
 /* T4T is not activated                 */
@@ -82,10 +88,8 @@
 #define RW_T4T_SUBSTATE_WAIT_WRITE_CC 0x0F
 #define RW_T4T_SUBSTATE_WAIT_WRITE_NDEF 0x10
 
-#if (BT_TRACE_VERBOSE == TRUE)
-static char* rw_t4t_get_state_name(uint8_t state);
-static char* rw_t4t_get_sub_state_name(uint8_t sub_state);
-#endif
+static std::string rw_t4t_get_state_name(uint8_t state);
+static std::string rw_t4t_get_sub_state_name(uint8_t sub_state);
 
 static bool rw_t4t_send_to_lower(NFC_HDR* p_c_apdu);
 static bool rw_t4t_select_file(uint16_t file_id);
@@ -124,12 +128,8 @@
 **
 *******************************************************************************/
 static bool rw_t4t_send_to_lower(NFC_HDR* p_c_apdu) {
-#if (BT_TRACE_PROTOCOL == TRUE)
-  DispRWT4Tags(p_c_apdu, false);
-#endif
-
   if (NFC_SendData(NFC_RF_CONN_ID, p_c_apdu) != NFC_STATUS_OK) {
-    RW_TRACE_ERROR0("rw_t4t_send_to_lower (): NFC_SendData () failed");
+    LOG(ERROR) << StringPrintf("failed");
     return false;
   }
 
@@ -155,7 +155,7 @@
   p_c_apdu = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_c_apdu) {
-    RW_TRACE_ERROR0("rw_t4t_get_hw_version (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return false;
   }
 
@@ -192,7 +192,7 @@
   p_c_apdu = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_c_apdu) {
-    RW_TRACE_ERROR0("rw_t4t_get_sw_version (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return false;
   }
 
@@ -272,7 +272,7 @@
   p_c_apdu = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_c_apdu) {
-    RW_TRACE_ERROR0("rw_t4t_get_uid_details (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return false;
   }
 
@@ -311,7 +311,7 @@
   p_c_apdu = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_c_apdu) {
-    RW_TRACE_ERROR0("rw_t4t_create_app (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return false;
   }
 
@@ -361,7 +361,7 @@
   p_c_apdu = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_c_apdu) {
-    RW_TRACE_ERROR0("rw_t4t_select_app (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return false;
   }
 
@@ -406,7 +406,7 @@
   p_c_apdu = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_c_apdu) {
-    RW_TRACE_ERROR0("rw_t4t_create_ccfile (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return false;
   }
 
@@ -456,7 +456,7 @@
   p_c_apdu = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_c_apdu) {
-    RW_TRACE_ERROR0("rw_t4t_create_ndef (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return false;
   }
 
@@ -509,7 +509,7 @@
   p_c_apdu = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_c_apdu) {
-    RW_TRACE_ERROR0("rw_t4t_write_cc (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return false;
   }
 
@@ -560,7 +560,7 @@
   p_c_apdu = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_c_apdu) {
-    RW_TRACE_ERROR0("rw_t4t_write_ndef (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return false;
   }
 
@@ -604,12 +604,12 @@
   NFC_HDR* p_c_apdu;
   uint8_t* p;
 
-  RW_TRACE_DEBUG1("rw_t4t_select_file (): File ID:0x%04X", file_id);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("File ID:0x%04X", file_id);
 
   p_c_apdu = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_c_apdu) {
-    RW_TRACE_ERROR0("rw_t4t_select_file (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return false;
   }
 
@@ -655,13 +655,13 @@
   NFC_HDR* p_c_apdu;
   uint8_t* p;
 
-  RW_TRACE_DEBUG3("rw_t4t_read_file () offset:%d, length:%d, is_continue:%d, ",
-                  offset, length, is_continue);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "offset:%d, length:%d, is_continue:%d, ", offset, length, is_continue);
 
   p_c_apdu = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_c_apdu) {
-    RW_TRACE_ERROR0("rw_t4t_read_file (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return false;
   }
 
@@ -709,12 +709,12 @@
   NFC_HDR* p_c_apdu;
   uint8_t* p;
 
-  RW_TRACE_DEBUG1("rw_t4t_update_nlen () NLEN:%d", ndef_len);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("NLEN:%d", ndef_len);
 
   p_c_apdu = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_c_apdu) {
-    RW_TRACE_ERROR0("rw_t4t_update_nlen (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return false;
   }
 
@@ -751,13 +751,13 @@
   uint8_t* p;
   uint16_t length;
 
-  RW_TRACE_DEBUG2("rw_t4t_update_file () rw_offset:%d, rw_length:%d",
-                  p_t4t->rw_offset, p_t4t->rw_length);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "rw_offset:%d, rw_length:%d", p_t4t->rw_offset, p_t4t->rw_length);
 
   p_c_apdu = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_c_apdu) {
-    RW_TRACE_ERROR0("rw_t4t_write_file (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return false;
   }
 
@@ -807,13 +807,13 @@
   NFC_HDR* p_c_apdu;
   uint8_t* p;
 
-  RW_TRACE_DEBUG0(
-      "rw_t4t_update_cc_to_readonly (): Remove Write access from CC");
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("Remove Write access from CC");
 
   p_c_apdu = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_c_apdu) {
-    RW_TRACE_ERROR0("rw_t4t_update_cc_to_readonly (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return false;
   }
 
@@ -861,12 +861,12 @@
   NFC_HDR* p_c_apdu;
   uint8_t* p;
 
-  RW_TRACE_DEBUG1("rw_t4t_select_application () version:0x%X", version);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("version:0x%X", version);
 
   p_c_apdu = (NFC_HDR*)GKI_getpoolbuf(NFC_RW_POOL_ID);
 
   if (!p_c_apdu) {
-    RW_TRACE_ERROR0("rw_t4t_select_application (): Cannot allocate buffer");
+    LOG(ERROR) << StringPrintf("Cannot allocate buffer");
     return false;
   }
 
@@ -918,32 +918,31 @@
 static bool rw_t4t_validate_cc_file(void) {
   tRW_T4T_CB* p_t4t = &rw_cb.tcb.t4t;
 
-  RW_TRACE_DEBUG0("rw_t4t_validate_cc_file ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (p_t4t->cc_file.cclen < T4T_CC_FILE_MIN_LEN) {
-    RW_TRACE_ERROR1("rw_t4t_validate_cc_file (): CCLEN (%d) is too short",
-                    p_t4t->cc_file.cclen);
+    LOG(ERROR) << StringPrintf("CCLEN (%d) is too short", p_t4t->cc_file.cclen);
     return false;
   }
 
   if (T4T_GET_MAJOR_VERSION(p_t4t->cc_file.version) !=
       T4T_GET_MAJOR_VERSION(p_t4t->version)) {
-    RW_TRACE_ERROR2(
-        "rw_t4t_validate_cc_file (): Peer version (0x%02X) is matched to ours "
+    LOG(ERROR) << StringPrintf(
+        "Peer version (0x%02X) is matched to ours "
         "(0x%02X)",
         p_t4t->cc_file.version, p_t4t->version);
     return false;
   }
 
   if (p_t4t->cc_file.max_le < 0x000F) {
-    RW_TRACE_ERROR1("rw_t4t_validate_cc_file (): MaxLe (%d) is too small",
-                    p_t4t->cc_file.max_le);
+    LOG(ERROR) << StringPrintf("MaxLe (%d) is too small",
+                               p_t4t->cc_file.max_le);
     return false;
   }
 
   if (p_t4t->cc_file.max_lc < 0x0001) {
-    RW_TRACE_ERROR1("rw_t4t_validate_cc_file (): MaxLc (%d) is too small",
-                    p_t4t->cc_file.max_lc);
+    LOG(ERROR) << StringPrintf("MaxLc (%d) is too small",
+                               p_t4t->cc_file.max_lc);
     return false;
   }
 
@@ -955,31 +954,28 @@
       (p_t4t->cc_file.ndef_fc.file_id == 0x3F00) ||
       (p_t4t->cc_file.ndef_fc.file_id == 0x3FFF) ||
       (p_t4t->cc_file.ndef_fc.file_id == 0xFFFF)) {
-    RW_TRACE_ERROR1("rw_t4t_validate_cc_file (): File ID (0x%04X) is invalid",
-                    p_t4t->cc_file.ndef_fc.file_id);
+    LOG(ERROR) << StringPrintf("File ID (0x%04X) is invalid",
+                               p_t4t->cc_file.ndef_fc.file_id);
     return false;
   }
 
   if ((p_t4t->cc_file.ndef_fc.max_file_size < 0x0005) ||
       (p_t4t->cc_file.ndef_fc.max_file_size == 0xFFFF)) {
-    RW_TRACE_ERROR1(
-        "rw_t4t_validate_cc_file (): max_file_size (%d) is reserved",
-        p_t4t->cc_file.ndef_fc.max_file_size);
+    LOG(ERROR) << StringPrintf("max_file_size (%d) is reserved",
+                               p_t4t->cc_file.ndef_fc.max_file_size);
     return false;
   }
 
   if (p_t4t->cc_file.ndef_fc.read_access != T4T_FC_READ_ACCESS) {
-    RW_TRACE_ERROR1(
-        "rw_t4t_validate_cc_file (): Read Access (0x%02X) is invalid",
-        p_t4t->cc_file.ndef_fc.read_access);
+    LOG(ERROR) << StringPrintf("Read Access (0x%02X) is invalid",
+                               p_t4t->cc_file.ndef_fc.read_access);
     return false;
   }
 
   if ((p_t4t->cc_file.ndef_fc.write_access != T4T_FC_WRITE_ACCESS) &&
       (p_t4t->cc_file.ndef_fc.write_access < T4T_FC_WRITE_ACCESS_PROP_START)) {
-    RW_TRACE_ERROR1(
-        "rw_t4t_validate_cc_file (): Write Access (0x%02X) is invalid",
-        p_t4t->cc_file.ndef_fc.write_access);
+    LOG(ERROR) << StringPrintf("Write Access (0x%02X) is invalid",
+                               p_t4t->cc_file.ndef_fc.write_access);
     return false;
   }
 
@@ -1000,8 +996,8 @@
   tRW_DATA rw_data;
   tRW_EVENT event;
 
-  RW_TRACE_DEBUG4(
-      "rw_t4t_handle_error (): status:0x%02X, sw1:0x%02X, sw2:0x%02X, "
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "status:0x%02X, sw1:0x%02X, sw2:0x%02X, "
       "state:0x%X",
       status, sw1, sw2, p_t4t->state);
 
@@ -1067,17 +1063,13 @@
 *******************************************************************************/
 static void rw_t4t_sm_ndef_format(NFC_HDR* p_r_apdu) {
   tRW_T4T_CB* p_t4t = &rw_cb.tcb.t4t;
-  uint8_t *p, type, length;
-  uint16_t status_words, nlen;
+  uint8_t* p;
+  uint16_t status_words;
   tRW_DATA rw_data;
 
-#if (BT_TRACE_VERBOSE == TRUE)
-  RW_TRACE_DEBUG2("rw_t4t_sm_ndef_format (): sub_state:%s (%d)",
-                  rw_t4t_get_sub_state_name(p_t4t->sub_state),
-                  p_t4t->sub_state);
-#else
-  RW_TRACE_DEBUG1("rw_t4t_sm_ndef_format (): sub_state=%d", p_t4t->sub_state);
-#endif
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "sub_state:%s (%d)", rw_t4t_get_sub_state_name(p_t4t->sub_state).c_str(),
+      p_t4t->sub_state);
 
   /* get status words */
   p = (uint8_t*)(p_r_apdu + 1) + p_r_apdu->offset;
@@ -1227,15 +1219,14 @@
 
           (*(rw_cb.p_cback))(RW_T4T_NDEF_FORMAT_CPLT_EVT, &rw_data);
 
-          RW_TRACE_DEBUG0(
-              "rw_t4t_ndef_format (): Sent RW_T4T_NDEF_FORMAT_CPLT_EVT");
+          DLOG_IF(INFO, nfc_debug_enabled)
+              << StringPrintf("Sent RW_T4T_NDEF_FORMAT_CPLT_EVT");
         }
       }
       break;
 
     default:
-      RW_TRACE_ERROR1("rw_t4t_sm_ndef_format (): unknown sub_state=%d",
-                      p_t4t->sub_state);
+      LOG(ERROR) << StringPrintf("unknown sub_state=%d", p_t4t->sub_state);
       rw_t4t_handle_error(NFC_STATUS_FAILED, 0, 0);
       break;
   }
@@ -1256,13 +1247,9 @@
   uint16_t status_words, nlen;
   tRW_DATA rw_data;
 
-#if (BT_TRACE_VERBOSE == TRUE)
-  RW_TRACE_DEBUG2("rw_t4t_sm_detect_ndef (): sub_state:%s (%d)",
-                  rw_t4t_get_sub_state_name(p_t4t->sub_state),
-                  p_t4t->sub_state);
-#else
-  RW_TRACE_DEBUG1("rw_t4t_sm_detect_ndef (): sub_state=%d", p_t4t->sub_state);
-#endif
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "sub_state:%s (%d)", rw_t4t_get_sub_state_name(p_t4t->sub_state).c_str(),
+      p_t4t->sub_state);
 
   /* get status words */
   p = (uint8_t*)(p_r_apdu + 1) + p_r_apdu->offset;
@@ -1275,8 +1262,8 @@
         (p_t4t->version == T4T_VERSION_2_0)) {
       p_t4t->version = T4T_VERSION_1_0;
 
-      RW_TRACE_DEBUG1("rw_t4t_sm_detect_ndef (): retry with version=0x%02X",
-                      p_t4t->version);
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("retry with version=0x%02X", p_t4t->version);
 
       if (!rw_t4t_select_application(T4T_VERSION_1_0)) {
         rw_t4t_handle_error(NFC_STATUS_FAILED, 0, 0);
@@ -1331,22 +1318,26 @@
           BE_STREAM_TO_UINT8(p_t4t->cc_file.ndef_fc.read_access, p);
           BE_STREAM_TO_UINT8(p_t4t->cc_file.ndef_fc.write_access, p);
 
-#if (BT_TRACE_VERBOSE == TRUE)
-          RW_TRACE_DEBUG0("Capability Container (CC) file");
-          RW_TRACE_DEBUG1("  CCLEN:  0x%04X", p_t4t->cc_file.cclen);
-          RW_TRACE_DEBUG1("  Version:0x%02X", p_t4t->cc_file.version);
-          RW_TRACE_DEBUG1("  MaxLe:  0x%04X", p_t4t->cc_file.max_le);
-          RW_TRACE_DEBUG1("  MaxLc:  0x%04X", p_t4t->cc_file.max_lc);
-          RW_TRACE_DEBUG0("  NDEF File Control TLV");
-          RW_TRACE_DEBUG1("    FileID:      0x%04X",
-                          p_t4t->cc_file.ndef_fc.file_id);
-          RW_TRACE_DEBUG1("    MaxFileSize: 0x%04X",
-                          p_t4t->cc_file.ndef_fc.max_file_size);
-          RW_TRACE_DEBUG1("    ReadAccess:  0x%02X",
-                          p_t4t->cc_file.ndef_fc.read_access);
-          RW_TRACE_DEBUG1("    WriteAccess: 0x%02X",
-                          p_t4t->cc_file.ndef_fc.write_access);
-#endif
+          DLOG_IF(INFO, nfc_debug_enabled)
+              << StringPrintf("Capability Container (CC) file");
+          DLOG_IF(INFO, nfc_debug_enabled)
+              << StringPrintf("  CCLEN:  0x%04X", p_t4t->cc_file.cclen);
+          DLOG_IF(INFO, nfc_debug_enabled)
+              << StringPrintf("  Version:0x%02X", p_t4t->cc_file.version);
+          DLOG_IF(INFO, nfc_debug_enabled)
+              << StringPrintf("  MaxLe:  0x%04X", p_t4t->cc_file.max_le);
+          DLOG_IF(INFO, nfc_debug_enabled)
+              << StringPrintf("  MaxLc:  0x%04X", p_t4t->cc_file.max_lc);
+          DLOG_IF(INFO, nfc_debug_enabled)
+              << StringPrintf("  NDEF File Control TLV");
+          DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+              "    FileID:      0x%04X", p_t4t->cc_file.ndef_fc.file_id);
+          DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+              "    MaxFileSize: 0x%04X", p_t4t->cc_file.ndef_fc.max_file_size);
+          DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+              "    ReadAccess:  0x%02X", p_t4t->cc_file.ndef_fc.read_access);
+          DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+              "    WriteAccess: 0x%02X", p_t4t->cc_file.ndef_fc.write_access);
 
           if (rw_t4t_validate_cc_file()) {
             if (!rw_t4t_select_file(p_t4t->cc_file.ndef_fc.file_id)) {
@@ -1431,13 +1422,13 @@
 
             (*(rw_cb.p_cback))(RW_T4T_NDEF_DETECT_EVT, &rw_data);
 
-            RW_TRACE_DEBUG0(
-                "rw_t4t_sm_detect_ndef (): Sent RW_T4T_NDEF_DETECT_EVT");
+            DLOG_IF(INFO, nfc_debug_enabled)
+                << StringPrintf("Sent RW_T4T_NDEF_DETECT_EVT");
           }
         } else {
           /* NLEN should be less than max file size */
-          RW_TRACE_ERROR2(
-              "rw_t4t_sm_detect_ndef (): NLEN (%d) + 2 must be <= max file "
+          LOG(ERROR) << StringPrintf(
+              "NLEN (%d) + 2 must be <= max file "
               "size (%d)",
               nlen, p_t4t->cc_file.ndef_fc.max_file_size);
 
@@ -1446,9 +1437,9 @@
         }
       } else {
         /* response payload size should be T4T_FILE_LENGTH_SIZE */
-        RW_TRACE_ERROR2(
-            "rw_t4t_sm_detect_ndef (): Length (%d) of R-APDU must be %d",
-            p_r_apdu->len, T4T_FILE_LENGTH_SIZE + T4T_RSP_STATUS_WORDS_SIZE);
+        LOG(ERROR) << StringPrintf(
+            "Length (%d) of R-APDU must be %d", p_r_apdu->len,
+            T4T_FILE_LENGTH_SIZE + T4T_RSP_STATUS_WORDS_SIZE);
 
         p_t4t->ndef_status &= ~(RW_T4T_NDEF_STATUS_NDEF_DETECTED);
         rw_t4t_handle_error(NFC_STATUS_BAD_RESP, 0, 0);
@@ -1456,8 +1447,7 @@
       break;
 
     default:
-      RW_TRACE_ERROR1("rw_t4t_sm_detect_ndef (): unknown sub_state=%d",
-                      p_t4t->sub_state);
+      LOG(ERROR) << StringPrintf("unknown sub_state=%d", p_t4t->sub_state);
       rw_t4t_handle_error(NFC_STATUS_FAILED, 0, 0);
       break;
   }
@@ -1478,13 +1468,9 @@
   uint16_t status_words;
   tRW_DATA rw_data;
 
-#if (BT_TRACE_VERBOSE == TRUE)
-  RW_TRACE_DEBUG2("rw_t4t_sm_read_ndef (): sub_state:%s (%d)",
-                  rw_t4t_get_sub_state_name(p_t4t->sub_state),
-                  p_t4t->sub_state);
-#else
-  RW_TRACE_DEBUG1("rw_t4t_sm_read_ndef (): sub_state=%d", p_t4t->sub_state);
-#endif
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "sub_state:%s (%d)", rw_t4t_get_sub_state_name(p_t4t->sub_state).c_str(),
+      p_t4t->sub_state);
 
   /* get status words */
   p = (uint8_t*)(p_r_apdu + 1) + p_r_apdu->offset;
@@ -1523,8 +1509,8 @@
 
             (*(rw_cb.p_cback))(RW_T4T_NDEF_READ_CPLT_EVT, &rw_data);
 
-            RW_TRACE_DEBUG0(
-                "rw_t4t_sm_read_ndef (): Sent RW_T4T_NDEF_READ_CPLT_EVT");
+            DLOG_IF(INFO, nfc_debug_enabled)
+                << StringPrintf("Sent RW_T4T_NDEF_READ_CPLT_EVT");
           }
 
           p_r_apdu = NULL;
@@ -1533,8 +1519,8 @@
           p_t4t->state = RW_T4T_STATE_IDLE;
         }
       } else {
-        RW_TRACE_ERROR2(
-            "rw_t4t_sm_read_ndef (): invalid payload length (%d), rw_length "
+        LOG(ERROR) << StringPrintf(
+            "invalid payload length (%d), rw_length "
             "(%d)",
             p_r_apdu->len, p_t4t->rw_length);
         rw_t4t_handle_error(NFC_STATUS_BAD_RESP, 0, 0);
@@ -1542,8 +1528,7 @@
       break;
 
     default:
-      RW_TRACE_ERROR1("rw_t4t_sm_read_ndef (): unknown sub_state = %d",
-                      p_t4t->sub_state);
+      LOG(ERROR) << StringPrintf("unknown sub_state = %d", p_t4t->sub_state);
       rw_t4t_handle_error(NFC_STATUS_FAILED, 0, 0);
       break;
   }
@@ -1566,13 +1551,9 @@
   uint16_t status_words;
   tRW_DATA rw_data;
 
-#if (BT_TRACE_VERBOSE == TRUE)
-  RW_TRACE_DEBUG2("rw_t4t_sm_update_ndef (): sub_state:%s (%d)",
-                  rw_t4t_get_sub_state_name(p_t4t->sub_state),
-                  p_t4t->sub_state);
-#else
-  RW_TRACE_DEBUG1("rw_t4t_sm_update_ndef (): sub_state=%d", p_t4t->sub_state);
-#endif
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "sub_state:%s (%d)", rw_t4t_get_sub_state_name(p_t4t->sub_state).c_str(),
+      p_t4t->sub_state);
 
   /* Get status words */
   p = (uint8_t*)(p_r_apdu + 1) + p_r_apdu->offset;
@@ -1604,8 +1585,8 @@
           rw_data.status = NFC_STATUS_OK;
 
           (*(rw_cb.p_cback))(RW_T4T_NDEF_UPDATE_CPLT_EVT, &rw_data);
-          RW_TRACE_DEBUG0(
-              "rw_t4t_sm_update_ndef (): Sent RW_T4T_NDEF_UPDATE_CPLT_EVT");
+          DLOG_IF(INFO, nfc_debug_enabled)
+              << StringPrintf("Sent RW_T4T_NDEF_UPDATE_CPLT_EVT");
         }
       }
       break;
@@ -1631,8 +1612,7 @@
       break;
 
     default:
-      RW_TRACE_ERROR1("rw_t4t_sm_update_ndef (): unknown sub_state = %d",
-                      p_t4t->sub_state);
+      LOG(ERROR) << StringPrintf("unknown sub_state = %d", p_t4t->sub_state);
       rw_t4t_handle_error(NFC_STATUS_FAILED, 0, 0);
       break;
   }
@@ -1653,13 +1633,9 @@
   uint16_t status_words;
   tRW_DATA rw_data;
 
-#if (BT_TRACE_VERBOSE == TRUE)
-  RW_TRACE_DEBUG2("rw_t4t_sm_set_readonly (): sub_state:%s (%d)",
-                  rw_t4t_get_sub_state_name(p_t4t->sub_state),
-                  p_t4t->sub_state);
-#else
-  RW_TRACE_DEBUG1("rw_t4t_sm_set_readonly (): sub_state=%d", p_t4t->sub_state);
-#endif
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "sub_state:%s (%d)", rw_t4t_get_sub_state_name(p_t4t->sub_state).c_str(),
+      p_t4t->sub_state);
 
   /* Get status words */
   p = (uint8_t*)(p_r_apdu + 1) + p_r_apdu->offset;
@@ -1702,14 +1678,14 @@
       if (rw_cb.p_cback) {
         rw_data.status = NFC_STATUS_OK;
 
-        RW_TRACE_DEBUG0("rw_t4t_sm_set_readonly (): Sent RW_T4T_SET_TO_RO_EVT");
+        DLOG_IF(INFO, nfc_debug_enabled)
+            << StringPrintf("Sent RW_T4T_SET_TO_RO_EVT");
         (*(rw_cb.p_cback))(RW_T4T_SET_TO_RO_EVT, &rw_data);
       }
       break;
 
     default:
-      RW_TRACE_ERROR1("rw_t4t_sm_set_readonly (): unknown sub_state = %d",
-                      p_t4t->sub_state);
+      LOG(ERROR) << StringPrintf("unknown sub_state = %d", p_t4t->sub_state);
       rw_t4t_handle_error(NFC_STATUS_FAILED, 0, 0);
       break;
   }
@@ -1725,12 +1701,12 @@
 **
 *******************************************************************************/
 void rw_t4t_process_timeout(TIMER_LIST_ENT* p_tle) {
-  RW_TRACE_DEBUG1("rw_t4t_process_timeout () event=%d", p_tle->event);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("event=%d", p_tle->event);
 
   if (p_tle->event == NFC_TTYPE_RW_T4T_RESPONSE) {
     rw_t4t_handle_error(NFC_STATUS_TIMEOUT, 0, 0);
   } else {
-    RW_TRACE_ERROR1("rw_t4t_process_timeout () unknown event=%d", p_tle->event);
+    LOG(ERROR) << StringPrintf("unknown event=%d", p_tle->event);
   }
 }
 
@@ -1746,7 +1722,8 @@
 void rw_t4t_handle_isodep_nak_rsp(uint8_t status, bool is_ntf) {
   tRW_DATA rw_data;
   tRW_T4T_CB* p_t4t = &rw_cb.tcb.t4t;
-  RW_TRACE_DEBUG1("rw_t4t_handle_isodep_nak_rsp %d", status);
+  DLOG_IF(INFO, nfc_debug_enabled)
+      << StringPrintf("rw_t4t_handle_isodep_nak_rsp %d", status);
   if (is_ntf || (status != NFC_STATUS_OK)) {
     rw_data.status = status;
     nfc_stop_quick_timer(&p_t4t->timer);
@@ -1764,17 +1741,15 @@
 ** Returns          none
 **
 *******************************************************************************/
-static void rw_t4t_data_cback(uint8_t conn_id, tNFC_CONN_EVT event,
-                              tNFC_CONN* p_data) {
+static void rw_t4t_data_cback(__attribute__((unused)) uint8_t conn_id,
+                              tNFC_CONN_EVT event, tNFC_CONN* p_data) {
   tRW_T4T_CB* p_t4t = &rw_cb.tcb.t4t;
   NFC_HDR* p_r_apdu;
   tRW_DATA rw_data;
 
-#if (BT_TRACE_VERBOSE == TRUE)
   uint8_t begin_state = p_t4t->state;
-#endif
 
-  RW_TRACE_DEBUG1("rw_t4t_data_cback () event = 0x%X", event);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("event = 0x%X", event);
   nfc_stop_quick_timer(&p_t4t->timer);
 
   switch (event) {
@@ -1810,33 +1785,22 @@
       return;
   }
 
-#if (BT_TRACE_PROTOCOL == TRUE)
-  if (p_t4t->state != RW_T4T_STATE_IDLE) DispRWT4Tags(p_r_apdu, true);
-#endif
-
-#if (BT_TRACE_VERBOSE == TRUE)
-  RW_TRACE_DEBUG2("RW T4T state: <%s (%d)>",
-                  rw_t4t_get_state_name(p_t4t->state), p_t4t->state);
-#else
-  RW_TRACE_DEBUG1("RW T4T state: %d", p_t4t->state);
-#endif
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
+      "RW T4T state: <%s (%d)>", rw_t4t_get_state_name(p_t4t->state).c_str(),
+      p_t4t->state);
 
   switch (p_t4t->state) {
     case RW_T4T_STATE_IDLE:
 /* Unexpected R-APDU, it should be raw frame response */
 /* forward to upper layer without parsing */
-#if (BT_TRACE_VERBOSE == TRUE)
-      RW_TRACE_DEBUG2("RW T4T Raw Frame: Len [0x%X] Status [%s]", p_r_apdu->len,
-                      NFC_GetStatusName(p_data->data.status));
-#else
-      RW_TRACE_DEBUG2("RW T4T Raw Frame: Len [0x%X] Status [0x%X]",
-                      p_r_apdu->len, p_data->data.status);
-#endif
-      if (rw_cb.p_cback) {
-        rw_data.raw_frame.status = p_data->data.status;
-        rw_data.raw_frame.p_data = p_r_apdu;
-        (*(rw_cb.p_cback))(RW_T4T_RAW_FRAME_EVT, &rw_data);
-        p_r_apdu = NULL;
+DLOG_IF(INFO, nfc_debug_enabled)
+    << StringPrintf("RW T4T Raw Frame: Len [0x%X] Status [%s]", p_r_apdu->len,
+                    NFC_GetStatusName(p_data->data.status).c_str());
+if (rw_cb.p_cback) {
+  rw_data.raw_frame.status = p_data->data.status;
+  rw_data.raw_frame.p_data = p_r_apdu;
+  (*(rw_cb.p_cback))(RW_T4T_RAW_FRAME_EVT, &rw_data);
+  p_r_apdu = NULL;
       } else {
         GKI_freebuf(p_r_apdu);
       }
@@ -1869,18 +1833,17 @@
       GKI_freebuf(p_r_apdu);
       break;
     default:
-      RW_TRACE_ERROR1("rw_t4t_data_cback (): invalid state=%d", p_t4t->state);
+      LOG(ERROR) << StringPrintf("invalid state=%d", p_t4t->state);
       GKI_freebuf(p_r_apdu);
       break;
   }
 
-#if (BT_TRACE_VERBOSE == TRUE)
   if (begin_state != p_t4t->state) {
-    RW_TRACE_DEBUG2("RW T4T state changed:<%s> -> <%s>",
-                    rw_t4t_get_state_name(begin_state),
-                    rw_t4t_get_state_name(p_t4t->state));
+    DLOG_IF(INFO, nfc_debug_enabled)
+        << StringPrintf("RW T4T state changed:<%s> -> <%s>",
+                        rw_t4t_get_state_name(begin_state).c_str(),
+                        rw_t4t_get_state_name(p_t4t->state).c_str());
   }
-#endif
 }
 
 /*******************************************************************************
@@ -1893,12 +1856,11 @@
 **
 *******************************************************************************/
 tNFC_STATUS RW_T4tFormatNDef(void) {
-  RW_TRACE_API0("RW_T4tFormatNDef ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (rw_cb.tcb.t4t.state != RW_T4T_STATE_IDLE) {
-    RW_TRACE_ERROR1(
-        "RW_T4tFormatNDef ():Unable to start command at state (0x%X)",
-        rw_cb.tcb.t4t.state);
+    LOG(ERROR) << StringPrintf("Unable to start command at state (0x%X)",
+                               rw_cb.tcb.t4t.state);
     return NFC_STATUS_FAILED;
   }
 
@@ -1926,7 +1888,7 @@
 tNFC_STATUS rw_t4t_select(void) {
   tRW_T4T_CB* p_t4t = &rw_cb.tcb.t4t;
 
-  RW_TRACE_DEBUG0("rw_t4t_select ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   NFC_SetStaticRfCback(rw_t4t_data_cback);
 
@@ -1956,12 +1918,11 @@
 **
 *******************************************************************************/
 tNFC_STATUS RW_T4tDetectNDef(void) {
-  RW_TRACE_API0("RW_T4tDetectNDef ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (rw_cb.tcb.t4t.state != RW_T4T_STATE_IDLE) {
-    RW_TRACE_ERROR1(
-        "RW_T4tDetectNDef ():Unable to start command at state (0x%X)",
-        rw_cb.tcb.t4t.state);
+    LOG(ERROR) << StringPrintf("Unable to start command at state (0x%X)",
+                               rw_cb.tcb.t4t.state);
     return NFC_STATUS_FAILED;
   }
 
@@ -2002,11 +1963,11 @@
 **
 *******************************************************************************/
 tNFC_STATUS RW_T4tReadNDef(void) {
-  RW_TRACE_API0("RW_T4tReadNDef ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (rw_cb.tcb.t4t.state != RW_T4T_STATE_IDLE) {
-    RW_TRACE_ERROR1("RW_T4tReadNDef ():Unable to start command at state (0x%X)",
-                    rw_cb.tcb.t4t.state);
+    LOG(ERROR) << StringPrintf("Unable to start command at state (0x%X)",
+                               rw_cb.tcb.t4t.state);
     return NFC_STATUS_FAILED;
   }
 
@@ -2023,7 +1984,7 @@
 
     return NFC_STATUS_OK;
   } else {
-    RW_TRACE_ERROR0("RW_T4tReadNDef ():No NDEF detected");
+    LOG(ERROR) << StringPrintf("No NDEF detected");
     return NFC_STATUS_FAILED;
   }
 }
@@ -2046,12 +2007,11 @@
 **
 *******************************************************************************/
 tNFC_STATUS RW_T4tUpdateNDef(uint16_t length, uint8_t* p_data) {
-  RW_TRACE_API1("RW_T4tUpdateNDef () length:%d", length);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("length:%d", length);
 
   if (rw_cb.tcb.t4t.state != RW_T4T_STATE_IDLE) {
-    RW_TRACE_ERROR1(
-        "RW_T4tUpdateNDef ():Unable to start command at state (0x%X)",
-        rw_cb.tcb.t4t.state);
+    LOG(ERROR) << StringPrintf("Unable to start command at state (0x%X)",
+                               rw_cb.tcb.t4t.state);
     return NFC_STATUS_FAILED;
   }
 
@@ -2059,14 +2019,14 @@
   if (rw_cb.tcb.t4t.ndef_status & RW_T4T_NDEF_STATUS_NDEF_DETECTED) {
     /* if read-only */
     if (rw_cb.tcb.t4t.ndef_status & RW_T4T_NDEF_STATUS_NDEF_READ_ONLY) {
-      RW_TRACE_ERROR0("RW_T4tUpdateNDef ():NDEF is read-only");
+      LOG(ERROR) << StringPrintf("NDEF is read-only");
       return NFC_STATUS_FAILED;
     }
 
     if (rw_cb.tcb.t4t.cc_file.ndef_fc.max_file_size <
         length + T4T_FILE_LENGTH_SIZE) {
-      RW_TRACE_ERROR2(
-          "RW_T4tUpdateNDef ():data (%d bytes) plus NLEN is more than max file "
+      LOG(ERROR) << StringPrintf(
+          "data (%d bytes) plus NLEN is more than max file "
           "size (%d)",
           length, rw_cb.tcb.t4t.cc_file.ndef_fc.max_file_size);
       return NFC_STATUS_FAILED;
@@ -2089,7 +2049,7 @@
 
     return NFC_STATUS_OK;
   } else {
-    RW_TRACE_ERROR0("RW_T4tUpdateNDef ():No NDEF detected");
+    LOG(ERROR) << StringPrintf("No NDEF detected");
     return NFC_STATUS_FAILED;
   }
 }
@@ -2118,7 +2078,7 @@
   bool status;
   NFC_HDR* p_data;
 
-  RW_TRACE_API1("RW_T4tPresenceCheck () %d", option);
+  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%d", option);
 
   /* If RW_SelectTagType was not called (no conn_callback) return failure */
   if (!rw_cb.p_cback) {
@@ -2147,12 +2107,6 @@
       }
     } else if (option == RW_T4T_CHK_ISO_DEP_NAK_PRES_CHK) {
       if (NFC_ISODEPNakPresCheck() == NFC_STATUS_OK) status = true;
-    } else {
-      /* use read binary on the given channel */
-      rw_cb.tcb.t4t.channel = 0;
-      if (option <= RW_T4T_CHK_READ_BINARY_CH3) rw_cb.tcb.t4t.channel = option;
-      status = rw_t4t_read_file(0, 1, false);
-      rw_cb.tcb.t4t.channel = 0;
     }
 
     if (status == true) {
@@ -2182,12 +2136,11 @@
   tNFC_STATUS retval = NFC_STATUS_OK;
   tRW_DATA evt_data;
 
-  RW_TRACE_API0("RW_T4tSetNDefReadOnly ()");
+  DLOG_IF(INFO, nfc_debug_enabled) << __func__;
 
   if (rw_cb.tcb.t4t.state != RW_T4T_STATE_IDLE) {
-    RW_TRACE_ERROR1(
-        "RW_T4tSetNDefReadOnly ():Unable to start command at state (0x%X)",
-        rw_cb.tcb.t4t.state);
+    LOG(ERROR) << StringPrintf("Unable to start command at state (0x%X)",
+                               rw_cb.tcb.t4t.state);
     return NFC_STATUS_FAILED;
   }
 
@@ -2195,7 +2148,8 @@
   if (rw_cb.tcb.t4t.ndef_status & RW_T4T_NDEF_STATUS_NDEF_DETECTED) {
     /* if read-only */
     if (rw_cb.tcb.t4t.ndef_status & RW_T4T_NDEF_STATUS_NDEF_READ_ONLY) {
-      RW_TRACE_API0("RW_T4tSetNDefReadOnly (): NDEF is already read-only");
+      DLOG_IF(INFO, nfc_debug_enabled)
+          << StringPrintf("NDEF is already read-only");
 
       evt_data.status = NFC_STATUS_OK;
       (*rw_cb.p_cback)(RW_T4T_SET_TO_RO_EVT, &evt_data);
@@ -2212,13 +2166,12 @@
 
     return NFC_STATUS_OK;
   } else {
-    RW_TRACE_ERROR0("RW_T4tSetNDefReadOnly ():No NDEF detected");
+    LOG(ERROR) << StringPrintf("No NDEF detected");
     return NFC_STATUS_FAILED;
   }
   return (retval);
 }
 
-#if (BT_TRACE_VERBOSE == TRUE)
 /*******************************************************************************
 **
 ** Function         rw_t4t_get_state_name
@@ -2230,25 +2183,24 @@
 ** Returns          pointer to the name
 **
 *******************************************************************************/
-static char* rw_t4t_get_state_name(uint8_t state) {
+static std::string rw_t4t_get_state_name(uint8_t state) {
   switch (state) {
     case RW_T4T_STATE_NOT_ACTIVATED:
-      return ("NOT_ACTIVATED");
+      return "NOT_ACTIVATED";
     case RW_T4T_STATE_IDLE:
-      return ("IDLE");
+      return "IDLE";
     case RW_T4T_STATE_DETECT_NDEF:
-      return ("NDEF_DETECTION");
+      return "NDEF_DETECTION";
     case RW_T4T_STATE_READ_NDEF:
-      return ("READ_NDEF");
+      return "READ_NDEF";
     case RW_T4T_STATE_UPDATE_NDEF:
-      return ("UPDATE_NDEF");
+      return "UPDATE_NDEF";
     case RW_T4T_STATE_PRESENCE_CHECK:
-      return ("PRESENCE_CHECK");
+      return "PRESENCE_CHECK";
     case RW_T4T_STATE_SET_READ_ONLY:
-      return ("SET_READ_ONLY");
-
+      return "SET_READ_ONLY";
     default:
-      return ("???? UNKNOWN STATE");
+      return "???? UNKNOWN STATE";
   }
 }
 
@@ -2263,43 +2215,41 @@
 ** Returns          pointer to the name
 **
 *******************************************************************************/
-static char* rw_t4t_get_sub_state_name(uint8_t sub_state) {
+static std::string rw_t4t_get_sub_state_name(uint8_t sub_state) {
   switch (sub_state) {
     case RW_T4T_SUBSTATE_WAIT_SELECT_APP:
-      return ("WAIT_SELECT_APP");
+      return "WAIT_SELECT_APP";
     case RW_T4T_SUBSTATE_WAIT_SELECT_CC:
-      return ("WAIT_SELECT_CC");
+      return "WAIT_SELECT_CC";
     case RW_T4T_SUBSTATE_WAIT_CC_FILE:
-      return ("WAIT_CC_FILE");
+      return "WAIT_CC_FILE";
     case RW_T4T_SUBSTATE_WAIT_SELECT_NDEF_FILE:
-      return ("WAIT_SELECT_NDEF_FILE");
+      return "WAIT_SELECT_NDEF_FILE";
     case RW_T4T_SUBSTATE_WAIT_READ_NLEN:
-      return ("WAIT_READ_NLEN");
-
+      return "WAIT_READ_NLEN";
     case RW_T4T_SUBSTATE_WAIT_READ_RESP:
-      return ("WAIT_READ_RESP");
+      return "WAIT_READ_RESP";
     case RW_T4T_SUBSTATE_WAIT_UPDATE_RESP:
-      return ("WAIT_UPDATE_RESP");
+      return "WAIT_UPDATE_RESP";
     case RW_T4T_SUBSTATE_WAIT_UPDATE_NLEN:
-      return ("WAIT_UPDATE_NLEN");
+      return "WAIT_UPDATE_NLEN";
     case RW_T4T_SUBSTATE_WAIT_GET_HW_VERSION:
-      return ("WAIT_GET_HW_VERSION");
+      return "WAIT_GET_HW_VERSION";
     case RW_T4T_SUBSTATE_WAIT_GET_SW_VERSION:
-      return ("WAIT_GET_SW_VERSION");
+      return "WAIT_GET_SW_VERSION";
     case RW_T4T_SUBSTATE_WAIT_GET_UID:
-      return ("WAIT_GET_UID");
+      return "WAIT_GET_UID";
     case RW_T4T_SUBSTATE_WAIT_CREATE_APP:
-      return ("WAIT_CREATE_APP");
+      return "WAIT_CREATE_APP";
     case RW_T4T_SUBSTATE_WAIT_CREATE_CC:
-      return ("WAIT_CREATE_CC");
+      return "WAIT_CREATE_CC";
     case RW_T4T_SUBSTATE_WAIT_CREATE_NDEF:
-      return ("WAIT_CREATE_NDEF");
+      return "WAIT_CREATE_NDEF";
     case RW_T4T_SUBSTATE_WAIT_WRITE_CC:
-      return ("WAIT_WRITE_CC");
+      return "WAIT_WRITE_CC";
     case RW_T4T_SUBSTATE_WAIT_WRITE_NDEF:
-      return ("WAIT_WRITE_NDEF");
+      return "WAIT_WRITE_NDEF";
     default:
-      return ("???? UNKNOWN SUBSTATE");
+      return "???? UNKNOWN SUBSTATE";
   }
 }
-#endif
diff --git a/src/nfc/tags/tags_int.c b/src/nfc/tags/tags_int.cc
similarity index 98%
rename from src/nfc/tags/tags_int.c
rename to src/nfc/tags/tags_int.cc
index b99d63d..71d9c42 100644
--- a/src/nfc/tags/tags_int.c
+++ b/src/nfc/tags/tags_int.cc
@@ -25,10 +25,8 @@
 #include "bt_types.h"
 #include "nfc_target.h"
 
-#include "nfc_api.h"
 #include "rw_api.h"
 #include "rw_int.h"
-#include "tags_int.h"
 
 #define T1T_MAX_NUM_OPCODES 9
 #define T1T_STATIC_OPCODES 5
@@ -88,14 +86,12 @@
 const uint8_t t4t_v20_ndef_tag_aid[T4T_V20_NDEF_TAG_AID_LEN] = {
     0xD2, 0x76, 0x00, 0x00, 0x85, 0x01, 0x01};
 
-#if (BT_TRACE_PROTOCOL == TRUE)
 const char* const t1t_cmd_str[] = {
     "T1T_RID",  "T1T_RALL",  "T1T_READ",     "T1T_WRITE_E",  "T1T_WRITE_NE",
     "T1T_RSEG", "T1T_READ8", "T1T_WRITE_E8", "T1T_WRITE_NE8"};
 
 const char* const t2t_cmd_str[] = {"T2T_CMD_READ", "T2T_CMD_WRITE",
                                    "T2T_CMD_SEC_SEL"};
-#endif
 
 static unsigned int tags_ones32(register unsigned int x);
 
@@ -225,7 +221,6 @@
   return ((uint8_t)(p_info - t2t_cmd_rsp_infos) + RW_T2T_FIRST_EVT);
 }
 
-#if (BT_TRACE_PROTOCOL == TRUE)
 /*******************************************************************************
 **
 ** Function         t1t_info_to_str
@@ -261,7 +256,6 @@
   else
     return "";
 }
-#endif
 
 /*******************************************************************************
 **
diff --git a/src/nfca_version.c b/src/nfca_version.c
deleted file mode 100644
index 6c83d7d..0000000
--- a/src/nfca_version.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-#include "bt_types.h"
-
-const uint8_t nfca_version_string[] = "NFCDROID-AOSP_M_00.01";
-
-/*
-// The following string should be manually updated to contain the
-// label of the NFA version being used (see stack-info.txt).
-//
-// NOTE: IF additional branches are used add a "+" at the end of the string
-*/
-const uint8_t nfa_version_string[] = "NFA_PI_1.03.66+";
diff --git a/src/static-lib-adapt/ProtoDispBluetoothHci.c b/src/static-lib-adapt/ProtoDispBluetoothHci.c
deleted file mode 100644
index 363f59d..0000000
--- a/src/static-lib-adapt/ProtoDispBluetoothHci.c
+++ /dev/null
@@ -1,169 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2011-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-#include "ProtoDispBluetoothHci.h"
-#include <cutils/log.h>
-#include "_OverrideLog.h"
-#include "nfc_target.h"
-
-extern uint8_t* HCIDisp1(char* p_descr, uint8_t* p_data);
-extern uint32_t ScrProtocolTraceFlag;
-#define HCI_GEN_TRACE \
-  (TRACE_CTRL_GENERAL | TRACE_LAYER_HCI | TRACE_ORG_PROTO_DISP | hci_trace_type)
-static uint8_t hci_trace_type = 0;
-static char* modes_str[] = {"No sleep mode",
-                            "UART",
-                            "UART with messaging",
-                            "USB",
-                            "H4IBSS",
-                            "USB with host wake",
-                            "SDIO",
-                            "UART CS-N",
-                            "SPI",
-                            "H5",
-                            "H4DS",
-                            "",
-                            "UART with BREAK"};
-static uint8_t* p_end_hci = NULL;
-static uint8_t* HCIDisp1Ext(char* p_descr, uint8_t* p_data, char* p_ext);
-static void disp_sleepmode(uint8_t* p);
-static void disp_sleepmode_evt(uint8_t* p);
-
-///////////////////////////////////////////
-///////////////////////////////////////////
-
-uint8_t* HCIDisp1Ext(char* p_descr, uint8_t* p_data, char* p_ext) {
-  if (p_data == p_end_hci) return p_data;
-
-  char buff[200];
-
-  sprintf(buff, "%40s : %u (0x%02x): %s", p_descr, *p_data, *p_data, p_ext);
-
-  ScrLog(HCI_GEN_TRACE, "%s", buff);
-  return (p_data + 1);
-}
-
-/*******************************************************************************
-**
-** Function         disp_sleepmode
-**
-** Description      Displays VSC sleep mode
-**
-** Returns          none.
-**
-*******************************************************************************/
-void disp_sleepmode(uint8_t* p) {
-  hci_trace_type = TRACE_TYPE_CMD_TX;
-  ScrLog(HCI_GEN_TRACE, "--");
-  int len = p[2];
-  ScrLog(HCI_GEN_TRACE,
-         "SEND Command to HCI.  Name: Set_Sleepmode_Param   (Hex Code: 0xfc27  "
-         "Param Len: %d)",
-         len);
-  p += 3;
-  p_end_hci = p + len;
-  p = HCIDisp1Ext("Sleep_Mode", p, (*p <= 12) ? modes_str[*p] : "");
-  p = HCIDisp1("Idle_Threshold_Host", p);
-  p = HCIDisp1("Idle_Threshold_HC", p);
-  p = HCIDisp1Ext("BT_WAKE_Active_Mode", p,
-                  (*p == 0) ? "Active Low" : ((*p == 1) ? "Active High" : ""));
-  p = HCIDisp1Ext("HOST_WAKE_Active_Mode", p,
-                  (*p == 0) ? "Active Low" : ((*p == 1) ? "Active High" : ""));
-  p = HCIDisp1("Allow_Host_Sleep_During_SCO", p);
-  p = HCIDisp1("Combine_Sleep_Mode_And_LPM", p);
-  p = HCIDisp1("Enable_Tristate_Control_Of_UART_Tx_Line", p);
-  p = HCIDisp1Ext("Active_Connection_Handling_On_Suspend", p,
-                  (*p == 0)
-                      ? "Maintain connections; sleep when timed activity allows"
-                      : ((*p == 1) ? "Sleep until resume is detected" : ""));
-  p = HCIDisp1("Resume_Timeout", p);
-  p = HCIDisp1("Enable_BREAK_To_Host", p);
-  p = HCIDisp1("Pulsed_HOST_WAKE", p);
-
-  ScrLog(HCI_GEN_TRACE, "--");
-}
-
-/*******************************************************************************
-**
-** Function         disp_sleepmode_evt
-**
-** Description      Displays HCI comand complete event for VSC sleep mode.
-**
-** Returns          none.
-**
-*******************************************************************************/
-void disp_sleepmode_evt(uint8_t* p) {
-  uint8_t len = p[1], status = p[5];
-
-  hci_trace_type = TRACE_TYPE_EVT_RX;
-  ScrLog(HCI_GEN_TRACE, "--");
-  ScrLog(HCI_GEN_TRACE,
-         "RCVD Event from HCI. Name: HCI_Command_Complete  (Hex Code: 0x0e  "
-         "Param Len: %d)",
-         len);
-
-  p = HCIDisp1("Num HCI Cmd Packets", p + 2);
-  ScrLog(HCI_GEN_TRACE, "%40s : 0xfc27  (Set_Sleepmode_Param)", "Cmd Code");
-  ScrLog(HCI_GEN_TRACE, "%40s : %d (0x%02x) %s", "Status", status, status,
-         (status == 0) ? "Success" : "");
-  ScrLog(HCI_GEN_TRACE, "--");
-}
-
-/*******************************************************************************
-**
-** Function         ProtoDispBluetoothHciCmd
-**
-** Description      Display a HCI command string
-**
-** Returns:
-**                  Nothing
-**
-*******************************************************************************/
-void ProtoDispBluetoothHciCmd(NFC_HDR* p_buf) {
-  if (!(ScrProtocolTraceFlag & SCR_PROTO_TRACE_HCI_SUMMARY)) return;
-  uint8_t* p = (uint8_t*)(p_buf + 1) + p_buf->offset;
-  if (*(p) == 0x27 && *(p + 1) == 0xfc)  // opcode sleep mode
-  {
-    disp_sleepmode(p);
-  }
-}
-
-/*******************************************************************************
-**
-** Function         ProtoDispBluetoothHciEvt
-**
-** Description      display a NCI event
-**
-** Returns:
-**                  Nothing
-**
-*******************************************************************************/
-void ProtoDispBluetoothHciEvt(NFC_HDR* pBuffer) {
-  if (!(ScrProtocolTraceFlag & SCR_PROTO_TRACE_HCI_SUMMARY)) return;
-
-  uint8_t* p = (uint8_t*)(pBuffer + 1) + pBuffer->offset;
-  if (*p == 0x0e)  // command complete
-  {
-    if (*(p + 1) == 4)  // length
-    {
-      if (*(p + 3) == 0x27 && *(p + 4) == 0xfc)  // opcode 0x27fc (sleep mode)
-      {
-        disp_sleepmode_evt(p);
-      }
-    }
-  }
-}
diff --git a/src/udrv/include/upio.h b/src/udrv/include/upio.h
deleted file mode 100644
index 56ff81b..0000000
--- a/src/udrv/include/upio.h
+++ /dev/null
@@ -1,342 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2001-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-#ifndef UPIO_H
-#define UPIO_H
-
-/* Enumeration of UPIO features                                         */
-/* Not all features enumerated here are supported by the hardware.      */
-/* Use UPIO_Feature() to determine support of a particular feature.     */
-enum {
-  /* LEDs */
-  UPIO_FEAT_LED1,
-  UPIO_FEAT_LED2,
-  UPIO_FEAT_LED3,
-  UPIO_FEAT_LED4,
-  UPIO_FEAT_LED5,
-  UPIO_FEAT_LED6,
-  UPIO_FEAT_LED7,
-  UPIO_FEAT_LED8,
-
-  /* Switches */
-  UPIO_FEAT_SWITCH1,
-  UPIO_FEAT_SWITCH2,
-  UPIO_FEAT_SWITCH3,
-  UPIO_FEAT_SWITCH4,
-  UPIO_FEAT_SWITCH5,
-  UPIO_FEAT_SWITCH6,
-  UPIO_FEAT_SWITCH7,
-  UPIO_FEAT_SWITCH8,
-  UPIO_FEAT_SWITCH9,
-  UPIO_FEAT_SWITCH10,
-  UPIO_FEAT_SWITCH11,
-  UPIO_FEAT_SWITCH12,
-  UPIO_FEAT_SWITCH13,
-  UPIO_FEAT_SWITCH14,
-  UPIO_FEAT_SWITCH15,
-  UPIO_FEAT_SWITCH16,
-
-  /* Jumpers */
-  UPIO_FEAT_JUMPER1,
-  UPIO_FEAT_JUMPER2,
-  UPIO_FEAT_JUMPER3,
-  UPIO_FEAT_JUMPER4,
-  UPIO_FEAT_JUMPER5,
-  UPIO_FEAT_JUMPER6,
-  UPIO_FEAT_JUMPER7,
-  UPIO_FEAT_JUMPER8,
-
-  /* Push buttons */
-  UPIO_FEAT_BUTTON1,
-  UPIO_FEAT_BUTTON2,
-  UPIO_FEAT_BUTTON3,
-  UPIO_FEAT_BUTTON4,
-  UPIO_FEAT_BUTTON5,
-  UPIO_FEAT_BUTTON6,
-  UPIO_FEAT_BUTTON7,
-  UPIO_FEAT_BUTTON8,
-
-  /* General purpose */
-  UPIO_FEAT_GENERAL1,
-  UPIO_FEAT_GENERAL2,
-  UPIO_FEAT_GENERAL3,
-  UPIO_FEAT_GENERAL4,
-  UPIO_FEAT_GENERAL5,
-  UPIO_FEAT_GENERAL6,
-  UPIO_FEAT_GENERAL7,
-  UPIO_FEAT_GENERAL8,
-  UPIO_FEAT_GENERAL9,
-  UPIO_FEAT_GENERAL10,
-  UPIO_FEAT_GENERAL11,
-  UPIO_FEAT_GENERAL12,
-  UPIO_FEAT_GENERAL13,
-  UPIO_FEAT_GENERAL14,
-  UPIO_FEAT_GENERAL15,
-  UPIO_FEAT_GENERAL16,
-  UPIO_FEAT_GENERAL17,
-  UPIO_FEAT_GENERAL18,
-  UPIO_FEAT_GENERAL19,
-  UPIO_FEAT_GENERAL20,
-  UPIO_FEAT_GENERAL21,
-  UPIO_FEAT_GENERAL22,
-  UPIO_FEAT_GENERAL23,
-  UPIO_FEAT_GENERAL24,
-  UPIO_FEAT_GENERAL25,
-  UPIO_FEAT_GENERAL26,
-  UPIO_FEAT_GENERAL27,
-  UPIO_FEAT_GENERAL28,
-  UPIO_FEAT_GENERAL29,
-  UPIO_FEAT_GENERAL30,
-  UPIO_FEAT_GENERAL31,
-  UPIO_FEAT_GENERAL32,
-
-  UPIO_FEAT_IN_HIGH, /* Support for input with interrupt on high signal level.
-                        */
-  UPIO_FEAT_IN_LOW,  /* Support for input with interrupt on low signal level. */
-  UPIO_FEAT_IN_RISE, /* Support for input with interrupt on rising edge. */
-  UPIO_FEAT_IN_FALL  /* Support for input with interrupt on falling. */
-
-};
-typedef uint8_t tUPIO_FEATURE;
-
-/* Enumeration of UPIO configurations */
-enum { UPIO_OUT, UPIO_IN, UPIO_IN_EDGE, UPIO_IN_LEVEL, UPIO_NONE };
-typedef uint8_t tUPIO_CONFIG;
-
-/* Enumeration of UPIO types */
-enum {
-  UPIO_LED,     /* LED */
-  UPIO_SWITCH,  /* Switch */
-  UPIO_JUMPER,  /* Jumper */
-  UPIO_BUTTON,  /* Push-button switch */
-  UPIO_GENERAL, /* General purpose I/O */
-
-  UPIO_NUMBER_OF_TYPES
-};
-typedef uint8_t tUPIO_TYPE;
-
-/* Enumeration of UPIO states */
-enum { UPIO_OFF, UPIO_ON, UPIO_TOGGLE };
-typedef uint8_t tUPIO_STATE;
-
-enum { UPIO_SW_BANK2, UPIO_SW_BANK3 };
-typedef uint8_t tUPIO_SW_BANK;
-
-/* Jumper masks */
-#define UPIO_JUMPER1 0x00000001
-#define UPIO_JUMPER2 0x00000002
-#define UPIO_JUMPER3 0x00000004
-#define UPIO_JUMPER4 0x00000008
-#define UPIO_JUMPER5 0x00000010
-#define UPIO_JUMPER6 0x00000020
-#define UPIO_JUMPER7 0x00000040
-#define UPIO_JUMPER8 0x00000080
-
-/* General purpose i/o masks */
-#define UPIO_GENERAL1 0x00000001
-#define UPIO_GENERAL2 0x00000002
-#define UPIO_GENERAL3 0x00000004
-#define UPIO_GENERAL4 0x00000008
-#define UPIO_GENERAL5 0x00000010
-#define UPIO_GENERAL6 0x00000020
-#define UPIO_GENERAL7 0x00000040
-#define UPIO_GENERAL8 0x00000080
-#define UPIO_GENERAL9 0x00000100
-#define UPIO_GENERAL10 0x00000200
-#define UPIO_GENERAL11 0x00000400
-#define UPIO_GENERAL12 0x00000800
-#define UPIO_GENERAL13 0x00001000
-#define UPIO_GENERAL14 0x00002000
-#define UPIO_GENERAL15 0x00004000
-#define UPIO_GENERAL16 0x00008000
-#define UPIO_GENERAL17 0x00010000
-#define UPIO_GENERAL18 0x00020000
-#define UPIO_GENERAL19 0x00040000
-#define UPIO_GENERAL20 0x00080000
-#define UPIO_GENERAL21 0x00100000
-#define UPIO_GENERAL22 0x00200000
-#define UPIO_GENERAL23 0x00400000
-#define UPIO_GENERAL24 0x00800000
-#define UPIO_GENERAL25 0x01000000
-#define UPIO_GENERAL26 0x02000000
-#define UPIO_GENERAL27 0x04000000
-#define UPIO_GENERAL28 0x08000000
-#define UPIO_GENERAL29 0x10000000
-#define UPIO_GENERAL30 0x20000000
-#define UPIO_GENERAL31 0x40000000
-#define UPIO_GENERAL32 0x80000000
-
-typedef uint32_t tUPIO;
-
-/* LED masks */
-#define UPIO_LED1 0x00000001
-#define UPIO_LED2 0x00000002
-#define UPIO_LED3 0x00000004
-#define UPIO_LED4 0x00000008
-#define UPIO_LED5 0x00000010
-#define UPIO_LED6 0x00000020
-#define UPIO_LED7 0x00000040
-#define UPIO_LED8 0x00000080
-
-#define UPIO_LED_ALL                                                       \
-  (UPIO_LED1 | UPIO_LED2 | UPIO_LED3 | UPIO_LED4 | UPIO_LED5 | UPIO_LED6 | \
-   UPIO_LED7 | UPIO_LED8)
-
-/* Switch masks */
-#define UPIO_SWITCH1 0x00000001
-#define UPIO_SWITCH2 0x00000002
-#define UPIO_SWITCH3 0x00000004
-#define UPIO_SWITCH4 0x00000008
-#define UPIO_SWITCH5 0x00000010
-#define UPIO_SWITCH6 0x00000020
-#define UPIO_SWITCH7 0x00000040
-#define UPIO_SWITCH8 0x00000080
-#define UPIO_SWITCH9 0x00000100
-#define UPIO_SWITCH10 0x00000200
-#define UPIO_SWITCH11 0x00000400
-#define UPIO_SWITCH12 0x00000800
-#define UPIO_SWITCH13 0x00001000
-#define UPIO_SWITCH14 0x00002000
-#define UPIO_SWITCH15 0x00004000
-#define UPIO_SWITCH16 0x00008000
-
-/* Push button masks */
-#define UPIO_BUTTON1 0x00000001
-#define UPIO_BUTTON2 0x00000002
-#define UPIO_BUTTON3 0x00000004
-#define UPIO_BUTTON4 0x00000008
-#define UPIO_BUTTON5 0x00000010
-#define UPIO_BUTTON6 0x00000020
-#define UPIO_BUTTON7 0x00000040
-#define UPIO_BUTTON8 0x00000080
-
-typedef void(tUPIO_CBACK)(tUPIO_TYPE type, tUPIO pio, tUPIO_STATE state);
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* API functions for UPIO driver */
-
-/*****************************************************************************
-**
-** Function         UPIO_Init
-**
-** Description
-**      Initialize the GPIO service.
-**      This function is typically called once upon system startup.
-**
-** Returns          nothing
-**
-*****************************************************************************/
-void UPIO_Init(void* p_cfg);
-
-/*****************************************************************************
-**
-** Function         UPIO_Set
-**
-** Description
-**      This function sets one or more GPIO devices to the given state.
-**      Multiple GPIOs of the same type can be masked together to set more
-**      than one GPIO. This function can only be used on types UPIO_LED and
-**      UPIO_GENERAL.
-**
-** Input Parameters:
-**      type    The type of device.
-**      pio     Indicates the particular GPIOs.
-**      state   The desired state.
-**
-** Output Parameter:
-**      None.
-**
-** Returns:
-**      None.
-**
-*****************************************************************************/
-void UPIO_Set(tUPIO_TYPE type, tUPIO pio, tUPIO_STATE state);
-
-/*****************************************************************************
-**
-** Function         UPIO_Read
-**
-** Description
-**      Read the state of a GPIO. This function can be used for any type of
-**      device. Parameter pio can only indicate a single GPIO; multiple GPIOs
-**      cannot be masked together.
-**
-** Input Parameters:
-**      Type:	The type of device.
-**      pio:    Indicates the particular GUPIO.
-**
-** Output Parameter:
-**      None.
-**
-** Returns:
-**      State of GPIO (UPIO_ON or UPIO_OFF).
-**
-*****************************************************************************/
-tUPIO_STATE UPIO_Read(tUPIO_TYPE type, tUPIO pio);
-
-/*****************************************************************************
-**
-** Function         UPIO_Config
-**
-** Description      - Configure GPIOs of type UPIO_GENERAL as inputs or outputs
-**                  - Configure GPIOs to be polled or interrupt driven
-**
-**                  Currently only support polled GPIOs.
-**
-** Input Parameters:
-**      type    The type of device.
-**      pio     Indicates the particular GPIOs.
-**      config
-**      cback
-**
-** Output Parameter:
-**      None.
-**
-** Returns:
-**      None.
-**
-*****************************************************************************/
-void UPIO_Config(tUPIO_TYPE type, tUPIO pio, tUPIO_CONFIG config,
-                 tUPIO_CBACK* cback);
-
-/*****************************************************************************
-**
-** Function         UPIO_Feature
-**
-** Description
-**      Checks whether a feature of the pio API is supported
-**
-** Input Parameter:
-**      feature     The feature to check
-**
-** Output Parameter:
-**      None.
-**
-** Returns:
-**      TRUE if feature is supported, FALSE if it is not.
-**
-*****************************************************************************/
-bool UPIO_Feature(tUPIO_FEATURE feature);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* ifdef UPIO_H */
diff --git a/utils/Android.bp b/utils/Android.bp
new file mode 100644
index 0000000..04053a4
--- /dev/null
+++ b/utils/Android.bp
@@ -0,0 +1,50 @@
+cc_defaults {
+    name: "nfc_utils_defaults",
+    include_dirs: [
+        "system/nfc",
+    ],
+    cflags: [
+        "-Wall",
+        "-Werror",
+    ],
+    target: {
+        linux_glibc: {
+            cflags: ["-D_GNU_SOURCE"],
+        },
+        darwin: {
+            enabled: false,
+        },
+    },
+}
+
+cc_library_static {
+    name: "libnfcutils",
+    defaults: ["nfc_utils_defaults"],
+    export_include_dirs: ["include"],
+    host_supported: true,
+    srcs: [
+        "config.cc",
+        "ringbuffer.cc",
+    ],
+    shared_libs: [
+        "libbase",
+    ],
+}
+
+cc_test {
+    name: "nfc_test_utils",
+    defaults: ["nfc_utils_defaults"],
+    test_suites: ["device-tests"],
+    host_supported: true,
+    srcs: [
+        "test/config_test.cc",
+        "test/ringbuffer_test.cc",
+    ],
+    static_libs: [
+        "libnfcutils",
+        "libgmock",
+    ],
+    shared_libs: [
+        "libbase",
+    ],
+}
diff --git a/utils/config.cc b/utils/config.cc
new file mode 100644
index 0000000..8850c95
--- /dev/null
+++ b/utils/config.cc
@@ -0,0 +1,165 @@
+/*
+ * Copyright 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "config.h"
+
+#include <android-base/file.h>
+#include <android-base/logging.h>
+#include <android-base/parseint.h>
+#include <android-base/strings.h>
+
+using namespace ::std;
+using namespace ::android::base;
+
+namespace {
+
+bool parseBytesString(std::string in, std::vector<uint8_t>& out) {
+  vector<string> values = Split(in, ":");
+  if (values.size() == 0) return false;
+  for (string value : values) {
+    if (value.length() != 2) return false;
+    uint8_t tmp = 0;
+    string hexified = "0x";
+    hexified.append(value);
+    if (!ParseUint(hexified.c_str(), &tmp)) return false;
+    out.push_back(tmp);
+  }
+  return true;
+}
+
+}  // namespace
+
+ConfigValue::ConfigValue() {}
+
+ConfigValue::ConfigValue(std::string value) {
+  // Don't allow empty strings
+  CHECK(!(value.empty()));
+  type_ = STRING;
+  value_string_ = value;
+}
+
+ConfigValue::ConfigValue(unsigned value) {
+  type_ = UNSIGNED;
+  value_unsigned_ = value;
+}
+
+ConfigValue::ConfigValue(std::vector<uint8_t> value) {
+  CHECK(!(value.empty()));
+  type_ = BYTES;
+  value_bytes_ = value;
+}
+
+ConfigValue::Type ConfigValue::getType() const { return type_; }
+
+std::string ConfigValue::getString() const {
+  CHECK(type_ == STRING);
+  return value_string_;
+};
+
+unsigned ConfigValue::getUnsigned() const {
+  CHECK(type_ == UNSIGNED);
+  return value_unsigned_;
+};
+
+std::vector<uint8_t> ConfigValue::getBytes() const {
+  CHECK(type_ == BYTES);
+  return value_bytes_;
+};
+
+bool ConfigValue::parseFromString(std::string in) {
+  if (in.length() > 1 && in[0] == '"' && in[in.length() - 1] == '"') {
+    CHECK(in.length() > 2);  // Don't allow empty strings
+    type_ = STRING;
+    value_string_ = in.substr(1, in.length() - 2);
+    return true;
+  }
+
+  if (in.length() > 1 && in[0] == '{' && in[in.length() - 1] == '}') {
+    CHECK(in.length() >= 4);  // Needs at least one byte
+    type_ = BYTES;
+    return parseBytesString(in.substr(1, in.length() - 2), value_bytes_);
+  }
+
+  unsigned tmp = 0;
+  if (ParseUint(in.c_str(), &tmp)) {
+    type_ = UNSIGNED;
+    value_unsigned_ = tmp;
+    return true;
+  }
+
+  return false;
+}
+
+void ConfigFile::addConfig(const std::string& key, ConfigValue& value) {
+  CHECK(!hasKey(key));
+  values_.emplace(key, value);
+}
+
+void ConfigFile::parseFromFile(const std::string& file_name) {
+  string config;
+  bool config_read = ReadFileToString(file_name, &config);
+  CHECK(config_read);
+  LOG(INFO) << "ConfigFile - Parsing file '" << file_name << "'";
+  parseFromString(config);
+}
+
+void ConfigFile::parseFromString(const std::string& config) {
+  stringstream ss(config);
+  string line;
+  while (getline(ss, line)) {
+    line = Trim(line);
+    if (line.empty()) continue;
+    if (line.at(0) == '#') continue;
+    if (line.at(0) == 0) continue;
+
+    auto search = line.find('=');
+    CHECK(search != string::npos);
+
+    string key(Trim(line.substr(0, search)));
+    string value_string(Trim(line.substr(search + 1, string::npos)));
+
+    ConfigValue value;
+    bool value_parsed = value.parseFromString(value_string);
+    CHECK(value_parsed);
+    addConfig(key, value);
+
+    LOG(INFO) << "ConfigFile - [" << key << "] = " << value_string;
+  }
+}
+
+bool ConfigFile::hasKey(const std::string& key) {
+  return values_.count(key) != 0;
+}
+
+ConfigValue& ConfigFile::getValue(const std::string& key) {
+  auto search = values_.find(key);
+  CHECK(search != values_.end());
+  return search->second;
+}
+
+std::string ConfigFile::getString(const std::string& key) {
+  return getValue(key).getString();
+}
+
+unsigned ConfigFile::getUnsigned(const std::string& key) {
+  return getValue(key).getUnsigned();
+}
+
+std::vector<uint8_t> ConfigFile::getBytes(const std::string& key) {
+  return getValue(key).getBytes();
+}
+
+bool ConfigFile::isEmpty() { return values_.empty(); }
+void ConfigFile::clear() { values_.clear(); }
diff --git a/utils/include/config.h b/utils/include/config.h
new file mode 100644
index 0000000..bb3e0dc
--- /dev/null
+++ b/utils/include/config.h
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#pragma once
+
+#include <map>
+#include <string>
+#include <vector>
+
+class ConfigValue {
+ public:
+  enum Type { UNSIGNED, STRING, BYTES };
+
+  ConfigValue();
+  ConfigValue(std::string);
+  ConfigValue(unsigned);
+  ConfigValue(std::vector<uint8_t>);
+  Type getType() const;
+  std::string getString() const;
+  unsigned getUnsigned() const;
+  std::vector<uint8_t> getBytes() const;
+
+  bool parseFromString(std::string in);
+
+ private:
+  Type type_;
+  std::string value_string_;
+  unsigned value_unsigned_;
+  std::vector<uint8_t> value_bytes_;
+};
+
+class ConfigFile {
+ public:
+  void parseFromFile(const std::string& file_name);
+  void parseFromString(const std::string& config);
+  void addConfig(const std::string& config, ConfigValue& value);
+
+  bool hasKey(const std::string& key);
+  std::string getString(const std::string& key);
+  unsigned getUnsigned(const std::string& key);
+  std::vector<uint8_t> getBytes(const std::string& key);
+
+  bool isEmpty();
+  void clear();
+
+ private:
+  ConfigValue& getValue(const std::string& key);
+
+  std::map<std::string, ConfigValue> values_;
+};
diff --git a/src/include/ringbuffer.h b/utils/include/ringbuffer.h
similarity index 100%
rename from src/include/ringbuffer.h
rename to utils/include/ringbuffer.h
diff --git a/src/adaptation/ringbuffer.cc b/utils/ringbuffer.cc
similarity index 100%
rename from src/adaptation/ringbuffer.cc
rename to utils/ringbuffer.cc
diff --git a/utils/test/config_test.cc b/utils/test/config_test.cc
new file mode 100644
index 0000000..b2fde71
--- /dev/null
+++ b/utils/test/config_test.cc
@@ -0,0 +1,135 @@
+/*
+ * Copyright 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <gtest/gtest.h>
+
+#include <config.h>
+
+namespace {
+const char SIMPLE_CONFIG_FILE[] = "/data/local/tmp/test_config.conf";
+const char SIMPLE_CONFIG[] =
+    "# Simple config file test\n\
+STRING_VALUE=\"Hello World!\"\n\
+#COMMENTED_OUT_VALUE=1\n\
+NUM_VALUE=42\n\
+BYTES_VALUE={0A:0b:0C:fF:00}\n";
+
+const char INVALID_CONFIG1[] =
+    "# This is an invalid config\n\
+# Config values must contain an = sign\n\
+TEST:1";
+
+const char INVALID_CONFIG2[] =
+    "# This is an invalid config\n\
+# Byte arrays must contain at least one value\n\
+TEST={}";
+
+const char INVALID_CONFIG3[] =
+    "# This is an invalid config\n\
+# String values cannot be empty\n\
+TEST=\"\"";
+
+const char INVALID_CONFIG4[] =
+    "# This is an invalid config\n\
+# Multiple config entries with the same key\n\
+TEST=1\n\
+TEST=2";
+
+const char INVALID_CONFIG5[] =
+    "# This is an invalid config\n\
+# Byte value width incorrect\n\
+BYTES_VALUE={0A:0b:0C:1:00}\n";
+}  // namespace
+
+class ConfigTestFromFile : public ::testing::Test {
+ protected:
+  void SetUp() override {
+    FILE* fp = fopen(SIMPLE_CONFIG_FILE, "wt");
+    fwrite(SIMPLE_CONFIG, 1, sizeof(SIMPLE_CONFIG), fp);
+    fclose(fp);
+  }
+};
+
+TEST(ConfigTestFromString, test_simple_config) {
+  ConfigFile config;
+  config.parseFromString(SIMPLE_CONFIG);
+  EXPECT_FALSE(config.hasKey("UNKNOWN_VALUE"));
+  EXPECT_FALSE(config.hasKey("COMMENTED_OUT_VALUE"));
+  EXPECT_TRUE(config.hasKey("NUM_VALUE"));
+  EXPECT_TRUE(config.hasKey("STRING_VALUE"));
+  EXPECT_TRUE(config.hasKey("BYTES_VALUE"));
+}
+
+TEST(ConfigTestFromString, test_simple_values) {
+  ConfigFile config;
+  config.parseFromString(SIMPLE_CONFIG);
+  EXPECT_EQ(config.getUnsigned("NUM_VALUE"), 42u);
+  EXPECT_EQ(config.getString("STRING_VALUE"), "Hello World!");
+  auto bytes = config.getBytes("BYTES_VALUE");
+  EXPECT_EQ(bytes.size(), 5u);
+  EXPECT_EQ(bytes[0], 10);
+  EXPECT_EQ(bytes[1], 11);
+  EXPECT_EQ(bytes[2], 12);
+  EXPECT_EQ(bytes[3], 255);
+  EXPECT_EQ(bytes[4], 0);
+}
+
+TEST(ConfigTestFromString, test_invalid_configs) {
+  ConfigFile config1;
+  EXPECT_DEATH(config1.parseFromString(INVALID_CONFIG1), "");
+  ConfigFile config2;
+  EXPECT_DEATH(config2.parseFromString(INVALID_CONFIG2), "");
+  ConfigFile config3;
+  EXPECT_DEATH(config3.parseFromString(INVALID_CONFIG3), "");
+  ConfigFile config4;
+  EXPECT_DEATH(config4.parseFromString(INVALID_CONFIG4), "");
+  ConfigFile config5;
+  EXPECT_DEATH(config5.parseFromString(INVALID_CONFIG5), "");
+}
+
+TEST(ConfigTestFromString, test_clear) {
+  ConfigFile config;
+  EXPECT_FALSE(config.hasKey("NUM_VALUE"));
+  config.parseFromString(SIMPLE_CONFIG);
+  EXPECT_TRUE(config.hasKey("NUM_VALUE"));
+  EXPECT_EQ(config.getUnsigned("NUM_VALUE"), 42u);
+  config.clear();
+  EXPECT_FALSE(config.hasKey("NUM_VALUE"));
+  EXPECT_DEATH(config.getUnsigned("NUM_VALUE"), "");
+}
+
+TEST(ConfigTestFromString, test_isEmpty) {
+  ConfigFile config;
+  EXPECT_TRUE(config.isEmpty());
+  config.parseFromString(SIMPLE_CONFIG);
+  EXPECT_FALSE(config.isEmpty());
+  config.clear();
+  EXPECT_TRUE(config.isEmpty());
+}
+
+TEST_F(ConfigTestFromFile, test_file_based_config) {
+  ConfigFile config;
+  config.parseFromFile(SIMPLE_CONFIG_FILE);
+  EXPECT_FALSE(config.hasKey("UNKNOWN_VALUE"));
+  EXPECT_EQ(config.getUnsigned("NUM_VALUE"), 42u);
+  EXPECT_EQ(config.getString("STRING_VALUE"), "Hello World!");
+  auto bytes = config.getBytes("BYTES_VALUE");
+  EXPECT_EQ(bytes.size(), 5u);
+  EXPECT_EQ(bytes[0], 10);
+  EXPECT_EQ(bytes[1], 11);
+  EXPECT_EQ(bytes[2], 12);
+  EXPECT_EQ(bytes[3], 255);
+  EXPECT_EQ(bytes[4], 0);
+}
diff --git a/utils/test/ringbuffer_test.cc b/utils/test/ringbuffer_test.cc
new file mode 100644
index 0000000..bebf8a2
--- /dev/null
+++ b/utils/test/ringbuffer_test.cc
@@ -0,0 +1,138 @@
+#include <gtest/gtest.h>
+
+#include <ringbuffer.h>
+
+TEST(RingbufferTest, test_new_simple) {
+  ringbuffer_t* rb = ringbuffer_init(4096);
+  ASSERT_TRUE(rb != NULL);
+  EXPECT_EQ((size_t)4096, ringbuffer_available(rb));
+  EXPECT_EQ((size_t)0, ringbuffer_size(rb));
+  ringbuffer_free(rb);
+}
+
+TEST(RingbufferTest, test_insert_basic) {
+  ringbuffer_t* rb = ringbuffer_init(16);
+
+  uint8_t buffer[10] = {0x01, 0x02, 0x03, 0x04, 0x05,
+                        0x06, 0x07, 0x08, 0x09, 0x0A};
+  ringbuffer_insert(rb, buffer, 10);
+  EXPECT_EQ((size_t)10, ringbuffer_size(rb));
+  EXPECT_EQ((size_t)6, ringbuffer_available(rb));
+
+  uint8_t peek[10] = {0};
+  size_t peeked = ringbuffer_peek(rb, 0, peek, 10);
+  EXPECT_EQ((size_t)10, ringbuffer_size(rb));  // Ensure size doesn't change
+  EXPECT_EQ((size_t)6, ringbuffer_available(rb));
+  EXPECT_EQ((size_t)10, peeked);
+  ASSERT_TRUE(0 == memcmp(buffer, peek, peeked));
+
+  ringbuffer_free(rb);
+}
+
+TEST(RingbufferTest, test_insert_full) {
+  ringbuffer_t* rb = ringbuffer_init(5);
+
+  uint8_t aa[] = {0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA};
+  uint8_t bb[] = {0xBB, 0xBB, 0xBB, 0xBB, 0xBB};
+  uint8_t peek[5] = {0};
+
+  size_t added = ringbuffer_insert(rb, aa, 7);
+  EXPECT_EQ((size_t)5, added);
+  EXPECT_EQ((size_t)0, ringbuffer_available(rb));
+  EXPECT_EQ((size_t)5, ringbuffer_size(rb));
+
+  added = ringbuffer_insert(rb, bb, 5);
+  EXPECT_EQ((size_t)0, added);
+  EXPECT_EQ((size_t)0, ringbuffer_available(rb));
+  EXPECT_EQ((size_t)5, ringbuffer_size(rb));
+
+  size_t peeked = ringbuffer_peek(rb, 0, peek, 5);
+  EXPECT_EQ((size_t)5, peeked);
+  EXPECT_EQ((size_t)0, ringbuffer_available(rb));
+  EXPECT_EQ((size_t)5, ringbuffer_size(rb));
+
+  ASSERT_TRUE(0 == memcmp(aa, peek, peeked));
+
+  ringbuffer_free(rb);
+}
+
+TEST(RingbufferTest, test_multi_insert_delete) {
+  ringbuffer_t* rb = ringbuffer_init(16);
+  EXPECT_EQ((size_t)16, ringbuffer_available(rb));
+  EXPECT_EQ((size_t)0, ringbuffer_size(rb));
+
+  // Insert some bytes
+
+  uint8_t aa[] = {0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA};
+  size_t added = ringbuffer_insert(rb, aa, sizeof(aa));
+  EXPECT_EQ((size_t)8, added);
+  EXPECT_EQ((size_t)8, ringbuffer_available(rb));
+  EXPECT_EQ((size_t)8, ringbuffer_size(rb));
+
+  uint8_t bb[] = {0xBB, 0xBB, 0xBB, 0xBB, 0xBB};
+  ringbuffer_insert(rb, bb, sizeof(bb));
+  EXPECT_EQ((size_t)3, ringbuffer_available(rb));
+  EXPECT_EQ((size_t)13, ringbuffer_size(rb));
+
+  uint8_t content[] = {0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
+                       0xAA, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB};
+  uint8_t peek[16] = {0};
+  size_t peeked = ringbuffer_peek(rb, 0, peek, 16);
+  EXPECT_EQ((size_t)13, peeked);
+  ASSERT_TRUE(0 == memcmp(content, peek, peeked));
+
+  // Delete some bytes
+
+  ringbuffer_delete(rb, sizeof(aa));
+  EXPECT_EQ((size_t)11, ringbuffer_available(rb));
+  EXPECT_EQ((size_t)5, ringbuffer_size(rb));
+
+  // Add some more to wrap buffer
+
+  uint8_t cc[] = {0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC};
+  ringbuffer_insert(rb, cc, sizeof(cc));
+  EXPECT_EQ((size_t)2, ringbuffer_available(rb));
+  EXPECT_EQ((size_t)14, ringbuffer_size(rb));
+
+  uint8_t content2[] = {0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xCC, 0xCC};
+  peeked = ringbuffer_peek(rb, 0, peek, 7);
+  EXPECT_EQ((size_t)7, peeked);
+  ASSERT_TRUE(0 == memcmp(content2, peek, peeked));
+
+  // Pop buffer
+
+  memset(peek, 0, 16);
+  size_t popped = ringbuffer_pop(rb, peek, 7);
+  EXPECT_EQ((size_t)7, popped);
+  EXPECT_EQ((size_t)9, ringbuffer_available(rb));
+  ASSERT_TRUE(0 == memcmp(content2, peek, peeked));
+
+  // Add more again to check head motion
+
+  uint8_t dd[] = {0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD};
+  added = ringbuffer_insert(rb, dd, sizeof(dd));
+  EXPECT_EQ((size_t)8, added);
+  EXPECT_EQ((size_t)1, ringbuffer_available(rb));
+
+  // Delete everything
+
+  ringbuffer_delete(rb, 16);
+  EXPECT_EQ((size_t)16, ringbuffer_available(rb));
+  EXPECT_EQ((size_t)0, ringbuffer_size(rb));
+
+  // Add small token
+
+  uint8_t ae[] = {0xAE, 0xAE, 0xAE};
+  added = ringbuffer_insert(rb, ae, sizeof(ae));
+  EXPECT_EQ((size_t)13, ringbuffer_available(rb));
+
+  // Get everything
+
+  popped = ringbuffer_pop(rb, peek, 16);
+  EXPECT_EQ(added, popped);
+  EXPECT_EQ((size_t)16, ringbuffer_available(rb));
+  EXPECT_EQ((size_t)0, ringbuffer_size(rb));
+  ASSERT_TRUE(0 == memcmp(ae, peek, popped));
+
+  ringbuffer_free(rb);
+}