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