From 8206325bc6b3a60aed3c5cce157369ec2989437a Mon Sep 17 00:00:00 2001 From: Sunil Jogi Date: Tue, 10 Apr 2012 11:37:25 -0700 Subject: Added recovery function when SE wired mode selected Added a recovery function with delay when SE wired mode selected. This function will add extra delay before any abort when SE is in wired mode. This will allow SE to complete any operation and do not power off the SE immediately when wired mode transaction is on going. --- Linux_x86/phOsalNfc.c | 3 +++ src/phLibNfc.c | 12 ++++++++++++ src/phLibNfc.h | 4 ++++ 3 files changed, 19 insertions(+) diff --git a/Linux_x86/phOsalNfc.c b/Linux_x86/phOsalNfc.c index 3f4542d..83b4e6e 100644 --- a/Linux_x86/phOsalNfc.c +++ b/Linux_x86/phOsalNfc.c @@ -47,6 +47,8 @@ phOsalNfc_Exception_t phOsalNfc_Exception; char phOsalNfc_DbgTraceBuffer[MAX_PRINT_BUFSIZE]; #endif +void phLibNfc_Mgt_Recovery(); + /*! * \brief Allocates memory. * This function attempts to allocate \a size bytes on the heap and @@ -145,6 +147,7 @@ void phOsalNfc_RaiseException(phOsalNfc_ExceptionType_t eExceptionType, uint16_t if(eExceptionType == phOsalNfc_e_UnrecovFirmwareErr) { ALOGE("HCI Timeout - Exception raised"); + phLibNfc_Mgt_Recovery(); ALOGE("Force restart of NFC Service"); abort(); } diff --git a/src/phLibNfc.c b/src/phLibNfc.c index 1012acb..c7c37c8 100644 --- a/src/phLibNfc.c +++ b/src/phLibNfc.c @@ -129,6 +129,18 @@ int phLibNfc_Load_Firmware_Image () return status; } +// Function for delay the recovery in case wired mode is set +// to complete the possible pending transaction with SE +void phLibNfc_Mgt_Recovery () +{ + /* Wait before recovery if wired mode */ + if (gpphLibContext->sSeContext.eActivatedMode == phLibNfc_SE_ActModeWired) + { + usleep (12000000); + } + + return; +} extern uint8_t nxp_nfc_isoxchg_timeout; NFCSTATUS phLibNfc_SetIsoXchgTimeout(uint8_t timeout) { diff --git a/src/phLibNfc.h b/src/phLibNfc.h index 1eb62ae..6111a93 100644 --- a/src/phLibNfc.h +++ b/src/phLibNfc.h @@ -856,6 +856,10 @@ NFCSTATUS phLibNfc_Download_Mode (); int phLibNfc_Load_Firmware_Image (); +// Function for delay the recovery in case wired mode is set +// to complete the possible pending transaction with SE +void phLibNfc_Mgt_Recovery (); + // timeout is 8 bits // bits [0..3] => timeout value, (256*16/13.56*10^6) * 2^value // [0] -> 0.0003s -- cgit v1.1