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