diff options
author | anil.hiranniah <anil.hiranniah@nxp.com> | 2020-12-23 00:32:42 +0530 |
---|---|---|
committer | Anil Hiranniah <anil.hiranniah@nxp.com> | 2021-11-02 06:58:13 +0000 |
commit | bd9fd9ec0d458d5ad3cedca849b241d9e4b9fab7 (patch) | |
tree | f7b5e492a77d480d59aa953c88eed72bc3c35ddc /nci | |
parent | 9c15a16a467872db1d239fccced359479fd02768 (diff) | |
download | Nfc-bd9fd9ec0d458d5ad3cedca849b241d9e4b9fab7.tar.gz |
Handle ISODEP & EmptyAID route entries to SE which doesn't support tech A/B
If SE/UICC doesn't support Tech A or B, and ISO DEP & Empty AID route
are set to same SE/UICC in config file, then these entries won't be
registered to SE/UICC. Instead ISO-DEP entry is registered to DH and
empty AID route entry is ignored.
Test: Insert UICC supporting only Type-F, Set ISO-DEP & Default Route to HOST,
Insert UICC supporting only Type-F, Set ISO-DEP & Default Route to UICC,
NFC-ON/OFF, CE
Bug: 176198747
Change-Id: I778f1028a7e70b9ead5cf1a64a158c6f0c225e5b
Diffstat (limited to 'nci')
-rw-r--r-- | nci/jni/RoutingManager.cpp | 41 | ||||
-rwxr-xr-x | nci/jni/RoutingManager.h | 1 |
2 files changed, 41 insertions, 1 deletions
diff --git a/nci/jni/RoutingManager.cpp b/nci/jni/RoutingManager.cpp index 4ea3cf0d..0e0630f4 100644 --- a/nci/jni/RoutingManager.cpp +++ b/nci/jni/RoutingManager.cpp @@ -298,6 +298,38 @@ void RoutingManager::disableRoutingToHost() { } } +/******************************************************************************* + ** + ** Function: isTypeATypeBTechSupportedInEe + ** + ** Description: receive eeHandle + ** + ** Returns: true : if EE support protocol type A/B + ** false : if EE doesn't protocol type A/B + ** + *******************************************************************************/ +bool RoutingManager::isTypeATypeBTechSupportedInEe(tNFA_HANDLE eeHandle) { + static const char fn[] = "RoutingManager::isTypeATypeBTechSupportedInEe"; + bool status = false; + uint8_t mActualNumEe = MAX_NUM_EE; + tNFA_EE_INFO eeInfo[mActualNumEe]; + memset(&eeInfo, 0, mActualNumEe * sizeof(tNFA_EE_INFO)); + tNFA_STATUS nfaStat = NFA_EeGetInfo(&mActualNumEe, eeInfo); + DLOG_IF(INFO, nfc_debug_enabled) << fn; + if (nfaStat != NFA_STATUS_OK) { + return status; + } + for (auto i = 0; i < mActualNumEe; i++) { + if (eeHandle == eeInfo[i].ee_handle) { + if (eeInfo[i].la_protocol || eeInfo[i].lb_protocol) { + status = true; + break; + } + } + } + return status; +} + bool RoutingManager::addAidRouting(const uint8_t* aid, uint8_t aidLen, int route, int aidInfo, int power) { static const char fn[] = "RoutingManager::addAidRouting"; @@ -565,7 +597,8 @@ void RoutingManager::updateDefaultProtocolRoute() { // Default Routing for ISO-DEP tNFA_PROTOCOL_MASK protoMask = NFA_PROTOCOL_MASK_ISO_DEP; tNFA_STATUS nfaStat; - if (mDefaultIsoDepRoute != NFC_DH_ID) { + if (mDefaultIsoDepRoute != NFC_DH_ID && + isTypeATypeBTechSupportedInEe(mDefaultIsoDepRoute)) { nfaStat = NFA_EeClearDefaultProtoRouting(mDefaultIsoDepRoute, protoMask); nfaStat = NFA_EeSetDefaultProtoRouting( mDefaultIsoDepRoute, protoMask, mSecureNfcEnabled ? 0 : protoMask, 0, @@ -625,6 +658,12 @@ void RoutingManager::updateDefaultRoute() { // Register zero lengthy Aid for default Aid Routing if (mDefaultEe != mDefaultIsoDepRoute) { + if ((mDefaultEe != NFC_DH_ID) && + (!isTypeATypeBTechSupportedInEe(mDefaultEe))) { + DLOG_IF(INFO, nfc_debug_enabled) + << fn << ": mDefaultEE Doesn't support either Tech A/B. Returning..."; + return; + } uint8_t powerState = 0x01; if (!mSecureNfcEnabled) powerState = (mDefaultEe != 0x00) ? mOffHostAidRoutingPowerState : 0x11; diff --git a/nci/jni/RoutingManager.h b/nci/jni/RoutingManager.h index 92815bd8..9b998287 100755 --- a/nci/jni/RoutingManager.h +++ b/nci/jni/RoutingManager.h @@ -62,6 +62,7 @@ class RoutingManager { tNFA_TECHNOLOGY_MASK updateEeTechRouteSetting(); void updateDefaultProtocolRoute(); void updateDefaultRoute(); + bool isTypeATypeBTechSupportedInEe(tNFA_HANDLE eeHandle); // See AidRoutingManager.java for corresponding // AID_MATCHING_ constants |