Convert files from C to C++
am: 7dab0e5791

Change-Id: I1c06696dc125a9776ecc263b609fba503c502c66
diff --git a/src/Android.bp b/src/Android.bp
index 39d3007..aaa1835 100644
--- a/src/Android.bp
+++ b/src/Android.bp
@@ -39,26 +39,20 @@
         "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",
     ],
 }
diff --git a/src/adaptation/CrcChecksum.cpp b/src/adaptation/CrcChecksum.cc
similarity index 100%
rename from src/adaptation/CrcChecksum.cpp
rename to src/adaptation/CrcChecksum.cc
diff --git a/src/adaptation/NfcAdaptation.cpp b/src/adaptation/NfcAdaptation.cc
similarity index 98%
rename from src/adaptation/NfcAdaptation.cpp
rename to src/adaptation/NfcAdaptation.cc
index 42bf55f..f11521f 100644
--- a/src/adaptation/NfcAdaptation.cpp
+++ b/src/adaptation/NfcAdaptation.cc
@@ -25,14 +25,14 @@
 #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"
+#include "nfca_version.h"
 
 #undef LOG_TAG
 #define LOG_TAG "NfcAdaptation"
@@ -48,10 +48,10 @@
 using android::hardware::nfc::V1_0::INfcClientCallback;
 using android::hardware::hidl_vec;
 
-extern "C" void GKI_shutdown();
+extern 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 void verify_stack_non_volatile_store();
+extern void delete_stack_non_volatile_store(bool forceDelete);
 
 NfcAdaptation* NfcAdaptation::mpInstance = NULL;
 ThreadMutex NfcAdaptation::sLock;
diff --git a/src/adaptation/OverrideLog.cpp b/src/adaptation/OverrideLog.cc
similarity index 100%
rename from src/adaptation/OverrideLog.cpp
rename to src/adaptation/OverrideLog.cc
diff --git a/src/adaptation/android_logmsg.cpp b/src/adaptation/android_logmsg.cc
similarity index 100%
rename from src/adaptation/android_logmsg.cpp
rename to src/adaptation/android_logmsg.cc
diff --git a/src/adaptation/config.cpp b/src/adaptation/config.cc
similarity index 97%
rename from src/adaptation/config.cpp
rename to src/adaptation/config.cc
index 8085daa..b2ebd72 100644
--- a/src/adaptation/config.cpp
+++ b/src/adaptation/config.cc
@@ -499,8 +499,8 @@
     m_list.push_back(pParam);
     return;
   }
-  for (list<const CNfcParam *>::iterator it = m_list.begin(),
-                                         itEnd = m_list.end();
+  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);
@@ -521,8 +521,8 @@
 void CNfcConfig::moveFromList() {
   if (m_list.size() == 0) return;
 
-  for (list<const CNfcParam *>::iterator it = m_list.begin(),
-                                         itEnd = m_list.end();
+  for (list<const CNfcParam*>::iterator it = m_list.begin(),
+                                        itEnd = m_list.end();
        it != itEnd; ++it)
     push_back(*it);
   m_list.clear();
@@ -600,7 +600,7 @@
 ** Returns:     none
 **
 *******************************************************************************/
-extern "C" int GetStrValue(const char* name, char* pValue, unsigned long l) {
+extern int GetStrValue(const char* name, char* pValue, unsigned long l) {
   size_t len = l;
   CNfcConfig& rConfig = CNfcConfig::GetInstance();
 
@@ -617,7 +617,7 @@
 ** Returns:     none
 **
 *******************************************************************************/
-extern "C" int GetNumValue(const char* name, void* pValue, unsigned long len) {
+extern int GetNumValue(const char* name, void* pValue, unsigned long len) {
   if (!pValue) return false;
 
   CNfcConfig& rConfig = CNfcConfig::GetInstance();
diff --git a/src/adaptation/libmain.c b/src/adaptation/libmain.cc
similarity index 100%
rename from src/adaptation/libmain.c
rename to src/adaptation/libmain.cc
diff --git a/src/gki/common/gki.h b/src/gki/common/gki.h
index 1458e32..f510070 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"
 
@@ -348,10 +350,6 @@
 ** Function prototypes
 */
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 /* Task management
 */
 extern uint8_t GKI_create_task(TASKPTR, uint8_t, int8_t*, uint16_t*, uint16_t,
@@ -454,10 +452,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 98%
rename from src/gki/common/gki_buffer.c
rename to src/gki/common/gki_buffer.cc
index 3f95093..f03fa1e 100644
--- a/src/gki/common/gki_buffer.c
+++ b/src/gki/common/gki_buffer.cc
@@ -94,7 +94,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 +248,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;
@@ -335,8 +334,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;
@@ -454,7 +452,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 +476,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;
 
diff --git a/src/gki/common/gki_common.h b/src/gki/common/gki_common.h
index 8f0cc7a..567cfe8 100644
--- a/src/gki/common/gki_common.h
+++ b/src/gki/common/gki_common.h
@@ -275,10 +275,6 @@
 
 } tGKI_COM_CB;
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 /* Internal GKI function prototypes
 */
 extern bool gki_chk_buf_damage(void*);
@@ -294,8 +290,4 @@
 extern void OSIntEnter(void);
 extern void OSIntExit(void);
 
-#ifdef __cplusplus
-}
-#endif
-
 #endif
diff --git a/src/gki/common/gki_time.c b/src/gki/common/gki_time.cc
similarity index 100%
rename from src/gki/common/gki_time.c
rename to src/gki/common/gki_time.cc
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 98%
rename from src/gki/ulinux/gki_ulinux.c
rename to src/gki/ulinux/gki_ulinux.cc
index cb02add..79fdb48 100644
--- a/src/gki/ulinux/gki_ulinux.c
+++ b/src/gki/ulinux/gki_ulinux.cc
@@ -86,7 +86,7 @@
 ** 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",
@@ -101,7 +101,7 @@
   GKI_TRACE_ERROR_1("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 */
 
@@ -147,7 +147,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); */
 
@@ -250,8 +250,8 @@
   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);
@@ -293,8 +293,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;
@@ -917,7 +917,7 @@
 **
 *******************************************************************************/
 
-void GKI_exception(uint16_t code, char* msg) {
+void GKI_exception(uint16_t code, std::string msg) {
   uint8_t task_id;
   int i = 0;
 
@@ -929,14 +929,14 @@
                       gki_cb.com.OSRdyTbl[task_id]);
   }
 
-  GKI_TRACE_ERROR_2("GKI_exception %d %s", code, msg);
+  GKI_TRACE_ERROR_2("GKI_exception %d %s", code, msg.c_str());
   GKI_TRACE_ERROR_0(
       "********************************************************************");
-  GKI_TRACE_ERROR_2("* GKI_exception(): %d %s", code, msg);
+  GKI_TRACE_ERROR_2("* GKI_exception(): %d %s", code, msg.c_str());
   GKI_TRACE_ERROR_0(
       "********************************************************************");
 
-  GKI_TRACE_ERROR_2("GKI_exception %d %s done", code, msg);
+  GKI_TRACE_ERROR_2("GKI_exception %d %s done", code, msg.c_str());
 
   return;
 }
diff --git a/src/hal/include/gki_hal_target.h b/src/hal/include/gki_hal_target.h
index 4b065c7..19363f9 100644
--- a/src/hal/include/gki_hal_target.h
+++ b/src/hal/include/gki_hal_target.h
@@ -252,14 +252,6 @@
       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/hal/include/nci_defs.h
index c18eb20..966bc3c 100644
--- a/src/hal/include/nci_defs.h
+++ b/src/hal/include/nci_defs.h
@@ -27,10 +27,6 @@
 
 #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.
@@ -839,8 +835,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/hal/include/nfc_hal_api.h b/src/hal/include/nfc_hal_api.h
index e19a8c5..b7cc0af 100644
--- a/src/hal/include/nfc_hal_api.h
+++ b/src/hal/include/nfc_hal_api.h
@@ -99,9 +99,6 @@
 /*******************************************************************************
 ** HAL API Function Prototypes
 *******************************************************************************/
-#ifdef __cplusplus
-extern "C" {
-#endif
 
 /*******************************************************************************
 **
@@ -241,8 +238,4 @@
 *******************************************************************************/
 uint8_t HAL_NfcGetMaxNfcee(void);
 
-#ifdef __cplusplus
-}
-#endif
-
 #endif /* NFC_HAL_API_H  */
diff --git a/src/hal/int/nfc_hal_int.h b/src/hal/int/nfc_hal_int.h
index 4298205..9327a08 100644
--- a/src/hal/int/nfc_hal_int.h
+++ b/src/hal/int/nfc_hal_int.h
@@ -32,10 +32,6 @@
 #include "nfc_hal_int_api.h"
 #include "nfc_hal_target.h"
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 /****************************************************************************
 ** NFC HAL TASK transport definitions
 ****************************************************************************/
@@ -543,8 +539,4 @@
 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
index ffaf81a..e0408f1 100644
--- a/src/hal/int/nfc_hal_int_api.h
+++ b/src/hal/int/nfc_hal_int_api.h
@@ -112,10 +112,6 @@
 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
@@ -300,8 +296,4 @@
 *******************************************************************************/
 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
index 0a98edf..73d1123 100644
--- a/src/hal/int/nfc_hal_nv_ci.h
+++ b/src/hal/int/nfc_hal_nv_ci.h
@@ -33,9 +33,6 @@
 /*****************************************************************************
 **  Function Declarations
 *****************************************************************************/
-#ifdef __cplusplus
-extern "C" {
-#endif
 
 /*******************************************************************************
 **
@@ -81,10 +78,6 @@
 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/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/_OverrideLog.h b/src/include/_OverrideLog.h
index dd412ab..7f28f3d 100644
--- a/src/include/_OverrideLog.h
+++ b/src/include/_OverrideLog.h
@@ -34,10 +34,6 @@
 #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 */
@@ -64,7 +60,3 @@
 *******************************************************************************/
 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..e033074 100644
--- a/src/include/android_logmsg.h
+++ b/src/include/android_logmsg.h
@@ -20,10 +20,6 @@
  * 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"
 
@@ -64,7 +60,3 @@
 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
index e4d3165..a9177b7 100644
--- a/src/include/bt_trace.h
+++ b/src/include/bt_trace.h
@@ -18,10 +18,6 @@
 #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;
@@ -43,10 +39,6 @@
                      uintptr_t p2, uintptr_t p3, uintptr_t p4, uintptr_t p5,
                      uintptr_t p6);
 
-#ifdef __cplusplus
-}
-#endif
-
 /******************************************************************************
 **
 ** Trace configurable parameters
diff --git a/src/include/buildcfg.h b/src/include/buildcfg.h
index 932db88..3149e06 100644
--- a/src/include/buildcfg.h
+++ b/src/include/buildcfg.h
@@ -54,10 +54,6 @@
 #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, ...);
@@ -82,7 +78,4 @@
 
 #endif
 
-#ifdef __cplusplus
-};
-#endif
 #endif
diff --git a/src/include/config.h b/src/include/config.h
index 23c80fb..ff5d705 100644
--- a/src/include/config.h
+++ b/src/include/config.h
@@ -18,17 +18,9 @@
 #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"
diff --git a/src/include/gki_target.h b/src/include/gki_target.h
index 6413124..4233bdf 100644
--- a/src/include/gki_target.h
+++ b/src/include/gki_target.h
@@ -398,14 +398,6 @@
       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/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 100%
rename from src/nfa/ce/nfa_ce_act.c
rename to src/nfa/ce/nfa_ce_act.cc
diff --git a/src/nfa/ce/nfa_ce_api.c b/src/nfa/ce/nfa_ce_api.cc
similarity index 100%
rename from src/nfa/ce/nfa_ce_api.c
rename to src/nfa/ce/nfa_ce_api.cc
diff --git a/src/nfa/ce/nfa_ce_main.c b/src/nfa/ce/nfa_ce_main.cc
similarity index 96%
rename from src/nfa/ce/nfa_ce_main.c
rename to src/nfa/ce/nfa_ce_main.cc
index 922d82e..f9198a9 100644
--- a/src/nfa/ce/nfa_ce_main.c
+++ b/src/nfa/ce/nfa_ce_main.cc
@@ -21,7 +21,7 @@
  *  This is the main implementation file for the NFA_CE
  *
  ******************************************************************************/
-#include <string.h>
+#include <string>
 #include "nfa_ce_api.h"
 #include "nfa_ce_int.h"
 #include "nfa_dm_int.h"
@@ -57,7 +57,7 @@
 ** Local function prototypes
 *****************************************************************************/
 #if (BT_TRACE_VERBOSE == TRUE)
-static char* nfa_ce_evt_2_str(uint16_t event);
+static std::string nfa_ce_evt_2_str(uint16_t event);
 #endif
 
 /*******************************************************************************
@@ -172,7 +172,7 @@
 
 #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_evt_2_str(p_msg->event).c_str(), p_msg->event,
                    nfa_ce_cb.flags);
 #else
   NFA_TRACE_EVENT2("nfa_ce_handle_event event: 0x%x, flags: %08x", p_msg->event,
@@ -201,26 +201,20 @@
 ** 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";
   }
diff --git a/src/nfa/dm/nfa_dm_act.c b/src/nfa/dm/nfa_dm_act.cc
similarity index 99%
rename from src/nfa/dm/nfa_dm_act.c
rename to src/nfa/dm/nfa_dm_act.cc
index e3964c8..47cd203 100644
--- a/src/nfa/dm/nfa_dm_act.c
+++ b/src/nfa/dm/nfa_dm_act.cc
@@ -264,7 +264,7 @@
 
 #if (BT_TRACE_VERBOSE == TRUE)
   NFA_TRACE_DEBUG2("nfa_dm_nfc_response_cback () %s(0x%x)",
-                   nfa_dm_nfc_revt_2_str(event), event);
+                   nfa_dm_nfc_revt_2_str(event).c_str(), event);
 #else
   NFA_TRACE_DEBUG1("nfa_dm_nfc_response_cback () event=0x%x", event);
 #endif
@@ -1823,62 +1823,44 @@
 ** 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";
-
     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 100%
rename from src/nfa/dm/nfa_dm_api.c
rename to src/nfa/dm/nfa_dm_api.cc
diff --git a/src/nfa/dm/nfa_dm_cfg.c b/src/nfa/dm/nfa_dm_cfg.cc
similarity index 100%
rename from src/nfa/dm/nfa_dm_cfg.c
rename to src/nfa/dm/nfa_dm_cfg.cc
diff --git a/src/nfa/dm/nfa_dm_discover.c b/src/nfa/dm/nfa_dm_discover.cc
similarity index 97%
rename from src/nfa/dm/nfa_dm_discover.c
rename to src/nfa/dm/nfa_dm_discover.cc
index e28af09..fabf7c2 100644
--- a/src/nfa/dm/nfa_dm_discover.c
+++ b/src/nfa/dm/nfa_dm_discover.cc
@@ -21,7 +21,7 @@
  *  function.
  *
  ******************************************************************************/
-#include <string.h>
+#include <string>
 #include "nci_hmsgs.h"
 #include "nfa_api.h"
 #include "nfa_dm_int.h"
@@ -58,8 +58,8 @@
 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);
+static std::string nfa_dm_disc_state_2_str(uint8_t state);
+static std::string nfa_dm_disc_event_2_str(uint8_t event);
 #endif
 
 typedef struct nfa_dm_p2p_prio_logic {
@@ -1697,8 +1697,8 @@
   NFA_TRACE_DEBUG5(
       "nfa_dm_disc_new_state (): 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(
@@ -2218,55 +2218,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);
@@ -2521,9 +2520,9 @@
   NFA_TRACE_DEBUG5(
       "nfa_dm_disc_sm_execute (): 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);
+      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);
 #else
   NFA_TRACE_DEBUG3(
       "nfa_dm_disc_sm_execute(): state: %d, event:%d disc_flags: 0x%x",
@@ -2579,7 +2578,7 @@
 #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),
+      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",
@@ -2810,7 +2809,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,42 +2848,33 @@
 ** 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 */
 
diff --git a/src/nfa/dm/nfa_dm_main.c b/src/nfa/dm/nfa_dm_main.cc
similarity index 98%
rename from src/nfa/dm/nfa_dm_main.c
rename to src/nfa/dm/nfa_dm_main.cc
index dbc51ba..b7c90e7 100644
--- a/src/nfa/dm/nfa_dm_main.c
+++ b/src/nfa/dm/nfa_dm_main.cc
@@ -22,7 +22,7 @@
  *
  ******************************************************************************/
 
-#include <string.h>
+#include <string>
 #include "nfa_api.h"
 #include "nfa_dm_int.h"
 #include "nfa_sys.h"
@@ -81,7 +81,7 @@
 ** Local function prototypes
 *****************************************************************************/
 #if (BT_TRACE_VERBOSE == TRUE)
-static char* nfa_dm_evt_2_str(uint16_t event);
+static std::string nfa_dm_evt_2_str(uint16_t event);
 #endif
 /*******************************************************************************
 **
@@ -119,7 +119,7 @@
 
 #if (BT_TRACE_VERBOSE == TRUE)
   NFA_TRACE_EVENT2("nfa_dm_evt_hdlr event: %s (0x%02x)",
-                   nfa_dm_evt_2_str(event), event);
+                   nfa_dm_evt_2_str(event).c_str(), event);
 #else
   NFA_TRACE_EVENT1("nfa_dm_evt_hdlr event: 0x%x", event);
 #endif
@@ -454,80 +454,56 @@
 ** 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";
   }
diff --git a/src/nfa/dm/nfa_dm_ndef.c b/src/nfa/dm/nfa_dm_ndef.cc
similarity index 100%
rename from src/nfa/dm/nfa_dm_ndef.c
rename to src/nfa/dm/nfa_dm_ndef.cc
diff --git a/src/nfa/ee/nfa_ee_act.c b/src/nfa/ee/nfa_ee_act.cc
similarity index 99%
rename from src/nfa/ee/nfa_ee_act.c
rename to src/nfa/ee/nfa_ee_act.cc
index c8c4944..275926b 100644
--- a/src/nfa/ee/nfa_ee_act.c
+++ b/src/nfa/ee/nfa_ee_act.cc
@@ -97,7 +97,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;
@@ -112,7 +112,8 @@
     yy += sprintf(&buff[yy], "%02x ", *p);
     p++;
   }
-  NFA_TRACE_DEBUG4("%s id:0x%x len=%d aid:%s", p_str, id, aid_len, buff);
+  NFA_TRACE_DEBUG4("%s id:0x%x len=%d aid:%s", p_str.c_str(), id, aid_len,
+                   buff);
 }
 
 /*******************************************************************************
diff --git a/src/nfa/ee/nfa_ee_api.c b/src/nfa/ee/nfa_ee_api.cc
similarity index 100%
rename from src/nfa/ee/nfa_ee_api.c
rename to src/nfa/ee/nfa_ee_api.cc
diff --git a/src/nfa/ee/nfa_ee_main.c b/src/nfa/ee/nfa_ee_main.cc
similarity index 97%
rename from src/nfa/ee/nfa_ee_main.c
rename to src/nfa/ee/nfa_ee_main.cc
index b3e957d..5cf9ccb 100644
--- a/src/nfa/ee/nfa_ee_main.c
+++ b/src/nfa/ee/nfa_ee_main.cc
@@ -21,7 +21,7 @@
  *  This is the main implementation file for the NFA EE.
  *
  ******************************************************************************/
-#include <string.h>
+#include <string>
 #include "config.h"
 #include "nfa_dm_int.h"
 #include "nfa_ee_int.h"
@@ -525,23 +525,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 +549,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";
@@ -626,10 +621,10 @@
   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);
+  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).c_str(), p_evt_data->hdr.event,
+      nfa_ee_sm_st_2_str(nfa_ee_cb.em_state).c_str(), 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);
diff --git a/src/nfa/hci/nfa_hci_act.c b/src/nfa/hci/nfa_hci_act.cc
similarity index 99%
rename from src/nfa/hci/nfa_hci_act.c
rename to src/nfa/hci/nfa_hci_act.cc
index 9226f35..b65256f 100644
--- a/src/nfa/hci/nfa_hci_act.c
+++ b/src/nfa/hci/nfa_hci_act.cc
@@ -1322,7 +1322,7 @@
   NFA_TRACE_DEBUG4(
       "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(
diff --git a/src/nfa/hci/nfa_hci_api.c b/src/nfa/hci/nfa_hci_api.cc
similarity index 100%
rename from src/nfa/hci/nfa_hci_api.c
rename to src/nfa/hci/nfa_hci_api.cc
diff --git a/src/nfa/hci/nfa_hci_ci.c b/src/nfa/hci/nfa_hci_ci.cc
similarity index 100%
rename from src/nfa/hci/nfa_hci_ci.c
rename to src/nfa/hci/nfa_hci_ci.cc
diff --git a/src/nfa/hci/nfa_hci_main.c b/src/nfa/hci/nfa_hci_main.cc
similarity index 98%
rename from src/nfa/hci/nfa_hci_main.c
rename to src/nfa/hci/nfa_hci_main.cc
index 4cf2208..db40192 100644
--- a/src/nfa/hci/nfa_hci_main.c
+++ b/src/nfa/hci/nfa_hci_main.cc
@@ -82,7 +82,6 @@
 **
 *******************************************************************************/
 void nfa_hci_ee_info_cback(tNFA_EE_DISC_STS status) {
-
   NFA_TRACE_DEBUG1("nfa_hci_ee_info_cback (): %d", status);
 
   switch (status) {
@@ -720,7 +719,7 @@
   pkt_len = p_pkt->len;
 
 #if (BT_TRACE_PROTOCOL == TRUE)
-  DispHcp(p, pkt_len, true, (bool)!nfa_hci_cb.assembling);
+  DispHcp(p, pkt_len, true);
 #endif
 
   chaining_bit = ((*p) >> 0x07) & 0x01;
@@ -1108,10 +1107,11 @@
   tNFA_HCI_EVENT_DATA* p_evt_data = (tNFA_HCI_EVENT_DATA*)p_msg;
 
 #if (BT_TRACE_VERBOSE == TRUE)
-  NFA_TRACE_EVENT4(
-      "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);
+  NFA_TRACE_EVENT4("nfa_hci_evt_hdlr state: %s (%d) event: %s (0x%04x)",
+                   nfa_hciu_get_state_name(nfa_hci_cb.hci_state).c_str(),
+                   nfa_hci_cb.hci_state,
+                   nfa_hciu_get_event_name(p_evt_data->hdr.event).c_str(),
+                   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);
diff --git a/src/nfa/hci/nfa_hci_utils.c b/src/nfa/hci/nfa_hci_utils.cc
similarity index 92%
rename from src/nfa/hci/nfa_hci_utils.c
rename to src/nfa/hci/nfa_hci_utils.cc
index 75a67b2..11315d5 100644
--- a/src/nfa/hci/nfa_hci_utils.c
+++ b/src/nfa/hci/nfa_hci_utils.cc
@@ -21,7 +21,7 @@
  *  This file contains the utility functions for the NFA HCI.
  *
  ******************************************************************************/
-#include <string.h>
+#include <string>
 #include "nfa_dm_int.h"
 #include "nfa_hci_api.h"
 #include "nfa_hci_defs.h"
@@ -353,8 +353,7 @@
       }
 
 #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));
+      DispHcp(((uint8_t*)(p_buf + 1) + p_buf->offset), p_buf->len, false);
 #endif
 
       if (HCI_LOOPBACK_DEBUG == NFA_HCI_DEBUG_ON)
@@ -1115,34 +1114,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 +1154,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 +1176,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 +1212,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 +1266,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 +1304,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,35 +1336,32 @@
 ** 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
diff --git a/src/nfa/include/nfa_api.h b/src/nfa/include/nfa_api.h
index 552b7ba..7646ef3 100644
--- a/src/nfa/include/nfa_api.h
+++ b/src/nfa/include/nfa_api.h
@@ -803,9 +803,6 @@
 /*****************************************************************************
 **  External Function Declarations
 *****************************************************************************/
-#ifdef __cplusplus
-extern "C" {
-#endif
 
 /*******************************************************************************
 **
@@ -1460,8 +1457,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/include/nfa_ee_api.h b/src/nfa/include/nfa_ee_api.h
index 28661d2..e9e7022 100644
--- a/src/nfa/include/nfa_ee_api.h
+++ b/src/nfa/include/nfa_ee_api.h
@@ -232,9 +232,6 @@
 /*****************************************************************************
 **  External Function Declarations
 *****************************************************************************/
-#ifdef __cplusplus
-extern "C" {
-#endif
 
 /*******************************************************************************
 **
@@ -493,8 +490,4 @@
 *******************************************************************************/
 extern tNFA_STATUS NFA_EeDisconnect(tNFA_HANDLE ee_handle);
 
-#ifdef __cplusplus
-}
-#endif
-
 #endif /* NFA_EE_API_H */
diff --git a/src/nfa/include/nfa_hci_api.h b/src/nfa/include/nfa_hci_api.h
index 2a40f15..d432e40 100644
--- a/src/nfa/include/nfa_hci_api.h
+++ b/src/nfa/include/nfa_hci_api.h
@@ -291,9 +291,6 @@
 /*****************************************************************************
 **  External Function Declarations
 *****************************************************************************/
-#ifdef __cplusplus
-extern "C" {
-#endif
 
 /*******************************************************************************
 **
@@ -612,8 +609,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_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..59ff8e6 100644
--- a/src/nfa/include/nfa_nv_ci.h
+++ b/src/nfa/include/nfa_nv_ci.h
@@ -48,9 +48,6 @@
 /*****************************************************************************
 **  Function Declarations
 *****************************************************************************/
-#ifdef __cplusplus
-extern "C" {
-#endif
 
 /*******************************************************************************
 **
@@ -95,8 +92,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_p2p_api.h b/src/nfa/include/nfa_p2p_api.h
index ee1be53..18cc6a6 100644
--- a/src/nfa/include/nfa_p2p_api.h
+++ b/src/nfa/include/nfa_p2p_api.h
@@ -188,9 +188,6 @@
 /*****************************************************************************
 **  External Function Declarations
 *****************************************************************************/
-#ifdef __cplusplus
-extern "C" {
-#endif
 
 /*******************************************************************************
 **
@@ -571,8 +568,4 @@
 *******************************************************************************/
 extern uint8_t NFA_P2pSetTraceLevel(uint8_t new_level);
 
-#ifdef __cplusplus
-}
-#endif
-
 #endif /* NFA_P2P_API_H */
diff --git a/src/nfa/include/nfa_rw_api.h b/src/nfa/include/nfa_rw_api.h
index f4eaded..c47ae62 100644
--- a/src/nfa/include/nfa_rw_api.h
+++ b/src/nfa/include/nfa_rw_api.h
@@ -54,9 +54,6 @@
 /*****************************************************************************
 **  External Function Declarations
 *****************************************************************************/
-#ifdef __cplusplus
-extern "C" {
-#endif
 
 /*******************************************************************************
 **
@@ -748,8 +745,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/include/nfa_snep_api.h b/src/nfa/include/nfa_snep_api.h
index e63f19a..604fff8 100644
--- a/src/nfa/include/nfa_snep_api.h
+++ b/src/nfa/include/nfa_snep_api.h
@@ -202,9 +202,6 @@
 /*****************************************************************************
 **  External Function Declarations
 *****************************************************************************/
-#ifdef __cplusplus
-extern "C" {
-#endif
 
 /*******************************************************************************
 **
@@ -482,8 +479,4 @@
 *******************************************************************************/
 extern uint8_t NFA_SnepSetTraceLevel(uint8_t new_level);
 
-#ifdef __cplusplus
-}
-#endif
-
 #endif /* NFA_P2P_API_H */
diff --git a/src/nfa/int/nfa_dm_int.h b/src/nfa/int/nfa_dm_int.h
index a527927..dc7e018 100644
--- a/src/nfa/int/nfa_dm_int.h
+++ b/src/nfa/int/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"
@@ -681,7 +682,7 @@
 #endif
 
 #if (BT_TRACE_VERBOSE == TRUE)
-char* nfa_dm_nfc_revt_2_str(tNFC_RESPONSE_EVT event);
+std::string nfa_dm_nfc_revt_2_str(tNFC_RESPONSE_EVT event);
 #endif
 
 #endif /* NFA_DM_INT_H */
diff --git a/src/nfa/int/nfa_hci_int.h b/src/nfa/int/nfa_hci_int.h
index 393e17b..23129dc 100644
--- a/src/nfa/int/nfa_hci_int.h
+++ b/src/nfa/int/nfa_hci_int.h
@@ -24,6 +24,7 @@
 #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"
@@ -525,14 +526,12 @@
                                      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);
+extern std::string nfa_hciu_evt_2_str(uint8_t pipe_id, uint8_t evt);
 #endif
 
 #endif /* NFA_HCI_INT_H */
diff --git a/src/nfa/int/nfa_p2p_int.h b/src/nfa/int/nfa_p2p_int.h
index cdbe781..9d27914 100644
--- a/src/nfa/int/nfa_p2p_int.h
+++ b/src/nfa/int/nfa_p2p_int.h
@@ -308,10 +308,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/int/nfa_sys.h b/src/nfa/int/nfa_sys.h
index 62472ca..4aa76d3 100644
--- a/src/nfa/int/nfa_sys.h
+++ b/src/nfa/int/nfa_sys.h
@@ -96,10 +96,6 @@
 **  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);
@@ -127,8 +123,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_ptim.h b/src/nfa/int/nfa_sys_ptim.h
index 0549f63..1582012 100644
--- a/src/nfa/int/nfa_sys_ptim.h
+++ b/src/nfa/int/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 100%
rename from src/nfa/p2p/nfa_p2p_act.c
rename to src/nfa/p2p/nfa_p2p_act.cc
diff --git a/src/nfa/p2p/nfa_p2p_api.c b/src/nfa/p2p/nfa_p2p_api.cc
similarity index 100%
rename from src/nfa/p2p/nfa_p2p_api.c
rename to src/nfa/p2p/nfa_p2p_api.cc
diff --git a/src/nfa/p2p/nfa_p2p_main.c b/src/nfa/p2p/nfa_p2p_main.cc
similarity index 98%
rename from src/nfa/p2p/nfa_p2p_main.c
rename to src/nfa/p2p/nfa_p2p_main.cc
index 2787634..77a4bd7 100644
--- a/src/nfa/p2p/nfa_p2p_main.c
+++ b/src/nfa/p2p/nfa_p2p_main.cc
@@ -21,7 +21,7 @@
  *  This is the main implementation file for the NFA P2P.
  *
  ******************************************************************************/
-#include <string.h>
+#include <string>
 #include "llcp_api.h"
 #include "llcp_defs.h"
 #include "nfa_dm_int.h"
@@ -51,7 +51,8 @@
 
 /* debug functions type */
 #if (BT_TRACE_VERBOSE == TRUE)
-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);
+static std::string nfa_p2p_evt_code(uint16_t evt_code);
 #endif
 
 /*****************************************************************************
@@ -730,8 +731,8 @@
 
 #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));
+                   nfa_p2p_llcp_state_code(nfa_p2p_cb.llcp_state).c_str(),
+                   nfa_p2p_evt_code(p_msg->hdr.event).c_str());
 #else
   P2P_TRACE_DEBUG2("nfa_p2p_evt_hdlr (): State 0x%02x, Event 0x%02x",
                    nfa_p2p_cb.llcp_state, p_msg->hdr.event);
@@ -759,7 +760,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 +782,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";
diff --git a/src/nfa/rw/nfa_rw_act.c b/src/nfa/rw/nfa_rw_act.cc
similarity index 99%
rename from src/nfa/rw/nfa_rw_act.c
rename to src/nfa/rw/nfa_rw_act.cc
index d369219..40086b9 100644
--- a/src/nfa/rw/nfa_rw_act.c
+++ b/src/nfa/rw/nfa_rw_act.cc
@@ -103,11 +103,11 @@
 
 #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));
+                   &p_rw_data->data.p_data->len,
+                   NFC_GetStatusName(p_rw_data->data.status).c_str());
 #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);
+                   &p_rw_data->data.p_data->len, p_rw_data->data.status);
 #endif
 
   /* Notify conn cback of NFA_DATA_EVT */
diff --git a/src/nfa/rw/nfa_rw_api.c b/src/nfa/rw/nfa_rw_api.cc
similarity index 100%
rename from src/nfa/rw/nfa_rw_api.c
rename to src/nfa/rw/nfa_rw_api.cc
diff --git a/src/nfa/rw/nfa_rw_main.c b/src/nfa/rw/nfa_rw_main.cc
similarity index 96%
rename from src/nfa/rw/nfa_rw_main.c
rename to src/nfa/rw/nfa_rw_main.cc
index e1b594b..e849030 100644
--- a/src/nfa/rw/nfa_rw_main.c
+++ b/src/nfa/rw/nfa_rw_main.cc
@@ -50,7 +50,7 @@
 ** Local function prototypes
 *****************************************************************************/
 #if (BT_TRACE_VERBOSE == TRUE)
-static char* nfa_rw_evt_2_str(uint16_t event);
+static std::string nfa_rw_evt_2_str(uint16_t event);
 #endif
 
 /*******************************************************************************
@@ -174,7 +174,7 @@
 
 #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_evt_2_str(p_msg->event).c_str(), p_msg->event,
                    nfa_rw_cb.flags);
 #else
   NFA_TRACE_EVENT2("nfa_rw_handle_event event: 0x%x, flags: %08x", p_msg->event,
@@ -200,23 +200,18 @@
 ** 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";
   }
diff --git a/src/nfa/sys/nfa_sys_cback.c b/src/nfa/sys/nfa_sys_cback.cc
similarity index 100%
rename from src/nfa/sys/nfa_sys_cback.c
rename to src/nfa/sys/nfa_sys_cback.cc
diff --git a/src/nfa/sys/nfa_sys_cfg.c b/src/nfa/sys/nfa_sys_cfg.cc
similarity index 100%
rename from src/nfa/sys/nfa_sys_cfg.c
rename to src/nfa/sys/nfa_sys_cfg.cc
diff --git a/src/nfa/sys/nfa_sys_main.c b/src/nfa/sys/nfa_sys_main.cc
similarity index 100%
rename from src/nfa/sys/nfa_sys_main.c
rename to src/nfa/sys/nfa_sys_main.cc
diff --git a/src/nfa/sys/nfa_sys_ptim.c b/src/nfa/sys/nfa_sys_ptim.cc
similarity index 100%
rename from src/nfa/sys/nfa_sys_ptim.c
rename to src/nfa/sys/nfa_sys_ptim.cc
diff --git a/src/nfc/include/llcp_api.h b/src/nfc/include/llcp_api.h
index 50b0740..c2e4f51 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"
 
@@ -222,9 +223,6 @@
 /*****************************************************************************
 **  External Function Declarations
 *****************************************************************************/
-#ifdef __cplusplus
-extern "C" {
-#endif
 
 /*******************************************************************************
 **
@@ -356,7 +354,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);
 
 /*******************************************************************************
@@ -695,8 +693,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/nci_hmsgs.h b/src/nfc/include/nci_hmsgs.h
index 8fba6a8..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"
 
@@ -72,8 +68,4 @@
 uint8_t nci_snd_nfcee_power_link_control(uint8_t nfcee_id, uint8_t pl_config);
 #endif
 
-#ifdef __cplusplus
-}
-#endif
-
 #endif /* NFC_NCI_MSGS_H */
diff --git a/src/nfc/include/ndef_utils.h b/src/nfc/include/ndef_utils.h
index 960185e..c70a787 100644
--- a/src/nfc/include/ndef_utils.h
+++ b/src/nfc/include/ndef_utils.h
@@ -77,10 +77,6 @@
 #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
 */
 /*******************************************************************************
@@ -403,9 +399,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 6dbd124..1e635d0 100644
--- a/src/nfc/include/nfc_api.h
+++ b/src/nfc/include/nfc_api.h
@@ -400,11 +400,7 @@
 #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 */
@@ -898,9 +894,6 @@
 /*****************************************************************************
 **  EXTERNAL FUNCTION DECLARATIONS
 *****************************************************************************/
-#ifdef __cplusplus
-extern "C" {
-#endif
 
 /*******************************************************************************
 **
@@ -1443,11 +1436,7 @@
 ** Returns          pointer to the name
 **
 *******************************************************************************/
-extern char* NFC_GetStatusName(tNFC_STATUS status);
-#endif
-
-#ifdef __cplusplus
-}
+extern std::string NFC_GetStatusName(tNFC_STATUS status);
 #endif
 
 #endif /* NFC_API_H */
diff --git a/src/nfc/int/ce_int.h b/src/nfc/int/ce_int.h
index 338d61f..70d7292 100644
--- a/src/nfc/int/ce_int.h
+++ b/src/nfc/int/ce_int.h
@@ -155,9 +155,6 @@
 /*****************************************************************************
 **  EXTERNAL FUNCTION DECLARATIONS
 *****************************************************************************/
-#ifdef __cplusplus
-extern "C" {
-#endif
 
 /* Global NFC data */
 extern tCE_CB ce_cb;
@@ -173,8 +170,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/int/llcp_int.h b/src/nfc/int/llcp_int.h
index fdf1c70..4135102 100644
--- a/src/nfc/int/llcp_int.h
+++ b/src/nfc/int/llcp_int.h
@@ -108,7 +108,7 @@
 
 typedef struct {
   uint8_t link_type;       /* logical link and/or data link                */
-  uint8_t* p_service_name; /* GKI buffer containing service name           */
+  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                */
@@ -285,10 +285,6 @@
 
 #endif
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 /*
 ** LLCP global data
 */
@@ -364,8 +360,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/int/nfc_int.h b/src/nfc/int/nfc_int.h
index 49ab99e..97238fa 100644
--- a/src/nfc/int/nfc_int.h
+++ b/src/nfc/int/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
 ****************************************************************************/
@@ -328,9 +324,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/rw_int.h b/src/nfc/int/rw_int.h
index 38958b2..0ccdd2d 100644
--- a/src/nfc/int/rw_int.h
+++ b/src/nfc/int/rw_int.h
@@ -720,10 +720,6 @@
 **  EXTERNAL FUNCTION DECLARATIONS
 *****************************************************************************/
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 /* Global NFC data */
 extern tRW_CB rw_cb;
 
@@ -788,8 +784,4 @@
 void rw_main_log_stats(void);
 #endif /* RW_STATS_INCLUDED */
 
-#ifdef __cplusplus
-}
-#endif
-
 #endif /* RW_INT_H_ */
diff --git a/src/nfc/llcp/llcp_api.c b/src/nfc/llcp/llcp_api.cc
similarity index 98%
rename from src/nfc/llcp/llcp_api.c
rename to src/nfc/llcp/llcp_api.cc
index 9d87ec0..ec6ddda 100644
--- a/src/nfc/llcp/llcp_api.c
+++ b/src/nfc/llcp/llcp_api.cc
@@ -24,6 +24,7 @@
 
 #include "llcp_api.h"
 #include <string.h>
+#include <string>
 #include "bt_types.h"
 #include "gki.h"
 #include "llcp_defs.h"
@@ -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;
@@ -367,7 +368,8 @@
 
   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));
+      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");
@@ -432,8 +434,8 @@
 
   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",
@@ -441,13 +443,13 @@
       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");
       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;
diff --git a/src/nfc/llcp/llcp_dlc.c b/src/nfc/llcp/llcp_dlc.cc
similarity index 97%
rename from src/nfc/llcp/llcp_dlc.c
rename to src/nfc/llcp/llcp_dlc.cc
index 0465a95..c551b82 100644
--- a/src/nfc/llcp/llcp_dlc.c
+++ b/src/nfc/llcp/llcp_dlc.cc
@@ -22,7 +22,7 @@
  *
  ******************************************************************************/
 
-#include <string.h>
+#include <string>
 #include "bt_types.h"
 #include "gki.h"
 #include "llcp_defs.h"
@@ -45,8 +45,8 @@
 extern unsigned char appl_dta_mode_flag;
 
 #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);
+static std::string llcp_dlsm_get_state_name(tLLCP_DLC_STATE state);
+static std::string llcp_dlsm_get_event_name(tLLCP_DLC_EVENT event);
 #endif
 
 /*******************************************************************************
@@ -65,8 +65,8 @@
 
 #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));
+                    llcp_dlsm_get_state_name(p_dlcb->state).c_str(),
+                    llcp_dlsm_get_event_name(event).c_str());
 #else
   LLCP_TRACE_EVENT3("DLC (0x%02X) - state: %d, evt: %d", p_dlcb->local_sap,
                     p_dlcb->state, event);
@@ -1393,20 +1393,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";
   }
 }
 
@@ -1419,41 +1419,36 @@
 ** 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 99%
rename from src/nfc/llcp/llcp_link.c
rename to src/nfc/llcp/llcp_link.cc
index 5fa6a41..4799016 100644
--- a/src/nfc/llcp/llcp_link.c
+++ b/src/nfc/llcp/llcp_link.cc
@@ -81,7 +81,7 @@
 
 /* debug functions type */
 #if (BT_TRACE_VERBOSE == TRUE)
-static char* llcp_pdu_type(uint8_t ptype);
+static std::string llcp_pdu_type(uint8_t ptype);
 #endif
 
 /*******************************************************************************
@@ -1146,7 +1146,7 @@
     LLCP_TRACE_DEBUG4(
         "llcp_link_proc_agf_pdu (): Rx DSAP:0x%x, PTYPE:%s (0x%x), SSAP:0x%x "
         "in AGF",
-        dsap, llcp_pdu_type(ptype), ptype, ssap);
+        dsap, llcp_pdu_type(ptype).c_str(), ptype, ssap);
 #endif
 
     if ((ptype == LLCP_PDU_DISC_TYPE) && (dsap == LLCP_SAP_LM) &&
@@ -1312,7 +1312,7 @@
           LLCP_TRACE_DEBUG4(
               "llcp_link_proc_rx_data (): DSAP:0x%x, PTYPE:%s (0x%x), "
               "SSAP:0x%x",
-              dsap, llcp_pdu_type(ptype), ptype, ssap);
+              dsap, llcp_pdu_type(ptype).c_str(), ptype, ssap);
 #endif
 
           if (ptype == LLCP_PDU_SYMM_TYPE) {
@@ -1654,7 +1654,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";
@@ -1682,7 +1682,6 @@
       return "RR";
     case LLCP_PDU_RNR_TYPE:
       return "RNR";
-
     default:
       return "RESERVED";
   }
diff --git a/src/nfc/llcp/llcp_main.c b/src/nfc/llcp/llcp_main.cc
similarity index 100%
rename from src/nfc/llcp/llcp_main.c
rename to src/nfc/llcp/llcp_main.cc
diff --git a/src/nfc/llcp/llcp_sdp.c b/src/nfc/llcp/llcp_sdp.cc
similarity index 100%
rename from src/nfc/llcp/llcp_sdp.c
rename to src/nfc/llcp/llcp_sdp.cc
diff --git a/src/nfc/llcp/llcp_util.c b/src/nfc/llcp/llcp_util.cc
similarity index 100%
rename from src/nfc/llcp/llcp_util.c
rename to src/nfc/llcp/llcp_util.cc
diff --git a/src/nfc/nci/nci_hmsgs.c b/src/nfc/nci/nci_hmsgs.cc
similarity index 100%
rename from src/nfc/nci/nci_hmsgs.c
rename to src/nfc/nci/nci_hmsgs.cc
diff --git a/src/nfc/nci/nci_hrcv.c b/src/nfc/nci/nci_hrcv.cc
similarity index 100%
rename from src/nfc/nci/nci_hrcv.c
rename to src/nfc/nci/nci_hrcv.cc
diff --git a/src/nfc/ndef/ndef_utils.c b/src/nfc/ndef/ndef_utils.cc
similarity index 100%
rename from src/nfc/ndef/ndef_utils.c
rename to src/nfc/ndef/ndef_utils.cc
diff --git a/src/nfc/nfc/nfc_ee.c b/src/nfc/nfc/nfc_ee.cc
similarity index 100%
rename from src/nfc/nfc/nfc_ee.c
rename to src/nfc/nfc/nfc_ee.cc
diff --git a/src/nfc/nfc/nfc_main.c b/src/nfc/nfc/nfc_main.cc
similarity index 97%
rename from src/nfc/nfc/nfc_main.c
rename to src/nfc/nfc/nfc_main.cc
index 4b142d2..cc58914 100644
--- a/src/nfc/nfc/nfc_main.c
+++ b/src/nfc/nfc/nfc_main.cc
@@ -88,28 +88,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,31 +124,24 @@
 ** 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";
     default:
-      return ("???? UNKNOWN EVENT");
+      return "???? UNKNOWN EVENT";
   }
 }
 #endif /* BT_TRACE_VERBOSE == TRUE */
@@ -323,8 +316,8 @@
 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));
+                   nfc_state_name(nfc_cb.nfc_state).c_str(), nfc_state,
+                   nfc_state_name(nfc_state).c_str());
 #else
   NFC_TRACE_DEBUG2("nfc_set_state %d->%d", nfc_cb.nfc_state, nfc_state);
 #endif
@@ -564,7 +557,7 @@
 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);
+                   nfc_hal_event_name(event).c_str(), event, status);
 #else
   NFC_TRACE_DEBUG2("nfc_main_hal_cback event: 0x%x, status=%d", event, status);
 #endif
@@ -1121,7 +1114,7 @@
 
 #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);
+                 nfc_state_name(nfc_cb.nfc_state).c_str(), deactivate_type);
 #else
   NFC_TRACE_API2("NFC_Deactivate %d deactivate_type:%d", nfc_cb.nfc_state,
                  deactivate_type);
@@ -1379,7 +1372,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";
diff --git a/src/nfc/nfc/nfc_task.c b/src/nfc/nfc/nfc_task.cc
similarity index 100%
rename from src/nfc/nfc/nfc_task.c
rename to src/nfc/nfc/nfc_task.cc
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 100%
rename from src/nfc/nfc/nfc_utils.c
rename to src/nfc/nfc/nfc_utils.cc
diff --git a/src/nfc/nfc/nfc_vs.c b/src/nfc/nfc/nfc_vs.cc
similarity index 100%
rename from src/nfc/nfc/nfc_vs.c
rename to src/nfc/nfc/nfc_vs.cc
diff --git a/src/nfc/tags/ce_main.c b/src/nfc/tags/ce_main.cc
similarity index 100%
rename from src/nfc/tags/ce_main.c
rename to src/nfc/tags/ce_main.cc
diff --git a/src/nfc/tags/ce_t3t.c b/src/nfc/tags/ce_t3t.cc
similarity index 100%
rename from src/nfc/tags/ce_t3t.c
rename to src/nfc/tags/ce_t3t.cc
diff --git a/src/nfc/tags/ce_t4t.c b/src/nfc/tags/ce_t4t.cc
similarity index 100%
rename from src/nfc/tags/ce_t4t.c
rename to src/nfc/tags/ce_t4t.cc
diff --git a/src/nfc/tags/rw_i93.c b/src/nfc/tags/rw_i93.cc
similarity index 97%
rename from src/nfc/tags/rw_i93.c
rename to src/nfc/tags/rw_i93.cc
index a4740db..341c88c 100644
--- a/src/nfc/tags/rw_i93.c
+++ b/src/nfc/tags/rw_i93.cc
@@ -81,9 +81,9 @@
 };
 
 #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);
+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);
 #endif
 
 static void rw_i93_data_cback(uint8_t conn_id, tNFC_CONN_EVT event,
@@ -171,7 +171,7 @@
 
 #if (BT_TRACE_VERBOSE == TRUE)
   RW_TRACE_DEBUG1("product_version = <%s>",
-                  rw_i93_get_tag_name(p_i93->product_version));
+                  rw_i93_get_tag_name(p_i93->product_version).c_str());
 #else
   RW_TRACE_DEBUG1("product_version = %d", p_i93->product_version);
 #endif
@@ -323,7 +323,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;
@@ -1377,7 +1377,7 @@
 **
 *******************************************************************************/
 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;
@@ -1386,7 +1386,7 @@
 
 #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),
+                  rw_i93_get_sub_state_name(p_i93->sub_state).c_str(),
                   p_i93->sub_state);
 #else
   RW_TRACE_DEBUG1("rw_i93_sm_detect_ndef () sub_state:0x%x", p_i93->sub_state);
@@ -1858,7 +1858,7 @@
 
 #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),
+                  rw_i93_get_sub_state_name(p_i93->sub_state).c_str(),
                   p_i93->sub_state);
 #else
   RW_TRACE_DEBUG1("rw_i93_sm_update_ndef () sub_state:0x%x", p_i93->sub_state);
@@ -2102,7 +2102,7 @@
 **
 *******************************************************************************/
 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;
@@ -2111,7 +2111,7 @@
 
 #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),
+                  rw_i93_get_sub_state_name(p_i93->sub_state).c_str(),
                   p_i93->sub_state);
 #else
   RW_TRACE_DEBUG1("rw_i93_sm_format () sub_state:0x%x", p_i93->sub_state);
@@ -2443,7 +2443,7 @@
 
 #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),
+                  rw_i93_get_sub_state_name(p_i93->sub_state).c_str(),
                   p_i93->sub_state);
 #else
   RW_TRACE_DEBUG1("rw_i93_sm_set_read_only () sub_state:0x%x",
@@ -2753,7 +2753,7 @@
 
 #if (BT_TRACE_VERBOSE == TRUE)
   RW_TRACE_DEBUG2("RW I93 state: <%s (%d)>",
-                  rw_i93_get_state_name(p_i93->state), p_i93->state);
+                  rw_i93_get_state_name(p_i93->state).c_str(), p_i93->state);
 #else
   RW_TRACE_DEBUG1("RW I93 state: %d", p_i93->state);
 #endif
@@ -2822,8 +2822,8 @@
 #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));
+                    rw_i93_get_state_name(begin_state).c_str(),
+                    rw_i93_get_state_name(p_i93->state).c_str());
   }
 #endif
 }
@@ -3713,30 +3713,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";
   }
 }
 
@@ -3751,38 +3749,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";
   }
 }
 
@@ -3797,41 +3795,41 @@
 ** 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_UNKNOWN_PRODUCT:
     default:
-      return ("UNKNOWN");
+      return "UNKNOWN";
   }
 }
 
diff --git a/src/nfc/tags/rw_main.c b/src/nfc/tags/rw_main.cc
similarity index 100%
rename from src/nfc/tags/rw_main.c
rename to src/nfc/tags/rw_main.cc
diff --git a/src/nfc/tags/rw_t1t.c b/src/nfc/tags/rw_t1t.cc
similarity index 96%
rename from src/nfc/tags/rw_t1t.c
rename to src/nfc/tags/rw_t1t.cc
index 2c7e02d..02e3329 100644
--- a/src/nfc/tags/rw_t1t.c
+++ b/src/nfc/tags/rw_t1t.cc
@@ -22,7 +22,7 @@
  *  mode.
  *
  ******************************************************************************/
-#include <string.h>
+#include <string>
 #include "nfc_target.h"
 
 #include "gki.h"
@@ -41,7 +41,7 @@
 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 std::string 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
@@ -76,7 +76,7 @@
 
 #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);
+                  rw_t1t_get_state_name(p_t1t->state).c_str(), p_t1t->state);
 #else
   RW_TRACE_DEBUG1("rw_t1t_data_cback (): state=%d", p_t1t->state);
 #endif
@@ -146,7 +146,7 @@
 /* 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),
+                      rw_t1t_get_state_name(p_t1t->state).c_str(),
                       p_cmd_rsp_info->opcode);
 #else
       RW_TRACE_ERROR2("T1T Frame error. state=0x%02x command = 0x%02x ",
@@ -210,8 +210,8 @@
 #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));
+                    rw_t1t_get_state_name(begin_state).c_str(),
+                    rw_t1t_get_state_name(p_t1t->state).c_str());
   }
 #endif
 }
@@ -531,7 +531,7 @@
 
 #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_t1t_get_state_name(p_t1t->state).c_str(),
                   (rw_cb.tcb.t1t.p_cmd_rsp_info)->opcode);
 #else
   RW_TRACE_ERROR2("T1T timeout. state=0x%02x command=0x%02x ", p_t1t->state,
@@ -596,9 +596,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_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 */
@@ -1089,30 +1089,30 @@
 ** 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";
   }
 }
 
diff --git a/src/nfc/tags/rw_t1t_ndef.c b/src/nfc/tags/rw_t1t_ndef.cc
similarity index 98%
rename from src/nfc/tags/rw_t1t_ndef.c
rename to src/nfc/tags/rw_t1t_ndef.cc
index 915dade..c8529f7 100644
--- a/src/nfc/tags/rw_t1t_ndef.c
+++ b/src/nfc/tags/rw_t1t_ndef.cc
@@ -22,7 +22,7 @@
  *  Reader/Writer mode.
  *
  ******************************************************************************/
-#include <string.h>
+#include <string>
 #include "nfc_target.h"
 
 #include "gki.h"
@@ -2542,33 +2542,32 @@
 ** Returns          pointer to the name
 **
 *******************************************************************************/
-static char* rw_t1t_get_sub_state_name(uint8_t sub_state) {
+static std::string rw_t1t_get_sub_state_name(uint8_t sub_state) {
   switch (sub_state) {
     case RW_T1T_SUBSTATE_NONE:
-      return ("NONE");
+      return "NONE";
     case RW_T1T_SUBSTATE_WAIT_READ_TLV_VALUE:
-      return ("EXTRACT_TLV_VALUE");
+      return "EXTRACT_TLV_VALUE";
     case RW_T1T_SUBSTATE_WAIT_READ_LOCKS:
-      return ("READING_LOCKS");
+      return "READING_LOCKS";
     case RW_T1T_SUBSTATE_WAIT_READ_NDEF_BLOCK:
-      return ("READ_NDEF_FINAL_BLOCK");
+      return "READ_NDEF_FINAL_BLOCK";
     case RW_T1T_SUBSTATE_WAIT_INVALIDATE_NDEF:
-      return ("INVALIDATING_NDEF");
+      return "INVALIDATING_NDEF";
     case RW_T1T_SUBSTATE_WAIT_NDEF_WRITE:
-      return ("WRITE_NDEF_TLV_MESSAGE");
+      return "WRITE_NDEF_TLV_MESSAGE";
     case RW_T1T_SUBSTATE_WAIT_NDEF_UPDATED:
-      return ("WAITING_RSP_FOR_LAST_NDEF_WRITE");
+      return "WAITING_RSP_FOR_LAST_NDEF_WRITE";
     case RW_T1T_SUBSTATE_WAIT_VALIDATE_NDEF:
-      return ("VALIDATING_NDEF");
+      return "VALIDATING_NDEF";
     case RW_T1T_SUBSTATE_WAIT_SET_CC_RWA_RO:
-      return ("SET_RWA_RO");
+      return "SET_RWA_RO";
     case RW_T1T_SUBSTATE_WAIT_SET_ST_LOCK_BITS:
-      return ("SET_STATIC_LOCK_BITS");
+      return "SET_STATIC_LOCK_BITS";
     case RW_T1T_SUBSTATE_WAIT_SET_DYN_LOCK_BITS:
-      return ("SET_DYNAMIC_LOCK_BITS");
-
+      return "SET_DYNAMIC_LOCK_BITS";
     default:
-      return ("???? UNKNOWN SUBSTATE");
+      return "???? UNKNOWN SUBSTATE";
   }
 }
 #endif /* (BT_TRACE_VERBOSE == TRUE) */
diff --git a/src/nfc/tags/rw_t2t.c b/src/nfc/tags/rw_t2t.cc
similarity index 92%
rename from src/nfc/tags/rw_t2t.c
rename to src/nfc/tags/rw_t2t.cc
index c215340..3b3cf45 100644
--- a/src/nfc/tags/rw_t2t.c
+++ b/src/nfc/tags/rw_t2t.cc
@@ -22,7 +22,7 @@
  *  mode.
  *
  ******************************************************************************/
-#include <string.h>
+#include <string>
 #include "bt_types.h"
 #include "nfc_target.h"
 
@@ -42,8 +42,8 @@
 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);
+static std::string rw_t2t_get_state_name(uint8_t state);
+static std::string rw_t2t_get_substate_name(uint8_t substate);
 #endif
 
 /*******************************************************************************
@@ -74,8 +74,8 @@
 
   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));
+    RW_TRACE_DEBUG2("RW T2T Raw Frame: Len [0x%X] Status [%s]", &p_pkt->len,
+                    NFC_GetStatusName(p_data->status).c_str());
 #else
     RW_TRACE_DEBUG2("RW T2T Raw Frame: Len [0x%X] Status [0x%X]", p_pkt->len,
                     p_data->status);
@@ -101,7 +101,7 @@
       (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));
+                    rw_t2t_get_state_name(p_t2t->state).c_str());
 #else
     RW_TRACE_ERROR1("T2T Frame error. state=0x%02X command=0x%02X ",
                     p_t2t->state);
@@ -223,8 +223,8 @@
 #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));
+                    rw_t2t_get_state_name(begin_state).c_str(),
+                    rw_t2t_get_state_name(p_t2t->state).c_str());
   }
 #endif
 }
@@ -386,8 +386,8 @@
       } 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));
+                        rw_t2t_get_state_name(p_t2t->state).c_str(),
+                        rw_t2t_get_substate_name(p_t2t->substate).c_str());
 #else
         RW_TRACE_ERROR2(
             "T2T NFC Send data failed. state=0x%02X substate=0x%02X ",
@@ -441,7 +441,7 @@
   } 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));
+                    rw_t2t_get_state_name(p_t2t->state).c_str());
 #else
     RW_TRACE_ERROR1("T2T timeout. state=0x%02X ", p_t2t->state);
 #endif
@@ -501,9 +501,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_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);
@@ -607,9 +607,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);
@@ -1035,33 +1035,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,50 +1076,50 @@
 ** 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";
   }
 }
 
diff --git a/src/nfc/tags/rw_t2t_ndef.c b/src/nfc/tags/rw_t2t_ndef.cc
similarity index 100%
rename from src/nfc/tags/rw_t2t_ndef.c
rename to src/nfc/tags/rw_t2t_ndef.cc
diff --git a/src/nfc/tags/rw_t3t.c b/src/nfc/tags/rw_t3t.cc
similarity index 98%
rename from src/nfc/tags/rw_t3t.c
rename to src/nfc/tags/rw_t3t.cc
index 88859f0..e89204a 100644
--- a/src/nfc/tags/rw_t3t.c
+++ b/src/nfc/tags/rw_t3t.cc
@@ -122,8 +122,8 @@
 };
 
 #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);
+static std::string rw_t3t_cmd_str(uint8_t cmd_id);
+static std::string rw_t3t_state_str(uint8_t state_id);
 #endif
 
 /* Local static functions */
@@ -262,9 +262,9 @@
       /* 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 */
@@ -480,9 +480,9 @@
 /* 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_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));
+                    rw_t3t_cmd_str(rw_cb.tcb.t3t.cur_cmd).c_str());
 #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);
@@ -538,8 +538,9 @@
 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));
+                  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());
 #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);
@@ -1451,10 +1452,10 @@
   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));
+  RW_TRACE_DEBUG2("RW T3T Raw Frame: Len [0x%X] Status [%s]", &p_pkt->len,
+                  NFC_GetStatusName(p_data->status).c_str());
 #else
-  RW_TRACE_DEBUG2("RW T3T Raw Frame: Len [0x%X] Status [0x%X]", p_pkt->len,
+  RW_TRACE_DEBUG2("RW T3T Raw Frame: Len [0x%X] Status [0x%X]", &p_pkt->len,
                   p_data->status);
 #endif
 
@@ -2396,29 +2397,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";
   }
@@ -2433,17 +2427,14 @@
 ** 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";
   }
diff --git a/src/nfc/tags/rw_t4t.c b/src/nfc/tags/rw_t4t.cc
similarity index 97%
rename from src/nfc/tags/rw_t4t.c
rename to src/nfc/tags/rw_t4t.cc
index e7b3c96..18d900c 100644
--- a/src/nfc/tags/rw_t4t.c
+++ b/src/nfc/tags/rw_t4t.cc
@@ -83,8 +83,8 @@
 #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);
+static std::string rw_t4t_get_state_name(uint8_t state);
+static std::string rw_t4t_get_sub_state_name(uint8_t sub_state);
 #endif
 
 static bool rw_t4t_send_to_lower(NFC_HDR* p_c_apdu);
@@ -1073,7 +1073,7 @@
 
 #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),
+                  rw_t4t_get_sub_state_name(p_t4t->sub_state).c_str(),
                   p_t4t->sub_state);
 #else
   RW_TRACE_DEBUG1("rw_t4t_sm_ndef_format (): sub_state=%d", p_t4t->sub_state);
@@ -1258,7 +1258,7 @@
 
 #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),
+                  rw_t4t_get_sub_state_name(p_t4t->sub_state).c_str(),
                   p_t4t->sub_state);
 #else
   RW_TRACE_DEBUG1("rw_t4t_sm_detect_ndef (): sub_state=%d", p_t4t->sub_state);
@@ -1480,7 +1480,7 @@
 
 #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),
+                  rw_t4t_get_sub_state_name(p_t4t->sub_state).c_str(),
                   p_t4t->sub_state);
 #else
   RW_TRACE_DEBUG1("rw_t4t_sm_read_ndef (): sub_state=%d", p_t4t->sub_state);
@@ -1568,7 +1568,7 @@
 
 #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),
+                  rw_t4t_get_sub_state_name(p_t4t->sub_state).c_str(),
                   p_t4t->sub_state);
 #else
   RW_TRACE_DEBUG1("rw_t4t_sm_update_ndef (): sub_state=%d", p_t4t->sub_state);
@@ -1655,7 +1655,7 @@
 
 #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),
+                  rw_t4t_get_sub_state_name(p_t4t->sub_state).c_str(),
                   p_t4t->sub_state);
 #else
   RW_TRACE_DEBUG1("rw_t4t_sm_set_readonly (): sub_state=%d", p_t4t->sub_state);
@@ -1816,7 +1816,7 @@
 
 #if (BT_TRACE_VERBOSE == TRUE)
   RW_TRACE_DEBUG2("RW T4T state: <%s (%d)>",
-                  rw_t4t_get_state_name(p_t4t->state), p_t4t->state);
+                  rw_t4t_get_state_name(p_t4t->state).c_str(), p_t4t->state);
 #else
   RW_TRACE_DEBUG1("RW T4T state: %d", p_t4t->state);
 #endif
@@ -1826,11 +1826,12 @@
 /* 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));
+      RW_TRACE_DEBUG2("RW T4T Raw Frame: Len [0x%X] Status [%s]",
+                      &p_r_apdu->len,
+                      NFC_GetStatusName(p_data->data.status).c_str());
 #else
       RW_TRACE_DEBUG2("RW T4T Raw Frame: Len [0x%X] Status [0x%X]",
-                      p_r_apdu->len, p_data->data.status);
+                      &p_r_apdu->len, p_data->data.status);
 #endif
       if (rw_cb.p_cback) {
         rw_data.raw_frame.status = p_data->data.status;
@@ -1877,8 +1878,8 @@
 #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));
+                    rw_t4t_get_state_name(begin_state).c_str(),
+                    rw_t4t_get_state_name(p_t4t->state).c_str());
   }
 #endif
 }
@@ -2230,25 +2231,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 +2263,42 @@
 ** 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 100%
rename from src/nfc/tags/tags_int.c
rename to src/nfc/tags/tags_int.cc
diff --git a/src/nfca_version.c b/src/nfca_version.h
similarity index 100%
rename from src/nfca_version.c
rename to src/nfca_version.h
diff --git a/src/udrv/include/upio.h b/src/udrv/include/upio.h
index 56ff81b..f00fdc8 100644
--- a/src/udrv/include/upio.h
+++ b/src/udrv/include/upio.h
@@ -226,10 +226,6 @@
 
 typedef void(tUPIO_CBACK)(tUPIO_TYPE type, tUPIO pio, tUPIO_STATE state);
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 /* API functions for UPIO driver */
 
 /*****************************************************************************
@@ -335,8 +331,4 @@
 *****************************************************************************/
 bool UPIO_Feature(tUPIO_FEATURE feature);
 
-#ifdef __cplusplus
-}
-#endif
-
 #endif /* ifdef UPIO_H */