NFC_NCIHALx_AR3C.7.0.3_N_OpnSrc
diff --git a/Android.mk b/Android.mk
index 7435f7e..84f0685 100644
--- a/Android.mk
+++ b/Android.mk
@@ -52,11 +52,11 @@
LOCAL_CFLAGS += -DNFC_NXP_ESE=TRUE
LOCAL_CFLAGS += -DNFC_NXP_ESE_VER=$(JCOP_VER_3_3)
else
-LOCAL_CFLAGS += -DNFC_NXP_ESE=TRUE
+LOCAL_CFLAGS += -DNFC_NXP_ESE=FALSE
endif
#### Select the CHIP ####
-NXP_CHIP_TYPE := $(PN553)
+NXP_CHIP_TYPE := $(PN551)
ifeq ($(NXP_CHIP_TYPE),$(PN547C2))
D_CFLAGS += -DNFC_NXP_CHIP_TYPE=PN547C2
diff --git a/halimpl/pn54x/Android.mk b/halimpl/pn54x/Android.mk
index aeb59b7..ea2e498 100644
--- a/halimpl/pn54x/Android.mk
+++ b/halimpl/pn54x/Android.mk
@@ -51,7 +51,7 @@
endif
#### Select the CHIP ####
-NXP_CHIP_TYPE := $(PN553)
+NXP_CHIP_TYPE := $(PN551)
ifeq ($(NXP_CHIP_TYPE),$(PN547C2))
D_CFLAGS += -DNFC_NXP_CHIP_TYPE=PN547C2
@@ -95,7 +95,6 @@
-DNXP_UICC_ENABLE -DNXP_HW_SELF_TEST
LOCAL_CFLAGS += -DNFC_NXP_HFO_SETTINGS=FALSE
LOCAL_CFLAGS += -DNFC_NXP_ESE=TRUE
-LOCAL_CFLAGS += -DNFC_NXP_STAT_DUAL_UICC_EXT_SWITCH=TRUE
LOCAL_CFLAGS += $(D_CFLAGS)
#LOCAL_CFLAGS += -DFELICA_CLT_ENABLE
#-DNXP_PN547C1_DOWNLOAD
diff --git a/halimpl/pn54x/common/phNfcCommon.h b/halimpl/pn54x/common/phNfcCommon.h
index a89f724..667ab49 100644
--- a/halimpl/pn54x/common/phNfcCommon.h
+++ b/halimpl/pn54x/common/phNfcCommon.h
@@ -77,8 +77,8 @@
#define COMPILATION_MW "PN547C2"
#endif
/* HAL Version number (Updated as per release) */
-#define NXP_MW_VERSION_MAJ (7U)
-#define NXP_MW_VERSION_MIN (00)
+#define NXP_MW_VERSION_MAJ (0U)
+#define NXP_MW_VERSION_MIN (3U)
#define GET_EEPROM_DATA (1U)
#define SET_EEPROM_DATA (2U)
diff --git a/halimpl/pn54x/configs/NXP_ESE_Features.h b/halimpl/pn54x/configs/NXP_ESE_Features.h
index 353bb6e..640ed8d 100755
--- a/halimpl/pn54x/configs/NXP_ESE_Features.h
+++ b/halimpl/pn54x/configs/NXP_ESE_Features.h
@@ -17,14 +17,15 @@
/*
* NXP ESE features macros definitions
*/
-#if(NFC_NXP_ESE == TRUE)
+
#ifndef NXP_ESE_FEATURES_H
#define NXP_ESE_FEATURES_H
+#if(NFC_NXP_ESE == TRUE)
+
// Reset Schemes
#define NXP_ESE_PN67T_RESET 1
#define NXP_ESE_APDU_GATE_RESET 2
-
/** Dual/Triple mode priority schemes **/
#define NXP_ESE_EXCLUSIVE_WIRED_MODE 1
#define NXP_ESE_WIRED_MODE_RESUME 2
@@ -32,56 +33,56 @@
#if(NFC_NXP_CHIP_TYPE == PN547C2)
#define NXP_ESE_WIRED_MODE_DISABLE_DISCOVERY TRUE
-#endif
-#if(NFC_NXP_CHIP_TYPE == PN551)
+#elif((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
#define NFC_NXP_TRIPLE_MODE_PROTECTION TRUE
- #define NXP_ESE_FELICA_CLT TRUE
+ #define NXP_ESE_FELICA_CLT FALSE
#define NXP_WIRED_MODE_STANDBY_PROP TRUE
//dual mode prio scheme
- #define NXP_ESE_DUAL_MODE_PRIO_SCHEME NXP_ESE_WIRED_MODE_TIMEOUT
- //Reset scheme
- #define NXP_ESE_RESET_METHOD FALSE
+ #define NXP_ESE_DUAL_MODE_PRIO_SCHEME NXP_ESE_WIRED_MODE_TIMEOUT
+ //Reset scheme
+ #define NXP_ESE_RESET_METHOD FALSE
#elif(NFC_NXP_CHIP_TYPE == PN553)
#define NFC_NXP_TRIPLE_MODE_PROTECTION FALSE
- #define NXP_ESE_FELICA_CLT FALSE
- #define NXP_ESE_WIRED_MODE_PRIO FALSE //eSE wired mode prio over UICC wired mode
- #define NXP_ESE_UICC_EXCLUSIVE_WIRED_MODE FALSE // UICC exclusive wired mode
+ #define NXP_ESE_FELICA_CLT TRUE
+ #define NXP_ESE_WIRED_MODE_PRIO FALSE
+ #define NXP_ESE_UICC_EXCLUSIVE_WIRED_MODE FALSE // UICC exclusive wired mode
//dual mode prio scheme
- #define NXP_ESE_DUAL_MODE_PRIO_SCHEME NXP_ESE_WIRED_MODE_TIMEOUT
- //Reset scheme
- #define NXP_ESE_RESET_METHOD TRUE
- #define NXP_ESE_POWER_MODE TRUE
- #define NXP_ESE_P73_ISO_RST TRUE
- #define NXP_WIRED_MODE_STANDBY TRUE
+ #define NXP_ESE_DUAL_MODE_PRIO_SCHEME NXP_ESE_WIRED_MODE_TIMEOUT
+ //reset scheme
+ #define NXP_ESE_RESET_METHOD TRUE
+ #define NXP_ESE_POWER_MODE TRUE
+ #define NXP_ESE_P73_ISO_RST TRUE
+ #define NXP_BLOCK_PROPRIETARY_APDU_GATE FALSE
+ #define NXP_WIRED_MODE_STANDBY TRUE
#endif
-#endif /* end of #ifndef NXP_ESE_FEATURES_H */
-#else
+#else /*Else of #if(NFC_NXP_ESE == TRUE)*/
#if(NFC_NXP_CHIP_TYPE == PN547C2)
#define NXP_ESE_WIRED_MODE_DISABLE_DISCOVERY FALSE
#endif
-#if(NFC_NXP_CHIP_TYPE == PN551)
+#if((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
#define NFC_NXP_TRIPLE_MODE_PROTECTION FALSE
- #define NXP_ESE_FELICA_CLT FALSE
#define NXP_WIRED_MODE_STANDBY_PROP FALSE
-
- //Reset scheme
- #define NXP_ESE_RESET_METHOD FALSE
+ #define NXP_ESE_FELICA_CLT FALSE
+ //Reset scheme
+ #define NXP_ESE_RESET_METHOD FALSE
#elif(NFC_NXP_CHIP_TYPE == PN553)
#define NFC_NXP_TRIPLE_MODE_PROTECTION FALSE
#define NXP_ESE_FELICA_CLT FALSE
#define NXP_ESE_WIRED_MODE_PRIO FALSE //eSE wired mode prio over UICC wired mode
#define NXP_ESE_UICC_EXCLUSIVE_WIRED_MODE FALSE // UICC exclusive wired mode
+ //reset scheme
+ #define NXP_ESE_RESET_METHOD FALSE
+ #define NXP_ESE_POWER_MODE FALSE
+ #define NXP_ESE_P73_ISO_RST FALSE
+ #define NXP_BLOCK_PROPRIETARY_APDU_GATE FALSE
+ #define NXP_WIRED_MODE_STANDBY FALSE
+#endif
- //Reset scheme
- #define NXP_ESE_RESET_METHOD FALSE
- #define NXP_ESE_POWER_MODE FALSE
- #define NXP_ESE_P73_ISO_RST FALSE
- #define NXP_WIRED_MODE_STANDBY FALSE
-#endif
-#endif
+#endif /*End of #if(NFC_NXP_ESE == TRUE)*/
+#endif /*End of #ifndef NXP_ESE_FEATURES_H */
diff --git a/halimpl/pn54x/dnld/phDnldNfc.c b/halimpl/pn54x/dnld/phDnldNfc.c
index d5bd7a2..8bb64c7 100644
--- a/halimpl/pn54x/dnld/phDnldNfc.c
+++ b/halimpl/pn54x/dnld/phDnldNfc.c
@@ -30,7 +30,7 @@
uint16_t wMwVer = 0; /* Middleware version no */
uint16_t wFwVer = 0; /* Firmware version no */
#if(NFC_NXP_CHIP_TYPE != PN547C2)
-uint8_t gRecFWDwnld; // flag set to true to indicate dummy FW download
+uint8_t gRecFWDwnld; /* flag set to true to indicate dummy FW download */
#endif
static pphDnldNfc_DlContext_t gpphDnldContext = NULL; /* Download contex */
static pphDnldNfc_RspCb_t UserCb; /* Upper layer call back function */
diff --git a/halimpl/pn54x/dnld/phNxpNciHal_Dnld.c b/halimpl/pn54x/dnld/phNxpNciHal_Dnld.c
index e2fe3ce..ef64578 100644
--- a/halimpl/pn54x/dnld/phNxpNciHal_Dnld.c
+++ b/halimpl/pn54x/dnld/phNxpNciHal_Dnld.c
@@ -36,7 +36,7 @@
extern uint16_t wFwVer;
extern uint16_t wMwVer;
#if(NFC_NXP_CHIP_TYPE != PN547C2)
-extern uint8_t gRecFWDwnld; // flag set to true to indicate dummy FW download
+extern uint8_t gRecFWDwnld; /* flag set to true to indicate dummy FW download */
#endif
/* RF Configuration structure */
typedef struct phLibNfc_IoctlSetRfConfig
diff --git a/halimpl/pn54x/hal/phNxpNciHal.c b/halimpl/pn54x/hal/phNxpNciHal.c
index ea86486..00e4d2b 100644
--- a/halimpl/pn54x/hal/phNxpNciHal.c
+++ b/halimpl/pn54x/hal/phNxpNciHal.c
@@ -70,7 +70,9 @@
extern int phNxpNciHal_CheckFwRegFlashRequired(uint8_t* fw_update_req, uint8_t* rf_update_req);
phNxpNci_getCfg_info_t* mGetCfg_info = NULL;
-
+#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+uint32_t gSvddSyncOff_Delay = 10;
+#endif
/* global variable to get FW version from NCI response*/
uint32_t wFwVerRsp;
/* External global variable to get FW version */
@@ -82,7 +84,7 @@
extern int kovio_detected;
extern int disable_kovio;
#if(NFC_NXP_CHIP_TYPE != PN547C2)
-extern uint8_t gRecFWDwnld;// flag set to true to indicate dummy FW download
+extern uint8_t gRecFWDwnld;/* flag set to true to indicate dummy FW download */
static uint8_t gRecFwRetryCount; //variable to hold dummy FW recovery count
#endif
static uint8_t write_unlocked_status = NFCSTATUS_SUCCESS;
@@ -1239,7 +1241,7 @@
#if(NFC_NXP_CHIP_TYPE != PN547C2)
//initialize dummy FW recovery variables
gRecFwRetryCount = 0;
- gRecFWDwnld = 0;
+ gRecFWDwnld = FALSE;
#endif
// recovery --start
/*NCI_INIT_CMD*/
@@ -1347,7 +1349,19 @@
goto retry_core_init;
}
}
-
+#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+ if(GetNxpNumValue(NAME_NXP_SVDD_SYNC_OFF_DELAY, (void *)&gSvddSyncOff_Delay, sizeof(gSvddSyncOff_Delay)))
+ {
+ if(gSvddSyncOff_Delay>20)
+ gSvddSyncOff_Delay=10;
+ NXPLOG_NCIHAL_E("NAME_NXP_SVDD_SYNC_OFF_DELAY success value = %d", gSvddSyncOff_Delay);
+ }
+ else
+ {
+ NXPLOG_NCIHAL_E("NAME_NXP_SVDD_SYNC_OFF_DELAY failed");
+ gSvddSyncOff_Delay = 10;
+ }
+#endif
config_access = FALSE;
phNxpNciHal_check_factory_reset();
@@ -1527,7 +1541,8 @@
goto retry_core_init;
}
}
-
+ if((fw_dwnld_flag == 0x01) || (TRUE == setConfigAlways))
+ {
retlen = 0;
#if(NFC_NXP_CHIP_TYPE != PN547C2)
NXPLOG_NCIHAL_D ("Performing TVDD Settings");
@@ -1576,7 +1591,14 @@
}
#endif
- retlen = 0;
+ }
+ retlen = 0;
+ num = 0;
+ isfound = GetNxpNumValue(NAME_NXP_RF_UPDATE_REQ, &num, sizeof(num));
+ if ((fw_dwnld_flag == 0x01)||
+ (TRUE == setConfigAlways) ||
+ ((isfound > 0)&&(num == 1)))
+ {
#if(NFC_NXP_CHIP_TYPE != PN547C2)
config_access = FALSE;
#endif
@@ -1756,7 +1778,10 @@
goto retry_core_init;
}
}
-
+ }
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
+ config_access = TRUE;
+#endif
retlen = 0;
NXPLOG_NCIHAL_D ("Performing NAME_NXP_CORE_CONF Settings");
@@ -1967,6 +1992,16 @@
if(!((*p_core_init_rsp_params > 0) && (*p_core_init_rsp_params < 4)))
{
+ status = phNxpNciHal_send_ext_cmd(sizeof(cmd_reset_nci),cmd_reset_nci);
+ if(status == NFCSTATUS_SUCCESS )
+ {
+ if(phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci),cmd_init_nci) != NFCSTATUS_SUCCESS)
+ return NFCSTATUS_FAILED;
+ }
+ else
+ {
+ return NFCSTATUS_FAILED;
+ }
status = phNxpNciHal_send_get_cfgs();
if(status == NFCSTATUS_SUCCESS)
{
@@ -2129,7 +2164,7 @@
config_access = FALSE;
#if(NFC_NXP_CHIP_TYPE != PN547C2)
//initialize dummy FW recovery variables
- gRecFWDwnld = 0;
+ gRecFWDwnld = FALSE;
gRecFwRetryCount = 0;
#endif
if(!((*p_core_init_rsp_params > 0) && (*p_core_init_rsp_params < 4)))
@@ -2909,8 +2944,6 @@
ret = 0;
}
break;
-
-
case HAL_NFC_IOCTL_P73_ISO_RST:
status = phTmlNfc_IoCtl(phTmlNfc_e_P73IsoRstMode);
if(NFCSTATUS_FAILED != status)
@@ -2920,7 +2953,16 @@
ret = 0;
}
break;
-
+#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+ case HAL_NFC_IOCTL_REL_SVDD_WAIT:
+ status = phTmlNfc_rel_svdd_wait(gpphTmlNfc_Context->pDevHandle);
+ NXPLOG_NCIHAL_D("HAL_NFC_IOCTL_P61_REL_SVDD_WAIT retval = %d\n",status);
+ if(NFCSTATUS_SUCCESS == status)
+ {
+ ret = 0;
+ }
+ break;
+#endif
#endif
case HAL_NFC_IOCTL_SET_BOOT_MODE:
if(NULL != p_data)
diff --git a/halimpl/pn54x/hal/phNxpNciHal_ext.c b/halimpl/pn54x/hal/phNxpNciHal_ext.c
index cf6cc51..89ab80f 100644
--- a/halimpl/pn54x/hal/phNxpNciHal_ext.c
+++ b/halimpl/pn54x/hal/phNxpNciHal_ext.c
@@ -61,7 +61,9 @@
static uint32_t iCoreRstNtfLen;
extern uint32_t timeoutTimerId;
-
+#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+extern uint32_t gSvddSyncOff_Delay; /*default delay*/
+#endif
extern NFCSTATUS read_retry();
/************** HAL extension functions ***************************************/
static void hal_extns_write_rsp_timeout_cb(uint32_t TimerId, void *pContext);
@@ -735,7 +737,16 @@
nxpprofile_ctrl.profile_type = NFC_FORUM_PROFILE;
status = NFCSTATUS_SUCCESS;
}
-
+#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+ else if (p_cmd_data[0] == 0x2F &&
+ p_cmd_data[1] == 0x31 &&
+ p_cmd_data[2] == 0x01 &&
+ p_cmd_data[3] == 0x00)
+ {
+ NXPLOG_NCIHAL_D ("SVDD Sync Off Command - delay it by %d ms", gSvddSyncOff_Delay);
+ usleep(gSvddSyncOff_Delay*1000);
+ }
+#endif
if (nxpprofile_ctrl.profile_type == EMV_CO_PROFILE)
{
if (p_cmd_data[0] == 0x21 &&
diff --git a/halimpl/pn54x/libnfc-nxp-PN66T_example.conf b/halimpl/pn54x/libnfc-nxp-PN66T_example.conf
index 24954cb..9484005 100644
--- a/halimpl/pn54x/libnfc-nxp-PN66T_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN66T_example.conf
@@ -72,7 +72,7 @@
###############################################################################
# Standby enable settings
-#NXP_CORE_STANDBY={2F, 00, 01, 01}
+# NXP_CORE_STANDBY={2F, 00, 01, 01}
###############################################################################
# NXP TVDD configurations settings
@@ -145,7 +145,8 @@
# Clock settings A002, A003
# PbF settings A008
# Clock timeout settings A004
-NXP_CORE_CONF_EXTN={20, 02, 21, 08,
+# A0 9F 02 <svdd ON guard time (msec)> <svdd off guard time(msec)>
+NXP_CORE_CONF_EXTN={20, 02, 26, 09,
A0, EC, 01, 01,
A0, ED, 01, 03,
A0, 5E, 01, 01,
@@ -153,7 +154,8 @@
A0, 40, 01, 01,
A0, DD, 01, 2D,
A0, F2, 01, 01,
- A0, 96, 01, 01
+ A0, 96, 01, 01,
+ A0, 9F, 02, 08, 08
}
# A0, 41, 01, 02,
# A0, 43, 01, 04,
@@ -215,7 +217,8 @@
#PN65T 0x02
#PN548AD 0x03
#PN66T 0x04
-
+#PN551 0x05
+#PN67T 0x06
NXP_NFC_CHIP=0x04
###############################################################################
@@ -308,7 +311,7 @@
###############################################################################
#CHINA_TIANJIN_RF_SETTING
#Enable 0x01
-#Disable 0x00
+#Disable 0x00
NXP_CHINA_TIANJIN_RF_ENABLED=0x01
###############################################################################
#SWP_SWITCH_TIMEOUT_SETTING
@@ -382,13 +385,17 @@
#################################################################################
# JCOP-3.3 continuous process timeout in msec and value should be in Hexadecimal.
# JCOP CP TIMEOUT
-NXP_CP_TIMEOUT={00, 77}
+# NXP_CP_TIMEOUT={00, 77}
###############################################################################
# Enable/Disable checking default proto SE Id
# Disable 0x00
# Enable 0x01
NXP_CHECK_DEFAULT_PROTO_SE_ID=0x01
###############################################################################
+# SVDD sync off Delay in ms it can be max 20 ms
+# If out of range timeout used, default delay of 10ms will be set
+NXP_SVDD_SYNC_OFF_DELAY=10
+###############################################################################
#NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE
#Enable/Disable block number checks for china transit use case
#Enable 0x01
diff --git a/halimpl/pn54x/libnfc-nxp-PN67T_example.conf b/halimpl/pn54x/libnfc-nxp-PN67T_example.conf
index 843eedc..b73bb5f 100644
--- a/halimpl/pn54x/libnfc-nxp-PN67T_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN67T_example.conf
@@ -38,7 +38,7 @@
#define CLK_SRC_XTAL 1
#define CLK_SRC_PLL 2
-NXP_SYS_CLK_SRC_SEL=0x01
+NXP_SYS_CLK_SRC_SEL=0x02
###############################################################################
# System clock frequency selection configuration
@@ -49,7 +49,7 @@
#define CLK_FREQ_38_4MHZ 5
#define CLK_FREQ_52MHZ 6
-NXP_SYS_CLK_FREQ_SEL=0x01
+NXP_SYS_CLK_FREQ_SEL=0x02
###############################################################################
# The timeout value to be used for clock request acknowledgment
@@ -73,8 +73,7 @@
###############################################################################
# Standby enable settings
-NXP_CORE_STANDBY={2F, 00, 01, 01}
-
+# NXP_CORE_STANDBY={2F, 00, 01, 01}
###############################################################################
# NXP TVDD configurations settings
@@ -88,12 +87,12 @@
NXP_EXT_TVDD_CFG_1={20, 02, 0B, 02, A0, 66, 01, 00, A0, 0E, 03, 02, 09, 00}
#config2: use DCDC in CE, use Tx_Pwr_Req, set CFG2 mode, SLALM,
-#monitoring 5V from DCDC, 3.3V for both RM and CM, DCDCWaitTime=4.2ms
-NXP_EXT_TVDD_CFG_2={20, 02, 0B, 02, A0, 66, 01, 00, A0, 0E, 03, 56, 24, 08 }
+#monitoring 5V from DCDC, 4.7V for both RM and CM, DCDCWaitTime=4.2ms
+NXP_EXT_TVDD_CFG_2={20, 02, 0B, 02, A0, 66, 01, 00, A0, 0E, 03, 56, 64, 0A}
#config3: use DCDC in CE, use Tx_Pwr_Req, SLALM, monitoring 5V from DCDC,
#DCDCWaitTime=4.2ms
-NXP_EXT_TVDD_CFG_3={20, 02, 0B, 02, A0, 66, 01, 01, A0, 0E, 03, 52, 40, 0A}
+NXP_EXT_TVDD_CFG_3={20, 02, 0B, 02, A0, 66, 01, 01, A0, 0E, 03, 52, 64, 0A}
###############################################################################
# NXP RF configuration ALM/PLM settings
@@ -147,16 +146,18 @@
# Clock settings A002, A003
# PbF settings A008
# Clock timeout settings A004
-NXP_CORE_CONF_EXTN={20, 02, 1D, 07,
+# A0 9F 02 <svdd ON guard time (msec)> <svdd off guard time(msec)>
+NXP_CORE_CONF_EXTN={20, 02, 26, 09,
A0, EC, 01, 01,
A0, ED, 01, 03,
A0, 5E, 01, 01,
A0, 12, 01, 02,
A0, 40, 01, 01,
A0, DD, 01, 2D,
- A0, 96, 01, 01
+ A0, F2, 01, 01,
+ A0, 96, 01, 01,
+ A0, 9F, 02, 08, 08
}
-# A0, F2, 01, 01,
# A0, 41, 01, 02,
# A0, 43, 01, 04,
# A0, 02, 01, 01,
@@ -262,6 +263,7 @@
# eSE 0x01
# UICC 0x02
DEFAULT_MIFARE_CLT_ROUTE=0x02
+
###############################################################################
#Set the default AID Power state :
#This settings will be used when application does not set this parameter
@@ -370,26 +372,30 @@
NXP_WIRED_MODE_RF_FIELD_ENABLE=0x00
###############################################################################
-# UICC mode supported
-# Disable 0x00
-# Enable 0x01
-NXP_DUAL_UICC_ENABLE=0x00
-###############################################################################
#Config to allow adding aids
#NFC on/off is required after this config
#1 = enabling adding aid to NFCC routing table.
#0 = disabling adding aid to NFCC routing table.
NXP_ENABLE_ADD_AID=0x01
+###############################################################################
+# UICC mode supported
+# Disable 0x00
+# Enable 0x01
+NXP_DUAL_UICC_ENABLE=0x00
#################################################################################
# JCOP-3.3 continuous process timeout in msec and value should be in Hexadecimal.
# JCOP CP TIMEOUT
-NXP_CP_TIMEOUT={00, 77}
+# NXP_CP_TIMEOUT={00, 77}
###############################################################################
# Enable/Disable checking default proto SE Id
# Disable 0x00
# Enable 0x01
NXP_CHECK_DEFAULT_PROTO_SE_ID=0x01
###############################################################################
+# SVDD sync off Delay in ms it can be max 20 ms
+# If out of range timeout used, default delay of 10ms will be set
+NXP_SVDD_SYNC_OFF_DELAY=10
+###############################################################################
#NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE
#Enable/Disable block number checks for china transit use case
#Enable 0x01
diff --git a/halimpl/pn54x/tml/phTmlNfc.h b/halimpl/pn54x/tml/phTmlNfc.h
index 6c8acf9..45be9c6 100644
--- a/halimpl/pn54x/tml/phTmlNfc.h
+++ b/halimpl/pn54x/tml/phTmlNfc.h
@@ -108,10 +108,13 @@
phTmlNfc_e_SetP61DisableMode, /* Set the ese vdd gpio to low*/
phTmlNfc_e_SetP61EnableMode, /* Set the ese vdd gpio to high*/
phTmlNfc_e_RelP61Access, /*Release the P61 lock*/
+#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+ phTmlNfc_e_RelP61SvddWait,
+#endif
phTmlNfc_e_P73IsoRstMode, /* ISO RST of P73*/
phTmlNfc_e_SetLegacyPowerScheme,
phTmlNfc_e_SetExtPMUPowerScheme,
- phTmlNfc_e_SetPN67TPowerScheme
+ phTmlNfc_e_SetPN67TPowerScheme,
#endif
} phTmlNfc_ControlCode_t ; /* Control code for IOCTL call */
diff --git a/halimpl/pn54x/tml/phTmlNfc_i2c.c b/halimpl/pn54x/tml/phTmlNfc_i2c.c
index b356572..135c23d 100644
--- a/halimpl/pn54x/tml/phTmlNfc_i2c.c
+++ b/halimpl/pn54x/tml/phTmlNfc_i2c.c
@@ -516,6 +516,41 @@
return status;
}
+#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+/*******************************************************************************
+**
+** Function phTmlNfc_rel_svdd_wait
+**
+** Description
+**
+** Parameters pDevHandle - valid device handle
+**
+** Returns success or failure
+**
+*******************************************************************************/
+NFCSTATUS phTmlNfc_rel_svdd_wait(void *pDevHandle)
+{
+ int ret = -1;
+ NFCSTATUS status = NFCSTATUS_SUCCESS;
+ NXPLOG_TML_D("phTmlNfc_rel_svdd_wait(), enter ");
+
+ if (NULL == pDevHandle)
+ {
+ return NFCSTATUS_FAILED;
+ }
+
+ ret = ioctl((intptr_t)pDevHandle, P544_REL_SVDD_WAIT);
+ if (ret < 0)
+ {
+ if (ret == -EBUSY)
+ ret = NFCSTATUS_BUSY;
+ else
+ ret = NFCSTATUS_FAILED;
+ }
+ NXPLOG_TML_D("phTmlNfc_rel_svdd_wait(), exit ret %d, status %d", ret, status);
+ return status;
+}
+#endif
#endif
/*******************************************************************************
**
diff --git a/halimpl/pn54x/tml/phTmlNfc_i2c.h b/halimpl/pn54x/tml/phTmlNfc_i2c.h
index 4803e20..e84cc27 100644
--- a/halimpl/pn54x/tml/phTmlNfc_i2c.h
+++ b/halimpl/pn54x/tml/phTmlNfc_i2c.h
@@ -46,7 +46,9 @@
NFCSTATUS phTmlNfc_set_pid(void *pDevHandle, long pid);
NFCSTATUS phTmlNfc_set_power_scheme(void *pDevHandle, long id);
NFCSTATUS phTmlNfc_get_ese_access(void *pDevHandle, long timeout);
-
+#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+NFCSTATUS phTmlNfc_rel_svdd_wait(void *pDevHandle);
+#endif
/*
* SPI Request NFCC to enable p61 power, only in param
* Only for SPI
@@ -78,6 +80,11 @@
#define P544_GET_ESE_ACCESS _IOW(PN544_MAGIC, 0x06, long)
/*
+ NFC will call the ioctl to release the svdd protection
+*/
+#define P544_REL_SVDD_WAIT _IOW(PN544_MAGIC, 0x07, long)
+
+/*
NFC and SPI will call the ioctl to update the power scheme
*/
#define P544_SET_POWER_SCHEME _IOW(PN544_MAGIC, 0x07, long)
diff --git a/halimpl/pn54x/utils/phNxpConfig.cpp b/halimpl/pn54x/utils/phNxpConfig.cpp
index 58c4525..bebb4c1 100644
--- a/halimpl/pn54x/utils/phNxpConfig.cpp
+++ b/halimpl/pn54x/utils/phNxpConfig.cpp
@@ -53,6 +53,7 @@
#if 1
const char transport_config_path[] = "/etc/";
+const char transit_config_path[] = "/data/nfc/";
#else
const char transport_config_path[] = "res/";
#endif
@@ -104,6 +105,7 @@
bool getValue(const char* name, unsigned short & rValue) const;
bool getValue(const char* name, char* pValue, long len,long* readlen) const;
const CNfcParam* find(const char* p_name) const;
+ void readNxpTransitConfig(const char* fileName) const;
void clean();
private:
CNfcConfig();
@@ -111,9 +113,12 @@
void moveFromList();
void moveToList();
void add(const CNfcParam* pParam);
+ void dump();
+ bool isAllowed(const char* name);
list<const CNfcParam*> m_list;
bool mValidFile;
unsigned long m_timeStamp;
+ string mCurrentFile;
unsigned long state;
@@ -216,6 +221,8 @@
int base = 0;
char c;
int bflag = 0;
+ mCurrentFile = name;
+
state = BEGIN_LINE;
/* open config file, read it into a buffer */
if ((fd = fopen(name, "rb")) == NULL)
@@ -228,6 +235,7 @@
}
return false;
}
+ ALOGD("%s Opened %s config %s\n", __func__, (bResetContent ? "base" : "optional"), name);
stat(name, &buf);
if(strcmp(default_nxp_config_path, name) == 0)
{
@@ -480,6 +488,7 @@
theInstance.readConfig(strPath.c_str(), true);
#if(NXP_EXTNS == TRUE)
readOptionalConfig("brcm");
+ theInstance.readNxpTransitConfig("nxpTransit");
#endif
}
return theInstance;
@@ -622,6 +631,24 @@
/*******************************************************************************
**
+** Function: CNfcConfig::readNxpTransitConfig()
+**
+** Description: read Config settings from transit conf file
+**
+** Returns: none
+**
+*******************************************************************************/
+void CNfcConfig::readNxpTransitConfig(const char* fileName) const
+{
+ string strPath;
+ strPath.assign(transit_config_path);
+ strPath += extra_config_base;
+ strPath += fileName;
+ strPath += extra_config_ext;
+ CNfcConfig::GetInstance().readConfig(strPath.c_str(), false);
+}
+/*******************************************************************************
+**
** Function: CNfcConfig::clean()
**
** Description: reset the setting array
@@ -655,16 +682,72 @@
m_list.push_back(pParam);
return;
}
+ if((mCurrentFile.find("nxpTransit") != std::string::npos) && !isAllowed(pParam->c_str()))
+ {
+ ALOGD("%s Token restricted. Returning", __func__);
+ return;
+ }
for (list<const CNfcParam*>::iterator it = m_list.begin(), itEnd = m_list.end(); it != itEnd; ++it)
{
if (**it < pParam->c_str())
continue;
- m_list.insert(it, pParam);
+ if (**it == pParam->c_str())
+ m_list.insert(m_list.erase(it), pParam);
+ else
+ m_list.insert(it, pParam);
+
return;
}
m_list.push_back(pParam);
}
+/*******************************************************************************
+**
+** Function: CNfcConfig::dump()
+**
+** Description: prints all elements in the list
+**
+** Returns: none
+**
+*******************************************************************************/
+void CNfcConfig::dump()
+{
+ ALOGD("%s Enter", __func__);
+ for (list<const CNfcParam*>::iterator it = m_list.begin(), itEnd = m_list.end(); it != itEnd; ++it)
+ {
+ if((*it)->str_len()>0)
+ ALOGD("%s %s \t= %s", __func__, (*it)->c_str(),(*it)->str_value());
+ else
+ ALOGD("%s %s \t= (0x%0lX)\n", __func__,(*it)->c_str(),(*it)->numValue());
+ }
+}
+/*******************************************************************************
+**
+** Function: CNfcConfig::isAllowed()
+**
+** Description: checks if token update is allowed
+**
+** Returns: true if allowed else false
+**
+*******************************************************************************/
+bool CNfcConfig::isAllowed(const char* name)
+{
+ string token(name);
+ bool stat = false;
+ if((token.find("P2P_LISTEN_TECH_MASK") != std::string::npos) ||
+ (token.find("HOST_LISTEN_TECH_MASK") != std::string::npos) ||
+ (token.find("UICC_LISTEN_TECH_MASK") != std::string::npos) ||
+ (token.find("POLLING_TECH_MASK") != std::string::npos) ||
+ (token.find("NXP_RF_CONF_BLK") != std::string::npos) ||
+ (token.find("NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE") != std::string::npos) ||
+ (token.find("NXP_FWD_FUNCTIONALITY_ENABLE") != std::string::npos) ||
+ (token.find("NXP_RF_UPDATE_REQ") != std::string::npos))
+
+ {
+ stat = true;
+ }
+ return stat;
+}
/*******************************************************************************
**
** Function: CNfcConfig::moveFromList()
diff --git a/halimpl/pn54x/utils/phNxpConfig.h b/halimpl/pn54x/utils/phNxpConfig.h
index 75780e0..151891d 100644
--- a/halimpl/pn54x/utils/phNxpConfig.h
+++ b/halimpl/pn54x/utils/phNxpConfig.h
@@ -93,7 +93,6 @@
#if(NXP_ESE_POWER_MODE==TRUE)
#define NAME_NXP_ESE_POWER_DH_CONTROL "NXP_ESE_POWER_DH_CONTROL"
#define NAME_NXP_ESE_POWER_EXT_PMU "NXP_ESE_POWER_EXT_PMU"
-
#define NAME_NXP_ESE_POWER_DH_CONTROL_CFG_1 "NXP_ESE_POWER_DH_CONTROL_CFG_1"
#endif
#define NAME_NXP_SWP_SWITCH_TIMEOUT "NXP_SWP_SWITCH_TIMEOUT"
@@ -108,7 +107,10 @@
#define NAME_NXP_WIREDMODE_RESUME_TIMEOUT "NXP_WIREDMODE_RESUME_TIMEOUT"
#define NAME_NXP_UICC_LISTEN_TECH_MASK "UICC_LISTEN_TECH_MASK"
#define NAME_NXP_HOST_LISTEN_TECH_MASK "HOST_LISTEN_TECH_MASK"
-
+#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+#define NAME_NXP_SVDD_SYNC_OFF_DELAY "NXP_SVDD_SYNC_OFF_DELAY"
+#endif
+#define NAME_NXP_RF_UPDATE_REQ "NXP_RF_UPDATE_REQ"
/* default configuration */
#define default_storage_location "/data/nfc"
diff --git a/src/adaptation/NfcAdaptation.cpp b/src/adaptation/NfcAdaptation.cpp
index 6748d7f..911f5a7 100644
--- a/src/adaptation/NfcAdaptation.cpp
+++ b/src/adaptation/NfcAdaptation.cpp
@@ -375,8 +375,13 @@
int ret = 0; //0 means success
if ( !GetStrValue ( NAME_NCI_HAL_MODULE, nci_hal_module, sizeof ( nci_hal_module) ) )
{
- ALOGE("No HAL module specified in config, falling back to BCM2079x");
- strlcpy (nci_hal_module, "nfc_nci.bcm2079x", sizeof(nci_hal_module));
+#if(NXP_EXTNS == TRUE)
+ ALOGE("No HAL module specified in config, falling back to pn54x");
+ strlcpy (nci_hal_module, "nfc_nci.pn54x", sizeof(nci_hal_module));
+#else
+ ALOGE("No HAL module specified in config, falling back to BCM2079x");
+ strlcpy (nci_hal_module, "nfc_nci.bcm2079x", sizeof(nci_hal_module));
+#endif
}
const hw_module_t* hw_module = NULL;
diff --git a/src/adaptation/config.cpp b/src/adaptation/config.cpp
index 90f92b5..00943b1 100644
--- a/src/adaptation/config.cpp
+++ b/src/adaptation/config.cpp
@@ -46,6 +46,10 @@
const char transport_config_path[] = "/etc/";
+#if(NXP_EXTNS == TRUE)
+const char transit_config_path[] = "/data/nfc/";
+#endif
+
#define config_name "libnfc-brcm.conf"
#if(NXP_EXTNS == TRUE)
#define extra_config_base "libnfc-"
@@ -82,6 +86,9 @@
bool getValue(const char* name, unsigned long& rValue) const;
bool getValue(const char* name, unsigned short & rValue) const;
const CNfcParam* find(const char* p_name) const;
+#if(NXP_EXTNS == TRUE)
+ void readNxpTransitConfig(const char* fileName) const;
+#endif
void clean();
private:
CNfcConfig();
@@ -89,6 +96,11 @@
void moveFromList();
void moveToList();
void add(const CNfcParam* pParam);
+#if(NXP_EXTNS == TRUE)
+ void dump();
+ bool isAllowed(const char* name);
+ string mCurrentFile;
+#endif
list<const CNfcParam*> m_list;
bool mValidFile;
@@ -191,6 +203,9 @@
int i = 0;
int base = 0;
char c = 0;
+#if(NXP_EXTNS == TRUE)
+ mCurrentFile = name;
+#endif
state = BEGIN_LINE;
/* open config file, read it into a buffer */
@@ -422,6 +437,7 @@
theInstance.readConfig(strPath.c_str(), true);
#if(NXP_EXTNS == TRUE)
readOptionalConfigExt("nxp");
+ theInstance.readNxpTransitConfig("nxpTransit");
#endif
}
@@ -536,6 +552,27 @@
return NULL;
}
+#if(NXP_EXTNS == TRUE)
+/*******************************************************************************
+**
+** Function: CNfcConfig::readNxpTransitConfig()
+**
+** Description: read Config settings from transit conf file
+**
+** Returns: none
+**
+*******************************************************************************/
+void CNfcConfig::readNxpTransitConfig(const char* fileName) const
+{
+ string strPath;
+ strPath.assign(transit_config_path);
+ strPath += extra_config_base;
+ strPath += fileName;
+ strPath += extra_config_ext;
+ CNfcConfig::GetInstance().readConfig(strPath.c_str(), false);
+}
+#endif
+
/*******************************************************************************
**
** Function: CNfcConfig::clean()
@@ -571,16 +608,82 @@
m_list.push_back(pParam);
return;
}
+#if(NXP_EXTNS == TRUE)
+ if((mCurrentFile.find("nxpTransit") != std::string::npos) && !isAllowed(pParam->c_str()))
+ {
+ ALOGD("%s Token restricted. Returning", __func__);
+ return;
+ }
+#endif
for (list<const CNfcParam*>::iterator it = m_list.begin(), itEnd = m_list.end(); it != itEnd; ++it)
{
if (**it < pParam->c_str())
continue;
+#if(NXP_EXTNS == TRUE)
+ /*If pParam->c_str() already exist in the list replace it*/
+ if (**it == pParam->c_str())
+ m_list.insert(m_list.erase(it), pParam);
+ else
+ m_list.insert(it, pParam);
+#else
m_list.insert(it, pParam);
+#endif
return;
}
m_list.push_back(pParam);
}
+#if(NXP_EXTNS == TRUE)
+/*******************************************************************************
+**
+** Function: CNfcConfig::dump()
+**
+** Description: prints all elements in the list
+**
+** Returns: none
+**
+*******************************************************************************/
+void CNfcConfig::dump()
+{
+ ALOGD("%s Enter", __func__);
+
+ for (list<const CNfcParam*>::iterator it = m_list.begin(), itEnd = m_list.end(); it != itEnd; ++it)
+ {
+ if((*it)->str_len()>0)
+ ALOGD("%s %s \t= %s", __func__, (*it)->c_str(),(*it)->str_value());
+ else
+ ALOGD("%s %s \t= (0x%0lX)\n", __func__,(*it)->c_str(),(*it)->numValue());
+ }
+}
+
+/*******************************************************************************
+**
+** Function: CNfcConfig::isAllowed()
+**
+** Description: checks if token update is allowed
+**
+** Returns: true if allowed else false
+**
+*******************************************************************************/
+bool CNfcConfig::isAllowed(const char* name)
+{
+ string token(name);
+ bool stat = false;
+ if((token.find("P2P_LISTEN_TECH_MASK") != std::string::npos) ||
+ (token.find("HOST_LISTEN_TECH_MASK") != std::string::npos) ||
+ (token.find("UICC_LISTEN_TECH_MASK") != std::string::npos) ||
+ (token.find("POLLING_TECH_MASK") != std::string::npos) ||
+ (token.find("NXP_RF_CONF_BLK") != std::string::npos) ||
+ (token.find("NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE") != std::string::npos) ||
+ (token.find("NXP_FWD_FUNCTIONALITY_ENABLE") != std::string::npos))
+
+ {
+ stat = true;
+ }
+ return stat;
+}
+#endif
+
/*******************************************************************************
**
** Function: CNfcConfig::moveFromList()
diff --git a/src/include/NXP_ESE_Features.h b/src/include/NXP_ESE_Features.h
index 3d986ca..640ed8d 100755
--- a/src/include/NXP_ESE_Features.h
+++ b/src/include/NXP_ESE_Features.h
@@ -17,38 +17,32 @@
/*
* NXP ESE features macros definitions
*/
-#if(NFC_NXP_ESE == TRUE)
+
#ifndef NXP_ESE_FEATURES_H
#define NXP_ESE_FEATURES_H
-#if(NFC_NXP_CHIP_TYPE == PN547C2)
-#define NXP_ESE_WIRED_MODE_DISABLE_DISCOVERY TRUE
-#endif
+#if(NFC_NXP_ESE == TRUE)
// Reset Schemes
#define NXP_ESE_PN67T_RESET 1
#define NXP_ESE_APDU_GATE_RESET 2
-
/** Dual/Triple mode priority schemes **/
#define NXP_ESE_EXCLUSIVE_WIRED_MODE 1
#define NXP_ESE_WIRED_MODE_RESUME 2
#define NXP_ESE_WIRED_MODE_TIMEOUT 3
-// Example: define macro like below for each feature
-//#define NXP_ESE_FEATURE_1 TRUE
-
#if(NFC_NXP_CHIP_TYPE == PN547C2)
#define NXP_ESE_WIRED_MODE_DISABLE_DISCOVERY TRUE
-#endif
-#if(NFC_NXP_CHIP_TYPE == PN551)
+#elif((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
#define NFC_NXP_TRIPLE_MODE_PROTECTION TRUE
- #define NXP_WIRED_MODE_STANDBY_PROP TRUE
#define NXP_ESE_FELICA_CLT FALSE
+ #define NXP_WIRED_MODE_STANDBY_PROP TRUE
//dual mode prio scheme
#define NXP_ESE_DUAL_MODE_PRIO_SCHEME NXP_ESE_WIRED_MODE_TIMEOUT
//Reset scheme
#define NXP_ESE_RESET_METHOD FALSE
+
#elif(NFC_NXP_CHIP_TYPE == PN553)
#define NFC_NXP_TRIPLE_MODE_PROTECTION FALSE
#define NXP_ESE_FELICA_CLT TRUE
@@ -64,34 +58,24 @@
#define NXP_WIRED_MODE_STANDBY TRUE
#endif
-#endif /* end of #ifndef NXP_ESE_FEATURES_H */
-
-#else
+#else /*Else of #if(NFC_NXP_ESE == TRUE)*/
#if(NFC_NXP_CHIP_TYPE == PN547C2)
#define NXP_ESE_WIRED_MODE_DISABLE_DISCOVERY FALSE
#endif
-// Example: define macro like below for each feature
-//#define NXP_ESE_FEATURE_1 TRUE
-
-#if(NFC_NXP_CHIP_TYPE == PN547C2)
-#define NXP_ESE_WIRED_MODE_DISABLE_DISCOVERY FALSE
-#endif
-
-#if(NFC_NXP_CHIP_TYPE == PN551)
+#if((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
#define NFC_NXP_TRIPLE_MODE_PROTECTION FALSE
#define NXP_WIRED_MODE_STANDBY_PROP FALSE
#define NXP_ESE_FELICA_CLT FALSE
-
//Reset scheme
#define NXP_ESE_RESET_METHOD FALSE
+
#elif(NFC_NXP_CHIP_TYPE == PN553)
#define NFC_NXP_TRIPLE_MODE_PROTECTION FALSE
- #define NXP_ESE_FELICA_CLT FALSE
- #define NXP_ESE_WIRED_MODE_PRIO FALSE
- #define NXP_ESE_UICC_EXCLUSIVE_WIRED_MODE FALSE // UICC exclusive wired mode
-
+ #define NXP_ESE_FELICA_CLT FALSE
+ #define NXP_ESE_WIRED_MODE_PRIO FALSE //eSE wired mode prio over UICC wired mode
+ #define NXP_ESE_UICC_EXCLUSIVE_WIRED_MODE FALSE // UICC exclusive wired mode
//reset scheme
#define NXP_ESE_RESET_METHOD FALSE
#define NXP_ESE_POWER_MODE FALSE
@@ -99,4 +83,6 @@
#define NXP_BLOCK_PROPRIETARY_APDU_GATE FALSE
#define NXP_WIRED_MODE_STANDBY FALSE
#endif
-#endif
+
+#endif /*End of #if(NFC_NXP_ESE == TRUE)*/
+#endif /*End of #ifndef NXP_ESE_FEATURES_H */
diff --git a/src/nfa/ee/nfa_ee_act.c b/src/nfa/ee/nfa_ee_act.c
index dd7742f..1422105 100755
--- a/src/nfa/ee/nfa_ee_act.c
+++ b/src/nfa/ee/nfa_ee_act.c
@@ -2467,7 +2467,6 @@
*proto_pp++ = NFC_PROTOCOL_NFC_DEP;
proto_tlv_ctr++;
}
-
/* store the Technology based routing entries in temporary buffer */
for (xx = 0; xx < NFA_EE_NUM_TECH; xx++)
{
diff --git a/src/nfc/include/nfc_api.h b/src/nfc/include/nfc_api.h
index 45e50fe..62911c9 100755
--- a/src/nfc/include/nfc_api.h
+++ b/src/nfc/include/nfc_api.h
@@ -83,15 +83,15 @@
//DTA API for MW Version need to change according to release
#define NXP_EN_PN547C2 0
#define NXP_EN_PN65T 0
-#define NXP_EN_PN548C2 0
-#define NXP_EN_PN66T 0
-#define NXP_EN_PN551 0
-#define NXP_EN_PN67T 0
-#define NXP_EN_PN553 1
-#define NXP_EN_PN80T 1
-#define NXP_ANDROID_VER (4U) /* NXP android version */
-#define NFC_NXP_MW_VERSION_MAJ (7U) /* MW Major Version */
-#define NFC_NXP_MW_VERSION_MIN (00) /* MW Minor Version */
+#define NXP_EN_PN548C2 1
+#define NXP_EN_PN66T 1
+#define NXP_EN_PN551 1
+#define NXP_EN_PN67T 1
+#define NXP_EN_PN553 0
+#define NXP_EN_PN80T 0
+#define NXP_ANDROID_VER (7U) /* NXP android version */
+#define NFC_NXP_MW_VERSION_MAJ (0U) /* MW Major Version */
+#define NFC_NXP_MW_VERSION_MIN (3U) /* MW Minor Version */
#endif
/* 0xE0 ~0xFF are proprietary status codes */
#define NFC_STATUS_CMD_STARTED 0xE3/* Command started successfully */
@@ -1557,6 +1557,21 @@
INT32 NFC_RelEseAccess (void *pdata);
#endif
+
+#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+/*******************************************************************************
+**
+** Function NFC_RelSvddWait
+**
+** Description This function release wait for svdd change
+** of P61. Status would be updated to pdata
+**
+** Returns 0 if api call success, else -1
+**
+*******************************************************************************/
+INT32 NFC_RelSvddWait (void *pdata);
+#endif
+
#endif
#endif
diff --git a/src/nfc/nfc/nfc_main.c b/src/nfc/nfc/nfc_main.c
index f4cee7d..9de4555 100644
--- a/src/nfc/nfc/nfc_main.c
+++ b/src/nfc/nfc/nfc_main.c
@@ -1696,6 +1696,24 @@
return (nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_P61_REL_ACCESS, pdata));
}
#endif
+
+#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+/*******************************************************************************
+**
+** Function NFC_RelSvddWait
+**
+** Description This function release wait for svdd change
+** of P61. Status would be updated to pdata
+**
+** Returns 0 if api call success, else -1
+**
+*******************************************************************************/
+INT32 NFC_RelSvddWait (void *pdata)
+{
+ return (nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_REL_SVDD_WAIT, pdata));
+}
+#endif
+
#endif
#if(NXP_EXTNS == TRUE)
diff --git a/src/nfc/tags/rw_t3t.c b/src/nfc/tags/rw_t3t.c
index 79ee256..a6ac5f2 100644
--- a/src/nfc/tags/rw_t3t.c
+++ b/src/nfc/tags/rw_t3t.c
@@ -2392,8 +2392,9 @@
break;
case NFC_DATA_CEVT: /* check for status in tNFC_CONN */
- if ( (p_data->data.status == NFC_STATUS_OK)
- ||(p_data->data.status == NFC_STATUS_CONTINUE) )
+ if ( (p_data != NULL)
+ &&( (p_data->data.status == NFC_STATUS_OK)
+ ||(p_data->data.status == NFC_STATUS_CONTINUE) ) )
{
rw_t3t_data_cback (conn_id, &(p_data->data));
break;
@@ -2417,7 +2418,7 @@
if (event == NFC_ERROR_CEVT)
rw_t3t_process_error (NFC_STATUS_TIMEOUT);
- else
+ else if(p_data)
rw_t3t_process_error (p_data->status);
#if(NXP_EXTNS == TRUE)
if(p_data != NULL)