am d4a9d3c4: Merge "ISO-DEP presence check workaround"
* commit 'd4a9d3c4d949f7383ad3540ba82f99796b8b407e':
ISO-DEP presence check workaround
diff --git a/halimpl/pn54x/libnfc-brcm.conf b/halimpl/pn54x/libnfc-brcm.conf
index 22dffb5..7df047b 100644
--- a/halimpl/pn54x/libnfc-brcm.conf
+++ b/halimpl/pn54x/libnfc-brcm.conf
@@ -383,3 +383,16 @@
# UICC 0x02
NXP_PRFD_TECH_SE=0x01
+
+###############################################################################
+# Vendor Specific Proprietary Protocol & Discovery Configuration
+# Set to 0xFF if unsupported
+# byte[0] NCI_PROTOCOL_18092_ACTIVE
+# byte[1] NCI_PROTOCOL_B_PRIME
+# 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}
diff --git a/src/adaptation/NfcAdaptation.cpp b/src/adaptation/NfcAdaptation.cpp
index 1a9e191..841c04a 100644
--- a/src/adaptation/NfcAdaptation.cpp
+++ b/src/adaptation/NfcAdaptation.cpp
@@ -22,6 +22,7 @@
#include "gki.h"
#include "nfa_api.h"
#include "nfc_int.h"
+ #include "vendor_cfg.h"
}
#include "config.h"
#include "android_logmsg.h"
@@ -47,13 +48,16 @@
char nci_hal_module[64];
static UINT8 nfa_dm_cfg[sizeof ( tNFA_DM_CFG ) ];
+static UINT8 nfa_proprietary_cfg[sizeof ( tNFA_PROPRIETARY_CFG )];
extern tNFA_DM_CFG *p_nfa_dm_cfg;
+extern tNFA_PROPRIETARY_CFG *p_nfa_proprietary_cfg;
extern UINT8 nfa_ee_max_ee_cfg;
extern const UINT8 nfca_version_string [];
extern const UINT8 nfa_version_string [];
static UINT8 deviceHostWhiteList [NFA_HCI_MAX_HOST_IN_NETWORK];
static tNFA_HCI_CFG jni_nfa_hci_cfg;
extern tNFA_HCI_CFG *p_nfa_hci_cfg;
+extern BOOLEAN nfa_poll_bail_out_mode;
/*******************************************************************************
**
@@ -141,6 +145,16 @@
nfa_ee_max_ee_cfg = num;
ALOGD("%s: Overriding NFA_EE_MAX_EE_SUPPORTED to use %d", func, nfa_ee_max_ee_cfg);
}
+ if ( GetNumValue ( NAME_NFA_POLL_BAIL_OUT_MODE, &num, sizeof ( num ) ) )
+ {
+ nfa_poll_bail_out_mode = num;
+ ALOGD("%s: Overriding NFA_POLL_BAIL_OUT_MODE to use %d", func, nfa_poll_bail_out_mode);
+ }
+
+ if ( GetStrValue ( NAME_NFA_PROPRIETARY_CFG, (char*)nfa_proprietary_cfg, sizeof ( tNFA_PROPRIETARY_CFG ) ) )
+ {
+ p_nfa_proprietary_cfg = (tNFA_PROPRIETARY_CFG*) &nfa_proprietary_cfg[0];
+ }
//configure device host whitelist of HCI host ID's; see specification ETSI TS 102 622 V11.1.10
//(2012-10), section 6.1.3.1
diff --git a/src/hal/include/nci_defs.h b/src/hal/include/nci_defs.h
index 2ff50a7..027dd21 100644
--- a/src/hal/include/nci_defs.h
+++ b/src/hal/include/nci_defs.h
@@ -377,25 +377,6 @@
#define NCI_PROTOCOL_T3T 0x03
#define NCI_PROTOCOL_ISO_DEP 0x04
#define NCI_PROTOCOL_NFC_DEP 0x05
-/**********************************************
- * Proprietary Protocols
- **********************************************/
-#ifndef NCI_PROTOCOL_18092_ACTIVE
-#define NCI_PROTOCOL_18092_ACTIVE 0x80
-#endif
-#ifndef NCI_PROTOCOL_B_PRIME
-#define NCI_PROTOCOL_B_PRIME 0x81
-#endif
-#ifndef NCI_PROTOCOL_DUAL
-#define NCI_PROTOCOL_DUAL 0x82
-#endif
-#ifndef NCI_PROTOCOL_15693
-#define NCI_PROTOCOL_15693 0x83
-#endif
-#ifndef NCI_PROTOCOL_KOVIO
-#define NCI_PROTOCOL_KOVIO 0x8a
-#endif
-
/* Discovery Types/Detected Technology and Mode */
#define NCI_DISCOVERY_TYPE_POLL_A 0x00
@@ -403,14 +384,11 @@
#define NCI_DISCOVERY_TYPE_POLL_F 0x02
#define NCI_DISCOVERY_TYPE_POLL_A_ACTIVE 0x03
#define NCI_DISCOVERY_TYPE_POLL_F_ACTIVE 0x05
-#define NCI_DISCOVERY_TYPE_POLL_B_PRIME 0x74
-#define NCI_DISCOVERY_TYPE_POLL_KOVIO 0x77
#define NCI_DISCOVERY_TYPE_LISTEN_A 0x80
#define NCI_DISCOVERY_TYPE_LISTEN_B 0x81
#define NCI_DISCOVERY_TYPE_LISTEN_F 0x82
#define NCI_DISCOVERY_TYPE_LISTEN_A_ACTIVE 0x83
#define NCI_DISCOVERY_TYPE_LISTEN_F_ACTIVE 0x85
-#define NCI_DISCOVERY_TYPE_LISTEN_B_PRIME 0xF4
#define NCI_DISCOVERY_TYPE_POLL_ISO15693 0x06
#define NCI_DISCOVERY_TYPE_LISTEN_ISO15693 0x86
#define NCI_DISCOVERY_TYPE_MAX NCI_DISCOVERY_TYPE_LISTEN_ISO15693
diff --git a/src/include/config.h b/src/include/config.h
index 7f978aa..b41023b 100644
--- a/src/include/config.h
+++ b/src/include/config.h
@@ -88,6 +88,8 @@
#define NAME_POWER_OFF_MODE "POWER_OFF_MODE"
#define NAME_GLOBAL_RESET "DO_GLOBAL_RESET"
#define NAME_NCI_HAL_MODULE "NCI_HAL_MODULE"
+#define NAME_NFA_POLL_BAIL_OUT_MODE "NFA_POLL_BAIL_OUT_MODE"
+#define NAME_NFA_PROPRIETARY_CFG "NFA_PROPRIETARY_CFG"
#define LPTD_PARAM_LEN (40)
diff --git a/src/include/vendor_cfg.h b/src/include/vendor_cfg.h
new file mode 100644
index 0000000..8d30325
--- /dev/null
+++ b/src/include/vendor_cfg.h
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/******************************************************************************
+ *
+ * This file contains compile-time configurable constants for vendor specific proprietary protocols
+ *
+ ******************************************************************************/
+#ifndef __NFC_VENDOR_CFG_H__
+#define __NFC_VENDOR_CFG_H__
+
+/* compile-time configuration structure for proprietary protocol and discovery value */
+typedef struct
+{
+ UINT8 pro_protocol_18092_active;
+ UINT8 pro_protocol_b_prime;
+ UINT8 pro_protocol_dual;
+ UINT8 pro_protocol_15693;
+ UINT8 pro_protocol_kovio;
+
+ UINT8 pro_discovery_kovio_poll;
+ UINT8 pro_discovery_b_prime_poll;
+ UINT8 pro_discovery_b_prime_listen;
+} tNFA_PROPRIETARY_CFG;
+
+
+extern tNFA_PROPRIETARY_CFG *p_nfa_proprietary_cfg;
+
+ /**********************************************
+ * Proprietary Protocols
+ **********************************************/
+#ifndef NCI_PROTOCOL_18092_ACTIVE
+#define NCI_PROTOCOL_18092_ACTIVE (p_nfa_proprietary_cfg->pro_protocol_18092_active)
+#endif
+#ifndef NCI_PROTOCOL_B_PRIME
+#define NCI_PROTOCOL_B_PRIME (p_nfa_proprietary_cfg->pro_protocol_b_prime)
+#endif
+#ifndef NCI_PROTOCOL_DUAL
+#define NCI_PROTOCOL_DUAL (p_nfa_proprietary_cfg->pro_protocol_dual)
+#endif
+#ifndef NCI_PROTOCOL_15693
+#define NCI_PROTOCOL_15693 (p_nfa_proprietary_cfg->pro_protocol_15693)
+#endif
+#ifndef NCI_PROTOCOL_KOVIO
+#define NCI_PROTOCOL_KOVIO (p_nfa_proprietary_cfg->pro_protocol_kovio)
+#endif
+
+ /**********************************************
+ * Proprietary Discovery technology and mode
+ **********************************************/
+#ifndef NCI_DISCOVERY_TYPE_POLL_KOVIO
+#define NCI_DISCOVERY_TYPE_POLL_KOVIO (p_nfa_proprietary_cfg->pro_discovery_kovio_poll)
+#endif
+
+#ifndef NCI_DISCOVERY_TYPE_POLL_B_PRIME
+#define NCI_DISCOVERY_TYPE_POLL_B_PRIME (p_nfa_proprietary_cfg->pro_discovery_b_prime_poll)
+#endif
+
+#ifndef NCI_DISCOVERY_TYPE_LISTEN_B_PRIME
+#define NCI_DISCOVERY_TYPE_LISTEN_B_PRIME (p_nfa_proprietary_cfg->pro_discovery_b_prime_listen)
+#endif
+
+#endif /* __NFC_VENDOR_CFG_H__ */
diff --git a/src/nfa/dm/nfa_dm_act.c b/src/nfa/dm/nfa_dm_act.c
index 156b03c..942e301 100644
--- a/src/nfa/dm/nfa_dm_act.c
+++ b/src/nfa/dm/nfa_dm_act.c
@@ -1329,6 +1329,19 @@
/*******************************************************************************
**
+** Function nfa_dm_act_get_rf_disc_duration
+**
+** Description Get duration for RF discovery
+**
+** Returns UINT16
+**
+*******************************************************************************/
+UINT16 nfa_dm_act_get_rf_disc_duration ( )
+{
+ return (nfa_dm_cb.disc_cb.disc_duration);
+}
+/*******************************************************************************
+**
** Function nfa_dm_act_select
**
** Description Process RF select command
diff --git a/src/nfa/dm/nfa_dm_cfg.c b/src/nfa/dm/nfa_dm_cfg.c
index 202e213..a6d3173 100644
--- a/src/nfa/dm/nfa_dm_cfg.c
+++ b/src/nfa/dm/nfa_dm_cfg.c
@@ -121,3 +121,18 @@
};
tNFA_HCI_CFG *p_nfa_hci_cfg = (tNFA_HCI_CFG *) &nfa_hci_cfg;
+
+BOOLEAN nfa_poll_bail_out_mode = FALSE;
+const tNFA_PROPRIETARY_CFG nfa_proprietary_cfg =
+{
+ 0x80, /* NCI_PROTOCOL_18092_ACTIVE */
+ 0x81, /* NCI_PROTOCOL_B_PRIME */
+ 0x82, /* NCI_PROTOCOL_DUAL */
+ 0x83, /* NCI_PROTOCOL_15693 */
+ 0x8A, /* NCI_PROTOCOL_KOVIO */
+ 0x77, /* NCI_DISCOVERY_TYPE_POLL_KOVIO */
+ 0x74, /* NCI_DISCOVERY_TYPE_POLL_B_PRIME */
+ 0xF4, /* NCI_DISCOVERY_TYPE_LISTEN_B_PRIME */
+};
+
+tNFA_PROPRIETARY_CFG *p_nfa_proprietary_cfg = (tNFA_PROPRIETARY_CFG *) &nfa_proprietary_cfg;
diff --git a/src/nfa/dm/nfa_dm_discover.c b/src/nfa/dm/nfa_dm_discover.c
index f9e179f..d0c4fe0 100644
--- a/src/nfa/dm/nfa_dm_discover.c
+++ b/src/nfa/dm/nfa_dm_discover.c
@@ -29,12 +29,14 @@
#include "nfa_dm_int.h"
#include "nfa_p2p_int.h"
#include "nfa_sys_int.h"
+#include "nci_hmsgs.h"
#if (NFC_NFCEE_INCLUDED == TRUE)
#include "nfa_ee_api.h"
#include "nfa_ee_int.h"
#endif
#include "nfa_rw_int.h"
+#include "nfc_int.h"
/*
** static functions
*/
@@ -58,6 +60,15 @@
static char *nfa_dm_disc_event_2_str (UINT8 event);
#endif
+typedef struct nfa_dm_p2p_prio_logic
+{
+ BOOLEAN isodep_detected; /* flag to check if ISO-DEP is detected */
+ BOOLEAN timer_expired; /* flag to check whether timer is expired */
+ TIMER_LIST_ENT timer_list; /*timer structure pointer */
+ UINT8 first_tech_mode;
+}nfa_dm_p2p_prio_logic_t;
+
+static nfa_dm_p2p_prio_logic_t p2p_prio_logic_data;
/*******************************************************************************
**
@@ -644,9 +655,8 @@
/* Set initial disc_mask to legacy poll or listen */
tNFA_DM_DISC_TECH_PROTO_MASK disc_mask = ((tech_n_mode & 0x80) ? NFA_DM_DISC_MASK_L_LEGACY : NFA_DM_DISC_MASK_P_LEGACY);
- switch (tech_n_mode)
+ if (NFC_DISCOVERY_TYPE_POLL_A == tech_n_mode)
{
- case NFC_DISCOVERY_TYPE_POLL_A:
switch (protocol)
{
case NFC_PROTOCOL_T1T:
@@ -662,34 +672,41 @@
disc_mask = NFA_DM_DISC_MASK_PA_NFC_DEP;
break;
}
- break;
- case NFC_DISCOVERY_TYPE_POLL_B:
+ }
+ else if (NFC_DISCOVERY_TYPE_POLL_B == tech_n_mode)
+ {
if (protocol == NFC_PROTOCOL_ISO_DEP)
disc_mask = NFA_DM_DISC_MASK_PB_ISO_DEP;
- break;
- case NFC_DISCOVERY_TYPE_POLL_F:
+ }
+ else if (NFC_DISCOVERY_TYPE_POLL_F == tech_n_mode)
+ {
if (protocol == NFC_PROTOCOL_T3T)
disc_mask = NFA_DM_DISC_MASK_PF_T3T;
else if (protocol == NFC_PROTOCOL_NFC_DEP)
disc_mask = NFA_DM_DISC_MASK_PF_NFC_DEP;
- break;
- case NFC_DISCOVERY_TYPE_POLL_ISO15693:
+ }
+ else if (NFC_DISCOVERY_TYPE_POLL_ISO15693 == tech_n_mode)
+ {
disc_mask = NFA_DM_DISC_MASK_P_ISO15693;
- break;
- case NFC_DISCOVERY_TYPE_POLL_B_PRIME:
+ }
+ else if (NFC_DISCOVERY_TYPE_POLL_B_PRIME == tech_n_mode)
+ {
disc_mask = NFA_DM_DISC_MASK_P_B_PRIME;
- break;
- case NFC_DISCOVERY_TYPE_POLL_KOVIO:
+ }
+ else if (NFC_DISCOVERY_TYPE_POLL_KOVIO == tech_n_mode)
+ {
disc_mask = NFA_DM_DISC_MASK_P_KOVIO;
- break;
- case NFC_DISCOVERY_TYPE_POLL_A_ACTIVE:
+ }
+ else if (NFC_DISCOVERY_TYPE_POLL_A_ACTIVE == tech_n_mode)
+ {
disc_mask = NFA_DM_DISC_MASK_PAA_NFC_DEP;
- break;
- case NFC_DISCOVERY_TYPE_POLL_F_ACTIVE:
+ }
+ else if (NFC_DISCOVERY_TYPE_POLL_F_ACTIVE == tech_n_mode)
+ {
disc_mask = NFA_DM_DISC_MASK_PFA_NFC_DEP;
- break;
-
- case NFC_DISCOVERY_TYPE_LISTEN_A:
+ }
+ else if (NFC_DISCOVERY_TYPE_LISTEN_A == tech_n_mode)
+ {
switch (protocol)
{
case NFC_PROTOCOL_T1T:
@@ -705,29 +722,34 @@
disc_mask = NFA_DM_DISC_MASK_LA_NFC_DEP;
break;
}
- break;
- case NFC_DISCOVERY_TYPE_LISTEN_B:
+ }
+ else if (NFC_DISCOVERY_TYPE_LISTEN_B == tech_n_mode)
+ {
if (protocol == NFC_PROTOCOL_ISO_DEP)
disc_mask = NFA_DM_DISC_MASK_LB_ISO_DEP;
- break;
- case NFC_DISCOVERY_TYPE_LISTEN_F:
+ }
+ else if (NFC_DISCOVERY_TYPE_LISTEN_F == tech_n_mode)
+ {
if (protocol == NFC_PROTOCOL_T3T)
disc_mask = NFA_DM_DISC_MASK_LF_T3T;
else if (protocol == NFC_PROTOCOL_NFC_DEP)
disc_mask = NFA_DM_DISC_MASK_LF_NFC_DEP;
- break;
- case NFC_DISCOVERY_TYPE_LISTEN_ISO15693:
+ }
+ else if (NFC_DISCOVERY_TYPE_LISTEN_ISO15693 == tech_n_mode)
+ {
disc_mask = NFA_DM_DISC_MASK_L_ISO15693;
- break;
- case NFC_DISCOVERY_TYPE_LISTEN_B_PRIME:
+ }
+ else if (NFC_DISCOVERY_TYPE_LISTEN_B_PRIME == tech_n_mode)
+ {
disc_mask = NFA_DM_DISC_MASK_L_B_PRIME;
- break;
- case NFC_DISCOVERY_TYPE_LISTEN_A_ACTIVE:
+ }
+ else if (NFC_DISCOVERY_TYPE_LISTEN_A_ACTIVE == tech_n_mode)
+ {
disc_mask = NFA_DM_DISC_MASK_LAA_NFC_DEP;
- break;
- case NFC_DISCOVERY_TYPE_LISTEN_F_ACTIVE:
+ }
+ else if (NFC_DISCOVERY_TYPE_LISTEN_F_ACTIVE == tech_n_mode)
+ {
disc_mask = NFA_DM_DISC_MASK_LFA_NFC_DEP;
- break;
}
NFA_TRACE_DEBUG3 ("nfa_dm_disc_get_disc_mask (): tech_n_mode:0x%X, protocol:0x%X, disc_mask:0x%X",
@@ -2962,3 +2984,190 @@
return "Unknown";
}
#endif /* BT_TRACE_VERBOSE */
+
+/*******************************************************************************
+**
+** Function P2P_Prio_Logic
+**
+** Description Implements algorithm for NFC-DEP protocol priority over
+** ISO-DEP protocol.
+**
+** Returns True if success
+**
+*******************************************************************************/
+BOOLEAN nfa_dm_p2p_prio_logic (UINT8 event, UINT8 *p, UINT8 event_type)
+{
+ if (!nfa_poll_bail_out_mode)
+ {
+ NFA_TRACE_DEBUG0 ("p2p priority is running under bail out mode ONLY.");
+ return TRUE;
+ }
+
+ if ((nfa_dm_cb.flags & NFA_DM_FLAGS_P2P_PAUSED) &&
+ (nfa_dm_cb.flags & NFA_DM_FLAGS_LISTEN_DISABLED))
+ {
+ NFA_TRACE_DEBUG0 ("returning from nfa_dm_p2p_prio_logic Disable p2p_prio_logic");
+ return TRUE;
+ }
+
+ if (event == NCI_MSG_RF_DISCOVER && p2p_prio_logic_data.timer_expired == TRUE && event_type == NFA_DM_P2P_PRIO_RSP)
+ {
+ NFA_TRACE_DEBUG0 ("nfa_dm_p2p_prio_logic starting a timer for next rf intf activated ntf");
+ nfc_start_quick_timer (&p2p_prio_logic_data.timer_list,
+ NFC_TTYPE_P2P_PRIO_LOGIC_CLEANUP,
+ ((UINT32) nfa_dm_act_get_rf_disc_duration() * QUICK_TIMER_TICKS_PER_SEC) / 1000);
+ return TRUE;
+ }
+
+ if (event == NCI_MSG_RF_INTF_ACTIVATED && p2p_prio_logic_data.timer_expired == TRUE)
+ {
+ NFA_TRACE_DEBUG0 ("nfa_dm_p2p_prio_logic stopping a timer for next rf intf activated ntf");
+ nfc_stop_quick_timer (&p2p_prio_logic_data.timer_list);
+ }
+
+ if (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_DISCOVERY)
+ {
+ UINT8 rf_disc_id = 0xFF;
+ UINT8 type = 0xFF;
+ UINT8 protocol = 0xFF;
+ UINT8 tech_mode = 0xFF;
+
+ NFA_TRACE_DEBUG0 ("P2P_Prio_Logic");
+
+ if (event == NCI_MSG_RF_INTF_ACTIVATED )
+ {
+ rf_disc_id = *p++;
+ type = *p++;
+ protocol = *p++;
+ tech_mode = *p++;
+ }
+ NFA_TRACE_DEBUG1 ("nfa_dm_p2p_prio_logic event_type = 0x%x", event_type);
+
+ if (event == NCI_MSG_RF_INTF_ACTIVATED && tech_mode >= 0x80)
+ {
+ NFA_TRACE_DEBUG0 ("nfa_dm_p2p_prio_logic listen mode activated reset all the nfa_dm_p2p_prio_logic variables ");
+ nfa_dm_p2p_prio_logic_cleanup ();
+ }
+
+ if ((tech_mode < 0x80) &&
+ event == NCI_MSG_RF_INTF_ACTIVATED &&
+ protocol == NCI_PROTOCOL_ISO_DEP &&
+ p2p_prio_logic_data.isodep_detected == FALSE)
+ {
+ nfa_dm_p2p_prio_logic_cleanup ();
+ p2p_prio_logic_data.isodep_detected = TRUE;
+ p2p_prio_logic_data.first_tech_mode = tech_mode;
+ NFA_TRACE_DEBUG0 ("ISO-DEP Detected First Time Resume the Polling Loop");
+ nci_snd_deactivate_cmd (NFA_DEACTIVATE_TYPE_DISCOVERY);
+ return FALSE;
+ }
+
+ else if (event == NCI_MSG_RF_INTF_ACTIVATED &&
+ protocol == NCI_PROTOCOL_ISO_DEP &&
+ p2p_prio_logic_data.isodep_detected == TRUE &&
+ p2p_prio_logic_data.first_tech_mode != tech_mode)
+ {
+ p2p_prio_logic_data.isodep_detected = TRUE;
+ p2p_prio_logic_data.timer_expired = FALSE;
+ NFA_TRACE_DEBUG0 ("ISO-DEP Detected Second Time Other Techmode Resume the Polling Loop");
+ nfc_stop_quick_timer (&p2p_prio_logic_data.timer_list);
+ nci_snd_deactivate_cmd (NFA_DEACTIVATE_TYPE_DISCOVERY);
+ return FALSE;
+ }
+
+ else if (event == NCI_MSG_RF_INTF_ACTIVATED &&
+ protocol == NCI_PROTOCOL_ISO_DEP &&
+ p2p_prio_logic_data.isodep_detected == TRUE &&
+ p2p_prio_logic_data.timer_expired == TRUE)
+ {
+ NFA_TRACE_DEBUG0 ("ISO-DEP Detected TimerExpired, Final Notifying the Event");
+ nfc_stop_quick_timer (&p2p_prio_logic_data.timer_list);
+ nfa_dm_p2p_prio_logic_cleanup ();
+ }
+
+ else if (event == NCI_MSG_RF_INTF_ACTIVATED &&
+ protocol == NCI_PROTOCOL_ISO_DEP &&
+ p2p_prio_logic_data.isodep_detected == TRUE &&
+ p2p_prio_logic_data.first_tech_mode == tech_mode)
+ {
+ NFA_TRACE_DEBUG0 ("ISO-DEP Detected Same Techmode, Final Notifying the Event");
+ nfc_stop_quick_timer (&p2p_prio_logic_data.timer_list);
+ NFA_TRACE_DEBUG0 ("P2P_Stop_Timer");
+ nfa_dm_p2p_prio_logic_cleanup ();
+ }
+
+ else if (event == NCI_MSG_RF_INTF_ACTIVATED &&
+ protocol != NCI_PROTOCOL_ISO_DEP &&
+ p2p_prio_logic_data.isodep_detected == TRUE)
+ {
+ NFA_TRACE_DEBUG0 ("ISO-DEP Not Detected Giving Priority for other Technology");
+ nfc_stop_quick_timer (&p2p_prio_logic_data.timer_list);
+ NFA_TRACE_DEBUG0 ("P2P_Stop_Timer");
+ nfa_dm_p2p_prio_logic_cleanup ();
+ }
+
+ else if (event == NCI_MSG_RF_DEACTIVATE &&
+ p2p_prio_logic_data.isodep_detected == TRUE &&
+ p2p_prio_logic_data.timer_expired == FALSE &&
+ event_type == NFA_DM_P2P_PRIO_RSP)
+ {
+ NFA_TRACE_DEBUG0 ("NFA_DM_RF_DEACTIVATE_RSP");
+ return FALSE;
+ }
+
+ else if (event == NCI_MSG_RF_DEACTIVATE &&
+ p2p_prio_logic_data.isodep_detected == TRUE &&
+ p2p_prio_logic_data.timer_expired == FALSE &&
+ event_type == NFA_DM_P2P_PRIO_NTF)
+ {
+ NFA_TRACE_DEBUG0 ("NFA_DM_RF_DEACTIVATE_NTF");
+
+ nfc_start_quick_timer (&p2p_prio_logic_data.timer_list,
+ NFC_TTYPE_P2P_PRIO_RESPONSE,
+ ((UINT32) 160 * QUICK_TIMER_TICKS_PER_SEC) / 1000 );
+
+ NFA_TRACE_DEBUG0 ("P2P_Start_Timer");
+
+ return FALSE;
+ }
+ }
+
+ NFA_TRACE_DEBUG0 ("returning TRUE");
+ return TRUE;
+}
+
+/*******************************************************************************
+**
+** Function p2p_prio_logic_timeout
+**
+** Description Callback function for p2p timer
+**
+** Returns void
+**
+*******************************************************************************/
+void nfa_dm_p2p_timer_event ()
+{
+ NFA_TRACE_DEBUG0 ("P2P_Timer_timeout NFC-DEP Not Discovered!!");
+
+ p2p_prio_logic_data.timer_expired = TRUE;
+
+ if (p2p_prio_logic_data.isodep_detected == TRUE)
+ {
+ NFA_TRACE_DEBUG0 ("Deactivate and Restart RF discovery");
+ nci_snd_deactivate_cmd (NFC_DEACTIVATE_TYPE_IDLE);
+ }
+}
+
+/*******************************************************************************
+**
+** Function nfa_dm_p2p_prio_logic_cleanup
+**
+** Description Callback function for p2p prio logic cleanup timer
+**
+** Returns void
+**
+*******************************************************************************/
+void nfa_dm_p2p_prio_logic_cleanup ()
+{
+ memset (&p2p_prio_logic_data, 0x00, sizeof(nfa_dm_p2p_prio_logic_t));
+}
diff --git a/src/nfa/int/nfa_dm_int.h b/src/nfa/int/nfa_dm_int.h
index fc9b906..cadd18b 100644
--- a/src/nfa/int/nfa_dm_int.h
+++ b/src/nfa/int/nfa_dm_int.h
@@ -539,6 +539,7 @@
extern UINT8 nfa_ee_max_ee_cfg;
extern tNCI_DISCOVER_MAPS *p_nfa_dm_interface_mapping;
extern UINT8 nfa_dm_num_dm_interface_mapping;
+extern BOOLEAN nfa_poll_bail_out_mode;
/* NFA device manager control block */
#if NFA_DYNAMIC_MEMORY == FALSE
@@ -597,6 +598,7 @@
BOOLEAN nfa_dm_tout (tNFA_DM_MSG *p_data);
BOOLEAN nfa_dm_act_reg_vsc (tNFA_DM_MSG *p_data);
BOOLEAN nfa_dm_act_send_vsc (tNFA_DM_MSG *p_data);
+UINT16 nfa_dm_act_get_rf_disc_duration ();
BOOLEAN nfa_dm_act_disable_timeout (tNFA_DM_MSG *p_data);
BOOLEAN nfa_dm_act_nfc_cback_data (tNFA_DM_MSG *p_data);
diff --git a/src/nfa/rw/nfa_rw_act.c b/src/nfa/rw/nfa_rw_act.c
index 465f457..bcb10e5 100644
--- a/src/nfa/rw/nfa_rw_act.c
+++ b/src/nfa/rw/nfa_rw_act.c
@@ -1487,33 +1487,33 @@
tNFC_PROTOCOL protocol = nfa_rw_cb.protocol;
tNFC_STATUS status = NFC_STATUS_FAILED;
- switch (protocol)
+ if (NFC_PROTOCOL_T1T == protocol)
{
- case NFC_PROTOCOL_T1T: /* Type1Tag - NFC-A */
+ /* Type1Tag - NFC-A */
status = RW_T1tDetectNDef();
- break;
-
- case NFC_PROTOCOL_T2T: /* Type2Tag - NFC-A */
+ }
+ else if (NFC_PROTOCOL_T2T == protocol)
+ {
+ /* Type2Tag - NFC-A */
if (nfa_rw_cb.pa_sel_res == NFC_SEL_RES_NFC_FORUM_T2T)
{
status = RW_T2tDetectNDef(nfa_rw_cb.skip_dyn_locks);
}
- break;
-
- case NFC_PROTOCOL_T3T: /* Type3Tag - NFC-F */
+ }
+ else if (NFC_PROTOCOL_T3T == protocol)
+ {
+ /* Type3Tag - NFC-F */
status = RW_T3tDetectNDef();
- break;
-
- case NFC_PROTOCOL_ISO_DEP: /* ISODEP/4A,4B- NFC-A or NFC-B */
+ }
+ else if (NFC_PROTOCOL_ISO_DEP == protocol)
+ {
+ /* ISODEP/4A,4B- NFC-A or NFC-B */
status = RW_T4tDetectNDef();
- break;
-
- case NFC_PROTOCOL_15693: /* ISO 15693 */
+ }
+ else if (NFC_PROTOCOL_15693 == protocol)
+ {
+ /* ISO 15693 */
status = RW_I93DetectNDef();
- break;
-
- default:
- break;
}
return(status);
@@ -1563,34 +1563,35 @@
}
nfa_rw_cb.ndef_rd_offset = 0;
- switch (protocol)
+ if (NFC_PROTOCOL_T1T == protocol)
{
- case NFC_PROTOCOL_T1T: /* Type1Tag - NFC-A */
+ /* Type1Tag - NFC-A */
status = RW_T1tReadNDef(nfa_rw_cb.p_ndef_buf,(UINT16)nfa_rw_cb.ndef_cur_size);
- break;
-
- case NFC_PROTOCOL_T2T: /* Type2Tag - NFC-A */
+ }
+ else if (NFC_PROTOCOL_T2T == protocol)
+ {
+ /* Type2Tag - NFC-A */
if (nfa_rw_cb.pa_sel_res == NFC_SEL_RES_NFC_FORUM_T2T)
{
status = RW_T2tReadNDef(nfa_rw_cb.p_ndef_buf,(UINT16)nfa_rw_cb.ndef_cur_size);
}
- break;
-
- case NFC_PROTOCOL_T3T: /* Type3Tag - NFC-F */
- status = RW_T3tCheckNDef();
- break;
-
- case NFC_PROTOCOL_ISO_DEP: /* ISODEP/4A,4B- NFC-A or NFC-B */
- status = RW_T4tReadNDef();
- break;
-
- case NFC_PROTOCOL_15693: /* ISO 15693 */
- status = RW_I93ReadNDef();
- break;
-
- default:
- break;
}
+ else if (NFC_PROTOCOL_T3T == protocol)
+ {
+ /* Type3Tag - NFC-F */
+ status = RW_T3tCheckNDef();
+ }
+ else if (NFC_PROTOCOL_ISO_DEP == protocol)
+ {
+ /* ISODEP/4A,4B- NFC-A or NFC-B */
+ status = RW_T4tReadNDef();
+ }
+ else if (NFC_PROTOCOL_15693 == protocol)
+ {
+ /* ISO 15693 */
+ status = RW_I93ReadNDef();
+ }
+
return(status);
}
@@ -1649,34 +1650,33 @@
}
else
{
- switch (protocol)
+ if (NFC_PROTOCOL_T1T == protocol)
{
- case NFC_PROTOCOL_T1T: /* Type1Tag - NFC-A */
+ /* Type1Tag - NFC-A */
status = RW_T1tWriteNDef((UINT16)nfa_rw_cb.ndef_wr_len, nfa_rw_cb.p_ndef_wr_buf);
- break;
-
- case NFC_PROTOCOL_T2T: /* Type2Tag - NFC-A */
-
+ }
+ else if (NFC_PROTOCOL_T2T == protocol)
+ {
+ /* Type2Tag - NFC-A */
if (nfa_rw_cb.pa_sel_res == NFC_SEL_RES_NFC_FORUM_T2T)
{
status = RW_T2tWriteNDef((UINT16)nfa_rw_cb.ndef_wr_len, nfa_rw_cb.p_ndef_wr_buf);
}
- break;
-
- case NFC_PROTOCOL_T3T: /* Type3Tag - NFC-F */
+ }
+ else if (NFC_PROTOCOL_T3T == protocol)
+ {
+ /* Type3Tag - NFC-F */
status = RW_T3tUpdateNDef(nfa_rw_cb.ndef_wr_len, nfa_rw_cb.p_ndef_wr_buf);
- break;
-
- case NFC_PROTOCOL_ISO_DEP: /* ISODEP/4A,4B- NFC-A or NFC-B */
+ }
+ else if (NFC_PROTOCOL_ISO_DEP == protocol)
+ {
+ /* ISODEP/4A,4B- NFC-A or NFC-B */
status = RW_T4tUpdateNDef((UINT16)nfa_rw_cb.ndef_wr_len, nfa_rw_cb.p_ndef_wr_buf);
- break;
-
- case NFC_PROTOCOL_15693: /* ISO 15693 */
+ }
+ else if (NFC_PROTOCOL_15693 == protocol)
+ {
+ /* ISO 15693 */
status = RW_I93UpdateNDef((UINT16)nfa_rw_cb.ndef_wr_len, nfa_rw_cb.p_ndef_wr_buf);
- break;
-
- default:
- break;
}
}
@@ -1817,17 +1817,28 @@
UINT8 option = NFA_RW_OPTION_INVALID;
tNFA_RW_PRES_CHK_OPTION op_param = NFA_RW_PRES_CHK_DEFAULT;
- switch (protocol)
+ if (NFC_PROTOCOL_T1T == protocol)
{
- case NFC_PROTOCOL_T1T: /* Type1Tag - NFC-A */
+ /* Type1Tag - NFC-A */
status = RW_T1tPresenceCheck();
- break;
-
- case NFC_PROTOCOL_T3T: /* Type3Tag - NFC-F */
+ }
+ else if (NFC_PROTOCOL_T2T == protocol)
+ {
+ /* If T2T NFC-Forum, then let RW handle presence check; otherwise fall through */
+ if (sel_res == NFC_SEL_RES_NFC_FORUM_T2T)
+ {
+ /* Type 2 tag have not sent NACK after activation */
+ status = RW_T2tPresenceCheck();
+ }
+ }
+ else if (NFC_PROTOCOL_T3T == protocol)
+ {
+ /* Type3Tag - NFC-F */
status = RW_T3tPresenceCheck();
- break;
-
- case NFC_PROTOCOL_ISO_DEP: /* ISODEP/4A,4B- NFC-A or NFC-B */
+ }
+ else if (NFC_PROTOCOL_ISO_DEP == protocol)
+ {
+ /* ISODEP/4A,4B- NFC-A or NFC-B */
if (p_data)
{
op_param = p_data->op_req.params.option;
@@ -1892,27 +1903,16 @@
/* use sleep/wake for presence check */
unsupported = TRUE;
}
-
-
- break;
-
- case NFC_PROTOCOL_15693: /* ISO 15693 */
+ }
+ else if (NFC_PROTOCOL_15693 == protocol)
+ {
+ /* ISO 15693 */
status = RW_I93PresenceCheck();
- break;
-
- case NFC_PROTOCOL_T2T: /* Type2Tag - NFC-A */
- /* If T2T NFC-Forum, then let RW handle presence check; otherwise fall through */
- if (sel_res == NFC_SEL_RES_NFC_FORUM_T2T)
- {
- /* Type 2 tag have not sent NACK after activation */
- status = RW_T2tPresenceCheck();
- break;
- }
-
- default:
+ }
+ else
+ {
/* Protocol unsupported by RW module... */
unsupported = TRUE;
- break;
}
if (unsupported)
@@ -2065,9 +2065,9 @@
NFA_TRACE_DEBUG0 ("nfa_rw_config_tag_ro ()");
- switch (protocol)
+ if (NFC_PROTOCOL_T1T == protocol)
{
- case NFC_PROTOCOL_T1T:
+ /* Type1Tag - NFC-A */
if( (nfa_rw_cb.tlv_st == NFA_RW_TLV_DETECT_ST_OP_NOT_STARTED)
||(nfa_rw_cb.tlv_st == NFA_RW_TLV_DETECT_ST_MEM_TLV_OP_COMPLETE) )
{
@@ -2078,30 +2078,29 @@
{
status = RW_T1tSetTagReadOnly(b_hard_lock);
}
- break;
-
- case NFC_PROTOCOL_T2T:
+ }
+ else if (NFC_PROTOCOL_T2T == protocol)
+ {
+ /* Type2Tag - NFC-A */
if (nfa_rw_cb.pa_sel_res == NFC_SEL_RES_NFC_FORUM_T2T)
{
status = RW_T2tSetTagReadOnly(b_hard_lock);
}
- break;
-
- case NFC_PROTOCOL_T3T:
+ }
+ else if (NFC_PROTOCOL_T3T == protocol)
+ {
+ /* Type3Tag - NFC-F */
status = RW_T3tSetReadOnly(b_hard_lock);
- break;
-
- case NFC_PROTOCOL_ISO_DEP:
+ }
+ else if (NFC_PROTOCOL_ISO_DEP == protocol)
+ {
+ /* ISODEP/4A,4B- NFC-A or NFC-B */
status = RW_T4tSetNDefReadOnly();
- break;
-
- case NFC_PROTOCOL_15693:
+ }
+ else if (NFC_PROTOCOL_15693 == protocol)
+ {
+ /* ISO 15693 */
status = RW_I93SetTagReadOnly();
- break;
-
- default:
- break;
-
}
if (status == NFC_STATUS_OK)
@@ -2700,30 +2699,29 @@
}
/* Perform protocol-specific actions */
- switch (nfa_rw_cb.protocol)
+ if (NFC_PROTOCOL_T1T == nfa_rw_cb.protocol)
{
- case NFC_PROTOCOL_T1T:
/* Retrieve HR and UID fields from activation notification */
memcpy (tag_params.t1t.hr, p_activate_params->intf_param.intf_param.frame.param, NFA_T1T_HR_LEN);
memcpy (tag_params.t1t.uid, p_activate_params->rf_tech_param.param.pa.nfcid1, p_activate_params->rf_tech_param.param.pa.nfcid1_len);
msg.op = NFA_RW_OP_T1T_RID;
nfa_rw_handle_op_req ((tNFA_RW_MSG *)&msg);
activate_notify = FALSE; /* Delay notifying upper layer of NFA_ACTIVATED_EVT until HR0/HR1 is received */
- break;
-
- case NFC_PROTOCOL_T2T:
+ }
+ else if (NFC_PROTOCOL_T2T == nfa_rw_cb.protocol)
+ {
/* Retrieve UID fields from activation notification */
memcpy (tag_params.t2t.uid, p_activate_params->rf_tech_param.param.pa.nfcid1, p_activate_params->rf_tech_param.param.pa.nfcid1_len);
- break;
-
- case NFC_PROTOCOL_T3T:
+ }
+ else if (NFC_PROTOCOL_T3T == nfa_rw_cb.protocol)
+ {
/* Issue command to get Felica system codes */
activate_notify = FALSE; /* Delay notifying upper layer of NFA_ACTIVATED_EVT until system codes are retrieved */
msg.op = NFA_RW_OP_T3T_GET_SYSTEM_CODES;
nfa_rw_handle_op_req((tNFA_RW_MSG *)&msg);
- break;
-
- case NFC_PROTOCOL_15693:
+ }
+ else if (NFC_PROTOCOL_15693 == nfa_rw_cb.protocol)
+ {
/* Delay notifying upper layer of NFA_ACTIVATED_EVT to retrieve additional tag infomation */
nfa_rw_cb.flags |= NFA_RW_FL_ACTIVATION_NTF_PENDING;
activate_notify = FALSE;
@@ -2790,12 +2788,6 @@
nfa_rw_cb.i93_num_block = 0;
}
}
- break;
-
-
- default:
- /* No action needed for other protocols */
- break;
}
/* Notify upper layer of NFA_ACTIVATED_EVT if needed, and start presence check timer */
diff --git a/src/nfc/include/nfc_api.h b/src/nfc/include/nfc_api.h
index cfd0c79..f9cc864 100644
--- a/src/nfc/include/nfc_api.h
+++ b/src/nfc/include/nfc_api.h
@@ -32,6 +32,8 @@
#include "nfc_hal_api.h"
#include "gki.h"
+#include "vendor_cfg.h"
+
/* NFC application return status codes */
#define NFC_STATUS_OK NCI_STATUS_OK /* Command succeeded */
#define NFC_STATUS_REJECTED NCI_STATUS_REJECTED /* Command is rejected. */
diff --git a/src/nfc/int/nfc_int.h b/src/nfc/int/nfc_int.h
index 7845c69..5a45072 100644
--- a/src/nfc/int/nfc_int.h
+++ b/src/nfc/int/nfc_int.h
@@ -62,6 +62,8 @@
#define NFC_TTYPE_RW_T4T_RESPONSE 107
#define NFC_TTYPE_RW_I93_RESPONSE 108
#define NFC_TTYPE_CE_T4T_UPDATE 109
+#define NFC_TTYPE_P2P_PRIO_RESPONSE 110 /* added for p2p prio logic timer */
+#define NFC_TTYPE_P2P_PRIO_LOGIC_CLEANUP 111 /* added for p2p prio logic clenaup */
#define NFC_TTYPE_VS_BASE 200
@@ -81,6 +83,13 @@
};
typedef UINT8 tNFC_STATE;
+/* DM P2P Priority event type */
+enum
+{
+ NFA_DM_P2P_PRIO_RSP = 0x01, /* P2P priority event from RSP */
+ NFA_DM_P2P_PRIO_NTF /* P2P priority event from NTF */
+};
+
/* NFC control block flags */
#define NFC_FL_DEACTIVATING 0x0001 /* NFC_Deactivate () is called and the NCI cmd is not sent */
#define NFC_FL_RESTARTING 0x0002 /* restarting NFCC after PowerOffSleep */
@@ -249,6 +258,9 @@
NFC_API extern void nfc_ncif_proc_init_rsp (BT_HDR *p_msg);
NFC_API extern void nfc_ncif_proc_get_config_rsp (BT_HDR *p_msg);
NFC_API extern void nfc_ncif_proc_data (BT_HDR *p_msg);
+NFC_API extern BOOLEAN nfa_dm_p2p_prio_logic(UINT8 event, UINT8 *p, UINT8 ntf_rsp);
+NFC_API extern void nfa_dm_p2p_timer_event ();
+NFC_API extern void nfa_dm_p2p_prio_logic_cleanup ();
#if (NFC_RW_ONLY == FALSE)
NFC_API extern void nfc_ncif_proc_rf_field_ntf (UINT8 rf_status);
diff --git a/src/nfc/nci/nci_hrcv.c b/src/nfc/nci/nci_hrcv.c
index 0248212..e2a6384 100644
--- a/src/nfc/nci/nci_hrcv.c
+++ b/src/nfc/nci/nci_hrcv.c
@@ -169,6 +169,7 @@
switch (op_code)
{
case NCI_MSG_RF_DISCOVER:
+ nfa_dm_p2p_prio_logic (op_code, pp, NFA_DM_P2P_PRIO_RSP);
nfc_ncif_rf_management_status (NFC_START_DEVT, *pp);
break;
@@ -184,6 +185,10 @@
break;
case NCI_MSG_RF_DEACTIVATE:
+ if (FALSE == nfa_dm_p2p_prio_logic (op_code, pp, NFA_DM_P2P_PRIO_RSP))
+ {
+ return;
+ }
nfc_ncif_proc_deactivate (*pp, *p_old, FALSE);
break;
@@ -238,10 +243,18 @@
break;
case NCI_MSG_RF_DEACTIVATE:
+ if (FALSE == nfa_dm_p2p_prio_logic (op_code, pp, NFA_DM_P2P_PRIO_NTF))
+ {
+ return;
+ }
nfc_ncif_proc_deactivate (NFC_STATUS_OK, *pp, TRUE);
break;
case NCI_MSG_RF_INTF_ACTIVATED:
+ if (FALSE == nfa_dm_p2p_prio_logic (op_code, pp, NFA_DM_P2P_PRIO_NTF))
+ {
+ return;
+ }
nfc_ncif_proc_activate (pp, len);
break;
diff --git a/src/nfc/nfc/nfc_ncif.c b/src/nfc/nfc/nfc_ncif.c
index 4316807..ad64930 100644
--- a/src/nfc/nfc/nfc_ncif.c
+++ b/src/nfc/nfc/nfc_ncif.c
@@ -624,10 +624,10 @@
len = *p++;
p_start = p;
memset ( &p_param->param, 0, sizeof (tNFC_RF_TECH_PARAMU));
- switch (p_param->mode)
+
+ if ( NCI_DISCOVERY_TYPE_POLL_A == p_param->mode
+ || NCI_DISCOVERY_TYPE_POLL_A_ACTIVE == p_param->mode )
{
- case NCI_DISCOVERY_TYPE_POLL_A:
- case NCI_DISCOVERY_TYPE_POLL_A_ACTIVE:
p_pa = &p_param->param.pa;
/*
SENS_RES Response 2 bytes Defined in [DIGPROT] Available after Technology Detection
@@ -654,9 +654,9 @@
p_pa->hr[1] = *p;
}
}
- break;
-
- case NCI_DISCOVERY_TYPE_POLL_B:
+ }
+ else if (NCI_DISCOVERY_TYPE_POLL_B == p_param->mode)
+ {
/*
SENSB_RES Response length (n) 1 byte Length of SENSB_RES Response (Byte 2 - Byte 12 or 13)Available after Technology Detection
SENSB_RES Response Byte 2 - Byte 12 or 13 11 or 12 bytes Defined in [DIGPROT] Available after Technology Detection
@@ -667,10 +667,10 @@
p_pb->sensb_res_len = NCI_MAX_SENSB_RES_LEN;
STREAM_TO_ARRAY (p_pb->sensb_res, p, p_pb->sensb_res_len);
memcpy (p_pb->nfcid0, p_pb->sensb_res, NFC_NFCID0_MAX_LEN);
- break;
-
- case NCI_DISCOVERY_TYPE_POLL_F:
- case NCI_DISCOVERY_TYPE_POLL_F_ACTIVE:
+ }
+ else if ( NCI_DISCOVERY_TYPE_POLL_F == p_param->mode
+ || NCI_DISCOVERY_TYPE_POLL_F_ACTIVE == p_param->mode )
+ {
/*
Bit Rate 1 byte 1 212 kbps/2 424 kbps/0 and 3 to 255 RFU
SENSF_RES Response length.(n) 1 byte Length of SENSF_RES (Byte 2 - Byte 17 or 19).Available after Technology Detection
@@ -685,26 +685,26 @@
memcpy (p_pf->nfcid2, p_pf->sensf_res, NCI_NFCID2_LEN);
p_pf->mrti_check = p_pf->sensf_res[NCI_MRTI_CHECK_INDEX];
p_pf->mrti_update = p_pf->sensf_res[NCI_MRTI_UPDATE_INDEX];
- break;
-
- case NCI_DISCOVERY_TYPE_LISTEN_F:
- case NCI_DISCOVERY_TYPE_LISTEN_F_ACTIVE:
+ }
+ else if ( NCI_DISCOVERY_TYPE_LISTEN_F == p_param->mode
+ || NCI_DISCOVERY_TYPE_LISTEN_F_ACTIVE == p_param->mode )
+ {
p_lf = &p_param->param.lf;
u8 = *p++;
if (u8)
{
STREAM_TO_ARRAY (p_lf->nfcid2, p, NCI_NFCID2_LEN);
}
- break;
-
- case NCI_DISCOVERY_TYPE_POLL_ISO15693:
+ }
+ else if (NCI_DISCOVERY_TYPE_POLL_ISO15693 == p_param->mode)
+ {
p_i93 = &p_param->param.pi93;
p_i93->flag = *p++;
p_i93->dsfid = *p++;
STREAM_TO_ARRAY (p_i93->uid, p, NFC_ISO15693_UID_LEN);
- break;
-
- case NCI_DISCOVERY_TYPE_POLL_KOVIO:
+ }
+ else if (NCI_DISCOVERY_TYPE_POLL_KOVIO == p_param->mode)
+ {
p_param->param.pk.uid_len = *p++;
if (p_param->param.pk.uid_len > NFC_KOVIO_MAX_LEN)
{
@@ -712,7 +712,6 @@
p_param->param.pk.uid_len = NFC_KOVIO_MAX_LEN;
}
STREAM_TO_ARRAY (p_param->param.pk.uid, p, p_param->param.pk.uid_len);
- break;
}
return (p_start + len);
diff --git a/src/nfc/nfc/nfc_task.c b/src/nfc/nfc/nfc_task.c
index 9d9b74a..1ead9b2 100644
--- a/src/nfc/nfc/nfc_task.c
+++ b/src/nfc/nfc/nfc_task.c
@@ -278,6 +278,12 @@
case NFC_TTYPE_RW_I93_RESPONSE:
rw_i93_process_timeout (p_tle);
break;
+ case NFC_TTYPE_P2P_PRIO_RESPONSE:
+ nfa_dm_p2p_timer_event ();
+ break;
+ case NFC_TTYPE_P2P_PRIO_LOGIC_CLEANUP:
+ nfa_dm_p2p_prio_logic_cleanup ();
+ break;
#if (NFC_RW_ONLY == FALSE)
case NFC_TTYPE_CE_T4T_UPDATE:
ce_t4t_process_timeout (p_tle);
diff --git a/src/nfc/tags/rw_main.c b/src/nfc/tags/rw_main.c
index c11f592..d9fe097 100644
--- a/src/nfc/tags/rw_main.c
+++ b/src/nfc/tags/rw_main.c
@@ -227,51 +227,55 @@
#endif /* RW_STATS_INCLUDED */
rw_cb.p_cback = p_cback;
- switch (p_activate_params->protocol)
- {
/* not a tag NFC_PROTOCOL_NFCIP1: NFCDEP/LLCP - NFC-A or NFC-F */
- case NFC_PROTOCOL_T1T: /* Type1Tag - NFC-A */
+ if (NFC_PROTOCOL_T1T == p_activate_params->protocol)
+ {
+ /* Type1Tag - NFC-A */
if (p_activate_params->rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_A)
{
status = rw_t1t_select (p_activate_params->rf_tech_param.param.pa.hr,
p_activate_params->rf_tech_param.param.pa.nfcid1);
}
- break;
-
- case NFC_PROTOCOL_T2T: /* Type2Tag - NFC-A */
+ }
+ else if (NFC_PROTOCOL_T2T == p_activate_params->protocol)
+ {
+ /* Type2Tag - NFC-A */
if (p_activate_params->rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_A)
{
if (p_activate_params->rf_tech_param.param.pa.sel_rsp == NFC_SEL_RES_NFC_FORUM_T2T)
status = rw_t2t_select ();
}
- break;
-
- case NFC_PROTOCOL_T3T: /* Type3Tag - NFC-F */
+ }
+ else if (NFC_PROTOCOL_T3T == p_activate_params->protocol)
+ {
+ /* Type3Tag - NFC-F */
if (p_activate_params->rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_F)
{
status = rw_t3t_select (p_activate_params->rf_tech_param.param.pf.nfcid2,
p_activate_params->rf_tech_param.param.pf.mrti_check,
p_activate_params->rf_tech_param.param.pf.mrti_update);
}
- break;
-
- case NFC_PROTOCOL_ISO_DEP: /* ISODEP/4A,4B- NFC-A or NFC-B */
+ }
+ else if (NFC_PROTOCOL_ISO_DEP == p_activate_params->protocol)
+ {
+ /* ISODEP/4A,4B- NFC-A or NFC-B */
if ( (p_activate_params->rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_B)
||(p_activate_params->rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_A) )
{
status = rw_t4t_select ();
}
- break;
-
- case NFC_PROTOCOL_15693: /* ISO 15693 */
+ }
+ else if (NFC_PROTOCOL_15693 == p_activate_params->protocol)
+ {
+ /* ISO 15693 */
if (p_activate_params->rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_ISO15693)
{
status = rw_i93_select (p_activate_params->rf_tech_param.param.pi93.uid);
}
- break;
+ }
/* TODO set up callback for proprietary protocol */
-
- default:
+ else
+ {
RW_TRACE_ERROR0 ("RW_SetActivatedTagType Invalid protocol");
}