Update dm_disc_poll/listen_mask_dfl in nfa_dm_act_change_discovery_tech()
nfa_dm_get_tech_route_block() is called before
nfa_dm_get_rf_discover_config(), meaning the value of
dm_disc_poll/listen_mask_dfl might not be up to date when used.
Bug: 374687433
Test: manual
Change-Id: I45df200a0bc078372177b7bdd648d58afc6908ae
diff --git a/libnfc-nci/src/nfa/dm/nfa_dm_act.cc b/libnfc-nci/src/nfa/dm/nfa_dm_act.cc
index dd4ec60..7afcafb 100644
--- a/libnfc-nci/src/nfa/dm/nfa_dm_act.cc
+++ b/libnfc-nci/src/nfa/dm/nfa_dm_act.cc
@@ -50,6 +50,9 @@
#define NFA_DM_DISABLE_TIMEOUT_VAL 1000
#endif
+extern tNFA_TECHNOLOGY_MASK dm_disc_listen_mask_dfl;
+extern tNFA_TECHNOLOGY_MASK dm_disc_poll_mask_dfl;
+
static void nfa_dm_set_init_nci_params(void);
static tNFA_STATUS nfa_dm_start_polling(void);
static bool nfa_dm_deactivate_polling(void);
@@ -1724,6 +1727,22 @@
nfa_dm_cb.change_poll_mask = p_data->change_discovery_tech.change_poll_mask;
nfa_dm_cb.change_listen_mask =
p_data->change_discovery_tech.change_listen_mask;
+
+ if (nfa_dm_cb.flags & NFA_DM_FLAGS_DEFAULT_TECH_CHANGED) {
+ if (nfa_dm_cb.flags & NFA_DM_FLAGS_LISTEN_TECH_CHANGED) {
+ dm_disc_listen_mask_dfl = nfa_dm_cb.change_listen_mask;
+ } else if (nfa_dm_cb.change_listen_mask == 0xff) {
+ dm_disc_listen_mask_dfl = 0;
+ }
+ LOG(DEBUG) << StringPrintf("%s; dm_disc_listen_mask_dfl: 0x%x", __func__,
+ dm_disc_listen_mask_dfl);
+ if (nfa_dm_cb.flags & NFA_DM_FLAGS_POLL_TECH_CHANGED) {
+ dm_disc_poll_mask_dfl = nfa_dm_cb.change_poll_mask;
+ } else if (nfa_dm_cb.change_poll_mask == 0xff) {
+ dm_disc_poll_mask_dfl = 0;
+ }
+ }
+
evt_data.status = NFA_STATUS_OK;
nfa_dm_conn_cback_event_notify(NFA_LISTEN_ENABLED_EVT, &evt_data);
diff --git a/libnfc-nci/src/nfa/dm/nfa_dm_discover.cc b/libnfc-nci/src/nfa/dm/nfa_dm_discover.cc
index 13fa63d..285b090 100644
--- a/libnfc-nci/src/nfa/dm/nfa_dm_discover.cc
+++ b/libnfc-nci/src/nfa/dm/nfa_dm_discover.cc
@@ -68,8 +68,8 @@
/*
** static parameters
*/
-static tNFA_TECHNOLOGY_MASK dm_disc_listen_mask_dfl = 0;
-static tNFA_TECHNOLOGY_MASK dm_disc_poll_mask_dfl = 0;
+tNFA_TECHNOLOGY_MASK dm_disc_listen_mask_dfl = 0;
+tNFA_TECHNOLOGY_MASK dm_disc_poll_mask_dfl = 0;
tNFA_DM_DISC_TECH_PROTO_MASK nfa_dm_change_listen_mask(
tNFA_DM_DISC_TECH_PROTO_MASK dm_disc_mask,
@@ -162,19 +162,6 @@
dm_disc_mask &= NFA_DM_DISC_MASK_POLL;
}
- if (nfa_dm_cb.flags & NFA_DM_FLAGS_DEFAULT_TECH_CHANGED) {
- if (nfa_dm_cb.flags & NFA_DM_FLAGS_LISTEN_TECH_CHANGED) {
- dm_disc_listen_mask_dfl = nfa_dm_cb.change_listen_mask;
- } else if (nfa_dm_cb.change_listen_mask == 0xff) {
- dm_disc_listen_mask_dfl = 0;
- }
- if (nfa_dm_cb.flags & NFA_DM_FLAGS_POLL_TECH_CHANGED) {
- dm_disc_poll_mask_dfl = nfa_dm_cb.change_poll_mask;
- } else if (nfa_dm_cb.change_poll_mask == 0xff) {
- dm_disc_poll_mask_dfl = 0;
- }
- }
-
if (nfa_dm_cb.flags & NFA_DM_FLAGS_LISTEN_TECH_CHANGED) {
dm_disc_mask =
nfa_dm_change_listen_mask(dm_disc_mask, nfa_dm_cb.change_listen_mask);