/****************************************************************************** * \attention * *

© COPYRIGHT 2016 STMicroelectronics

* * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License"); * You may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * www.st.com/myliberty * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. * See the License for the specific language governing permissions and * limitations under the License. * ******************************************************************************/ /* * PROJECT: ST25R391x firmware * Revision: * LANGUAGE: ISO C99 */ /*! \file rfal_nfc.h * * \brief RFAL NFC device * * This module provides the required features to behave as an NFC Poller * or Listener device. It grants an easy to use interface for the following * activities: Technology Detection, Collision Resolution, Activation, * Data Exchange, and Deactivation * * This layer is influenced by (but not fully aligned with) the NFC Forum * specifications, in particular: Activity 2.0 and NCI 2.0 * * * * \addtogroup RFAL * @{ * * \addtogroup RFAL-AL * \brief RFAL Abstraction Layer * @{ * * \addtogroup RF * \brief RFAL RF Abstraction Layer * @{ * */ #ifndef RFAL_NFC_H #define RFAL_NFC_H /* ****************************************************************************** * INCLUDES ****************************************************************************** */ #include "platform.h" #include "st_errno.h" #include "rfal_rf.h" #include "rfal_nfca.h" #include "rfal_nfcb.h" #include "rfal_nfcf.h" #include "rfal_nfcv.h" #include "rfal_st25tb.h" #include "rfal_nfcDep.h" #include "rfal_isoDep.h" /* ****************************************************************************** * GLOBAL DEFINES ****************************************************************************** */ #define RFAL_NFC_RF_BUF_LEN 255U /*!< No technology */ #define RFAL_NFC_TECH_NONE 0x0000U /*!< No technology */ #define RFAL_NFC_POLL_TECH_A 0x0001U /*!< NFC-A technology Flag */ #define RFAL_NFC_POLL_TECH_B 0x0002U /*!< NFC-B technology Flag */ #define RFAL_NFC_POLL_TECH_F 0x0004U /*!< NFC-F technology Flag */ #define RFAL_NFC_POLL_TECH_V 0x0008U /*!< NFC-V technology Flag */ #define RFAL_NFC_POLL_TECH_AP2P 0x0010U /*!< AP2P technology Flag */ #define RFAL_NFC_POLL_TECH_ST25TB 0x0020U /*!< ST25TB technology Flag */ #define RFAL_NFC_LISTEN_TECH_A 0x1000U /*!< NFC-V technology Flag */ #define RFAL_NFC_LISTEN_TECH_B 0x2000U /*!< NFC-V technology Flag */ #define RFAL_NFC_LISTEN_TECH_F 0x4000U /*!< NFC-V technology Flag */ #define RFAL_NFC_LISTEN_TECH_AP2P 0x8000U /*!< NFC-V technology Flag */ /* ****************************************************************************** * GLOBAL MACROS ****************************************************************************** */ /*! Checks if a device is currently activated */ #define rfalNfcIsDevActivated( st ) ( ((st)>= RFAL_NFC_STATE_ACTIVATED) && ((st)= RFAL_NFC_STATE_START_DISCOVERY) && ((st)= 1. * * \param[in] disParams : discovery configuration parameters * * \return ERR_WRONG_STATE : Incorrect state for this operation * \return ERR_PARAM : Invalid parameters * \return ERR_NONE : No error ***************************************************************************** */ ReturnCode rfalNfcDiscover( const rfalNfcDiscoverParam *disParams ); /*! ***************************************************************************** * \brief RFAL NFC Get State * * It returns the current state * * \return rfalNfcState : the current state ***************************************************************************** */ rfalNfcState rfalNfcGetState( void ); /*! ***************************************************************************** * \brief RFAL NFC Get Devices Found * * It returns the location of the device list and the number of * devices found. * * \param[out] devList : device list location * \param[out] devCnt : number of devices found * * \return ERR_WRONG_STATE : Incorrect state for this operation * Discovery still ongoing * \return ERR_PARAM : Invalid parameters * \return ERR_NONE : No error ***************************************************************************** */ ReturnCode rfalNfcGetDevicesFound( rfalNfcDevice **devList, uint8_t *devCnt ); /*! ***************************************************************************** * \brief RFAL NFC Get Active Device * * It returns the location of the device current Active device * * \param[out] dev : device info location * * \return ERR_WRONG_STATE : Incorrect state for this operation * No device activated * \return ERR_PARAM : Invalid parameters * \return ERR_NONE : No error ***************************************************************************** */ ReturnCode rfalNfcGetActiveDevice( rfalNfcDevice **dev ); /*! ***************************************************************************** * \brief RFAL NFC Select Device * * It selects the device to be activated. * It shall be called when more than one device has been identified to * indiacte which device shall be actived * * \param[in] devIdx : device index to be activated * * \return ERR_WRONG_STATE : Incorrect state for this operation * Not in select state * \return ERR_PARAM : Invalid parameters * \return ERR_NONE : No error ***************************************************************************** */ ReturnCode rfalNfcSelect( uint8_t devIdx ); /*! ***************************************************************************** * \brief RFAL NFC Start Data Exchange * * After a device has been activated, it starts a data exchange. * It handles automatically which interface/protocol to be used and acts accordingly. * * In Listen mode the first frame/data shall be sent by the Reader/Initiator * therefore this method must be called first with txDataLen set to zero * to retrieve the rxData and rcvLen locations. * * * \param[in] txData : data to be transmitted * \param[in] txDataLen : size of the data to be transmitted * \param[out] rxData : location of the received data after operation is completed * \param[out] rvdLen : location of thelength of the received data * \param[in] fwt : FWT to be used in case of RF interface. * If ISO-DEP or NFC-DEP interface is used, this will be ignored * * \return ERR_WRONG_STATE : Incorrect state for this operation * \return ERR_PARAM : Invalid parameters * \return ERR_NONE : No error ***************************************************************************** */ ReturnCode rfalNfcDataExchangeStart( uint8_t *txData, uint16_t txDataLen, uint8_t **rxData, uint16_t **rvdLen, uint32_t fwt ); /*! ***************************************************************************** * \brief RFAL NFC Get Data Exchange Status * * Gets current Data Exchange status * * \return ERR_NONE : Transceive done with no error * \return ERR_BUSY : Transceive ongoing * \return ERR_AGAIN : received one chaining block, copy received data * and continue to call this method to retrieve the * remaining blocks * \return ERR_XXXX : Error occurred * \return ERR_TIMEOUT : No response * \return ERR_FRAMING : Framing error detected * \return ERR_PAR : Parity error detected * \return ERR_CRC : CRC error detected * \return ERR_LINK_LOSS : Link Loss - External Field is Off * \return ERR_RF_COLLISION : Collision detected * \return ERR_IO : Internal error ***************************************************************************** */ ReturnCode rfalNfcDataExchangeGetStatus( void ); /*! ***************************************************************************** * \brief RFAL NFC Deactivate * * It triggers the deactivation procedure to terminate communications with * remote device. At the end the field will be turned off. * * \param[in] discovery : TRUE if after deactivation go back into discovery * : FALSE if after deactivation remain in idle * * \return ERR_WRONG_STATE : Incorrect state for this operation * \return ERR_NONE : No error ***************************************************************************** */ ReturnCode rfalNfcDeactivate( bool discovery ); #endif /* RFAL_NFC_H */ /** * @} * * @} * * @} */