| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923 |
- /******************************************************************************
- * \attention
- *
- * <h2><center>© COPYRIGHT 2020 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:
- *
- * 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_nfcv.h
- *
- * \author Gustavo Patricio
- *
- * \brief Implementation of NFC-V Poller (ISO15693) device
- *
- * The definitions and helpers methods provided by this module
- * are aligned with NFC-V Digital 2.1
- *
- *
- * \addtogroup RFAL
- * @{
- *
- * \addtogroup RFAL-AL
- * \brief RFAL Abstraction Layer
- * @{
- *
- * \addtogroup NFC-V
- * \brief RFAL NFC-V Module
- * @{
- *
- */
- #ifndef RFAL_NFCV_H
- #define RFAL_NFCV_H
- /*
- ******************************************************************************
- * INCLUDES
- ******************************************************************************
- */
- #include "../platform.h"
- #include "../st_errno.h"
- #include "rfal_rf.h"
- /*
- ******************************************************************************
- * GLOBAL DEFINES
- ******************************************************************************
- */
- #define RFAL_NFCV_UID_LEN 8U /*!< NFC-V UID length */
- #define RFAL_NFCV_MAX_BLOCK_LEN \
- 32U /*!< Max Block size: can be of up to 256 bits ISO 15693 2000 5 */
- #define RFAL_NFCV_BNO_LEN 1U /*!< NFC-V Block Number length */
- #define RFAL_NFCV_CRC_LEN 2U /*!< NFC-V CRC length */
- #define RFAL_NFCV_MAX_GEN_DATA_LEN \
- (RFAL_NFCV_MAX_BLOCK_LEN + RFAL_NFCV_BNO_LEN + RFAL_NFCV_UID_LEN) /*!<Max data */
- #define RFAL_NFCV_BLOCKNUM_LEN \
- 1U /*!< Block Number length on normal commands: 8 bits */
- #define RFAL_NFCV_BLOCKNUM_EXTENDED_LEN \
- 2U /*!< Block Number length on extended commands: 16 bits */
- #define RFAL_NFCV_PARAM_SKIP \
- 0U /*!< Skip proprietary Param Request */
- /*! NFC-V RequestFlags ISO15693 2000 7.3.1 */
- enum {
- RFAL_NFCV_REQ_FLAG_DEFAULT =
- 0x02U, /*!< Default Request Flags */
- RFAL_NFCV_REQ_FLAG_SUB_CARRIER =
- 0x01U, /*!< Sub Carrier flag */
- RFAL_NFCV_REQ_FLAG_DATA_RATE =
- 0x02U, /*!< Data Rate flag */
- RFAL_NFCV_REQ_FLAG_INVENTORY =
- 0x04U, /*!< Inventory flag */
- RFAL_NFCV_REQ_FLAG_PROTOCOL_EXT =
- 0x08U, /*!< Protocol Extension flag */
- RFAL_NFCV_REQ_FLAG_SELECT =
- 0x10U, /*!< Select flag */
- RFAL_NFCV_REQ_FLAG_ADDRESS =
- 0x20U, /*!< Address flag */
- RFAL_NFCV_REQ_FLAG_OPTION =
- 0x40U, /*!< Option flag */
- RFAL_NFCV_REQ_FLAG_RFU =
- 0x80U, /*!< RFU flag */
- RFAL_NFCV_REQ_FLAG_AFI =
- 0x10U, /*!< AFI flag */
- RFAL_NFCV_REQ_FLAG_NB_SLOTS =
- 0x20U, /*!< Number of Slots flag */
- };
- /*! NFC-V Response Flags ISO15693 2000 7.4.1 */
- enum {
- RFAL_NFCV_RES_FLAG_ERROR =
- 0x01U, /*!< Error flag */
- RFAL_NFCV_RES_FLAG_RFU1 =
- 0x02U, /*!< RFU flag */
- RFAL_NFCV_RES_FLAG_RFU2 =
- 0x04U, /*!< RFU flag */
- RFAL_NFCV_RES_FLAG_EXTENSION =
- 0x08U, /*!< Extension flag */
- RFAL_NFCV_RES_FLAG_RFU3 =
- 0x10U, /*!< RFU flag */
- RFAL_NFCV_RES_FLAG_RFU4 =
- 0x20U, /*!< RFU flag */
- RFAL_NFCV_RES_FLAG_RFU5 =
- 0x40U, /*!< RFU flag */
- RFAL_NFCV_RES_FLAG_RFU6 =
- 0x80U /*!< RFU flag */
- };
- /*! NFC-V Error code ISO15693 2000 7.4.2 */
- enum {
- RFAL_NFCV_ERROR_CMD_NOT_SUPPORTED =
- 0x01U, /*!< The command is not supported, code is not recognised */
- RFAL_NFCV_ERROR_CMD_NOT_RECOGNIZED =
- 0x02U, /*!< The command is not recognised, format error occurred */
- RFAL_NFCV_ERROR_OPTION_NOT_SUPPORTED =
- 0x03U, /*!< The option is not supported */
- RFAL_NFCV_ERROR_UNKNOWN =
- 0x0FU, /*!< Unknown error */
- RFAL_NFCV_ERROR_BLOCK_NOT_AVALIABLE =
- 0x10U, /*!< The specified block is not available */
- RFAL_NFCV_ERROR_BLOCK_ALREDY_LOCKED =
- 0x11U, /*!< The specified block is already locked */
- RFAL_NFCV_ERROR_BLOCK_LOCKED =
- 0x12U, /*!< The specified block is locked */
- RFAL_NFCV_ERROR_WRITE_FAILED =
- 0x13U, /*!< The specified block was not successfully programmed */
- RFAL_NFCV_ERROR_BLOCK_FAILED =
- 0x14U /*!< The specified block was not successfully locked */
- };
- /*! NFC-V command set ISO15693 2000 9.1 */
- enum {
- RFAL_NFCV_CMD_INVENTORY =
- 0x01U, /*!< INVENTORY_REQ (Inventory) command */
- RFAL_NFCV_CMD_SLPV =
- 0x02U, /*!< SLPV_REQ (Stay quiet) command */
- RFAL_NFCV_CMD_READ_SINGLE_BLOCK =
- 0x20U, /*!< Read single block command */
- RFAL_NFCV_CMD_WRITE_SINGLE_BLOCK =
- 0x21U, /*!< Write single block command */
- RFAL_NFCV_CMD_LOCK_BLOCK =
- 0x22U, /*!< Lock block command */
- RFAL_NFCV_CMD_READ_MULTIPLE_BLOCKS =
- 0x23U, /*!< Read multiple blocks command */
- RFAL_NFCV_CMD_WRITE_MULTIPLE_BLOCKS =
- 0x24U, /*!< Write multiple blocks command */
- RFAL_NFCV_CMD_SELECT =
- 0x25U, /*!< Select command */
- RFAL_NFCV_CMD_RESET_TO_READY =
- 0x26U, /*!< Reset To Ready command */
- RFAL_NFCV_CMD_GET_SYS_INFO =
- 0x2BU, /*!< Get System Information command */
- RFAL_NFCV_CMD_EXTENDED_READ_SINGLE_BLOCK =
- 0x30U, /*!< Extended read single block command */
- RFAL_NFCV_CMD_EXTENDED_WRITE_SINGLE_BLOCK =
- 0x31U, /*!< Extended write single block command */
- RFAL_NFCV_CMD_EXTENDED_LOCK_SINGLE_BLOCK =
- 0x32U, /*!< Extended lock single block command */
- RFAL_NFCV_CMD_EXTENDED_READ_MULTIPLE_BLOCK =
- 0x33U, /*!< Extended read multiple block command */
- RFAL_NFCV_CMD_EXTENDED_WRITE_MULTIPLE_BLOCK =
- 0x34U, /*!< Extended read multiple block command */
- RFAL_NFCV_CMD_EXTENDED_GET_SYS_INFO =
- 0x3BU /*!< Extended Get System Information command */
- };
- /*! ST25TV/ST25DV command set */
- enum {
- RFAL_NFCV_CMD_READ_CONFIGURATION =
- 0xA0U, /*!< Read configuration command */
- RFAL_NFCV_CMD_WRITE_CONFIGURATION =
- 0xA1U, /*!< Write configuration command */
- RFAL_NFCV_CMD_SET_EAS =
- 0xA2U, /*!< Set EAS command */
- RFAL_NFCV_CMD_RESET_EAS =
- 0xA3U, /*!< Reset EAS command */
- RFAL_NFCV_CMD_LOCK_EAS =
- 0xA4U, /*!< Lock EAS command */
- RFAL_NFCV_CMD_ENABLE_EAS =
- 0xA5U, /*!< Enable EAS command */
- RFAL_NFCV_CMD_KILL = 0xA6U, /*!< Kill command */
- RFAL_NFCV_CMD_WRITE_EAS_ID =
- 0xA7U, /*!< Write EAS ID command */
- RFAL_NFCV_CMD_WRITE_EAS_CONFIG =
- 0xA8U, /*!< Write EAS CONFIG command */
- RFAL_NFCV_CMD_MANAGE_GPO =
- 0xA9U, /*!< Manage GPO command */
- RFAL_NFCV_CMD_WRITE_MESSAGE =
- 0xAAU, /*!< Write Message command */
- RFAL_NFCV_CMD_READ_MESSAGE_LENGTH =
- 0xABU, /*!< Read Message Length command */
- RFAL_NFCV_CMD_READ_MESSAGE =
- 0xACU, /*!< Read Message command */
- RFAL_NFCV_CMD_READ_DYN_CONFIGURATION =
- 0xADU, /*!< Read Dynamic Configuration command */
- RFAL_NFCV_CMD_WRITE_DYN_CONFIGURATION =
- 0xAEU, /*!< Write Dynamic Configuration command */
- RFAL_NFCV_CMD_WRITE_PASSWORD =
- 0xB1U, /*!< Write Kill Password / Write Password command */
- RFAL_NFCV_CMD_LOCK_KILL =
- 0xB2U, /*!< Lock Kill command */
- RFAL_NFCV_CMD_PRESENT_PASSWORD =
- 0xB3U, /*!< Present Password command */
- RFAL_NFCV_CMD_GET_RANDOM_NUMBER =
- 0xB4U, /*!< Get Random Number command */
- RFAL_NFCV_CMD_FAST_READ_SINGLE_BLOCK =
- 0xC0U, /*!< Fast Read single block command */
- RFAL_NFCV_CMD_FAST_READ_MULTIPLE_BLOCKS =
- 0xC3U, /*!< Fast Read multiple blocks command */
- RFAL_NFCV_CMD_FAST_EXTENDED_READ_SINGLE_BLOCK =
- 0xC4U, /*!< Fast Extended Read single block command */
- RFAL_NFCV_CMD_FAST_EXTENDED_READ_MULTIPLE_BLOCKS =
- 0xC5U, /*!< Fast Extended Read multiple blocks command */
- RFAL_NFCV_CMD_FAST_WRITE_MESSAGE =
- 0xCAU, /*!< Fast Write Message */
- RFAL_NFCV_CMD_FAST_READ_MESSAGE_LENGTH =
- 0xCBU, /*!< Fast Read Message Length */
- RFAL_NFCV_CMD_FAST_READ_MESSAGE =
- 0xCCU, /*!< Fast Read Message */
- RFAL_NFCV_CMD_FAST_READ_DYN_CONFIGURATION =
- 0xCDU, /*!< Fast Read Dynamic configuration */
- RFAL_NFCV_CMD_FAST_WRITE_DYN_CONFIGURATION =
- 0xCEU /*!< Fast Write Dynamic Configuration */
- };
- /*! ISO 15693 Get System info parameter request field ISO15693 2018 Table 94 */
- enum {
- RFAL_NFCV_SYSINFO_DFSID =
- 0x01U, /*!< Get System info DFSID flag */
- RFAL_NFCV_SYSINFO_AFI =
- 0x02U, /*!< Get System info AFI flag */
- RFAL_NFCV_SYSINFO_MEMSIZE =
- 0x04U, /*!< Get System info MEMSIZE flag */
- RFAL_NFCV_SYSINFO_ICREF =
- 0x08U, /*!< Get System info ICREF flag */
- RFAL_NFCV_SYSINFO_MOI =
- 0x10U, /*!< Get System info MOI flag */
- RFAL_NFCV_SYSINFO_CMDLIST =
- 0x20U, /*!< Get System info CMDLIST flag */
- RFAL_NFCV_SYSINFO_CSI =
- 0x40U, /*!< Get System info CSI flag */
- RFAL_NFCV_SYSINFO_REQ_ALL =
- 0x7FU /*!< Get System info request of all parameters */
- };
- /*
- ******************************************************************************
- * GLOBAL MACROS
- ******************************************************************************
- */
- /*
- ******************************************************************************
- * GLOBAL TYPES
- ******************************************************************************
- */
- /*! NFC-V Number of slots Digital 2.0 9.6.1 */
- typedef enum {
- RFAL_NFCV_NUM_SLOTS_1 = 0x20, /*!< Number of slots: 1 */
- RFAL_NFCV_NUM_SLOTS_16 = 0x00, /*!< Number of slots: 16 */
- } rfalNfcvNumSlots;
- /*! NFC-V INVENTORY_RES format Digital 2.0 9.6.2 */
- typedef struct {
- uint8_t RES_FLAG; /*!< Response Flags */
- uint8_t DSFID; /*!< Data Storage Format Identifier */
- uint8_t UID[RFAL_NFCV_UID_LEN]; /*!< NFC-V device UID */
- uint8_t crc[RFAL_CRC_LEN]; /*!< CRC */
- } rfalNfcvInventoryRes;
- /*! NFC-V Generic Req format */
- typedef struct {
- uint8_t REQ_FLAG; /*!< Request Flags */
- uint8_t CMD; /*!< Command code */
- union { /* PRQA S 0750 # MISRA 19.2 - Both members are of the same type, just different names. Thus no problem can occur. */
- uint8_t UID[RFAL_NFCV_UID_LEN]; /*!< Mask Value */
- uint8_t data[RFAL_NFCV_MAX_GEN_DATA_LEN]; /*!< Data */
- } payload; /*!< Payload */
- } rfalNfcvGenericReq;
- /*! NFC-V Generic Response format */
- typedef struct {
- uint8_t RES_FLAG; /*!< Response Flags */
- uint8_t data[RFAL_NFCV_MAX_GEN_DATA_LEN]; /*!< Data */
- } rfalNfcvGenericRes;
- /*! NFC-V listener device (VICC) struct */
- typedef struct {
- rfalNfcvInventoryRes InvRes; /*!< INVENTORY_RES */
- bool isSleep; /*!< Device sleeping flag */
- } rfalNfcvListenDevice;
- /*
- ******************************************************************************
- * GLOBAL FUNCTION PROTOTYPES
- ******************************************************************************
- */
- /*!
- *****************************************************************************
- * \brief Initialize NFC-V Poller mode
- *
- * This methods configures RFAL RF layer to perform as a
- * NFC-F Poller/RW (ISO15693) including all default timings
- *
- * \return ERR_WRONG_STATE : RFAL not initialized or mode not set
- * \return ERR_PARAM : Incorrect bitrate
- * \return ERR_NONE : No error
- *****************************************************************************
- */
- ReturnCode rfalNfcvPollerInitialize(void);
- /*!
- *****************************************************************************
- * \brief NFC-V Poller Check Presence
- *
- * This method checks if a NFC-V Listen device (VICC) is present on the field
- * by sending an Inventory (INVENTORY_REQ)
- *
- * \param[out] invRes : If received, the INVENTORY_RES
- *
- * \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 detectedd
- * \return ERR_NONE : No error, one or more device in the field
- *****************************************************************************
- */
- ReturnCode rfalNfcvPollerCheckPresence(rfalNfcvInventoryRes* invRes);
- /*!
- *****************************************************************************
- * \brief NFC-F Poller Poll
- *
- * This function sends to all VICCs in field the INVENTORY command with the
- * given number of slots
- *
- * If more than one slot is used the following EOF need to be handled
- * by the caller using rfalISO15693TransceiveEOFAnticollision()
- *
- * \param[in] nSlots : Number of Slots to be sent (1 or 16)
- * \param[in] maskLen : Number bits on the Mask value
- * \param[in] maskVal : location of the Mask value
- * \param[out] invRes : location to place the INVENTORY_RES
- * \param[out] rcvdLen : number of bits received (without collision)
- *
- * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode
- * \return ERR_PARAM : Invalid parameters
- * \return ERR_IO : Generic internal error
- * \return ERR_RF_COLLISION : Collision detected
- * \return ERR_CRC : CRC error detected
- * \return ERR_PROTO : Protocol error detected
- * \return ERR_NONE : No error
- *****************************************************************************
- */
- ReturnCode rfalNfcvPollerInventory(
- rfalNfcvNumSlots nSlots,
- uint8_t maskLen,
- const uint8_t* maskVal,
- rfalNfcvInventoryRes* invRes,
- uint16_t* rcvdLen);
- /*!
- *****************************************************************************
- * \brief NFC-V Poller Full Collision Resolution
- *
- * Performs a full Collision resolution as defined in Activity 2.0 9.3.7
- * Once done, the devCnt will indicate how many (if any) devices have
- * been identified and their details are contained on nfcvDevList
- *
- * \param[in] compMode : compliance mode to be performed
- * \param[in] devLimit : device limit value, and size nfcaDevList
- * \param[out] nfcvDevList : NFC-v listener devices list
- * \param[out] devCnt : Devices found counter
- *
- * When compMode is set to ISO the function immediately goes to 16 slots improving
- * chances to detect more than only one strong card.
- *
- * \return ERR_WRONG_STATE : RFAL not initialized or mode not set
- * \return ERR_PARAM : Invalid parameters
- * \return ERR_IO : Generic internal error
- * \return ERR_NONE : No error
- *****************************************************************************
- */
- ReturnCode rfalNfcvPollerCollisionResolution(
- rfalComplianceMode compMode,
- uint8_t devLimit,
- rfalNfcvListenDevice* nfcvDevList,
- uint8_t* devCnt);
- /*!
- *****************************************************************************
- * \brief NFC-V Poller Full Collision Resolution With Sleep
- *
- * Performs a full Collision resolution which is different from Activity 2.0 9.3.7.
- * The implementation uses SLPV (StayQuiet) command to make sure all cards are found.
- * Once done, the devCnt will indicate how many (if any) devices have
- * been identified and their details are contained on nfcvDevList
- *
- * \param[in] devLimit : device limit value, and size nfcaDevList
- * \param[out] nfcvDevList : NFC-v listener devices list
- * \param[out] devCnt : Devices found counter
- *
- * \return ERR_WRONG_STATE : RFAL not initialized or mode not set
- * \return ERR_PARAM : Invalid parameters
- * \return ERR_IO : Generic internal error
- * \return ERR_NONE : No error
- *****************************************************************************
- */
- ReturnCode rfalNfcvPollerSleepCollisionResolution(
- uint8_t devLimit,
- rfalNfcvListenDevice* nfcvDevList,
- uint8_t* devCnt);
- /*!
- *****************************************************************************
- * \brief NFC-V Poller Sleep
- *
- * This function is used to send the SLPV_REQ (Stay Quiet) command to put the VICC
- * with the given UID to state QUIET so that they do not reply to more Inventory
- *
- * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option
- * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT
- * \param[in] uid : UID of the device to be put to Sleep
- *
- * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode
- * \return ERR_PARAM : Invalid parameters
- * \return ERR_IO : Generic internal error
- * \return ERR_NONE : No error
- *****************************************************************************
- */
- ReturnCode rfalNfcvPollerSleep(uint8_t flags, const uint8_t* uid);
- /*!
- *****************************************************************************
- * \brief NFC-V Poller Select
- *
- * Selects a device (VICC) by its UID
- *
- * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option
- * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT
- * \param[in] uid : UID of the device to be put 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_CRC : CRC error detected
- * \return ERR_FRAMING : Framing error detected
- * \return ERR_PROTO : Protocol error detected
- * \return ERR_TIMEOUT : Timeout error
- * \return ERR_NONE : No error
- *****************************************************************************
- */
- ReturnCode rfalNfcvPollerSelect(uint8_t flags, const uint8_t* uid);
- /*!
- *****************************************************************************
- * \brief NFC-V Poller Read Single Block
- *
- * Reads a Single Block from a device (VICC)
- *
- * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option
- * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT
- * \param[in] uid : UID of the device to be put to be read
- * if UID is provided Addressed mode will be used
- * \param[in] blockNum : Number of the block to read
- * \param[out] rxBuf : buffer to store response (also with RES_FLAGS)
- * \param[in] rxBufLen : length of rxBuf
- * \param[out] rcvLen : number of bytes received
- *
- * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode
- * \return ERR_PARAM : Invalid parameters
- * \return ERR_IO : Generic internal error
- * \return ERR_CRC : CRC error detected
- * \return ERR_FRAMING : Framing error detected
- * \return ERR_PROTO : Protocol error detected
- * \return ERR_TIMEOUT : Timeout error
- * \return ERR_NONE : No error
- *****************************************************************************
- */
- ReturnCode rfalNfcvPollerReadSingleBlock(
- uint8_t flags,
- const uint8_t* uid,
- uint8_t blockNum,
- uint8_t* rxBuf,
- uint16_t rxBufLen,
- uint16_t* rcvLen);
- /*!
- *****************************************************************************
- * \brief NFC-V Poller Write Single Block
- *
- * Writes a Single Block from a device (VICC)
- *
- * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option
- * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT
- * \param[in] uid : UID of the device to be put to be written
- * if UID is provided Addressed mode will be used
- * \param[in] blockNum : Number of the block to write
- * \param[in] wrData : data to be written on the given block
- * \param[in] blockLen : number of bytes of a block
- *
- * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode
- * \return ERR_PARAM : Invalid parameters
- * \return ERR_IO : Generic internal error
- * \return ERR_CRC : CRC error detected
- * \return ERR_FRAMING : Framing error detected
- * \return ERR_PROTO : Protocol error detected
- * \return ERR_TIMEOUT : Timeout error
- * \return ERR_NONE : No error
- *****************************************************************************
- */
- ReturnCode rfalNfcvPollerWriteSingleBlock(
- uint8_t flags,
- const uint8_t* uid,
- uint8_t blockNum,
- const uint8_t* wrData,
- uint8_t blockLen);
- /*!
- *****************************************************************************
- * \brief NFC-V Poller Read Multiple Blocks
- *
- * Reads Multiple Blocks from a device (VICC)
- *
- * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option
- * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT
- * \param[in] uid : UID of the device to be put to be read
- * if UID is provided Addressed mode will be used
- * \param[in] firstBlockNum : first block to be read
- * \param[in] numOfBlocks : number of block to read
- * \param[out] rxBuf : buffer to store response (also with RES_FLAGS)
- * \param[in] rxBufLen : length of rxBuf
- * \param[out] rcvLen : number of bytes received
- *
- * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode
- * \return ERR_PARAM : Invalid parameters
- * \return ERR_IO : Generic internal error
- * \return ERR_CRC : CRC error detected
- * \return ERR_FRAMING : Framing error detected
- * \return ERR_PROTO : Protocol error detected
- * \return ERR_TIMEOUT : Timeout error
- * \return ERR_NONE : No error
- *****************************************************************************
- */
- ReturnCode rfalNfcvPollerReadMultipleBlocks(
- uint8_t flags,
- const uint8_t* uid,
- uint8_t firstBlockNum,
- uint8_t numOfBlocks,
- uint8_t* rxBuf,
- uint16_t rxBufLen,
- uint16_t* rcvLen);
- /*!
- *****************************************************************************
- * \brief NFC-V Poller Write Multiple Blocks
- *
- * Reads Multiple Blocks from a device (VICC)
- * In order to not limit the length of the Write multiple command, a buffer
- * must be provided where the request will be composed and then sent.
- *
- * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option
- * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT
- * \param[in] uid : UID of the device to be put to be read
- * if UID is provided Addressed mode will be used
- * \param[in] firstBlockNum : first block to be write
- * \param[in] numOfBlocks : number of consecutive blocks to write
- * \param[in] txBuf : buffer where the request will be composed
- * \param[in] txBufLen : length of txBuf
- * \param[in] blockLen : number of bytes of a block
- * \param[in] wrData : data to be written
- * \param[in] wrDataLen : length of the data do be written. Must be
- * aligned with number of blocks to write and
- * the size of a block
- *
- * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode
- * \return ERR_PARAM : Invalid parameters
- * \return ERR_IO : Generic internal error
- * \return ERR_CRC : CRC error detected
- * \return ERR_FRAMING : Framing error detected
- * \return ERR_PROTO : Protocol error detected
- * \return ERR_TIMEOUT : Timeout error
- * \return ERR_NONE : No error
- *****************************************************************************
- */
- ReturnCode rfalNfcvPollerWriteMultipleBlocks(
- uint8_t flags,
- const uint8_t* uid,
- uint8_t firstBlockNum,
- uint8_t numOfBlocks,
- uint8_t* txBuf,
- uint16_t txBufLen,
- uint8_t blockLen,
- const uint8_t* wrData,
- uint16_t wrDataLen);
- /*!
- *****************************************************************************
- * \brief NFC-V Poller Extended Lock Single Block
- *
- * Blocks a Single Block from a device (VICC) supporting extended commands
- *
- * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option
- * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT
- * \param[in] uid : UID of the device
- * if UID is provided Addressed mode will be used
- * \param[in] blockNum : Number of the block to be locked
- *
- * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode
- * \return ERR_PARAM : Invalid parameters
- * \return ERR_IO : Generic internal error
- * \return ERR_CRC : CRC error detected
- * \return ERR_FRAMING : Framing error detected
- * \return ERR_PROTO : Protocol error detected
- * \return ERR_TIMEOUT : Timeout error
- * \return ERR_NONE : No error
- *****************************************************************************
- */
- ReturnCode rfalNfcvPollerLockBlock(uint8_t flags, const uint8_t* uid, uint8_t blockNum);
- /*!
- *****************************************************************************
- * \brief NFC-V Poller Extended Lock Single Block
- *
- * Blocks a Single Block from a device (VICC) supporting extended commands
- *
- * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option
- * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT
- * \param[in] uid : UID of the device
- * if UID is provided Addressed mode will be used
- * \param[in] blockNum : Number of the block to be locked (16 bits)
- *
- * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode
- * \return ERR_PARAM : Invalid parameters
- * \return ERR_IO : Generic internal error
- * \return ERR_CRC : CRC error detected
- * \return ERR_FRAMING : Framing error detected
- * \return ERR_PROTO : Protocol error detected
- * \return ERR_TIMEOUT : Timeout error
- * \return ERR_NONE : No error
- *****************************************************************************
- */
- ReturnCode
- rfalNfcvPollerExtendedLockSingleBlock(uint8_t flags, const uint8_t* uid, uint16_t blockNum);
- /*!
- *****************************************************************************
- * \brief NFC-V Poller Extended Read Single Block
- *
- * Reads a Single Block from a device (VICC) supporting extended commands
- *
- * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option
- * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT
- * \param[in] uid : UID of the device to be put to be read
- * if UID is provided Addressed mode will be used
- * \param[in] blockNum : Number of the block to read (16 bits)
- * \param[out] rxBuf : buffer to store response (also with RES_FLAGS)
- * \param[in] rxBufLen : length of rxBuf
- * \param[out] rcvLen : number of bytes received
- *
- * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode
- * \return ERR_PARAM : Invalid parameters
- * \return ERR_IO : Generic internal error
- * \return ERR_CRC : CRC error detected
- * \return ERR_FRAMING : Framing error detected
- * \return ERR_PROTO : Protocol error detected
- * \return ERR_TIMEOUT : Timeout error
- * \return ERR_NONE : No error
- *****************************************************************************
- */
- ReturnCode rfalNfcvPollerExtendedReadSingleBlock(
- uint8_t flags,
- const uint8_t* uid,
- uint16_t blockNum,
- uint8_t* rxBuf,
- uint16_t rxBufLen,
- uint16_t* rcvLen);
- /*!
- *****************************************************************************
- * \brief NFC-V Poller Extended Write Single Block
- *
- * Writes a Single Block from a device (VICC) supporting extended commands
- *
- * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option
- * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT
- * \param[in] uid : UID of the device
- * if UID is provided Addressed mode will be used
- * \param[in] blockNum : Number of the block to write (16 bits)
- * \param[in] wrData : data to be written on the given block
- * \param[in] blockLen : number of bytes of a block
- *
- * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode
- * \return ERR_PARAM : Invalid parameters
- * \return ERR_IO : Generic internal error
- * \return ERR_CRC : CRC error detected
- * \return ERR_FRAMING : Framing error detected
- * \return ERR_PROTO : Protocol error detected
- * \return ERR_TIMEOUT : Timeout error
- * \return ERR_NONE : No error
- *****************************************************************************
- */
- ReturnCode rfalNfcvPollerExtendedWriteSingleBlock(
- uint8_t flags,
- const uint8_t* uid,
- uint16_t blockNum,
- const uint8_t* wrData,
- uint8_t blockLen);
- /*!
- *****************************************************************************
- * \brief NFC-V Poller Extended Read Multiple Blocks
- *
- * Reads Multiple Blocks from a device (VICC) supporting extended commands
- *
- * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option
- * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT
- * \param[in] uid : UID of the device to be put to be read
- * if UID is provided Addressed mode will be used
- * \param[in] firstBlockNum : first block to be read (16 bits)
- * \param[in] numOfBlocks : number of consecutive blocks to read (16 bits)
- * \param[out] rxBuf : buffer to store response (also with RES_FLAGS)
- * \param[in] rxBufLen : length of rxBuf
- * \param[out] rcvLen : number of bytes received
- *
- * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode
- * \return ERR_PARAM : Invalid parameters
- * \return ERR_IO : Generic internal error
- * \return ERR_CRC : CRC error detected
- * \return ERR_FRAMING : Framing error detected
- * \return ERR_PROTO : Protocol error detected
- * \return ERR_TIMEOUT : Timeout error
- * \return ERR_NONE : No error
- *****************************************************************************
- */
- ReturnCode rfalNfcvPollerExtendedReadMultipleBlocks(
- uint8_t flags,
- const uint8_t* uid,
- uint16_t firstBlockNum,
- uint16_t numOfBlocks,
- uint8_t* rxBuf,
- uint16_t rxBufLen,
- uint16_t* rcvLen);
- /*!
- *****************************************************************************
- * \brief NFC-V Poller Extended Write Multiple Blocks
- *
- * Writes Multiple Blocks from a device (VICC) supporting extended commands
- * In order to not limit the length of the Write multiple command, a buffer
- * must be provided where the request will be composed and then sent.
- *
- * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option
- * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT
- * \param[in] uid : UID of the device to be put to be read
- * if UID is provided Addressed mode will be used
- * \param[in] firstBlockNum : first block to be write (16 bits)
- * \param[in] numOfBlocks : number of consecutive blocks to write (16 bits)
- * \param[in] txBuf : buffer where the request will be composed
- * \param[in] txBufLen : length of txBuf
- * \param[in] blockLen : number of bytes of a block
- * \param[in] wrData : data to be written
- * \param[in] wrDataLen : length of the data do be written. Must be
- * aligned with number of blocks to write and
- * the size of a block
- *
- * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode
- * \return ERR_PARAM : Invalid parameters
- * \return ERR_IO : Generic internal error
- * \return ERR_CRC : CRC error detected
- * \return ERR_FRAMING : Framing error detected
- * \return ERR_PROTO : Protocol error detected
- * \return ERR_TIMEOUT : Timeout error
- * \return ERR_NONE : No error
- *****************************************************************************
- */
- ReturnCode rfalNfcvPollerExtendedWriteMultipleBlocks(
- uint8_t flags,
- const uint8_t* uid,
- uint16_t firstBlockNum,
- uint16_t numOfBlocks,
- uint8_t* txBuf,
- uint16_t txBufLen,
- uint8_t blockLen,
- const uint8_t* wrData,
- uint16_t wrDataLen);
- /*!
- *****************************************************************************
- * \brief NFC-V Get System Information
- *
- * Sends Get System Information command
- *
- * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option
- * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT
- * \param[in] uid : UID of the device to be put to be read
- * if UID is provided Addressed mode will be used
- * \param[out] rxBuf : buffer to store response (also with RES_FLAGS)
- * \param[in] rxBufLen : length of rxBuf
- * \param[out] rcvLen : number of bytes received
- *
- * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode
- * \return ERR_PARAM : Invalid parameters
- * \return ERR_IO : Generic internal error
- * \return ERR_CRC : CRC error detected
- * \return ERR_FRAMING : Framing error detected
- * \return ERR_PROTO : Protocol error detected
- * \return ERR_TIMEOUT : Timeout error
- * \return ERR_NONE : No error
- *****************************************************************************
- */
- ReturnCode rfalNfcvPollerGetSystemInformation(
- uint8_t flags,
- const uint8_t* uid,
- uint8_t* rxBuf,
- uint16_t rxBufLen,
- uint16_t* rcvLen);
- /*!
- *****************************************************************************
- * \brief NFC-V Extended Get System Information
- *
- * Sends Extended Get System Information command
- *
- * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option
- * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT
- * \param[in] uid : UID of the device to be put to be read
- * if UID is provided Addressed mode will be used
- * \param[in] requestField : Get System info parameter request field
- * \param[out] rxBuf : buffer to store response (also with RES_FLAGS)
- * \param[in] rxBufLen : length of rxBuf
- * \param[out] rcvLen : number of bytes received
- *
- * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode
- * \return ERR_PARAM : Invalid parameters
- * \return ERR_IO : Generic internal error
- * \return ERR_CRC : CRC error detected
- * \return ERR_FRAMING : Framing error detected
- * \return ERR_PROTO : Protocol error detected
- * \return ERR_TIMEOUT : Timeout error
- * \return ERR_NONE : No error
- *****************************************************************************
- */
- ReturnCode rfalNfcvPollerExtendedGetSystemInformation(
- uint8_t flags,
- const uint8_t* uid,
- uint8_t requestField,
- uint8_t* rxBuf,
- uint16_t rxBufLen,
- uint16_t* rcvLen);
- /*!
- *****************************************************************************
- * \brief NFC-V Transceive Request
- *
- * Performs a generic transceive with an ISO15693 tag
- *
- * \param[in] cmd : NFC-V command
- * \param[in] flags : Flags to be used: Sub-carrier; Data_rate; Option
- * for NFC-Forum use: RFAL_NFCV_REQ_FLAG_DEFAULT
- * \param[in] param : Prepend parameter on certain proprietary requests
- * For default commands skip: RFAL_NFCV_PARAM_SKIP
- * \param[in] uid : UID of the device to be put to be read
- * if UID is provided Addressed mode will be used
- * \param[in] data : command parameters append after UID
- * \param[in] dataLen : command parameters Len
- * \param[out] rxBuf : buffer to store response (also with RES_FLAGS)
- * \param[in] rxBufLen : length of rxBuf
- * \param[out] rcvLen : number of bytes received
- *
- * \return ERR_WRONG_STATE : RFAL not initialized or incorrect mode
- * \return ERR_PARAM : Invalid parameters
- * \return ERR_IO : Generic internal error
- * \return ERR_CRC : CRC error detected
- * \return ERR_FRAMING : Framing error detected
- * \return ERR_PROTO : Protocol error detected
- * \return ERR_TIMEOUT : Timeout error
- * \return ERR_NONE : No error
- *****************************************************************************
- */
- ReturnCode rfalNfcvPollerTransceiveReq(
- uint8_t cmd,
- uint8_t flags,
- uint8_t param,
- const uint8_t* uid,
- const uint8_t* data,
- uint16_t dataLen,
- uint8_t* rxBuf,
- uint16_t rxBufLen,
- uint16_t* rcvLen);
- #endif /* RFAL_NFCV_H */
- /**
- * @}
- *
- * @}
- *
- * @}
- */
|