Home | History | Annotate | Download | only in src
      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_MifareULMap.h
     19  * \brief NFC Ndef Mapping For Mifare UL Card.
     20  *
     21  * Project: NFC-FRI
     22  *
     23  * $Date: Fri Aug  7 13:06:49 2009 $
     24  * $Author: ing07336 $
     25  * $Revision: 1.9 $
     26  * $Aliases: NFC_FRI1.1_WK934_PREP_1,NFC_FRI1.1_WK934_R31_1,NFC_FRI1.1_WK941_PREP1,NFC_FRI1.1_WK941_PREP2,NFC_FRI1.1_WK941_1,NFC_FRI1.1_WK943_R32_1,NFC_FRI1.1_WK949_PREP1,NFC_FRI1.1_WK943_R32_10,NFC_FRI1.1_WK943_R32_13,NFC_FRI1.1_WK943_R32_14,NFC_FRI1.1_WK1007_R33_1,NFC_FRI1.1_WK1007_R33_4,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $
     27  *
     28  */
     29 
     30 #ifndef PHFRINFC_MIFAREULMAP_H
     31 #define PHFRINFC_MIFAREULMAP_H
     32 
     33 #include <phFriNfc.h>
     34 #if !defined PH_HAL4_ENABLE
     35 #include <phHal4Nfc.h>
     36 #endif
     37 #include <phNfcStatus.h>
     38 #include <phNfcTypes.h>
     39 #include <phFriNfc_NdefMap.h>
     40 
     41 #define PH_FRINFC_NDEFMAP_MIFAREMAP_FILEREVISION "$Revision: 1.9 $"
     42 #define PH_FRINFC_NDEFMAP_MIFAREMAP_FILEALIASES  "$Aliases: NFC_FRI1.1_WK934_PREP_1,NFC_FRI1.1_WK934_R31_1,NFC_FRI1.1_WK941_PREP1,NFC_FRI1.1_WK941_PREP2,NFC_FRI1.1_WK941_1,NFC_FRI1.1_WK943_R32_1,NFC_FRI1.1_WK949_PREP1,NFC_FRI1.1_WK943_R32_10,NFC_FRI1.1_WK943_R32_13,NFC_FRI1.1_WK943_R32_14,NFC_FRI1.1_WK1007_R33_1,NFC_FRI1.1_WK1007_R33_4,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $"
     43 
     44 
     45 /*!
     46  * \name Mifare UL - states of the Finite State machine
     47  *
     48  */
     49 /*@{*/
     50 #define PH_FRINFC_NDEFMAP_MFUL_STATE_READ                        1   /*!< Read State */
     51 #define PH_FRINFC_NDEFMAP_MFUL_STATE_WRITE                       2   /*!< Write is going on*/
     52 #define PH_FRINFC_NDEFMAP_MFUL_STATE_CHK_NDEF_COMP               3   /*!< Check Ndef is going on */
     53 #define PH_FRINFC_NDEFMAP_MFUL_STATE_FND_NDEF_COMP               4   /*!< to find the NDEF TLV */
     54 #define PH_FRINFC_NDEFMAP_MFUL_STATE_TERM_TLV                    5   /*!< to write the terminator TLV */
     55 #define PH_FRINFC_NDEFMAP_MFUL_STATE_WR_LEN_TLV                  6   /*!< Write L value of TLV */
     56 #define PH_FRINFC_NDEFMAP_MFUL_STATE_SELECT_SECTOR_CHK_1         7   /*!< to send sector select command 1 */
     57 #define PH_FRINFC_NDEFMAP_MFUL_STATE_SELECT_SECTOR_CHK_2		 8   /*!< to send sector select command 2 */
     58 #define PH_FRINFC_NDEFMAP_MFUL_STATE_SELECT_SECTOR_RESET_1       9   /*!< to send sector select command 1 for resetting sector 0 */
     59 #define PH_FRINFC_NDEFMAP_MFUL_STATE_SELECT_SECTOR_RESET_2		 10   /*!< to send sector select command 2 for resetting sector 0 */
     60 #define PH_FRINFC_NDEFMAP_MFUL_STATE_SELECT_SECTOR_READ_1      	 11   /*!< to send sector select command 1 for resetting sector 0 */
     61 #define PH_FRINFC_NDEFMAP_MFUL_STATE_SELECT_SECTOR_READ_2		 12   /*!< to send sector select command 2 for resetting sector 0 */
     62 #define PH_FRINFC_NDEFMAP_MFUL_STATE_SELECT_SECTOR_WRITE_1       13   /*!< to send sector select command 1 for resetting sector 0 */
     63 #define PH_FRINFC_NDEFMAP_MFUL_STATE_SELECT_SECTOR_WRITE_2		 14   /*!< to send sector select command 2 for resetting sector 0 */
     64 #define PH_FRINFC_NDEFMAP_MFUL_STATE_SELECT_SECTOR_RW_1       15   /*!< to send sector select command 1 for resetting sector 0 */
     65 #define PH_FRINFC_NDEFMAP_MFUL_STATE_SELECT_SECTOR_RW_2		 16   /*!< to send sector select command 2 for resetting sector 0 */
     66 #define PH_FRINFC_NDEFMAP_MFUL_STATE_SELECT_SECTOR_WRITE_INIT_1       17   /*!< to send sector select command 1 for resetting sector 0 */
     67 #define PH_FRINFC_NDEFMAP_MFUL_STATE_SELECT_SECTOR_WRITE_INIT_2		 18   /*!< to send sector select command 2 for resetting sector 0 */
     68 
     69 
     70 /*@}*/
     71 
     72 /*!
     73  * \name Mifare - constants for the capability container
     74  *
     75  */
     76 /*@{*/
     77 #define PH_FRINFC_NDEFMAP_MFUL_CC_BYTE0                 0xE1 /*!< Capability container byte 0 = 0xE1 */
     78 #define PH_FRINFC_NDEFMAP_MFUL_CC_BYTE1                 0x10 /*!< Capability container byte 1 = 0x10 */
     79 #define PH_FRINFC_NDEFMAP_MFUL_CC_BYTE2                 0x06 /*!< Capability container byte 2 = 0x06 */
     80 #define PH_FRINFC_NDEFMAP_MFUL_CC_BYTE3_RW              0x00 /*!< Capability container byte 3 = 0x00 for
     81                                                                   READ WRITE/INITIALISED card state*/
     82 #define PH_FRINFC_NDEFMAP_MFUL_CC_BYTE3_RO              0x0F /*!< Capability container byte 3 = 0x0F for
     83                                                                   READ only card state*/
     84 /*@}*/
     85 
     86 /*!
     87  * \name Mifare - constants for Flags
     88  *
     89  */
     90 /*@{*/
     91 #define PH_FRINFC_NDEFMAP_MFUL_FLAG0                    0 /*!< Flag value = 0 */
     92 #define PH_FRINFC_NDEFMAP_MFUL_FLAG1                    1 /*!< Flag value = 1 */
     93 /*@}*/
     94 
     95 /*!
     96  * \name Mifare - constants for left shift
     97  *
     98  */
     99 /*@{*/
    100 #define PH_FRINFC_NDEFMAP_MFUL_SHIFT8                   8 /*!< Flag value = 0 */
    101 /*@}*/
    102 
    103 /*!
    104  * \name Mifare - TLV related constants
    105  *
    106  */
    107 /*@{*/
    108 #define PH_FRINFC_NDEFMAP_MFUL_NDEFTLV_T                0x03 /*!< Type value of TLV = 0x03 */
    109 #define PH_FRINFC_NDEFMAP_MFUL_NDEFTLV_L                0x00 /*!< Length value of TLV = 0x00 */
    110 #define PH_FRINFC_NDEFMAP_MFUL_NDEFTLV_LFF              0xFF /*!< Length value of TLV = 0xFF */
    111 #define PH_FRINFC_NDEFMAP_MFUL_TERMTLV                  0xFE /*!< Terminator TLV value = 0xFE */
    112 #define PH_FRINFC_NDEFMAP_MFUL_NULLTLV                  0x00 /*!< Null TLV value = 0x00 */
    113 #define PH_FRINFC_NDEFMAP_MFUL_LOCK_CTRL_TLV			0x01 /*!< Lock Control TLV value = 0x01 */
    114 #define PH_FRINFC_NDEFMAP_MFUL_MEM_CTRL_TLV				0x02 /*!< Memory Control TVL value = 0x02 */
    115 #define PH_FRINFC_NDEFMAP_MFUL_PROPRIETRY_TLV			0xFD /*!< Proprietry TVL value = 0xFD */
    116 
    117 
    118 /*@}*/
    119 
    120 
    121 /*!
    122  * \name Mifare - Standard constants
    123  *
    124  */
    125 /*@{*/
    126 #define PH_FRINFC_NDEFMAP_MFUL_WR_A_BLK                 0x05 /*!< Send Length for Write Ndef */
    127 #define PH_FRINFC_NDEFMAP_MFUL_MAX_SEND_BUF_TO_READ     0x01 /*!< Send Length for Read Ndef */
    128 #define PH_FRINFC_NDEFMAP_MFUL_CHECK_RESP               0x04 /*!< Value of the Sense Response for Mifare UL */
    129 #define PH_FRINFC_NDEFMAP_MFUL_OTP_OFFSET               3    /*!< To initialise the Offset */
    130 #define PH_FRINFC_NDEFMAP_MFUL_MUL8                     8    /*!< Multiply by 8 */
    131 #define PH_FRINFC_NDEFMAP_MFUL_VAL0                     0    /*!< Value 0 */
    132 #define PH_FRINFC_NDEFMAP_MFUL_VAL1                     1    /*!< Value 1 */
    133 #define PH_FRINFC_NDEFMAP_MFUL_VAL2                     2    /*!< Value 2 */
    134 #define PH_FRINFC_NDEFMAP_MFUL_VAL3                     3    /*!< Value 3 */
    135 #define PH_FRINFC_NDEFMAP_MFUL_VAL4                     4    /*!< Value 4 */
    136 #define PH_FRINFC_NDEFMAP_MFUL_VAL5                     5    /*!< Value 5 */
    137 #define PH_FRINFC_NDEFMAP_MFUL_VAL64                    64    /*!< Value 64 */
    138 #define PH_FRINFC_NDEFMAP_MFUL_BYTE0                    0x00 /*!< Byte number 0 */
    139 #define PH_FRINFC_NDEFMAP_MFUL_BYTE1                    0x01 /*!< Byte number 1 */
    140 #define PH_FRINFC_NDEFMAP_MFUL_BYTE2                    0x02 /*!< Byte number 2 */
    141 #define PH_FRINFC_NDEFMAP_MFUL_BYTE3                    0x03 /*!< Byte number 3 */
    142 #define PH_FRINFC_NDEFMAP_MFUL_BYTE4                    0x04 /*!< Byte number 4 */
    143 #define PH_FRINFC_NDEFMAP_MFUL_BLOCK0                   0x00 /*!< Block number 0 */
    144 #define PH_FRINFC_NDEFMAP_MFUL_BLOCK1                   0x01 /*!< Block number 1 */
    145 #define PH_FRINFC_NDEFMAP_MFUL_BLOCK2                   0x02 /*!< Block number 2 */
    146 #define PH_FRINFC_NDEFMAP_MFUL_BLOCK3                   0x03 /*!< Block number 3 */
    147 #define PH_FRINFC_NDEFMAP_MFUL_BLOCK4                   0x04 /*!< Block number 4 */
    148 #define PH_FRINFC_NDEFMAP_MFUL_BLOCK5                   0x05 /*!< Block number 5 */
    149 
    150 #define PH_FRINFC_NDEFMAP_MFUL_RDBYTES_16               0x10 /*!< Read Bytes 16 */
    151 #define PH_FRINFC_NDEFMAP_STMFUL_MAX_CARD_SZ            48   /*!< For static maximum memory size is 48 bytes */
    152 #define PH_FRINFC_NDEFMAP_MFUL_WR_BUF_STR               0x04 /*!< To store the block of data written to the card */
    153 /*@}*/
    154 
    155 /*!
    156  * \brief \copydoc page_reg Resets the component instance to the initial state and lets the component forget about
    157  *        the list of registered items. Moreover, the lower device is set.
    158  *
    159  * \param[in] NdefMap Pointer to a valid or uninitialised instance of \ref phFriNfc_NdefMap_t .
    160  *
    161  * \note  This function has to be called at the beginning, after creating an instance of
    162  *        \ref phFriNfc_NdefMap_t . Use this function to reset the instance and/or switch
    163  *        to a different underlying device (different NFC device or device mode, or different
    164  *        Remote Device).
    165  */
    166 NFCSTATUS phFriNfc_MifareUL_H_Reset(  phFriNfc_NdefMap_t        *NdefMap);
    167 
    168 /*!
    169  * \brief \copydoc page_ovr Initiates Reading of NDEF information from the Remote Device.
    170  *
    171  * The function initiates the reading of NDEF information from a Remote Device.
    172  * It performs a reset of the state and starts the action (state machine).
    173  * A periodic call of the \ref phFriNfc_NdefMap_Process has to be done once the action
    174  * has been triggered.
    175  *
    176  * \param[in] NdefMap Pointer to a valid instance of the \ref phFriNfc_NdefMap_t structure describing
    177  *                    the component context.
    178  *
    179  * \param[in] PacketData  Pointer to a location that receives the NDEF Packet.
    180  *
    181  * \param[in,out] PacketDataLength Pointer to a variable receiving the length of the NDEF packet.
    182  *
    183  * \param[in] Offset Indicates whether the read operation shall start from the begining of the
    184  *            file/card storage \b or continue from the last offset. The last Offset set is stored
    185  *            within a context variable (must not be modified by the integration).
    186  *            If the caller sets the value to \ref PH_FRINFC_NDEFMAP_SEEK_CUR, the component shall
    187  *            start reading from the last offset set (continue where it has stopped before).
    188  *            If set to \ref PH_FRINFC_NDEFMAP_SEEK_BEGIN, the component shall start reading
    189  *            from the begining of the card (restarted)
    190  *
    191  * \retval NFCSTATUS_PENDING                       The action has been successfully triggered.
    192  * \retval NFCSTATUS_INVALID_DEVICE_REQUEST        If Previous Operation is Write Ndef and Offset
    193  *                                                 is Current then this error is displayed.
    194  * \retval NFCSTATUS_EOF_NDEF_CONTAINER_REACHED         No Space in the File to read.
    195  * \retval NFCSTATUS_MORE_INFORMATION              There are more bytes to read in the card.
    196  * \retval NFCSTATUS_SUCCESS                       Last Byte of the card read.
    197  * \retval NFCSTATUS_INVALID_DEVICE                The device has not been opened or has been disconnected
    198  *                                                 meanwhile.
    199  * \retval NFCSTATUS_CMD_ABORTED                   The caller/driver has aborted the request.
    200  * \retval NFCSTATUS_BUFFER_TOO_SMALL              The buffer provided by the caller is too small.
    201  * \retval NFCSTATUS_RF_TIMEOUT                    No data has been received within the TIMEOUT period.
    202  *
    203  */
    204 
    205 NFCSTATUS phFriNfc_MifareUL_RdNdef( phFriNfc_NdefMap_t  *NdefMap,
    206                                     uint8_t             *PacketData,
    207                                     uint32_t            *PacketDataLength,
    208                                     uint8_t             Offset);
    209 
    210 /*!
    211  * \brief \copydoc page_ovr Initiates Writing of NDEF information to the Remote Device.
    212  *
    213  * The function initiates the writing of NDEF information to a Remote Device.
    214  * It performs a reset of the state and starts the action (state machine).
    215  * A periodic call of the \ref phFriNfc_NdefMap_Process has to be done once the action
    216  * has been triggered.
    217  *
    218  * \param[in] NdefMap Pointer to a valid instance of the \ref phFriNfc_NdefMap_t structure describing
    219  *                    the component context.
    220  *
    221  * \param[in] PacketData  Pointer to a location that holds the prepared NDEF Packet.
    222  *
    223  * \param[in,out] PacketDataLength Variable specifying the length of the prepared NDEF packet.
    224  *
    225  * \param[in] Offset Indicates whether the write operation shall start from the begining of the
    226  *            file/card storage \b or continue from the last offset. The last Offset set is stored
    227  *            within a context variable (must not be modified by the integration).
    228  *            If the caller sets the value to \ref PH_FRINFC_NDEFMAP_SEEK_CUR, the component shall
    229  *            start writing from the last offset set (continue where it has stopped before).
    230  *            If set to \ref PH_FRINFC_NDEFMAP_SEEK_BEGIN, the component shall start writing
    231  *            from the begining of the card (restarted)
    232  *
    233  * \retval NFCSTATUS_PENDING                        The action has been successfully triggered.
    234  * \retval NFCSTATUS_INVALID_DEVICE_REQUEST         If Previous Operation is Write Ndef and Offset
    235  *                                                  is Current then this error is displayed.
    236  * \retval NFCSTATUS_EOF_NDEF_CONTAINER_REACHED               Last byte is written to the card after this
    237  *                                                  no further writing is possible.
    238  * \retval NFCSTATUS_SUCCESS                        Buffer provided by the user is completely written
    239  *                                                  into the card.
    240  * \retval NFCSTATUS_INVALID_DEVICE                 The device has not been opened or has been disconnected
    241  *                                                  meanwhile.
    242  * \retval NFCSTATUS_CMD_ABORTED                    The caller/driver has aborted the request.
    243  * \retval NFCSTATUS_BUFFER_TOO_SMALL               The buffer provided by the caller is too small.
    244  * \retval NFCSTATUS_RF_TIMEOUT                     No data has been received within the TIMEOUT period.
    245  *
    246  */
    247 
    248 NFCSTATUS phFriNfc_MifareUL_WrNdef( phFriNfc_NdefMap_t  *NdefMap,
    249                                     uint8_t             *PacketData,
    250                                     uint32_t            *PacketDataLength,
    251                                     uint8_t             Offset);
    252 
    253 /*!
    254  * \brief \copydoc page_ovr Check whether a particulat Remote Device is NDEF compliant.
    255  *
    256  * The function checks whether the peer device is NDEF compliant.
    257  *
    258  * \param[in] NdefMap Pointer to a valid instance of the \ref phFriNfc_NdefMap_t structure describing
    259  *                    the component context.
    260  *
    261  * \retval NFCSTATUS_PENDING               The action has been successfully triggered.
    262  * \retval NFCSTATUS_INVALID_PARAMETER     At least one parameter of the function is invalid.
    263  * \retval NFCSTATUS_INVALID_DEVICE         The device has not been opened or has been disconnected
    264  *                                          meanwhile.
    265  * \retval NFCSTATUS_CMD_ABORTED            The caller/driver has aborted the request.
    266  * \retval NFCSTATUS_BUFFER_TOO_SMALL       The buffer provided by the caller is too small.
    267  * \retval NFCSTATUS_RF_TIMEOUT             No data has been received within the TIMEOUT period.
    268  *
    269  */
    270 
    271 NFCSTATUS phFriNfc_MifareUL_ChkNdef(    phFriNfc_NdefMap_t  *NdefMap);
    272 
    273 /*!
    274  * \brief \copydoc page_cb Completion Routine, Processing function, needed to avoid long blocking.
    275  *
    276  * The function call scheme is according to \ref grp_interact. No State reset is performed during operation.
    277  *
    278  * \copydoc pphFriNfc_Cr_t
    279  *
    280  * \note The lower (Overlapped HAL) layer must register a pointer to this function as a Completion
    281  *       Routine in order to be able to notify the component that an I/O has finished and data are
    282  *       ready to be processed.
    283  *
    284  */
    285 
    286 void phFriNfc_MifareUL_Process( void        *Context,
    287                                 NFCSTATUS   Status);
    288 
    289 
    290 #endif /* PHFRINFC_MIFAREULMAP_H */
    291