1 /* 2 * 3 * 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) \ 44 (((byte_addr + 1 + ((ndef_size >= ISO15693_THREE_BYTE_LENGTH_ID) ? 3 : 1)) > \ 45 (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 91 NFCSTATUS 92 phFriNfc_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 136 NFCSTATUS 137 phFriNfc_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 161 NFCSTATUS 162 phFriNfc_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 178 void 179 phFriNfc_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 */ 211 NFCSTATUS 212 phFriNfc_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 */ 220