Merge "Add privacy level for HAL traces"
diff --git a/st21nfc/adaptation/android_logmsg.cpp b/st21nfc/adaptation/android_logmsg.cpp
index 997e17c..f377d00 100644
--- a/st21nfc/adaptation/android_logmsg.cpp
+++ b/st21nfc/adaptation/android_logmsg.cpp
@@ -57,13 +57,27 @@
   char line[100];
   size_t i, k;
   bool first_line = true;
+  bool privacy = false;
+
+  if (hal_trace_level & STNFC_TRACE_FLAG_PRIVACY) {
+    if ((length > 3) &&
+        // DATA message
+        (((d[0] & 0xE0) == 0) ||
+         // routing table contains the AIDs
+         ((d[0] == 0x21) && (d[1] == 0x01)) ||
+         // NTF showing which AID was selected
+         ((d[0] == 0x61) && (d[1] == 0x09)))) {
+      // We hide the payload for GSMA TS27 15.9.3.2.*
+      privacy = true;
+    }
+  }
 
   line[0] = 0;
   if (length == 0) {
     STLOG_HAL_D("%s", title);
     return;
   }
-  for (i = 0, k = 0; i < length; i++, k++) {
+  for (i = 0, k = 0; i < (privacy ? 3 : length); i++, k++) {
     if (k > 31) {
       k = 0;
       if (first_line == true) {
@@ -83,6 +97,10 @@
     sprintf(&line[k * 3], "%02x ", d[i]);
   }
 
+  if (privacy) {
+    sprintf(&line[k * 3], "(hidden)");
+  }
+
   if (first_line == true) {
     if (title[0] == 'R') {
       STLOG_HAL_D("Rx %s\n", line);
diff --git a/st21nfc/hal_st21nfc.cc b/st21nfc/hal_st21nfc.cc
index b6fd45a..d739acb 100644
--- a/st21nfc/hal_st21nfc.cc
+++ b/st21nfc/hal_st21nfc.cc
@@ -43,7 +43,7 @@
   nfc_stack_callback_t* p_cback_unwrap;
 } st21nfc_dev_t;
 
-const char* halVersion = "ST21NFC HAL1.1 Version 3.1.12";
+const char* halVersion = "ST21NFC HAL1.1 Version 3.1.13";
 
 uint8_t cmd_set_nfc_mode_enable[] = {0x2f, 0x02, 0x02, 0x02, 0x01};
 uint8_t hal_is_closed = 1;
diff --git a/st21nfc/include/android_logmsg.h b/st21nfc/include/android_logmsg.h
index 342e8d5..11c2819 100644
--- a/st21nfc/include/android_logmsg.h
+++ b/st21nfc/include/android_logmsg.h
@@ -52,26 +52,30 @@
 #define STNFC_TRACE_LEVEL_WARNING 0x02
 #define STNFC_TRACE_LEVEL_DEBUG 0x03
 #define STNFC_TRACE_LEVEL_VERBOSE 0x04
+#define STNFC_TRACE_LEVEL_MASK 0x0F
+#define STNFC_TRACE_FLAG_PRIVACY 0x10
 
 #define STLOG_HAL_V(...)                                    \
   {                                                         \
-    if (hal_trace_level >= STNFC_TRACE_LEVEL_VERBOSE)       \
+    if ((hal_trace_level & STNFC_TRACE_LEVEL_MASK) >=       \
+        STNFC_TRACE_LEVEL_VERBOSE)                          \
       LOG_PRI(ANDROID_LOG_DEBUG, HAL_LOG_TAG, __VA_ARGS__); \
   }
-#define STLOG_HAL_D(...)                                    \
-  {                                                         \
-    if (hal_trace_level >= STNFC_TRACE_LEVEL_DEBUG)         \
-      LOG_PRI(ANDROID_LOG_DEBUG, HAL_LOG_TAG, __VA_ARGS__); \
+#define STLOG_HAL_D(...)                                                       \
+  {                                                                            \
+    if ((hal_trace_level & STNFC_TRACE_LEVEL_MASK) >= STNFC_TRACE_LEVEL_DEBUG) \
+      LOG_PRI(ANDROID_LOG_DEBUG, HAL_LOG_TAG, __VA_ARGS__);                    \
   }
 #define STLOG_HAL_W(...)                                   \
   {                                                        \
-    if (hal_trace_level >= STNFC_TRACE_LEVEL_WARNING)      \
+    if ((hal_trace_level & STNFC_TRACE_LEVEL_MASK) >=      \
+        STNFC_TRACE_LEVEL_WARNING)                         \
       LOG_PRI(ANDROID_LOG_WARN, HAL_LOG_TAG, __VA_ARGS__); \
   }
-#define STLOG_HAL_E(...)                                    \
-  {                                                         \
-    if (hal_trace_level >= STNFC_TRACE_LEVEL_ERROR)         \
-      LOG_PRI(ANDROID_LOG_ERROR, HAL_LOG_TAG, __VA_ARGS__); \
+#define STLOG_HAL_E(...)                                                       \
+  {                                                                            \
+    if ((hal_trace_level & STNFC_TRACE_LEVEL_MASK) >= STNFC_TRACE_LEVEL_ERROR) \
+      LOG_PRI(ANDROID_LOG_ERROR, HAL_LOG_TAG, __VA_ARGS__);                    \
   }
 /*******************************************************************************
 **