Home | History | Annotate | Download | only in src
      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