blob: f4c0c085c15ea76289e6b127a02fca2a6f2803f4 [file] [log] [blame]
Martijn Coenena6e012a2011-01-13 23:24:24 +01001/*
Nick Pelly34ff48f2011-06-27 09:01:51 -07002 *
Martijn Coenena6e012a2011-01-13 23:24:24 +01003 * Copyright (C) 2010 NXP Semiconductors
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18/*
19 * \file phFriNfc_ISO15693Map.h
20 * \brief NFC Ndef Mapping For ISO-15693 Smart Card.
21 *
22 * Project: NFC-FRI
23 *
24 * $Date: $
25 * $Author: ing02260 $
26 * $Revision: $
27 * $Aliases: $
28 *
29 */
30
31#ifndef PHFRINFC_ISO15693MAP_H
32#define PHFRINFC_ISO15693MAP_H
33
34/************************** START MACROS definition *********************/
35/* BYTES in a BLOCK */
36#define ISO15693_BYTES_PER_BLOCK 0x04U
37/* BLOCKS per page */
38#define ISO15693_BLOCKS_PER_PAGE 0x04U
39/* 3 BYTE value identifier for NDEF TLV */
40#define ISO15693_THREE_BYTE_LENGTH_ID 0xFFU
41
42/* Get the NDEF TLV VALUE field block and byte address */
43#define ISO15693_GET_VALUE_FIELD_BLOCK_NO(blk, byte_addr, ndef_size) \
Martijn Coenen4f3ef022011-01-20 01:27:17 +010044 (((byte_addr + 1 + ((ndef_size >= ISO15693_THREE_BYTE_LENGTH_ID) ? 3 : 1)) > \
Martijn Coenena6e012a2011-01-13 23:24:24 +010045 (ISO15693_BYTES_PER_BLOCK - 1)) ? (blk + 1) : blk)
46
47#define ISO15693_GET_VALUE_FIELD_BYTE_NO(blk, byte_addr, ndef_size) \
48 (((byte_addr + 1 + ((ndef_size >= ISO15693_THREE_BYTE_LENGTH_ID) ? 3 : 1)) % \
49 ISO15693_BYTES_PER_BLOCK))
50
51/************************** END MACROS definition *********************/
52
53/************************** START Functions declaration *********************/
54/*!
55 * \brief \copydoc page_ovr Initiates Reading of NDEF information from the Remote Device.
56 *
57 * The function initiates the reading of NDEF information from a Remote Device.
58 * It performs a reset of the state and starts the action (state machine).
59 * A periodic call of the \ref phFriNfc_NdefMap_Process has to be done once the action
60 * has been triggered.
61 *
62 * \param[in] NdefMap Pointer to a valid instance of the \ref phFriNfc_NdefMap_t structure describing
63 * the component context.
64 *
65 * \param[in] PacketData Pointer to a location that receives the NDEF Packet.
66 *
67 * \param[in,out] PacketDataLength Pointer to a variable receiving the length of the NDEF packet.
68 *
69 * \param[in] Offset Indicates whether the read operation shall start from the begining of the
70 * file/card storage \b or continue from the last offset. The last Offset set is stored
71 * within a context variable (must not be modified by the integration).
72 * If the caller sets the value to \ref PH_FRINFC_NDEFMAP_SEEK_CUR, the component shall
73 * start reading from the last offset set (continue where it has stopped before).
74 * If set to \ref PH_FRINFC_NDEFMAP_SEEK_BEGIN, the component shall start reading
75 * from the begining of the card (restarted)
76 *
77 * \retval NFCSTATUS_PENDING The action has been successfully triggered.
78 * \retval NFCSTATUS_INVALID_DEVICE_REQUEST If Previous Operation is Write Ndef and Offset
79 * is Current then this error is displayed.
80 * \retval NFCSTATUS_EOF_NDEF_CONTAINER_REACHED No Space in the File to read.
81 * \retval NFCSTATUS_MORE_INFORMATION There are more bytes to read in the card.
82 * \retval NFCSTATUS_SUCCESS Last Byte of the card read.
83 * \retval NFCSTATUS_INVALID_DEVICE The device has not been opened or has been disconnected
84 * meanwhile.
85 * \retval NFCSTATUS_CMD_ABORTED The caller/driver has aborted the request.
86 * \retval NFCSTATUS_BUFFER_TOO_SMALL The buffer provided by the caller is too small.
87 * \retval NFCSTATUS_RF_TIMEOUT No data has been received within the TIMEOUT period.
88 *
89 */
90
91NFCSTATUS
92phFriNfc_ISO15693_RdNdef (
93 phFriNfc_NdefMap_t *psNdefMap,
94 uint8_t *pPacketData,
95 uint32_t *pPacketDataLength,
96 uint8_t Offset);
97
98/*!
99 * \brief \copydoc page_ovr Initiates Writing of NDEF information to the Remote Device.
100 *
101 * The function initiates the writing of NDEF information to a Remote Device.
102 * It performs a reset of the state and starts the action (state machine).
103 * A periodic call of the \ref phFriNfc_NdefMap_Process has to be done once the action
104 * has been triggered.
105 *
106 * \param[in] NdefMap Pointer to a valid instance of the \ref phFriNfc_NdefMap_t structure describing
107 * the component context.
108 *
109 * \param[in] PacketData Pointer to a location that holds the prepared NDEF Packet.
110 *
111 * \param[in,out] PacketDataLength Variable specifying the length of the prepared NDEF packet.
112 *
113 * \param[in] Offset Indicates whether the write operation shall start from the begining of the
114 * file/card storage \b or continue from the last offset. The last Offset set is stored
115 * within a context variable (must not be modified by the integration).
116 * If the caller sets the value to \ref PH_FRINFC_NDEFMAP_SEEK_CUR, the component shall
117 * start writing from the last offset set (continue where it has stopped before).
118 * If set to \ref PH_FRINFC_NDEFMAP_SEEK_BEGIN, the component shall start writing
119 * from the begining of the card (restarted)
120 *
121 * \retval NFCSTATUS_PENDING The action has been successfully triggered.
122 * \retval NFCSTATUS_INVALID_DEVICE_REQUEST If Previous Operation is Write Ndef and Offset
123 * is Current then this error is displayed.
124 * \retval NFCSTATUS_EOF_NDEF_CONTAINER_REACHED Last byte is written to the card after this
125 * no further writing is possible.
126 * \retval NFCSTATUS_SUCCESS Buffer provided by the user is completely written
127 * into the card.
128 * \retval NFCSTATUS_INVALID_DEVICE The device has not been opened or has been disconnected
129 * meanwhile.
130 * \retval NFCSTATUS_CMD_ABORTED The caller/driver has aborted the request.
131 * \retval NFCSTATUS_BUFFER_TOO_SMALL The buffer provided by the caller is too small.
132 * \retval NFCSTATUS_RF_TIMEOUT No data has been received within the TIMEOUT period.
133 *
134 */
135
136NFCSTATUS
137phFriNfc_ISO15693_WrNdef (
138 phFriNfc_NdefMap_t *psNdefMap,
139 uint8_t *pPacketData,
140 uint32_t *pPacketDataLength,
141 uint8_t Offset);
142
143/*!
144 * \brief \copydoc page_ovr Check whether a particulat Remote Device is NDEF compliant.
145 *
146 * The function checks whether the peer device is NDEF compliant.
147 *
148 * \param[in] NdefMap Pointer to a valid instance of the \ref phFriNfc_NdefMap_t structure describing
149 * the component context.
150 *
151 * \retval NFCSTATUS_PENDING The action has been successfully triggered.
152 * \retval NFCSTATUS_INVALID_PARAMETER At least one parameter of the function is invalid.
153 * \retval NFCSTATUS_INVALID_DEVICE The device has not been opened or has been disconnected
154 * meanwhile.
155 * \retval NFCSTATUS_CMD_ABORTED The caller/driver has aborted the request.
156 * \retval NFCSTATUS_BUFFER_TOO_SMALL The buffer provided by the caller is too small.
157 * \retval NFCSTATUS_RF_TIMEOUT No data has been received within the TIMEOUT period.
158 *
159 */
160
161NFCSTATUS
162phFriNfc_ISO15693_ChkNdef (
163 phFriNfc_NdefMap_t *psNdefMap);
164
165/*!
166 * \brief \copydoc page_cb Completion Routine, Processing function, needed to avoid long blocking.
167 *
168 * The function call scheme is according to \ref grp_interact. No State reset is performed during operation.
169 *
170 * \copydoc pphFriNfc_Cr_t
171 *
172 * \note The lower (Overlapped HAL) layer must register a pointer to this function as a Completion
173 * Routine in order to be able to notify the component that an I/O has finished and data are
174 * ready to be processed.
175 *
176 */
177
178void
179phFriNfc_ISO15693_Process (
180 void *pContext,
181 NFCSTATUS Status);
182
183#ifdef FRINFC_READONLY_NDEF
184
185/*!
186 * \brief \copydoc page_ovr Initiates Writing of NDEF information to the Remote Device.
187 *
188 * The function initiates the writing of NDEF information to a Remote Device.
189 * It performs a reset of the state and starts the action (state machine).
190 * A periodic call of the \ref phFriNfc_NdefMap_Process has to be done once the action
191 * has been triggered.
192 *
193 * \param[in] psNdefMap Pointer to a valid instance of the \ref phFriNfc_NdefMap_t structure describing
194 * the component context.
195 *
196 *
197 * \retval NFCSTATUS_PENDING The action has been successfully triggered.
198 * \retval NFCSTATUS_INVALID_DEVICE_REQUEST If Previous Operation is Write Ndef and Offset
199 * is Current then this error is displayed.
200 * \retval NFCSTATUS_EOF_NDEF_CONTAINER_REACHED Last byte is written to the card after this
201 * no further writing is possible.
202 * \retval NFCSTATUS_SUCCESS Buffer provided by the user is completely written
203 * into the card.
204 * \retval NFCSTATUS_INVALID_DEVICE The device has not been opened or has been disconnected
205 * meanwhile.
206 * \retval NFCSTATUS_CMD_ABORTED The caller/driver has aborted the request.
207 * \retval NFCSTATUS_BUFFER_TOO_SMALL The buffer provided by the caller is too small.
208 * \retval NFCSTATUS_RF_TIMEOUT No data has been received within the TIMEOUT period.
209 *
210 */
211NFCSTATUS
212phFriNfc_ISO15693_ConvertToReadOnly (
213 phFriNfc_NdefMap_t *psNdefMap);
214
215#endif /* #ifdef FRINFC_READONLY_NDEF */
216
217/************************** END Functions declaration *********************/
218
219#endif /* #ifndef PHFRINFC_ISO15693MAP_H */