Fork of the GitHub

Committer:
DiegoOstuni
Date:
Thu Nov 14 14:34:50 2019 +0000
Revision:
0:75fc82583a41
Add files

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DiegoOstuni 0:75fc82583a41 1
DiegoOstuni 0:75fc82583a41 2 /******************************************************************************
DiegoOstuni 0:75fc82583a41 3 * @attention
DiegoOstuni 0:75fc82583a41 4 *
DiegoOstuni 0:75fc82583a41 5 * <h2><center>&copy; COPYRIGHT 2016 STMicroelectronics</center></h2>
DiegoOstuni 0:75fc82583a41 6 *
DiegoOstuni 0:75fc82583a41 7 * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License");
DiegoOstuni 0:75fc82583a41 8 * You may not use this file except in compliance with the License.
DiegoOstuni 0:75fc82583a41 9 * You may obtain a copy of the License at:
DiegoOstuni 0:75fc82583a41 10 *
DiegoOstuni 0:75fc82583a41 11 * http://www.st.com/myliberty
DiegoOstuni 0:75fc82583a41 12 *
DiegoOstuni 0:75fc82583a41 13 * Unless required by applicable law or agreed to in writing, software
DiegoOstuni 0:75fc82583a41 14 * distributed under the License is distributed on an "AS IS" BASIS,
DiegoOstuni 0:75fc82583a41 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
DiegoOstuni 0:75fc82583a41 16 * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY,
DiegoOstuni 0:75fc82583a41 17 * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
DiegoOstuni 0:75fc82583a41 18 * See the License for the specific language governing permissions and
DiegoOstuni 0:75fc82583a41 19 * limitations under the License.
DiegoOstuni 0:75fc82583a41 20 *
DiegoOstuni 0:75fc82583a41 21 ******************************************************************************/
DiegoOstuni 0:75fc82583a41 22
DiegoOstuni 0:75fc82583a41 23 /*
DiegoOstuni 0:75fc82583a41 24 * PROJECT: ST25R391x firmware
DiegoOstuni 0:75fc82583a41 25 * $Revision: $
DiegoOstuni 0:75fc82583a41 26 * LANGUAGE: ISO C99
DiegoOstuni 0:75fc82583a41 27 */
DiegoOstuni 0:75fc82583a41 28
DiegoOstuni 0:75fc82583a41 29 /*! \file rfal_nfcb.h
DiegoOstuni 0:75fc82583a41 30 *
DiegoOstuni 0:75fc82583a41 31 * \author Gustavo Patricio
DiegoOstuni 0:75fc82583a41 32 *
DiegoOstuni 0:75fc82583a41 33 * \brief Implementation of NFC-B (ISO14443B) helpers
DiegoOstuni 0:75fc82583a41 34 *
DiegoOstuni 0:75fc82583a41 35 * It provides a NFC-B Poller (ISO14443B PCD) interface and
DiegoOstuni 0:75fc82583a41 36 * also provides some NFC-B Listener (ISO14443B PICC) helpers
DiegoOstuni 0:75fc82583a41 37 *
DiegoOstuni 0:75fc82583a41 38 * The definitions and helpers methods provided by this module are only
DiegoOstuni 0:75fc82583a41 39 * up to ISO14443-3 layer (excluding ATTRIB)
DiegoOstuni 0:75fc82583a41 40 *
DiegoOstuni 0:75fc82583a41 41 *
DiegoOstuni 0:75fc82583a41 42 * @addtogroup RFAL
DiegoOstuni 0:75fc82583a41 43 * @{
DiegoOstuni 0:75fc82583a41 44 *
DiegoOstuni 0:75fc82583a41 45 * @addtogroup RFAL-AL
DiegoOstuni 0:75fc82583a41 46 * @brief RFAL Abstraction Layer
DiegoOstuni 0:75fc82583a41 47 * @{
DiegoOstuni 0:75fc82583a41 48 *
DiegoOstuni 0:75fc82583a41 49 * @addtogroup NFC-B
DiegoOstuni 0:75fc82583a41 50 * @brief RFAL NFC-B Module
DiegoOstuni 0:75fc82583a41 51 * @{
DiegoOstuni 0:75fc82583a41 52 *
DiegoOstuni 0:75fc82583a41 53 */
DiegoOstuni 0:75fc82583a41 54
DiegoOstuni 0:75fc82583a41 55
DiegoOstuni 0:75fc82583a41 56 #ifndef RFAL_NFCB_H
DiegoOstuni 0:75fc82583a41 57 #define RFAL_NFCB_H
DiegoOstuni 0:75fc82583a41 58
DiegoOstuni 0:75fc82583a41 59 /*
DiegoOstuni 0:75fc82583a41 60 ******************************************************************************
DiegoOstuni 0:75fc82583a41 61 * INCLUDES
DiegoOstuni 0:75fc82583a41 62 ******************************************************************************
DiegoOstuni 0:75fc82583a41 63 */
DiegoOstuni 0:75fc82583a41 64 #include "platform1.h"
DiegoOstuni 0:75fc82583a41 65 #include "st_errno.h"
DiegoOstuni 0:75fc82583a41 66 #include "rfal_rf.h"
DiegoOstuni 0:75fc82583a41 67
DiegoOstuni 0:75fc82583a41 68 /*
DiegoOstuni 0:75fc82583a41 69 ******************************************************************************
DiegoOstuni 0:75fc82583a41 70 * GLOBAL DEFINES
DiegoOstuni 0:75fc82583a41 71 ******************************************************************************
DiegoOstuni 0:75fc82583a41 72 */
DiegoOstuni 0:75fc82583a41 73
DiegoOstuni 0:75fc82583a41 74 #define RFAL_NFCB_FWTSENSB 7680 /*!< NFC-B FWT(SENSB) Digital 1.1 A.3 */
DiegoOstuni 0:75fc82583a41 75 #define RFAL_NFCB_DTPOLL 49152 /*!< NFC-B Delta Tb Poll Digital 1.1 A.3 */
DiegoOstuni 0:75fc82583a41 76 #define RFAL_NFCB_DFWT_11 rfalConvMsTo1fc(17) /*!< NFC-B dFWT (16.4ms) Digital 1.1 A.3 */
DiegoOstuni 0:75fc82583a41 77 #define RFAL_NFCB_DFWT_10 rfalConvMsTo1fc(20) /*!< NFC-B dFWT (20ms) Digital 1.0 A.2 */
DiegoOstuni 0:75fc82583a41 78
DiegoOstuni 0:75fc82583a41 79 #define RFAL_NFCB_AFI 0x00 /*!< NFC-B default Application Family Digital 1.1 7.6.1.1 */
DiegoOstuni 0:75fc82583a41 80 #define RFAL_NFCB_PARAM 0x00 /*!< NFC-B default SENSB_REQ PARAM */
DiegoOstuni 0:75fc82583a41 81 #define RFAL_NFCB_CRC_LEN 2 /*!< NFC-B CRC length and CRC_B(AID) Digital 1.1 Table 28 */
DiegoOstuni 0:75fc82583a41 82 #define RFAL_NFCB_NFCID0_LEN 4 /*!< Length of NFC-B NFCID0 */
DiegoOstuni 0:75fc82583a41 83 #define RFAL_NFCB_CMD_LEN 1 /*!< Length of NFC-B Command */
DiegoOstuni 0:75fc82583a41 84
DiegoOstuni 0:75fc82583a41 85 #define RFAL_NFCB_SENSB_RES_LEN 12 /*!< Standard length of SENSB_RES without SFGI byte */
DiegoOstuni 0:75fc82583a41 86 #define RFAL_NFCB_SENSB_RES_EXT_LEN 13 /*!< Extended length of SENSB_RES with SFGI byte */
DiegoOstuni 0:75fc82583a41 87
DiegoOstuni 0:75fc82583a41 88 #define RFAL_NFCB_SENSB_REQ_ADV_FEATURE 0x20 /*!< Bit mask for Advance Feature in SENSB_REQ */
DiegoOstuni 0:75fc82583a41 89 #define RFAL_NFCB_SENSB_RES_FSCI_MASK 0x0F /*!< Bit mask for FSCI value in SENSB_RES */
DiegoOstuni 0:75fc82583a41 90 #define RFAL_NFCB_SENSB_RES_FSCI_SHIFT 4 /*!< Shift for FSCI value in SENSB_RES */
DiegoOstuni 0:75fc82583a41 91 #define RFAL_NFCB_SENSB_RES_PROTO_RFU_MASK 0x08 /*!< Bit mask for Protocol Type RFU in SENSB_RES */
DiegoOstuni 0:75fc82583a41 92 #define RFAL_NFCB_SENSB_RES_PROTO_TR2_MASK 0x03 /*!< Bit mask for Protocol Type TR2 in SENSB_RES */
DiegoOstuni 0:75fc82583a41 93 #define RFAL_NFCB_SENSB_RES_PROTO_TR2_SHIFT 1 /*!< Shift for Protocol Type TR2 in SENSB_RES */
DiegoOstuni 0:75fc82583a41 94 #define RFAL_NFCB_SENSB_RES_PROTO_ISO_MASK 0x01 /*!< Bit mask Protocol Type ISO14443 Compliant in SENSB_RES */
DiegoOstuni 0:75fc82583a41 95 #define RFAL_NFCB_SENSB_RES_FWI_MASK 0x0F /*!< Bit mask for FWI value in SENSB_RES */
DiegoOstuni 0:75fc82583a41 96 #define RFAL_NFCB_SENSB_RES_FWI_SHIFT 4 /*!< Bit mask for FWI value in SENSB_RES */
DiegoOstuni 0:75fc82583a41 97 #define RFAL_NFCB_SENSB_RES_ADC_MASK 0x0C /*!< Bit mask for ADC value in SENSB_RES */
DiegoOstuni 0:75fc82583a41 98 #define RFAL_NFCB_SENSB_RES_ADC_ADV_FEATURE_MASK 0x08 /*!< Bit mask for ADC.Advanced Proto Features in SENSB_RES */
DiegoOstuni 0:75fc82583a41 99 #define RFAL_NFCB_SENSB_RES_ADC_PROPRIETARY_MASK 0x04 /*!< Bit mask for ADC.Proprietary Application in SENSB_RES */
DiegoOstuni 0:75fc82583a41 100 #define RFAL_NFCB_SENSB_RES_FO_DID_MASK 0x01 /*!< Bit mask for DID in SENSB_RES */
DiegoOstuni 0:75fc82583a41 101 #define RFAL_NFCB_SENSB_RES_FO_NAD_MASK 0x02 /*!< Bit mask for DID in SENSB_RES */
DiegoOstuni 0:75fc82583a41 102 #define RFAL_NFCB_SENSB_RES_FO_MASK 0x03 /*!< Bit mask for FO value in SENSB_RES (NAD and DID) */
DiegoOstuni 0:75fc82583a41 103 #define RFAL_NFCB_SENSB_RES_SFGI_MASK 0x0F /*!< Bit mask for SFGI in SENSB_RES */
DiegoOstuni 0:75fc82583a41 104 #define RFAL_NFCB_SENSB_RES_SFGI_SHIFT 4 /*!< Shift for SFGI in SENSB_RES */
DiegoOstuni 0:75fc82583a41 105
DiegoOstuni 0:75fc82583a41 106 /*
DiegoOstuni 0:75fc82583a41 107 ******************************************************************************
DiegoOstuni 0:75fc82583a41 108 * GLOBAL MACROS
DiegoOstuni 0:75fc82583a41 109 ******************************************************************************
DiegoOstuni 0:75fc82583a41 110 */
DiegoOstuni 0:75fc82583a41 111
DiegoOstuni 0:75fc82583a41 112 /*! Get device's FSCI given its SENSB_RES Digital 1.1 7.6.2 */
DiegoOstuni 0:75fc82583a41 113 #define rfalNfcbGetFSCI( sensbRes ) ((((rfalNfcbSensbRes*)sensbRes)->protInfo.FsciProType >> RFAL_NFCB_SENSB_RES_FSCI_SHIFT) & RFAL_NFCB_SENSB_RES_FSCI_MASK )
DiegoOstuni 0:75fc82583a41 114
DiegoOstuni 0:75fc82583a41 115 /*
DiegoOstuni 0:75fc82583a41 116 ******************************************************************************
DiegoOstuni 0:75fc82583a41 117 * GLOBAL TYPES
DiegoOstuni 0:75fc82583a41 118 ******************************************************************************
DiegoOstuni 0:75fc82583a41 119 */
DiegoOstuni 0:75fc82583a41 120
DiegoOstuni 0:75fc82583a41 121 /*! SENSB_REQ and ALLB_REQ param Digital 1.1 7.6.1 */
DiegoOstuni 0:75fc82583a41 122 typedef enum
DiegoOstuni 0:75fc82583a41 123 {
DiegoOstuni 0:75fc82583a41 124 RFAL_NFCB_SENS_CMD_ALLB_REQ = 0x08, /*!< ALLB_REQ (WUPB) */
DiegoOstuni 0:75fc82583a41 125 RFAL_NFCB_SENS_CMD_SENSB_REQ = 0x00 /*!< SENSB_REQ (REQB) */
DiegoOstuni 0:75fc82583a41 126 } rfalNfcbSensCmd;
DiegoOstuni 0:75fc82583a41 127
DiegoOstuni 0:75fc82583a41 128
DiegoOstuni 0:75fc82583a41 129 /*! Number of Slots (NI) codes used for NFC-B anti collision Digital 1.1 Table 26 */
DiegoOstuni 0:75fc82583a41 130 typedef enum
DiegoOstuni 0:75fc82583a41 131 {
DiegoOstuni 0:75fc82583a41 132 RFAL_NFCB_SLOT_NUM_1 = 0, /*!< N=0 : 1 slot */
DiegoOstuni 0:75fc82583a41 133 RFAL_NFCB_SLOT_NUM_2 = 1, /*!< N=1 : 2 slots */
DiegoOstuni 0:75fc82583a41 134 RFAL_NFCB_SLOT_NUM_4 = 2, /*!< N=2 : 4 slots */
DiegoOstuni 0:75fc82583a41 135 RFAL_NFCB_SLOT_NUM_8 = 3, /*!< N=3 : 8 slots */
DiegoOstuni 0:75fc82583a41 136 RFAL_NFCB_SLOT_NUM_16 = 4 /*!< N=4 : 16 slots */
DiegoOstuni 0:75fc82583a41 137 }rfalNfcbSlots;
DiegoOstuni 0:75fc82583a41 138
DiegoOstuni 0:75fc82583a41 139
DiegoOstuni 0:75fc82583a41 140 /*! SENSB_RES (ATQB) Application Data Format Digital 1.1 Table 28 */
DiegoOstuni 0:75fc82583a41 141 typedef struct
DiegoOstuni 0:75fc82583a41 142 {
DiegoOstuni 0:75fc82583a41 143 uint8_t AFI; /*!< Application Family Identifier */
DiegoOstuni 0:75fc82583a41 144 uint8_t CRC_B[RFAL_NFCB_CRC_LEN]; /*!< CRC_B of AID */
DiegoOstuni 0:75fc82583a41 145 uint8_t numApps; /*!< Number of Applications */
DiegoOstuni 0:75fc82583a41 146 } rfalNfcbSensbResAppData;
DiegoOstuni 0:75fc82583a41 147
DiegoOstuni 0:75fc82583a41 148
DiegoOstuni 0:75fc82583a41 149 /*! SENSB_RES Protocol Info format Digital 1.1 Table 29 */
DiegoOstuni 0:75fc82583a41 150 typedef struct
DiegoOstuni 0:75fc82583a41 151 {
DiegoOstuni 0:75fc82583a41 152 uint8_t BRC; /*!< Bit Rate Capability */
DiegoOstuni 0:75fc82583a41 153 uint8_t FsciProType; /*!< Frame Size Card Integer [4b] | Protocol Type[4 bits] */
DiegoOstuni 0:75fc82583a41 154 uint8_t FwiAdcFo; /*!< Frame Waiting Integer [4b] | Application Data Coding [2b] | Frame Options [2b] */
DiegoOstuni 0:75fc82583a41 155 uint8_t SFGI; /*!< Optional: Start-Up Frame Guard Time Integer[4b] | RFU [4b] */
DiegoOstuni 0:75fc82583a41 156 } rfalNfcbSensbResProtocolInfo;
DiegoOstuni 0:75fc82583a41 157
DiegoOstuni 0:75fc82583a41 158
DiegoOstuni 0:75fc82583a41 159 /*! SENSB_RES format Digital 1.1 7.6.2 */
DiegoOstuni 0:75fc82583a41 160 typedef struct
DiegoOstuni 0:75fc82583a41 161 {
DiegoOstuni 0:75fc82583a41 162 uint8_t cmd; /*!< SENSB_RES: 50h */
DiegoOstuni 0:75fc82583a41 163 uint8_t nfcid0[RFAL_NFCB_NFCID0_LEN]; /*!< NFC Identifier (PUPI)*/
DiegoOstuni 0:75fc82583a41 164 rfalNfcbSensbResAppData appData; /*!< Application Data */
DiegoOstuni 0:75fc82583a41 165 rfalNfcbSensbResProtocolInfo protInfo; /*!< Protocol Information */
DiegoOstuni 0:75fc82583a41 166 } rfalNfcbSensbRes;
DiegoOstuni 0:75fc82583a41 167
DiegoOstuni 0:75fc82583a41 168
DiegoOstuni 0:75fc82583a41 169 /*! NFC-B listener device (PICC) struct */
DiegoOstuni 0:75fc82583a41 170 typedef struct
DiegoOstuni 0:75fc82583a41 171 {
DiegoOstuni 0:75fc82583a41 172 uint8_t sensbResLen; /*!< SENSB_RES length */
DiegoOstuni 0:75fc82583a41 173 rfalNfcbSensbRes sensbRes; /*!< SENSB_RES */
DiegoOstuni 0:75fc82583a41 174 bool isSleep; /*!< Device sleeping flag */
DiegoOstuni 0:75fc82583a41 175 }rfalNfcbListenDevice;
DiegoOstuni 0:75fc82583a41 176
DiegoOstuni 0:75fc82583a41 177 /*
DiegoOstuni 0:75fc82583a41 178 ******************************************************************************
DiegoOstuni 0:75fc82583a41 179 * GLOBAL FUNCTION PROTOTYPES
DiegoOstuni 0:75fc82583a41 180 ******************************************************************************
DiegoOstuni 0:75fc82583a41 181 */
DiegoOstuni 0:75fc82583a41 182
DiegoOstuni 0:75fc82583a41 183 /*!
DiegoOstuni 0:75fc82583a41 184 *****************************************************************************
DiegoOstuni 0:75fc82583a41 185 * \brief Initialize NFC-B Poller mode
DiegoOstuni 0:75fc82583a41 186 *
DiegoOstuni 0:75fc82583a41 187 * This methods configures RFAL RF layer to perform as a
DiegoOstuni 0:75fc82583a41 188 * NFC-B Poller/RW (ISO14443B PCD) including all default timings
DiegoOstuni 0:75fc82583a41 189 *
DiegoOstuni 0:75fc82583a41 190 * It sets NFC-B parameters (AFI, PARAM) to default values
DiegoOstuni 0:75fc82583a41 191 *
DiegoOstuni 0:75fc82583a41 192 * \return ERR_WRONG_STATE : RFAL not initialized or mode not set
DiegoOstuni 0:75fc82583a41 193 * \return ERR_NONE : No error
DiegoOstuni 0:75fc82583a41 194 *****************************************************************************
DiegoOstuni 0:75fc82583a41 195 */
DiegoOstuni 0:75fc82583a41 196 ReturnCode rfalNfcbPollerInitialize( SPI* mspiChannel, ST25R3911* mST25, DigitalOut* gpio_cs, InterruptIn* IRQ, DigitalOut* fieldLED_01, DigitalOut* fieldLED_02, DigitalOut* fieldLED_03, DigitalOut* fieldLED_04, DigitalOut* fieldLED_05, DigitalOut* fieldLED_06 );
DiegoOstuni 0:75fc82583a41 197
DiegoOstuni 0:75fc82583a41 198
DiegoOstuni 0:75fc82583a41 199 /*!
DiegoOstuni 0:75fc82583a41 200 *****************************************************************************
DiegoOstuni 0:75fc82583a41 201 * \brief Set NFC-B Poller parameters
DiegoOstuni 0:75fc82583a41 202 *
DiegoOstuni 0:75fc82583a41 203 * This methods configures RFAL RF layer to perform as a
DiegoOstuni 0:75fc82583a41 204 * NFCA Poller/RW (ISO14443A PCD) including all default timings
DiegoOstuni 0:75fc82583a41 205 *
DiegoOstuni 0:75fc82583a41 206 * Additionally configures NFC-B specific parameters to be used on the
DiegoOstuni 0:75fc82583a41 207 * following communications
DiegoOstuni 0:75fc82583a41 208 *
DiegoOstuni 0:75fc82583a41 209 * \param[in] AFI : Application Family Identifier to be used
DiegoOstuni 0:75fc82583a41 210 * \param[in] PARAM : PARAM to be used, it announces whether Advanced
DiegoOstuni 0:75fc82583a41 211 * Features or Extended SENSB_RES is supported
DiegoOstuni 0:75fc82583a41 212 *
DiegoOstuni 0:75fc82583a41 213 * \return ERR_WRONG_STATE : RFAL not initialized or mode not set
DiegoOstuni 0:75fc82583a41 214 * \return ERR_NONE : No error
DiegoOstuni 0:75fc82583a41 215 *****************************************************************************
DiegoOstuni 0:75fc82583a41 216 */
DiegoOstuni 0:75fc82583a41 217 ReturnCode rfalNfcbPollerInitializeWithParams( uint8_t AFI, uint8_t PARAM, SPI* mspiChannel, ST25R3911* mST25, DigitalOut* gpio_cs, InterruptIn* IRQ, DigitalOut* fieldLED_01, DigitalOut* fieldLED_02, DigitalOut* fieldLED_03, DigitalOut* fieldLED_04, DigitalOut* fieldLED_05, DigitalOut* fieldLED_06 );
DiegoOstuni 0:75fc82583a41 218
DiegoOstuni 0:75fc82583a41 219
DiegoOstuni 0:75fc82583a41 220 /*!
DiegoOstuni 0:75fc82583a41 221 *****************************************************************************
DiegoOstuni 0:75fc82583a41 222 * \brief NFC-B Poller Check Presence
DiegoOstuni 0:75fc82583a41 223 *
DiegoOstuni 0:75fc82583a41 224 * This method checks if a NFC-B Listen device (PICC) is present on the field
DiegoOstuni 0:75fc82583a41 225 * by sending an ALLB_REQ (WUPB) or SENSB_REQ (REQB)
DiegoOstuni 0:75fc82583a41 226 *
DiegoOstuni 0:75fc82583a41 227 * \param[in] cmd : Indicate if to send an ALL_REQ or a SENS_REQ
DiegoOstuni 0:75fc82583a41 228 * \param[in] slots : The number of slots to be announced
DiegoOstuni 0:75fc82583a41 229 * \param[out] sensbRes : If received, the SENSB_RES
DiegoOstuni 0:75fc82583a41 230 * \param[out] sensbResLen : If received, the SENSB_RES length
DiegoOstuni 0:75fc82583a41 231 *
DiegoOstuni 0:75fc82583a41 232 *
DiegoOstuni 0:75fc82583a41 233 * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode
DiegoOstuni 0:75fc82583a41 234 * \return ERR_PARAM : Invalid parameters
DiegoOstuni 0:75fc82583a41 235 * \return ERR_IO : Generic internal error
DiegoOstuni 0:75fc82583a41 236 * \return ERR_TIMEOUT : Timeout error, no listener device detected
DiegoOstuni 0:75fc82583a41 237 * \return ERR_RF_COLLISION : Collision detected one or more device in the field
DiegoOstuni 0:75fc82583a41 238 * \return ERR_PAR : Parity error detected, one or more device in the field
DiegoOstuni 0:75fc82583a41 239 * \return ERR_CRC : CRC error detected, one or more device in the field
DiegoOstuni 0:75fc82583a41 240 * \return ERR_FRAMING : Framing error detected, one or more device in the field
DiegoOstuni 0:75fc82583a41 241 * \return ERR_PROTO : Protocol error detected, invalid SENSB_RES received
DiegoOstuni 0:75fc82583a41 242 * \return ERR_NONE : No error, SENSB_RES received
DiegoOstuni 0:75fc82583a41 243 *****************************************************************************
DiegoOstuni 0:75fc82583a41 244 */
DiegoOstuni 0:75fc82583a41 245 ReturnCode rfalNfcbPollerCheckPresence( rfalNfcbSensCmd cmd, rfalNfcbSlots slots, rfalNfcbSensbRes *sensbRes, uint8_t *sensbResLen, SPI* mspiChannel, ST25R3911* mST25, DigitalOut* gpio_cs, InterruptIn* IRQ, DigitalOut* fieldLED_01, DigitalOut* fieldLED_02, DigitalOut* fieldLED_03, DigitalOut* fieldLED_04, DigitalOut* fieldLED_05, DigitalOut* fieldLED_06 );
DiegoOstuni 0:75fc82583a41 246
DiegoOstuni 0:75fc82583a41 247
DiegoOstuni 0:75fc82583a41 248 /*!
DiegoOstuni 0:75fc82583a41 249 *****************************************************************************
DiegoOstuni 0:75fc82583a41 250 * \brief NFC-B Poller Sleep
DiegoOstuni 0:75fc82583a41 251 *
DiegoOstuni 0:75fc82583a41 252 * This function is used to send the SLPB_REQ (HLTB) command to put the PICC with
DiegoOstuni 0:75fc82583a41 253 * the given NFCID0 to state HALT so that they do not reply to further SENSB_REQ
DiegoOstuni 0:75fc82583a41 254 * commands (only to ALLB_REQ)
DiegoOstuni 0:75fc82583a41 255 *
DiegoOstuni 0:75fc82583a41 256 * \param[in] nfcid0 : NFCID of the device to be put to Sleep
DiegoOstuni 0:75fc82583a41 257 *
DiegoOstuni 0:75fc82583a41 258 * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode
DiegoOstuni 0:75fc82583a41 259 * \return ERR_PARAM : Invalid parameters
DiegoOstuni 0:75fc82583a41 260 * \return ERR_IO : Generic internal error
DiegoOstuni 0:75fc82583a41 261 * \return ERR_NONE : No error
DiegoOstuni 0:75fc82583a41 262 *****************************************************************************
DiegoOstuni 0:75fc82583a41 263 */
DiegoOstuni 0:75fc82583a41 264 ReturnCode rfalNfcbPollerSleep( uint8_t* nfcid0, SPI* mspiChannel, ST25R3911* mST25, DigitalOut* gpio_cs, InterruptIn* IRQ, DigitalOut* fieldLED_01, DigitalOut* fieldLED_02, DigitalOut* fieldLED_03, DigitalOut* fieldLED_04, DigitalOut* fieldLED_05, DigitalOut* fieldLED_06 );
DiegoOstuni 0:75fc82583a41 265
DiegoOstuni 0:75fc82583a41 266
DiegoOstuni 0:75fc82583a41 267 /*!
DiegoOstuni 0:75fc82583a41 268 *****************************************************************************
DiegoOstuni 0:75fc82583a41 269 * \brief NFC-B Poller Slot Marker
DiegoOstuni 0:75fc82583a41 270 *
DiegoOstuni 0:75fc82583a41 271 * This method selects a NFC-B Slot marker frame
DiegoOstuni 0:75fc82583a41 272 *
DiegoOstuni 0:75fc82583a41 273 * \param[in] slotCode : Slot Code [1-15]
DiegoOstuni 0:75fc82583a41 274 * \param[out] sensbRes : If received, the SENSB_RES
DiegoOstuni 0:75fc82583a41 275 * \param[out] sensbResLen : If received, the SENSB_RES length
DiegoOstuni 0:75fc82583a41 276 *
DiegoOstuni 0:75fc82583a41 277 * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode
DiegoOstuni 0:75fc82583a41 278 * \return ERR_PARAM : Invalid parameters
DiegoOstuni 0:75fc82583a41 279 * \return ERR_IO : Generic internal error
DiegoOstuni 0:75fc82583a41 280 * \return ERR_TIMEOUT : Timeout error
DiegoOstuni 0:75fc82583a41 281 * \return ERR_PAR : Parity error detected
DiegoOstuni 0:75fc82583a41 282 * \return ERR_CRC : CRC error detected
DiegoOstuni 0:75fc82583a41 283 * \return ERR_FRAMING : Framing error detected
DiegoOstuni 0:75fc82583a41 284 * \return ERR_PROTO : Protocol error detected
DiegoOstuni 0:75fc82583a41 285 * \return ERR_NONE : No error, SEL_RES received
DiegoOstuni 0:75fc82583a41 286 *****************************************************************************
DiegoOstuni 0:75fc82583a41 287 */
DiegoOstuni 0:75fc82583a41 288 ReturnCode rfalNfcbPollerSlotMarker( uint8_t slotCode, rfalNfcbSensbRes *sensbRes, uint8_t *sensbResLen, SPI* mspiChannel, ST25R3911* mST25, DigitalOut* gpio_cs, InterruptIn* IRQ, DigitalOut* fieldLED_01, DigitalOut* fieldLED_02, DigitalOut* fieldLED_03, DigitalOut* fieldLED_04, DigitalOut* fieldLED_05, DigitalOut* fieldLED_06 );
DiegoOstuni 0:75fc82583a41 289
DiegoOstuni 0:75fc82583a41 290 /*!
DiegoOstuni 0:75fc82583a41 291 *****************************************************************************
DiegoOstuni 0:75fc82583a41 292 * \brief NFC-B Technology Detection
DiegoOstuni 0:75fc82583a41 293 *
DiegoOstuni 0:75fc82583a41 294 * This method performs NFC-B Technology Detection as defined in the spec
DiegoOstuni 0:75fc82583a41 295 * given in the compliance mode
DiegoOstuni 0:75fc82583a41 296 *
DiegoOstuni 0:75fc82583a41 297 * \param[in] compMode : compliance mode to be performed
DiegoOstuni 0:75fc82583a41 298 * \param[out] sensbRes : location to store the SENSB_RES, if received
DiegoOstuni 0:75fc82583a41 299 * \param[out] sensbResLen : length of the SENSB_RES, if received
DiegoOstuni 0:75fc82583a41 300 *
DiegoOstuni 0:75fc82583a41 301 * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode
DiegoOstuni 0:75fc82583a41 302 * \return ERR_PARAM : Invalid parameters
DiegoOstuni 0:75fc82583a41 303 * \return ERR_IO : Generic internal error
DiegoOstuni 0:75fc82583a41 304 * \return ERR_NONE : No error, one or more device in the field
DiegoOstuni 0:75fc82583a41 305 *****************************************************************************
DiegoOstuni 0:75fc82583a41 306 */
DiegoOstuni 0:75fc82583a41 307 ReturnCode rfalNfcbPollerTechnologyDetection( rfalComplianceMode compMode, rfalNfcbSensbRes *sensbRes, uint8_t *sensbResLen, SPI* mspiChannel, ST25R3911* mST25, DigitalOut* gpio_cs, InterruptIn* IRQ, DigitalOut* fieldLED_01, DigitalOut* fieldLED_02, DigitalOut* fieldLED_03, DigitalOut* fieldLED_04, DigitalOut* fieldLED_05, DigitalOut* fieldLED_06 );
DiegoOstuni 0:75fc82583a41 308
DiegoOstuni 0:75fc82583a41 309 /*!
DiegoOstuni 0:75fc82583a41 310 *****************************************************************************
DiegoOstuni 0:75fc82583a41 311 * \brief NFC-B Poller Collision Resolution
DiegoOstuni 0:75fc82583a41 312 *
DiegoOstuni 0:75fc82583a41 313 * NFC-B Collision resolution Listener device/card (PICC) as
DiegoOstuni 0:75fc82583a41 314 * defined in Activity 1.1 9.3.5
DiegoOstuni 0:75fc82583a41 315 *
DiegoOstuni 0:75fc82583a41 316 * This function is used to perform collision resolution for detection in case
DiegoOstuni 0:75fc82583a41 317 * of multiple NFC Forum Devices with Technology B detected.
DiegoOstuni 0:75fc82583a41 318 * Target with valid SENSB_RES will be stored in devInfo and nfcbDevCount incremented.
DiegoOstuni 0:75fc82583a41 319 *
DiegoOstuni 0:75fc82583a41 320 * \param[in] compMode : compliance mode to be performed
DiegoOstuni 0:75fc82583a41 321 * \param[in] devLimit : device limit value, and size nfcbDevList
DiegoOstuni 0:75fc82583a41 322 * \param[out] nfcbDevList : NFC-B listener device info
DiegoOstuni 0:75fc82583a41 323 * \param[out] devCnt : devices found counter
DiegoOstuni 0:75fc82583a41 324 *
DiegoOstuni 0:75fc82583a41 325 * \return ERR_WRONG_STATE : RFAL not initialized or mode not set
DiegoOstuni 0:75fc82583a41 326 * \return ERR_PARAM : Invalid parameters
DiegoOstuni 0:75fc82583a41 327 * \return ERR_IO : Generic internal error
DiegoOstuni 0:75fc82583a41 328 * \return ERR_PROTO : Protocol error detected
DiegoOstuni 0:75fc82583a41 329 * \return ERR_NONE : No error
DiegoOstuni 0:75fc82583a41 330 *****************************************************************************
DiegoOstuni 0:75fc82583a41 331 */
DiegoOstuni 0:75fc82583a41 332 ReturnCode rfalNfcbPollerCollisionResolution( rfalComplianceMode compMode, uint8_t devLimit, rfalNfcbListenDevice *nfcbDevList, uint8_t *devCnt, SPI* mspiChannel, ST25R3911* mST25, DigitalOut* gpio_cs, InterruptIn* IRQ, DigitalOut* fieldLED_01, DigitalOut* fieldLED_02, DigitalOut* fieldLED_03, DigitalOut* fieldLED_04, DigitalOut* fieldLED_05, DigitalOut* fieldLED_06 );
DiegoOstuni 0:75fc82583a41 333
DiegoOstuni 0:75fc82583a41 334 /*!
DiegoOstuni 0:75fc82583a41 335 *****************************************************************************
DiegoOstuni 0:75fc82583a41 336 * \brief NFC-B Poller Collision Resolution Slotted
DiegoOstuni 0:75fc82583a41 337 *
DiegoOstuni 0:75fc82583a41 338 * NFC-B Collision resolution Listener device/card (PICC). The sequence can
DiegoOstuni 0:75fc82583a41 339 * be configured to be according to NFC Forum Activity 1.1 9.3.5, ISO10373
DiegoOstuni 0:75fc82583a41 340 * or EMVCo
DiegoOstuni 0:75fc82583a41 341 *
DiegoOstuni 0:75fc82583a41 342 * This function is used to perform collision resolution for detection in case
DiegoOstuni 0:75fc82583a41 343 * of multiple NFC Forum Devices with Technology B are detected.
DiegoOstuni 0:75fc82583a41 344 * Target with valid SENSB_RES will be stored in devInfo and nfcbDevCount incremented.
DiegoOstuni 0:75fc82583a41 345 *
DiegoOstuni 0:75fc82583a41 346 * This method provides the means to perform a collision resolution loop with specific
DiegoOstuni 0:75fc82583a41 347 * initial and end number of slots. This allows to user to start the loop already with
DiegoOstuni 0:75fc82583a41 348 * greater number of slots, and or limit the end number of slots. At the end a flag
DiegoOstuni 0:75fc82583a41 349 * indicating whether there were collisions pending is returned.
DiegoOstuni 0:75fc82583a41 350 *
DiegoOstuni 0:75fc82583a41 351 * If RFAL_COMPLIANCE_MODE_ISO is used \a initSlots must be set to RFAL_NFCB_SLOT_NUM_1
DiegoOstuni 0:75fc82583a41 352 *
DiegoOstuni 0:75fc82583a41 353 *
DiegoOstuni 0:75fc82583a41 354 * \param[in] compMode : compliance mode to be performed
DiegoOstuni 0:75fc82583a41 355 * \param[in] devLimit : device limit value, and size nfcbDevList
DiegoOstuni 0:75fc82583a41 356 * \param[in] initSlots : number of slots to open initially
DiegoOstuni 0:75fc82583a41 357 * \param[in] endSlots : number of slots when to stop collision resolution
DiegoOstuni 0:75fc82583a41 358 * \param[out] nfcbDevList : NFC-B listener device info
DiegoOstuni 0:75fc82583a41 359 * \param[out] devCnt : devices found counter
DiegoOstuni 0:75fc82583a41 360 * \param[out] colPending : flag indicating whether collision are still pending
DiegoOstuni 0:75fc82583a41 361 *
DiegoOstuni 0:75fc82583a41 362 * \return ERR_WRONG_STATE : RFAL not initialized or mode not set
DiegoOstuni 0:75fc82583a41 363 * \return ERR_PARAM : Invalid parameters
DiegoOstuni 0:75fc82583a41 364 * \return ERR_IO : Generic internal error
DiegoOstuni 0:75fc82583a41 365 * \return ERR_PROTO : Protocol error detected
DiegoOstuni 0:75fc82583a41 366 * \return ERR_NONE : No error
DiegoOstuni 0:75fc82583a41 367 *****************************************************************************
DiegoOstuni 0:75fc82583a41 368 */
DiegoOstuni 0:75fc82583a41 369 ReturnCode rfalNfcbPollerCollisionResolutionSlotted( rfalComplianceMode compMode, uint8_t devLimit, rfalNfcbSlots initSlots, rfalNfcbSlots endSlots, rfalNfcbListenDevice *nfcbDevList, uint8_t *devCnt, bool *colPending, SPI* mspiChannel, ST25R3911* mST25, DigitalOut* gpio_cs, InterruptIn* IRQ, DigitalOut* fieldLED_01, DigitalOut* fieldLED_02, DigitalOut* fieldLED_03, DigitalOut* fieldLED_04, DigitalOut* fieldLED_05, DigitalOut* fieldLED_06 );
DiegoOstuni 0:75fc82583a41 370
DiegoOstuni 0:75fc82583a41 371
DiegoOstuni 0:75fc82583a41 372 /*!
DiegoOstuni 0:75fc82583a41 373 *****************************************************************************
DiegoOstuni 0:75fc82583a41 374 * \brief NFC-B TR2 code to FDT
DiegoOstuni 0:75fc82583a41 375 *
DiegoOstuni 0:75fc82583a41 376 * Converts the TR2 code as defined in Digital 1.1 Table 33 Minimum
DiegoOstuni 0:75fc82583a41 377 * TR2 Coding to Frame Delay Time (FDT) in 1/Fc
DiegoOstuni 0:75fc82583a41 378 *
DiegoOstuni 0:75fc82583a41 379 * \param[in] tr2Code : TR2 code as defined in Digital 1.1 Table 33
DiegoOstuni 0:75fc82583a41 380 *
DiegoOstuni 0:75fc82583a41 381 * \return FDT in 1/Fc
DiegoOstuni 0:75fc82583a41 382 *****************************************************************************
DiegoOstuni 0:75fc82583a41 383 */
DiegoOstuni 0:75fc82583a41 384 uint32_t rfalNfcbTR2ToFDT( uint8_t tr2Code );
DiegoOstuni 0:75fc82583a41 385
DiegoOstuni 0:75fc82583a41 386
DiegoOstuni 0:75fc82583a41 387 #endif /* RFAL_NFCB_H */
DiegoOstuni 0:75fc82583a41 388
DiegoOstuni 0:75fc82583a41 389 /**
DiegoOstuni 0:75fc82583a41 390 * @}
DiegoOstuni 0:75fc82583a41 391 *
DiegoOstuni 0:75fc82583a41 392 * @}
DiegoOstuni 0:75fc82583a41 393 *
DiegoOstuni 0:75fc82583a41 394 * @}
DiegoOstuni 0:75fc82583a41 395 */