Snap for 4818534 from dd72dbf6d5186eece10d5eb0303f2e0da89e35cb to pi-release
Change-Id: Id698c7280eedb3f8d2973e0b22661f5157b3f41d
diff --git a/src/include/nci_defs.h b/src/include/nci_defs.h
index 67a9afb..3cbe41b 100644
--- a/src/include/nci_defs.h
+++ b/src/include/nci_defs.h
@@ -275,6 +275,7 @@
/****************************************************
* NCI NFCEE INterface specific status Codes
****************************************************/
+#define NCI_NFCEE_STS_UNRECOVERABLE_ERROR 0x00
#define NCI_NFCEE_STS_INTF_ACTIVATION_FAILED 0xC0
#define NCI_NFCEE_STS_TRANSMISSION_ERROR 0xC1
#define NCI_NFCEE_STS_PROTOCOL_ERROR 0xC2
diff --git a/src/include/nfc_config.h b/src/include/nfc_config.h
index 2e00216..c3687d9 100644
--- a/src/include/nfc_config.h
+++ b/src/include/nfc_config.h
@@ -35,6 +35,7 @@
#define NAME_NFA_AID_BLOCK_ROUTE "NFA_AID_BLOCK_ROUTE"
#define NAME_AID_FOR_EMPTY_SELECT "AID_FOR_EMPTY_SELECT"
#define NAME_AID_MATCHING_MODE "AID_MATCHING_MODE"
+#define NAME_OFFHOST_AID_ROUTE_PWR_STATE "OFFHOST_AID_ROUTE_PWR_STATE"
/* Configs from vendor interface */
#define NAME_NFA_POLL_BAIL_OUT_MODE "NFA_POLL_BAIL_OUT_MODE"
diff --git a/src/nfa/dm/nfa_dm_act.cc b/src/nfa/dm/nfa_dm_act.cc
index 417fb95..59d55a6 100644
--- a/src/nfa/dm/nfa_dm_act.cc
+++ b/src/nfa/dm/nfa_dm_act.cc
@@ -339,6 +339,7 @@
case NFC_NFCEE_INFO_REVT: /* NFCEE Discover Notification */
case NFC_EE_ACTION_REVT: /* EE Action notification */
case NFC_NFCEE_MODE_SET_REVT: /* NFCEE Mode Set response */
+ case NFC_NFCEE_STATUS_REVT: /* NFCEE Status notification*/
case NFC_SET_ROUTING_REVT: /* Configure Routing response */
nfa_ee_proc_evt(event, p_data);
break;
@@ -1851,6 +1852,8 @@
return "NFC_NFCC_TRANSPORT_ERR_REVT";
case NFC_NFCC_POWER_OFF_REVT:
return "NFC_NFCC_POWER_OFF_REVT";
+ case NFC_NFCEE_STATUS_REVT:
+ return "NFC_NFCEE_STATUS_REVT";
default:
return "unknown revt";
}
diff --git a/src/nfa/ee/nfa_ee_act.cc b/src/nfa/ee/nfa_ee_act.cc
index 743034d..7b572ec 100644
--- a/src/nfa/ee/nfa_ee_act.cc
+++ b/src/nfa/ee/nfa_ee_act.cc
@@ -29,6 +29,7 @@
#include "nfa_api.h"
#include "nfa_dm_int.h"
#include "nfa_ee_int.h"
+#include "nfa_hci_int.h"
using android::base::StringPrintf;
@@ -885,12 +886,12 @@
return;
}
- p_cb->tech_switch_on = p_data->set_tech.technologies_switch_on;
- p_cb->tech_switch_off = p_data->set_tech.technologies_switch_off;
- p_cb->tech_battery_off = p_data->set_tech.technologies_battery_off;
- p_cb->tech_screen_lock = p_data->set_tech.technologies_screen_lock;
- p_cb->tech_screen_off = p_data->set_tech.technologies_screen_off;
- p_cb->tech_screen_off_lock = p_data->set_tech.technologies_screen_off_lock;
+ p_cb->tech_switch_on |= p_data->set_tech.technologies_switch_on;
+ p_cb->tech_switch_off |= p_data->set_tech.technologies_switch_off;
+ p_cb->tech_battery_off |= p_data->set_tech.technologies_battery_off;
+ p_cb->tech_screen_lock |= p_data->set_tech.technologies_screen_lock;
+ p_cb->tech_screen_off |= p_data->set_tech.technologies_screen_off;
+ p_cb->tech_screen_off_lock |= p_data->set_tech.technologies_screen_off_lock;
nfa_ee_update_route_size(p_cb);
if (nfa_ee_total_lmrt_size() > NFC_GetLmrtSize()) {
LOG(ERROR) << StringPrintf("nfa_ee_api_set_tech_cfg Exceed LMRT size");
@@ -1506,6 +1507,9 @@
NFA_EeGetInfo(&evt_data.ee_discover.num_ee, evt_data.ee_discover.ee_info);
nfa_ee_report_event(p_cback, NFA_EE_DISCOVER_EVT, &evt_data);
}
+ if ((nfa_hci_cb.hci_state == NFA_HCI_STATE_EE_RECOVERY) &&
+ nfa_ee_cb.p_enable_cback)
+ (*nfa_ee_cb.p_enable_cback)(NFA_EE_RECOVERY_REDISCOVERED);
}
}
@@ -1814,6 +1818,29 @@
/*******************************************************************************
**
+** Function nfa_ee_nci_nfcee_status_ntf
+**
+** Description Process the callback for NFCEE status notification
+**
+** Returns void
+**
+*******************************************************************************/
+void nfa_ee_nci_nfcee_status_ntf(tNFA_EE_MSG* p_data) {
+ if (p_data != NULL) {
+ tNFC_NFCEE_STATUS_REVT* p_ee_data = p_data->nfcee_status_ntf.p_data;
+ if ((NFA_GetNCIVersion() == NCI_VERSION_2_0) &&
+ (p_ee_data->nfcee_status == NFC_NFCEE_STATUS_UNRECOVERABLE_ERROR)) {
+ tNFA_EE_ECB* p_cb = nfa_ee_find_ecb(p_ee_data->nfcee_id);
+ if (p_cb && nfa_ee_cb.p_enable_cback) {
+ (*nfa_ee_cb.p_enable_cback)(NFA_EE_RECOVERY_INIT);
+ NFC_NfceeDiscover(true);
+ }
+ }
+ }
+}
+
+/*******************************************************************************
+**
** Function nfa_ee_check_restore_complete
**
** Description Check if restore the NFA-EE related configuration to the
@@ -1945,8 +1972,11 @@
return;
}
- /* update routing table and vs on mode change */
- nfa_ee_start_timer();
+ /* Do not update routing table in EE_RECOVERY state */
+ if (nfa_hci_cb.hci_state != NFA_HCI_STATE_EE_RECOVERY) {
+ /* Start routing table update debounce timer */
+ nfa_ee_start_timer();
+ }
LOG(ERROR) << StringPrintf("%s p_rsp->status:0x%02x", __func__,
p_rsp->status);
if (p_rsp->status == NFA_STATUS_OK) {
diff --git a/src/nfa/ee/nfa_ee_main.cc b/src/nfa/ee/nfa_ee_main.cc
index d635338..259bcba 100644
--- a/src/nfa/ee/nfa_ee_main.cc
+++ b/src/nfa/ee/nfa_ee_main.cc
@@ -77,7 +77,8 @@
nfa_ee_nci_wait_rsp, /* NFA_EE_NCI_WAIT_RSP_EVT */
nfa_ee_rout_timeout, /* NFA_EE_ROUT_TIMEOUT_EVT */
nfa_ee_discv_timeout, /* NFA_EE_DISCV_TIMEOUT_EVT */
- nfa_ee_lmrt_to_nfcc /* NFA_EE_CFG_TO_NFCC_EVT */
+ nfa_ee_lmrt_to_nfcc, /* NFA_EE_CFG_TO_NFCC_EVT */
+ nfa_ee_nci_nfcee_status_ntf /*NFA_EE_NCI_NFCEE_STATUS_NTF_EVT*/
};
/*******************************************************************************
@@ -347,6 +348,10 @@
int_event = NFA_EE_NCI_WAIT_RSP_EVT;
cbk.opcode = NCI_MSG_RF_SET_ROUTING;
break;
+
+ case NFC_NFCEE_STATUS_REVT:
+ int_event = NFA_EE_NCI_NFCEE_STATUS_NTF_EVT;
+ break;
}
DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf(
diff --git a/src/nfa/hci/nfa_hci_main.cc b/src/nfa/hci/nfa_hci_main.cc
index 0ba7198..91aa89d 100644
--- a/src/nfa/hci/nfa_hci_main.cc
+++ b/src/nfa/hci/nfa_hci_main.cc
@@ -160,15 +160,22 @@
}
}
break;
+ case NFA_EE_RECOVERY_REDISCOVERED:
case NFA_EE_MODE_SET_COMPLETE:
/*received mode set Ntf */
if ((nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_NETWK_ENABLE) ||
- (nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE_NETWK_ENABLE)) {
+ (nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE_NETWK_ENABLE) ||
+ (nfa_hci_cb.hci_state == NFA_HCI_STATE_EE_RECOVERY)) {
/* Discovery operation is complete, retrieve discovery result */
NFA_EeGetInfo(&nfa_hci_cb.num_nfcee, nfa_hci_cb.ee_info);
nfa_hci_enable_one_nfcee();
}
break;
+ case NFA_EE_RECOVERY_INIT:
+ /*NFCEE recovery in progress*/
+ nfa_ee_cb.isDiscoveryStopped = nfa_dm_act_stop_rf_discovery(NULL);
+ nfa_hci_cb.hci_state = NFA_HCI_STATE_EE_RECOVERY;
+ break;
}
}
@@ -550,7 +557,16 @@
}
if (xx == nfa_hci_cb.num_nfcee) {
- nfa_hciu_send_get_param_cmd(NFA_HCI_ADMIN_PIPE, NFA_HCI_HOST_LIST_INDEX);
+ if ((nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_NETWK_ENABLE) ||
+ (nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE_NETWK_ENABLE)) {
+ nfa_hciu_send_get_param_cmd(NFA_HCI_ADMIN_PIPE, NFA_HCI_HOST_LIST_INDEX);
+ } else if (nfa_hci_cb.hci_state == NFA_HCI_STATE_EE_RECOVERY) {
+ nfa_hci_cb.hci_state = NFA_HCI_STATE_IDLE;
+ if (nfa_ee_cb.isDiscoveryStopped == true) {
+ nfa_dm_act_start_rf_discovery(NULL);
+ nfa_ee_cb.isDiscoveryStopped = false;
+ }
+ }
}
}
diff --git a/src/nfa/include/nfa_ee_int.h b/src/nfa/include/nfa_ee_int.h
index 2cd0507..5c933ab 100644
--- a/src/nfa/include/nfa_ee_int.h
+++ b/src/nfa/include/nfa_ee_int.h
@@ -73,6 +73,7 @@
NFA_EE_ROUT_TIMEOUT_EVT,
NFA_EE_DISCV_TIMEOUT_EVT,
NFA_EE_CFG_TO_NFCC_EVT,
+ NFA_EE_NCI_NFCEE_STATUS_NTF_EVT,
NFA_EE_MAX_EVT
};
@@ -378,6 +379,12 @@
tNFC_EE_DISCOVER_REQ_REVT* p_data;
} tNFA_EE_NCI_DISC_REQ;
+/* data type for NFA_EE_NCI_NFCEE_STATUS_EVT */
+typedef struct {
+ NFC_HDR hdr;
+ tNFC_NFCEE_STATUS_REVT* p_data;
+} tNFA_EE_NCI_NFCEE_STATUS_NTF;
+
/* union of all event data types */
typedef union {
NFC_HDR hdr;
@@ -403,6 +410,7 @@
tNFA_EE_NCI_CONN conn;
tNFA_EE_NCI_ACTION act;
tNFA_EE_NCI_DISC_REQ disc_req;
+ tNFA_EE_NCI_NFCEE_STATUS_NTF nfcee_status_ntf;
} tNFA_EE_MSG;
/* type for State Machine (SM) action functions */
@@ -447,6 +455,10 @@
#define NFA_EE_DISC_STS_REQ 0x02
/* received NFA_EE_MODE_SET_COMPLETE */
#define NFA_EE_MODE_SET_COMPLETE 0x03
+/* initialize EE_RECOVERY */
+#define NFA_EE_RECOVERY_INIT 0x04
+/* update ee config during EE_RECOVERY */
+#define NFA_EE_RECOVERY_REDISCOVERED 0x05
typedef uint8_t tNFA_EE_DISC_STS;
typedef void(tNFA_EE_ENABLE_DONE_CBACK)(tNFA_EE_DISC_STS status);
@@ -469,6 +481,7 @@
tNFA_EE_WAIT ee_wait_evt; /* Pending event(s) to be reported */
tNFA_EE_FLAGS ee_flags; /* flags */
uint8_t route_block_control; /* controls route block feature */
+ bool isDiscoveryStopped; /* discovery status */
} tNFA_EE_CB;
/* Order of Routing entries in Routing Table */
@@ -524,6 +537,7 @@
void nfa_ee_nci_disc_rsp(tNFA_EE_MSG* p_data);
void nfa_ee_nci_disc_ntf(tNFA_EE_MSG* p_data);
void nfa_ee_nci_mode_set_rsp(tNFA_EE_MSG* p_data);
+void nfa_ee_nci_nfcee_status_ntf(tNFA_EE_MSG* p_data);
void nfa_ee_nci_wait_rsp(tNFA_EE_MSG* p_data);
void nfa_ee_nci_conn(tNFA_EE_MSG* p_data);
void nfa_ee_nci_action_ntf(tNFA_EE_MSG* p_data);
diff --git a/src/nfa/include/nfa_hci_int.h b/src/nfa/include/nfa_hci_int.h
index 3001779..9158a4e 100644
--- a/src/nfa/include/nfa_hci_int.h
+++ b/src/nfa/include/nfa_hci_int.h
@@ -73,6 +73,8 @@
*/
#define NFA_HCI_STATE_RESTORE_NETWK_ENABLE 0x08
+#define NFA_HCI_STATE_EE_RECOVERY 0x09
+
typedef uint8_t tNFA_HCI_STATE;
/* NFA HCI PIPE states */
diff --git a/src/nfc/include/nfc_api.h b/src/nfc/include/nfc_api.h
index 3601867..c4a654e 100644
--- a/src/nfc/include/nfc_api.h
+++ b/src/nfc/include/nfc_api.h
@@ -266,6 +266,8 @@
uint8_t info[NFC_MAX_EE_INFO];
} tNFC_NFCEE_TLV;
+/* NFCEE unrecoverable error */
+#define NFC_NFCEE_STATUS_UNRECOVERABLE_ERROR NCI_NFCEE_STS_UNRECOVERABLE_ERROR
/* NFCEE connected and inactive */
#define NFC_NFCEE_STATUS_INACTIVE NCI_NFCEE_STS_CONN_INACTIVE
/* NFCEE connected and active */