summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Android.mk9
-rw-r--r--Linux_x86/phDal4Nfc.c61
-rw-r--r--inc/phNfcConfig.h9
-rw-r--r--inc/phNfcHalTypes.h30
-rw-r--r--src/phDnldNfc.c1613
-rw-r--r--src/phHal4Nfc.c70
-rw-r--r--src/phHciNfc.h20
-rw-r--r--src/phHciNfc_DevMgmt.c57
-rw-r--r--src/phHciNfc_Generic.h5
-rw-r--r--src/phHciNfc_Sequence.c150
-rw-r--r--src/phHciNfc_WI.c30
-rw-r--r--src/phLibNfc.c11
-rw-r--r--src/phLibNfc.h8
-rw-r--r--src/phLibNfc_Internal.h3
-rw-r--r--src/phLibNfc_Ioctl.c7
-rw-r--r--src/phLibNfc_SE.c45
-rw-r--r--src/phLibNfc_initiator.c8
17 files changed, 401 insertions, 1735 deletions
diff --git a/Android.mk b/Android.mk
index 2ae7f39..8f64cba 100644
--- a/Android.mk
+++ b/Android.mk
@@ -106,14 +106,11 @@ LOCAL_SRC_FILES += Linux_x86/phDal4Nfc_i2c.c
LOCAL_SRC_FILES += Linux_x86/phDal4Nfc_messageQueueLib.c
# Really verbose:
-#LOCAL_CFLAGS += -DNXP_MESSAGING -DANDROID -DDEBUG -DNFC_TIMER_CONTEXT -DDAL_TRACE -DINCLUDE_DALINIT_DEINIT -pipe -fomit-frame-pointer -Wall -Wno-trigraphs -Werror-implicit-function-declaration -fno-strict-aliasing -mapcs -mno-sched-prolog -mabi=aapcs-linux -mno-thumb-interwork -msoft-float -Uarm -fno-common -fpic
+#LOCAL_CFLAGS += -DNXP_MESSAGING -DANDROID -DDEBUG -DDAL_TRACE -DINCLUDE_DALINIT_DEINIT -pipe -fomit-frame-pointer -Wall -Wno-trigraphs -Werror-implicit-function-declaration -fno-strict-aliasing -mapcs -mno-sched-prolog -mabi=aapcs-linux -mno-thumb-interwork -msoft-float -Uarm -fno-common -fpic
# Just show I2C traffic:
-#LOCAL_CFLAGS += -DNXP_MESSAGING -DANDROID -DNFC_TIMER_CONTEXT -DINCLUDE_DALINIT_DEINIT -DLOW_LEVEL_TRACES -pipe -fomit-frame-pointer -Wall -Wno-trigraphs -Werror-implicit-function-declaration -fno-strict-aliasing -mapcs -mno-sched-prolog -mabi=aapcs-linux -mno-thumb-interwork -msoft-float -Uarm -fno-common -fpic
+#LOCAL_CFLAGS += -DNXP_MESSAGING -DANDROID -DINCLUDE_DALINIT_DEINIT -DLOW_LEVEL_TRACES -pipe -fomit-frame-pointer -Wall -Wno-trigraphs -Werror-implicit-function-declaration -fno-strict-aliasing -mapcs -mno-sched-prolog -mabi=aapcs-linux -mno-thumb-interwork -msoft-float -Uarm -fno-common -fpic
# Quiet:
-LOCAL_CFLAGS += -DNXP_MESSAGING -DANDROID -DNFC_TIMER_CONTEXT -DINCLUDE_DALINIT_DEINIT -pipe -fomit-frame-pointer -Wall -Wno-trigraphs -Werror-implicit-function-declaration -fno-strict-aliasing -fpic
-ifeq ($(TARGET_ARCH),arm)
-LOCAL_CFLAGS += -mapcs -mno-sched-prolog -mabi=aapcs-linux -mno-thumb-interwork -msoft-float -Uarm -fno-common
-endif
+LOCAL_CFLAGS += -DNXP_MESSAGING -DANDROID -DINCLUDE_DALINIT_DEINIT -pipe -fomit-frame-pointer -Wall -Wno-trigraphs -Werror-implicit-function-declaration -fno-strict-aliasing -mapcs -mno-sched-prolog -mabi=aapcs-linux -mno-thumb-interwork -msoft-float -Uarm -fno-common -fpic
ifeq ($(NFC_BUILD_VARIANT),debug)
LOCAL_CFLAGS += -DDEBUG -D_DEBUG
diff --git a/Linux_x86/phDal4Nfc.c b/Linux_x86/phDal4Nfc.c
index ec92566..6d3c9fb 100644
--- a/Linux_x86/phDal4Nfc.c
+++ b/Linux_x86/phDal4Nfc.c
@@ -282,7 +282,7 @@ NFCSTATUS phDal4Nfc_Shutdown( void *pContext, void *pHwRef)
return result;
}
-NFCSTATUS phDal4Nfc_ConfigRelease(void *pHwRef)
+NFCSTATUS phDal4Nfc_ConfigRelease( void *pHwRef)
{
NFCSTATUS result = NFCSTATUS_SUCCESS;
@@ -292,23 +292,19 @@ NFCSTATUS phDal4Nfc_ConfigRelease(void *pHwRef)
if (gDalContext.hw_valid == TRUE)
{
- /* Signal the read and write threads to exit. NOTE: there
- actually is no write thread! :) */
- DAL_PRINT("Stop Reader Thread");
- gReadWriteContext.nReadThreadAlive = 0;
- gReadWriteContext.nWriteThreadAlive = 0;
-
- /* Wake up the read thread so it can exit */
- DAL_PRINT("Release Read Semaphore");
- sem_post(&nfc_read_sem);
-
- DAL_DEBUG("phDal4Nfc_ConfigRelease - doing pthread_join(%d)",
- gReadWriteContext.nReadThread);
- if (pthread_join(gReadWriteContext.nReadThread, &pThreadReturn) != 0)
- {
- result = PHNFCSTVAL(CID_NFC_DAL, NFCSTATUS_FAILED);
- DAL_PRINT("phDal4Nfc_ConfigRelease KO");
- }
+ DAL_PRINT("Release Read Semaphore");
+ sem_post(&nfc_read_sem);
+
+ /* Kill the read and write threads */
+ DAL_PRINT("Stop Reader Thread");
+ gReadWriteContext.nReadThreadAlive = 0;
+ gReadWriteContext.nWriteThreadAlive = 0;
+
+ if (pthread_join(gReadWriteContext.nReadThread, &pThreadReturn) != 0)
+ {
+ result = PHNFCSTVAL(CID_NFC_DAL, NFCSTATUS_FAILED);
+ DAL_PRINT("phDal4Nfc_ConfigRelease KO");
+ }
/* Close the message queue */
#ifdef USE_MQ_MESSAGE_QUEUE
@@ -587,7 +583,6 @@ NFCSTATUS phDal4Nfc_Config(pphDal4Nfc_sConfig_t config,void **phwref)
gDalContext.hw_valid = TRUE;
- phDal4Nfc_Reset(1);
phDal4Nfc_Reset(0);
phDal4Nfc_Reset(1);
@@ -682,20 +677,12 @@ int phDal4Nfc_ReaderThread(void * pArg)
DAL_PRINT("RX Thread Sem Lock\n");
sem_wait(&nfc_read_sem);
DAL_PRINT("RX Thread Sem UnLock\n");
-
- if (!gReadWriteContext.nReadThreadAlive)
- {
- /* got the signal that we should exit. NOTE: we don't
- attempt to read below, since the read may block */
- break;
- }
-
/* Issue read operation.*/
i2c_error_count = 0;
retry:
gReadWriteContext.nNbOfBytesRead=0;
- DAL_DEBUG("RX Thread *New *** *****Request Length = %d",gReadWriteContext.nNbOfBytesToRead);
+ DAL_DEBUG("\n*New *** *****Request Length = %d",gReadWriteContext.nNbOfBytesToRead);
memsetRet=memset(gReadWriteContext.pReadBuffer,0,gReadWriteContext.nNbOfBytesToRead);
/* Wait for IRQ !!! */
@@ -709,12 +696,12 @@ retry:
if(gReadWriteContext.nNbOfBytesToRead == 1 && gReadWriteContext.pReadBuffer[0] == 0x57)
{
i2c_error_count++;
- DAL_DEBUG("RX Thread Read 0x57 %d times\n", i2c_error_count);
+ DAL_DEBUG("Read 0x57 %d times\n", i2c_error_count);
if (i2c_error_count < 5) {
usleep(2000);
goto retry;
}
- DAL_PRINT("RX Thread NOTHING TO READ, RECOVER");
+ DAL_PRINT("NOTHING TO READ, RECOVER");
phOsalNfc_RaiseException(phOsalNfc_e_UnrecovFirmwareErr,1);
}
else
@@ -723,14 +710,14 @@ retry:
#ifdef LOW_LEVEL_TRACES
phOsalNfc_PrintData("Received buffer", (uint16_t)gReadWriteContext.nNbOfBytesRead, gReadWriteContext.pReadBuffer);
#endif
- DAL_DEBUG("RX Thread Read ok. nbToRead=%d\n", gReadWriteContext.nNbOfBytesToRead);
- DAL_DEBUG("RX Thread NbReallyRead=%d\n", gReadWriteContext.nNbOfBytesRead);
- DAL_PRINT("RX Thread ReadBuff[]={ ");
+ DAL_DEBUG("Read ok. nbToRead=%d\n", gReadWriteContext.nNbOfBytesToRead);
+ DAL_DEBUG("NbReallyRead=%d\n", gReadWriteContext.nNbOfBytesRead);
+ DAL_PRINT("ReadBuff[]={ ");
for (i = 0; i < gReadWriteContext.nNbOfBytesRead; i++)
{
- DAL_DEBUG("RX Thread 0x%x ", gReadWriteContext.pReadBuffer[i]);
+ DAL_DEBUG("0x%x ", gReadWriteContext.pReadBuffer[i]);
}
- DAL_PRINT("RX Thread }\n");
+ DAL_PRINT("}\n");
/* read completed immediately */
sMsg.eMsgType= PHDAL4NFC_READ_MESSAGE;
@@ -742,9 +729,6 @@ retry:
}
} /* End of thread Loop*/
-
- DAL_PRINT("RX Thread exiting");
-
return TRUE;
}
@@ -968,3 +952,4 @@ void phDal4Nfc_DeferredCall(pphDal4Nfc_DeferFuncPointer_t func, void *param)
}
#undef _DAL_4_NFC_C
+
diff --git a/inc/phNfcConfig.h b/inc/phNfcConfig.h
index b11e79d..19a881b 100644
--- a/inc/phNfcConfig.h
+++ b/inc/phNfcConfig.h
@@ -369,15 +369,11 @@
/**< Macro to Enable the Card Emulation Feature */
/* #define HOST_EMULATION */
-#define NXP_HAL_VERIFY_EEPROM_CRC 0x01U
-
/**< Macro to Enable the Download Mode Feature */
#define FW_DOWNLOAD
/**< Macro to Enable the Firmware Download Timer */
-/* 0x01U to use overall timeout */
-/* 0x02U to use per frame timeout */
-#define FW_DOWNLOAD_TIMER 0x02U
+#define FW_DOWNLOAD_TIMER
/**< Macro to Verify the Firmware Download */
/* #define FW_DOWNLOAD_VERIFY */
@@ -386,9 +382,6 @@
#define NXP_FW_INTEGRITY_CHK 1
#endif
-/* To specify the Maximum TX/RX Len */
-#define NXP_FW_MAX_TX_RX_LEN 0x200
-
#define UICC_CONNECTIVITY_PATCH
/* Work around to Delay the initiator activation */
diff --git a/inc/phNfcHalTypes.h b/inc/phNfcHalTypes.h
index 47e9036..748f01b 100644
--- a/inc/phNfcHalTypes.h
+++ b/inc/phNfcHalTypes.h
@@ -36,8 +36,6 @@
*
* File: \ref phNfcHalTypes.h
*
- * Developed By: Ravindra U.
- *
*/
/*@{*/
@@ -49,26 +47,6 @@
#include <phNfcCompId.h>
#include <phNfcConfig.h>
-#ifndef NXP_HAL_MEM_INFO_SIZE
-#define NXP_HAL_MEM_INFO_SIZE 0x01U
-#endif
-
-#if (NXP_HAL_MEM_INFO_SIZE > 0x01)
-#define NXP_FW_UPLOAD_PROGRESS 0x965AU
-#define NXP_FW_UPLOAD_SUCCESS 0x0000U
-#else
-#define NXP_FW_UPLOAD_PROGRESS 0x5AU
-#define NXP_FW_UPLOAD_SUCCESS 0x00U
-#endif
-
-
-typedef struct phHal_sMemInfo
-{
- uint16_t fw_magic;
- uint16_t fw_rfu;
- uint32_t hal_version;
-}phHal_sMemInfo_t;
-
/** \ingroup grp_hal_common
*
@@ -857,13 +835,7 @@ typedef enum phHal_Event {
/* NXP Specific System Information Events */
NFC_INFO_TXLDO_OVERCUR = 0x71U,
NFC_INFO_MEM_VIOLATION = 0x73U,
- NFC_INFO_TEMP_OVERHEAT = 0x74U,
- NFC_INFO_LLC_ERROR = 0x75U,
-
- /* NXP EVENTS */
- NFC_EVT_MIFARE_ACCESS = 0x35,
- NFC_EVT_APDU_RECEIVED = 0x36,
- NFC_EVT_EMV_CARD_REMOVAL = 0x37
+ NFC_INFO_TEMP_OVERHEAT = 0x74U
}phHal_Event_t;
diff --git a/src/phDnldNfc.c b/src/phDnldNfc.c
index 0c11377..76fd88b 100644
--- a/src/phDnldNfc.c
+++ b/src/phDnldNfc.c
@@ -58,6 +58,9 @@
#define STATIC static
#endif
+#define SECTION_HDR
+
+
#if defined (DNLD_SUMMARY) && !defined (DNLD_TRACE)
#define DNLD_TRACE
#endif
@@ -88,53 +91,12 @@ extern char phOsalNfc_DbgTraceBuffer[];
#define DNLD_PRINT_BUFFER(msg,buf,len)
#endif
-#define DO_DELAY(period) { unsigned i=0; for(;i<period;i++); }
-
-#define PHDNLD_DNLD_DELAY 0x1000U
-#define PHDNLD_MAX_PACKET 0x0200U /* Max Total Packet Size is 512 */
-#define PHDNLD_DATA_SIZE ((PHDNLD_MAX_PACKET)- 8U) /* 0x01F8U */
- /* Max Data Size is 504 */
-#define PHDNLD_MIN_PACKET 0x03U /* Minimum Packet Size is 3*/
-
-#define DNLD_DEFAULT_RESPONSE_TIMEOUT 0x4000U
-
-#define NXP_FW_MIN_TX_RX_LEN 0x0AU
-
-
-#if defined( NXP_FW_MAX_TX_RX_LEN ) && \
- ( NXP_FW_MAX_TX_RX_LEN > NXP_FW_MIN_TX_RX_LEN )
-
-#define PHDNLD_FW_TX_RX_LEN NXP_FW_MAX_TX_RX_LEN
-
-#elif !defined( NXP_FW_MAX_TX_RX_LEN )
-
-/* To specify the Maximum TX/RX Len */
-#define NXP_FW_MAX_TX_RX_LEN 0x200
-#define PHDNLD_FW_TX_RX_LEN NXP_FW_MAX_TX_RX_LEN
-
-#else
-
-#define PHDNLD_FW_TX_RX_LEN NXP_FW_MIN_TX_RX_LEN
-
-#endif
-
#define PHDNLD_FRAME_LEN_SIZE 0x02U
#define PHDNLD_ADDR_SIZE 0x03U
#define PHDNLD_DATA_LEN_SIZE 0x02U
-#define PHDNLD_FRAME_DATA_OFFSET 0x03U
-
-#define DNLD_SM_UNLOCK_MASK 0x01U
-#define DNLD_TRIM_MASK 0x02U
-#define DNLD_RESET_MASK 0x04U
-#define DNLD_VERIFY_MASK 0x08U
-#define DNLD_CRITICAL_MASK 0x10U
-
-
-#define NXP_NFC_IMAG_FW_MAX 0x05U
-
-#define PHDNLD_FW_PATCH_SEC 0x5FU
-
-#define PHDNLD_PAGE_SIZE 0x80U /* Page Size Configured for 64 Bytes */
+#define PHDNLD_MIN_PACKET 0x03U /* Minimum Packet Size is 3*/
+#define PHDNLD_MAX_PACKET 0x0200U /* Max Total Packet Size is 512 */
+#define PHDNLD_DATA_SIZE 0x01F8U /* Max Data Size is 504 */
#define FW_MAX_SECTION 0x15U /* Max Number of Sections */
@@ -142,14 +104,11 @@ extern char phOsalNfc_DbgTraceBuffer[];
#define DNLD_CRC32_SIZE 0x04U
-#define DNLD_CFG_PG_ADDR 0x00008000U
-#define DNLD_FW_CODE_ADDR 0x00800000U
-#define DNLD_PATCH_CODE_ADDR 0x00018800U
-#define DNLD_PATCH_TABLE_ADDR 0x00008200U
+#define DNLD_FW_CODE_ADDR 0x00800000
+#define DNLD_PATCH_CODE_ADDR 0x00018800
+#define DNLD_PATCH_TABLE_ADDR 0x00008200
-/* Raw Command to pass the Data in Download Mode */
-#define PHDNLD_CMD_RAW 0x00U
/* Command to Reset the Device in Download Mode */
#define PHDNLD_CMD_RESET 0x01U
/* Command to Read from the Address specified in Download Mode */
@@ -157,7 +116,6 @@ extern char phOsalNfc_DbgTraceBuffer[];
#define PHDNLD_CMD_READ_LEN 0x0005U
/* Command to write to the Address specified in Download Mode */
#define PHDNLD_CMD_WRITE 0x08U
-#define PHDNLD_CMD_SEC_WRITE 0x0CU
#define PHDNLD_CMD_WRITE_MIN_LEN 0x0005U
#define PHDNLD_CMD_WRITE_MAX_LEN PHDNLD_DATA_SIZE
/* Command to verify the data written */
@@ -178,9 +136,6 @@ extern char phOsalNfc_DbgTraceBuffer[];
/* Command to verify the Integrity of the data written */
#define PHDNLD_CMD_CHECK_INTEGRITY 0x0BU
-/* Command to verify the Integrity of the data written */
-#define PHDNLD_CMD_ENCAPSULATE 0x0DU
-
#define CHECK_INTEGRITY_RESP_CRC16_LEN 0x03U
#define CHECK_INTEGRITY_RESP_CRC32_LEN 0x05U
#define CHECK_INTEGRITY_RESP_COMP_LEN 0x10U
@@ -198,23 +153,8 @@ extern char phOsalNfc_DbgTraceBuffer[];
#define PHDNLD_RESP_PROTOCOL_ERROR 0x0BU
/* Invalid parameter Response to a Command Sent in the Download Mode */
#define PHDNLD_RESP_INVALID_PARAMETER 0x11U
-/* Command Not Supported Response to a Command Sent in the Download Mode */
-#define PHDNLD_RESP_CMD_NOT_SUPPORTED 0x13U
/* Length parameter error Response to a Command Sent in the Download Mode */
#define PHDNLD_RESP_INVALID_LENGTH 0x18U
-/* Checksum Error Response to a Command Sent in the Download Mode */
-#define PHDNLD_RESP_CHKSUM_ERROR 0x19U
-/* Version already uptodate Response to a Command Sent in the Download Mode */
-#define PHDNLD_RESP_VERSION_UPTODATE 0x1DU
-/* Memory operation error during the processing of
- the Command Frame in the Download Mode */
-#define PHDNLD_RESP_MEMORY_UPDATE_ERROR 0x20U
-/* The Chaining of the Command Frame was Successful in the Download Mode */
-#define PHDNLD_RESP_CHAINING_SUCCESS 0x21U
-/* The Command is not allowed anymore in the Download Mode */
-#define PHDNLD_RESP_CMD_NOT_ALLOWED 0xE0U
-/* The Error during the Chaining the Command Frame in the Download Mode */
-#define PHDNLD_RESP_CHAINING_ERROR 0xE6U
/* Write Error Response to a Command Sent in the Download Mode */
#define PHDNLD_RESP_WRITE_ERROR 0x74U
@@ -222,7 +162,7 @@ extern char phOsalNfc_DbgTraceBuffer[];
#define NXP_MAX_DNLD_RETRY 0x02U
-#define NXP_MAX_SECTION_WRITE 0x05U
+#define NXP_MAX_SECTION_WRITE 0x04U
#define NXP_PATCH_VER_INDEX 0x05U
@@ -236,7 +176,6 @@ extern char phOsalNfc_DbgTraceBuffer[];
typedef enum phDnldNfc_eSeqType{
DNLD_SEQ_RESET = 0x00U,
DNLD_SEQ_INIT,
- DNLD_SEQ_RAW,
DNLD_SEQ_LOCK,
DNLD_SEQ_UNLOCK,
DNLD_SEQ_UPDATE,
@@ -258,8 +197,6 @@ typedef enum phDnldNfc_eState
typedef enum phDnldNfc_eSeq
{
phDnld_Reset_Seq = 0x00,
- phDnld_Activate_Patch,
- phDnld_Deactivate_Patch,
phDnld_Update_Patch,
phDnld_Update_Patchtable,
phDnld_Lock_System,
@@ -268,7 +205,6 @@ typedef enum phDnldNfc_eSeq
phDnld_Verify_Integrity,
phDnld_Verify_Section,
phDnld_Complete_Seq,
- phDnld_Raw_Upgrade,
phDnld_Invalid_Seq
}phDnldNfc_eSeq_t;
@@ -297,7 +233,7 @@ typedef struct img_data_hdr
uint8_t img_data_offset;
/* Number of fimware images available in the img_data */
uint8_t no_of_fw_img;
- /* Fimware image Padding in the img_data */
+ /* Number of fimware images available in the img_data */
uint8_t fw_img_pad[2];
/* HW Compatiblity table for the set of the Hardwares */
hw_comp_tbl_t comp_tbl;
@@ -326,12 +262,25 @@ typedef struct section_hdr
{
uint8_t section_hdr_len;
uint8_t section_mem_type;
- uint8_t section_checksum;
- uint8_t section_conf;
+ uint16_t section_data_crc;
uint32_t section_address;
uint32_t section_length;
}section_hdr_t;
+
+typedef struct section_type
+{
+ unsigned system_mem_unlock:1;
+ unsigned trim_val:1;
+ unsigned reset_required:1;
+ unsigned verify_mem:1;
+ unsigned trim_check:1;
+ unsigned section_crc_check:1;
+ unsigned section_type_rfu:2;
+ unsigned section_type_pad:24;
+
+}section_type_t;
+
typedef struct section_info
{
section_hdr_t *p_sec_hdr;
@@ -340,10 +289,6 @@ typedef struct section_info
* to be loaded to the particular address.
*/
uint8_t *p_sec_data;
- /* The Section checksum to verify the integrity of the section
- * data.
- */
- uint8_t *p_sec_chksum;
/** \internal Index used to refer and process the
* Firmware Section Data */
volatile uint32_t section_offset;
@@ -369,24 +314,13 @@ typedef struct phDnldNfc_sParam
uint8_t data_packet[PHDNLD_DATA_SIZE];
}phDnldNfc_sParam_t;
+
typedef struct phDnldNfc_sDataHdr
{
uint8_t frame_type;
uint8_t frame_length[PHDNLD_FRAME_LEN_SIZE];
}phDnldNfc_sData_Hdr_t;
-typedef struct phDnldNfc_sRawHdr
-{
- uint8_t frame_type;
- uint8_t frame_length[PHDNLD_FRAME_LEN_SIZE];
-}phDnldNfc_sRawHdr_t;
-
-typedef struct phDnldNfc_sRawDataHdr
-{
- uint8_t data_addr[PHDNLD_ADDR_SIZE];
- uint8_t data_len[PHDNLD_DATA_LEN_SIZE];
-}phDnldNfc_sRawDataHdr_t;
-
typedef struct phDnldNfc_sChkCrc16_Resp
{
uint8_t Chk_status;
@@ -418,58 +352,10 @@ typedef struct phDnldNfc_sData
{
phDnldNfc_sParam_t data_param;
uint8_t response_data[PHDNLD_MAX_PACKET];
- uint8_t cmd_param;
+ uint8_t config_verify_param;
}param_info;
}phDnldNfc_sData_t;
-#ifdef NXP_NFC_MULTIPLE_FW
-
-typedef struct phDnldNfc_sFwImageInfo
-{
- /** \internal Data Pointer to the Firmware header section of the Firmware */
- fw_data_hdr_t *p_fw_hdr;
- /** \internal Buffer pointer to store the Firmware Section Data */
- section_info_t *p_fw_sec;
- /** \internal Buffer pointer to store the Firmware Raw Data */
- uint8_t *p_fw_raw;
-}phDnldNfc_sFwImageInfo_t;
-
-#endif /* #ifdef NXP_NFC_MULTIPLE_FW */
-
-
-typedef struct phDnldNfc_TxInfo
-{
- uint8_t *transmit_frame;
-
- uint16_t tx_offset;
-
- /** \internal Remaining amount of data to be sent */
- uint16_t tx_len;
-
- uint16_t tx_total;
-
- /** \internal Chain information for the data to be sent */
- uint8_t tx_chain;
-
-}phDnldNfc_TxInfo_t;
-
-
-typedef struct phDnldNfc_RxInfo
-{
- /** \internal Total length of the received buffer */
- uint16_t rx_total;
- /** \internal Chain information of the received buffer */
- uint16_t rx_chain;
- /** \internal Remaining Data information to be read to complete the
- * Data Information.
- */
- uint16_t rx_remain;
-
- /** \internal Buffer to Send the Raw Data Frame */
- uint8_t raw_buffer_data[PHDNLD_MAX_PACKET
- + PHDNLD_PAGE_SIZE];
-}phDnldNfc_RxInfo_t;
-
typedef struct phDnldNfc_sContext
{
@@ -488,29 +374,18 @@ typedef struct phDnldNfc_sContext
/** \internal Timer ID for the Download Abort */
uint32_t timer_id;
- /** \internal Internal Download for the Download Abort */
- uint32_t dnld_timeout;
/** \internal Data Pointer to the Image header section of the Firmware */
img_data_hdr_t *p_img_hdr;
-
-#ifdef NXP_NFC_MULTIPLE_FW
- /** \internal Data Pointer to the Firmware Image Information */
- phDnldNfc_sFwImageInfo_t *p_img_info;
-#endif /* #ifdef NXP_NFC_MULTIPLE_FW */
-
/** \internal Data Pointer to the Firmware header section of the Firmware */
fw_data_hdr_t *p_fw_hdr;
/** \internal Buffer pointer to store the Firmware Data */
section_info_t *p_fw_sec;
- /** \internal Buffer pointer to store the Firmware Raw Data */
- uint8_t *p_fw_raw;
/** \internal Previous Download Size */
uint32_t prev_dnld_size;
/** \internal Single Data Block to download the Firmware */
- uint8_t dnld_data[PHDNLD_MAX_PACKET
- + PHDNLD_PAGE_SIZE];
+ phDnldNfc_sData_t dnld_data;
/** \internal Index used to refer and process the Download Data */
volatile uint32_t dnld_index;
@@ -538,12 +413,11 @@ typedef struct phDnldNfc_sContext
#define NXP_FW_VMID_CARD_MODE_ADDR 0x00009931U
#define NXP_FW_VMID_RD_MODE_ADDR 0x00009981U
- uint8_t vmid_trim_update;
+ unsigned vmid_trim_update:1;
+ unsigned trim_bits_rfu:31;
#endif /* #ifdef NXP_FW_SW_VMID_TRIM */
- uint8_t cur_frame_info;
-
- uint8_t raw_mode_upgrade;
+ uint8_t *p_system_mem_crc;
uint8_t *p_patch_table_crc;
@@ -553,12 +427,18 @@ typedef struct phDnldNfc_sContext
uint16_t resp_length;
+ /** \internal Total length of the received buffer */
+ volatile uint16_t rx_total;
+
/** \internal Current FW Section in Process */
volatile uint8_t section_index;
/** \internal Previous Command sent */
volatile uint8_t prev_cmd;
+ /** \internal Download Response pending */
+ volatile uint8_t recv_pending;
+
uint8_t dnld_retry;
/** \internal Current Download State */
@@ -571,38 +451,16 @@ typedef struct phDnldNfc_sContext
/** \internal Next step in Download Sequence */
volatile uint8_t next_dnld_seq;
- /* \internal Data Transmit information */
- phDnldNfc_TxInfo_t tx_info;
-
- /* \internal Data Receive information */
- phDnldNfc_RxInfo_t rx_info;
-
-
}phDnldNfc_sContext_t;
+
/*
################################################################################
******************** Global and Static Variables Definition ********************
################################################################################
*/
-
-#ifndef NFC_TIMER_CONTEXT
static phDnldNfc_sContext_t *gpphDnldContext = NULL;
-#endif
-
-#ifdef NXP_FW_DNLD_CHECK_PHASE
-
-#define NXP_FW_DNLD_COMPLETE_PHASE 0x00U
-#define NXP_FW_DNLD_SYSTEM_PHASE 0x01U
-#define NXP_FW_DNLD_CFG_PHASE 0x02U
-#define NXP_FW_DNLD_DATA_PHASE 0x03U
-#define NXP_FW_DNLD_RAW_PHASE 0x04U
-#define NXP_FW_DNLD_INVALID_PHASE 0xFFU
-
-static uint8_t gphDnldPhase = NXP_FW_DNLD_COMPLETE_PHASE;
-
-#endif /* #ifdef NXP_FW_DNLD_CHECK_PHASE */
/**/
@@ -769,10 +627,8 @@ phDnldNfc_Read(
STATIC
void
phDnldNfc_Abort (
- uint32_t abort_id
-#ifdef NFC_TIMER_CONTEXT
- , void *dnld_cntxt
-#endif
+ uint32_t abort_id ,
+ void * pcontext
);
@@ -1038,7 +894,7 @@ phDnldNfc_Set_Seq(
NFCSTATUS status = NFCSTATUS_SUCCESS;
static uint8_t prev_temp_state = 0;
static uint8_t prev_temp_seq =
- (uint8_t) phDnld_Activate_Patch;
+ (uint8_t) phDnld_Update_Patch;
switch(seq_type)
{
@@ -1049,20 +905,20 @@ phDnldNfc_Set_Seq(
(uint8_t) phDnld_Reset_State;
psDnldContext->next_dnld_state =
(uint8_t)phDnld_Upgrade_State;
- psDnldContext->cur_dnld_seq =
+ psDnldContext->next_dnld_seq =
(uint8_t)phDnld_Upgrade_Section;
psDnldContext->next_dnld_seq =
psDnldContext->cur_dnld_seq;
break;
}
- case DNLD_SEQ_RAW:
+ case DNLD_SEQ_LOCK:
{
psDnldContext->cur_dnld_state =
(uint8_t) phDnld_Reset_State;
psDnldContext->next_dnld_state =
- (uint8_t)phDnld_Upgrade_State;
+ (uint8_t) phDnld_Reset_State;
psDnldContext->cur_dnld_seq =
- (uint8_t)phDnld_Raw_Upgrade;
+ (uint8_t) phDnld_Lock_System;
psDnldContext->next_dnld_seq =
psDnldContext->cur_dnld_seq;
break;
@@ -1071,35 +927,10 @@ phDnldNfc_Set_Seq(
{
psDnldContext->cur_dnld_state =
(uint8_t) phDnld_Reset_State;
-
-#ifdef NXP_FW_DNLD_CHECK_PHASE
- if( NXP_FW_DNLD_SYSTEM_PHASE < gphDnldPhase )
- {
- psDnldContext->next_dnld_state =
- (uint8_t)phDnld_Upgrade_State;
- psDnldContext->cur_dnld_seq =
- (uint8_t)phDnld_Upgrade_Section;
- }
- else
-#endif /* NXP_FW_DNLD_CHECK_PHASE */
- {
psDnldContext->next_dnld_state =
(uint8_t) phDnld_Unlock_State;
psDnldContext->cur_dnld_seq =
- (uint8_t) phDnld_Activate_Patch;
- }
- psDnldContext->next_dnld_seq =
- psDnldContext->cur_dnld_seq;
- break;
- }
- case DNLD_SEQ_LOCK:
- {
- psDnldContext->cur_dnld_state =
- (uint8_t) phDnld_Reset_State;
- psDnldContext->next_dnld_state =
- (uint8_t) phDnld_Reset_State;
- psDnldContext->cur_dnld_seq =
- (uint8_t) phDnld_Lock_System;
+ (uint8_t) phDnld_Update_Patch;
psDnldContext->next_dnld_seq =
psDnldContext->cur_dnld_seq;
break;
@@ -1141,6 +972,26 @@ phDnldNfc_Set_Seq(
psDnldContext->cur_dnld_seq ;
break;
}
+#if 0
+ case DNLD_UPDATE_STATE1:
+ {
+ prev_temp_state = (uint8_t) psDnldContext->cur_dnld_state;
+ psDnldContext->cur_dnld_state =
+ psDnldContext->next_dnld_state;
+ /* psDnldContext->next_dnld_state =
+ (uint8_t)phDnld_Invalid_State ; */
+ break;
+ }
+ case DNLD_ROLLBACK_STATE1:
+ {
+ psDnldContext->cur_dnld_state = (uint8_t) prev_temp_state;
+ /* psDnldContext->next_dnld_state =
+ (uint8_t)phDnld_Invalid_State ; */
+ prev_temp_state = 0;
+
+ break;
+ }
+#endif
default:
{
break;
@@ -1182,36 +1033,6 @@ phDnldNfc_Set_Seq(
#endif
status = plower_if->send((void *)plower_if->pcontext,
(void *)pHwRef, pdata, length);
-
-#if defined(FW_DOWNLOAD_TIMER) && \
- (FW_DOWNLOAD_TIMER == 2)
- if (
- (NFCSTATUS_PENDING == status)
- && ( NXP_INVALID_TIMER_ID != psDnldContext->timer_id )
- )
- {
- psDnldContext->dnld_timeout = NXP_DNLD_COMPLETE_TIMEOUT;
-
- if ( psDnldContext->dnld_timeout
- < DNLD_DEFAULT_RESPONSE_TIMEOUT)
- {
- psDnldContext->dnld_timeout
- = DNLD_DEFAULT_RESPONSE_TIMEOUT;
- }
- /* Start the Download Timer */
- phOsalNfc_Timer_Start( psDnldContext->timer_id,
- psDnldContext->dnld_timeout,
- (ppCallBck_t) phDnldNfc_Abort
-#ifdef NFC_TIMER_CONTEXT
- , (void *) psDnldContext
-#endif
- );
-
- DNLD_DEBUG(" DNLD : Timer %X Started ", psDnldContext->timer_id);
- DNLD_DEBUG(" \t\t With %U Timeout \n", psDnldContext->dnld_timeout);
- }
-
-#endif /* (NXP_NFC_DNLD_TIMER == 1) */
}
return status;
@@ -1267,10 +1088,8 @@ phDnldNfc_Read(
)
{
NFCSTATUS status = NFCSTATUS_SUCCESS;
- phDnldNfc_sData_t *p_dnld_data =
- (phDnldNfc_sData_t *)psDnldContext->dnld_data;
- phDnldNfc_sParam_t *p_data_param =
- &p_dnld_data->param_info.data_param;
+ phDnldNfc_sParam_t *p_dnld_data =
+ &psDnldContext->dnld_data.param_info.data_param;
uint32_t read_addr = (p_sec_info->p_sec_hdr->section_address
+ p_sec_info->section_offset);
static unsigned sec_type = 0;
@@ -1280,7 +1099,7 @@ phDnldNfc_Read(
sec_type = (unsigned int)p_sec_info->p_sec_hdr->section_mem_type;
if( ( FALSE == p_sec_info->section_read )
- && ((sec_type & DNLD_TRIM_MASK))
+ && (TRUE == ((section_type_t *)(&sec_type))->trim_val)
&& (FALSE == p_sec_info->trim_write) )
{
read_size = (uint16_t) p_sec_info->p_sec_hdr->section_length;
@@ -1288,26 +1107,18 @@ phDnldNfc_Read(
}
else
{
+#ifdef FW_DOWNLOAD_VERIFY
if (( FALSE == p_sec_info->section_read )
- && ((sec_type & DNLD_VERIFY_MASK))
- )
+ && (TRUE == ((section_type_t *)(&sec_type))->verify_mem ))
{
read_size = (uint16_t)(psDnldContext->prev_dnld_size );
DNLD_DEBUG(" FW_DNLD: Section Read = %X \n", read_size);
}
- else if( ( TRUE == p_sec_info->section_read )
- && ( TRUE == p_sec_info->section_write )
- )
- {
- /*Already Read the Data Hence Ignore the Read */
- DNLD_DEBUG(" FW_DNLD: Already Read, Read Ignored, read_size = %X \n", read_size);
- }
else
+#endif /* #ifdef FW_DOWNLOAD_VERIFY */
{
- /* Ignore the Read */
- DNLD_DEBUG(" FW_DNLD: Section Read Status = %X \n", p_sec_info->section_read);
- DNLD_DEBUG(" FW_DNLD: Section Write Status = %X \n", p_sec_info->section_write);
- DNLD_DEBUG(" FW_DNLD: No Read Required, Read_size = %X \n", read_size);
+ /*Already Read the Data Hence Ignore the Read */
+ DNLD_DEBUG(" FW_DNLD: Already Read/Read Back Ignored = %X \n", read_size);
}
}
@@ -1317,24 +1128,24 @@ phDnldNfc_Read(
read_size = (uint16_t)((PHDNLD_DATA_SIZE >= read_size)?
read_size: PHDNLD_DATA_SIZE);
- p_dnld_data->frame_length[i] = (uint8_t)0;
+ psDnldContext->dnld_data.frame_length[i] = (uint8_t)0;
/* Update the LSB of the Data and the Address Parameter*/
- p_data_param->data_addr[i] = (uint8_t)((read_addr >>
+ p_dnld_data->data_addr[i] = (uint8_t)((read_addr >>
(BYTE_SIZE + BYTE_SIZE)) & BYTE_MASK);
- p_data_param->data_len[i] = (uint8_t)((read_size >>
+ p_dnld_data->data_len[i] = (uint8_t)((read_size >>
BYTE_SIZE) & BYTE_MASK);
i++;
- p_dnld_data->frame_length[i] = (uint8_t)
+ psDnldContext->dnld_data.frame_length[i] = (uint8_t)
( PHDNLD_CMD_READ_LEN & BYTE_MASK);
/* Update the 2nd byte of the Data and the Address Parameter*/
- p_data_param->data_addr[i] = (uint8_t)((read_addr >>
+ p_dnld_data->data_addr[i] = (uint8_t)((read_addr >>
BYTE_SIZE) & BYTE_MASK);
- p_data_param->data_len[i] = (uint8_t) (read_size & BYTE_MASK);
+ p_dnld_data->data_len[i] = (uint8_t) (read_size & BYTE_MASK);
i++;
/* Update the 3rd byte of the the Address Parameter*/
- p_data_param->data_addr[i] = (uint8_t)(read_addr & BYTE_MASK);
+ p_dnld_data->data_addr[i] = (uint8_t)(read_addr & BYTE_MASK);
status = phDnldNfc_Send_Command( psDnldContext, pHwRef,
PHDNLD_CMD_READ, NULL , 0 );
@@ -1363,10 +1174,8 @@ phDnldNfc_Process_Write(
)
{
NFCSTATUS status = NFCSTATUS_SUCCESS;
- phDnldNfc_sData_t *p_dnld_data =
- (phDnldNfc_sData_t *)psDnldContext->dnld_data;
phDnldNfc_sParam_t *dnld_data =
- &p_dnld_data->param_info.data_param;
+ &psDnldContext->dnld_data.param_info.data_param;
uint8_t *p_sm_trim_data = (uint8_t *)psDnldContext->
dnld_resp.param_info.response_data;
uint32_t dnld_addr = 0;
@@ -1376,7 +1185,9 @@ phDnldNfc_Process_Write(
static unsigned sec_type = 0;
uint8_t i = 0;
uint16_t dnld_size = 0;
+#ifdef FW_DOWNLOAD_VERIFY
int cmp_val = 0x00;
+#endif /* #ifdef FW_DOWNLOAD_VERIFY */
sec_type = (unsigned int)p_sec_info->p_sec_hdr->section_mem_type;
@@ -1386,38 +1197,27 @@ phDnldNfc_Process_Write(
{
if( (TRUE == p_sec_info->trim_write)
&& (TRUE == p_sec_info->section_read)
- && ((sec_type & DNLD_VERIFY_MASK))
)
{
+#ifdef FW_DOWNLOAD_VERIFY
if(NULL != psDnldContext->trim_store.buffer)
{
- uint32_t trim_cmp_size = psDnldContext->prev_dnld_size;
-
- if( p_sec_info->p_sec_hdr->section_address
- < (DNLD_CFG_PG_ADDR + PHDNLD_PAGE_SIZE) )
- {
- trim_cmp_size = trim_cmp_size - 2;
- }
-
/* Below Comparison fails due to the checksum */
cmp_val = phOsalNfc_MemCompare(
psDnldContext->trim_store.buffer,
&psDnldContext->dnld_resp.
param_info.response_data[0]
- ,trim_cmp_size);
- DNLD_DEBUG(" FW_DNLD: %X Bytes Trim Write Complete ",
- psDnldContext->prev_dnld_size);
- DNLD_DEBUG(" Comparison Status %X\n", cmp_val);
+ ,psDnldContext->prev_dnld_size);
}
+#endif /* #ifdef FW_DOWNLOAD_VERIFY */
p_sec_info->trim_write = FALSE;
DNLD_DEBUG(" FW_DNLD: TRIMMED %X Bytes Write Complete\n", psDnldContext->prev_dnld_size);
}
else
{
+#ifdef FW_DOWNLOAD_VERIFY
if((NULL != psDnldContext->dnld_store.buffer)
- && ((sec_type & DNLD_VERIFY_MASK))
- && (TRUE == p_sec_info->section_write)
- && (TRUE == p_sec_info->section_read)
+ && (TRUE == ((section_type_t *)(&sec_type))->verify_mem )
)
{
cmp_val = phOsalNfc_MemCompare(
@@ -1425,26 +1225,18 @@ phDnldNfc_Process_Write(
&psDnldContext->dnld_resp.
param_info.response_data[0]
,psDnldContext->dnld_store.length);
- p_sec_info->section_read = FALSE;
- p_sec_info->section_write = FALSE;
DNLD_DEBUG(" FW_DNLD: %X Bytes Write Complete ",
psDnldContext->dnld_store.length);
DNLD_DEBUG(" Comparison Status %X\n", cmp_val);
}
- else
- {
- if(( TRUE == p_sec_info->section_write)
- && ( FALSE == p_sec_info->section_read)
- )
- {
- p_sec_info->section_write = FALSE;
- }
- }
+#endif /* #ifdef FW_DOWNLOAD_VERIFY */
/* p_sec_info->section_read = FALSE; */
}
if (( 0 == psDnldContext->dnld_retry )
+#ifdef FW_DOWNLOAD_VERIFY
&& (0 == cmp_val)
+#endif
)
{
p_sec_info->sec_verify_retry = 0;
@@ -1480,6 +1272,7 @@ phDnldNfc_Process_Write(
if (dnld_size != 0)
{
+
dnld_size = (uint16_t)((PHDNLD_DATA_SIZE >= dnld_size)?
dnld_size: PHDNLD_DATA_SIZE);
@@ -1488,7 +1281,7 @@ phDnldNfc_Process_Write(
(BYTE_SIZE + BYTE_SIZE)) & BYTE_MASK);
dnld_data->data_len[i] = (uint8_t)((dnld_size >> BYTE_SIZE)
& BYTE_MASK);
- p_dnld_data->frame_length[i] = (uint8_t)
+ psDnldContext->dnld_data.frame_length[i] = (uint8_t)
(((dnld_size + PHDNLD_CMD_WRITE_MIN_LEN) >> BYTE_SIZE)
& BYTE_MASK);
i++;
@@ -1496,7 +1289,7 @@ phDnldNfc_Process_Write(
dnld_data->data_addr[i] = (uint8_t)((dnld_addr >> BYTE_SIZE)
& BYTE_MASK);
dnld_data->data_len[i] = (uint8_t) (dnld_size & BYTE_MASK);
- p_dnld_data->frame_length[i] = (uint8_t) ((dnld_size +
+ psDnldContext->dnld_data.frame_length[i] = (uint8_t) ((dnld_size +
PHDNLD_CMD_WRITE_MIN_LEN) & BYTE_MASK);
i++;
/* Update the 3rd byte of the the Address Parameter*/
@@ -1505,15 +1298,7 @@ phDnldNfc_Process_Write(
(void)memcpy( dnld_data->data_packet,
(p_sec_info->p_sec_data + *p_sec_offset), dnld_size );
- if( ((sec_type & DNLD_TRIM_MASK))
- && (p_sec_info->sec_verify_retry != 0)
- && (NULL != psDnldContext->trim_store.buffer)
- )
- {
- (void)memcpy( dnld_data->data_packet,
- psDnldContext->trim_store.buffer, dnld_size );
- }
- else if(((sec_type & DNLD_TRIM_MASK))
+ if((TRUE == ((section_type_t *)(&sec_type))->trim_val )
&& ( TRUE == p_sec_info->section_read )
)
{
@@ -1563,14 +1348,8 @@ else
psDnldContext->trim_store.buffer = NULL;
psDnldContext->trim_store.length = 0;
}
-#if 1
- (void)
- phDnldNfc_Allocate_Resource((void **)
- &(psDnldContext->trim_store.buffer),dnld_size);
-#else
psDnldContext->trim_store.buffer =
(uint8_t *) phOsalNfc_GetMemory(dnld_size);
-#endif
if(NULL != psDnldContext->trim_store.buffer)
{
@@ -1593,14 +1372,8 @@ else
psDnldContext->dnld_store.buffer = NULL;
psDnldContext->dnld_store.length = 0;
}
-#if 1
- (void)
- phDnldNfc_Allocate_Resource((void **)
- &(psDnldContext->dnld_store.buffer),dnld_size);
-#else
psDnldContext->dnld_store.buffer =
(uint8_t *) phOsalNfc_GetMemory(dnld_size);
-#endif
if(NULL != psDnldContext->dnld_store.buffer)
{
(void )memset((void *)psDnldContext->dnld_store.buffer,0,
@@ -1612,24 +1385,14 @@ else
DNLD_DEBUG(" of Size %X ", dnld_size );
}
}
-
- if(PHDNLD_FW_PATCH_SEC != psDnldContext->p_fw_hdr->fw_patch)
- {
status = phDnldNfc_Send_Command( psDnldContext, pHwRef,
PHDNLD_CMD_WRITE, NULL , 0 );
- }
- else
- {
- status = phDnldNfc_Send_Command( psDnldContext, pHwRef,
- PHDNLD_CMD_SEC_WRITE, NULL , 0 );
- }
- DNLD_DEBUG(" FW_DNLD: Memory Write Status = %X \n", status);
+ DNLD_DEBUG(" : Memory Write Status = %X \n", status);
if ( NFCSTATUS_PENDING == status )
{
psDnldContext->prev_dnld_size = dnld_size;
- cmp_val = 0x00;
- if((sec_type & DNLD_TRIM_MASK))
+ if(TRUE == ((section_type_t *)(&sec_type))->trim_val )
{
p_sec_info->trim_write = TRUE;
DNLD_DEBUG(" FW_DNLD: Bytes Downloaded (Trimming Values) = %X Bytes \n",
@@ -1637,7 +1400,6 @@ else
}
else
{
- p_sec_info->section_write = TRUE;
DNLD_DEBUG(" FW_DNLD: Bytes Downloaded = %X : ",
(*p_sec_offset + dnld_size));
DNLD_DEBUG(" Bytes Remaining = %X \n",
@@ -1678,11 +1440,10 @@ phDnldNfc_Resume_Write(
p_sec_info->section_offset = 0;
p_sec_info->section_read = FALSE;
- p_sec_info->section_write = FALSE;
p_sec_info->trim_write = FALSE;
DNLD_DEBUG(" FW_DNLD: Section %02X Download Complete\n", sec_index);
- if((sec_type & DNLD_RESET_MASK))
+ if(TRUE == ((section_type_t *)(&sec_type))->reset_required )
{
DNLD_DEBUG(" FW_DNLD: Reset After Section %02X Download \n", sec_index);
status = phDnldNfc_Send_Command( psDnldContext, pHwRef,
@@ -1691,36 +1452,7 @@ phDnldNfc_Resume_Write(
DNLD_PRINT("*******************************************\n\n");
sec_index++;
-
-#ifdef NXP_FW_DNLD_CHECK_PHASE
- if( p_sec_info->p_sec_hdr->section_address
- < (DNLD_CFG_PG_ADDR + PHDNLD_PAGE_SIZE) )
- {
- gphDnldPhase = NXP_FW_DNLD_DATA_PHASE;
-
- }
-
p_sec_info = (psDnldContext->p_fw_sec + sec_index);
-
- if( (sec_index < psDnldContext->p_fw_hdr->no_of_sections)
- && ( p_sec_info->p_sec_hdr->section_address
- < (DNLD_CFG_PG_ADDR + PHDNLD_PAGE_SIZE) )
- )
- {
- if( NXP_FW_DNLD_CFG_PHASE >= gphDnldPhase )
- {
- gphDnldPhase = NXP_FW_DNLD_CFG_PHASE;
- }
- else
- {
- sec_index++;
- p_sec_info = (psDnldContext->p_fw_sec + sec_index);
- }
- }
-#else
- p_sec_info = (psDnldContext->p_fw_sec + sec_index);
-#endif /* #ifdef NXP_FW_DNLD_CHECK_PHASE */
-
psDnldContext->section_index = sec_index;
/* psDnldContext->next_dnld_state = (uint8_t) phDnld_Upgrade_State; */
}
@@ -1751,7 +1483,7 @@ phDnldNfc_Resume_Write(
#if (ES_HW_VER <= 30)
#define NXP_DNLD_PATCH_ADDR 0x01AFFFU
#else
-#define NXP_DNLD_PATCH_ADDR 0x01A1E0U
+#define NXP_DNLD_PATCH_ADDR 0x01AFE0U
#endif
#if (ES_HW_VER <= 30)
@@ -1772,16 +1504,14 @@ phDnldNfc_Sequence(
{
NFCSTATUS status = NFCSTATUS_SUCCESS;
uint32_t dnld_addr = 0;
- phDnldNfc_sData_t *p_dnld_data =
- (phDnldNfc_sData_t *)psDnldContext->dnld_data;
- phDnldNfc_sParam_t *p_data_param =
- & p_dnld_data->param_info.data_param;
+ phDnldNfc_sParam_t *dnld_data = &psDnldContext->dnld_data
+ .param_info.data_param;
uint8_t *p_data = NULL;
static uint32_t patch_size = 0;
#if (ES_HW_VER == 32)
- static uint8_t patch_table[] = {0xA0, 0xA1, 0xE0, 0x80, 0xA9, 0x6C };
+ static uint8_t patch_table[] = {0xA0, 0xAF, 0xE0, 0x80, 0xA9, 0x6C };
static uint8_t patch_data[] = {0xA5, 0xD0, 0xFE, 0xA5, 0xD0, 0xFD, 0xA5,
0xD0, 0xFC, 0xA5, 0x02, 0x80, 0xA9, 0x75};
@@ -1818,32 +1548,6 @@ phDnldNfc_Sequence(
break;
}
- case phDnld_Activate_Patch:
- {
- uint8_t patch_activate = 0x01;
- psDnldContext->next_dnld_seq =
- (uint8_t)phDnld_Update_Patch;
-#ifdef NXP_FW_DNLD_CHECK_PHASE
- gphDnldPhase = NXP_FW_DNLD_SYSTEM_PHASE;
-#endif /* NXP_FW_DNLD_CHECK_PHASE */
-
- status = phDnldNfc_Send_Command( psDnldContext, pHwRef,
- PHDNLD_CMD_ACTIVATE_PATCH , &patch_activate, sizeof(patch_activate) );
- DNLD_PRINT(" FW_DNLD: Activate the Patch Update .... \n");
- break;
- }
- case phDnld_Deactivate_Patch:
- {
- uint8_t patch_activate = 0x00;
-
- psDnldContext->next_dnld_state =
- (uint8_t)phDnld_Reset_State;
-
- status = phDnldNfc_Send_Command( psDnldContext, pHwRef,
- PHDNLD_CMD_ACTIVATE_PATCH , &patch_activate, sizeof(patch_activate) );
- DNLD_PRINT(" FW_DNLD: Deactivate the Patch Update .... \n");
- break;
- }
case phDnld_Update_Patch:
{
dnld_addr = NXP_DNLD_PATCH_ADDR;
@@ -1871,14 +1575,8 @@ phDnldNfc_Sequence(
dnld_addr = NXP_DNLD_SM_UNLOCK_ADDR;
patch_size = sizeof(unlock_data) ;
p_data = unlock_data;
-#define NXP_FW_PATCH_DISABLE
-#ifdef NXP_FW_PATCH_DISABLE
- psDnldContext->next_dnld_seq =
- (uint8_t)phDnld_Deactivate_Patch;
-#else
psDnldContext->next_dnld_state =
(uint8_t)phDnld_Reset_State;
-#endif
DNLD_PRINT(" FW_DNLD: System Memory Unlock Seq.... \n");
break;
@@ -1924,25 +1622,25 @@ phDnldNfc_Sequence(
{
/* Update the LSB of the Data and the Address Parameter*/
- p_data_param->data_addr[i] = (uint8_t)((dnld_addr >>
+ dnld_data->data_addr[i] = (uint8_t)((dnld_addr >>
(BYTE_SIZE + BYTE_SIZE))
& BYTE_MASK);
- p_data_param->data_len[i] = (uint8_t)((patch_size >> BYTE_SIZE)
+ dnld_data->data_len[i] = (uint8_t)((patch_size >> BYTE_SIZE)
& BYTE_MASK);
- p_dnld_data->frame_length[i] = (uint8_t)
+ psDnldContext->dnld_data.frame_length[i] = (uint8_t)
(((patch_size + PHDNLD_CMD_WRITE_MIN_LEN) >> BYTE_SIZE)
& BYTE_MASK);
i++;
/* Update the 2nd byte of the Data and the Address Parameter*/
- p_data_param->data_addr[i] = (uint8_t)((dnld_addr >> BYTE_SIZE)
+ dnld_data->data_addr[i] = (uint8_t)((dnld_addr >> BYTE_SIZE)
& BYTE_MASK);
- p_data_param->data_len[i] = (uint8_t) (patch_size & BYTE_MASK);
- p_dnld_data->frame_length[i] = (uint8_t)
+ dnld_data->data_len[i] = (uint8_t) (patch_size & BYTE_MASK);
+ psDnldContext->dnld_data.frame_length[i] = (uint8_t)
((patch_size + PHDNLD_CMD_WRITE_MIN_LEN)
& BYTE_MASK);
i++;
/* Update the 3rd byte of the the Address Parameter*/
- p_data_param->data_addr[i] = (uint8_t)(dnld_addr & BYTE_MASK);
+ dnld_data->data_addr[i] = (uint8_t)(dnld_addr & BYTE_MASK);
status = phDnldNfc_Send_Command( psDnldContext, pHwRef,
PHDNLD_CMD_WRITE,(void *)p_data , (uint8_t)patch_size );
@@ -1956,386 +1654,6 @@ phDnldNfc_Sequence(
return status;
}
-#define FRAME_HEADER_LEN 0x03U
-
-
-static
-void
-phDnldNfc_Tx_Reset(phDnldNfc_sContext_t *psDnldContext)
-{
- psDnldContext->tx_info.transmit_frame = NULL;
- psDnldContext->tx_info.tx_total = 0x00;
- psDnldContext->tx_info.tx_offset = 0x00;
- psDnldContext->tx_info.tx_len = 0x00;
- psDnldContext->tx_info.tx_chain = FALSE;
-}
-
-STATIC
-bool_t
-phDnldNfc_Extract_Chunks(
- uint8_t *frame_data,
- uint16_t frame_offset,
- uint16_t frame_length,
- uint16_t max_frame ,
- uint16_t *chunk_length
- );
-
-
-STATIC
-bool_t
-phDnldNfc_Extract_Chunks(
- uint8_t *frame_data,
- uint16_t frame_offset,
- uint16_t frame_length,
- uint16_t max_frame ,
- uint16_t *chunk_length
- )
-{
- bool_t chunk_present = FALSE;
-
- if( 0 == frame_offset)
- {
- if( max_frame >= (frame_length
- - frame_offset))
- {
- *chunk_length = (frame_length - frame_offset);
- }
- else
- {
- *chunk_length = max_frame
- - FRAME_HEADER_LEN;
- chunk_present = TRUE;
- }
- }
- else
- {
- if( max_frame >= (frame_length
- - frame_offset))
- {
- *chunk_length = (frame_length - frame_offset);
- }
- else
- {
- *chunk_length = max_frame
- - FRAME_HEADER_LEN;
- chunk_present = TRUE;
- }
- }
-
- return chunk_present;
-}
-
-
-STATIC
-NFCSTATUS
-phDnldNfc_Send_Raw(
- phDnldNfc_sContext_t *psDnldContext,
- void *pHwRef,
- uint8_t *raw_frame,
- uint16_t frame_offset,
- uint16_t frame_length
- )
-{
- NFCSTATUS status = NFCSTATUS_SUCCESS;
- phDnldNfc_sRawHdr_t *raw_frame_hdr = ( phDnldNfc_sRawHdr_t * ) raw_frame;
-
-
- switch(raw_frame_hdr->frame_type)
- {
- case PHDNLD_CMD_RESET:
- {
- break;
- }
- case PHDNLD_CMD_READ:
- {
- /* TODO: To Update the length and the buffer to receive data */
- break;
- }
- case PHDNLD_CMD_WRITE:
- {
- phDnldNfc_sRawDataHdr_t *raw_data_hdr =
- ( phDnldNfc_sRawDataHdr_t * ) (raw_frame + FRAME_HEADER_LEN);
-
- psDnldContext->resp_length = PHDNLD_MIN_PACKET;
-
- break;
- }
- case PHDNLD_CMD_SEC_WRITE:
- {
- uint16_t tx_length = 0x00;
- uint16_t frame_offset =
- psDnldContext->tx_info.tx_offset;
- uint16_t chain =
- psDnldContext->tx_info.tx_chain;
-
- chain =
- phDnldNfc_Extract_Chunks(
- raw_frame,
- frame_offset,
- frame_length,
- PHDNLD_FW_TX_RX_LEN,
- &tx_length
- );
-
- if( TRUE == chain )
- {
- status = phDnldNfc_Send_Command( psDnldContext,
- pHwRef, PHDNLD_CMD_ENCAPSULATE,
- (raw_frame + frame_offset),
- tx_length);
- if(NFCSTATUS_PENDING == status)
- {
- psDnldContext->prev_cmd = raw_frame_hdr->frame_type;
- /* TODO: Update for the Chaining */
- psDnldContext->tx_info.tx_offset += tx_length;
- psDnldContext->tx_info.tx_chain = chain;
- }
- }
- else if (0 != frame_offset)
- {
- status = phDnldNfc_Send_Command( psDnldContext,
- pHwRef, PHDNLD_CMD_ENCAPSULATE,
- (raw_frame + frame_offset),
- tx_length);
- if(NFCSTATUS_PENDING == status)
- {
- psDnldContext->prev_cmd = raw_frame_hdr->frame_type;
- /* TODO: Update for the Chaining */
- psDnldContext->prev_dnld_size = frame_length;
- phDnldNfc_Tx_Reset(psDnldContext);
- }
- }
- else
- {
- phDnldNfc_sRawDataHdr_t *raw_data_hdr =
- ( phDnldNfc_sRawDataHdr_t * ) (raw_frame + FRAME_HEADER_LEN);
- psDnldContext->resp_length = PHDNLD_MIN_PACKET;
- }
-
- break;
- }
- case PHDNLD_CMD_CHECK:
- {
- psDnldContext->resp_length = PHDNLD_MIN_PACKET;
- break;
- }
- case PHDNLD_CMD_SET_HIF:
- {
- psDnldContext->resp_length = PHDNLD_MIN_PACKET;
- break;
- }
- case PHDNLD_CMD_ACTIVATE_PATCH:
- {
- psDnldContext->resp_length = PHDNLD_MIN_PACKET;
- break;
- }
- case PHDNLD_CMD_CHECK_INTEGRITY:
- {
- uint8_t integrity_param =
- *(raw_frame + FRAME_HEADER_LEN);
- switch(integrity_param)
- {
- case CHK_INTEGRITY_CONFIG_PAGE_CRC:
- case CHK_INTEGRITY_PATCH_TABLE_CRC:
- {
- psDnldContext->resp_length = PHDNLD_MIN_PACKET
- + CHECK_INTEGRITY_RESP_CRC16_LEN;
- break;
- }
- case CHK_INTEGRITY_FLASH_CODE_CRC:
- case CHK_INTEGRITY_PATCH_CODE_CRC:
- {
- psDnldContext->resp_length = PHDNLD_MIN_PACKET
- + CHECK_INTEGRITY_RESP_CRC32_LEN;
- break;
- }
- case CHK_INTEGRITY_COMPLETE_CRC:
- default:
- {
- psDnldContext->resp_length = PHDNLD_MIN_PACKET
- + CHECK_INTEGRITY_RESP_COMP_LEN;
- break;
- }
- }
- break;
- }
- default:
- {
- status = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_FEATURE_NOT_SUPPORTED);
- break;
- }
- }
-
- if (NFCSTATUS_SUCCESS == status)
- {
- status = phDnldNfc_Send( psDnldContext, pHwRef ,
- raw_frame, frame_length);
-
- if(NFCSTATUS_PENDING == status)
- {
- psDnldContext->prev_cmd = raw_frame_hdr->frame_type;
- /* TODO: Update for the Chaining */
- psDnldContext->prev_dnld_size = frame_length;
- }
- }
-
- return status;
-}
-
-
-static
-NFCSTATUS
-phDnldNfc_Frame_Complete(phDnldNfc_sContext_t *psDnldContext)
-{
- NFCSTATUS status = NFCSTATUS_SUCCESS;
- phDnldNfc_sData_Hdr_t *p_dnld_raw = NULL;
- uint32_t dnld_index = psDnldContext->dnld_index;
- uint8_t *p_raw_sec_hdr = NULL;
- uint16_t tx_length = 0x00;
-
- dnld_index = dnld_index + psDnldContext->prev_dnld_size;
- p_raw_sec_hdr = psDnldContext->p_fw_raw + dnld_index;
- dnld_index = dnld_index + *p_raw_sec_hdr;
-
- p_dnld_raw = (phDnldNfc_sData_Hdr_t *) (psDnldContext->p_fw_raw +
- psDnldContext->dnld_index);
-
- tx_length = ((p_dnld_raw->frame_length[0] << BYTE_SIZE) |
- p_dnld_raw->frame_length[1]);
-
- tx_length = tx_length + PHDNLD_MIN_PACKET;
-
- return status;
-}
-
-
-static
-NFCSTATUS
-phDnldNfc_Raw_Write(
- phDnldNfc_sContext_t *psDnldContext,
- void *pHwRef
- )
-{
- NFCSTATUS status = NFCSTATUS_SUCCESS;
- uint32_t dnld_index = psDnldContext->dnld_index;
- uint32_t tx_length = 0;
- uint8_t *p_raw_sec_hdr = NULL;
- uint8_t dnld_flag = FALSE;
- uint8_t skip_frame = FALSE;
-
- if(NULL != psDnldContext->p_fw_raw)
- {
-
- if( (TRUE != psDnldContext->tx_info.tx_chain)
- && (0x00 == psDnldContext->dnld_retry)
- )
- {
- dnld_index = dnld_index + psDnldContext->prev_dnld_size;
- p_raw_sec_hdr = psDnldContext->p_fw_raw + dnld_index;
- dnld_index = dnld_index + *p_raw_sec_hdr;
- }
- else
- {
-
- phDnldNfc_sData_Hdr_t *p_dnld_raw = (phDnldNfc_sData_Hdr_t *)
- (psDnldContext->p_fw_raw +
- psDnldContext->dnld_index);
-
- tx_length = ((p_dnld_raw->frame_length[0] << BYTE_SIZE) |
- p_dnld_raw->frame_length[1]);
-
- tx_length = tx_length + PHDNLD_MIN_PACKET;
-
- status = phDnldNfc_Send_Raw( psDnldContext, pHwRef,
- (uint8_t *)(p_dnld_raw),
- psDnldContext->tx_info.tx_offset,
- (uint16_t)tx_length);
- }
-
-
-#define PHDNLD_MAJOR_OFFSET 0x04U
-#define PHDNLD_MINOR_OFFSET 0x05U
-#define PHDNLD_PHASE_OFFSET 0x06U
-#define PHDNLD_FRAMETYPE_OFFSET 0x07U
-
-#define PHDNLD_NO_OPERATION 0x00U
-#define PHDNLD_NORMAL_OPERATION 0x10U
-#define PHDNLD_ADVANCED_OPERATION 0x20U
-#define PHDNLD_SETUP_OPERATION 0x40U
-#define PHDNLD_RECOVER_OPERATION 0x80U
-#define PHDNLD_COMPLETE_OPERATION 0xF0U
-
-#define PHDNLD_TERMINATE_TYPE 0x0EU
-
-#define PHDNLD_MARKER_MASK 0x0FU
-
- while((NFCSTATUS_SUCCESS == status )
- && (FALSE == dnld_flag)
- )
- {
- phDnldNfc_sData_Hdr_t *p_dnld_raw = (phDnldNfc_sData_Hdr_t *)
- (psDnldContext->p_fw_raw + dnld_index);
- uint8_t frame_type = *(p_raw_sec_hdr + PHDNLD_FRAMETYPE_OFFSET);
-
- tx_length = ((p_dnld_raw->frame_length[0] << BYTE_SIZE) |
- p_dnld_raw->frame_length[1]);
-
- tx_length = tx_length + PHDNLD_MIN_PACKET;
-
- skip_frame = FALSE;
-
- if( (0x00 == *(p_raw_sec_hdr + PHDNLD_PHASE_OFFSET))
- || (0xFF == *(p_raw_sec_hdr + PHDNLD_PHASE_OFFSET))
- || !( psDnldContext->raw_mode_upgrade
- & (frame_type & (~PHDNLD_MARKER_MASK)) )
- )
- {
- dnld_index = dnld_index + tx_length;
- p_raw_sec_hdr = psDnldContext->p_fw_raw + dnld_index;
- dnld_index = dnld_index + *p_raw_sec_hdr;
- skip_frame = TRUE;
- }
- if (PHDNLD_TERMINATE_TYPE ==
- (frame_type & PHDNLD_MARKER_MASK))
- {
- if(TRUE != skip_frame)
- {
- psDnldContext->raw_mode_upgrade =
- (psDnldContext->raw_mode_upgrade &
- ~(frame_type & ~PHDNLD_MARKER_MASK)) ;
- }
-
- if(PHDNLD_NO_OPERATION ==
- psDnldContext->raw_mode_upgrade)
- {
- dnld_flag = TRUE;
- }
- }
- else
- {
-
- }
-
- if((FALSE == skip_frame)
- && (FALSE == dnld_flag)
- )
- {
- status = phDnldNfc_Send_Raw( psDnldContext, pHwRef,
- (uint8_t *)(p_dnld_raw),
- psDnldContext->tx_info.tx_offset,
- (uint16_t)tx_length);
- }
-
- if( NFCSTATUS_PENDING == status )
- {
- psDnldContext->dnld_index = dnld_index;
- psDnldContext->cur_frame_info= frame_type;
- }
- }
- }
-
- return status;
-}
static
NFCSTATUS
@@ -2347,18 +1665,13 @@ phDnldNfc_Upgrade_Sequence(
)
{
NFCSTATUS status = NFCSTATUS_SUCCESS;
+ /* section_info_t *p_cur_sec = psDnldContext->p_fw_sec +
+ psDnldContext->section_index; */
PHNFC_UNUSED_VARIABLE(pdata);
PHNFC_UNUSED_VARIABLE(length);
- if(phDnld_Raw_Upgrade == psDnldContext->cur_dnld_seq)
- {
- status = phDnldNfc_Raw_Write( psDnldContext, pHwRef );
- }
- else
- {
status = phDnldNfc_Resume_Write( psDnldContext, pHwRef );
- }
return status;
}
@@ -2395,34 +1708,27 @@ phDnldNfc_Resume(
(uint8_t)phDnld_Unlock_System;
break;
}
-#ifdef NXP_FW_PATCH_DISABLE
- case phDnld_Deactivate_Patch:
-#else
case phDnld_Unlock_System:
-#endif
{
psDnldContext->next_dnld_state =
(uint8_t)phDnld_Upgrade_State;
psDnldContext->next_dnld_seq =
(uint8_t)phDnld_Upgrade_Section;
-#ifdef NXP_FW_DNLD_CHECK_PHASE
- gphDnldPhase = NXP_FW_DNLD_CFG_PHASE;
-#endif /* NXP_FW_DNLD_CHECK_PHASE */
break;
}
case phDnld_Lock_System:
{
-#if (NXP_FW_INTEGRITY_CHK >= 0x01)
- psDnldContext->next_dnld_state =
- (uint8_t)phDnld_Verify_State;
- psDnldContext->next_dnld_seq =
- (uint8_t)phDnld_Verify_Integrity;
-#else
+//#if(NXP_FW_INTEGRITY_CHK >= 0x01)
+// psDnldContext->next_dnld_state =
+// (uint8_t)phDnld_Verify_State;
+// psDnldContext->next_dnld_seq =
+// (uint8_t)phDnld_Verify_Integrity;
+//#else
/* (void ) memset( (void *) &psDnldContext->chk_integrity_crc,
0, sizeof(psDnldContext->chk_integrity_crc)); */
psDnldContext->next_dnld_state =
(uint8_t) phDnld_Complete_State;
-#endif /* #if (NXP_FW_INTEGRITY_CHK >= 0x01) */
+//#endif /* #if (NXP_FW_INTEGRITY_CHK >= 0x01) */
break;
}
case phDnld_Verify_Integrity:
@@ -2460,21 +1766,21 @@ phDnldNfc_Resume(
psDnldContext->next_dnld_seq =
psDnldContext->cur_dnld_seq;
#endif
-#if (NXP_FW_INTEGRITY_CHK >= 0x01)
- psDnldContext->next_dnld_state =
- (uint8_t)phDnld_Verify_State;
- psDnldContext->next_dnld_seq =
- (uint8_t)phDnld_Verify_Integrity;
- psDnldContext->cur_dnld_seq =
- psDnldContext->next_dnld_seq;
- status = phDnldNfc_Sequence( psDnldContext,
- pHwRef, pdata, length);
-#else
+//#if (NXP_FW_INTEGRITY_CHK >= 0x01)
+// psDnldContext->next_dnld_state =
+// (uint8_t)phDnld_Verify_State;
+// psDnldContext->next_dnld_seq =
+// (uint8_t)phDnld_Verify_Integrity;
+// psDnldContext->cur_dnld_seq =
+// psDnldContext->next_dnld_seq;
+// status = phDnldNfc_Sequence( psDnldContext,
+// pHwRef, pdata, length);
+//#else
/* (void ) memset( (void *) &psDnldContext->chk_integrity_crc,
0, sizeof(psDnldContext->chk_integrity_crc)); */
psDnldContext->next_dnld_state =
(uint8_t) phDnld_Complete_State;
-#endif /* #if (NXP_FW_INTEGRITY_CHK >= 0x01) */
+//#endif /* #if (NXP_FW_INTEGRITY_CHK >= 0x01) */
}
break;
}
@@ -2572,14 +1878,12 @@ phDnldNfc_Resume(
psDnldContext->lower_interface.pcontext, pHwRef);
phDnldNfc_Release_Lower(psDnldContext, pHwRef);
phDnldNfc_Release_Resources(&psDnldContext);
-#ifndef NFC_TIMER_CONTEXT
- gpphDnldContext = psDnldContext;
-#endif
/* Notify the Error/Success Scenario to the upper layer */
phDnldNfc_Notify( p_upper_notify, p_upper_context, pHwRef, (uint8_t)
((NFCSTATUS_SUCCESS == comp_info.status )? NFC_IO_SUCCESS: NFC_IO_ERROR),
&comp_info );
}
+
return status;
}
@@ -2597,19 +1901,20 @@ phDnldNfc_Process_Response(
(phDnldNfc_sData_Hdr_t *) pdata;
PHNFC_UNUSED_VARIABLE(pHwRef);
- DNLD_DEBUG(" FW_DNLD: Receive Length = %X \n", length );
- if(( psDnldContext->rx_info.rx_total == 0 )
+ /* DNLD_DEBUG(" FW_DNLD: Receive Length = %X \n", length ); */
+ if(( psDnldContext->rx_total == 0 )
&& (PHDNLD_MIN_PACKET <= length)
+ /* && (FALSE == psDnldContext->recv_pending) */
)
{
- psDnldContext->rx_info.rx_total =
+ psDnldContext->rx_total =
((uint16_t)resp_data->frame_length[0] << BYTE_SIZE)|
resp_data->frame_length[1];
- if( psDnldContext->rx_info.rx_total + PHDNLD_MIN_PACKET == length )
+ if( psDnldContext->rx_total + PHDNLD_MIN_PACKET == length )
{
DNLD_DEBUG(" FW_DNLD: Success Memory Read = %X \n",
- psDnldContext->rx_info.rx_total);
+ psDnldContext->rx_total);
#ifndef DNLD_SUMMARY
/* DNLD_PRINT_BUFFER("Receive Buffer",pdata,length); */
#endif
@@ -2619,11 +1924,13 @@ phDnldNfc_Process_Response(
{
/* status = phDnldNfc_Receive( psDnldContext, pHwRef,
psDnldContext->p_resp_buffer,
- (uint8_t)((psDnldContext->rx_info.rx_total <= PHDNLD_MAX_PACKET)?
- psDnldContext->rx_info.rx_total: PHDNLD_MAX_PACKET) ); */
+ (uint8_t)((psDnldContext->rx_total <= PHDNLD_MAX_PACKET)?
+ psDnldContext->rx_total: PHDNLD_MAX_PACKET) );
+ psDnldContext->recv_pending =
+ (uint8_t)( NFCSTATUS_PENDING == status); */
DNLD_PRINT(" FW_DNLD: Invalid Receive length ");
DNLD_DEBUG(": Length Expected = %X \n",
- (psDnldContext->rx_info.rx_total + PHDNLD_MIN_PACKET));
+ (psDnldContext->rx_total + PHDNLD_MIN_PACKET));
status = PHNFCSTVAL( CID_NFC_DNLD,
NFCSTATUS_INVALID_RECEIVE_LENGTH );
}
@@ -2631,7 +1938,7 @@ phDnldNfc_Process_Response(
else
{
/*TODO:*/
- psDnldContext->rx_info.rx_total = 0 ;
+ psDnldContext->rx_total = 0 ;
status = PHNFCSTVAL( CID_NFC_DNLD,
NFCSTATUS_INVALID_RECEIVE_LENGTH );
}
@@ -2666,7 +1973,6 @@ phDnldNfc_Receive_Complete (
status = pInfo->status ;
length = pInfo->length ;
pdata = pInfo->buffer;
-
if(status != NFCSTATUS_SUCCESS)
{
DNLD_DEBUG(" Failed. Status = %02X\n",status);
@@ -2678,10 +1984,9 @@ phDnldNfc_Receive_Complete (
/* Handle the Error Scenario */
status = PHNFCSTVAL( CID_NFC_DNLD, NFCSTATUS_FAILED );
}
- else if ((0 == length)
- || (PHDNLD_MIN_PACKET > length ))
+ else if (0 == length)
{
- DNLD_DEBUG(" Receive Response Length = %u .... \n",length);
+ DNLD_PRINT(" Receive Response Length = 0 .... \n");
/* Handle the Error Scenario */
#ifndef HAL_SW_DNLD_RLEN
status = PHNFCSTVAL( CID_NFC_DNLD,
@@ -2691,15 +1996,6 @@ phDnldNfc_Receive_Complete (
else
{
-#if defined(FW_DOWNLOAD_TIMER) && \
- (FW_DOWNLOAD_TIMER == 2)
- if ( NXP_INVALID_TIMER_ID != psDnldContext->timer_id )
- {
- phOsalNfc_Timer_Stop( psDnldContext->timer_id );
- }
-
-#endif
-
#ifndef DNLD_SUMMARY
DNLD_PRINT_BUFFER("Receive Buffer",pdata,length);
#endif
@@ -2718,9 +2014,6 @@ phDnldNfc_Receive_Complete (
{
case PHDNLD_CMD_READ :
{
- if( PHDNLD_NO_OPERATION
- == psDnldContext->raw_mode_upgrade)
- {
status = phDnldNfc_Process_Response(
psDnldContext, pHwRef, pdata , length);
@@ -2730,18 +2023,10 @@ phDnldNfc_Receive_Complete (
psDnldContext->dnld_retry = NXP_MAX_DNLD_RETRY;
/* psDnldContext->dnld_retry < NXP_MAX_DNLD_RETRY */
}
- }
- else
- {
-
- }
break;
}
case PHDNLD_CMD_CHECK_INTEGRITY :
{
- if( PHDNLD_NO_OPERATION
- == psDnldContext->raw_mode_upgrade)
- {
#if (NXP_FW_INTEGRITY_CHK >= 0x01)
phDnldNfc_sChkCrcComplete_t *p_dnld_crc_all =
&psDnldContext->chk_integrity_crc;
@@ -2786,16 +2071,8 @@ phDnldNfc_Receive_Complete (
break;
}
}
+
#endif /* #if (NXP_FW_INTEGRITY_CHK >= 0x01) */
- }
- else
- {
- psDnldContext->raw_mode_upgrade =
- (PHDNLD_SETUP_OPERATION | PHDNLD_ADVANCED_OPERATION);
- /* psDnldContext->raw_mode_upgrade =
- (psDnldContext->raw_mode_upgrade &
- ( psDnldContext->cur_frame_info & ~PHDNLD_MARKER_MASK )); */
- }
break;
}
case PHDNLD_CMD_WRITE:
@@ -2803,18 +2080,10 @@ phDnldNfc_Receive_Complete (
psDnldContext->dnld_retry = 0;
break;
}
- case PHDNLD_CMD_SEC_WRITE:
- {
- psDnldContext->dnld_retry = 0;
- break;
- }
case PHDNLD_CMD_ACTIVATE_PATCH:
case PHDNLD_CMD_CHECK:
default:
{
- if( PHDNLD_NO_OPERATION
- == psDnldContext->raw_mode_upgrade)
- {
if( ( (PHDNLD_MIN_PACKET > length)
|| ( 0 != resp_length) )
)
@@ -2827,20 +2096,14 @@ phDnldNfc_Receive_Complete (
{
psDnldContext->dnld_retry = 0;
}
- }
- else
- {
- psDnldContext->raw_mode_upgrade =
- (psDnldContext->raw_mode_upgrade & ~PHDNLD_RECOVER_OPERATION);
- }
break;
}
} /* End of the Previous Command Switch Case */
break;
}/* Case PHDNLD_RESP_SUCCESS*/
case PHDNLD_RESP_TIMEOUT:
- case PHDNLD_RESP_CRC_ERROR:
case PHDNLD_RESP_WRITE_ERROR:
+ case PHDNLD_RESP_CRC_ERROR:
{
if(psDnldContext->dnld_retry < NXP_MAX_DNLD_RETRY )
{
@@ -2852,139 +2115,22 @@ phDnldNfc_Receive_Complete (
}
/* fall through */
case PHDNLD_RESP_ACCESS_DENIED:
+ case PHDNLD_RESP_PROTOCOL_ERROR:
case PHDNLD_RESP_INVALID_PARAMETER:
case PHDNLD_RESP_INVALID_LENGTH:
- /* Initial Frame Checksum */
- case PHDNLD_RESP_CHKSUM_ERROR:
- case PHDNLD_RESP_MEMORY_UPDATE_ERROR:
{
psDnldContext->dnld_retry = NXP_MAX_DNLD_RETRY;
status = PHNFCSTVAL(CID_NFC_DNLD,
resp_data->frame_type);
break;
}
- case PHDNLD_RESP_PROTOCOL_ERROR:
- {
- if(( PHDNLD_NO_OPERATION
- == psDnldContext->raw_mode_upgrade)
- || ( PHDNLD_ADVANCED_OPERATION
- == psDnldContext->raw_mode_upgrade)
- )
- {
- psDnldContext->dnld_retry = NXP_MAX_DNLD_RETRY;
- status = PHNFCSTVAL(CID_NFC_DNLD,
- NFCSTATUS_INVALID_FORMAT);
- }
- else if( (PHDNLD_NORMAL_OPERATION
- & psDnldContext->raw_mode_upgrade)
- )
- {
- psDnldContext->raw_mode_upgrade =
- (psDnldContext->raw_mode_upgrade & ~PHDNLD_NORMAL_OPERATION);
- }
- else if ( PHDNLD_RECOVER_OPERATION
- & psDnldContext->raw_mode_upgrade )
- {
- psDnldContext->dnld_retry = NXP_MAX_DNLD_RETRY;
- status = PHNFCSTVAL(CID_NFC_DNLD,
- NFCSTATUS_INVALID_FORMAT);
- }
- else
- {
- psDnldContext->raw_mode_upgrade =
- (psDnldContext->raw_mode_upgrade &
- ~( psDnldContext->cur_frame_info & ~PHDNLD_MARKER_MASK ));
- }
- break;
- }
- case PHDNLD_RESP_VERSION_UPTODATE:
- {
- /* TODO: to make sure that the Advance Frames are sent to get
- * the updated status */
- if ( PHDNLD_ADVANCED_OPERATION
- == psDnldContext->raw_mode_upgrade)
- {
- status = ( CID_NFC_DNLD << BYTE_SIZE ) ;
- }
- else if ( PHDNLD_NO_OPERATION
- != psDnldContext->raw_mode_upgrade)
- {
-
- psDnldContext->raw_mode_upgrade =
- (psDnldContext->raw_mode_upgrade &
- ~( psDnldContext->cur_frame_info & ~PHDNLD_MARKER_MASK ));
- }
- else
- {
- }
- break;
- }
- case PHDNLD_RESP_CMD_NOT_SUPPORTED:
- {
-
- if ( PHDNLD_NO_OPERATION
- == psDnldContext->raw_mode_upgrade)
- {
- status = PHNFCSTVAL(CID_NFC_DNLD,
- NFCSTATUS_FEATURE_NOT_SUPPORTED);
- }
- else if ( PHDNLD_ADVANCED_OPERATION
- == psDnldContext->raw_mode_upgrade)
- {
- status = PHNFCSTVAL(CID_NFC_DNLD,
- NFCSTATUS_FEATURE_NOT_SUPPORTED);
- }
-#if 0
- else if( (PHDNLD_NORMAL_OPERATION
- & psDnldContext->raw_mode_upgrade)
- )
- {
- psDnldContext->raw_mode_upgrade =
- (psDnldContext->raw_mode_upgrade & ~PHDNLD_NORMAL_OPERATION);
- }
- else if ( PHDNLD_SETUP_OPERATION
- & psDnldContext->raw_mode_upgrade )
- {
- psDnldContext->raw_mode_upgrade =
- (psDnldContext->raw_mode_upgrade & ~PHDNLD_SETUP_OPERATION);
- }
-#endif
- else
- {
- psDnldContext->raw_mode_upgrade =
- (psDnldContext->raw_mode_upgrade &
- ~( psDnldContext->cur_frame_info & ~PHDNLD_MARKER_MASK ));
- }
- break;
- }
- /* The Chaining of the Command Frame
- was Successful in the Download Mode */
- case PHDNLD_RESP_CHAINING_SUCCESS:
- {
- /* TODO: Handle the Corner Case Scenarios
- * the updated status */
- psDnldContext->dnld_retry = 0x00;
- break;
- }
-/* The Error during the Chaining the Command Frame in the Download Mode */
- case PHDNLD_RESP_CHAINING_ERROR:
- {
- /* TODO: Restart the Chunk in Corner Case
- * the updated status */
- psDnldContext->dnld_retry++;
- phDnldNfc_Tx_Reset(psDnldContext);
- break;
- }
-/* The Command is not allowed anymore in the Download Mode */
- case PHDNLD_RESP_CMD_NOT_ALLOWED:
default:
{
psDnldContext->dnld_retry = NXP_MAX_DNLD_RETRY;
status = PHNFCSTVAL(CID_NFC_DNLD,
- NFCSTATUS_NOT_ALLOWED);
+ NFCSTATUS_FEATURE_NOT_SUPPORTED);
break;
}
-
} /* End of the Response Frame Type Switch */
if (NFCSTATUS_PENDING != status)
@@ -3003,57 +2149,10 @@ phDnldNfc_Receive_Complete (
psDnldContext->lower_interface.pcontext, pHwRef);
phDnldNfc_Release_Lower(psDnldContext, pHwRef);
phDnldNfc_Release_Resources(&psDnldContext);
-#ifndef NFC_TIMER_CONTEXT
- gpphDnldContext = psDnldContext;
-#endif
/* Notify the Error/Success Scenario to the upper layer */
phDnldNfc_Notify( p_upper_notify, p_upper_context, pHwRef,
(uint8_t) NFC_IO_ERROR, &comp_info );
}
- else if ( (NFCSTATUS_SUCCESS != status) &&
- (NFCSTATUS_SUCCESS == PHNFCSTATUS(status))
- )
- {
- pphNfcIF_Notification_CB_t p_upper_notify =
- psDnldContext->p_upper_notify;
- void *p_upper_context =
- psDnldContext->p_upper_context;
-
- comp_info.status = NFCSTATUS_SUCCESS;
- DNLD_DEBUG(" FW_DNLD: Termination in Receive, Status = %X \n", status);
- status = phDal4Nfc_Unregister(
- psDnldContext->lower_interface.pcontext, pHwRef);
- phDnldNfc_Release_Lower(psDnldContext, pHwRef);
- phDnldNfc_Release_Resources(&psDnldContext);
-#ifndef NFC_TIMER_CONTEXT
- gpphDnldContext = psDnldContext;
-#endif
- /* Notify the Error/Success Scenario to the upper layer */
- phDnldNfc_Notify( p_upper_notify, p_upper_context, pHwRef,
- (uint8_t) NFC_IO_SUCCESS, &comp_info );
-
- }
- else if (NFCSTATUS_FEATURE_NOT_SUPPORTED == PHNFCSTATUS(status))
- {
- pphNfcIF_Notification_CB_t p_upper_notify =
- psDnldContext->p_upper_notify;
- void *p_upper_context =
- psDnldContext->p_upper_context;
-
- comp_info.status = status;
- DNLD_DEBUG(" FW_DNLD: Termination in Receive, Status = %X \n", status);
- status = phDal4Nfc_Unregister(
- psDnldContext->lower_interface.pcontext, pHwRef);
- phDnldNfc_Release_Lower(psDnldContext, pHwRef);
- phDnldNfc_Release_Resources(&psDnldContext);
-#ifndef NFC_TIMER_CONTEXT
- gpphDnldContext = psDnldContext;
-#endif
- /* Notify the Error/Success Scenario to the upper layer */
- phDnldNfc_Notify( p_upper_notify, p_upper_context, pHwRef,
- (uint8_t) NFC_IO_SUCCESS, &comp_info );
-
- }
else
{
/* DNLD_PRINT(" FW_DNLD: Successful.\n"); */
@@ -3103,28 +2202,17 @@ phDnldNfc_Send_Complete (
if ((PHDNLD_CMD_SET_HIF != psDnldContext->prev_cmd)
&& (PHDNLD_CMD_RESET != psDnldContext->prev_cmd))
{
- psDnldContext->rx_info.rx_total = 0;
+ psDnldContext->rx_total = 0;
status = phDnldNfc_Receive( psDnldContext, pHwRef,
(uint8_t *)(&psDnldContext->dnld_resp),
psDnldContext->resp_length);
+ /* psDnldContext->recv_pending =
+ (uint8_t)( NFCSTATUS_PENDING == status); */
}
else
{
psDnldContext->resp_length = 0;
psDnldContext->dnld_retry = 0;
- if( PHDNLD_CMD_RESET == psDnldContext->prev_cmd )
- {
- DO_DELAY(PHDNLD_DNLD_DELAY);
- }
-#if defined(FW_DOWNLOAD_TIMER) && \
- (FW_DOWNLOAD_TIMER == 2)
-
- if ( NXP_INVALID_TIMER_ID != psDnldContext->timer_id )
- {
- phOsalNfc_Timer_Stop( psDnldContext->timer_id );
- }
-#endif
-
status = phDnldNfc_Set_Seq(psDnldContext,
DNLD_SEQ_UPDATE);
}
@@ -3140,7 +2228,6 @@ phDnldNfc_Send_Complete (
}
-
STATIC
NFCSTATUS
phDnldNfc_Send_Command(
@@ -3155,8 +2242,6 @@ phDnldNfc_Send_Command(
uint16_t tx_length = 0;
uint16_t rx_length = 0;
uint8_t **pp_resp_data = &psDnldContext->p_resp_buffer;
- phDnldNfc_sData_t *p_dnld_data =
- (phDnldNfc_sData_t *)psDnldContext->dnld_data;
switch(cmd)
{
@@ -3168,10 +2253,8 @@ phDnldNfc_Send_Command(
}
case PHDNLD_CMD_READ:
{
- phDnldNfc_sData_t *p_dnld_data =
- (phDnldNfc_sData_t *)psDnldContext->dnld_data;
phDnldNfc_sParam_t *param_info = /* (phDnldNfc_sParam_t *)params */
- &p_dnld_data->param_info.data_param;
+ &psDnldContext->dnld_data.param_info.data_param;
tx_length = PHDNLD_CMD_READ_LEN;
if (NULL != *pp_resp_data)
{
@@ -3182,18 +2265,21 @@ phDnldNfc_Send_Command(
<< BYTE_SIZE) + param_info->data_len[1]);
psDnldContext->resp_length =
- (( rx_length + PHDNLD_MIN_PACKET ));
+#if 0
+ (((rx_length > PHDNLD_DATA_SIZE)?
+ PHDNLD_DATA_SIZE + PHDNLD_MIN_PACKET:
+#else
+ ((
+#endif
+ rx_length + PHDNLD_MIN_PACKET ));
(void)phDnldNfc_Allocate_Resource( (void **) pp_resp_data,
rx_length);
break;
}
case PHDNLD_CMD_WRITE:
- case PHDNLD_CMD_SEC_WRITE:
{
- phDnldNfc_sData_t *p_dnld_data =
- (phDnldNfc_sData_t *)psDnldContext->dnld_data;
phDnldNfc_sParam_t *param_info = /* (phDnldNfc_sParam_t *)params */
- &p_dnld_data->param_info.data_param;
+ &psDnldContext->dnld_data.param_info.data_param;
tx_length = (uint16_t) (((uint16_t)param_info->data_len[0]
<< BYTE_SIZE) + param_info->data_len[1]
+ PHDNLD_CMD_WRITE_MIN_LEN );
@@ -3211,36 +2297,6 @@ phDnldNfc_Send_Command(
psDnldContext->resp_length = PHDNLD_MIN_PACKET;
break;
}
- case PHDNLD_CMD_ENCAPSULATE:
- {
- uint8_t i = 0x00;
- if ((0 != param_length) && (NULL != params))
- {
- p_dnld_data->frame_type =
- PHDNLD_CMD_ENCAPSULATE;
- (void)memcpy((void *)( ((uint8_t *)p_dnld_data)
- + PHDNLD_FRAME_DATA_OFFSET)
- , params, param_length);
- tx_length = param_length;
-
- p_dnld_data->frame_length[i++] =
- (uint8_t)(tx_length >> BYTE_SIZE);
- p_dnld_data->frame_length[i] =
- (uint8_t)( tx_length & BYTE_MASK );
- tx_length += PHDNLD_FRAME_DATA_OFFSET;
-
- psDnldContext->resp_length = PHDNLD_MIN_PACKET;
-
- status = phDnldNfc_Send( psDnldContext, pHwRef ,
- (uint8_t *)p_dnld_data, tx_length);
- }
- else
- {
- status = PHNFCSTVAL(CID_NFC_DNLD,
- NFCSTATUS_NOT_ALLOWED);
- }
- break;
- }
case PHDNLD_CMD_SET_HIF:
{
tx_length++;
@@ -3249,18 +2305,8 @@ phDnldNfc_Send_Command(
}
case PHDNLD_CMD_ACTIVATE_PATCH:
{
- psDnldContext->resp_length = PHDNLD_MIN_PACKET;
- if ((NULL != params) && ( param_length > 0 ))
- {
- p_dnld_data->param_info.cmd_param =
- (*(uint8_t *)params);
- tx_length = param_length;
- }
- else
- {
- p_dnld_data->param_info.cmd_param = FALSE;
tx_length++;
- }
+ psDnldContext->resp_length = PHDNLD_MIN_PACKET;
break;
}
case PHDNLD_CMD_CHECK_INTEGRITY:
@@ -3268,7 +2314,7 @@ phDnldNfc_Send_Command(
#if (NXP_FW_INTEGRITY_CHK >= 0x01)
if ((NULL != params) && ( param_length > 0 ))
{
- psDnldContext->chk_integrity_param =
+ psDnldContext->chk_integrity_param =
(phDnldNfc_eChkCrc_t)(*(uint8_t *)params);
tx_length = param_length ;
}
@@ -3277,7 +2323,7 @@ phDnldNfc_Send_Command(
psDnldContext->chk_integrity_param = CHK_INTEGRITY_COMPLETE_CRC;
tx_length++;
}
- p_dnld_data->param_info.cmd_param =
+ psDnldContext->dnld_data.param_info.config_verify_param =
(uint8_t) psDnldContext->chk_integrity_param;
switch(psDnldContext->chk_integrity_param)
{
@@ -3305,7 +2351,7 @@ phDnldNfc_Send_Command(
}
#else
tx_length++;
- p_dnld_data->param_info.cmd_param =
+ psDnldContext->dnld_data.param_info.config_verify_param =
(uint8_t) CHK_INTEGRITY_COMPLETE_CRC;
#endif /* #if (NXP_FW_INTEGRITY_CHK >= 0x01) */
@@ -3321,19 +2367,19 @@ phDnldNfc_Send_Command(
{
uint8_t i = 0;
- p_dnld_data->frame_type = cmd;
- p_dnld_data->frame_length[i++] =
+ psDnldContext->dnld_data.frame_type = cmd;
+ psDnldContext->dnld_data.frame_length[i++] =
(uint8_t)(tx_length >> BYTE_SIZE);
- p_dnld_data->frame_length[i] =
+ psDnldContext->dnld_data.frame_length[i] =
(uint8_t)( tx_length & BYTE_MASK );
tx_length = tx_length + PHDNLD_MIN_PACKET;
status = phDnldNfc_Send( psDnldContext, pHwRef ,
- (uint8_t *)p_dnld_data, tx_length);
+ (uint8_t *)(&psDnldContext->dnld_data), tx_length);
if(NFCSTATUS_PENDING == status)
{
psDnldContext->prev_cmd = cmd;
-
}
+
}
return status;
@@ -3341,12 +2387,34 @@ phDnldNfc_Send_Command(
static
NFCSTATUS
-phDnldNfc_Check_FW(
- phHal_sHwReference_t *pHwRef,
- fw_data_hdr_t *cur_fw_hdr
+phDnldNfc_Process_FW(
+ phDnldNfc_sContext_t *psDnldContext,
+ phHal_sHwReference_t *pHwRef
+#ifdef NXP_FW_PARAM
+ ,uint8_t *nxp_nfc_fw
+#endif
)
{
NFCSTATUS status = NFCSTATUS_FAILED;
+ section_info_t *p_cur_sec = NULL;
+ static unsigned sec_type;
+ uint32_t fw_index = 0;
+ fw_data_hdr_t *cur_fw_hdr = NULL;
+ uint8_t sec_index = 0;
+ uint8_t i = 0;
+
+ psDnldContext->p_img_hdr = (img_data_hdr_t *) nxp_nfc_fw;
+
+ fw_index = sizeof (img_data_hdr_t);
+
+ for ( i=0; i < psDnldContext->p_img_hdr->no_of_fw_img; i++ )
+ {
+
+ psDnldContext->p_fw_hdr = (fw_data_hdr_t *) ( nxp_nfc_fw + fw_index );
+ /* TODO: Create a memory of pointers to store all the Firmwares */
+ cur_fw_hdr = psDnldContext->p_fw_hdr;
+
+ fw_index = fw_index + (cur_fw_hdr->fw_hdr_len * PNDNLD_WORD_LEN);
if ( !pHwRef->device_info.fw_version )
{
@@ -3362,6 +2430,9 @@ phDnldNfc_Check_FW(
status = PHNFCSTVAL( CID_NFC_DNLD, NFCSTATUS_NOT_ALLOWED );
}
else if (( pHwRef->device_info.fw_version < cur_fw_hdr->fw_version )
+#ifdef NXP_FW_PATCH_VERIFY
+ && (pHwRef->device_info.full_version[NXP_PATCH_VER_INDEX] < cur_fw_hdr->fw_patch )
+#endif
)
{
/* TODO: Firmware Version Check and upgrade*/
@@ -3381,87 +2452,22 @@ phDnldNfc_Check_FW(
DNLD_PRINT(" FW_DNLD: Already Updated .... \n");
status = ( CID_NFC_DNLD << BYTE_SIZE ) ;
}
-
- return status;
-}
-
-
-static
-NFCSTATUS
-phDnldNfc_Process_FW(
- phDnldNfc_sContext_t *psDnldContext,
- phHal_sHwReference_t *pHwRef
-#ifdef NXP_FW_PARAM
- ,uint8_t *nxp_nfc_fw
- ,uint32_t nxp_fw_len
-#endif
- )
-{
- NFCSTATUS status = NFCSTATUS_FAILED;
- section_info_t *p_cur_sec = NULL;
- static unsigned sec_type;
- uint32_t fw_index = 0;
-#ifdef NXP_NFC_MULTIPLE_FW
- phDnldNfc_sFwImageInfo_t *p_cur_fw = NULL;
-#endif /* #ifdef NXP_NFC_MULTIPLE_FW */
- fw_data_hdr_t *cur_fw_hdr = NULL;
- uint8_t sec_index = 0;
- uint8_t i = 0;
-
- psDnldContext->p_img_hdr = (img_data_hdr_t *) nxp_nfc_fw;
-
-#ifdef NXP_NFC_MULTIPLE_FW
-
- /* TODO: Create a memory of pointers to store all the Firmwares */
- if( (NXP_NFC_IMAG_FW_MAX > psDnldContext->p_img_hdr->no_of_fw_img)
- && (0 != psDnldContext->p_img_hdr->no_of_fw_img)
- )
- {
- ( void )phDnldNfc_Allocate_Resource((void **)&psDnldContext->p_img_info,
- (psDnldContext->p_img_hdr->no_of_fw_img * sizeof(phDnldNfc_sFwImageInfo_t)));
-
- if(NULL != psDnldContext->p_img_info)
- {
- p_cur_fw = psDnldContext->p_img_info;
- }
}
-#endif /* #ifdef NXP_NFC_MULTIPLE_FW */
-
- fw_index = sizeof (img_data_hdr_t);
-
- for ( i=0; i < psDnldContext->p_img_hdr->no_of_fw_img; i++ )
- {
-
- psDnldContext->p_fw_hdr = (fw_data_hdr_t *) ( nxp_nfc_fw + fw_index );
-
-#ifdef NXP_NFC_MULTIPLE_FW
- if(NULL != p_cur_fw)
- {
- ( p_cur_fw + i)->p_fw_hdr = psDnldContext->p_fw_hdr;
- }
-#endif /* #ifdef NXP_NFC_MULTIPLE_FW */
- cur_fw_hdr = psDnldContext->p_fw_hdr;
-
- fw_index = fw_index + (cur_fw_hdr->fw_hdr_len * PNDNLD_WORD_LEN);
-
- status = phDnldNfc_Check_FW( pHwRef, cur_fw_hdr);
-
- }
-
if ( ( NFCSTATUS_SUCCESS == status )
#if defined (NXP_FW_INTEGRITY_VERIFY)
|| (NFCSTATUS_SUCCESS == PHNFCSTATUS(status) )
#endif /* !defined (NXP_FW_INTEGRITY_VERIFY) */
)
{
- if( (BYTE_MASK > cur_fw_hdr->no_of_sections)
- && (0 != cur_fw_hdr->no_of_sections)
- )
- {
+
(void) phDnldNfc_Allocate_Resource((void **)&psDnldContext->p_fw_sec,
(cur_fw_hdr->no_of_sections * sizeof(section_info_t)));
-
- if(NULL != psDnldContext->p_fw_sec)
+ if(NULL == psDnldContext->p_fw_sec)
+ {
+ status = PHNFCSTVAL(CID_NFC_DNLD,
+ NFCSTATUS_INSUFFICIENT_RESOURCES);
+ }
+ else
{
DNLD_DEBUG(" FW_DNLD: FW Index : %x \n",
fw_index );
@@ -3490,7 +2496,7 @@ phDnldNfc_Process_FW(
sec_type = (unsigned int)p_cur_sec->p_sec_hdr->section_mem_type;
- if((sec_type & DNLD_TRIM_MASK))
+ if(TRUE == ((section_type_t *)(&sec_type))->trim_val )
{
p_cur_sec->p_trim_data = (uint8_t *)
(nxp_nfc_fw + fw_index + sizeof(section_hdr_t));
@@ -3500,42 +2506,25 @@ phDnldNfc_Process_FW(
p_cur_sec->p_trim_data = NULL;
}
- if (0 == sec_index)
- {
- if ((sec_type & DNLD_SM_UNLOCK_MASK))
- {
- (void)phDnldNfc_Set_Seq(psDnldContext,
- DNLD_SEQ_UNLOCK);
- }
- else
- {
- (void)phDnldNfc_Set_Seq(psDnldContext,
- DNLD_SEQ_INIT);
- }
- }
p_cur_sec->section_read = FALSE;
p_cur_sec->section_offset = 0;
p_cur_sec->p_sec_data = ((uint8_t *) nxp_nfc_fw) + fw_index +
+#ifdef SECTION_HDR
(p_cur_sec->p_sec_hdr->section_hdr_len * PNDNLD_WORD_LEN);
+#else
+ sizeof (section_hdr_t) ;
+#endif
fw_index = fw_index +
+#ifdef SECTION_HDR
(p_cur_sec->p_sec_hdr->section_hdr_len * PNDNLD_WORD_LEN)
+#else
+ sizeof (section_hdr_t)
+#endif
+ p_cur_sec->p_sec_hdr->section_length;
-
- if( 0 != p_cur_sec->p_sec_hdr->section_checksum )
- {
- DNLD_DEBUG(" FW_DNLD: Section checksum : %x \n",
- p_cur_sec->p_sec_hdr->section_checksum );
-
- p_cur_sec->p_sec_chksum = ( uint8_t *)(nxp_nfc_fw + fw_index);
-
- fw_index = fw_index +
- p_cur_sec->p_sec_hdr->section_checksum;
- }
-
DNLD_DEBUG(" FW_DNLD: FW Index : %x \n", fw_index );
#if (NXP_FW_INTEGRITY_CHK >= 0x01)
@@ -3569,37 +2558,13 @@ phDnldNfc_Process_FW(
{
break;
}
-
- } /* End of Address Switch */
-#endif /* #if (NXP_FW_INTEGRITY_CHK >= 0x01) */
- } /* End of For Loop */
- } /* End of the Null Check */
- else
- {
- status = PHNFCSTVAL(CID_NFC_DNLD,
- NFCSTATUS_INSUFFICIENT_RESOURCES);
}
+#endif /* #if (NXP_FW_INTEGRITY_CHK >= 0x01) */
}
- else if (
- (0 == cur_fw_hdr->no_of_sections)
- && (PHDNLD_FW_PATCH_SEC == cur_fw_hdr->fw_patch)
- )
- {
- psDnldContext->p_fw_raw = (uint8_t *)(nxp_nfc_fw + fw_index);
-
- psDnldContext->raw_mode_upgrade = PHDNLD_COMPLETE_OPERATION;
-
- (void)phDnldNfc_Set_Seq(psDnldContext,
- DNLD_SEQ_RAW);
- }
- else
- {
- DNLD_PRINT("********* Empty Section and Firmware ******************\n\n");
- }
DNLD_PRINT("*******************************************\n\n");
-
+ }
}
return status;
}
@@ -3634,7 +2599,45 @@ phDnldNfc_Run_Check(
fw_index = fw_index + (cur_fw_hdr->fw_hdr_len * PNDNLD_WORD_LEN);
- status = phDnldNfc_Check_FW( pHwRef, cur_fw_hdr);
+ if ( !pHwRef->device_info.fw_version )
+ {
+ /* Override the Firmware Version Check and upgrade*/;
+ DNLD_PRINT(" FW_DNLD_CHK: Forceful Upgrade of the Firmware .... Required \n");
+ status = NFCSTATUS_SUCCESS;
+ }
+ else if ( (pHwRef->device_info.fw_version >> (BYTE_SIZE * 2))
+ != ( cur_fw_hdr->fw_version >> (BYTE_SIZE * 2) ))
+ {
+ /* Check for the Compatible Romlib Version for the Hardware */
+ DNLD_PRINT(" FW_DNLD: IC Hardware Version Mismatch.. \n");
+ status = PHNFCSTVAL( CID_NFC_DNLD, NFCSTATUS_NOT_ALLOWED );
+ }
+ else if (( pHwRef->device_info.fw_version < cur_fw_hdr->fw_version )
+#ifdef NXP_FW_PATCH_VERIFY
+ && (pHwRef->device_info.full_version[NXP_PATCH_VER_INDEX] < cur_fw_hdr->fw_patch )
+#endif
+ )
+ {
+ /* TODO: Firmware Version Check and upgrade*/
+ DNLD_PRINT(" FW_DNLD_CHK: Older Firmware. Upgrading to newer one.... \n");
+ status = NFCSTATUS_SUCCESS;
+ }
+#ifdef NXP_FW_CHK_LATEST
+ else if (( pHwRef->device_info.fw_version > cur_fw_hdr->fw_version )
+ )
+ {
+ DNLD_PRINT(" FW_DNLD: Newer than the Stored One .... \n");
+ status = PHNFCSTVAL( CID_NFC_DNLD, NFCSTATUS_NOT_ALLOWED );
+ }
+#endif /* NXP_FW_CHK_LATEST */
+ else
+ {
+ DNLD_PRINT(" FW_DNLD_CHK: Already Updated .... \n");
+ status = ( CID_NFC_DNLD << BYTE_SIZE ) ;
+ }
+ }
+ if( NFCSTATUS_SUCCESS == status )
+ {
}
return status;
}
@@ -3645,39 +2648,26 @@ phDnldNfc_Run_Check(
STATIC
void
phDnldNfc_Abort (
- uint32_t abort_id
-#ifdef NFC_TIMER_CONTEXT
- , void *dnld_cntxt
-#endif
+ uint32_t abort_id ,
+ void * pContext
)
{
phNfc_sCompletionInfo_t comp_info = {0};
- phDnldNfc_sContext_t *p_dnld_context = NULL;
-
-#ifdef NFC_TIMER_CONTEXT
- p_dnld_context = (phDnldNfc_sContext_t *)dnld_cntxt;
-#else
- p_dnld_context = gpphDnldContext;
-#endif
-
- if ( ( NULL != p_dnld_context)
- && (abort_id == p_dnld_context->timer_id ))
+ if ( ( NULL != gpphDnldContext)
+ && (abort_id == gpphDnldContext->timer_id ))
{
pphNfcIF_Notification_CB_t p_upper_notify =
- p_dnld_context->p_upper_notify;
+ gpphDnldContext->p_upper_notify;
void *p_upper_context =
- p_dnld_context->p_upper_context;
- phHal_sHwReference_t *pHwRef = p_dnld_context->p_hw_ref;
+ gpphDnldContext->p_upper_context;
+ phHal_sHwReference_t *pHwRef = gpphDnldContext->p_hw_ref;
(void)phDal4Nfc_Unregister(
- p_dnld_context->lower_interface.pcontext, pHwRef );
- phDnldNfc_Release_Lower(p_dnld_context, pHwRef);
- phDnldNfc_Release_Resources(&p_dnld_context);
-#ifndef NFC_TIMER_CONTEXT
- gpphDnldContext = p_dnld_context;
-#endif
+ gpphDnldContext->lower_interface.pcontext, pHwRef );
+ phDnldNfc_Release_Lower(gpphDnldContext, pHwRef);
+ phDnldNfc_Release_Resources(&gpphDnldContext);
/* Notify the Error/Success Scenario to the upper layer */
DNLD_DEBUG(" FW_DNLD: FW_DNLD Aborted with %x Timer Timeout \n",
@@ -3696,7 +2686,6 @@ NFCSTATUS
phDnldNfc_Upgrade (
phHal_sHwReference_t *pHwRef,
#ifdef NXP_FW_PARAM
- uint8_t type,
uint8_t *nxp_nfc_fw,
uint32_t fw_length,
#endif
@@ -3720,15 +2709,16 @@ phDnldNfc_Upgrade (
else
{
DNLD_PRINT(" FW_DNLD: Starting the FW Upgrade Sequence .... \n");
+ /* Create the memory for Download Mgmt Context */
+ psDnldContext = (phDnldNfc_sContext_t *)
+ phOsalNfc_GetMemory(sizeof(phDnldNfc_sContext_t));
- (void)
- phDnldNfc_Allocate_Resource((void **)
- &psDnldContext,sizeof(phDnldNfc_sContext_t));
if(psDnldContext != NULL)
{
-#ifndef NFC_TIMER_CONTEXT
+ (void ) memset((void *)psDnldContext,0,
+ sizeof(phDnldNfc_sContext_t));
+
gpphDnldContext = psDnldContext;
-#endif
psDnldContext->p_hw_ref = pHwRef;
psDnldContext->timer_id = NXP_INVALID_TIMER_ID;
@@ -3762,7 +2752,7 @@ phDnldNfc_Upgrade (
status = phDnldNfc_Process_FW( psDnldContext, pHwRef
#ifdef NXP_FW_PARAM
- ,*nxp_nfc_fw , fw_length
+ ,*nxp_nfc_fw /*, fw_length */
#endif
);
@@ -3773,24 +2763,27 @@ phDnldNfc_Upgrade (
if (NFCSTATUS_PENDING == status)
{
DNLD_PRINT("\n FW_DNLD: Initial Reset .... \n");
+ p_cur_sec = ((section_info_t *)
+ (psDnldContext->p_fw_sec ));
+ sec_type = (unsigned )
+ (p_cur_sec->p_sec_hdr->section_mem_type);
-#if defined(FW_DOWNLOAD_TIMER)
-
+ if(TRUE == ((section_type_t *)
+ (&sec_type))->system_mem_unlock )
+ {
+ (void)phDnldNfc_Set_Seq(psDnldContext,
+ DNLD_SEQ_UNLOCK);
+ }
+ else
+ {
+ (void)phDnldNfc_Set_Seq(psDnldContext,
+ DNLD_SEQ_INIT);
+ }
+#ifdef FW_DOWNLOAD_TIMER
psDnldContext->timer_id = phOsalNfc_Timer_Create( );
-
-#if (FW_DOWNLOAD_TIMER < 2)
phOsalNfc_Timer_Start( psDnldContext->timer_id,
- NXP_DNLD_COMPLETE_TIMEOUT,
- (ppCallBck_t) phDnldNfc_Abort
-#ifdef NFC_TIMER_CONTEXT
- , (void *) psDnldContext
+ NXP_DNLD_COMPLETE_TIMEOUT, phDnldNfc_Abort, NULL );
#endif
- );
-
-#endif /* #if (FW_DOWNLOAD_TIMER < 2) */
-
-#endif /* #if defined(FW_DOWNLOAD_TIMER) */
-
}
}
else if (NFCSTATUS_SUCCESS == PHNFCSTATUS(status))
@@ -3808,27 +2801,16 @@ phDnldNfc_Upgrade (
(void)phDnldNfc_Set_Seq(psDnldContext, DNLD_SEQ_COMPLETE);
status = PHNFCSTVAL( CID_NFC_DNLD,
NFCSTATUS_PENDING );
-#if defined(FW_DOWNLOAD_TIMER)
+#ifdef FW_DOWNLOAD_TIMER
psDnldContext->timer_id = phOsalNfc_Timer_Create( );
-#if (FW_DOWNLOAD_TIMER < 2)
phOsalNfc_Timer_Start( psDnldContext->timer_id,
- NXP_DNLD_COMPLETE_TIMEOUT,
- (ppCallBck_t) phDnldNfc_Abort
-#ifdef NFC_TIMER_CONTEXT
- , (void *) psDnldContext
+ NXP_DNLD_COMPLETE_TIMEOUT, phDnldNfc_Abort, NULL );
#endif
- );
-
-#endif /* #if (FW_DOWNLOAD_TIMER < 2) */
-
-#endif /* #if defined(FW_DOWNLOAD_TIMER) */
}
#else
status = NFCSTATUS_SUCCESS;
-
-#endif /* #if defined (NXP_FW_INTEGRITY_VERIFY) */
-
+#endif
}
else
{
@@ -3839,12 +2821,9 @@ phDnldNfc_Upgrade (
if (NFCSTATUS_PENDING != PHNFCSTATUS(status))
{
(void)phDal4Nfc_Unregister(
- psDnldContext->lower_interface.pcontext, pHwRef);
- phDnldNfc_Release_Lower(psDnldContext, pHwRef);
- phDnldNfc_Release_Resources(&psDnldContext);
-#ifndef NFC_TIMER_CONTEXT
- gpphDnldContext = psDnldContext;
-#endif
+ gpphDnldContext->lower_interface.pcontext, pHwRef);
+ phDnldNfc_Release_Lower(gpphDnldContext, pHwRef);
+ phDnldNfc_Release_Resources(&gpphDnldContext);
}
} /* End of Status Check for Memory */
else
diff --git a/src/phHal4Nfc.c b/src/phHal4Nfc.c
index 726b4b5..ebd447f 100644
--- a/src/phHal4Nfc.c
+++ b/src/phHal4Nfc.c
@@ -153,11 +153,7 @@ static void phHal4Nfc_OpenComplete(
gpphHal4Nfc_Hwref = NULL;
PHDBG_INFO("Hal4:Open Failed");
/*Call upper layer's Open Cb with error status*/
- if(NULL != pUpper_OpenCb)
- {
- /*Upper layer's Open Cb*/
(*pUpper_OpenCb)(pUpper_Context,status);
- }
}
return;
}
@@ -408,7 +404,7 @@ NFCSTATUS phHal4Nfc_Open(
if( openRetVal == NFCSTATUS_SUCCESS )
{
/*update Next state*/
- Hal4Ctxt->Hal4NextState = (HCI_NFC_DEVICE_TEST == eHciInitType?
+ Hal4Ctxt->Hal4NextState = (HCI_SELF_TEST == eHciInitType?
eHal4StateSelfTestMode:eHal4StateOpenAndReady);
/*Store callback and context ,and set Default settings in Context*/
Hal4Ctxt->sUpperLayerInfo.pUpperOpenCb = pOpenCallback;
@@ -472,17 +468,13 @@ NFCSTATUS phHal4Nfc_Ioctl(
else if(NULL == psHwReference->hal_context)
{
#ifdef FW_DOWNLOAD
-
-#if !defined (NXP_FW_INTEGRITY_VERIFY)
if(NFC_FW_DOWNLOAD_CHECK == IoctlCode)
{
RetStatus = phDnldNfc_Run_Check(
psHwReference
);
}
- else
-#endif /* !defined (NXP_FW_INTEGRITY_VERIFY) */
- if((NFC_FW_DOWNLOAD == IoctlCode)
+ else if((NFC_FW_DOWNLOAD == IoctlCode)
&&(NULL == gpphHal4Nfc_Hwref))/*Indicates current state is shutdown*/
{
Hal4Ctxt = (phHal4Nfc_Hal4Ctxt_t *)
@@ -511,9 +503,7 @@ NFCSTATUS phHal4Nfc_Ioctl(
phHal4Nfc_DownloadComplete,
Hal4Ctxt
);
- if((NFCSTATUS_SUCCESS == RetStatus)
- || (NFCSTATUS_PENDING != PHNFCSTATUS(RetStatus))
- )
+ if(NFCSTATUS_SUCCESS == RetStatus)
{
phOsalNfc_FreeMemory(Hal4Ctxt);
((phHal_sHwReference_t *)psHwReference)->hal_context = NULL;
@@ -1016,15 +1006,10 @@ static void phHal4Nfc_LowerNotificationHandler(
break;
case NFC_NOTIFY_DEVICE_ERROR:
{
- NFCSTATUS status = NFCSTATUS_BOARD_COMMUNICATION_ERROR;
- pphHal4Nfc_GenCallback_t pUpper_OpenCb
- = Hal4Ctxt->sUpperLayerInfo.pUpperOpenCb;
- void *pUpper_Context
- = Hal4Ctxt->sUpperLayerInfo.psUpperLayerCtxt;
static phHal4Nfc_NotificationInfo_t uNotificationInfo;
+ Hal4Ctxt->Hal4NextState = eHal4StateInvalid;
if(NULL != Hal4Ctxt->sUpperLayerInfo.pDefaultEventHandler)
{
- Hal4Ctxt->Hal4NextState = eHal4StateInvalid;
Hal4Ctxt->sUpperLayerInfo.pDefaultEventHandler(
Hal4Ctxt->sUpperLayerInfo.DefaultListenerCtxt,
NFC_EVENT_NOTIFICATION,
@@ -1032,31 +1017,8 @@ static void phHal4Nfc_LowerNotificationHandler(
NFCSTATUS_BOARD_COMMUNICATION_ERROR
);
}
- else if (( eHal4StateSelfTestMode == Hal4Ctxt->Hal4NextState )
- || ( eHal4StateOpenAndReady == Hal4Ctxt->Hal4NextState ) )
- {
- Hal4Ctxt->Hal4CurrentState = eHal4StateClosed;
- Hal4Ctxt->Hal4NextState = eHal4StateInvalid;
- (void)phHciNfc_Release((void *)Hal4Ctxt->psHciHandle,
- pHwRef, (pphNfcIF_Notification_CB_t)NULL,
- (void *)Hal4Ctxt);/*Clean up Hci*/
- Hal4Ctxt->psHciHandle = NULL;
- phOsalNfc_FreeMemory((void *)Hal4Ctxt->pHal4Nfc_LayerCfg);
- Hal4Ctxt->pHal4Nfc_LayerCfg = NULL;
- phOsalNfc_FreeMemory((void *)Hal4Ctxt);
- gpphHal4Nfc_Hwref->hal_context = NULL;
- gpphHal4Nfc_Hwref = NULL;
- PHDBG_INFO("Hal4:Open Failed");
- /*Call upper layer's Open Cb with error status*/
- if(NULL != pUpper_OpenCb)
- {
- /*Upper layer's Open Cb*/
- (*pUpper_OpenCb)(pUpper_Context,status);
- }
- }
else
{
- Hal4Ctxt->Hal4NextState = eHal4StateInvalid;
phOsalNfc_RaiseException(phOsalNfc_e_UnrecovFirmwareErr,1);
}
break;
@@ -1254,7 +1216,6 @@ static void phHal4Nfc_HandleEvent(
case NFC_INFO_TXLDO_OVERCUR:
case NFC_INFO_MEM_VIOLATION:
case NFC_INFO_TEMP_OVERHEAT:
- case NFC_INFO_LLC_ERROR:
{
sNotificationInfo.info = psEventInfo;
sNotificationInfo.status = NFCSTATUS_SUCCESS;
@@ -1279,10 +1240,7 @@ static void phHal4Nfc_HandleEvent(
case NFC_EVT_START_OF_TRANSACTION:
case NFC_EVT_END_OF_TRANSACTION:
case NFC_EVT_CONNECTIVITY:
- case NFC_EVT_OPERATION_ENDED:
- case NFC_EVT_MIFARE_ACCESS:
- case NFC_EVT_APDU_RECEIVED:
- case NFC_EVT_EMV_CARD_REMOVAL:
+ case NFC_EVT_OPERATION_ENDED:
sNotificationInfo.info = psEventInfo;
sNotificationInfo.status = NFCSTATUS_SUCCESS;
sNotificationInfo.type = NFC_EVENT_NOTIFICATION;
@@ -1331,23 +1289,10 @@ static void phHal4Nfc_SelfTestComplete(
= Hal4Ctxt->sUpperLayerInfo.pUpperIoctlCb;
void *pUpper_Context = Hal4Ctxt->sUpperLayerInfo.psUpperLayerCtxt;
/*check for Success*/
- if(( DEVMGMT_SWP_TEST == Hal4Ctxt->Ioctl_Type )
- || ( DEVMGMT_ANTENNA_TEST == Hal4Ctxt->Ioctl_Type ))
+ if((SelfTestResults->length > 0) && (0 == SelfTestResults->buffer[0]))
{
status = NFCSTATUS_SUCCESS;
}
- else if((SelfTestResults->length > 0) && (0 == SelfTestResults->buffer[0]))
- {
- status = NFCSTATUS_SUCCESS;
- }
- else
- {
- if (NULL != pInfo)
- {
- status = ((phNfc_sCompletionInfo_t *)pInfo)->status;
- }
- }
-
/*Copy response buffer and length*/
(void)memcpy(Hal4Ctxt->sUpperLayerInfo.pIoctlOutParam->buffer,
SelfTestResults->buffer,
@@ -1406,8 +1351,7 @@ static void phHal4Nfc_IoctlComplete(
{
/*for NFC_MEM_READ and NFC_GPIO_READ ,provide one Byte Response*/
if ((NFC_MEM_READ == Hal4Ctxt->Ioctl_Type)
- || (NFC_GPIO_READ == Hal4Ctxt->Ioctl_Type)
- )
+ || (NFC_GPIO_READ == Hal4Ctxt->Ioctl_Type))
{
Hal4Ctxt->sUpperLayerInfo.pIoctlOutParam->length
= sizeof (uint8_t);
diff --git a/src/phHciNfc.h b/src/phHciNfc.h
index 4f52b4a..f360413 100644
--- a/src/phHciNfc.h
+++ b/src/phHciNfc.h
@@ -78,9 +78,8 @@
typedef enum phHciNfc_Init
{
HCI_SESSION = 0x00,
- HCI_NFC_DEVICE_TEST,
- HCI_CUSTOM_INIT,
- HCI_SELF_TEST
+ HCI_SELF_TEST,
+ HCI_CUSTOM_INIT
}phHciNfc_Init_t;
/** \ingroup grp_hal_hci
@@ -264,7 +263,7 @@ phHciNfc_Config_Discovery (
* of the HCI Layer.
* \param[in] pHwRef pHwRef is the Information of
* the Device Interface Link .
- * \param[in] discovery_type If True: Start re-polling of the target
+ * \param[in] re_poll If True: Start re-polling of the target
* after the Target Device is de-activated
* or else - continue discovery with next
* technology.
@@ -280,7 +279,7 @@ phHciNfc_Config_Discovery (
phHciNfc_Restart_Discovery (
void *psHciHandle,
void *pHwRef,
- uint8_t discovery_type
+ uint8_t repoll
);
@@ -496,11 +495,10 @@ phHciNfc_Config_Discovery (
* of the HCI Layer.
* \param[in] pHwRef pHwRef is the Information of
* the Device Interface Link .
- * \param[in] discovery_type If NFC_RF_DISCOVERY_REPOLL: Start re-polling of
- * the target after the Target Device is
- * de-activatedor if NFC_RF_DISCOVERY_CONTINUE -
- * continue discovery with next technology or
- * stop the discovery wheel.
+ * \param[in] re_poll If True: Start re-polling of the target
+ * after the Target Device is de-activated
+ * or else - continue discovery with next
+ * technology.
*
* \retval NFCSTATUS_PENDING To De-select the remote target pending.
* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
@@ -514,7 +512,7 @@ phHciNfc_Config_Discovery (
phHciNfc_Disconnect (
void *psHciHandle,
void *pHwRef,
- uint8_t discovery_type
+ uint8_t re_poll
);
diff --git a/src/phHciNfc_DevMgmt.c b/src/phHciNfc_DevMgmt.c
index 5b3eddc..32662c1 100644
--- a/src/phHciNfc_DevMgmt.c
+++ b/src/phHciNfc_DevMgmt.c
@@ -71,7 +71,6 @@
#define NXP_EVT_INFO_EXT_RF_FIELD 0x12U
#define NXP_EVT_INFO_MEM_VIOLATION 0x13U
#define NXP_EVT_INFO_TEMP_OVERHEAT 0x14U
-#define NXP_EVT_INFO_LLC_ERROR 0x15U
#define NFC_DEV_TXLDO_MASK 0x03U
@@ -519,8 +518,7 @@ phHciNfc_DevMgmt_Initialise(
if(status == NFCSTATUS_SUCCESS)
{
- if ((HCI_SELF_TEST == psHciContext->init_mode )
- || (HCI_NFC_DEVICE_TEST == psHciContext->init_mode ))
+ if (HCI_SELF_TEST == psHciContext->init_mode )
{
p_device_mgmt_info->next_seq =
DEV_MGMT_GPIO_PDIR;
@@ -643,27 +641,18 @@ phHciNfc_DevMgmt_Initialise(
#endif /* #if ( NXP_NFC_IFC_TIMEOUT & 0x01 ) */
case DEV_MGMT_TX_LDO:
{
-#if ( NXP_HAL_VERIFY_EEPROM_CRC & 0x01U )
- if (0 != p_device_mgmt_info->eeprom_crc)
- {
- status = NFCSTATUS_FAILED;
- }
- else
-#endif
- {
- config = (NFC_DEV_HWCONF_DEFAULT |
+ config = (NFC_DEV_HWCONF_DEFAULT |
(NXP_DEFAULT_TX_LDO & NFC_DEV_TXLDO_MASK));
- status = phHciNfc_DevMgmt_Configure( psHciContext, pHwRef,
+ status = phHciNfc_DevMgmt_Configure( psHciContext, pHwRef,
NFC_ADDRESS_HW_CONF , config );
- if(NFCSTATUS_PENDING == status )
- {
+ if(NFCSTATUS_PENDING == status )
+ {
#if ( SW_TYPE_RF_TUNING_BF & 0x01)
- p_device_mgmt_info->next_seq = DEV_MGMT_ANAIRQ_CONF;
+ p_device_mgmt_info->next_seq = DEV_MGMT_ANAIRQ_CONF;
#else
- p_device_mgmt_info->next_seq = DEV_MGMT_CLK_REQ;
+ p_device_mgmt_info->next_seq = DEV_MGMT_CLK_REQ;
#endif
- /* status = NFCSTATUS_SUCCESS; */
- }
+ /* status = NFCSTATUS_SUCCESS; */
}
break;
}
@@ -1063,20 +1052,17 @@ phHciNfc_DevMgmt_Update_Sequence(
{
p_device_mgmt_info->current_seq = DEV_MGMT_PIPE_OPEN;
p_device_mgmt_info->next_seq = DEV_MGMT_PIPE_OPEN ;
- break;
- }
+ }break;
case UPDATE_SEQ:
{
p_device_mgmt_info->current_seq = p_device_mgmt_info->next_seq;
- break;
- }
+ }break;
case REL_SEQ:
{
p_device_mgmt_info->current_seq = DEV_MGMT_EVT_AUTONOMOUS;
p_device_mgmt_info->next_seq = DEV_MGMT_EVT_AUTONOMOUS ;
- break;
- }
+ }break;
default:
{
break;
@@ -1121,8 +1107,6 @@ phHciNfc_DevMgmt_Test(
}
else
{
- phHciNfc_DevMgmt_Info_t *p_device_mgmt_info = (phHciNfc_DevMgmt_Info_t *)
- psHciContext->p_device_mgmt_info ;
p_pipe_info = ((phHciNfc_DevMgmt_Info_t *)
psHciContext->p_device_mgmt_info)->p_pipe_info ;
switch(test_type)
@@ -1140,8 +1124,6 @@ phHciNfc_DevMgmt_Test(
p_pipe_info->param_info = test_param->buffer;
p_pipe_info->param_length = (uint8_t)test_param->length;
}
- p_device_mgmt_info->test_result.buffer = NULL;
- p_device_mgmt_info->test_result.length = 0;
status =
phHciNfc_Send_DevMgmt_Command( psHciContext, pHwRef,
pipe_id, (uint8_t)test_type );
@@ -1231,15 +1213,15 @@ phHciNfc_Recv_DevMgmt_Response(
break;
}
case NXP_DBG_READ:
+ {
+ *p_device_mgmt_info->p_val = (uint8_t)( length > HCP_HEADER_LEN ) ?
+ pResponse[HCP_HEADER_LEN]: 0;
+ p_device_mgmt_info->p_val = NULL;
+
+ }
/* fall through */
case NXP_DBG_WRITE:
{
- if( NULL != p_device_mgmt_info->p_val )
- {
- *p_device_mgmt_info->p_val = (uint8_t)( length > HCP_HEADER_LEN ) ?
- pResponse[HCP_HEADER_LEN]: 0;
- p_device_mgmt_info->p_val = NULL;
- }
break;
}
/* Self Test Commands */
@@ -1368,11 +1350,6 @@ phHciNfc_Recv_DevMgmt_Event(
p_device_mgmt_info->overheat_status;
break;
}
- case NXP_EVT_INFO_LLC_ERROR:
- {
- event_info.eventType = NFC_INFO_LLC_ERROR;
- break;
- }
default:
{
status = PHNFCSTVAL(CID_NFC_HCI,
diff --git a/src/phHciNfc_Generic.h b/src/phHciNfc_Generic.h
index b4f8a6d..5410325 100644
--- a/src/phHciNfc_Generic.h
+++ b/src/phHciNfc_Generic.h
@@ -458,7 +458,6 @@ typedef enum phHciNfc_eSeq{
/* HCI Device Management Sequence */
DEV_INIT_SEQ,
- DEV_HAL_INFO_SEQ,
DEV_CONFIG_SEQ,
DEV_REL_SEQ,
@@ -612,8 +611,8 @@ typedef struct phHciNfc_sContext{
/** \internal Mode of HCI Initialisation */
phHciNfc_Init_t init_mode;
- /** \internal Memory Information for HCI Initialisation */
- uint8_t hal_mem_info[NXP_HAL_MEM_INFO_SIZE];
+ /** \internal Mode of HCI Initialisation */
+ void *p_io_params;
/** \internal HCI Configuration Type */
phHciNfc_eConfigType_t config_type;
diff --git a/src/phHciNfc_Sequence.c b/src/phHciNfc_Sequence.c
index 53e8b70..13b8ad5 100644
--- a/src/phHciNfc_Sequence.c
+++ b/src/phHciNfc_Sequence.c
@@ -65,10 +65,6 @@
################################################################################
*/
-/* Address Definitions for HAL Configuration */
-#define NFC_ADDRESS_HAL_CONF 0x9FD0U
-
-
/*
################################################################################
********************** Structure/Enumeration Definitions ***********************
@@ -247,10 +243,8 @@ phHciNfc_FSM_Validate(
/* Initialise to Perform Test on
the Antenna/SWP Link */
case hciState_Test:
- {
status = NFCSTATUS_SUCCESS;
break;
- }
default:
break;
}
@@ -272,10 +266,8 @@ phHciNfc_FSM_Validate(
case hciState_Listen:
/* Specifies the Starting of the Release Sequence */
case hciState_Release:
- {
status = NFCSTATUS_SUCCESS;
break;
- }
default:
break;
}
@@ -314,10 +306,8 @@ phHciNfc_FSM_Validate(
case hciState_Connect:
/* Specifies the Starting of the Release Sequence */
case hciState_Release:
- {
status = NFCSTATUS_SUCCESS;
break;
- }
default:
break;
}
@@ -348,10 +338,8 @@ phHciNfc_FSM_Validate(
case hciState_Disconnect:
/* Specifies the Starting of the Release Sequence */
case hciState_Release:
- {
status = NFCSTATUS_SUCCESS;
break;
- }
default:
break;
}
@@ -375,10 +363,8 @@ phHciNfc_FSM_Validate(
case hciState_Transact:
/* Specifies the Starting of the Release Sequence */
case hciState_Release:
- {
status = NFCSTATUS_SUCCESS;
break;
- }
default:
break;
}
@@ -400,10 +386,8 @@ phHciNfc_FSM_Validate(
case hciState_Config:
/* Specifies the Starting of the Release Sequence */
case hciState_Release:
- {
status = NFCSTATUS_SUCCESS;
break;
- }
default:
break;
}
@@ -428,14 +412,10 @@ phHciNfc_FSM_Validate(
case hciState_Listen:
/* Specifies the Starting of the Release Sequence */
case hciState_Release:
- {
status = NFCSTATUS_SUCCESS;
break;
- }
default:
- {
break;
- }
}
break;
}
@@ -660,7 +640,7 @@ phHciNfc_Error_Sequence(
{
if (hciState_Reset == psHciContext->hci_state.cur_state)
{
- phNfc_sCompletionInfo_t comp_info={FALSE,0, NULL};
+ phNfc_sCompletionInfo_t comp_info;
phHciNfc_Release_Lower( psHciContext, pHwRef );
/* Release all the resources and
@@ -674,7 +654,7 @@ phHciNfc_Error_Sequence(
{
/* Notify the Poll/Emulation Configure failure to the upper layer */
- phNfc_sCompletionInfo_t comp_info={FALSE,0, NULL};
+ phNfc_sCompletionInfo_t comp_info;
comp_info.status = error_status ;
@@ -691,8 +671,7 @@ phHciNfc_Error_Sequence(
{
/* Notify the Poll Configure failure to the upper layer */
- phNfc_sCompletionInfo_t comp_info={FALSE,0, NULL};
-
+ phNfc_sCompletionInfo_t comp_info;
psHciContext->error_status = error_status;
status = phHciNfc_Pending_Sequence(psHciContext, pHwRef );
@@ -721,7 +700,7 @@ phHciNfc_Error_Sequence(
case hciState_Config:
{
/* Notify the Configure failure to the upper layer */
- phNfc_sCompletionInfo_t comp_info={FALSE,0, NULL};
+ phNfc_sCompletionInfo_t comp_info;
psHciContext->error_status = error_status;
status = phHciNfc_Pending_Sequence(psHciContext, pHwRef );
@@ -737,7 +716,7 @@ phHciNfc_Error_Sequence(
case hciState_Select:
{
/* Notify the Configure failure to the upper layer */
- phNfc_sCompletionInfo_t comp_info={FALSE,0, NULL};
+ phNfc_sCompletionInfo_t comp_info={FALSE};
/* Rollback the FSM as the Target Discovery Failed */
phHciNfc_FSM_Rollback(psHciContext);
@@ -763,7 +742,7 @@ phHciNfc_Error_Sequence(
case hciState_Transact:
/* Notify the Transceive failure to the upper layer */
{
- phNfc_sTransactionInfo_t transact_info={FALSE,0,NULL,NULL,0};
+ phNfc_sTransactionInfo_t transact_info;
/* Rollback the FSM as the Transceive Failed */
phHciNfc_FSM_Rollback(psHciContext);
@@ -780,7 +759,7 @@ phHciNfc_Error_Sequence(
case hciState_Connect:
{
/* Notify the General failure to the upper layer */
- phNfc_sCompletionInfo_t comp_info={FALSE,0, NULL};
+ phNfc_sCompletionInfo_t comp_info;
/* psHciContext->host_rf_type = phHal_eUnknown_DevType; */
status = phHciNfc_ReaderMgmt_Update_Sequence(
@@ -797,7 +776,7 @@ phHciNfc_Error_Sequence(
case hciState_Reactivate:
{
/* Notify the General failure to the upper layer */
- phNfc_sCompletionInfo_t comp_info={FALSE,0, NULL};
+ phNfc_sCompletionInfo_t comp_info={FALSE};
/* psHciContext->host_rf_type = phHal_eUnknown_DevType;
status = phHciNfc_ReaderMgmt_Update_Sequence(
@@ -813,7 +792,7 @@ phHciNfc_Error_Sequence(
}
case hciState_Presence:
{
- phNfc_sCompletionInfo_t comp_info={FALSE,0, NULL};
+ phNfc_sCompletionInfo_t comp_info;
/* Roll Back to Connect State as Presence Check is Complete */
phHciNfc_FSM_Rollback(psHciContext);
@@ -830,7 +809,7 @@ phHciNfc_Error_Sequence(
case hciState_Disconnect:
{
/* Notify the General failure to the upper layer */
- phNfc_sCompletionInfo_t comp_info={FALSE,0, NULL};
+ phNfc_sCompletionInfo_t comp_info;
phHciNfc_FSM_Rollback(psHciContext);
comp_info.status = error_status ;
@@ -844,7 +823,7 @@ phHciNfc_Error_Sequence(
#ifdef NXP_HCI_SHUTDOWN_OVERRIDE
status = phHciNfc_Release_Sequence(psHciContext ,pHwRef);
#else
- phNfc_sCompletionInfo_t comp_info={FALSE,0, NULL};
+ phNfc_sCompletionInfo_t comp_info;
phHciNfc_Release_Lower( psHciContext, pHwRef );
/* Release all the resources and
@@ -859,7 +838,7 @@ phHciNfc_Error_Sequence(
default:
{
/* Notify the General failure to the upper layer */
- phNfc_sCompletionInfo_t comp_info={FALSE,0, NULL};
+ phNfc_sCompletionInfo_t comp_info;
phHciNfc_FSM_Rollback(psHciContext);
comp_info.status = error_status ;
@@ -880,7 +859,8 @@ phHciNfc_Error_Sequence(
else
{
/* Notify the General failure to the upper layer */
- phNfc_sCompletionInfo_t comp_info={FALSE,0, NULL};
+ phNfc_sCompletionInfo_t comp_info;
+
phHciNfc_FSM_Rollback(psHciContext);
comp_info.status = error_status ;
/* Disable the Notification to the Upper Layer */
@@ -946,7 +926,7 @@ phHciNfc_Resume_Sequence(
case hciState_Select:
case hciState_Connect:
{
- phNfc_sCompletionInfo_t comp_info={FALSE,0, NULL};
+ phNfc_sCompletionInfo_t comp_info;
/* Update to the Intialise state as the discovery wheel is
* restarted.
@@ -1003,7 +983,7 @@ phHciNfc_Resume_Sequence(
}
case hciState_Presence:
{
- phNfc_sCompletionInfo_t comp_info={FALSE,0, NULL};
+ phNfc_sCompletionInfo_t comp_info;
/* Roll Back to Connect State as Presence Check is Complete */
phHciNfc_FSM_Rollback(psHciContext);
@@ -1122,7 +1102,7 @@ phHciNfc_Initialise_Sequence(
}
else
{
-#if defined( ESTABLISH_SESSION )
+#ifdef ESTABLISH_SESSION
NFCSTATUS info_status = NFCSTATUS_SUCCESS;
PHNFC_UNUSED_VARIABLE(info_status);
info_status = phHciNfc_IDMgmt_Update_Sequence(
@@ -1130,11 +1110,7 @@ phHciNfc_Initialise_Sequence(
if(NFCSTATUS_SUCCESS == info_status)
{
-#if ( NXP_HAL_MEM_INFO_SIZE > 0x00U )
- psHciContext->hci_seq = DEV_HAL_INFO_SEQ;
-#else
psHciContext->hci_seq = IDENTITY_INFO_SEQ;
-#endif /* #if ( NXP_HAL_MEM_INFO_SIZE > 0x00U ) */
}
else
{
@@ -1142,11 +1118,10 @@ phHciNfc_Initialise_Sequence(
status = PHNFCSTVAL(CID_NFC_HCI,
NFCSTATUS_INVALID_HCI_SEQUENCE);
}
-#elif ( NXP_HAL_MEM_INFO_SIZE > 0x00U )
- psHciContext->hci_seq = DEV_HAL_INFO_SEQ;
#else
psHciContext->hci_seq = HCI_END_SEQ;
-#endif /* #ifdef ESTABLISH_SESSION */
+
+#endif
}
}
@@ -1183,10 +1158,8 @@ phHciNfc_Initialise_Sequence(
status = phHciNfc_EmuMgmt_Initialise( psHciContext,pHwRef );
if(NFCSTATUS_SUCCESS == status)
{
-#if defined( ESTABLISH_SESSION )
+#ifdef ESTABLISH_SESSION
psHciContext->hci_seq = ADMIN_SESSION_SEQ;
-#elif ( NXP_HAL_MEM_INFO_SIZE > 0x00U )
- psHciContext->hci_seq = DEV_HAL_INFO_SEQ;
#else
psHciContext->hci_seq = HCI_END_SEQ;
#endif
@@ -1199,11 +1172,7 @@ phHciNfc_Initialise_Sequence(
status = phHciNfc_Admin_Initialise( psHciContext,pHwRef );
if(NFCSTATUS_SUCCESS == status)
{
-#if ( NXP_HAL_MEM_INFO_SIZE > 0x00U )
- psHciContext->hci_seq = DEV_HAL_INFO_SEQ;
-#else
psHciContext->hci_seq = IDENTITY_INFO_SEQ;
-#endif /* #if ( NXP_HAL_MEM_INFO_SIZE > 0x00U ) */
}
break;
}
@@ -1213,13 +1182,11 @@ phHciNfc_Initialise_Sequence(
psHciContext, pHwRef );
if(NFCSTATUS_SUCCESS == status)
{
-#if defined( SW_AUTO_ACTIVATION )
+#ifdef SW_AUTO_ACTIVATION
psHciContext->hci_seq = READER_SW_AUTO_SEQ;
-#elif ( NXP_HAL_MEM_INFO_SIZE > 0x00U )
- psHciContext->hci_seq = DEV_HAL_INFO_SEQ;
#else
psHciContext->hci_seq = IDENTITY_INFO_SEQ;
-#endif /* #if ( NXP_HAL_MEM_INFO_SIZE > 0x00U ) */
+#endif
}
break;
}
@@ -1252,8 +1219,7 @@ phHciNfc_Initialise_Sequence(
{
if ((HCI_SELF_TEST != psHciContext->init_mode)
/* && ( TRUE == ((phHal_sHwReference_t *)pHwRef)->se_detect ) */
- && (HCI_CUSTOM_INIT != psHciContext->init_mode)
- && (HCI_NFC_DEVICE_TEST != psHciContext->init_mode))
+ && (HCI_CUSTOM_INIT != psHciContext->init_mode))
{
NFCSTATUS info_status = NFCSTATUS_SUCCESS;
PHNFC_UNUSED_VARIABLE(info_status);
@@ -1281,42 +1247,10 @@ phHciNfc_Initialise_Sequence(
}
break;
}
-#endif /* #ifdef ESTABLISH_SESSION */
-
-#if ( NXP_HAL_MEM_INFO_SIZE > 0x00U )
- case DEV_HAL_INFO_SEQ:
- {
- static uint8_t mem_index = 0;
- status = phHciNfc_DevMgmt_Get_Info(psHciContext, pHwRef,
- (NFC_ADDRESS_HAL_CONF + mem_index),
- (psHciContext->hal_mem_info + mem_index));
- if(NFCSTATUS_PENDING == status)
- {
- mem_index++;
- if (NXP_HAL_MEM_INFO_SIZE <= mem_index )
- {
- NFCSTATUS info_status = NFCSTATUS_SUCCESS;
- PHNFC_UNUSED_VARIABLE(info_status);
- info_status = phHciNfc_IDMgmt_Update_Sequence(
- psHciContext, INFO_SEQ );
- mem_index = 0;
- psHciContext->hci_seq = IDENTITY_INFO_SEQ;
- /* psHciContext->hci_seq =
- (HCI_SELF_TEST != psHciContext->init_mode)?
- IDENTITY_INFO_SEQ : HCI_END_SEQ; */
- }
- }
- break;
- }
-#endif /* #if ( NXP_HAL_MEM_INFO_SIZE > 0x00U ) */
+#endif
case HCI_END_SEQ:
{
- phHal_sMemInfo_t *p_mem_info =
- (phHal_sMemInfo_t *) ( psHciContext->hal_mem_info );
- if (
- (HCI_SELF_TEST == psHciContext->init_mode )
- || (HCI_NFC_DEVICE_TEST == psHciContext->init_mode )
- )
+ if (HCI_SELF_TEST == psHciContext->init_mode )
{
psHciContext->hci_state.next_state
= (uint8_t) hciState_Test;
@@ -1326,17 +1260,10 @@ phHciNfc_Initialise_Sequence(
phHciNfc_Uicc_Connectivity( psHciContext, pHwRef );
#endif /* #ifdef UICC_CONNECTIVITY_PATCH */
-#if ( NXP_HAL_MEM_INFO_SIZE > 0x00U )
- if(NXP_FW_UPLOAD_SUCCESS != p_mem_info->fw_magic )
- {
- status = PHNFCSTVAL( CID_NFC_HCI, NFCSTATUS_FAILED );
- }
-#endif /* #if ( NXP_HAL_MEM_INFO_SIZE > 0x00U ) */
-
/* Initialisation Complete Notification to the Upper Layer */
if(NFCSTATUS_SUCCESS == status)
{
- phNfc_sCompletionInfo_t comp_info={FALSE,0, NULL};
+ phNfc_sCompletionInfo_t comp_info;
comp_info.status = status;
phHciNfc_Notify(psHciContext->p_upper_notify,
@@ -1406,10 +1333,6 @@ phHciNfc_Release_Sequence(
}
case DEV_REL_SEQ:
{
- NFCSTATUS info_status = NFCSTATUS_SUCCESS;
- PHNFC_UNUSED_VARIABLE(info_status);
- info_status = phHciNfc_DevMgmt_Update_Sequence(
- psHciContext, REL_SEQ );
status = phHciNfc_DevMgmt_Release( psHciContext, pHwRef );
if(NFCSTATUS_SUCCESS == status)
{
@@ -1511,7 +1434,7 @@ phHciNfc_Config_Sequence(
)
{
NFCSTATUS status = NFCSTATUS_SUCCESS;
- phNfc_sCompletionInfo_t comp_info = {FALSE,0,NULL};
+ phNfc_sCompletionInfo_t comp_info;
switch(psHciContext->config_type)
{
@@ -1837,7 +1760,7 @@ phHciNfc_EmulationCfg_Sequence(
)
{
NFCSTATUS status = NFCSTATUS_SUCCESS;
- static phNfc_sCompletionInfo_t comp_info = {FALSE,0,NULL};
+ static phNfc_sCompletionInfo_t comp_info;
#if defined(HOST_EMULATION)
phHciNfc_GateID_t ce_gate = phHciNfc_UnknownGate;
#endif /* #ifdef HOST_EMULATION */
@@ -1984,7 +1907,8 @@ phHciNfc_SmartMx_Mode_Sequence(
NFCSTATUS status = NFCSTATUS_SUCCESS;
phHal_sADD_Cfg_t *p_poll_config = (phHal_sADD_Cfg_t * )
psHciContext->p_config_params;
- phNfc_sCompletionInfo_t comp_info = {FALSE,0,NULL};
+ phNfc_sCompletionInfo_t comp_info;
+
if (NULL != p_poll_config)
{
switch(psHciContext->hci_seq)
@@ -2090,7 +2014,7 @@ phHciNfc_Connect_Sequence(
)
{
NFCSTATUS status = NFCSTATUS_SUCCESS;
- static phNfc_sCompletionInfo_t comp_info = {FALSE,0,NULL};
+ static phNfc_sCompletionInfo_t comp_info;
phHal_eRemDevType_t target_type = phHal_eUnknown_DevType;
if( NULL != psHciContext->p_target_info )
@@ -2202,7 +2126,7 @@ phHciNfc_Disconnect_Sequence(
)
{
NFCSTATUS status = NFCSTATUS_SUCCESS;
- static phNfc_sCompletionInfo_t comp_info = {FALSE, 0 , NULL};
+ static phNfc_sCompletionInfo_t comp_info;
phHal_eRemDevType_t target_type = phHal_eUnknown_DevType;
uint8_t re_poll = 0;
@@ -2286,7 +2210,7 @@ phHciNfc_Transact_Sequence(
void *pHwRef
)
{
- static phNfc_sTransactionInfo_t transact_info = {FALSE,0,NULL,NULL,0};
+ static phNfc_sTransactionInfo_t transact_info;
pphNfcIF_Notification_CB_t p_upper_notify = psHciContext->p_upper_notify;
void *pcontext = psHciContext->p_upper_context;
@@ -2433,8 +2357,8 @@ phHciNfc_Test_Sequence(
)
{
NFCSTATUS status = NFCSTATUS_SUCCESS;
- static phNfc_sCompletionInfo_t comp_info = {0};
- static phNfc_sData_t test_result= {NULL,0};
+ static phNfc_sCompletionInfo_t comp_info;
+ static phNfc_sData_t test_result;
/* Complete the Test Sequence and notify the HAL */
status = phHciNfc_FSM_Complete ( psHciContext );
@@ -2456,7 +2380,7 @@ phHciNfc_Test_Sequence(
phHciNfc_Notify(psHciContext->p_upper_notify,
psHciContext->p_upper_context, pHwRef,
NFC_NOTIFY_RESULT , &comp_info);
- HCI_DEBUG(" HCI System Test Completed : Status = %u\n", test_status);
+ HCI_PRINT(" HCI System Test Completed. \n");
}
else
{
@@ -2482,7 +2406,7 @@ phHciNfc_IO_Sequence(
)
{
NFCSTATUS status = NFCSTATUS_SUCCESS;
- static phNfc_sCompletionInfo_t comp_info = {0};
+ static phNfc_sCompletionInfo_t comp_info;
/* To remove "warning (VS 4100) : unreferenced formal parameter" */
PHNFC_UNUSED_VARIABLE(pdata);
diff --git a/src/phHciNfc_WI.c b/src/phHciNfc_WI.c
index e1310a4..4da2078 100644
--- a/src/phHciNfc_WI.c
+++ b/src/phHciNfc_WI.c
@@ -63,9 +63,6 @@
/****************** Static Function Declaration **************************/
-static uint8_t paypass_removal[2] = {0x50, 0x00};
-static uint8_t mifare_access = 0x60;
-
static
NFCSTATUS
phHciNfc_Recv_WI_Response(
@@ -703,33 +700,12 @@ phHciNfc_Recv_WI_Event(
EventInfo.eventType = NFC_EVT_TRANSACTION;
EventInfo.eventInfo.aid.buffer = (uint8_t *)p_wi_info->aid;
/* check for AID data is at least 1 byte is their */
- if (length > HCP_HEADER_LEN)
+ if(length > HCP_HEADER_LEN)
{
EventInfo.eventInfo.aid.length = length - HCP_HEADER_LEN;
- memcpy((void *)p_wi_info->aid, message->payload,
- EventInfo.eventInfo.aid.length );
- }
-
- /* Filter Transaction event */
- if (EventInfo.eventInfo.aid.length == 4)
- {
- EventInfo.eventType = NFC_EVT_APDU_RECEIVED;
- }
- else if (EventInfo.eventInfo.aid.length == 2)
- {
- if (!memcmp(paypass_removal, EventInfo.eventInfo.aid.buffer, EventInfo.eventInfo.aid.length))
- {
- EventInfo.eventType = NFC_EVT_EMV_CARD_REMOVAL;
- }
- else if(mifare_access == EventInfo.eventInfo.aid.buffer[0])
- {
- EventInfo.eventType = NFC_EVT_MIFARE_ACCESS;
- }
+ (void) memcpy((void *)p_wi_info->aid,message->payload,
+ EventInfo.eventInfo.aid.length );
}
-
- EventInfo.eventInfo.aid.buffer = (uint8_t *)p_wi_info->aid;
- (void) memcpy((void *)p_wi_info->aid,message->payload,
- EventInfo.eventInfo.aid.length );
break;
}
default:
diff --git a/src/phLibNfc.c b/src/phLibNfc.c
index e0ef435..9c7db4f 100644
--- a/src/phLibNfc.c
+++ b/src/phLibNfc.c
@@ -45,8 +45,6 @@
*************************** Macro's ******************************************
*/
-extern int dlopen_firmware();
-
#ifndef STATIC_DISABLE
#define STATIC static
#else
@@ -108,7 +106,6 @@ NFCSTATUS phLibNfc_HW_Reset ()
{
NFCSTATUS Status = NFCSTATUS_SUCCESS;
- Status = phDal4Nfc_Reset(1);
Status = phDal4Nfc_Reset(0);
Status = phDal4Nfc_Reset(1);
@@ -120,13 +117,6 @@ NFCSTATUS phLibNfc_Download_Mode ()
return phDal4Nfc_Download();
}
-int phLibNfc_Load_Firmware_Image ()
-{
- int status;
- status = dlopen_firmware();
- return status;
-}
-
extern uint8_t nxp_nfc_isoxchg_timeout;
NFCSTATUS phLibNfc_SetIsoXchgTimeout(uint8_t timeout) {
@@ -590,7 +580,6 @@ NFCSTATUS phLibNfc_Mgt_Reset(void *pContext)
}
/* No device is connected */
gpphLibContext->Connected_handle = 0x00;
- gpphLibContext->Prev_Connected_handle = 0x00;
gpphLibContext->ReleaseType = NFC_INVALID_RELEASE_TYPE;
gpphLibContext->eLibNfcCfgMode = NFC_DISCOVERY_STOP;
/*Lib Nfc Stack is initilized and in idle state*/
diff --git a/src/phLibNfc.h b/src/phLibNfc.h
index 719cfc1..216196f 100644
--- a/src/phLibNfc.h
+++ b/src/phLibNfc.h
@@ -173,12 +173,6 @@ typedef enum
ETSI TS 102 622 V7.4.0 */
phLibNfc_eSE_EvtFieldOn, // consider using phLibNfc_eSE_EvtConnectivity
phLibNfc_eSE_EvtFieldOff,
-
- phLibNfc_eSE_EvtApduReceived, /* PAYPASS MagStripe or MCHIP_4 transaction */
-
- phLibNfc_eSE_EvtCardRemoval, /* Indicates the beginning of an EMV Card Removal sequence */
-
- phLibNfc_eSE_EvtMifareAccess /* Indicates when the SMX Emulation MIFARE is accessed */
} phLibNfc_eSE_EvtType_t;
/**
@@ -851,8 +845,6 @@ NFCSTATUS phLibNfc_HW_Reset ();
NFCSTATUS phLibNfc_Download_Mode ();
-int phLibNfc_Load_Firmware_Image ();
-
// timeout is 8 bits
// bits [0..3] => timeout value, (256*16/13.56*10^6) * 2^value
// [0] -> 0.0003s
diff --git a/src/phLibNfc_Internal.h b/src/phLibNfc_Internal.h
index 304ac22..10018ec 100644
--- a/src/phLibNfc_Internal.h
+++ b/src/phLibNfc_Internal.h
@@ -221,9 +221,6 @@ typedef struct phLibNfc_LibContext
uint32_t Connected_handle,
Discov_handle[MAX_REMOTE_DEVICES];
- /* To store the previous connected handle in case of Multiple protocol tags */
- uint32_t Prev_Connected_handle;
-
/*Call back function pointers */
phLibNfc_eDiscoveryConfigMode_t eLibNfcCfgMode;
diff --git a/src/phLibNfc_Ioctl.c b/src/phLibNfc_Ioctl.c
index 08f34b5..9983c60 100644
--- a/src/phLibNfc_Ioctl.c
+++ b/src/phLibNfc_Ioctl.c
@@ -238,11 +238,8 @@ STATIC void phLibNfc_Ioctl_Mgmt_CB(void *context,
NFCSTATUS status )
{
phLibNfc_Ioctl_Cntx_t *pIoctlCntx=NULL;
- if(PHNFCSTATUS(status) == NFCSTATUS_FEATURE_NOT_SUPPORTED)
- {
- status = NFCSTATUS_FEATURE_NOT_SUPPORTED;
- }
- else if(PHNFCSTATUS(status)!=NFCSTATUS_SUCCESS)
+
+ if(PHNFCSTATUS(status)!=NFCSTATUS_SUCCESS)
{
status = NFCSTATUS_FAILED;
}
diff --git a/src/phLibNfc_SE.c b/src/phLibNfc_SE.c
index 4e839cf..5fa4e08 100644
--- a/src/phLibNfc_SE.c
+++ b/src/phLibNfc_SE.c
@@ -204,51 +204,6 @@ STATIC void phLibNfc_SeNotification(void *context,
status);
break;
}
-
- case NFC_EVT_APDU_RECEIVED:
- {
- if ((pEvtInfo->eventInfo.aid.length != 0) && ((pEvtInfo->eventInfo.aid.length <= 16)))
- {
- /* Copy received APDU to aid buffer. */
- Se_Trans_Info.UiccEvtInfo.aid.buffer = pEvtInfo->eventInfo.aid.buffer;
- Se_Trans_Info.UiccEvtInfo.aid.length = pEvtInfo->eventInfo.aid.length;
- }
-
- (*pLibContext->sSeContext.sSeCallabackInfo.pSeListenerNtfCb)(
- pLibContext->sSeContext.sSeCallabackInfo.pSeListenerCtxt,
- phLibNfc_eSE_EvtApduReceived,
- pSeInfo->hSecureElement,
- &Se_Trans_Info,
- status);
- break;
- }
-
- case NFC_EVT_MIFARE_ACCESS:
- {
- /* copy the Block MIFARE accessed */
- Se_Trans_Info.UiccEvtInfo.aid.buffer = pEvtInfo->eventInfo.aid.buffer;
- Se_Trans_Info.UiccEvtInfo.aid.length = pEvtInfo->eventInfo.aid.length;
-
- (*pLibContext->sSeContext.sSeCallabackInfo.pSeListenerNtfCb)(
- pLibContext->sSeContext.sSeCallabackInfo.pSeListenerCtxt,
- phLibNfc_eSE_EvtMifareAccess,
- pSeInfo->hSecureElement,
- &Se_Trans_Info,
- status);
- break;
- }
-
- case NFC_EVT_EMV_CARD_REMOVAL:
- {
- (*pLibContext->sSeContext.sSeCallabackInfo.pSeListenerNtfCb)(
- pLibContext->sSeContext.sSeCallabackInfo.pSeListenerCtxt,
- phLibNfc_eSE_EvtCardRemoval,
- pSeInfo->hSecureElement,
- &Se_Trans_Info,
- status);
- break;
- }
-
case NFC_EVT_END_OF_TRANSACTION:
{
(*pLibContext->sSeContext.sSeCallabackInfo.pSeListenerNtfCb)(
diff --git a/src/phLibNfc_initiator.c b/src/phLibNfc_initiator.c
index 2a03c05..340af78 100644
--- a/src/phLibNfc_initiator.c
+++ b/src/phLibNfc_initiator.c
@@ -548,9 +548,6 @@ phLibNfc_RemoteDev_ReConnect (
gpphLibContext->CBInfo.pClientConCntx = pContext;
gpphLibContext->status.GenCb_pending_status = TRUE;
gpphLibContext->LibNfcState.next_state = eLibNfcHalStateConnect;
-
- gpphLibContext->Prev_Connected_handle = gpphLibContext->Connected_handle;
-
gpphLibContext->Connected_handle = hRemoteDevice;
}
else if (NFCSTATUS_INVALID_REMOTE_DEVICE == PHNFCSTATUS(ret_val))
@@ -636,7 +633,6 @@ NFCSTATUS phLibNfc_RemoteDev_Connect(
gpphLibContext->CBInfo.pClientConCntx = pContext;
gpphLibContext->status.GenCb_pending_status=TRUE;
gpphLibContext->LibNfcState.next_state = eLibNfcHalStateConnect;
- gpphLibContext->Prev_Connected_handle = gpphLibContext->Connected_handle;
gpphLibContext->Connected_handle = hRemoteDevice;
}
else if(PHNFCSTATUS(RetVal) == NFCSTATUS_INVALID_REMOTE_DEVICE)
@@ -761,7 +757,6 @@ STATIC void phLibNfc_RemoteDev_Connect_Cb(
/* If remote device is invalid return as TARGET LOST to upper layer*/
/* If error code is other than SUCCESS return NFCSTATUS_TARGET_LOST */
Connect_status = NFCSTATUS_TARGET_LOST;
- gpphLibContext->Connected_handle = gpphLibContext->Prev_Connected_handle ;
}
gpphLibContext->ndef_cntx.is_ndef = CHK_NDEF_NOT_DONE;
/* Update the Current Sate*/
@@ -901,9 +896,6 @@ STATIC void phLibNfc_RemoteDev_Disconnect_cb(
gpphLibContext->LastTrancvSuccess = FALSE;
/*Reset Connected handle */
gpphLibContext->Connected_handle=0x0000;
- /*Reset previous Connected handle */
- gpphLibContext->Prev_Connected_handle = 0x0000;
-
if(gpphLibContext->sSeContext.eActivatedMode == phLibNfc_SE_ActModeWired)
{
gpphLibContext->sSeContext.eActivatedMode = phLibNfc_SE_ActModeDefault;