389ff92cc1
* Makefile, Scripts: new linter * About: remove ID from IC * Firmware: remove double define for DIVC/DIVR * Scripts: check folder names too. Docker: replace syntax check with make lint. * Reformat Sources and Migrate to new file naming convention * Docker: symlink clang-format-12 to clang-format * Add coding style guide
924 lines
40 KiB
C
924 lines
40 KiB
C
|
|
/******************************************************************************
|
|
* \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 */
|
|
|
|
/**
|
|
* @}
|
|
*
|
|
* @}
|
|
*
|
|
* @}
|
|
*/
|