Fork of the GitHub
rfal_st25tb.h
- Committer:
- DiegoOstuni
- Date:
- 2019-11-14
- Revision:
- 0:75fc82583a41
File content as of revision 0:75fc82583a41:
/****************************************************************************** * @attention * * <h2><center>© COPYRIGHT 2016 STMicroelectronics</center></h2> * * 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: * * http://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_st25tb.h * * \author Gustavo Patricio * * \brief Implementation of ST25TB interface * * * @addtogroup RFAL * @{ * * @addtogroup RFAL-AL * @brief RFAL Abstraction Layer * @{ * * @addtogroup ST25TB * @brief RFAL ST25TB Module * @{ * */ #ifndef RFAL_ST25TB_H #define RFAL_ST25TB_H /* ****************************************************************************** * INCLUDES ****************************************************************************** */ #include "platform1.h" #include "st_errno.h" #include "rfal_rf.h" #include "rfal_nfcb.h" /* ****************************************************************************** * GLOBAL DEFINES ****************************************************************************** */ #define RFAL_ST25TB_CHIP_ID_LEN 1 /*!< ST25TB chip ID length */ #define RFAL_ST25TB_CRC_LEN 2 /*!< ST25TB CRC length */ #define RFAL_ST25TB_UID_LEN 8 /*!< ST25TB Unique ID length */ #define RFAL_ST25TB_BLOCK_LEN 4 /*!< ST25TB Data Block length */ /* ****************************************************************************** * GLOBAL MACROS ****************************************************************************** */ /* ****************************************************************************** * GLOBAL TYPES ****************************************************************************** */ typedef uint8_t rfalSt25tbUID[RFAL_ST25TB_UID_LEN]; /*!< ST25TB UID type */ typedef uint8_t rfalSt25tbBlock[RFAL_ST25TB_BLOCK_LEN]; /*!< ST25TB Block type */ /*! ST25TB listener device (PICC) struct */ typedef struct { uint8_t chipID; /*!< Device's session Chip ID */ rfalSt25tbUID UID; /*!< Device's UID */ bool isDeselected; /*!< Device deselect flag */ }rfalSt25tbListenDevice; /* ****************************************************************************** * GLOBAL FUNCTION PROTOTYPES ****************************************************************************** */ /*! ***************************************************************************** * \brief Initialize ST25TB Poller mode * * This methods configures RFAL RF layer to perform as a * ST25TB Poller/RW including all default timings * * \return ERR_WRONG_STATE : RFAL not initialized or mode not set * \return ERR_NONE : No error ***************************************************************************** */ ReturnCode rfalSt25tbPollerInitialize( 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 ); /*! ***************************************************************************** * \brief ST25TB Poller Check Presence * * This method checks if a ST25TB Listen device (PICC) is present on the field * by sending an Initiate command * * \param[out] chipId : if successfully retrieved, the device's chip ID * * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode * \return ERR_PARAM : Invalid parameters * \return ERR_IO : Generic internal error * \return ERR_TIMEOUT : Timeout error, no listener device detected * \return ERR_RF_COLLISION : Collision detected one or more device in the field * \return ERR_PROTO : Protocol error detected * \return ERR_NONE : No error ***************************************************************************** */ ReturnCode rfalSt25tbPollerCheckPresence( uint8_t *chipId, 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 ); /*! ***************************************************************************** * \brief ST25TB Poller Collision Resolution * * This method performs ST25TB Collision resolution, selects the each device, * retrieves its UID and then deselects. * In case only one device is identified the ST25TB device is left in select * state. * * \param[in] devLimit : device limit value, and size st25tbDevList * \param[out] st25tbDevList : ST35TB listener device info * \param[out] devCnt : Devices found counter * * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode * \return ERR_PARAM : Invalid parameters * \return ERR_IO : Generic internal error * \return ERR_TIMEOUT : Timeout error, no listener device detected * \return ERR_RF_COLLISION : Collision detected one or more device in the field * \return ERR_PROTO : Protocol error detected * \return ERR_NONE : No error ***************************************************************************** */ ReturnCode rfalSt25tbPollerCollisionResolution( uint8_t devLimit, rfalSt25tbListenDevice *st25tbDevList, 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 ); /*! ***************************************************************************** * \brief ST25TB Poller Initiate * * This method sends an Initiate command * * If a single device responds the chip ID will be retrieved * * \param[out] chipId : chip ID of the device * * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode * \return ERR_PARAM : Invalid parameters * \return ERR_IO : Generic internal error * \return ERR_TIMEOUT : Timeout error, no listener device detected * \return ERR_PROTO : Protocol error detected * \return ERR_NONE : No error ***************************************************************************** */ ReturnCode rfalSt25tbPollerInitiate( uint8_t *chipId,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 ); /*! ***************************************************************************** * \brief ST25TB Poller Pcall * * This method sends a Pcall command * If successful the device's chip ID will be retrieved * * \param[out] chipId : Chip ID of the device * * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode * \return ERR_PARAM : Invalid parameters * \return ERR_IO : Generic internal error * \return ERR_TIMEOUT : Timeout error, no listener device detected * \return ERR_PROTO : Protocol error detected * \return ERR_NONE : No error ***************************************************************************** */ ReturnCode rfalSt25tbPollerPcall( uint8_t *chipId ); /*! ***************************************************************************** * \brief ST25TB Poller Slot Marker * * This method sends a Slot Marker * * If a single device responds the chip ID will be retrieved * * \param[in] slotNum : Slot Number * \param[out] chipIdRes : Chip ID of the device * * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode * \return ERR_PARAM : Invalid parameters * \return ERR_IO : Generic internal error * \return ERR_TIMEOUT : Timeout error, no listener device detected * \return ERR_PROTO : Protocol error detected * \return ERR_NONE : No error ***************************************************************************** */ ReturnCode rfalSt25tbPollerSlotMarker( uint8_t slotNum, uint8_t *chipIdRes,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 ); /*! ***************************************************************************** * \brief ST25TB Poller Select * * This method sends a ST25TB Select command with the given chip ID. * * If the device is already in Selected state and receives an incorrect chip * ID, it goes into Deselected state * * \param[in] chipId : chip ID of the device to be selected * * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode * \return ERR_PARAM : Invalid parameters * \return ERR_IO : Generic internal error * \return ERR_TIMEOUT : Timeout error, no listener device detected * \return ERR_PROTO : Protocol error detected * \return ERR_NONE : No error ***************************************************************************** */ ReturnCode rfalSt25tbPollerSelect( uint8_t chipId,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 ); /*! ***************************************************************************** * \brief ST25TB Get UID * * This method sends a Get_UID command * * If a single device responds the chip UID will be retrieved * * \param[out] UID : UID of the found device * * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode * \return ERR_PARAM : Invalid parameters * \return ERR_IO : Generic internal error * \return ERR_TIMEOUT : Timeout error, no listener device detected * \return ERR_PROTO : Protocol error detected * \return ERR_NONE : No error ***************************************************************************** */ ReturnCode rfalSt25tbPollerGetUID( rfalSt25tbUID *UID,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 ); /*! ***************************************************************************** * \brief ST25TB Poller Read Block * * This method reads a block of the ST25TB * * \param[in] blockAddress : address of the block to be read * \param[out] blockData : location to place the data read from block * * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode * \return ERR_PARAM : Invalid parameters * \return ERR_IO : Generic internal error * \return ERR_TIMEOUT : Timeout error, no listener device detected * \return ERR_PROTO : Protocol error detected * \return ERR_NONE : No error ***************************************************************************** */ ReturnCode rfalSt25tbPollerReadBlock( uint8_t blockAddress, rfalSt25tbBlock *blockData,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 ); /*! ***************************************************************************** * \brief ST25TB Poller Write Block * * This method writes a block of the ST25TB * * \param[in] blockAddress : address of the block to be written * \param[in] blockData : data to be written on the block * * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode * \return ERR_PARAM : Invalid parameters * \return ERR_IO : Generic internal error * \return ERR_TIMEOUT : Timeout error, no listener device detected * \return ERR_PROTO : Protocol error detected * \return ERR_NONE : No error ***************************************************************************** */ ReturnCode rfalSt25tbPollerWriteBlock( uint8_t blockAddress, rfalSt25tbBlock *blockData,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 ); /*! ***************************************************************************** * \brief ST25TB Poller Completion * * This method sends a completion command to the ST25TB. After the * completion the card no longer will reply to any command. * * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode * \return ERR_PARAM : Invalid parameters * \return ERR_IO : Generic internal error * \return ERR_TIMEOUT : Timeout error, no listener device detected * \return ERR_PROTO : Protocol error detected, invalid SENSB_RES received * \return ERR_NONE : No error ***************************************************************************** */ ReturnCode rfalSt25tbPollerCompletion( 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 ); /*! ***************************************************************************** * \brief ST25TB Poller Reset to Inventory * * This method sends a Reset to Inventory command to the ST25TB. * * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode * \return ERR_PARAM : Invalid parameters * \return ERR_IO : Generic internal error * \return ERR_TIMEOUT : Timeout error, no listener device detected * \return ERR_PROTO : Protocol error detected, invalid SENSB_RES received * \return ERR_NONE : No error ***************************************************************************** */ ReturnCode rfalSt25tbPollerResetToInventory( 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 ); #endif /* RFAL_ST25TB_H */ /** * @} * * @} * * @} */