1 /* 2 * Copyright (C) 2010 NXP Semiconductors 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 /* 18 * \file phFriNfc_TopazMap.h 19 * \brief NFC Ndef Mapping For Mifare UL Card. 20 * 21 * Project: NFC-FRI 22 * 23 * $Date: Mon Dec 13 14:14:14 2010 $ 24 * $Author: ing02260 $ 25 * $Revision: 1.26 $ 26 * $Aliases: $ 27 * 28 */ 29 30 #ifndef PHFRINFC_TOPAZMAP_H 31 #define PHFRINFC_TOPAZMAP_H 32 33 #include <phFriNfc.h> 34 #ifdef PH_HAL4_ENABLE 35 #include <phHal4Nfc.h> 36 #else 37 #include <phHalNfc.h> 38 #endif 39 #include <phNfcStatus.h> 40 #include <phNfcTypes.h> 41 #include <phFriNfc_NdefMap.h> 42 43 44 #define PH_FRINFC_NDEFMAP_TOPAZMAP_FILEREVISION "$Revision: 1.26 $" 45 #define PH_FRINFC_NDEFMAP_TOPAZMAP_FILEALIASES "$Aliases: $" 46 47 #if !defined (ES_HW_VER) 48 49 #define ES_HW_VER (32U) 50 51 #endif /* #if !defined (ES_HW_VER) */ 52 53 #if (ES_HW_VER >= 32) 54 55 /* This macro is used for the new 3.2 chip,as the JEWEL_READ and 56 JEWEL_WRITE for this chip is removed from the firmware. And for the 57 new FW, only JEWEL_RAW shall be used */ 58 #define TOPAZ_RAW_SUPPORT 59 60 #endif /* #if (ES_HW_VER == 32) */ 61 62 #define TOPAZ_UID_LENGTH_FOR_READ_WRITE 0x04U 63 64 /*! 65 * \name Topaz - states of the Finite State machine 66 * 67 */ 68 /*@{*/ 69 #define PH_FRINFC_TOPAZ_STATE_READ 1 /*!< Read State */ 70 #define PH_FRINFC_TOPAZ_STATE_WRITE 2 /*!< Write is going on*/ 71 #define PH_FRINFC_TOPAZ_STATE_CHK_NDEF 3 /*!< Check Ndef is going on */ 72 #define PH_FRINFC_TOPAZ_STATE_READID 4 /*!< Read Id under progress */ 73 #define PH_FRINFC_TOPAZ_STATE_READALL 5 /*!< Read all under progress */ 74 #define PH_FRINFC_TOPAZ_STATE_WRITE_NMN 6 /*!< Write ndef magic number */ 75 #define PH_FRINFC_TOPAZ_STATE_WRITE_L_TLV 7 /*!< Write length field of TLV */ 76 #define PH_FRINFC_TOPAZ_STATE_WR_CC_OR_TLV 8 /*!< Write CC or NDEF TLV */ 77 78 #ifdef FRINFC_READONLY_NDEF 79 80 #define PH_FRINFC_TOPAZ_STATE_WR_CC_BYTE 9 /*!< READ ONLY state */ 81 #define PH_FRINFC_TOPAZ_STATE_RD_LOCK0_BYTE 10 /*!< read Lock byte 0 state */ 82 #define PH_FRINFC_TOPAZ_STATE_WR_LOCK0_BYTE 11 /*!< write Lock byte 0 state */ 83 #define PH_FRINFC_TOPAZ_STATE_RD_LOCK1_BYTE 12 /*!< read Lock byte 1 state */ 84 #define PH_FRINFC_TOPAZ_STATE_WR_LOCK1_BYTE 13 /*!< write Lock byte 1 state */ 85 86 #endif /* #ifdef FRINFC_READONLY_NDEF */ 87 /*@}*/ 88 89 /*! 90 * \name Topaz - constants for the capability container 91 * 92 */ 93 /*@{*/ 94 #define PH_FRINFC_TOPAZ_CC_BYTE0 0xE1 /*!< Capability container byte 0 = 0xE1 (NMN) */ 95 #define PH_FRINFC_TOPAZ_CC_BYTE1 0x10 /*!< Capability container byte 1 = 0x10 (version number) */ 96 #define PH_FRINFC_TOPAZ_CC_BYTE2_MAX 0x0E /*!< Capability container byte 2 = 0x0E (Total free space 97 in the card) */ 98 #define PH_FRINFC_TOPAZ_CC_BYTE3_RW 0x00 /*!< Capability container byte 3 = 0x00 for 99 READ WRITE/INITIALISED card state */ 100 #define PH_FRINFC_TOPAZ_CC_BYTE3_RO 0x0F /*!< Capability container byte 3 = 0x0F for 101 READ only card state */ 102 103 /*@}*/ 104 105 /*! 106 * \name Topaz - constants for Flags 107 * 108 */ 109 /*@{*/ 110 #define PH_FRINFC_TOPAZ_FLAG0 0 /*!< Flag value = 0 */ 111 #define PH_FRINFC_TOPAZ_FLAG1 1 /*!< Flag value = 1 */ 112 /*@}*/ 113 114 /*! 115 * \name Topaz - constants for left shift 116 * 117 */ 118 /*@{*/ 119 #define PH_FRINFC_TOPAZ_SHIFT3 3 /*!< Shift by 3 bits */ 120 /*@}*/ 121 122 /*! 123 * \name Topaz - internal state for write 124 * 125 */ 126 /*@{*/ 127 enum 128 { 129 PH_FRINFC_TOPAZ_WR_CC_BYTE0, /*!< CC Byte 0 = 0xE1 ndef magic number */ 130 PH_FRINFC_TOPAZ_WR_CC_BYTE1, /*!< CC Byte 1 = 0x10 version number */ 131 PH_FRINFC_TOPAZ_WR_CC_BYTE2, /*!< CC Byte 2 = 0x0C space in the data area */ 132 PH_FRINFC_TOPAZ_WR_CC_BYTE3, /*!< CC Byte 3 = 0x00 read write access */ 133 PH_FRINFC_TOPAZ_WR_T_OF_TLV, /*!< CC Byte 3 = 0x00 read write access */ 134 PH_FRINFC_TOPAZ_WR_NMN_0, /*!< NMN = 0x00 */ 135 PH_FRINFC_TOPAZ_WR_NMN_E1, /*!< NMN = 0xE1 */ 136 PH_FRINFC_TOPAZ_WR_L_TLV_0, /*!< L field of TLV = 0 */ 137 PH_FRINFC_TOPAZ_WR_L_TLV, /*!< To update the L field */ 138 PH_FRINFC_TOPAZ_DYNAMIC_INIT_CHK_NDEF, /*!< Internal state to represent the parsing of card to locate Ndef TLV*/ 139 PH_FRINFC_TOPAZ_DYNAMIC_INIT_FIND_NDEF_TLV 140 141 142 }; 143 /*@}*/ 144 145 /*! 146 * \name Topaz - TLV related constants 147 * 148 */ 149 /*@{*/ 150 #define PH_FRINFC_TOPAZ_NULL_T 0x00 /*!< Null TLV value = 0x00 */ 151 #define PH_FRINFC_TOPAZ_LOCK_CTRL_T 0x01 /*!< Lock TLV = 0x01 */ 152 #define PH_FRINFC_TOPAZ_MEM_CTRL_T 0x02 /*!< Memory TLV = 0x02 */ 153 #define PH_FRINFC_TOPAZ_NDEF_T 0x03 /*!< NDEF TLV = 0x03 */ 154 #define PH_FRINFC_TOPAZ_PROP_T 0xFD /*!< NDEF TLV = 0xFD */ 155 #define PH_FRINFC_TOPAZ_TERM_T 0xFE /*!< Terminator TLV value = 0xFE */ 156 157 #define PH_FRINFC_TOPAZ_NDEFTLV_L 0x00 /*!< Length value of TLV = 0x00 */ 158 #define PH_FRINFC_TOPAZ_NDEFTLV_LFF 0xFF /*!< Length value of TLV = 0xFF */ 159 #define PH_FRINFC_TOPAZ_MAX_CARD_SZ 0x60 /*!< Send Length for Read Ndef */ 160 /*@}*/ 161 162 163 /*! 164 * \name Topaz - Standard constants 165 * 166 */ 167 /*@{*/ 168 #define PH_FRINFC_TOPAZ_WR_A_BYTE 0x02 /*!< Send Length for Write Ndef */ 169 #define PH_FRINFC_TOPAZ_SEND_BUF_READ 0x01 /*!< Send Length for Read Ndef */ 170 #define PH_FRINFC_TOPAZ_HEADROM0_CHK 0xFF /*!< To check the header rom byte 0 */ 171 #define PH_FRINFC_TOPAZ_HEADROM0_VAL 0x11 /*!< Header rom byte 0 value of static card */ 172 #define PH_FRINFC_TOPAZ_READALL_RESP 0x7A /*!< Response of the read all command 122 bytes */ 173 #define PH_FRINFC_TOPAZ_TOTAL_RWBYTES 0x60 /*!< Total number of raw Bytes that can 174 be read or written to the card 96 bytes */ 175 #define PH_FRINFC_TOPAZ_TOTAL_RWBYTES1 0x5A /*!< Total number of bytes that can be read 176 or written 90 bytes */ 177 #define PH_FRINFC_TOPAZ_BYTE3_MSB 0xF0 /*!< most significant nibble of byte 3(RWA) shall be 178 0 */ 179 #define PH_FRINFC_TOPAZ_LOCKBIT_BYTE114 0x01 /*!< lock bits value of byte 104 */ 180 #define PH_FRINFC_TOPAZ_LOCKBIT_BYTE115_1 0x60 /*!< lock bits value of byte 105 */ 181 #define PH_FRINFC_TOPAZ_LOCKBIT_BYTE115_2 0xE0 /*!< lock bits value of byte 105 */ 182 #define PH_FRINFC_TOPAZ_LOCKBIT_BYTENO_0 114 /*!< lock bits byte number 104 */ 183 #define PH_FRINFC_TOPAZ_LOCKBIT_BYTENO_1 115 /*!< lock bits byte number 105 */ 184 #define PH_FRINFC_TOPAZ_CC_BYTENO_3 13 /*! Lock status according to CC bytes */ 185 #define PH_FRINFC_TOPAZ_CC_READWRITE 0x00 /*! Lock status according to CC bytes */ 186 #define PH_FRINFC_TOPAZ_CC_READONLY 0x0F /*! Lock status according to CC bytes */ 187 188 /**Topaz static commands*/ 189 #define PH_FRINFC_TOPAZ_CMD_READID 0x78U 190 #define PH_FRINFC_TOPAZ_CMD_READALL 0x00U 191 #define PH_FRINFC_TOPAZ_CMD_READ 0x01U 192 #define PH_FRINFC_TOPAZ_CMD_WRITE_1E 0x53U 193 #define PH_FRINFC_TOPAZ_CMD_WRITE_1NE 0x1AU 194 195 /**Topaz Dynamic commands*/ 196 #define PH_FRINFC_TOPAZ_CMD_RSEG 0x10U 197 #define PH_FRINFC_TOPAZ_CMD_READ8 0x02U 198 #define PH_FRINFC_TOPAZ_CMD_WRITE_E8 0x54U 199 #define PH_FRINFC_TOPAZ_CMD_WRITE_NE8 0x1BU 200 201 enum 202 { 203 PH_FRINFC_TOPAZ_VAL0, 204 PH_FRINFC_TOPAZ_VAL1, 205 PH_FRINFC_TOPAZ_VAL2, 206 PH_FRINFC_TOPAZ_VAL3, 207 PH_FRINFC_TOPAZ_VAL4, 208 PH_FRINFC_TOPAZ_VAL5, 209 PH_FRINFC_TOPAZ_VAL6, 210 PH_FRINFC_TOPAZ_VAL7, 211 PH_FRINFC_TOPAZ_VAL8, 212 PH_FRINFC_TOPAZ_VAL9, 213 PH_FRINFC_TOPAZ_VAL10, 214 PH_FRINFC_TOPAZ_VAL11, 215 PH_FRINFC_TOPAZ_VAL12, 216 PH_FRINFC_TOPAZ_VAL13, 217 PH_FRINFC_TOPAZ_VAL14, 218 PH_FRINFC_TOPAZ_VAL15, 219 PH_FRINFC_TOPAZ_VAL16, 220 PH_FRINFC_TOPAZ_VAL17, 221 PH_FRINFC_TOPAZ_VAL18 222 }; 223 224 225 /*@}*/ 226 227 /*! 228 * \brief \copydoc page_reg Resets the component instance to the initial state and lets the component forget about 229 * the list of registered items. Moreover, the lower device is set. 230 * 231 * \param[in] NdefMap Pointer to a valid or uninitialised instance of \ref phFriNfc_NdefMap_t . 232 * 233 * \note This function has to be called at the beginning, after creating an instance of 234 * \ref phFriNfc_NdefMap_t . Use this function to reset the instance and/or switch 235 * to a different underlying device (different NFC device or device mode, or different 236 * Remote Device). 237 */ 238 void phFriNfc_TopazMap_H_Reset( phFriNfc_NdefMap_t *NdefMap); 239 240 #ifdef FRINFC_READONLY_NDEF 241 242 /*! 243 * \ingroup grp_fri_smart_card_formatting 244 * 245 * \brief Initiates the conversion of the already NDEF formatted tag to READ ONLY. 246 * 247 * \copydoc page_ovr The function initiates the conversion of the already NDEF formatted 248 * tag to READ ONLY.After this formation, remote card would be properly Ndef Compliant and READ ONLY. 249 * Depending upon the different card type, this function handles formatting procedure. 250 * This function supports only for the TOPAZ tags. 251 * 252 * \param[in] NdefMap Pointer to a valid instance of the \ref phFriNfc_NdefMap_t structure describing 253 * the component context. 254 * \retval NFCSTATUS_PENDING The action has been successfully triggered. 255 * \retval Other values An error has occurred. 256 * 257 */ 258 NFCSTATUS 259 phFriNfc_TopazMap_ConvertToReadOnly ( 260 phFriNfc_NdefMap_t *NdefMap); 261 262 #endif /* #ifdef FRINFC_READONLY_NDEF */ 263 264 /*! 265 * \brief \copydoc page_ovr Initiates Reading of NDEF information from the Remote Device. 266 * 267 * The function initiates the reading of NDEF information from a Remote Device. 268 * It performs a reset of the state and starts the action (state machine). 269 * A periodic call of the \ref phFriNfc_NdefMap_Process has to be done once the action 270 * has been triggered. 271 * 272 * \param[in] NdefMap Pointer to a valid instance of the \ref phFriNfc_NdefMap_t structure describing 273 * the component context. 274 * 275 * \param[in] PacketData Pointer to a location that receives the NDEF Packet. 276 * 277 * \param[in,out] PacketDataLength Pointer to a variable receiving the length of the NDEF packet. 278 * 279 * \param[in] Offset Indicates whether the read operation shall start from the begining of the 280 * file/card storage \b or continue from the last offset. The last Offset set is stored 281 * within a context variable (must not be modified by the integration). 282 * If the caller sets the value to \ref PH_FRINFC_NDEFMAP_SEEK_CUR, the component shall 283 * start reading from the last offset set (continue where it has stopped before). 284 * If set to \ref PH_FRINFC_NDEFMAP_SEEK_BEGIN, the component shall start reading 285 * from the begining of the card (restarted) 286 * 287 * \retval NFCSTATUS_PENDING The action has been successfully triggered. 288 * \retval NFCSTATUS_INVALID_DEVICE_REQUEST If Previous Operation is Write Ndef and Offset 289 * is Current then this error is displayed. 290 * \retval NFCSTATUS_EOF_NDEF_CONTAINER_REACHED No Space in the File to read. 291 * \retval NFCSTATUS_MORE_INFORMATION There are more bytes to read in the card. 292 * \retval NFCSTATUS_SUCCESS Last Byte of the card read. 293 * \retval NFCSTATUS_INVALID_DEVICE The device has not been opened or has been disconnected 294 * meanwhile. 295 * \retval NFCSTATUS_CMD_ABORTED The caller/driver has aborted the request. 296 * \retval NFCSTATUS_BUFFER_TOO_SMALL The buffer provided by the caller is too small. 297 * \retval NFCSTATUS_RF_TIMEOUT No data has been received within the TIMEOUT period. 298 * 299 */ 300 301 NFCSTATUS phFriNfc_TopazMap_RdNdef( phFriNfc_NdefMap_t *NdefMap, 302 uint8_t *PacketData, 303 uint32_t *PacketDataLength, 304 uint8_t Offset); 305 306 307 308 /*! 309 * \brief \copydoc page_ovr Initiates Writing of NDEF information to the Remote Device. 310 * 311 * The function initiates the writing of NDEF information to a Remote Device. 312 * It performs a reset of the state and starts the action (state machine). 313 * A periodic call of the \ref phFriNfc_NdefMap_Process has to be done once the action 314 * has been triggered. 315 * 316 * \param[in] NdefMap Pointer to a valid instance of the \ref phFriNfc_NdefMap_t structure describing 317 * the component context. 318 * 319 * \param[in] PacketData Pointer to a location that holds the prepared NDEF Packet. 320 * 321 * \param[in,out] PacketDataLength Variable specifying the length of the prepared NDEF packet. 322 * 323 * \param[in] Offset Indicates whether the write operation shall start from the begining of the 324 * file/card storage \b or continue from the last offset. The last Offset set is stored 325 * within a context variable (must not be modified by the integration). 326 * If the caller sets the value to \ref PH_FRINFC_NDEFMAP_SEEK_CUR, the component shall 327 * start writing from the last offset set (continue where it has stopped before). 328 * If set to \ref PH_FRINFC_NDEFMAP_SEEK_BEGIN, the component shall start writing 329 * from the begining of the card (restarted) 330 * 331 * \retval NFCSTATUS_PENDING The action has been successfully triggered. 332 * \retval NFCSTATUS_INVALID_DEVICE_REQUEST If Previous Operation is Write Ndef and Offset 333 * is Current then this error is displayed. 334 * \retval NFCSTATUS_EOF_NDEF_CONTAINER_REACHED Last byte is written to the card after this 335 * no further writing is possible. 336 * \retval NFCSTATUS_SUCCESS Buffer provided by the user is completely written 337 * into the card. 338 * \retval NFCSTATUS_INVALID_DEVICE The device has not been opened or has been disconnected 339 * meanwhile. 340 * \retval NFCSTATUS_CMD_ABORTED The caller/driver has aborted the request. 341 * \retval NFCSTATUS_BUFFER_TOO_SMALL The buffer provided by the caller is too small. 342 * \retval NFCSTATUS_RF_TIMEOUT No data has been received within the TIMEOUT period. 343 * 344 */ 345 346 NFCSTATUS phFriNfc_TopazMap_WrNdef( phFriNfc_NdefMap_t *NdefMap, 347 uint8_t *PacketData, 348 uint32_t *PacketDataLength, 349 uint8_t Offset); 350 351 /*! 352 * \brief \copydoc page_ovr Check whether a particulat Remote Device is NDEF compliant. 353 * 354 * The function checks whether the peer device is NDEF compliant. 355 * 356 * \param[in] NdefMap Pointer to a valid instance of the \ref phFriNfc_NdefMap_t structure describing 357 * the component context. 358 * 359 * \retval NFCSTATUS_PENDING The action has been successfully triggered. 360 * \retval NFCSTATUS_INVALID_PARAMETER At least one parameter of the function is invalid. 361 * \retval NFCSTATUS_INVALID_DEVICE The device has not been opened or has been disconnected 362 * meanwhile. 363 * \retval NFCSTATUS_CMD_ABORTED The caller/driver has aborted the request. 364 * \retval NFCSTATUS_BUFFER_TOO_SMALL The buffer provided by the caller is too small. 365 * \retval NFCSTATUS_RF_TIMEOUT No data has been received within the TIMEOUT period. 366 * 367 */ 368 369 NFCSTATUS phFriNfc_TopazMap_ChkNdef( phFriNfc_NdefMap_t *NdefMap); 370 371 extern NFCSTATUS phFriNfc_Tpz_H_ChkSpcVer( phFriNfc_NdefMap_t *NdefMap, 372 uint8_t VersionNo); 373 374 375 /*! 376 * \brief \copydoc page_cb Completion Routine, Processing function, needed to avoid long blocking. 377 * 378 * The function call scheme is according to \ref grp_interact. No State reset is performed during operation. 379 * 380 * \copydoc pphFriNfc_Cr_t 381 * 382 * \note The lower (Overlapped HAL) layer must register a pointer to this function as a Completion 383 * Routine in order to be able to notify the component that an I/O has finished and data are 384 * ready to be processed. 385 * 386 */ 387 388 void phFriNfc_TopazMap_Process( void *Context, 389 NFCSTATUS Status); 390 391 392 /*! 393 * \name TopazDynamicMap - Following section describes constans, functions, variables used in 394 * Topaz Dyanmic card mapping. Ex : Topaz-512 395 * 396 */ 397 /*@{*/ 398 /*! 399 * \brief \copydoc Dynamic Card supported definitions. 400 * \note State Mechine Delcations. 401 */ 402 403 #define PH_FRINFC_TOPAZ_DYNAMIC_STATE_WRITE_COMPLETE 11 /*!< Write Operation Complete */ 404 #define PH_FRINFC_TOPAZ_DYNAMIC_STATE_NXP_READ 12 405 #define PH_FRINFC_TOPAZ_DYNAMIC_STATE_RD_CCBLK 13 406 #define PH_FRINFC_TOPAZ_DYNAMIC_STATE_INIT_RD_CCBLK 14 407 #define PH_FRINFC_TOPAZ_DYNAMIC_STATE_INIT_WR 15 408 #define PH_FRINFC_TOPAZ_DYNAMIC_STATE_WRITE_LEN 16 409 #define PH_FRINFC_TOPAZ_DYNAMIC_STATE_FIND_NDEF_TLV 17 410 #define PH_FRINFC_TOPAZ_DYNAMI_FOUND_RESERV_AREA 18 411 #define PH_FRINFC_TOPAZ_DYNAMIC_NOT_FOUND_RESERV_AREA 19 412 #define PH_FRINFC_TOPAZ_DYNAMIC_PROCESS_CHK_NDEF 20 413 #define PH_FRINFC_TOPAZ_DYNAMIC_FIND_NDEF_TLV 21 414 #define PH_FRINFC_TOPAZ_DYNAMIC_INIT_RD_NDEF 22 415 #define PH_FRINFC_TOPAZ_DYNAMIC_STATE_WR_MEM_TLV 23 416 #define PH_FRINFC_TOPAZ_DYNAMIC_STATE_WR_LOCK_TLV 24 417 418 /*! 419 * \brief \copydoc Dynamic Card : Capability Container bytes. 420 * \note State Mechine Delcations. 421 */ 422 423 #define PH_FRINFC_TOPAZ_DYNAMIC_CC_BYTE2_MMSIZE 0x3F /*!< Capability container byte 2 = 0x3F (Total free space 424 in the card) */ 425 #define PH_FRINFC_TOPAZ_DYNAMIC_HEADROM0_VAL 0x12 /*!< Header rom byte 0 value of dynamic card */ 426 427 #define PH_FRINFC_TOPAZ_DYNAMIC_TOTAL_RWBYTES 0x1CC /*!< Total number of raw Bytes that can 428 be read or written to the card 460 bytes 429 460 = 512 - 6 bloks * 8(48)( this includes 2 bytes of null byte in 02 block) 430 - 4 bytes ( NDEF TLV )*/ 431 #define PH_FRINFC_TOPAZ_DYNAMIC_MAX_CARD_SZ 0x1E0 /*!< Card size */ 432 #define PH_FRINFC_TOPAZ_DYNAMIC_MX_ONEBYTE_TLV_SIZE 0xFF /*!< MAX size supported in one byte length TLV*/ 433 #define PH_FRINFC_TOPAZ_DYNAMIC_MAX_DATA_SIZE_TO_WRITE 0xE6 /*!< MAX size supported by HAL if the data size > 255*/ 434 435 #define PH_FRINFC_TOPAZ_DYNAMIC_LOCKBYTE_0 0x00 /*!< lock bits value of byte 104 */ 436 #define PH_FRINFC_TOPAZ_DYNAMIC_LOCKBYTE_1 0x00 /*!< lock bits value of byte 105 */ 437 #define PH_FRINFC_TOPAZ_DYNAMIC_LOCKBYTE_2TO7 0x00 /*!< lock bits value of byte 105 */ 438 439 #define PH_FRINFC_TOPAZ_DYNAMIC_LOCKBIT_BYTENO_0 112 /*!< lock bits byte number 104:Blk0-7 */ 440 #define PH_FRINFC_TOPAZ_DYNAMIC_LOCKBIT_BYTENO_1 113 /*!< lock bits byte number 105:Blk08-F */ 441 #define PH_FRINFC_TOPAZ_DYNAMIC_LOCKBIT_BYTENO_2 122 /*!< lock bits byte number 124:Blk10-17 */ 442 #define PH_FRINFC_TOPAZ_DYNAMIC_LOCKBIT_BYTENO_3 123 /*!< lock bits byte number 125:Blk18-1F */ 443 #define PH_FRINFC_TOPAZ_DYNAMIC_LOCKBIT_BYTENO_4 124 /*!< lock bits byte number 126:Blk20-27*/ 444 #define PH_FRINFC_TOPAZ_DYNAMIC_LOCKBIT_BYTENO_5 125 /*!< lock bits byte number 127:Blk28-2F*/ 445 #define PH_FRINFC_TOPAZ_DYNAMIC_LOCKBIT_BYTENO_6 126 /*!< lock bits byte number 128:Blk30-37*/ 446 #define PH_FRINFC_TOPAZ_DYNAMIC_LOCKBIT_BYTENO_7 127 /*!< lock bits byte number 128:Blk30-37*/ 447 #define PH_FRINFC_TOPAZ_DYNAMIC_CC_BYTENO_3 11 /*! Lock status according to CC bytes */ 448 449 #define PH_FRINFC_TOPAZ_DYNAMIC_SEGMENT0 0x00 /*!< 00000000 : 0th segment */ 450 #define PH_FRINFC_TOPAZ_DYNAMIC_READSEG_RESP 0x80 451 452 #define PH_FRINFC_TOPAZ_DYNAMIC_MAX_BYTES_TO_READ_IN_ONEB_LTLV_FSEG 78 453 #define PH_FRINFC_TOPAZ_DYNAMIC_MAX_BYTES_TO_READ_IN_THREEB_LTLV_FSEG 76 454 455 #define PH_FRINFC_TOPAZ_DYNAMIC_MAX_DATA_SIZE PHHAL_MAX_DATASIZE 456 #define PH_FRINFC_TOPAZ_DYNAMIC_FSEG_BYTE_COUNT 104 457 #define PH_FRINFC_TOPAZ_DYNAMIC_SEG_BYTE_COUNT 128 458 #define PH_FRINFC_TOPAZ_DYNAMIC_CC_BLK_SIZE 18 459 #define PH_FRINFC_TOPAZ_DYNAMIC_CC_BLK_ADDRESS 8 460 #define PH_FRINFC_TOPAZ_DYNAMIC_UID_BLK_ADDRESS 0 461 #define PH_FRINFC_TOPAZ_DYNAMIC_LOCK_BYTE_SIZE 24 462 #define PH_FRINFC_TOPAZ_DYNAMIC_FSEG_TOT_DATA_BYTES 120 463 464 #define PH_FRINFC_TOPAZ_DYNAMIC_DATA_BYTE_COUNT_OF_FSEG_IN_ONEB_LTLV_FSEG 26 465 #define PH_FRINFC_TOPAZ_DYNAMIC_DATA_BYTE_COUNT_OF_FSEG_IN_THREEB_LTLV_FSEG 28 466 467 468 enum 469 { 470 471 NULL_TLV, 472 LOCK_TLV, 473 MEM_TLV, 474 NDEF_TLV, 475 PROP_TLV, 476 TERM_TLV, 477 INVALID_TLV, 478 VALID_TLV, 479 TLV_NOT_FOUND 480 481 }; 482 483 /*! 484 * \brief \copydoc page_ovr Initiates Reading of NDEF information from the Remote Device. 485 * 486 * The function initiates the reading of NDEF information from a Remote Device. 487 * It performs a reset of the state and starts the action (state machine). 488 * A periodic call of the \ref phFriNfc_NdefMap_Process has to be done once the action 489 * has been triggered. 490 * 491 * \param[in] NdefMap Pointer to a valid instance of the \ref phFriNfc_NdefMap_t structure describing 492 * the component context. 493 * 494 * \param[in] PacketData Pointer to a location that receives the NDEF Packet. 495 * 496 * \param[in,out] PacketDataLength Pointer to a variable receiving the length of the NDEF packet. 497 * 498 * \param[in] Offset Indicates whether the read operation shall start from the begining of the 499 * file/card storage \b or continue from the last offset. The last Offset set is stored 500 * within a context variable (must not be modified by the integration). 501 * If the caller sets the value to \ref PH_FRINFC_NDEFMAP_SEEK_CUR, the component shall 502 * start reading from the last offset set (continue where it has stopped before). 503 * If set to \ref PH_FRINFC_NDEFMAP_SEEK_BEGIN, the component shall start reading 504 * from the begining of the card (restarted) 505 * 506 * \retval NFCSTATUS_PENDING The action has been successfully triggered. 507 * \retval NFCSTATUS_INVALID_DEVICE_REQUEST If Previous Operation is Write Ndef and Offset 508 * is Current then this error is displayed. 509 * \retval NFCSTATUS_EOF_NDEF_CONTAINER_REACHED No Space in the File to read. 510 * \retval NFCSTATUS_MORE_INFORMATION There are more bytes to read in the card. 511 * \retval NFCSTATUS_SUCCESS Last Byte of the card read. 512 * \retval NFCSTATUS_INVALID_DEVICE The device has not been opened or has been disconnected 513 * meanwhile. 514 * \retval NFCSTATUS_CMD_ABORTED The caller/driver has aborted the request. 515 * \retval NFCSTATUS_BUFFER_TOO_SMALL The buffer provided by the caller is too small. 516 * \retval NFCSTATUS_RF_TIMEOUT No data has been received within the TIMEOUT period. 517 * 518 */ 519 520 NFCSTATUS phFriNfc_TopazDynamicMap_RdNdef( phFriNfc_NdefMap_t *NdefMap, 521 uint8_t *PacketData, 522 uint32_t *PacketDataLength, 523 uint8_t Offset); 524 525 /*! 526 * \brief \copydoc page_ovr Initiates Writing of NDEF information to the Remote Device. 527 * 528 * The function initiates the writing of NDEF information to a Remote Device. 529 * It performs a reset of the state and starts the action (state machine). 530 * A periodic call of the \ref phFriNfc_NdefMap_Process has to be done once the action 531 * has been triggered. 532 * 533 * \param[in] NdefMap Pointer to a valid instance of the \ref phFriNfc_NdefMap_t structure describing 534 * the component context. 535 * 536 * \param[in] PacketData Pointer to a location that holds the prepared NDEF Packet. 537 * 538 * \param[in,out] PacketDataLength Variable specifying the length of the prepared NDEF packet. 539 * 540 * \param[in] Offset Indicates whether the write operation shall start from the begining of the 541 * file/card storage \b or continue from the last offset. The last Offset set is stored 542 * within a context variable (must not be modified by the integration). 543 * If the caller sets the value to \ref PH_FRINFC_NDEFMAP_SEEK_CUR, the component shall 544 * start writing from the last offset set (continue where it has stopped before). 545 * If set to \ref PH_FRINFC_NDEFMAP_SEEK_BEGIN, the component shall start writing 546 * from the begining of the card (restarted) 547 * 548 * \retval NFCSTATUS_PENDING The action has been successfully triggered. 549 * \retval NFCSTATUS_INVALID_DEVICE_REQUEST If Previous Operation is Write Ndef and Offset 550 * is Current then this error is displayed. 551 * \retval NFCSTATUS_EOF_NDEF_CONTAINER_REACHED Last byte is written to the card after this 552 * no further writing is possible. 553 * \retval NFCSTATUS_SUCCESS Buffer provided by the user is completely written 554 * into the card. 555 * \retval NFCSTATUS_INVALID_DEVICE The device has not been opened or has been disconnected 556 * meanwhile. 557 * \retval NFCSTATUS_CMD_ABORTED The caller/driver has aborted the request. 558 * \retval NFCSTATUS_BUFFER_TOO_SMALL The buffer provided by the caller is too small. 559 * \retval NFCSTATUS_RF_TIMEOUT No data has been received within the TIMEOUT period. 560 * 561 */ 562 NFCSTATUS phFriNfc_TopazDynamicMap_WrNdef( phFriNfc_NdefMap_t *NdefMap, 563 uint8_t *PacketData, 564 uint32_t *PacketDataLength, 565 uint8_t Offset); 566 567 /*! 568 * \brief \copydoc page_ovr Check whether a particulat Remote Device is NDEF compliant. 569 * 570 * The function checks whether the peer device is NDEF compliant. 571 * 572 * \param[in] NdefMap Pointer to a valid instance of the \ref phFriNfc_NdefMap_t structure describing 573 * the component context. 574 * 575 * \retval NFCSTATUS_PENDING The action has been successfully triggered. 576 * \retval NFCSTATUS_INVALID_PARAMETER At least one parameter of the function is invalid. 577 * \retval NFCSTATUS_INVALID_DEVICE The device has not been opened or has been disconnected 578 * meanwhile. 579 * \retval NFCSTATUS_CMD_ABORTED The caller/driver has aborted the request. 580 * \retval NFCSTATUS_BUFFER_TOO_SMALL The buffer provided by the caller is too small. 581 * \retval NFCSTATUS_RF_TIMEOUT No data has been received within the TIMEOUT period. 582 * 583 */ 584 NFCSTATUS phFriNfc_TopazDynamicMap_ChkNdef( phFriNfc_NdefMap_t *NdefMap); 585 586 /*! 587 * \brief \copydoc page_cb Completion Routine, Processing function, needed to avoid long blocking. 588 * 589 * The function call scheme is according to \ref grp_interact. No State reset is performed during operation. 590 * 591 * \copydoc pphFriNfc_Cr_t 592 * 593 * \note The lower (Overlapped HAL) layer must register a pointer to this function as a Completion 594 * Routine in order to be able to notify the component that an I/O has finished and data are 595 * ready to be processed. 596 * 597 */ 598 void phFriNfc_TopazDynamicMap_Process( void *Context, 599 NFCSTATUS Status); 600 601 #ifdef FRINFC_READONLY_NDEF 602 /*! 603 * \brief \copydoc page_ovr Initiates Writing of NDEF information to the Remote Device. 604 * 605 * The function initiates the writing of NDEF information to a Remote Device. 606 * It performs a reset of the state and starts the action (state machine). 607 * A periodic call of the \ref phFriNfc_NdefMap_Process has to be done once the action 608 * has been triggered. 609 * 610 * \param[in] psNdefMap Pointer to a valid instance of the \ref phFriNfc_NdefMap_t structure describing 611 * the component context. 612 * 613 * 614 * \retval NFCSTATUS_PENDING The action has been successfully triggered. 615 * \retval NFCSTATUS_INVALID_DEVICE_REQUEST If Previous Operation is Write Ndef and Offset 616 * is Current then this error is displayed. 617 * \retval NFCSTATUS_EOF_NDEF_CONTAINER_REACHED Last byte is written to the card after this 618 * no further writing is possible. 619 * \retval NFCSTATUS_SUCCESS Buffer provided by the user is completely written 620 * into the card. 621 * \retval NFCSTATUS_INVALID_DEVICE The device has not been opened or has been disconnected 622 * meanwhile. 623 * \retval NFCSTATUS_CMD_ABORTED The caller/driver has aborted the request. 624 * \retval NFCSTATUS_BUFFER_TOO_SMALL The buffer provided by the caller is too small. 625 * \retval NFCSTATUS_RF_TIMEOUT No data has been received within the TIMEOUT period. 626 * 627 */ 628 NFCSTATUS 629 phFriNfc_TopazDynamicMap_ConvertToReadOnly ( 630 phFriNfc_NdefMap_t *psNdefMap); 631 #endif /* #ifdef FRINFC_READONLY_NDEF */ 632 633 634 635 #endif /* PHFRINFC_TOPAZMAP_H */ 636 637