diff options
author | Sherry Smith <sherrys@broadcom.com> | 2013-10-01 18:06:48 -0700 |
---|---|---|
committer | Martijn Coenen <maco@google.com> | 2014-09-10 21:00:36 -0700 |
commit | 58268861a9aee36b541b6534c341657fb221c2f2 (patch) | |
tree | 38b7e77bfb9154fa34821d8126f683829fb21547 | |
parent | c517d0ed11a775fd7d102ec2d0345275e7ecf71a (diff) | |
download | libnfc-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.c | 27 | ||||
-rw-r--r-- | src/nfa/ce/nfa_ce_main.c | 1 | ||||
-rw-r--r-- | src/nfa/int/nfa_ce_int.h | 1 | ||||
-rw-r--r-- | src/nfc/include/ce_api.h | 1 | ||||
-rw-r--r-- | src/nfc/int/ce_int.h | 1 |
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 |