| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529 |
- /******************************************************************************
- * \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 "rfal_st25xv.h"
- #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 */
|