summaryrefslogtreecommitdiff
path: root/nci
diff options
context:
space:
mode:
authoranil.hiranniah <anil.hiranniah@nxp.com>2020-12-23 00:32:42 +0530
committerAnil Hiranniah <anil.hiranniah@nxp.com>2021-11-02 06:58:13 +0000
commitbd9fd9ec0d458d5ad3cedca849b241d9e4b9fab7 (patch)
treef7b5e492a77d480d59aa953c88eed72bc3c35ddc /nci
parent9c15a16a467872db1d239fccced359479fd02768 (diff)
downloadNfc-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.cpp41
-rwxr-xr-xnci/jni/RoutingManager.h1
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