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