Fix conflict vendor proprietary Protocol and Discovery technology definitions

A new configuration option is added.
Vendor should provide their own definition in libnfc-brcm.conf file.

Change-Id: I8204fbb97bcb59ecf7b450b701546646e1952a78
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 99bc87d..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,7 +48,9 @@
 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 [];
@@ -148,6 +151,11 @@
         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
     num = GetStrValue ( NAME_DEVICE_HOST_WHITE_LIST, (char*) deviceHostWhiteList, sizeof ( deviceHostWhiteList ) );
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 6b108dc..b41023b 100644
--- a/src/include/config.h
+++ b/src/include/config.h
@@ -89,6 +89,7 @@
 #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_cfg.c b/src/nfa/dm/nfa_dm_cfg.c
index 285573e..a6d3173 100644
--- a/src/nfa/dm/nfa_dm_cfg.c
+++ b/src/nfa/dm/nfa_dm_cfg.c
@@ -123,3 +123,16 @@
 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 d0f5fd5..d0c4fe0 100644
--- a/src/nfa/dm/nfa_dm_discover.c
+++ b/src/nfa/dm/nfa_dm_discover.c
@@ -655,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:
@@ -673,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:
@@ -716,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",
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/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/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");
     }