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