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