1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************
2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
3e9629bad30a9f478b336ab46b8e6e02f7f87af46Evan Chu *  Copyright (C) 2011-2014 Broadcom Corporation
4e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
5e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the "License");
6e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  you may not use this file except in compliance with the License.
7e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  You may obtain a copy of the License at:
8e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
9e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  http://www.apache.org/licenses/LICENSE-2.0
10e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
11e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  See the License for the specific language governing permissions and
15e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  limitations under the License.
16e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
17e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/
18e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
195c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen
20e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************
21e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  NFA interface for card emulation
23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/
25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include <string.h>
26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_api.h"
27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_sys.h"
28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_ce_int.h"
29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_sys_int.h"
30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         nfa_ce_api_deregister_listen
35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Internal function called by listening for Felica system
37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  code, ISO-DEP AID, or UICC technology
38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns:
40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_OK,            if command accepted
41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_BAD_HANDLE     invalid handle
42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED:        otherwise
43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS nfa_ce_api_deregister_listen (tNFA_HANDLE handle, UINT32 listen_info)
46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_CE_MSG      *p_ce_msg;
48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Validate handle */
50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (  (listen_info != NFA_CE_LISTEN_INFO_UICC)
51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        &&((handle & NFA_HANDLE_GROUP_MASK) != NFA_HANDLE_GROUP_CE)  )
52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        NFA_TRACE_ERROR0 ("nfa_ce_api_reregister_listen: Invalid handle");
54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_BAD_HANDLE);
55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if ((p_ce_msg = (tNFA_CE_MSG *) GKI_getbuf ((UINT16) (sizeof (tNFA_CE_MSG)))) != NULL)
58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_ce_msg->hdr.event                     = NFA_CE_API_DEREG_LISTEN_EVT;
60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_ce_msg->dereg_listen.handle           = handle;
61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_ce_msg->dereg_listen.listen_info      = listen_info;
62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_sys_sendmsg (p_ce_msg);
64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_OK);
66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    else
68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        NFA_TRACE_ERROR0 ("nfa_ce_api_reregister_listen: Out of buffers");
70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_FAILED);
71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*****************************************************************************
75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**  APIs
76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/
77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_CeConfigureLocalTag
81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Configure local NDEF tag.
83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  Tag events will be notifed using the tNFA_CONN_CBACK
85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  (registered during NFA_Enable)
86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  The NFA_CE_LOCAL_TAG_CONFIGURED_EVT reports the status of the
88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  operation.
89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  Activation and deactivation are reported using the
91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_ACTIVATED_EVT and NFA_DEACTIVATED_EVT events
92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  If a write-request is received to update the tag memory,
94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  an NFA_CE_NDEF_WRITE_CPLT_EVT will notify the application, along
95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  with a buffer containing the updated contents.
96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
97e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  To disable the local NDEF tag, set protocol_mask=0
98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
99e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  The NDEF data provided by p_ndef_data must be persistent
100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  as long as the local NDEF tag is enabled.
101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
1045c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen**                  should happen before calling this function. Also, Input parameters p_uid and
1055c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen**                  uid_len are reserved for future use.
106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns:
108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_OK,            if command accepted
109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_INVALID_PARAM,
110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                      if protocol_maks is not 0 and p_ndef_data is NULL
1115c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen**                  (or)uid_len is not 0
1125c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen**                  (or)if protocol mask is set for Type 1 or Type 2
113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED:        otherwise
115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_CeConfigureLocalTag (tNFA_PROTOCOL_MASK protocol_mask,
118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                     UINT8     *p_ndef_data,
119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                     UINT16    ndef_cur_size,
120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                     UINT16    ndef_max_size,
121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                     BOOLEAN   read_only,
122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                     UINT8     uid_len,
123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                     UINT8     *p_uid)
124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_CE_MSG *p_msg;
127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_API0 ("NFA_CeConfigureLocalTag ()");
129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (protocol_mask)
131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* If any protocols are specified, then NDEF buffer pointer must be non-NULL */
133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (p_ndef_data == NULL)
134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            NFA_TRACE_ERROR0 ("NFA_CeConfigureLocalTag: NULL ndef data pointer");
136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            return (NFA_STATUS_INVALID_PARAM);
137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1395c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen        if ((protocol_mask & NFA_PROTOCOL_MASK_T1T) || (protocol_mask & NFA_PROTOCOL_MASK_T2T))
140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
1415c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen            NFA_TRACE_ERROR0 ("NFA_CeConfigureLocalTag: Cannot emulate Type 1 / Type 2 tag");
142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            return (NFA_STATUS_INVALID_PARAM);
143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1455c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen        if (uid_len)
146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        {
147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            NFA_TRACE_ERROR1 ("NFA_CeConfigureLocalTag: Cannot Set UID for Protocol_mask: 0x%x", protocol_mask);
148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            return (NFA_STATUS_INVALID_PARAM);
149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        }
150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if ((p_msg = (tNFA_CE_MSG *) GKI_getbuf ((UINT16) sizeof(tNFA_CE_MSG))) != NULL)
152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->local_tag.hdr.event = NFA_CE_API_CFG_LOCAL_TAG_EVT;
154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* Copy ndef info */
156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->local_tag.protocol_mask  = protocol_mask;
157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->local_tag.p_ndef_data    = p_ndef_data;
158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->local_tag.ndef_cur_size  = ndef_cur_size;
159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->local_tag.ndef_max_size  = ndef_max_size;
160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->local_tag.read_only      = read_only;
161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->local_tag.uid_len        = uid_len;
162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        if (uid_len)
164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project            memcpy (p_msg->local_tag.uid, p_uid, uid_len);
165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_sys_sendmsg (p_msg);
167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_OK);
169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (NFA_STATUS_FAILED);
172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_CeConfigureUiccListenTech
178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Configure listening for the UICC, using the specified
180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  technologies.
181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  Events will be notifed using the tNFA_CONN_CBACK
183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  (registered during NFA_Enable)
184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  The NFA_CE_UICC_LISTEN_CONFIGURED_EVT reports the status of the
186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  operation.
187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  Activation and deactivation are reported using the
189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_ACTIVATED_EVT and NFA_DEACTIVATED_EVT events
190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  should happen before calling this function
193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns:
195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_OK, if command accepted
196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED: otherwise
197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_CeConfigureUiccListenTech (tNFA_HANDLE ee_handle,
200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                           tNFA_TECHNOLOGY_MASK tech_mask)
201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_NFCEE_INCLUDED == TRUE)
203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_CE_MSG *p_msg;
204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_API1 ("NFA_CeConfigureUiccListenTech () ee_handle = 0x%x", ee_handle);
206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* If tech_mask is zero, then app is disabling listening for specified uicc */
208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (tech_mask == 0)
209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (nfa_ce_api_deregister_listen (ee_handle, NFA_CE_LISTEN_INFO_UICC));
211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Otherwise then app is configuring uicc listen for the specificed technologies */
214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if ((p_msg = (tNFA_CE_MSG *) GKI_getbuf ((UINT16) sizeof(tNFA_CE_MSG))) != NULL)
215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->reg_listen.hdr.event   = NFA_CE_API_REG_LISTEN_EVT;
217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->reg_listen.listen_type = NFA_CE_REG_TYPE_UICC;
218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->reg_listen.ee_handle   = ee_handle;
220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->reg_listen.tech_mask   = tech_mask;
221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_sys_sendmsg (p_msg);
223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_OK);
225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else
227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_ERROR0 ("NFA_CeConfigureUiccListenTech () NFCEE related functions are not enabled!");
228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (NFA_STATUS_FAILED);
230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_CeRegisterFelicaSystemCodeOnDH
235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Register listening callback for Felica system code
237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  The NFA_CE_REGISTERED_EVT reports the status of the
239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  operation.
240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  should happen before calling this function
243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns:
245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_OK, if command accepted
246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED: otherwise
247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_CeRegisterFelicaSystemCodeOnDH (UINT16 system_code,
250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                                UINT8 nfcid2[NCI_RF_F_UID_LEN],
251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                                tNFA_CONN_CBACK *p_conn_cback)
252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_CE_MSG *p_msg;
254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_API0 ("NFA_CeRegisterFelicaSystemCodeOnDH ()");
256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Validate parameters */
258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (p_conn_cback==NULL)
259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_INVALID_PARAM);
260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if ((p_msg = (tNFA_CE_MSG *) GKI_getbuf ((UINT16) sizeof(tNFA_CE_MSG))) != NULL)
262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->reg_listen.hdr.event = NFA_CE_API_REG_LISTEN_EVT;
264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->reg_listen.p_conn_cback = p_conn_cback;
265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->reg_listen.listen_type = NFA_CE_REG_TYPE_FELICA;
266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* Listen info */
268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        memcpy (p_msg->reg_listen.nfcid2, nfcid2, NCI_RF_F_UID_LEN);
269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->reg_listen.system_code = system_code;
270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_sys_sendmsg (p_msg);
272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_OK);
274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (NFA_STATUS_FAILED);
277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_CeDeregisterFelicaSystemCodeOnDH
282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Deregister listening callback for Felica
284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  (previously registered using NFA_CeRegisterFelicaSystemCodeOnDH)
285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  The NFA_CE_DEREGISTERED_EVT reports the status of the
287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  operation.
288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  should happen before calling this function
291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_BAD_HANDLE if invalid handle
294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
297e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_CeDeregisterFelicaSystemCodeOnDH (tNFA_HANDLE handle)
298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_API1 ("NFA_CeDeregisterFelicaSystemCodeOnDH (): handle:0x%X", handle);
300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (nfa_ce_api_deregister_listen (handle, NFA_CE_LISTEN_INFO_FELICA));
301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_CeRegisterAidOnDH
306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Register listening callback for the specified ISODEP AID
308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  The NFA_CE_REGISTERED_EVT reports the status of the
310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  operation.
311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  If no AID is specified (aid_len=0), then p_conn_cback will
313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  will get notifications for any AIDs routed to the DH. This
314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  over-rides callbacks registered for specific AIDs.
315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  should happen before calling this function
318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns:
320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_OK, if command accepted
321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED: otherwise
322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_CeRegisterAidOnDH (UINT8 aid[NFC_MAX_AID_LEN],
325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                         UINT8           aid_len,
326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project                                         tNFA_CONN_CBACK *p_conn_cback)
327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_CE_MSG *p_msg;
329e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_API0 ("NFA_CeRegisterAidOnDH ()");
331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /* Validate parameters */
333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (p_conn_cback==NULL)
334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_INVALID_PARAM);
335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if ((p_msg = (tNFA_CE_MSG *) GKI_getbuf ((UINT16) sizeof(tNFA_CE_MSG))) != NULL)
337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->reg_listen.hdr.event = NFA_CE_API_REG_LISTEN_EVT;
339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->reg_listen.p_conn_cback = p_conn_cback;
340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->reg_listen.listen_type = NFA_CE_REG_TYPE_ISO_DEP;
341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        /* Listen info */
343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        memcpy (p_msg->reg_listen.aid, aid, aid_len);
344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->reg_listen.aid_len = aid_len;
345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_sys_sendmsg (p_msg);
347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_OK);
349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (NFA_STATUS_FAILED);
352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_CeDeregisterAidOnDH
357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Deregister listening callback for ISODEP AID
359e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  (previously registered using NFA_CeRegisterAidOnDH)
360e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
361e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  The NFA_CE_DEREGISTERED_EVT reports the status of the
362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  operation.
363e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
364e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
365e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  should happen before calling this function
366e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
367e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns          NFA_STATUS_OK if successfully initiated
368e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_BAD_HANDLE if invalid handle
369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED otherwise
370e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
371e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
372e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_CeDeregisterAidOnDH (tNFA_HANDLE handle)
373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
374e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_API1 ("NFA_CeDeregisterAidOnDH (): handle:0x%X", handle);
375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (nfa_ce_api_deregister_listen (handle, NFA_CE_LISTEN_INFO_T4T_AID));
376e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
377e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
378e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*******************************************************************************
379e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function         NFA_CeSetIsoDepListenTech
381e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
382e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description      Set the technologies (NFC-A and/or NFC-B) to listen for when
383e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_CeConfigureLocalTag or NFA_CeDeregisterAidOnDH are called.
384e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
385e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  By default (if this API is not called), NFA will listen
386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  for both NFC-A and NFC-B for ISODEP.
387e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
388e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Note:            If listening for ISODEP on UICC, the DH listen callbacks
389e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  may still get activate notifications for ISODEP if the reader/
390e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  writer selects an AID that is not routed to the UICC (regardless
391e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  of whether A or B was disabled using NFA_CeSetIsoDepListenTech)
392e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
394e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  should happen before calling this function
395e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
396e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns:
397e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_OK, if command accepted
398e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**                  NFA_STATUS_FAILED: otherwise
399e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/
401e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_CeSetIsoDepListenTech (tNFA_TECHNOLOGY_MASK tech_mask)
402e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_CE_MSG *p_msg;
404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    tNFA_TECHNOLOGY_MASK    use_mask = (NFA_TECHNOLOGY_MASK_A | NFA_TECHNOLOGY_MASK_B);
405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    NFA_TRACE_API1 ("NFA_CeSetIsoDepListenTech (): 0x%x", tech_mask);
407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if (((tech_mask & use_mask) == 0) ||
408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        ((tech_mask & ~use_mask) != 0) )
409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        NFA_TRACE_ERROR0 ("NFA_CeSetIsoDepListenTech: Invalid technology mask");
411e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_INVALID_PARAM);
412e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    if ((p_msg = (tNFA_CE_MSG *) GKI_getbuf ((UINT16) sizeof(tNFA_CE_MSG))) != NULL)
415e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    {
416e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->hdr.event            = NFA_CE_API_CFG_ISODEP_TECH_EVT;
417e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        p_msg->hdr.layer_specific   = tech_mask;
418e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
419e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        nfa_sys_sendmsg (p_msg);
420e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
421e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project        return (NFA_STATUS_OK);
422e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    }
423e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
424e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    return (NFA_STATUS_FAILED);
425e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
426e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
427