summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSherry Smith <sherrys@broadcom.com>2013-10-01 18:06:48 -0700
committerMartijn Coenen <maco@google.com>2014-09-10 21:00:36 -0700
commit58268861a9aee36b541b6534c341657fb221c2f2 (patch)
tree38b7e77bfb9154fa34821d8126f683829fb21547
parentc517d0ed11a775fd7d102ec2d0345275e7ecf71a (diff)
downloadlibnfc-nci-58268861a9aee36b541b6534c341657fb221c2f2.tar.gz
If wildcard AID is registered, always use NFA_CE_DEACTIVATED_EVT.
Fixes an issue where activation is done by an NFA_CE_DEACTIVATED_EVT, but deactivation is done by NFA_DEACTIVATED_EVT (no _CE_). Bug: 16517161 Change-Id: Ic84b54b25e7487efc47bdeb31a290abfcc07634f
-rw-r--r--src/nfa/ce/nfa_ce_act.c27
-rw-r--r--src/nfa/ce/nfa_ce_main.c1
-rw-r--r--src/nfa/int/nfa_ce_int.h1
-rw-r--r--src/nfc/include/ce_api.h1
-rw-r--r--src/nfc/int/ce_int.h1
5 files changed, 24 insertions, 7 deletions
diff --git a/src/nfa/ce/nfa_ce_act.c b/src/nfa/ce/nfa_ce_act.c
index 5b3b1d9..ba09125 100644
--- a/src/nfa/ce/nfa_ce_act.c
+++ b/src/nfa/ce/nfa_ce_act.c
@@ -934,12 +934,21 @@ BOOLEAN nfa_ce_deactivate_ntf (tNFA_CE_MSG *p_ce_msg)
if ( (deact_type == NFC_DEACTIVATE_TYPE_SLEEP)
||(deact_type == NFC_DEACTIVATE_TYPE_SLEEP_AF) )
{
- /* notify deactivated as sleep and wait for reactivation or deactivation to idle */
- conn_evt.deactivated.type = deact_type;
+ if ( nfa_ce_cb.idx_wild_card == NFA_CE_LISTEN_INFO_IDX_INVALID)
+ {
+ /* notify deactivated as sleep and wait for reactivation or deactivation to idle */
+ conn_evt.deactivated.type = deact_type;
- /* if T4T AID application has not been selected then p_active_conn_cback could be NULL */
- if (p_cb->p_active_conn_cback)
- (*p_cb->p_active_conn_cback) (NFA_DEACTIVATED_EVT, &conn_evt);
+ /* if T4T AID application has not been selected then p_active_conn_cback could be NULL */
+ if (p_cb->p_active_conn_cback)
+ (*p_cb->p_active_conn_cback) (NFA_DEACTIVATED_EVT, &conn_evt);
+ }
+ else
+ {
+ conn_evt.ce_deactivated.handle = NFA_HANDLE_GROUP_CE | ((tNFA_HANDLE)nfa_ce_cb.idx_wild_card);
+ conn_evt.ce_deactivated.type = deact_type;
+ (*p_cb->p_active_conn_cback) (NFA_CE_DEACTIVATED_EVT, &conn_evt);
+ }
return TRUE;
}
@@ -1226,7 +1235,7 @@ BOOLEAN nfa_ce_api_reg_listen (tNFA_CE_MSG *p_ce_msg)
/* Register this AID with CE_T4T */
if ((p_cb->listen_info[listen_info_idx].t4t_aid_handle = CE_T4tRegisterAID (p_ce_msg->reg_listen.aid_len,
p_ce_msg->reg_listen.aid,
- nfa_ce_handle_t4t_aid_evt)) == 0xFF)
+ nfa_ce_handle_t4t_aid_evt)) == CE_T4T_AID_HANDLE_INVALID)
{
NFA_TRACE_ERROR0 ("Unable to register AID");
p_cb->listen_info[listen_info_idx].flags = 0;
@@ -1238,6 +1247,8 @@ BOOLEAN nfa_ce_api_reg_listen (tNFA_CE_MSG *p_ce_msg)
return TRUE;
}
+ if (p_cb->listen_info[listen_info_idx].t4t_aid_handle == CE_T4T_WILDCARD_AID_HANDLE)
+ nfa_ce_cb.idx_wild_card = listen_info_idx;
break;
case NFA_CE_REG_TYPE_FELICA:
@@ -1347,6 +1358,10 @@ BOOLEAN nfa_ce_api_dereg_listen (tNFA_CE_MSG *p_ce_msg)
{
/* Deregistering virtual secure element listen */
listen_info_idx = p_ce_msg->dereg_listen.handle & NFA_HANDLE_MASK;
+ if (nfa_ce_cb.idx_wild_card == listen_info_idx)
+ {
+ nfa_ce_cb.idx_wild_card = NFA_CE_LISTEN_INFO_IDX_INVALID;
+ }
if ( (listen_info_idx < NFA_CE_LISTEN_INFO_MAX)
&&(p_cb->listen_info[listen_info_idx].flags & NFA_CE_LISTEN_INFO_IN_USE))
diff --git a/src/nfa/ce/nfa_ce_main.c b/src/nfa/ce/nfa_ce_main.c
index 7c85ae9..0ca541c 100644
--- a/src/nfa/ce/nfa_ce_main.c
+++ b/src/nfa/ce/nfa_ce_main.c
@@ -86,6 +86,7 @@ void nfa_ce_init (void)
nfa_ce_t3t_generate_rand_nfcid (nfa_ce_cb.listen_info[NFA_CE_LISTEN_INFO_IDX_NDEF].t3t_nfcid2);
nfa_ce_cb.listen_info[NFA_CE_LISTEN_INFO_IDX_NDEF].rf_disc_handle = NFA_HANDLE_INVALID;
nfa_ce_cb.isodep_disc_mask = NFA_CE_DEFAULT_ISODEP_DISC_MASK;
+ nfa_ce_cb.idx_wild_card = NFA_CE_LISTEN_INFO_IDX_INVALID;
/* register message handler on NFA SYS */
nfa_sys_register ( NFA_ID_CE, &nfa_ce_sys_reg);
diff --git a/src/nfa/int/nfa_ce_int.h b/src/nfa/int/nfa_ce_int.h
index 374e7b8..a9d3520 100644
--- a/src/nfa/int/nfa_ce_int.h
+++ b/src/nfa/int/nfa_ce_int.h
@@ -179,6 +179,7 @@ typedef struct
/* listen_info table (table of listen paramters and app callbacks) */
tNFA_CE_LISTEN_INFO listen_info[NFA_CE_LISTEN_INFO_MAX];/* listen info table */
UINT8 idx_cur_active; /* listen_info index for currently activated CE */
+ UINT8 idx_wild_card; /* listen_info index for T4T wild card CE */
tNFA_DM_DISC_TECH_PROTO_MASK isodep_disc_mask; /* the technology/protocol mask for ISO-DEP */
diff --git a/src/nfc/include/ce_api.h b/src/nfc/include/ce_api.h
index 65d1a0d..052b1e4 100644
--- a/src/nfc/include/ce_api.h
+++ b/src/nfc/include/ce_api.h
@@ -87,6 +87,7 @@ typedef void (tCE_CBACK) (tCE_EVENT event, tCE_DATA *p_data);
/* T4T definitions */
typedef UINT8 tCE_T4T_AID_HANDLE; /* Handle for AID registration */
#define CE_T4T_AID_HANDLE_INVALID 0xFF /* Invalid tCE_T4T_AID_HANDLE */
+#define CE_T4T_WILDCARD_AID_HANDLE (CE_T4T_MAX_REG_AID) /* reserved handle for wildcard aid */
/*******************************************************************************
**
diff --git a/src/nfc/int/ce_int.h b/src/nfc/int/ce_int.h
index de52dac..9f4efe2 100644
--- a/src/nfc/int/ce_int.h
+++ b/src/nfc/int/ce_int.h
@@ -111,7 +111,6 @@ typedef struct
UINT8 selected_aid_idx;
} tCE_T4T_MEM;
-#define CE_T4T_WILDCARD_AID_HANDLE (CE_T4T_MAX_REG_AID) /* reserved handle for wildcard aid */
/* CE memory control blocks */
typedef struct