1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 35c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen * Copyright (C) 2010-2013 Broadcom Corporation 4e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 5e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 6e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * you may not use this file except in compliance with the License. 7e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * You may obtain a copy of the License at: 8e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 9e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 11e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * See the License for the specific language governing permissions and 15e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * limitations under the License. 16e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 17e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 18e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 195c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 20e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 21e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * NFA interface for tag Reader/Writer 23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include <string.h> 26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_api.h" 27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_sys.h" 28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_rw_int.h" 29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_sys_int.h" 30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/***************************************************************************** 32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Constants 33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/ 34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/***************************************************************************** 37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** APIs 38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/ 39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwDetectNDef 43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Perform the NDEF detection procedure using the appropriate 45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** method for the currently activated tag. 46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Upon successful completion of NDEF detection, a 48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_NDEF_DETECT_EVT will be sent, to notify the application 49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** of the NDEF attributes (NDEF total memory size, current 50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** size, etc.). 51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** It is not mandatory to call this function - NFA_RwReadNDef 53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** and NFA_RwWriteNDef will perform NDEF detection internally if 54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** not performed already. This API may be called to get a 55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** tag's NDEF size before issuing a write-request. 56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFC_STATUS_REFUSED if tag does not support NDEF 60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwDetectNDef (void) 64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API0 ("NFA_RwDetectNDef"); 68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL) 70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_DETECT_NDEF; 73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwReadNDef 85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Read NDEF message from tag. This function will internally 87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** perform the NDEF detection procedure (if not performed 88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** previously), and read the NDEF tag data using the 89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** appropriate method for the currently activated tag. 90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Upon successful completion of NDEF detection (if performed), 92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** a NFA_NDEF_DETECT_EVT will be sent, to notify the application 93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** of the NDEF attributes (NDEF total memory size, current size, 94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** etc.). 95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Upon receiving the NDEF message, the message will be sent to 97e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** the handler registered with NFA_RegisterNDefTypeHandler or 98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_RequestExclusiveRfControl (if exclusive RF mode is active) 99e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFC_STATUS_REFUSED if tag does not support NDEF 103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFC_STATUS_NOT_INITIALIZED if NULL NDEF was detected on the tag 104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwReadNDef (void) 108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API0 ("NFA_RwReadNDef"); 112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL) 114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_READ_NDEF; 117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwWriteNDef 131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Write NDEF data to the activated tag. This function will 133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** internally perform NDEF detection if necessary, and write 134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** the NDEF tag data using the appropriate method for the 135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** currently activated tag. 136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** When the entire message has been written, or if an error 138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** occurs, the app will be notified with NFA_WRITE_CPLT_EVT. 139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** p_data needs to be persistent until NFA_WRITE_CPLT_EVT 141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFC_STATUS_REFUSED if tag does not support NDEF/locked 146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwWriteNDef (UINT8 *p_data, UINT32 len) 150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API2 ("NFA_RwWriteNDef (): ndef p_data=%08x, len: %i", p_data, len); 154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Validate parameters */ 156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_data == NULL) 157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_INVALID_PARAM); 158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL) 160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_WRITE_NDEF; 163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.write_ndef.len = len; 164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.write_ndef.p_data = p_data; 165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/***************************************************************************** 174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwPresenceCheck 176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Check if the tag is still in the field. 178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** The NFA_RW_PRESENCE_CHECK_EVT w/ status is used to 180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** indicate presence or non-presence. 181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns 183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/ 187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwPresenceCheck (void) 188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API0 ("NFA_RwPresenceCheck"); 192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL) 194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_PRESENCE_CHECK; 197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/***************************************************************************** 207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwFormatTag 209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Check if the tag is NDEF Formatable. If yes Format the tag 211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** The NFA_RW_FORMAT_CPLT_EVT w/ status is used to 213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** indicate if tag is successfully formated or not 214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns 216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/ 220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwFormatTag (void) 221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API0 ("NFA_RwFormatTag"); 225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16)(sizeof (tNFA_RW_OPERATION)))) != NULL) 227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_FORMAT_TAG; 230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwSetTagReadOnly 242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: 244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Sets tag as read only. 245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** When tag is set as read only, or if an error occurs, the app will be 247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** notified with NFA_SET_TAG_RO_EVT. 248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_REJECTED if protocol is not T1/T2/ISO15693 252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** (or) if hard lock is not requested for protocol ISO15693 253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwSetTagReadOnly (BOOLEAN b_hard_lock) 257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_PROTOCOL protocol = nfa_rw_cb.protocol; 260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2615c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ((protocol != NFC_PROTOCOL_T1T) && (protocol != NFC_PROTOCOL_T2T) && (protocol != NFC_PROTOCOL_15693) && (protocol != NFC_PROTOCOL_ISO_DEP) && (protocol != NFC_PROTOCOL_T3T)) 262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_RwSetTagReadOnly (): Cannot Configure as read only for Protocol: %d", protocol); 264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_REJECTED); 265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2675c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( (!b_hard_lock && (protocol == NFC_PROTOCOL_15693)) 2685c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ||(b_hard_lock && (protocol == NFC_PROTOCOL_ISO_DEP)) ) 269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 2705c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen NFA_TRACE_API2 ("NFA_RwSetTagReadOnly (): Cannot %s for Protocol: %d", b_hard_lock ? "Hard lock" : "Soft lock", protocol); 271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_REJECTED); 272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL) 275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Fill in tNFA_RW_OPERATION struct */ 277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_SET_TAG_RO; 279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.set_readonly.b_hard_lock = b_hard_lock; 280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Tag specific APIs 289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** (note: for Type-4 tags, use NFA_SendRawFrame to exchange APDUs) 290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwLocateTlv 295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: 297e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Search for the Lock/Memory contril TLV on the activated Type1/Type2 tag 298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Data is returned to the application using the NFA_TLV_DETECT_EVT. When 300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** search operation has completed, or if an error occurs, the app will be 301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** notified with NFA_TLV_DETECT_EVT. 302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Perform the TLV detection procedure using the appropriate 304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** method for the currently activated tag. 305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Upon successful completion of TLV detection in T1/T2 tag, a 307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_TLV_DETECT_EVT will be sent, to notify the application 308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** of the TLV attributes (total lock/reserved bytes etc.). 309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** However if the TLV type specified is NDEF then it is same as 310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** calling NFA_RwDetectNDef and should expect to receive 311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_NDEF_DETECT_EVT instead of NFA_TLV_DETECT_EVT 312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** It is not mandatory to call this function - NFA_RwDetectNDef, 314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_RwReadNDef and NFA_RwWriteNDef will perform TLV detection 315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** internally if not performed already. An application may call 316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** this API to check the a tag/card-emulator's total Reserved/ 317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Lock bytes before issuing a write-request. 318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFC_STATUS_REFUSED if tlv_type is NDEF & tag won't support NDEF 322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwLocateTlv (UINT8 tlv_type) 326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 329e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API0 ("NFA_RwLocateTlv"); 330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL) 332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (tlv_type == TAG_LOCK_CTRL_TLV) 336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_DETECT_LOCK_TLV; 338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (tlv_type == TAG_MEM_CTRL_TLV) 340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_DETECT_MEM_TLV; 342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (tlv_type == TAG_NDEF_TLV) 344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_DETECT_NDEF; 346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 359e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 360e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwT1tRid 361e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: 363e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Send a RID command to the activated Type 1 tag. 364e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 365e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Data is returned to the application using the NFA_DATA_EVT. When the read 366e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** operation has completed, or if an error occurs, the app will be notified with 367e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_READ_CPLT_EVT. 368e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 370e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 371e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 372e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 374e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwT1tRid (void) 375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 376e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 377e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 378e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL) 379e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Fill in tNFA_RW_OPERATION struct */ 381e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 382e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_T1T_RID; 383e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 384e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 385e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 387e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 388e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 389e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 390e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 391e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 392e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwT1tReadAll 393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 394e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: 395e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Send a RALL command to the activated Type 1 tag. 396e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 397e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Data is returned to the application using the NFA_DATA_EVT. When the read 398e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** operation has completed, or if an error occurs, the app will be notified with 399e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_READ_CPLT_EVT. 400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 401e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 402e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwT1tReadAll (void) 407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL) 411e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 412e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Fill in tNFA_RW_OPERATION struct */ 413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_T1T_RALL; 415e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 416e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 417e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 418e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 419e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 420e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 421e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 422e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 423e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 424e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwT1tRead 425e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 426e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: 427e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Send a READ command to the activated Type 1 tag. 428e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 429e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Data is returned to the application using the NFA_DATA_EVT. When the read 430e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** operation has completed, or if an error occurs, the app will be notified with 431e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_READ_CPLT_EVT. 432e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 433e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 434e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 435e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 436e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 437e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 438e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwT1tRead (UINT8 block_number, UINT8 index) 439e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 440e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 441e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 442e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL) 443e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 444e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Fill in tNFA_RW_OPERATION struct */ 445e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 446e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_T1T_READ; 447e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.t1t_read.block_number = block_number; 448e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.t1t_read.index = index; 449e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 450e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 451e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 452e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 453e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 454e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 455e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 456e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 457e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 458e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwT1tWrite 459e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 460e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: 461e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Send a WRITE command to the activated Type 1 tag. 462e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 463e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Data is returned to the application using the NFA_DATA_EVT. When the write 464e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** operation has completed, or if an error occurs, the app will be notified with 465e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_WRITE_CPLT_EVT. 466e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 467e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 468e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 469e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 470e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 471e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 472e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwT1tWrite (UINT8 block_number, UINT8 index, UINT8 data, BOOLEAN b_erase) 473e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 474e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 475e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 476e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL) 477e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 478e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Fill in tNFA_RW_OPERATION struct */ 479e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 480e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.t1t_write.b_erase = b_erase; 481e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_T1T_WRITE; 482e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.t1t_write.block_number = block_number; 483e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.t1t_write.index = index; 484e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.t1t_write.p_block_data[0] = data; 485e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 486e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 487e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 488e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 489e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 490e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 491e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 492e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 493e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 494e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwT1tReadSeg 495e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 496e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: 497e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Send a RSEG command to the activated Type 1 tag. 498e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 499e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Data is returned to the application using the NFA_DATA_EVT. When the read 500e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** operation has completed, or if an error occurs, the app will be notified with 501e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_READ_CPLT_EVT. 502e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 503e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 504e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 505e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 506e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 507e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 508e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwT1tReadSeg (UINT8 segment_number) 509e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 510e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 511e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 512e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL) 513e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 514e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Fill in tNFA_RW_OPERATION struct */ 515e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 516e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_T1T_RSEG; 517e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.t1t_read.segment_number = segment_number; 518e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 519e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 520e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 521e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 522e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 523e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 524e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 525e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 526e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 527e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwT1tRead8 528e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 529e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: 530e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Send a READ8 command to the activated Type 1 tag. 531e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 532e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Data is returned to the application using the NFA_DATA_EVT. When the read 533e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** operation has completed, or if an error occurs, the app will be notified with 534e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_READ_CPLT_EVT. 535e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 536e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 537e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 538e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 539e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 540e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 541e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwT1tRead8 (UINT8 block_number) 542e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 543e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 544e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 545e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL) 546e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 547e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Fill in tNFA_RW_OPERATION struct */ 548e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 549e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_T1T_READ8; 550e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.t1t_write.block_number = block_number; 551e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 552e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 553e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 554e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 555e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 556e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 557e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 558e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 559e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 560e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwT1tWrite8 561e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 562e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: 563e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Send a WRITE8_E / WRITE8_NE command to the activated Type 1 tag. 564e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 565e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Data is returned to the application using the NFA_DATA_EVT. When the read 566e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** operation has completed, or if an error occurs, the app will be notified with 567e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_READ_CPLT_EVT. 568e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 569e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 570e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 571e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 572e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 573e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 574e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwT1tWrite8 (UINT8 block_number, UINT8 *p_data, BOOLEAN b_erase) 575e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 576e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 577e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 578e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL) 579e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 580e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Fill in tNFA_RW_OPERATION struct */ 581e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 582e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.t1t_write.b_erase = b_erase; 583e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_T1T_WRITE8; 584e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.t1t_write.block_number = block_number; 585e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 586e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memcpy (p_msg->params.t1t_write.p_block_data,p_data,8); 587e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 588e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 589e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 590e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 591e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 592e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 593e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 594e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 595e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 596e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwT2tRead 597e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 598e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: 599e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Send a READ command to the activated Type 2 tag. 600e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 601e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Data is returned to the application using the NFA_DATA_EVT. When the read 602e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** operation has completed, or if an error occurs, the app will be notified with 603e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_READ_CPLT_EVT. 604e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 605e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 606e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 607e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 608e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 609e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 610e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwT2tRead (UINT8 block_number) 611e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 612e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 613e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 614e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_RwT2tRead (): Block to read: %d", block_number); 615e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 616e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL) 617e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 618e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Fill in tNFA_RW_OPERATION struct */ 619e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 620e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_T2T_READ; 621e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.t2t_read.block_number = block_number; 622e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 623e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 624e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 625e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 626e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 627e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 628e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 629e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 630e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 631e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwT2tWrite 632e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 633e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: 634e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Send an WRITE command to the activated Type 2 tag. 635e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 636e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** When the write operation has completed (or if an error occurs), the 637e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** app will be notified with NFA_WRITE_CPLT_EVT. 638e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 639e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 640e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 641e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 642e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 643e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 644e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwT2tWrite (UINT8 block_number, UINT8 *p_data) 645e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 646e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 647e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 6485c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen NFA_TRACE_API1 ("NFA_RwT2tWrite (): Block to write: %d", block_number); 649e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 650e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL) 651e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 652e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Fill in tNFA_RW_OPERATION struct */ 653e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 654e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_T2T_WRITE; 655e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 656e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.t2t_write.block_number = block_number; 657e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 658e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memcpy (p_msg->params.t2t_write.p_block_data,p_data,4); 659e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 660e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 661e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 662e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 663e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 664e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 665e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 666e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 667e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 668e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwT2tSectorSelect 669e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 670e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: 671e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Send SECTOR SELECT command to the activated Type 2 tag. 672e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 673e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** When the sector select operation has completed (or if an error occurs), the 674e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** app will be notified with NFA_SECTOR_SELECT_CPLT_EVT. 675e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 676e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 677e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 678e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 679e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 680e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 681e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwT2tSectorSelect (UINT8 sector_number) 682e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 683e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 684e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 685e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_RwT2tRead (): sector to select: %d", sector_number); 686e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 687e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL) 688e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 689e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Fill in tNFA_RW_OPERATION struct */ 690e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 691e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_T2T_SECTOR_SELECT; 692e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 693e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.t2t_sector_select.sector_number = sector_number; 694e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 695e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 696e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 697e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 698e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 699e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 700e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 701e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 702e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 703e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwT3tRead 704e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 705e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: 706e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Send a CHECK (read) command to the activated Type 3 tag. 707e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 708e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Data is returned to the application using the NFA_DATA_EVT. When the read 709e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** operation has completed, or if an error occurs, the app will be notified with 710e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_READ_CPLT_EVT. 711e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 712e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 713e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 714e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 715e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 716e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 717e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwT3tRead (UINT8 num_blocks, tNFA_T3T_BLOCK_DESC *t3t_blocks) 718e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 719e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 720e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p_block_desc; 721e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 722e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_RwT3tRead (): num_blocks to read: %i", num_blocks); 723e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 724e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Validate parameters */ 725e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((num_blocks == 0) || (t3t_blocks == NULL)) 726e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_INVALID_PARAM); 727e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 728e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION) + (num_blocks * sizeof (tNFA_T3T_BLOCK_DESC))))) != NULL) 729e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 730e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* point to area after tNFA_RW_OPERATION */ 731e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_block_desc = (UINT8 *) (p_msg+1); 732e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 733e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Fill in tNFA_RW_OPERATION struct */ 734e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 735e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_T3T_READ; 736e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 737e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.t3t_read.num_blocks = num_blocks; 738e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.t3t_read.p_block_desc = (tNFA_T3T_BLOCK_DESC *) p_block_desc; 739e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 740e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Copy block descriptor list */ 741e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memcpy (p_block_desc, t3t_blocks, (num_blocks * sizeof (tNFA_T3T_BLOCK_DESC))); 742e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 743e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 744e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 745e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 746e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 747e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 748e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 749e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 750e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 751e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 752e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 753e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwT3tWrite 754e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 755e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: 756e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Send an UPDATE (write) command to the activated Type 3 tag. 757e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 758e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** When the write operation has completed (or if an error occurs), the 759e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** app will be notified with NFA_WRITE_CPLT_EVT. 760e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 761e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 762e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 763e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 764e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 765e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 766e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwT3tWrite (UINT8 num_blocks, tNFA_T3T_BLOCK_DESC *t3t_blocks, UINT8 *p_data) 767e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 768e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 769e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p_block_desc, *p_data_area; 770e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 771e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_RwT3tWrite (): num_blocks to write: %i", num_blocks); 772e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 773e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Validate parameters */ 774e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((num_blocks == 0) || (t3t_blocks == NULL) | (p_data == NULL)) 775e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_INVALID_PARAM); 776e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 777e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION) + (num_blocks * (sizeof (tNFA_T3T_BLOCK_DESC) + 16))))) != NULL) 778e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 779e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* point to block descriptor and data areas after tNFA_RW_OPERATION */ 780e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_block_desc = (UINT8 *) (p_msg+1); 781e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_data_area = p_block_desc + (num_blocks * (sizeof (tNFA_T3T_BLOCK_DESC))); 782e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 783e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Fill in tNFA_RW_OPERATION struct */ 784e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 785e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_T3T_WRITE; 786e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 787e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.t3t_write.num_blocks = num_blocks; 788e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.t3t_write.p_block_desc = (tNFA_T3T_BLOCK_DESC *) p_block_desc; 789e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.t3t_write.p_block_data = p_data_area; 790e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 791e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Copy block descriptor list */ 792e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memcpy (p_block_desc, t3t_blocks, (num_blocks * sizeof (tNFA_T3T_BLOCK_DESC))); 793e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 794e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Copy data */ 795e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memcpy (p_data_area, p_data, (num_blocks * 16)); 796e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 797e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 798e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 799e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 800e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 801e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 802e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 803e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 804e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 805e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 806e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 807e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwI93Inventory 808e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 809e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: 8105c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** Send Inventory command to the activated ISO 15693 tag with/without AFI 811e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** If UID is provided then set UID[0]:MSB, ... UID[7]:LSB 812e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 813e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** When the operation has completed (or if an error occurs), the 814e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** app will be notified with NFA_I93_CMD_CPLT_EVT. 815e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 816e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 817e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 818e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_WRONG_PROTOCOL: ISO 15693 tag not activated 819e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 820e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 821e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 8225c65c3a0f42e174e47fecd4e569606003217ff4eMartijn CoenentNFA_STATUS NFA_RwI93Inventory (BOOLEAN afi_present, UINT8 afi, UINT8 *p_uid) 823e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 824e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 825e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 8265c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen NFA_TRACE_API2 ("NFA_RwI93Inventory (): afi_present:%d, AFI: 0x%02X", afi_present, afi); 827e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 828e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_rw_cb.protocol != NFC_PROTOCOL_15693) 829e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 830e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_WRONG_PROTOCOL); 831e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 832e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 833e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL) 834e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 835e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Fill in tNFA_RW_OPERATION struct */ 836e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 837e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_I93_INVENTORY; 838e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 8395c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen p_msg->params.i93_cmd.afi_present = afi_present; 840e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.i93_cmd.afi = afi; 841e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 842e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_uid) 843e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 844e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.i93_cmd.uid_present = TRUE; 845e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memcpy (p_msg->params.i93_cmd.uid, p_uid, I93_UID_BYTE_LEN); 846e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 847e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 848e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 849e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.i93_cmd.uid_present = FALSE; 850e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 851e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 852e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 853e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 854e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 855e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 856e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 857e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 858e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 859e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 860e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 861e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 862e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwI93StayQuiet 863e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 864e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: 865e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Send Stay Quiet command to the activated ISO 15693 tag. 866e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 867e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** When the operation has completed (or if an error occurs), the 868e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** app will be notified with NFA_I93_CMD_CPLT_EVT. 869e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 870e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 871e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 872e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_WRONG_PROTOCOL: ISO 15693 tag not activated 873e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 874e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 875e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 876e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwI93StayQuiet (void) 877e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 878e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 879e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 880e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API0 ("NFA_RwI93StayQuiet ()"); 881e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 882e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_rw_cb.protocol != NFC_PROTOCOL_15693) 883e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 884e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_WRONG_PROTOCOL); 885e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 886e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 887e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL) 888e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 889e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Fill in tNFA_RW_OPERATION struct */ 890e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 891e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_I93_STAY_QUIET; 892e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 893e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 894e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 895e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 896e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 897e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 898e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 899e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 900e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 901e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 902e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 903e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwI93ReadSingleBlock 904e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 905e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: 906e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Send Read Single Block command to the activated ISO 15693 tag. 907e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 908e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Data is returned to the application using the NFA_DATA_EVT. When the read 909e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** operation has completed, or if an error occurs, the app will be notified with 910e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_I93_CMD_CPLT_EVT. 911e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 912e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 913e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 914e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_WRONG_PROTOCOL: ISO 15693 tag not activated 915e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 916e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 917e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 918e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwI93ReadSingleBlock (UINT8 block_number) 919e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 920e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 921e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 922e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_RwI93ReadSingleBlock (): block_number: 0x%02X", block_number); 923e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 924e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_rw_cb.protocol != NFC_PROTOCOL_15693) 925e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 926e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_WRONG_PROTOCOL); 927e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 928e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 929e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL) 930e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 931e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Fill in tNFA_RW_OPERATION struct */ 932e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 933e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_I93_READ_SINGLE_BLOCK; 934e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 935e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.i93_cmd.first_block_number = block_number; 936e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 937e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 938e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 939e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 940e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 941e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 942e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 943e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 944e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 945e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 946e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 947e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwI93WriteSingleBlock 948e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 949e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: 950e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Send Write Single Block command to the activated ISO 15693 tag. 951e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 952e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** When the write operation has completed (or if an error occurs), the 953e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** app will be notified with NFA_I93_CMD_CPLT_EVT. 954e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 955e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 956e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 957e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_WRONG_PROTOCOL: ISO 15693 tag not activated 958e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 959e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 960e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 961e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwI93WriteSingleBlock (UINT8 block_number, 962e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p_data) 963e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 964e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 965e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 966e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_RwI93WriteSingleBlock (): block_number: 0x%02X", block_number); 967e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 968e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_rw_cb.protocol != NFC_PROTOCOL_15693) 969e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 970e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_WRONG_PROTOCOL); 971e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 972e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 973e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* we don't know block size of tag */ 974e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( (nfa_rw_cb.i93_block_size == 0) 975e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ||(nfa_rw_cb.i93_num_block == 0) ) 976e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 977e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 978e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 979e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 980e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION) + nfa_rw_cb.i93_block_size))) != NULL) 981e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 982e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Fill in tNFA_RW_OPERATION struct */ 983e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 984e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_I93_WRITE_SINGLE_BLOCK; 985e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 986e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.i93_cmd.first_block_number = block_number; 987e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.i93_cmd.p_data = (UINT8*) (p_msg + 1); 988e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 989e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memcpy (p_msg->params.i93_cmd.p_data, p_data, nfa_rw_cb.i93_block_size); 990e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 991e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 992e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 993e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 994e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 995e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 996e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 997e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 998e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 999e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1000e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1001e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwI93LockBlock 1002e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1003e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: 1004e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Send Lock block command to the activated ISO 15693 tag. 1005e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1006e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** When the operation has completed (or if an error occurs), the 1007e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** app will be notified with NFA_I93_CMD_CPLT_EVT. 1008e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1009e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 1010e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 1011e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_WRONG_PROTOCOL: ISO 15693 tag not activated 1012e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 1013e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1014e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1015e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwI93LockBlock (UINT8 block_number) 1016e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1017e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 1018e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1019e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_RwI93LockBlock (): block_number: 0x%02X", block_number); 1020e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1021e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_rw_cb.protocol != NFC_PROTOCOL_15693) 1022e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1023e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_WRONG_PROTOCOL); 1024e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1025e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1026e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL) 1027e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1028e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Fill in tNFA_RW_OPERATION struct */ 1029e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 1030e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_I93_LOCK_BLOCK; 1031e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1032e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.i93_cmd.first_block_number = block_number; 1033e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1034e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 1035e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1036e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 1037e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1038e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1039e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 1040e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1041e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1042e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1043e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1044e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwI93ReadMultipleBlocks 1045e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1046e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: 1047e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Send Read Multiple Block command to the activated ISO 15693 tag. 1048e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1049e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Data is returned to the application using the NFA_DATA_EVT. When the read 1050e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** operation has completed, or if an error occurs, the app will be notified with 1051e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_I93_CMD_CPLT_EVT. 1052e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1053e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 1054e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 1055e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_WRONG_PROTOCOL: ISO 15693 tag not activated 1056e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 1057e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1058e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1059e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwI93ReadMultipleBlocks (UINT8 first_block_number, 1060e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 number_blocks) 1061e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1062e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 1063e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1064e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API2 ("NFA_RwI93ReadMultipleBlocks(): %d, %d", first_block_number, number_blocks); 1065e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1066e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( nfa_rw_cb.protocol != NFC_PROTOCOL_15693) 1067e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1068e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_WRONG_PROTOCOL); 1069e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1070e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1071e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL) 1072e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1073e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Fill in tNFA_RW_OPERATION struct */ 1074e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 1075e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_I93_READ_MULTI_BLOCK; 1076e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1077e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.i93_cmd.first_block_number = first_block_number; 1078e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.i93_cmd.number_blocks = number_blocks; 1079e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1080e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 1081e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1082e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 1083e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1084e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1085e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 1086e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1087e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1088e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1089e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1090e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwI93WriteMultipleBlocks 1091e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1092e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: 1093e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Send Write Multiple Block command to the activated ISO 15693 tag. 1094e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1095e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** When the write operation has completed (or if an error occurs), the 1096e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** app will be notified with NFA_I93_CMD_CPLT_EVT. 1097e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1098e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 1099e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 1100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_WRONG_PROTOCOL: ISO 15693 tag not activated 1101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 1102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwI93WriteMultipleBlocks (UINT8 first_block_number, 1105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 number_blocks, 1106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p_data) 1107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 1109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 data_length; 1110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API2 ("NFA_RwI93WriteMultipleBlocks (): %d, %d", first_block_number, number_blocks); 1112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( nfa_rw_cb.protocol != NFC_PROTOCOL_15693) 1114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_WRONG_PROTOCOL); 1116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* we don't know block size of tag */ 1119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((nfa_rw_cb.i93_block_size == 0) || (nfa_rw_cb.i93_num_block == 0)) 1120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 1122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project data_length = nfa_rw_cb.i93_block_size * number_blocks; 1125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION) + data_length))) != NULL) 1127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Fill in tNFA_RW_OPERATION struct */ 1129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 1130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_I93_WRITE_MULTI_BLOCK; 1131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.i93_cmd.first_block_number = first_block_number; 1133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.i93_cmd.number_blocks = number_blocks; 1134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.i93_cmd.p_data = (UINT8*) (p_msg + 1); 1135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memcpy (p_msg->params.i93_cmd.p_data, p_data, data_length); 1137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 1139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 1141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 1144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwI93Select 1149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: 1151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Send Select command to the activated ISO 15693 tag. 1152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** UID[0]: 0xE0, MSB 1154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** UID[1]: IC Mfg Code 1155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** ... 1156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** UID[7]: LSB 1157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** When the operation has completed (or if an error occurs), the 1159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** app will be notified with NFA_I93_CMD_CPLT_EVT. 1160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 1162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 1163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_WRONG_PROTOCOL: ISO 15693 tag not activated 1164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 1165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwI93Select (UINT8 *p_uid) 1168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 1170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API3 ("NFA_RwI93Select (): UID: [%02X%02X%02X...]", *(p_uid), *(p_uid+1), *(p_uid+2)); 1172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_rw_cb.protocol != NFC_PROTOCOL_15693) 1174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_WRONG_PROTOCOL); 1176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION) + I93_UID_BYTE_LEN))) != NULL) 1179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Fill in tNFA_RW_OPERATION struct */ 1181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 1182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_I93_SELECT; 1183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.i93_cmd.p_data = (UINT8 *) (p_msg + 1); 1185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memcpy (p_msg->params.i93_cmd.p_data, p_uid, I93_UID_BYTE_LEN); 1186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 1188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 1190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 1193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwI93ResetToReady 1198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: 1200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Send Reset to ready command to the activated ISO 15693 tag. 1201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** When the operation has completed (or if an error occurs), the 1203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** app will be notified with NFA_I93_CMD_CPLT_EVT. 1204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 1206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 1207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_WRONG_PROTOCOL: ISO 15693 tag not activated 1208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 1209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwI93ResetToReady (void) 1212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 1214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API0 ("NFA_RwI93ResetToReady ()"); 1216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_rw_cb.protocol != NFC_PROTOCOL_15693) 1218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_WRONG_PROTOCOL); 1220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL) 1223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Fill in tNFA_RW_OPERATION struct */ 1225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 1226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_I93_RESET_TO_READY; 1227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 1229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 1231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 1234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwI93WriteAFI 1239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: 1241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Send Write AFI command to the activated ISO 15693 tag. 1242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** When the operation has completed (or if an error occurs), the 1244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** app will be notified with NFA_I93_CMD_CPLT_EVT. 1245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 1247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 1248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_WRONG_PROTOCOL: ISO 15693 tag not activated 1249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 1250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwI93WriteAFI (UINT8 afi) 1253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 1255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_RwI93WriteAFI (): AFI: 0x%02X", afi); 1257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_rw_cb.protocol != NFC_PROTOCOL_15693) 1259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_WRONG_PROTOCOL); 1261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL) 1264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Fill in tNFA_RW_OPERATION struct */ 1266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 1267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_I93_WRITE_AFI; 1268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.i93_cmd.afi = afi; 1270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 1272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 1274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 1277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwI93LockAFI 1282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: 1284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Send Lock AFI command to the activated ISO 15693 tag. 1285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** When the operation has completed (or if an error occurs), the 1287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** app will be notified with NFA_I93_CMD_CPLT_EVT. 1288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 1290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 1291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_WRONG_PROTOCOL: ISO 15693 tag not activated 1292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 1293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwI93LockAFI (void) 1296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1297e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 1298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API0 ("NFA_RwI93LockAFI ()"); 1300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_rw_cb.protocol != NFC_PROTOCOL_15693) 1302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_WRONG_PROTOCOL); 1304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL) 1307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Fill in tNFA_RW_OPERATION struct */ 1309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 1310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_I93_LOCK_AFI; 1311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 1313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 1315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 1318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwI93WriteDSFID 1323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: 1325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Send Write DSFID command to the activated ISO 15693 tag. 1326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** When the operation has completed (or if an error occurs), the 1328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** app will be notified with NFA_I93_CMD_CPLT_EVT. 1329e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 1331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 1332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_WRONG_PROTOCOL: ISO 15693 tag not activated 1333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 1334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwI93WriteDSFID (UINT8 dsfid) 1337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 1339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API1 ("NFA_RwI93WriteDSFID (): DSFID: 0x%02X", dsfid); 1341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_rw_cb.protocol != NFC_PROTOCOL_15693) 1343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_WRONG_PROTOCOL); 1345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL) 1348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Fill in tNFA_RW_OPERATION struct */ 1350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 1351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_I93_WRITE_DSFID; 1352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.i93_cmd.dsfid = dsfid; 1354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 1356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 1358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1359e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1360e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 1361e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1363e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1364e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1365e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwI93LockDSFID 1366e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1367e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: 1368e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Send Lock DSFID command to the activated ISO 15693 tag. 1369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1370e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** When the operation has completed (or if an error occurs), the 1371e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** app will be notified with NFA_I93_CMD_CPLT_EVT. 1372e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 1374e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 1375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_WRONG_PROTOCOL: ISO 15693 tag not activated 1376e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 1377e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1378e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1379e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwI93LockDSFID (void) 1380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1381e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 1382e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1383e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API0 ("NFA_RwI93LockDSFID ()"); 1384e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1385e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_rw_cb.protocol != NFC_PROTOCOL_15693) 1386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1387e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_WRONG_PROTOCOL); 1388e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1389e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1390e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL) 1391e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1392e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Fill in tNFA_RW_OPERATION struct */ 1393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 1394e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_I93_LOCK_DSFID; 1395e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1396e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 1397e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1398e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 1399e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1401e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 1402e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwI93GetSysInfo 1407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: 1409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Send Get system information command to the activated ISO 15693 tag. 1410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** If UID is provided then set UID[0]:MSB, ... UID[7]:LSB 1411e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1412e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** When the operation has completed (or if an error occurs), the 1413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** app will be notified with NFA_I93_CMD_CPLT_EVT. 1414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1415e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 1416e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 1417e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_WRONG_PROTOCOL: ISO 15693 tag not activated 1418e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 1419e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1420e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1421e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwI93GetSysInfo (UINT8 *p_uid) 1422e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1423e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 1424e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1425e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API0 ("NFA_RwI93GetSysInfo ()"); 1426e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1427e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (nfa_rw_cb.protocol != NFC_PROTOCOL_15693) 1428e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1429e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_WRONG_PROTOCOL); 1430e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1431e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1432e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL) 1433e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1434e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Fill in tNFA_RW_OPERATION struct */ 1435e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 1436e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_I93_GET_SYS_INFO; 1437e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1438e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (p_uid) 1439e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1440e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.i93_cmd.uid_present = TRUE; 1441e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memcpy (p_msg->params.i93_cmd.uid, p_uid, I93_UID_BYTE_LEN); 1442e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1443e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 1444e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1445e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.i93_cmd.uid_present = FALSE; 1446e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1447e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1448e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 1449e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1450e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 1451e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1452e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1453e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 1454e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1455e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1456e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1457e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1458e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RwI93GetMultiBlockSecurityStatus 1459e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1460e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: 1461e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Send Get Multiple block security status command to the activated ISO 15693 tag. 1462e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1463e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Data is returned to the application using the NFA_DATA_EVT. When the read 1464e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** operation has completed, or if an error occurs, the app will be notified with 1465e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_I93_CMD_CPLT_EVT. 1466e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1467e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 1468e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK if successfully initiated 1469e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_WRONG_PROTOCOL: ISO 15693 tag not activated 1470e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 1471e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1472e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1473e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjecttNFA_STATUS NFA_RwI93GetMultiBlockSecurityStatus (UINT8 first_block_number, 1474e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 number_blocks) 1475e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 1476e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFA_RW_OPERATION *p_msg; 1477e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1478e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NFA_TRACE_API2 ("NFA_RwI93GetMultiBlockSecurityStatus(): %d, %d", first_block_number, number_blocks); 1479e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1480e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( nfa_rw_cb.protocol != NFC_PROTOCOL_15693) 1481e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1482e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_WRONG_PROTOCOL); 1483e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1484e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1485e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL) 1486e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 1487e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* Fill in tNFA_RW_OPERATION struct */ 1488e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT; 1489e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->op = NFA_RW_OP_I93_GET_MULTI_BLOCK_STATUS; 1490e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1491e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.i93_cmd.first_block_number = first_block_number; 1492e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_msg->params.i93_cmd.number_blocks = number_blocks; 1493e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1494e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfa_sys_sendmsg (p_msg); 1495e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1496e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_OK); 1497e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1498e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1499e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NFA_STATUS_FAILED); 1500e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1501