aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYerriswamy <yerriswamy.kurubathayanna@nxp.com>2017-09-21 20:08:50 +0530
committernxpandroid <srikrishna.pramoda@nxp.com>2017-09-26 12:00:57 +0530
commit89973849a15dbebd24ac39737557283d7dbcb13f (patch)
treecd883cea7d744e64771f214ecd4ae5e4e09bc198
parentec0c3a7a68e97453aa478a373ad4a3c2eff6fc39 (diff)
downloadandroid_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.cpp111
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