am d4a9d3c4: Merge "ISO-DEP presence check workaround"
* commit 'd4a9d3c4d949f7383ad3540ba82f99796b8b407e':
ISO-DEP presence check workaround
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 ) &&