| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818 |
- /******************************************************************************
- * \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_st25xv.c
- *
- * \author Gustavo Patricio
- *
- * \brief NFC-V ST25 NFC-V Tag specific features
- *
- * This module provides support for ST's specific features available on
- * NFC-V (ISO15693) tag families: ST25D, ST25TV, M24LR
- *
- */
- /*
- ******************************************************************************
- * INCLUDES
- ******************************************************************************
- */
- #include "../include/rfal_st25xv.h"
- #include "../include/rfal_nfcv.h"
- #include "../utils.h"
- /*
- ******************************************************************************
- * ENABLE SWITCH
- ******************************************************************************
- */
- #ifndef RFAL_FEATURE_ST25xV
- #define RFAL_FEATURE_ST25xV false /* ST25xV module configuration missing. Disabled by default */
- #endif
- #if RFAL_FEATURE_ST25xV
- /*
- ******************************************************************************
- * GLOBAL DEFINES
- ******************************************************************************
- */
- #define RFAL_ST25xV_READ_CONFIG_LEN \
- 2U /*!< READ CONFIGURATION length */
- #define RFAL_ST25xV_READ_MSG_LEN_LEN \
- 2U /*!< READ MESSAGE LENGTH length */
- #define RFAL_ST25xV_CONF_POINTER_LEN \
- 1U /*!< READ/WRITE CONFIGURATION Pointer length */
- #define RFAL_ST25xV_CONF_REGISTER_LEN \
- 1U /*!< READ/WRITE CONFIGURATION Register length */
- #define RFAL_ST25xV_PWDNUM_LEN \
- 1U /*!< Password Number length */
- #define RFAL_ST25xV_PWD_LEN \
- 8U /*!< Password length */
- #define RFAL_ST25xV_MBPOINTER_LEN \
- 1U /*!< Read Message MBPointer length */
- #define RFAL_ST25xV_NUMBYTES_LEN \
- 1U /*!< Read Message Number of Bytes length */
- #define RFAL_ST25TV02K_TBOOT_RF \
- 1U /*!< RF Boot time (Minimum time from carrier generation to first data) */
- #define RFAL_ST25TV02K_TRF_OFF \
- 2U /*!< RF OFF time */
- #define RFAL_ST25xV_FDT_POLL_MAX \
- rfalConvMsTo1fc(20) /*!< Maximum Wait time FDTV,EOF 20 ms Digital 2.1 B.5 */
- #define RFAL_NFCV_FLAG_POS \
- 0U /*!< Flag byte position */
- #define RFAL_NFCV_FLAG_LEN \
- 1U /*!< Flag byte length */
- /*
- ******************************************************************************
- * LOCAL FUNCTION PROTOTYPES
- ******************************************************************************
- */
- static ReturnCode rfalST25xVPollerGenericReadConfiguration(
- uint8_t cmd,
- uint8_t flags,
- const uint8_t* uid,
- uint8_t pointer,
- uint8_t* regValue);
- static ReturnCode rfalST25xVPollerGenericWriteConfiguration(
- uint8_t cmd,
- uint8_t flags,
- const uint8_t* uid,
- uint8_t pointer,
- uint8_t regValue);
- static ReturnCode rfalST25xVPollerGenericReadMessageLength(
- uint8_t cmd,
- uint8_t flags,
- const uint8_t* uid,
- uint8_t* msgLen);
- static ReturnCode rfalST25xVPollerGenericReadMessage(
- uint8_t cmd,
- uint8_t flags,
- const uint8_t* uid,
- uint8_t mbPointer,
- uint8_t numBytes,
- uint8_t* rxBuf,
- uint16_t rxBufLen,
- uint16_t* rcvLen);
- static ReturnCode rfalST25xVPollerGenericWriteMessage(
- uint8_t cmd,
- uint8_t flags,
- const uint8_t* uid,
- uint8_t msgLen,
- const uint8_t* msgData,
- uint8_t* txBuf,
- uint16_t txBufLen);
- /*
- ******************************************************************************
- * LOCAL FUNCTIONS
- ******************************************************************************
- */
- /*******************************************************************************/
- static ReturnCode rfalST25xVPollerGenericReadConfiguration(
- uint8_t cmd,
- uint8_t flags,
- const uint8_t* uid,
- uint8_t pointer,
- uint8_t* regValue) {
- ReturnCode ret;
- uint8_t p;
- uint16_t rcvLen;
- rfalNfcvGenericRes res;
- if(regValue == NULL) {
- return ERR_PARAM;
- }
- p = pointer;
- ret = rfalNfcvPollerTransceiveReq(
- cmd,
- flags,
- RFAL_NFCV_ST_IC_MFG_CODE,
- uid,
- &p,
- sizeof(uint8_t),
- (uint8_t*)&res,
- sizeof(rfalNfcvGenericRes),
- &rcvLen);
- if(ret == ERR_NONE) {
- if(rcvLen < RFAL_ST25xV_READ_CONFIG_LEN) {
- ret = ERR_PROTO;
- } else {
- *regValue = res.data[0];
- }
- }
- return ret;
- }
- /*******************************************************************************/
- static ReturnCode rfalST25xVPollerGenericWriteConfiguration(
- uint8_t cmd,
- uint8_t flags,
- const uint8_t* uid,
- uint8_t pointer,
- uint8_t regValue) {
- uint8_t data[RFAL_ST25xV_CONF_POINTER_LEN + RFAL_ST25xV_CONF_REGISTER_LEN];
- uint8_t dataLen;
- uint16_t rcvLen;
- rfalNfcvGenericRes res;
- dataLen = 0U;
- data[dataLen++] = pointer;
- data[dataLen++] = regValue;
- return rfalNfcvPollerTransceiveReq(
- cmd,
- flags,
- RFAL_NFCV_ST_IC_MFG_CODE,
- uid,
- data,
- dataLen,
- (uint8_t*)&res,
- sizeof(rfalNfcvGenericRes),
- &rcvLen);
- }
- /*******************************************************************************/
- static ReturnCode rfalST25xVPollerGenericReadMessageLength(
- uint8_t cmd,
- uint8_t flags,
- const uint8_t* uid,
- uint8_t* msgLen) {
- ReturnCode ret;
- uint16_t rcvLen;
- rfalNfcvGenericRes res;
- if(msgLen == NULL) {
- return ERR_PARAM;
- }
- ret = rfalNfcvPollerTransceiveReq(
- cmd,
- flags,
- RFAL_NFCV_ST_IC_MFG_CODE,
- uid,
- NULL,
- 0,
- (uint8_t*)&res,
- sizeof(rfalNfcvGenericRes),
- &rcvLen);
- if(ret == ERR_NONE) {
- if(rcvLen < RFAL_ST25xV_READ_MSG_LEN_LEN) {
- ret = ERR_PROTO;
- } else {
- *msgLen = res.data[0];
- }
- }
- return ret;
- }
- /*******************************************************************************/
- static ReturnCode rfalST25xVPollerGenericReadMessage(
- uint8_t cmd,
- uint8_t flags,
- const uint8_t* uid,
- uint8_t mbPointer,
- uint8_t numBytes,
- uint8_t* rxBuf,
- uint16_t rxBufLen,
- uint16_t* rcvLen) {
- uint8_t data[RFAL_ST25xV_MBPOINTER_LEN + RFAL_ST25xV_NUMBYTES_LEN];
- uint8_t dataLen;
- dataLen = 0;
- /* Compute Request Data */
- data[dataLen++] = mbPointer;
- data[dataLen++] = numBytes;
- return rfalNfcvPollerTransceiveReq(
- cmd, flags, RFAL_NFCV_ST_IC_MFG_CODE, uid, data, dataLen, rxBuf, rxBufLen, rcvLen);
- }
- /*******************************************************************************/
- static ReturnCode rfalST25xVPollerGenericWriteMessage(
- uint8_t cmd,
- uint8_t flags,
- const uint8_t* uid,
- uint8_t msgLen,
- const uint8_t* msgData,
- uint8_t* txBuf,
- uint16_t txBufLen) {
- ReturnCode ret;
- uint8_t reqFlag;
- uint16_t msgIt;
- rfalBitRate rxBR;
- bool fastMode;
- rfalNfcvGenericRes res;
- uint16_t rcvLen;
- /* Calculate required Tx buf length: Mfg Code UID MSGLen MSGLen+1 */
- msgIt = (uint16_t)(msgLen + sizeof(flags) + sizeof(cmd) + 1U +
- ((uid != NULL) ? RFAL_NFCV_UID_LEN : 0U) + 1U + 1U);
- /* Note: MSGlength parameter of the command is the number of Data bytes minus - 1 (00 for 1 byte of data, FFh for 256 bytes of data) */
- /* Check for valid parameters */
- if((txBuf == NULL) || (msgData == NULL) || (txBufLen < msgIt)) {
- return ERR_PARAM;
- }
- msgIt = 0;
- fastMode = false;
- /* Check if the command is an ST's Fast command */
- if(cmd == (uint8_t)RFAL_NFCV_CMD_FAST_WRITE_MESSAGE) {
- /* Store current Rx bit rate and move to fast mode */
- rfalGetBitRate(NULL, &rxBR);
- rfalSetBitRate(RFAL_BR_KEEP, RFAL_BR_52p97);
- fastMode = true;
- }
- /* Compute Request Command */
- reqFlag = (uint8_t)(flags & (~((uint32_t)RFAL_NFCV_REQ_FLAG_ADDRESS) &
- ~((uint32_t)RFAL_NFCV_REQ_FLAG_SELECT)));
- reqFlag |=
- ((uid != NULL) ? (uint8_t)RFAL_NFCV_REQ_FLAG_ADDRESS : (uint8_t)RFAL_NFCV_REQ_FLAG_SELECT);
- txBuf[msgIt++] = reqFlag;
- txBuf[msgIt++] = cmd;
- txBuf[msgIt++] = RFAL_NFCV_ST_IC_MFG_CODE;
- if(uid != NULL) {
- ST_MEMCPY(&txBuf[msgIt], uid, RFAL_NFCV_UID_LEN);
- msgIt += RFAL_NFCV_UID_LEN;
- }
- txBuf[msgIt++] = msgLen;
- ST_MEMCPY(
- &txBuf[msgIt],
- msgData,
- (uint16_t)(msgLen + (uint16_t)1U)); /* Message Data contains (MSGLength + 1) bytes */
- msgIt += (uint16_t)(msgLen + (uint16_t)1U);
- /* Transceive Command */
- ret = rfalTransceiveBlockingTxRx(
- txBuf,
- msgIt,
- (uint8_t*)&res,
- sizeof(rfalNfcvGenericRes),
- &rcvLen,
- RFAL_TXRX_FLAGS_DEFAULT,
- RFAL_ST25xV_FDT_POLL_MAX);
- /* Restore Rx BitRate */
- if(fastMode) {
- rfalSetBitRate(RFAL_BR_KEEP, rxBR);
- }
- if(ret != ERR_NONE) {
- return ret;
- }
- /* Check if the response minimum length has been received */
- if(rcvLen < (uint8_t)RFAL_NFCV_FLAG_LEN) {
- return ERR_PROTO;
- }
- /* Check if an error has been signalled */
- if((res.RES_FLAG & (uint8_t)RFAL_NFCV_RES_FLAG_ERROR) != 0U) {
- return ERR_PROTO;
- }
- return ERR_NONE;
- }
- /*
- ******************************************************************************
- * GLOBAL FUNCTIONS
- ******************************************************************************
- */
- /*******************************************************************************/
- ReturnCode rfalST25xVPollerM24LRReadSingleBlock(
- uint8_t flags,
- const uint8_t* uid,
- uint16_t blockNum,
- uint8_t* rxBuf,
- uint16_t rxBufLen,
- uint16_t* rcvLen) {
- uint8_t data[RFAL_NFCV_BLOCKNUM_M24LR_LEN];
- uint8_t dataLen;
- dataLen = 0;
- /* Compute Request Data */
- data[dataLen++] = (uint8_t)blockNum; /* Set M24LR Block Number (16 bits) LSB */
- data[dataLen++] = (uint8_t)(blockNum >> 8U); /* Set M24LR Block Number (16 bits) MSB */
- return rfalNfcvPollerTransceiveReq(
- RFAL_NFCV_CMD_READ_SINGLE_BLOCK,
- (flags | (uint8_t)RFAL_NFCV_REQ_FLAG_PROTOCOL_EXT),
- RFAL_NFCV_PARAM_SKIP,
- uid,
- data,
- dataLen,
- rxBuf,
- rxBufLen,
- rcvLen);
- }
- /*******************************************************************************/
- ReturnCode rfalST25xVPollerM24LRWriteSingleBlock(
- uint8_t flags,
- const uint8_t* uid,
- uint16_t blockNum,
- const uint8_t* wrData,
- uint8_t blockLen) {
- uint8_t data[(RFAL_NFCV_BLOCKNUM_M24LR_LEN + RFAL_NFCV_MAX_BLOCK_LEN)];
- uint8_t dataLen;
- uint16_t rcvLen;
- rfalNfcvGenericRes res;
- /* Check for valid parameters */
- if((blockLen == 0U) || (blockLen > (uint8_t)RFAL_NFCV_MAX_BLOCK_LEN) || (wrData == NULL)) {
- return ERR_PARAM;
- }
- dataLen = 0U;
- /* Compute Request Data */
- data[dataLen++] = (uint8_t)blockNum; /* Set M24LR Block Number (16 bits) LSB */
- data[dataLen++] = (uint8_t)(blockNum >> 8U); /* Set M24LR Block Number (16 bits) MSB */
- ST_MEMCPY(&data[dataLen], wrData, blockLen); /* Append Block data to write */
- dataLen += blockLen;
- return rfalNfcvPollerTransceiveReq(
- RFAL_NFCV_CMD_WRITE_SINGLE_BLOCK,
- (flags | (uint8_t)RFAL_NFCV_REQ_FLAG_PROTOCOL_EXT),
- RFAL_NFCV_PARAM_SKIP,
- uid,
- data,
- dataLen,
- (uint8_t*)&res,
- sizeof(rfalNfcvGenericRes),
- &rcvLen);
- }
- /*******************************************************************************/
- ReturnCode rfalST25xVPollerM24LRReadMultipleBlocks(
- uint8_t flags,
- const uint8_t* uid,
- uint16_t firstBlockNum,
- uint8_t numOfBlocks,
- uint8_t* rxBuf,
- uint16_t rxBufLen,
- uint16_t* rcvLen) {
- uint8_t data[(RFAL_NFCV_BLOCKNUM_M24LR_LEN + RFAL_NFCV_BLOCKNUM_M24LR_LEN)];
- uint8_t dataLen;
- dataLen = 0U;
- /* Compute Request Data */
- data[dataLen++] = (uint8_t)firstBlockNum; /* Set M24LR Block Number (16 bits) LSB */
- data[dataLen++] = (uint8_t)(firstBlockNum >> 8U); /* Set M24LR Block Number (16 bits) MSB */
- data[dataLen++] = numOfBlocks; /* Set number of blocks to read */
- return rfalNfcvPollerTransceiveReq(
- RFAL_NFCV_CMD_READ_MULTIPLE_BLOCKS,
- (flags | (uint8_t)RFAL_NFCV_REQ_FLAG_PROTOCOL_EXT),
- RFAL_NFCV_PARAM_SKIP,
- uid,
- data,
- dataLen,
- rxBuf,
- rxBufLen,
- rcvLen);
- }
- /*******************************************************************************/
- ReturnCode rfalST25xVPollerFastReadSingleBlock(
- uint8_t flags,
- const uint8_t* uid,
- uint8_t blockNum,
- uint8_t* rxBuf,
- uint16_t rxBufLen,
- uint16_t* rcvLen) {
- uint8_t bn;
- bn = blockNum;
- return rfalNfcvPollerTransceiveReq(
- RFAL_NFCV_CMD_FAST_READ_SINGLE_BLOCK,
- flags,
- RFAL_NFCV_ST_IC_MFG_CODE,
- uid,
- &bn,
- sizeof(uint8_t),
- rxBuf,
- rxBufLen,
- rcvLen);
- }
- /*******************************************************************************/
- ReturnCode rfalST25xVPollerM24LRFastReadSingleBlock(
- uint8_t flags,
- const uint8_t* uid,
- uint16_t blockNum,
- uint8_t* rxBuf,
- uint16_t rxBufLen,
- uint16_t* rcvLen) {
- uint8_t data[RFAL_NFCV_BLOCKNUM_M24LR_LEN];
- uint8_t dataLen;
- dataLen = 0;
- /* Compute Request Data */
- data[dataLen++] = (uint8_t)blockNum; /* Set M24LR Block Number (16 bits) LSB */
- data[dataLen++] = (uint8_t)(blockNum >> 8U); /* Set M24LR Block Number (16 bits) MSB */
- return rfalNfcvPollerTransceiveReq(
- RFAL_NFCV_CMD_FAST_READ_SINGLE_BLOCK,
- (flags | (uint8_t)RFAL_NFCV_REQ_FLAG_PROTOCOL_EXT),
- RFAL_NFCV_ST_IC_MFG_CODE,
- uid,
- data,
- dataLen,
- rxBuf,
- rxBufLen,
- rcvLen);
- }
- /*******************************************************************************/
- ReturnCode rfalST25xVPollerM24LRFastReadMultipleBlocks(
- uint8_t flags,
- const uint8_t* uid,
- uint16_t firstBlockNum,
- uint8_t numOfBlocks,
- uint8_t* rxBuf,
- uint16_t rxBufLen,
- uint16_t* rcvLen) {
- uint8_t data[(RFAL_NFCV_BLOCKNUM_M24LR_LEN + RFAL_NFCV_BLOCKNUM_M24LR_LEN)];
- uint8_t dataLen;
- dataLen = 0U;
- /* Compute Request Data */
- data[dataLen++] = (uint8_t)firstBlockNum; /* Set M24LR Block Number (16 bits) LSB */
- data[dataLen++] = (uint8_t)(firstBlockNum >> 8U); /* Set M24LR Block Number (16 bits) MSB */
- data[dataLen++] = numOfBlocks; /* Set number of blocks to read */
- return rfalNfcvPollerTransceiveReq(
- RFAL_NFCV_CMD_FAST_READ_MULTIPLE_BLOCKS,
- (flags | (uint8_t)RFAL_NFCV_REQ_FLAG_PROTOCOL_EXT),
- RFAL_NFCV_ST_IC_MFG_CODE,
- uid,
- data,
- dataLen,
- rxBuf,
- rxBufLen,
- rcvLen);
- }
- /*******************************************************************************/
- ReturnCode rfalST25xVPollerFastReadMultipleBlocks(
- uint8_t flags,
- const uint8_t* uid,
- uint8_t firstBlockNum,
- uint8_t numOfBlocks,
- uint8_t* rxBuf,
- uint16_t rxBufLen,
- uint16_t* rcvLen) {
- uint8_t data[(RFAL_NFCV_BLOCKNUM_LEN + RFAL_NFCV_BLOCKNUM_LEN)];
- uint8_t dataLen;
- dataLen = 0U;
- /* Compute Request Data */
- data[dataLen++] = firstBlockNum; /* Set first Block Number */
- data[dataLen++] = numOfBlocks; /* Set number of blocks to read */
- return rfalNfcvPollerTransceiveReq(
- RFAL_NFCV_CMD_FAST_READ_MULTIPLE_BLOCKS,
- flags,
- RFAL_NFCV_ST_IC_MFG_CODE,
- uid,
- data,
- dataLen,
- rxBuf,
- rxBufLen,
- rcvLen);
- }
- /*******************************************************************************/
- ReturnCode rfalST25xVPollerFastExtendedReadSingleBlock(
- uint8_t flags,
- const uint8_t* uid,
- uint16_t blockNum,
- uint8_t* rxBuf,
- uint16_t rxBufLen,
- uint16_t* rcvLen) {
- uint8_t data[RFAL_NFCV_BLOCKNUM_EXTENDED_LEN];
- uint8_t dataLen;
- dataLen = 0U;
- /* Compute Request Data */
- data[dataLen++] = (uint8_t)
- blockNum; /* TS T5T 1.0 BNo is considered as a multi-byte field. TS T5T 1.0 5.1.1.13 multi-byte field follows [DIGITAL]. [DIGITAL] 9.3.1 A multiple byte field is transmitted LSB first. */
- data[dataLen++] = (uint8_t)((blockNum >> 8U) & 0xFFU);
- return rfalNfcvPollerTransceiveReq(
- RFAL_NFCV_CMD_FAST_EXTENDED_READ_SINGLE_BLOCK,
- flags,
- RFAL_NFCV_ST_IC_MFG_CODE,
- uid,
- data,
- dataLen,
- rxBuf,
- rxBufLen,
- rcvLen);
- }
- /*******************************************************************************/
- ReturnCode rfalST25xVPollerFastExtReadMultipleBlocks(
- uint8_t flags,
- const uint8_t* uid,
- uint16_t firstBlockNum,
- uint16_t numOfBlocks,
- uint8_t* rxBuf,
- uint16_t rxBufLen,
- uint16_t* rcvLen) {
- uint8_t data[(RFAL_NFCV_BLOCKNUM_EXTENDED_LEN + RFAL_NFCV_BLOCKNUM_EXTENDED_LEN)];
- uint8_t dataLen;
- dataLen = 0U;
- /* Compute Request Data */
- data[dataLen++] = (uint8_t)((firstBlockNum >> 0U) & 0xFFU);
- data[dataLen++] = (uint8_t)((firstBlockNum >> 8U) & 0xFFU);
- data[dataLen++] = (uint8_t)((numOfBlocks >> 0U) & 0xFFU);
- data[dataLen++] = (uint8_t)((numOfBlocks >> 8U) & 0xFFU);
- return rfalNfcvPollerTransceiveReq(
- RFAL_NFCV_CMD_FAST_EXTENDED_READ_MULTIPLE_BLOCKS,
- flags,
- RFAL_NFCV_ST_IC_MFG_CODE,
- uid,
- data,
- dataLen,
- rxBuf,
- rxBufLen,
- rcvLen);
- }
- /*******************************************************************************/
- ReturnCode rfalST25xVPollerReadConfiguration(
- uint8_t flags,
- const uint8_t* uid,
- uint8_t pointer,
- uint8_t* regValue) {
- return rfalST25xVPollerGenericReadConfiguration(
- RFAL_NFCV_CMD_READ_CONFIGURATION, flags, uid, pointer, regValue);
- }
- /*******************************************************************************/
- ReturnCode rfalST25xVPollerWriteConfiguration(
- uint8_t flags,
- const uint8_t* uid,
- uint8_t pointer,
- uint8_t regValue) {
- return rfalST25xVPollerGenericWriteConfiguration(
- RFAL_NFCV_CMD_WRITE_CONFIGURATION, flags, uid, pointer, regValue);
- }
- /*******************************************************************************/
- ReturnCode rfalST25xVPollerReadDynamicConfiguration(
- uint8_t flags,
- const uint8_t* uid,
- uint8_t pointer,
- uint8_t* regValue) {
- return rfalST25xVPollerGenericReadConfiguration(
- RFAL_NFCV_CMD_READ_DYN_CONFIGURATION, flags, uid, pointer, regValue);
- }
- /*******************************************************************************/
- ReturnCode rfalST25xVPollerWriteDynamicConfiguration(
- uint8_t flags,
- const uint8_t* uid,
- uint8_t pointer,
- uint8_t regValue) {
- return rfalST25xVPollerGenericWriteConfiguration(
- RFAL_NFCV_CMD_WRITE_DYN_CONFIGURATION, flags, uid, pointer, regValue);
- }
- /*******************************************************************************/
- ReturnCode rfalST25xVPollerFastReadDynamicConfiguration(
- uint8_t flags,
- const uint8_t* uid,
- uint8_t pointer,
- uint8_t* regValue) {
- return rfalST25xVPollerGenericReadConfiguration(
- RFAL_NFCV_CMD_FAST_READ_DYN_CONFIGURATION, flags, uid, pointer, regValue);
- }
- /*******************************************************************************/
- ReturnCode rfalST25xVPollerFastWriteDynamicConfiguration(
- uint8_t flags,
- const uint8_t* uid,
- uint8_t pointer,
- uint8_t regValue) {
- return rfalST25xVPollerGenericWriteConfiguration(
- RFAL_NFCV_CMD_FAST_WRITE_DYN_CONFIGURATION, flags, uid, pointer, regValue);
- }
- /*******************************************************************************/
- ReturnCode rfalST25xVPollerPresentPassword(
- uint8_t flags,
- const uint8_t* uid,
- uint8_t pwdNum,
- const uint8_t* pwd,
- uint8_t pwdLen) {
- uint8_t data[RFAL_ST25xV_PWDNUM_LEN + RFAL_ST25xV_PWD_LEN];
- uint8_t dataLen;
- uint16_t rcvLen;
- rfalNfcvGenericRes res;
- if((pwdLen > RFAL_ST25xV_PWD_LEN) || (pwd == NULL)) {
- return ERR_PARAM;
- }
- dataLen = 0U;
- data[dataLen++] = pwdNum;
- if(pwdLen > 0U) {
- ST_MEMCPY(&data[dataLen], pwd, pwdLen);
- }
- dataLen += pwdLen;
- return rfalNfcvPollerTransceiveReq(
- RFAL_NFCV_CMD_PRESENT_PASSWORD,
- flags,
- RFAL_NFCV_ST_IC_MFG_CODE,
- uid,
- data,
- dataLen,
- (uint8_t*)&res,
- sizeof(rfalNfcvGenericRes),
- &rcvLen);
- }
- /*******************************************************************************/
- ReturnCode rfalST25xVPollerGetRandomNumber(
- uint8_t flags,
- const uint8_t* uid,
- uint8_t* rxBuf,
- uint16_t rxBufLen,
- uint16_t* rcvLen) {
- rfalFieldOff();
- platformDelay(RFAL_ST25TV02K_TRF_OFF);
- rfalNfcvPollerInitialize();
- rfalFieldOnAndStartGT();
- platformDelay(RFAL_ST25TV02K_TBOOT_RF);
- return rfalNfcvPollerTransceiveReq(
- RFAL_NFCV_CMD_GET_RANDOM_NUMBER,
- flags,
- RFAL_NFCV_ST_IC_MFG_CODE,
- uid,
- NULL,
- 0U,
- rxBuf,
- rxBufLen,
- rcvLen);
- }
- /*******************************************************************************/
- ReturnCode rfalST25xVPollerWriteMessage(
- uint8_t flags,
- const uint8_t* uid,
- uint8_t msgLen,
- const uint8_t* msgData,
- uint8_t* txBuf,
- uint16_t txBufLen) {
- return rfalST25xVPollerGenericWriteMessage(
- RFAL_NFCV_CMD_WRITE_MESSAGE, flags, uid, msgLen, msgData, txBuf, txBufLen);
- }
- /*******************************************************************************/
- ReturnCode rfalST25xVPollerFastWriteMessage(
- uint8_t flags,
- const uint8_t* uid,
- uint8_t msgLen,
- const uint8_t* msgData,
- uint8_t* txBuf,
- uint16_t txBufLen) {
- return rfalST25xVPollerGenericWriteMessage(
- RFAL_NFCV_CMD_FAST_WRITE_MESSAGE, flags, uid, msgLen, msgData, txBuf, txBufLen);
- }
- /*******************************************************************************/
- ReturnCode rfalST25xVPollerReadMessageLength(uint8_t flags, const uint8_t* uid, uint8_t* msgLen) {
- return rfalST25xVPollerGenericReadMessageLength(
- RFAL_NFCV_CMD_READ_MESSAGE_LENGTH, flags, uid, msgLen);
- }
- /*******************************************************************************/
- ReturnCode rfalST25xVPollerFastReadMsgLength(uint8_t flags, const uint8_t* uid, uint8_t* msgLen) {
- return rfalST25xVPollerGenericReadMessageLength(
- RFAL_NFCV_CMD_FAST_READ_MESSAGE_LENGTH, flags, uid, msgLen);
- }
- /*******************************************************************************/
- ReturnCode rfalST25xVPollerReadMessage(
- uint8_t flags,
- const uint8_t* uid,
- uint8_t mbPointer,
- uint8_t numBytes,
- uint8_t* rxBuf,
- uint16_t rxBufLen,
- uint16_t* rcvLen) {
- return rfalST25xVPollerGenericReadMessage(
- RFAL_NFCV_CMD_READ_MESSAGE, flags, uid, mbPointer, numBytes, rxBuf, rxBufLen, rcvLen);
- }
- /*******************************************************************************/
- ReturnCode rfalST25xVPollerFastReadMessage(
- uint8_t flags,
- const uint8_t* uid,
- uint8_t mbPointer,
- uint8_t numBytes,
- uint8_t* rxBuf,
- uint16_t rxBufLen,
- uint16_t* rcvLen) {
- return rfalST25xVPollerGenericReadMessage(
- RFAL_NFCV_CMD_FAST_READ_MESSAGE, flags, uid, mbPointer, numBytes, rxBuf, rxBufLen, rcvLen);
- }
- #endif /* RFAL_FEATURE_ST25xV */
|