diff options
author | Yerriswamy <yerriswamy.kurubathayanna@nxp.com> | 2017-09-21 20:08:50 +0530 |
---|---|---|
committer | nxpandroid <srikrishna.pramoda@nxp.com> | 2017-09-26 12:00:57 +0530 |
commit | 89973849a15dbebd24ac39737557283d7dbcb13f (patch) | |
tree | cd883cea7d744e64771f214ecd4ae5e4e09bc198 | |
parent | ec0c3a7a68e97453aa478a373ad4a3c2eff6fc39 (diff) | |
download | android_vendor_nxp_opensource_packages_apps_Nfc-89973849a15dbebd24ac39737557283d7dbcb13f.tar.gz android_vendor_nxp_opensource_packages_apps_Nfc-89973849a15dbebd24ac39737557283d7dbcb13f.tar.bz2 android_vendor_nxp_opensource_packages_apps_Nfc-89973849a15dbebd24ac39737557283d7dbcb13f.zip |
Fix for T4T presence check issue
-rw-r--r-- | nci/jni/NativeNfcTag.cpp | 111 |
1 files changed, 61 insertions, 50 deletions
diff --git a/nci/jni/NativeNfcTag.cpp b/nci/jni/NativeNfcTag.cpp index e5186894..63ad7743 100644 --- a/nci/jni/NativeNfcTag.cpp +++ b/nci/jni/NativeNfcTag.cpp @@ -1255,6 +1255,7 @@ static jint nativeNfcTag_doReconnect (JNIEnv*, jobject) uint8_t* uid; uint32_t uid_len; + tNFC_STATUS stat; ALOGV("%s: enter; handle=%x", __func__, handle); natTag.getTypeATagUID(&uid,&uid_len); @@ -1294,74 +1295,84 @@ static jint nativeNfcTag_doReconnect (JNIEnv*, jobject) uid_len > 0 && uid[0] == 0x08)) ) { - ALOGV("%s: reconnect for TypeB / TypeA random uid", __func__); - sReconnectNtfTimer.set(500, sReconnectTimerProc); + if(NFA_GetNCIVersion() != NCI_VERSION_2_0) + { + ALOGV("%s: reconnect for TypeB / TypeA random uid", __func__); + sReconnectNtfTimer.set(500, sReconnectTimerProc); - tNFC_STATUS stat = NFA_RegVSCback (true,nfaVSCNtfCallback); //Register CallBack for VS NTF - if(NFA_STATUS_OK != stat) - { - retCode = 0x01; - goto TheEnd; - } + tNFC_STATUS stat = NFA_RegVSCback (true,nfaVSCNtfCallback); //Register CallBack for VS NTF + if(NFA_STATUS_OK != stat) + { + retCode = 0x01; + goto TheEnd; + } - SyncEventGuard guard (sNfaVSCResponseEvent); - stat = NFA_SendVsCommand (0x11,0x00,NULL,nfaVSCCallback); - if(NFA_STATUS_OK == stat) - { - sIsReconnecting = true; - ALOGV("%s: reconnect for TypeB - wait for NFA VS command to finish", __func__); - sNfaVSCResponseEvent.wait(); //wait for NFA VS command to finish - ALOGV("%s: reconnect for TypeB - Got RSP", __func__); - } + SyncEventGuard guard (sNfaVSCResponseEvent); + stat = NFA_SendVsCommand (0x11,0x00,NULL,nfaVSCCallback); + if(NFA_STATUS_OK == stat) + { + sIsReconnecting = true; + ALOGV("%s: reconnect for TypeB - wait for NFA VS command to finish", __func__); + sNfaVSCResponseEvent.wait(); //wait for NFA VS command to finish + ALOGV("%s: reconnect for TypeB - Got RSP", __func__); + } - if(false == sVSCRsp) - { - retCode = 0x01; - sIsReconnecting = false; - } - else - { + if(false == sVSCRsp) { - ALOGV("%s: reconnect for TypeB - wait for NFA VS NTF to come", __func__); - SyncEventGuard guard (sNfaVSCNotificationEvent); - sNfaVSCNotificationEvent.wait(); //wait for NFA VS NTF to come - ALOGV("%s: reconnect for TypeB - GOT NFA VS NTF", __func__); - sReconnectNtfTimer.kill(); + retCode = 0x01; sIsReconnecting = false; } - - if(false == sIsTagInField) + else { - ALOGV("%s: NxpNci: TAG OUT OF FIELD", __func__); - retCode = STATUS_CODE_TARGET_LOST; - - SyncEventGuard g (gDeactivatedEvent); + { + ALOGV("%s: reconnect for TypeB - wait for NFA VS NTF to come", __func__); + SyncEventGuard guard (sNfaVSCNotificationEvent); + sNfaVSCNotificationEvent.wait(); //wait for NFA VS NTF to come + ALOGV("%s: reconnect for TypeB - GOT NFA VS NTF", __func__); + sReconnectNtfTimer.kill(); + sIsReconnecting = false; + } - //Tag not present, deactivate the TAG. - stat = NFA_Deactivate (false); - if (stat == NFA_STATUS_OK) + if(false == sIsTagInField) { - gDeactivatedEvent.wait (); + ALOGV("%s: NxpNci: TAG OUT OF FIELD", __func__); + retCode = STATUS_CODE_TARGET_LOST; + + SyncEventGuard g (gDeactivatedEvent); + + //Tag not present, deactivate the TAG. + stat = NFA_Deactivate (false); + if (stat == NFA_STATUS_OK) + { + gDeactivatedEvent.wait (); + } + else + { + ALOGE("%s: deactivate failed; error=0x%X", __func__, stat); + } } + else { - ALOGE("%s: deactivate failed; error=0x%X", __func__, stat); + retCode = 0x00; } } - else + stat = NFA_RegVSCback (false,nfaVSCNtfCallback); //DeRegister CallBack for VS NTF + if(NFA_STATUS_OK != stat) { - retCode = 0x00; + retCode = 0x01; } + ALOGV("%s: reconnect for TypeB - return", __func__); + }else{ + SyncEventGuard guard (sPresenceCheckEvent); + stat = NFA_RwPresenceCheck (NfcTag::getInstance().getPresenceCheckAlgorithm()); + if (stat == NFA_STATUS_OK) + { + sPresenceCheckEvent.wait (); + retCode = sIsTagPresent ? NCI_STATUS_OK : NCI_STATUS_FAILED; + } } - - stat = NFA_RegVSCback (false,nfaVSCNtfCallback); //DeRegister CallBack for VS NTF - if(NFA_STATUS_OK != stat) - { - retCode = 0x01; - } - ALOGV("%s: reconnect for TypeB - return", __func__); - goto TheEnd; } // this is only supported for type 2 or 4 (ISO_DEP) tags |