ISO-DEP presence check workaround

Not all ISO-DEP tags will response empty I-Block as presence check
command. This workaround replaces empty I-Block command to
NXP proprietay presence check command.

Change-Id: Ie1625f323840ab92b508cc2a1521365517c7a4a3
diff --git a/halimpl/pn54x/hal/phNxpNciHal_ext.c b/halimpl/pn54x/hal/phNxpNciHal_ext.c
index d8f5bf6..438da55 100644
--- a/halimpl/pn54x/hal/phNxpNciHal_ext.c
+++ b/halimpl/pn54x/hal/phNxpNciHal_ext.c
@@ -398,6 +398,58 @@
         }
     }
 #endif
+    else if (*p_len == 4 &&
+                p_ntf[0] == 0x4F &&
+                p_ntf[1] == 0x11 &&
+                p_ntf[2] == 0x01 )
+    {
+        if (p_ntf[3] == 0x00)
+        {
+            NXPLOG_NCIHAL_D (">  Workaround for ISO-DEP Presence Check, ignore response and wait for notification");
+            p_ntf[0] = 0x60;
+            p_ntf[1] = 0x06;
+            p_ntf[2] = 0x03;
+            p_ntf[3] = 0x01;
+            p_ntf[4] = 0x00;
+            p_ntf[5] = 0x01;
+            *p_len = 6;
+        }
+        else
+        {
+            NXPLOG_NCIHAL_D (">  Workaround for ISO-DEP Presence Check, presence check return failed");
+            p_ntf[0] = 0x60;
+            p_ntf[1] = 0x08;
+            p_ntf[2] = 0x02;
+            p_ntf[3] = 0xB2;
+            p_ntf[4] = 0x00;
+            *p_len = 5;
+
+        }
+    }
+    else if (*p_len == 4 &&
+                p_ntf[0] == 0x6F &&
+                p_ntf[1] == 0x11 &&
+                p_ntf[2] == 0x01 )
+    {
+        if (p_ntf[3] == 0x01)
+        {
+            NXPLOG_NCIHAL_D (">  Workaround for ISO-DEP Presence Check - Card still in field");
+            p_ntf[0] = 0x00;
+            p_ntf[1] = 0x00;
+            p_ntf[2] = 0x01;
+            p_ntf[3] = 0x7E;
+        }
+        else
+        {
+            NXPLOG_NCIHAL_D (">  Workaround for ISO-DEP Presence Check - Card not in field");
+            p_ntf[0] = 0x60;
+            p_ntf[1] = 0x08;
+            p_ntf[2] = 0x02;
+            p_ntf[3] = 0xB2;
+            p_ntf[4] = 0x00;
+            *p_len = 5;
+        }
+    }
     /*
     else if(p_ntf[0] == 0x61 && p_ntf[1] == 0x05 && p_ntf[4] == 0x01 && p_ntf[5] == 0x00 && p_ntf[6] == 0x01)
     {
@@ -743,6 +795,18 @@
 //        status = NFCSTATUS_FAILED;
         NXPLOG_NCIHAL_D ("> Going through workaround - Dirty Set Config - End ");
     }
+    else if (*cmd_len == 3 &&
+             p_cmd_data[0] == 0x00 &&
+             p_cmd_data[1] == 0x00 &&
+             p_cmd_data[2] == 0x00 )
+    {
+        NXPLOG_NCIHAL_D ("> Going through workaround - ISO-DEP Presence Check ");
+        p_cmd_data[0] = 0x2F;
+        p_cmd_data[1] = 0x11;
+        p_cmd_data[2] = 0x00;
+        status = NFCSTATUS_SUCCESS;
+        NXPLOG_NCIHAL_D ("> Going through workaround - ISO-DEP Presence Check - End");
+    }
 
 #if 0
     else if ( (p_cmd_data[0] == 0x20 && p_cmd_data[1] == 0x02 ) &&