Merge "Add Mifare Classic support"
diff --git a/halimpl/pn54x/hal/phNxpNciHal_ext.c b/halimpl/pn54x/hal/phNxpNciHal_ext.c
index def2b2d..bcb82d2 100644
--- a/halimpl/pn54x/hal/phNxpNciHal_ext.c
+++ b/halimpl/pn54x/hal/phNxpNciHal_ext.c
@@ -799,6 +799,19 @@
// status = NFCSTATUS_FAILED;
NXPLOG_NCIHAL_D ("> Going through workaround - Dirty Set Config - End ");
}
+ else if(p_cmd_data[0] == 0x21 &&
+ p_cmd_data[1] == 0x00 )
+ {
+ NXPLOG_NCIHAL_D ("> Going through workaround - Add Mifare Classic in Discovery Map");
+ p_cmd_data[*cmd_len] = 0x80;
+ p_cmd_data[*cmd_len +1] = 0x01;
+ p_cmd_data[*cmd_len + 2] = 0x80;
+ p_cmd_data[5] = 0x01;
+ p_cmd_data[6] = 0x01;
+ p_cmd_data[2] += 3;
+ p_cmd_data[3] += 1;
+ *cmd_len += 3;
+ }
else if (*cmd_len == 3 &&
p_cmd_data[0] == 0x00 &&
p_cmd_data[1] == 0x00 &&
diff --git a/halimpl/pn54x/libnfc-brcm.conf b/halimpl/pn54x/libnfc-brcm.conf
index 7df047b..f65859e 100644
--- a/halimpl/pn54x/libnfc-brcm.conf
+++ b/halimpl/pn54x/libnfc-brcm.conf
@@ -392,7 +392,8 @@
# byte[2] NCI_PROTOCOL_DUAL
# byte[3] NCI_PROTOCOL_15693
# byte[4] NCI_PROTOCOL_KOVIO
-# byte[5] NCI_DISCOVERY_TYPE_POLL_KOVIO
-# byte[6] NCI_DISCOVERY_TYPE_POLL_B_PRIME
-# byte[7] NCI_DISCOVERY_TYPE_LISTEN_B_PRIME
-NFA_PROPRIETARY_CFG={05:FF:FF:06:81:70:FF:FF}
+# byte[5] NCI_PROTOCOL_MIFARE
+# byte[6] NCI_DISCOVERY_TYPE_POLL_KOVIO
+# byte[7] NCI_DISCOVERY_TYPE_POLL_B_PRIME
+# byte[8] NCI_DISCOVERY_TYPE_LISTEN_B_PRIME
+NFA_PROPRIETARY_CFG={05:FF:FF:06:81:80:70:FF:FF}
diff --git a/src/hal/int/nfc_brcm_defs.h b/src/hal/int/nfc_brcm_defs.h
index 6e8670a..ff242f5 100644
--- a/src/hal/int/nfc_brcm_defs.h
+++ b/src/hal/int/nfc_brcm_defs.h
@@ -181,6 +181,7 @@
/**********************************************
* NCI Interface Types
**********************************************/
+#define NCI_INTERFACE_VS_MIFARE 0x80
#define NCI_INTERFACE_VS_CALYPSO_CE 0x81
#define NCI_INTERFACE_VS_T2T_CE 0x82 /* for Card Emulation side */
#define NCI_INTERFACE_VS_15693 0x83 /* for both Reader/Writer and Card Emulation side */
diff --git a/src/include/vendor_cfg.h b/src/include/vendor_cfg.h
index 8d30325..71d2a46 100644
--- a/src/include/vendor_cfg.h
+++ b/src/include/vendor_cfg.h
@@ -30,6 +30,7 @@
UINT8 pro_protocol_dual;
UINT8 pro_protocol_15693;
UINT8 pro_protocol_kovio;
+ UINT8 pro_protocol_mfc;
UINT8 pro_discovery_kovio_poll;
UINT8 pro_discovery_b_prime_poll;
@@ -57,6 +58,9 @@
#ifndef NCI_PROTOCOL_KOVIO
#define NCI_PROTOCOL_KOVIO (p_nfa_proprietary_cfg->pro_protocol_kovio)
#endif
+#ifndef NCI_PROTOCOL_MIFARE
+#define NCI_PROTOCOL_MIFARE (p_nfa_proprietary_cfg->pro_protocol_mfc)
+#endif
/**********************************************
* Proprietary Discovery technology and mode
diff --git a/src/nfa/dm/nfa_dm_act.c b/src/nfa/dm/nfa_dm_act.c
index 942e301..d28689e 100644
--- a/src/nfa/dm/nfa_dm_act.c
+++ b/src/nfa/dm/nfa_dm_act.c
@@ -1660,7 +1660,8 @@
||(nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_T3T)
||(nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_ISO_DEP)
||(nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_15693)
- ||(nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_KOVIO) )
+ ||(nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_KOVIO)
+ ||(nfa_dm_cb.disc_cb.activated_protocol == NFC_PROTOCOL_MIFARE) )
{
/* Notify NFA tag sub-system */
nfa_rw_proc_disc_evt (NFA_DM_RF_DISC_ACTIVATED_EVT, p_data, TRUE);
diff --git a/src/nfa/dm/nfa_dm_cfg.c b/src/nfa/dm/nfa_dm_cfg.c
index 9be2163..ed64d52 100644
--- a/src/nfa/dm/nfa_dm_cfg.c
+++ b/src/nfa/dm/nfa_dm_cfg.c
@@ -131,6 +131,7 @@
0x82, /* NCI_PROTOCOL_DUAL */
0x83, /* NCI_PROTOCOL_15693 */
0x8A, /* NCI_PROTOCOL_KOVIO */
+ 0xFF, /* NCI_PROTOCOL_MIFARE */
0x77, /* NCI_DISCOVERY_TYPE_POLL_KOVIO */
0x74, /* NCI_DISCOVERY_TYPE_POLL_B_PRIME */
0xF4, /* NCI_DISCOVERY_TYPE_LISTEN_B_PRIME */
diff --git a/src/nfa/dm/nfa_dm_discover.c b/src/nfa/dm/nfa_dm_discover.c
index d0c4fe0..9930cfa 100644
--- a/src/nfa/dm/nfa_dm_discover.c
+++ b/src/nfa/dm/nfa_dm_discover.c
@@ -2253,6 +2253,14 @@
switch (event)
{
case NFA_DM_RF_DEACTIVATE_CMD:
+ if (nfa_dm_cb.disc_cb.activated_protocol == NCI_PROTOCOL_MIFARE)
+ {
+ nfa_dm_cb.disc_cb.deact_pending = TRUE;
+ nfa_dm_cb.disc_cb.pending_deact_type = p_data->deactivate_type;
+ status = nfa_dm_send_deactivate_cmd (p_data->deactivate_type);
+ break;
+ }
+
if (old_sleep_wakeup_flag)
{
/* sleep wakeup is already enabled when deactivate cmd is requested,
diff --git a/src/nfa/include/nfa_api.h b/src/nfa/include/nfa_api.h
index 0443275..a47da1d 100644
--- a/src/nfa/include/nfa_api.h
+++ b/src/nfa/include/nfa_api.h
@@ -124,6 +124,7 @@
#define NFA_PROTOCOL_ISO15693 NFC_PROTOCOL_15693
#define NFA_PROTOCOL_B_PRIME NFC_PROTOCOL_B_PRIME
#define NFA_PROTOCOL_KOVIO NFC_PROTOCOL_KOVIO
+#define NFA_PROTOCOL_MIFARE NFC_PROTOCOL_MIFARE
#define NFA_PROTOCOL_INVALID 0xFF
#define NFA_MAX_NUM_PROTOCOLS 8
typedef UINT8 tNFA_NFC_PROTOCOL;
@@ -595,6 +596,7 @@
#define NFA_INTERFACE_FRAME NFC_INTERFACE_FRAME
#define NFA_INTERFACE_ISO_DEP NFC_INTERFACE_ISO_DEP
#define NFA_INTERFACE_NFC_DEP NFC_INTERFACE_NFC_DEP
+#define NFA_INTERFACE_MIFARE NFC_INTERFACE_MIFARE
typedef tNFC_INTF_TYPE tNFA_INTF_TYPE;
/*******************************************************************************
diff --git a/src/nfc/include/nfc_api.h b/src/nfc/include/nfc_api.h
index f9cc864..4070c5c 100644
--- a/src/nfc/include/nfc_api.h
+++ b/src/nfc/include/nfc_api.h
@@ -202,7 +202,7 @@
#define NFC_NFCC_INFO_LEN 4
#ifndef NFC_NFCC_MAX_NUM_VS_INTERFACE
-#define NFC_NFCC_MAX_NUM_VS_INTERFACE 4
+#define NFC_NFCC_MAX_NUM_VS_INTERFACE 5
#endif
typedef struct
{
@@ -344,6 +344,7 @@
#define NFC_PROTOCOL_T3T NCI_PROTOCOL_T3T /* Type3Tag - NFC-F */
#define NFC_PROTOCOL_ISO_DEP NCI_PROTOCOL_ISO_DEP /* Type 4A,4B - NFC-A or NFC-B */
#define NFC_PROTOCOL_NFC_DEP NCI_PROTOCOL_NFC_DEP /* NFCDEP/LLCP - NFC-A or NFC-F */
+#define NFC_PROTOCOL_MIFARE NCI_PROTOCOL_MIFARE
#define NFC_PROTOCOL_B_PRIME NCI_PROTOCOL_B_PRIME
#define NFC_PROTOCOL_15693 NCI_PROTOCOL_15693
#define NFC_PROTOCOL_KOVIO NCI_PROTOCOL_KOVIO
@@ -393,6 +394,7 @@
#define NFC_INTERFACE_LLCP_LOW NCI_INTERFACE_LLCP_LOW
#define NFC_INTERFACE_LLCP_HIGH NCI_INTERFACE_LLCP_HIGH
#define NFC_INTERFACE_VS_T2T_CE NCI_INTERFACE_VS_T2T_CE
+#define NFC_INTERFACE_MIFARE NCI_INTERFACE_VS_MIFARE
typedef tNCI_INTF_TYPE tNFC_INTF_TYPE;
/**********************************************
diff --git a/src/nfc/nfc/nfc_main.c b/src/nfc/nfc/nfc_main.c
index 908942c..ad1b474 100644
--- a/src/nfc/nfc/nfc_main.c
+++ b/src/nfc/nfc/nfc_main.c
@@ -238,7 +238,7 @@
{
if ((*p) <= NCI_INTERFACE_MAX)
evt_data.enable.nci_interfaces |= (1 << (*p));
- else if (((*p) > NCI_INTERFACE_FIRST_VS) && (yy < NFC_NFCC_MAX_NUM_VS_INTERFACE))
+ else if (((*p) >= NCI_INTERFACE_FIRST_VS) && (yy < NFC_NFCC_MAX_NUM_VS_INTERFACE))
{
/* save the VS RF interface in control block, if there's still room */
nfc_cb.vs_interface[yy++] = *p;
@@ -844,6 +844,12 @@
nfc_cb.p_discv_cback = p_cback;
num_intf = 0;
NFC_TRACE_DEBUG1 ("nci_interfaces supported by NFCC: 0x%x", nfc_cb.nci_interfaces);
+
+ for (xx = 0; xx < NFC_NFCC_MAX_NUM_VS_INTERFACE + NCI_INTERFACE_MAX; xx++)
+ {
+ memset (&max_maps[xx], 0x00, sizeof(tNFC_DISCOVER_MAPS));
+ }
+
for (xx = 0; xx < num_disc_maps; xx++)
{
is_supported = FALSE;