| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713 |
- /******************************************************************************
- * \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_rf.h
- *
- * \author Gustavo Patricio
- *
- * \brief RF Abstraction Layer (RFAL)
- *
- * RFAL (RF Abstraction Layer) provides several functionalities required to
- * perform RF/NFC communications. <br>The RFAL encapsulates the different
- * RF ICs (ST25R3911, ST25R391x, etc) into a common and easy to use interface.
- *
- * It provides interfaces to configure the RF IC, set/get timings, modes, bit rates,
- * specific handlings, execute listen mode, etc.
- *
- * Furthermore it provides a common interface to perform a Transceive operations.
- * The Transceive can be executed in a blocking or non blocking way.<br>
- * Additionally few specific Transceive methods are available to cope with the
- * specifics of these particular operations.
- *
- * The most common interfaces are:
- * <br> rfalInitialize()
- * <br> rfalSetFDTPoll()
- * <br> rfalSetFDTListen()
- * <br> rfalSetGT()
- * <br> rfalSetBitRate()
- * <br> rfalSetMode()
- * <br> rfalFieldOnAndStartGT()
- * <br> rfalFieldOff()
- * <br> rfalStartTransceive()
- * <br> rfalGetTransceiveStatus()
- * <br> rfalTransceiveBlockingTxRx()
- *
- * An usage example is provided here: \ref exampleRfalPoller.c
- * \example exampleRfalPoller.c
- *
- * \addtogroup RFAL
- * @{
- *
- * \addtogroup RFAL-HAL
- * \brief RFAL Hardware Abstraction Layer
- * @{
- *
- * \addtogroup RF
- * \brief RFAL RF Abstraction Layer
- * @{
- *
- */
- #ifndef RFAL_RF_H
- #define RFAL_RF_H
- /*
- ******************************************************************************
- * INCLUDES
- ******************************************************************************
- */
- #include "platform.h"
- #include "st_errno.h"
- #include "rfal_features.h"
- /*
- ******************************************************************************
- * GLOBAL DEFINES
- ******************************************************************************
- */
- #define RFAL_VERSION 0x020200U /*!< RFAL Current Version: v2.2.0 */
- #define RFAL_FWT_NONE 0xFFFFFFFFU /*!< Disabled FWT: Wait forever for a response */
- #define RFAL_GT_NONE RFAL_TIMING_NONE /*!< Disabled GT: No GT will be applied after Field On */
- #define RFAL_TIMING_NONE 0x00U /*!< Timing disabled | Don't apply */
- #define RFAL_1FC_IN_4096FC \
- (uint32_t)4096U /*!< Number of 1/fc cycles in one 4096/fc */
- #define RFAL_1FC_IN_512FC (uint32_t)512U /*!< Number of 1/fc cycles in one 512/fc */
- #define RFAL_1FC_IN_64FC (uint32_t)64U /*!< Number of 1/fc cycles in one 64/fc */
- #define RFAL_1FC_IN_8FC (uint32_t)8U /*!< Number of 1/fc cycles in one 8/fc */
- #define RFAL_US_IN_MS (uint32_t)1000U /*!< Number of us in one ms */
- #define RFAL_1MS_IN_1FC (uint32_t)13560U /*!< Number of 1/fc cycles in 1ms */
- #define RFAL_BITS_IN_BYTE (uint16_t)8U /*!< Number of bits in one byte */
- #define RFAL_CRC_LEN 2U /*!< RF CRC LEN */
- /*! Default TxRx flags: Tx CRC automatic, Rx CRC removed, NFCIP1 mode off, AGC On, Tx Parity automatic, Rx Parity removed */
- #define RFAL_TXRX_FLAGS_DEFAULT \
- ((uint32_t)RFAL_TXRX_FLAGS_CRC_TX_AUTO | (uint32_t)RFAL_TXRX_FLAGS_CRC_RX_REMV | \
- (uint32_t)RFAL_TXRX_FLAGS_NFCIP1_OFF | (uint32_t)RFAL_TXRX_FLAGS_AGC_ON | \
- (uint32_t)RFAL_TXRX_FLAGS_PAR_RX_REMV | (uint32_t)RFAL_TXRX_FLAGS_PAR_TX_AUTO | \
- (uint32_t)RFAL_TXRX_FLAGS_NFCV_FLAG_AUTO)
- #define RFAL_TXRX_FLAGS_RAW \
- ((uint32_t)RFAL_TXRX_FLAGS_CRC_TX_MANUAL | (uint32_t)RFAL_TXRX_FLAGS_CRC_RX_KEEP | \
- (uint32_t)RFAL_TXRX_FLAGS_NFCIP1_OFF | (uint32_t)RFAL_TXRX_FLAGS_AGC_ON | \
- (uint32_t)RFAL_TXRX_FLAGS_PAR_RX_KEEP | (uint32_t)RFAL_TXRX_FLAGS_PAR_TX_NONE | \
- (uint32_t)RFAL_TXRX_FLAGS_NFCV_FLAG_AUTO)
- #define RFAL_LM_MASK_NFCA \
- ((uint32_t)1U \
- << (uint8_t)RFAL_MODE_LISTEN_NFCA) /*!< Bitmask for Listen Mode enabling NFCA */
- #define RFAL_LM_MASK_NFCB \
- ((uint32_t)1U \
- << (uint8_t)RFAL_MODE_LISTEN_NFCB) /*!< Bitmask for Listen Mode enabling NFCB */
- #define RFAL_LM_MASK_NFCF \
- ((uint32_t)1U \
- << (uint8_t)RFAL_MODE_LISTEN_NFCF) /*!< Bitmask for Listen Mode enabling NFCF */
- #define RFAL_LM_MASK_ACTIVE_P2P \
- ((uint32_t)1U \
- << (uint8_t)RFAL_MODE_LISTEN_ACTIVE_P2P) /*!< Bitmask for Listen Mode enabling AP2P */
- #define RFAL_LM_SENS_RES_LEN 2U /*!< NFC-A SENS_RES (ATQA) length */
- #define RFAL_LM_SENSB_RES_LEN 13U /*!< NFC-B SENSB_RES (ATQB) length */
- #define RFAL_LM_SENSF_RES_LEN 19U /*!< NFC-F SENSF_RES length */
- #define RFAL_LM_SENSF_SC_LEN 2U /*!< NFC-F System Code length */
- #define RFAL_NFCID3_LEN 10U /*!< NFCID3 length */
- #define RFAL_NFCID2_LEN 8U /*!< NFCID2 length */
- #define RFAL_NFCID1_TRIPLE_LEN 10U /*!< NFCID1 length */
- #define RFAL_NFCID1_DOUBLE_LEN 7U /*!< NFCID1 length */
- #define RFAL_NFCID1_SINGLE_LEN 4U /*!< NFCID1 length */
- /*
- ******************************************************************************
- * GLOBAL MACROS
- ******************************************************************************
- */
- /*! Returns the maximum supported bit rate for RW mode. Caller must check if mode is supported before, as even if mode is not supported will return the min */
- #define rfalGetMaxBrRW() \
- (((RFAL_SUPPORT_BR_RW_6780) ? \
- RFAL_BR_6780 : \
- ((RFAL_SUPPORT_BR_RW_3390) ? \
- RFAL_BR_3390 : \
- ((RFAL_SUPPORT_BR_RW_1695) ? \
- RFAL_BR_1695 : \
- ((RFAL_SUPPORT_BR_RW_848) ? \
- RFAL_BR_848 : \
- ((RFAL_SUPPORT_BR_RW_424) ? \
- RFAL_BR_424 : \
- ((RFAL_SUPPORT_BR_RW_212) ? RFAL_BR_212 : RFAL_BR_106)))))))
- /*! Returns the maximum supported bit rate for AP2P mode. Caller must check if mode is supported before, as even if mode is not supported will return the min */
- #define rfalGetMaxBrAP2P() \
- (((RFAL_SUPPORT_BR_AP2P_848) ? \
- RFAL_BR_848 : \
- ((RFAL_SUPPORT_BR_AP2P_424) ? \
- RFAL_BR_424 : \
- ((RFAL_SUPPORT_BR_AP2P_212) ? RFAL_BR_212 : RFAL_BR_106))))
- /*! Returns the maximum supported bit rate for CE-A mode. Caller must check if mode is supported before, as even if mode is not supported will return the min */
- #define rfalGetMaxBrCEA() \
- (((RFAL_SUPPORT_BR_CE_A_848) ? \
- RFAL_BR_848 : \
- ((RFAL_SUPPORT_BR_CE_A_424) ? \
- RFAL_BR_424 : \
- ((RFAL_SUPPORT_BR_CE_A_212) ? RFAL_BR_212 : RFAL_BR_106))))
- /*! Returns the maximum supported bit rate for CE-B mode. Caller must check if mode is supported before, as even if mode is not supported will return the min */
- #define rfalGetMaxBrCEB() \
- (((RFAL_SUPPORT_BR_CE_B_848) ? \
- RFAL_BR_848 : \
- ((RFAL_SUPPORT_BR_CE_B_424) ? \
- RFAL_BR_424 : \
- ((RFAL_SUPPORT_BR_CE_B_212) ? RFAL_BR_212 : RFAL_BR_106))))
- /*! Returns the maximum supported bit rate for CE-F mode. Caller must check if mode is supported before, as even if mode is not supported will return the min */
- #define rfalGetMaxBrCEF() (((RFAL_SUPPORT_BR_CE_F_424) ? RFAL_BR_424 : RFAL_BR_212))
- #define rfalIsModeActiveComm(md) \
- (((md) == RFAL_MODE_POLL_ACTIVE_P2P) || \
- ((md) == RFAL_MODE_LISTEN_ACTIVE_P2P)) /*!< Checks if mode md is Active Communication */
- #define rfalIsModePassiveComm(md) \
- (!rfalIsModeActiveComm(md)) /*!< Checks if mode md is Passive Communication */
- #define rfalIsModePassiveListen(md) \
- (((md) == RFAL_MODE_LISTEN_NFCA) || ((md) == RFAL_MODE_LISTEN_NFCB) || \
- ((md) == RFAL_MODE_LISTEN_NFCF)) /*!< Checks if mode md is Passive Listen */
- #define rfalIsModePassivePoll(md) \
- (rfalIsModePassiveComm(md) && \
- !rfalIsModePassiveListen(md)) /*!< Checks if mode md is Passive Poll */
- #define rfalConv1fcTo8fc(t) \
- (uint32_t)((uint32_t)(t) / RFAL_1FC_IN_8FC) /*!< Converts the given t from 1/fc to 8/fc */
- #define rfalConv8fcTo1fc(t) \
- (uint32_t)((uint32_t)(t)*RFAL_1FC_IN_8FC) /*!< Converts the given t from 8/fc to 1/fc */
- #define rfalConv1fcTo64fc(t) \
- (uint32_t)((uint32_t)(t) / RFAL_1FC_IN_64FC) /*!< Converts the given t from 1/fc to 64/fc */
- #define rfalConv64fcTo1fc(t) \
- (uint32_t)((uint32_t)(t)*RFAL_1FC_IN_64FC) /*!< Converts the given t from 64/fc to 1/fc */
- #define rfalConv1fcTo512fc(t) \
- (uint32_t)( \
- (uint32_t)(t) / RFAL_1FC_IN_512FC) /*!< Converts the given t from 1/fc to 512/fc */
- #define rfalConv512fcTo1fc(t) \
- (uint32_t)((uint32_t)(t)*RFAL_1FC_IN_512FC) /*!< Converts the given t from 512/fc to 1/fc */
- #define rfalConv1fcTo4096fc(t) \
- (uint32_t)( \
- (uint32_t)(t) / RFAL_1FC_IN_4096FC) /*!< Converts the given t from 1/fc to 4096/fc */
- #define rfalConv4096fcTo1fc(t) \
- (uint32_t)((uint32_t)(t)*RFAL_1FC_IN_4096FC) /*!< Converts the given t from 4096/fc to 1/fc */
- #define rfalConv1fcToMs(t) \
- (uint32_t)((uint32_t)(t) / RFAL_1MS_IN_1FC) /*!< Converts the given t from 1/fc to ms */
- #define rfalConvMsTo1fc(t) \
- (uint32_t)((uint32_t)(t)*RFAL_1MS_IN_1FC) /*!< Converts the given t from ms to 1/fc */
- #define rfalConv1fcToUs(t) \
- (uint32_t)( \
- ((uint32_t)(t)*RFAL_US_IN_MS) / \
- RFAL_1MS_IN_1FC) /*!< Converts the given t from 1/fc to us */
- #define rfalConvUsTo1fc(t) \
- (uint32_t)( \
- ((uint32_t)(t)*RFAL_1MS_IN_1FC) / \
- RFAL_US_IN_MS) /*!< Converts the given t from us to 1/fc */
- #define rfalConv64fcToMs(t) \
- (uint32_t)( \
- (uint32_t)(t) / \
- (RFAL_1MS_IN_1FC / RFAL_1FC_IN_64FC)) /*!< Converts the given t from 64/fc to ms */
- #define rfalConvMsTo64fc(t) \
- (uint32_t)( \
- (uint32_t)(t) * \
- (RFAL_1MS_IN_1FC / RFAL_1FC_IN_64FC)) /*!< Converts the given t from ms to 64/fc */
- #define rfalConvBitsToBytes(n) \
- (uint16_t)( \
- ((uint16_t)(n) + (RFAL_BITS_IN_BYTE - 1U)) / \
- (RFAL_BITS_IN_BYTE)) /*!< Converts the given n from bits to bytes */
- #define rfalConvBytesToBits(n) \
- (uint32_t)( \
- (uint32_t)(n) * (RFAL_BITS_IN_BYTE)) /*!< Converts the given n from bytes to bits */
- /*! Computes a Transceive context \a ctx with default flags and the lengths
- * in bytes with the given arguments
- * \a ctx : Transceive context to be assigned
- * \a tB : txBuf the pointer to the buffer to be sent
- * \a tBL : txBuf length in bytes
- * \a rB : rxBuf the pointer to the buffer to place the received frame
- * \a rBL : rxBuf length in bytes
- * \a rBL : rxBuf length in bytes
- * \a t : FWT to be used on this transceive in 1/fc
- */
- #define rfalCreateByteTxRxContext(ctx, tB, tBL, rB, rBL, rdL, t) \
- (ctx).txBuf = (uint8_t*)(tB); \
- (ctx).txBufLen = (uint16_t)rfalConvBytesToBits(tBL); \
- (ctx).rxBuf = (uint8_t*)(rB); \
- (ctx).rxBufLen = (uint16_t)rfalConvBytesToBits(rBL); \
- (ctx).rxRcvdLen = (uint16_t*)(rdL); \
- (ctx).flags = (uint32_t)RFAL_TXRX_FLAGS_DEFAULT; \
- (ctx).fwt = (uint32_t)(t);
- /*! Computes a Transceive context \a ctx using lengths in bytes
- * with the given flags and arguments
- * \a ctx : Transceive context to be assigned
- * \a tB : txBuf the pointer to the buffer to be sent
- * \a tBL : txBuf length in bytes
- * \a rB : rxBuf the pointer to the buffer to place the received frame
- * \a rBL : rxBuf length in bytes
- * \a rBL : rxBuf length in bytes
- * \a t : FWT to be used on this transceive in 1/fc
- */
- #define rfalCreateByteFlagsTxRxContext(ctx, tB, tBL, rB, rBL, rdL, fl, t) \
- (ctx).txBuf = (uint8_t*)(tB); \
- (ctx).txBufLen = (uint16_t)rfalConvBytesToBits(tBL); \
- (ctx).rxBuf = (uint8_t*)(rB); \
- (ctx).rxBufLen = (uint16_t)rfalConvBytesToBits(rBL); \
- (ctx).rxRcvdLen = (uint16_t*)(rdL); \
- (ctx).flags = (uint32_t)(fl); \
- (ctx).fwt = (uint32_t)(t);
- #define rfalLogE(...) \
- platformLog(__VA_ARGS__) /*!< Macro for the error log method */
- #define rfalLogW(...) \
- platformLog(__VA_ARGS__) /*!< Macro for the warning log method */
- #define rfalLogI(...) \
- platformLog(__VA_ARGS__) /*!< Macro for the info log method */
- #define rfalLogD(...) \
- platformLog(__VA_ARGS__) /*!< Macro for the debug log method */
- /*
- ******************************************************************************
- * GLOBAL ENUMS
- ******************************************************************************
- */
- /* RFAL Guard Time (GT) default values */
- #define RFAL_GT_NFCA \
- rfalConvMsTo1fc( \
- 5U) /*!< GTA Digital 2.0 6.10.4.1 & B.2 */
- #define RFAL_GT_NFCB \
- rfalConvMsTo1fc( \
- 5U) /*!< GTB Digital 2.0 7.9.4.1 & B.3 */
- #define RFAL_GT_NFCF \
- rfalConvMsTo1fc( \
- 20U) /*!< GTF Digital 2.0 8.7.4.1 & B.4 */
- #define RFAL_GT_NFCV \
- rfalConvMsTo1fc( \
- 5U) /*!< GTV Digital 2.0 9.7.5.1 & B.5 */
- #define RFAL_GT_PICOPASS \
- rfalConvMsTo1fc( \
- 1U) /*!< GT Picopass */
- #define RFAL_GT_AP2P \
- rfalConvMsTo1fc( \
- 5U) /*!< TIRFG Ecma 340 11.1.1 */
- #define RFAL_GT_AP2P_ADJUSTED \
- rfalConvMsTo1fc( \
- 5U + \
- 25U) /*!< Adjusted GT for greater interoperability (Sony XPERIA P, Nokia N9, Huawei P2) */
- /* RFAL Frame Delay Time (FDT) Listen default values */
- #define RFAL_FDT_LISTEN_NFCA_POLLER \
- 1172U /*!< FDTA,LISTEN,MIN (n=9) Last bit: Logic "1" - tnn,min/2 Digital 1.1 6.10 ; EMV CCP Spec Book D v2.01 4.8.1.3 */
- #define RFAL_FDT_LISTEN_NFCB_POLLER \
- 1008U /*!< TR0B,MIN Digital 1.1 7.1.3 & A.3 ; EMV CCP Spec Book D v2.01 4.8.1.3 & Table A.5 */
- #define RFAL_FDT_LISTEN_NFCF_POLLER \
- 2672U /*!< TR0F,LISTEN,MIN Digital 1.1 8.7.1.1 & A.4 */
- #define RFAL_FDT_LISTEN_NFCV_POLLER \
- 4310U /*!< FDTV,LISTEN,MIN t1 min Digital 2.1 B.5 ; ISO15693-3 2009 9.1 */
- #define RFAL_FDT_LISTEN_PICOPASS_POLLER \
- 3400U /*!< ISO15693 t1 min - observed adjustment */
- #define RFAL_FDT_LISTEN_AP2P_POLLER \
- 64U /*!< FDT AP2P No actual FDTListen is required as fields switch and collision avoidance */
- #define RFAL_FDT_LISTEN_NFCA_LISTENER \
- 1172U /*!< FDTA,LISTEN,MIN Digital 1.1 6.10 */
- #define RFAL_FDT_LISTEN_NFCB_LISTENER \
- 1024U /*!< TR0B,MIN Digital 1.1 7.1.3 & A.3 ; EMV CCP Spec Book D v2.01 4.8.1.3 & Table A.5 */
- #define RFAL_FDT_LISTEN_NFCF_LISTENER \
- 2688U /*!< TR0F,LISTEN,MIN Digital 2.1 8.7.1.1 & B.4 */
- #define RFAL_FDT_LISTEN_AP2P_LISTENER \
- 64U /*!< FDT AP2P No actual FDTListen exists as fields switch and collision avoidance */
- /* RFAL Frame Delay Time (FDT) Poll default values */
- #define RFAL_FDT_POLL_NFCA_POLLER \
- 6780U /*!< FDTA,POLL,MIN Digital 1.1 6.10.3.1 & A.2 */
- #define RFAL_FDT_POLL_NFCA_T1T_POLLER \
- 384U /*!< RRDDT1T,MIN,B1 Digital 1.1 10.7.1 & A.5 */
- #define RFAL_FDT_POLL_NFCB_POLLER \
- 6780U /*!< FDTB,POLL,MIN = TR2B,MIN,DEFAULT Digital 1.1 7.9.3 & A.3 ; EMVCo 3.0 FDTB,PCD,MIN Table A.5 */
- #define RFAL_FDT_POLL_NFCF_POLLER \
- 6800U /*!< FDTF,POLL,MIN Digital 2.1 8.7.3 & B.4 */
- #define RFAL_FDT_POLL_NFCV_POLLER \
- 4192U /*!< FDTV,POLL Digital 2.1 9.7.3.1 & B.5 */
- #define RFAL_FDT_POLL_PICOPASS_POLLER \
- 1790U /*!< FDT Max */
- #define RFAL_FDT_POLL_AP2P_POLLER \
- 0U /*!< FDT AP2P No actual FDTPoll exists as fields switch and collision avoidance */
- /*
- ******************************************************************************
- * GLOBAL TYPES
- ******************************************************************************
- */
- /*! RFAL modes */
- typedef enum {
- RFAL_MODE_NONE = 0, /*!< No mode selected/defined */
- RFAL_MODE_POLL_NFCA =
- 1, /*!< Mode to perform as NFCA (ISO14443A) Poller (PCD) */
- RFAL_MODE_POLL_NFCA_T1T =
- 2, /*!< Mode to perform as NFCA T1T (Topaz) Poller (PCD) */
- RFAL_MODE_POLL_NFCB =
- 3, /*!< Mode to perform as NFCB (ISO14443B) Poller (PCD) */
- RFAL_MODE_POLL_B_PRIME =
- 4, /*!< Mode to perform as B' Calypso (Innovatron) (PCD) */
- RFAL_MODE_POLL_B_CTS =
- 5, /*!< Mode to perform as CTS Poller (PCD) */
- RFAL_MODE_POLL_NFCF =
- 6, /*!< Mode to perform as NFCF (FeliCa) Poller (PCD) */
- RFAL_MODE_POLL_NFCV =
- 7, /*!< Mode to perform as NFCV (ISO15963) Poller (PCD) */
- RFAL_MODE_POLL_PICOPASS =
- 8, /*!< Mode to perform as PicoPass / iClass Poller (PCD) */
- RFAL_MODE_POLL_ACTIVE_P2P =
- 9, /*!< Mode to perform as Active P2P (ISO18092) Initiator */
- RFAL_MODE_LISTEN_NFCA =
- 10, /*!< Mode to perform as NFCA (ISO14443A) Listener (PICC) */
- RFAL_MODE_LISTEN_NFCB =
- 11, /*!< Mode to perform as NFCA (ISO14443B) Listener (PICC) */
- RFAL_MODE_LISTEN_NFCF =
- 12, /*!< Mode to perform as NFCA (ISO15963) Listener (PICC) */
- RFAL_MODE_LISTEN_ACTIVE_P2P =
- 13 /*!< Mode to perform as Active P2P (ISO18092) Target */
- } rfalMode;
- /*! RFAL Bit rates */
- typedef enum {
- RFAL_BR_106 = 0, /*!< Bit Rate 106 kbit/s (fc/128) */
- RFAL_BR_212 = 1, /*!< Bit Rate 212 kbit/s (fc/64) */
- RFAL_BR_424 = 2, /*!< Bit Rate 424 kbit/s (fc/32) */
- RFAL_BR_848 = 3, /*!< Bit Rate 848 kbit/s (fc/16) */
- RFAL_BR_1695 = 4, /*!< Bit Rate 1695 kbit/s (fc/8) */
- RFAL_BR_3390 = 5, /*!< Bit Rate 3390 kbit/s (fc/4) */
- RFAL_BR_6780 = 6, /*!< Bit Rate 6780 kbit/s (fc/2) */
- RFAL_BR_13560 = 7, /*!< Bit Rate 13560 kbit/s (fc) */
- RFAL_BR_52p97 = 0xEB, /*!< Bit Rate 52.97 kbit/s (fc/256) Fast Mode VICC->VCD */
- RFAL_BR_26p48 = 0xEC, /*!< Bit Rate 26,48 kbit/s (fc/512) NFCV VICC->VCD & VCD->VICC 1of4 */
- RFAL_BR_1p66 = 0xED, /*!< Bit Rate 1,66 kbit/s (fc/8192) NFCV VCD->VICC 1of256 */
- RFAL_BR_KEEP = 0xFF /*!< Value indicating to keep the same previous bit rate */
- } rfalBitRate;
- /*! RFAL Compliance modes for upper modules */
- typedef enum {
- RFAL_COMPLIANCE_MODE_NFC, /*!< Perform with NFC Forum 1.1 compliance */
- RFAL_COMPLIANCE_MODE_EMV, /*!< Perform with EMVCo compliance */
- RFAL_COMPLIANCE_MODE_ISO /*!< Perform with ISO10373 compliance */
- } rfalComplianceMode;
- /*! RFAL main states flags */
- typedef enum {
- RFAL_STATE_IDLE = 0,
- RFAL_STATE_INIT = 1,
- RFAL_STATE_MODE_SET = 2,
- RFAL_STATE_TXRX = 3,
- RFAL_STATE_LM = 4,
- RFAL_STATE_WUM = 5
- } rfalState;
- /*! RFAL transceive states */
- typedef enum {
- RFAL_TXRX_STATE_IDLE = 0,
- RFAL_TXRX_STATE_INIT = 1,
- RFAL_TXRX_STATE_START = 2,
- RFAL_TXRX_STATE_TX_IDLE = 11,
- RFAL_TXRX_STATE_TX_WAIT_GT = 12,
- RFAL_TXRX_STATE_TX_WAIT_FDT = 13,
- RFAL_TXRX_STATE_TX_TRANSMIT = 14,
- RFAL_TXRX_STATE_TX_WAIT_WL = 15,
- RFAL_TXRX_STATE_TX_RELOAD_FIFO = 16,
- RFAL_TXRX_STATE_TX_WAIT_TXE = 17,
- RFAL_TXRX_STATE_TX_DONE = 18,
- RFAL_TXRX_STATE_TX_FAIL = 19,
- RFAL_TXRX_STATE_RX_IDLE = 81,
- RFAL_TXRX_STATE_RX_WAIT_EON = 82,
- RFAL_TXRX_STATE_RX_WAIT_RXS = 83,
- RFAL_TXRX_STATE_RX_WAIT_RXE = 84,
- RFAL_TXRX_STATE_RX_READ_FIFO = 85,
- RFAL_TXRX_STATE_RX_ERR_CHECK = 86,
- RFAL_TXRX_STATE_RX_READ_DATA = 87,
- RFAL_TXRX_STATE_RX_WAIT_EOF = 88,
- RFAL_TXRX_STATE_RX_DONE = 89,
- RFAL_TXRX_STATE_RX_FAIL = 90,
- } rfalTransceiveState;
- /*! RFAL transceive flags */
- enum {
- RFAL_TXRX_FLAGS_CRC_TX_AUTO =
- (0U
- << 0), /*!< CRC will be generated automatic upon transmission */
- RFAL_TXRX_FLAGS_CRC_TX_MANUAL =
- (1U
- << 0), /*!< CRC was calculated manually, included in txBuffer */
- RFAL_TXRX_FLAGS_CRC_RX_KEEP =
- (1U
- << 1), /*!< Upon Reception keep the CRC in rxBuffer (reflected on rcvd length) */
- RFAL_TXRX_FLAGS_CRC_RX_REMV =
- (0U
- << 1), /*!< Enable CRC check and remove the CRC from rxBuffer */
- RFAL_TXRX_FLAGS_NFCIP1_ON =
- (1U
- << 2), /*!< Enable NFCIP1 mode: Add SB(F0) and LEN bytes during Tx and skip SB(F0) byte during Rx */
- RFAL_TXRX_FLAGS_NFCIP1_OFF =
- (0U
- << 2), /*!< Disable NFCIP1 mode: do not append protocol bytes while Tx nor skip while Rx */
- RFAL_TXRX_FLAGS_AGC_OFF =
- (1U
- << 3), /*!< Disable Automatic Gain Control, improving multiple devices collision detection */
- RFAL_TXRX_FLAGS_AGC_ON =
- (0U
- << 3), /*!< Enable Automatic Gain Control, improving single device reception */
- RFAL_TXRX_FLAGS_PAR_RX_KEEP =
- (1U
- << 4), /*!< Disable Parity and CRC check and keep the Parity and CRC bits in the received buffer */
- RFAL_TXRX_FLAGS_PAR_RX_REMV =
- (0U
- << 0), /*!< Enable Parity check and remove the parity bits from the received buffer */
- RFAL_TXRX_FLAGS_PAR_TX_NONE =
- (1U
- << 5), /*!< Disable automatic Parity generation (ISO14443A) and use the one provided in the buffer*/
- RFAL_TXRX_FLAGS_PAR_TX_AUTO =
- (0U
- << 5), /*!< Enable automatic Parity generation (ISO14443A) */
- RFAL_TXRX_FLAGS_NFCV_FLAG_MANUAL =
- (1U
- << 6), /*!< Disable automatic adaption of flag byte (ISO15693) according to current comm params */
- RFAL_TXRX_FLAGS_NFCV_FLAG_AUTO =
- (0U
- << 6), /*!< Enable automatic adaption of flag byte (ISO115693) according to current comm params */
- };
- /*! RFAL error handling */
- typedef enum {
- RFAL_ERRORHANDLING_NONE =
- 0, /*!< No special error handling will be performed */
- RFAL_ERRORHANDLING_NFC =
- 1, /*!< Error handling set to perform as NFC compliant device */
- RFAL_ERRORHANDLING_EMVCO =
- 2 /*!< Error handling set to perform as EMVCo compliant device */
- } rfalEHandling;
- /*! Struct that holds all context to be used on a Transceive */
- typedef struct {
- uint8_t* txBuf; /*!< (In) Buffer where outgoing message is located */
- uint16_t txBufLen; /*!< (In) Length of the outgoing message in bits */
- uint8_t* rxBuf; /*!< (Out) Buffer where incoming message will be placed */
- uint16_t rxBufLen; /*!< (In) Maximum length of the incoming message in bits */
- uint16_t* rxRcvdLen; /*!< (Out) Actual received length in bits */
- uint32_t flags; /*!< (In) TransceiveFlags indication special handling */
- uint32_t fwt; /*!< (In) Frame Waiting Time in 1/fc */
- } rfalTransceiveContext;
- /*! System callback to indicate an event that requires a system reRun */
- typedef void (*rfalUpperLayerCallback)(void);
- /*! Callback to be executed before a Transceive */
- typedef void (*rfalPreTxRxCallback)(void* context);
- /*! Callback to be executed after a Transceive */
- typedef void (*rfalPostTxRxCallback)(void* context);
- /** Callback to be executed on each RFAL state change */
- typedef void (*RfalStateChangedCallback)(void* context);
- /*******************************************************************************/
- /* ISO14443A */
- /*******************************************************************************/
- /*! RFAL ISO 14443A Short Frame Command */
- typedef enum {
- RFAL_14443A_SHORTFRAME_CMD_WUPA = 0x52, /*!< ISO14443A WUPA / NFC-A ALL_REQ */
- RFAL_14443A_SHORTFRAME_CMD_REQA = 0x26 /*!< ISO14443A REQA / NFC-A SENS_REQ */
- } rfal14443AShortFrameCmd;
- /*******************************************************************************/
- /*******************************************************************************/
- /* FeliCa */
- /*******************************************************************************/
- #define RFAL_FELICA_LEN_LEN \
- 1U /*!< FeliCa LEN byte length */
- #define RFAL_FELICA_POLL_REQ_LEN \
- (RFAL_FELICA_LEN_LEN + 1U + 2U + 1U + \
- 1U) /*!< FeliCa Poll Request length (LEN + CMD + SC + RC + TSN) */
- #define RFAL_FELICA_POLL_RES_LEN \
- (RFAL_FELICA_LEN_LEN + 1U + 8U + 8U + \
- 2U) /*!< Maximum FeliCa Poll Response length (LEN + CMD + NFCID2 + PAD + RD) */
- #define RFAL_FELICA_POLL_MAX_SLOTS \
- 16U /*!< Maximum number of slots (TSN) on FeliCa Poll */
- /*! NFC-F RC (Request Code) codes NFC Forum Digital 1.1 Table 42 */
- enum {
- RFAL_FELICA_POLL_RC_NO_REQUEST =
- 0x00, /*!< RC: No System Code information requested */
- RFAL_FELICA_POLL_RC_SYSTEM_CODE =
- 0x01, /*!< RC: System Code information requested */
- RFAL_FELICA_POLL_RC_COM_PERFORMANCE =
- 0x02 /*!< RC: Advanced protocol features supported */
- };
- /*! NFC-F TSN (Time Slot Number) codes NFC Forum Digital 1.1 Table 43 */
- typedef enum {
- RFAL_FELICA_1_SLOT = 0, /*!< TSN with number of Time Slots: 1 */
- RFAL_FELICA_2_SLOTS = 1, /*!< TSN with number of Time Slots: 2 */
- RFAL_FELICA_4_SLOTS = 3, /*!< TSN with number of Time Slots: 4 */
- RFAL_FELICA_8_SLOTS = 7, /*!< TSN with number of Time Slots: 8 */
- RFAL_FELICA_16_SLOTS = 15 /*!< TSN with number of Time Slots: 16 */
- } rfalFeliCaPollSlots;
- /*! NFCF Poll Response NFC Forum Digital 1.1 Table 44 */
- typedef uint8_t rfalFeliCaPollRes[RFAL_FELICA_POLL_RES_LEN];
- /*******************************************************************************/
- /*******************************************************************************/
- /* Listen Mode */
- /*******************************************************************************/
- /*! RFAL Listen Mode NFCID Length */
- typedef enum {
- RFAL_LM_NFCID_LEN_04 = RFAL_NFCID1_SINGLE_LEN, /*!< Listen mode indicates 4 byte NFCID */
- RFAL_LM_NFCID_LEN_07 = RFAL_NFCID1_DOUBLE_LEN, /*!< Listen mode indicates 7 byte NFCID */
- RFAL_LM_NFCID_LEN_10 = RFAL_NFCID1_TRIPLE_LEN, /*!< Listen mode indicates 10 byte NFCID */
- } rfalLmNfcidLen;
- /*! RFAL Listen Mode States */
- typedef enum {
- RFAL_LM_STATE_NOT_INIT = 0x00, /*!< Not Initialized state */
- RFAL_LM_STATE_POWER_OFF = 0x01, /*!< Power Off state */
- RFAL_LM_STATE_IDLE = 0x02, /*!< Idle state Activity 1.1 5.2 */
- RFAL_LM_STATE_READY_A = 0x03, /*!< Ready A state Activity 1.1 5.3 5.4 & 5.5 */
- RFAL_LM_STATE_READY_B = 0x04, /*!< Ready B state Activity 1.1 5.11 5.12 */
- RFAL_LM_STATE_READY_F = 0x05, /*!< Ready F state Activity 1.1 5.15 */
- RFAL_LM_STATE_ACTIVE_A = 0x06, /*!< Active A state Activity 1.1 5.6 */
- RFAL_LM_STATE_CARDEMU_4A = 0x07, /*!< Card Emulation 4A state Activity 1.1 5.10 */
- RFAL_LM_STATE_CARDEMU_4B = 0x08, /*!< Card Emulation 4B state Activity 1.1 5.14 */
- RFAL_LM_STATE_CARDEMU_3 = 0x09, /*!< Card Emulation 3 state Activity 1.1 5.18 */
- RFAL_LM_STATE_TARGET_A = 0x0A, /*!< Target A state Activity 1.1 5.9 */
- RFAL_LM_STATE_TARGET_F = 0x0B, /*!< Target F state Activity 1.1 5.17 */
- RFAL_LM_STATE_SLEEP_A = 0x0C, /*!< Sleep A state Activity 1.1 5.7 */
- RFAL_LM_STATE_SLEEP_B = 0x0D, /*!< Sleep B state Activity 1.1 5.13 */
- RFAL_LM_STATE_READY_Ax = 0x0E, /*!< Ready A* state Activity 1.1 5.3 5.4 & 5.5 */
- RFAL_LM_STATE_ACTIVE_Ax = 0x0F, /*!< Active A* state Activity 1.1 5.6 */
- RFAL_LM_STATE_SLEEP_AF = 0x10, /*!< Sleep AF state Activity 1.1 5.19 */
- } rfalLmState;
- /*! RFAL Listen Mode Passive A configs */
- typedef struct {
- rfalLmNfcidLen nfcidLen; /*!< NFCID Len (4, 7 or 10 bytes) */
- uint8_t nfcid[RFAL_NFCID1_TRIPLE_LEN]; /*!< NFCID */
- uint8_t SENS_RES[RFAL_LM_SENS_RES_LEN]; /*!< NFC-106k; SENS_REQ Response */
- uint8_t SEL_RES; /*!< SEL_RES (SAK) with complete NFCID1 (UID) */
- } rfalLmConfPA;
- /*! RFAL Listen Mode Passive B configs */
- typedef struct {
- uint8_t SENSB_RES[RFAL_LM_SENSB_RES_LEN]; /*!< SENSF_RES */
- } rfalLmConfPB;
- /*! RFAL Listen Mode Passive F configs */
- typedef struct {
- uint8_t SC[RFAL_LM_SENSF_SC_LEN]; /*!< System Code to listen for */
- uint8_t SENSF_RES[RFAL_LM_SENSF_RES_LEN]; /*!< SENSF_RES */
- } rfalLmConfPF;
- /*******************************************************************************/
- /*******************************************************************************/
- /* Wake-Up Mode */
- /*******************************************************************************/
- #define RFAL_WUM_REFERENCE_AUTO 0xFFU /*!< Indicates new reference is set by the driver*/
- /*! RFAL Wake-Up Mode States */
- typedef enum {
- RFAL_WUM_STATE_NOT_INIT = 0x00, /*!< Not Initialized state */
- RFAL_WUM_STATE_ENABLED = 0x01, /*!< Wake-Up mode is enabled */
- RFAL_WUM_STATE_ENABLED_WOKE = 0x02, /*!< Wake-Up mode enabled and has received IRQ(s)*/
- } rfalWumState;
- /*! RFAL Wake-Up Period/Timer */
- typedef enum {
- RFAL_WUM_PERIOD_10MS = 0x00, /*!< Wake-Up timer 10ms */
- RFAL_WUM_PERIOD_20MS = 0x01, /*!< Wake-Up timer 20ms */
- RFAL_WUM_PERIOD_30MS = 0x02, /*!< Wake-Up timer 30ms */
- RFAL_WUM_PERIOD_40MS = 0x03, /*!< Wake-Up timer 40ms */
- RFAL_WUM_PERIOD_50MS = 0x04, /*!< Wake-Up timer 50ms */
- RFAL_WUM_PERIOD_60MS = 0x05, /*!< Wake-Up timer 60ms */
- RFAL_WUM_PERIOD_70MS = 0x06, /*!< Wake-Up timer 70ms */
- RFAL_WUM_PERIOD_80MS = 0x07, /*!< Wake-Up timer 80ms */
- RFAL_WUM_PERIOD_100MS = 0x10, /*!< Wake-Up timer 100ms */
- RFAL_WUM_PERIOD_200MS = 0x11, /*!< Wake-Up timer 200ms */
- RFAL_WUM_PERIOD_300MS = 0x12, /*!< Wake-Up timer 300ms */
- RFAL_WUM_PERIOD_400MS = 0x13, /*!< Wake-Up timer 400ms */
- RFAL_WUM_PERIOD_500MS = 0x14, /*!< Wake-Up timer 500ms */
- RFAL_WUM_PERIOD_600MS = 0x15, /*!< Wake-Up timer 600ms */
- RFAL_WUM_PERIOD_700MS = 0x16, /*!< Wake-Up timer 700ms */
- RFAL_WUM_PERIOD_800MS = 0x17, /*!< Wake-Up timer 800ms */
- } rfalWumPeriod;
- /*! RFAL Wake-Up Period/Timer */
- typedef enum {
- RFAL_WUM_AA_WEIGHT_4 = 0x00, /*!< Wake-Up Auto Average Weight 4 */
- RFAL_WUM_AA_WEIGHT_8 = 0x01, /*!< Wake-Up Auto Average Weight 8 */
- RFAL_WUM_AA_WEIGHT_16 = 0x02, /*!< Wake-Up Auto Average Weight 16 */
- RFAL_WUM_AA_WEIGHT_32 = 0x03, /*!< Wake-Up Auto Average Weight 32 */
- } rfalWumAAWeight;
- /*! RFAL Wake-Up Mode configuration */
- typedef struct {
- rfalWumPeriod period; /*!< Wake-Up Timer period;how often measurement(s) is performed */
- bool irqTout; /*!< IRQ at every timeout will refresh the measurement(s) */
- bool swTagDetect; /*!< Use SW Tag Detection instead of HW Wake-Up mode */
- struct {
- bool enabled; /*!< Inductive Amplitude measurement enabled */
- uint8_t delta; /*!< Delta between the reference and measurement to wake-up */
- uint16_t reference; /*!< Reference to be used;RFAL_WUM_REFERENCE_AUTO sets it auto */
- bool autoAvg; /*!< Use the HW Auto Averaging feature */
- bool aaInclMeas; /*!< When AutoAvg is enabled, include IRQ measurement */
- rfalWumAAWeight aaWeight; /*!< When AutoAvg is enabled, last measure weight */
- } indAmp; /*!< Inductive Amplitude Configuration */
- struct {
- bool enabled; /*!< Inductive Phase measurement enabled */
- uint8_t delta; /*!< Delta between the reference and measurement to wake-up */
- uint16_t reference; /*!< Reference to be used;RFAL_WUM_REFERENCE_AUTO sets it auto */
- bool autoAvg; /*!< Use the HW Auto Averaging feature */
- bool aaInclMeas; /*!< When AutoAvg is enabled, include IRQ measurement */
- rfalWumAAWeight aaWeight; /*!< When AutoAvg is enabled, last measure weight */
- } indPha; /*!< Inductive Phase Configuration */
- struct {
- bool enabled; /*!< Capacitive measurement enabled */
- uint8_t delta; /*!< Delta between the reference and measurement to wake-up */
- uint16_t reference; /*!< Reference to be used;RFAL_WUM_REFERENCE_AUTO sets it auto */
- bool autoAvg; /*!< Use the HW Auto Averaging feature */
- bool aaInclMeas; /*!< When AutoAvg is enabled, include IRQ measurement */
- rfalWumAAWeight aaWeight; /*!< When AutoAvg is enabled, last measure weight */
- } cap; /*!< Capacitive Configuration */
- } rfalWakeUpConfig;
- /*******************************************************************************/
- /*
- ******************************************************************************
- * GLOBAL FUNCTION PROTOTYPES
- ******************************************************************************
- */
- /*!
- *****************************************************************************
- * \brief RFAL Initialize
- *
- * Initializes RFAL layer and the ST25R391x
- * Ensures that ST25R391x is properly connected and returns error if any problem
- * is detected
- *
- * \warning rfalAnalogConfigInitialize() should be called before so that
- * the Analog config table has been previously initialized.
- *
- * \return ERR_HW_MISMATCH : Expected HW do not match or communication error
- * \return ERR_NONE : No error
- *****************************************************************************
- */
- ReturnCode rfalInitialize(void);
- /*!
- *****************************************************************************
- * \brief RFAL Calibrate
- *
- * Performs necessary calibration of RF chip in case it is indicated by current
- * register settings. E.g. antenna calibration and regulator calibration
- *
- * \return ERR_WRONG_STATE : RFAL not initialized
- * \return ERR_NONE : No error
- *
- *****************************************************************************
- */
- ReturnCode rfalCalibrate(void);
- /*!
- *****************************************************************************
- * \brief RFAL Adjust Regulators
- *
- * Adjusts ST25R391x regulators
- *
- * \param[out] result : the result of the calibrate antenna in mV
- * NULL if result not requested
- *
- * \return ERR_WRONG_STATE : RFAL not initialized
- * \return ERR_NONE : No error
- *
- *****************************************************************************
- */
- ReturnCode rfalAdjustRegulators(uint16_t* result);
- /*!
- *****************************************************************************
- * \brief RFAL Set System Callback
- *
- * Sets a callback for the driver to call when an event has occurred that
- * may require the system to be notified
- *
- * \param[in] pFunc : method pointer for the upper layer callback
- *
- *****************************************************************************
- */
- void rfalSetUpperLayerCallback(rfalUpperLayerCallback pFunc);
- /*!
- *****************************************************************************
- * \brief RFAL Set Pre Tx Callback
- *
- * Sets a callback for the driver to call before a Transceive
- *
- * \param[in] pFunc : method pointer for the Pre Tx callback
- *
- *****************************************************************************
- */
- void rfalSetPreTxRxCallback(rfalPreTxRxCallback pFunc);
- /*!
- *****************************************************************************
- * \brief RFAL Set Post Tx Callback
- *
- * Sets a callback for the driver to call after a Transceive
- *
- * \param[in] pFunc : method pointer for the Post Tx callback
- *
- *****************************************************************************
- */
- void rfalSetPostTxRxCallback(rfalPostTxRxCallback pFunc);
- /** Set RFAL state changed callback
- *
- * @param cb RfalStateChangedCallback instance
- * @param ctx pointer to context
- */
- void rfal_set_state_changed_callback(RfalStateChangedCallback callback);
- /** Set callback context
- *
- * @param ctx pointer to context
- */
- void rfal_set_callback_context(void* context);
- /*!
- *****************************************************************************
- * \brief RFAL Deinitialize
- *
- * Deinitializes RFAL layer and the ST25R391x
- *
- * \return ERR_NONE : No error
- *
- *****************************************************************************
- */
- ReturnCode rfalDeinitialize(void);
- /*!
- *****************************************************************************
- * \brief RFAL Set Mode
- *
- * Sets the mode that RFAL will operate on the following communications.
- * Proper initializations will be performed on the ST25R391x
- *
- * \warning bit rate value RFAL_BR_KEEP is not allowed, only in rfalSetBitRate()
- *
- * \warning the mode will be applied immediately on the RFchip regardless of
- * any ongoing operations like Transceive, ListenMode
- *
- * \param[in] mode : mode for the RFAL/RFchip to perform
- * \param[in] txBR : transmit bit rate
- * \param[in] rxBR : receive bit rate
- *
- * \see rfalIsGTExpired
- * \see rfalMode
- *
- * \return ERR_WRONG_STATE : RFAL not initialized
- * \return ERR_PARAM : Invalid parameter
- * \return ERR_NONE : No error
- *
- *****************************************************************************
- */
- ReturnCode rfalSetMode(rfalMode mode, rfalBitRate txBR, rfalBitRate rxBR);
- /*!
- *****************************************************************************
- * \brief RFAL Get Mode
- *
- * Gets the mode that RFAL is set to operate
- *
- * \see rfalMode
- *
- * \return rfalMode : The current RFAL mode
- *****************************************************************************
- */
- rfalMode rfalGetMode(void);
- /*!
- *****************************************************************************
- * \brief RFAL Set Bit Rate
- *
- * Sets the Tx and Rx bit rates with the given values
- * The bit rate change is applied on the RF chip remaining in the same
- * mode previous defined with rfalSetMode()
- *
- * If no mode is defined bit rates will not be applied and an error
- * is returned
- *
- * \param[in] txBR : transmit bit rate
- * \param[in] rxBR : receive bit rate
- *
- * \see rfalSetMode
- * \see rfalMode
- * \see rfalBitRate
- *
- * \return ERR_WRONG_STATE : RFAL not initialized
- * \return ERR_PARAM : Invalid parameter
- * \return ERR_NOT_IMPLEMENTED : Mode not implemented
- * \return ERR_NONE : No error
- *
- *****************************************************************************
- */
- ReturnCode rfalSetBitRate(rfalBitRate txBR, rfalBitRate rxBR);
- /*!
- *****************************************************************************
- * \brief RFAL Get Bit Rate
- *
- * Gets the Tx and Rx current bit rates
- *
- * If RFAL is not initialized or mode not set the bit rates return will
- * be invalid RFAL_BR_KEEP
- *
- * \param[out] txBR : RFAL's current Tx Bit Rate
- * \param[out] rxBR : RFAL's current Rx Bit Rate
- *
- * \see rfalSetBitRate
- * \see rfalBitRate
- *
- * \return ERR_WRONG_STATE : RFAL not initialized or mode not set
- * \return ERR_NONE : No error
- *****************************************************************************
- */
- ReturnCode rfalGetBitRate(rfalBitRate* txBR, rfalBitRate* rxBR);
- /*!
- *****************************************************************************
- * \brief Set Error Handling Mode
- *
- * Sets the error handling mode to be used by the RFAL
- *
- * \param[in] eHandling : the error handling mode
- *
- *****************************************************************************
- */
- void rfalSetErrorHandling(rfalEHandling eHandling);
- /*!
- *****************************************************************************
- * \brief Get Error Handling Mode
- *
- * Gets the error handling mode currently used by the RFAL
- *
- * \return rfalEHandling : Current error handling mode
- *****************************************************************************
- */
- rfalEHandling rfalGetErrorHandling(void);
- /*!
- *****************************************************************************
- * \brief Set Observation Mode
- *
- * Sets ST25R391x observation modes for RF debug purposes
- *
- * \param[in] txMode : the observation mode to be used during transmission
- * \param[in] rxMode : the observation mode to be used during reception
- *
- * \warning The Observation Mode is an advanced feature and should be set
- * according to the documentation of the part number in use.
- * Please refer to the corresponding Datasheet or Application Note(s)
- *****************************************************************************
- */
- void rfalSetObsvMode(uint8_t txMode, uint8_t rxMode);
- /*!
- *****************************************************************************
- * \brief Get Observation Mode
- *
- * Gets ST25R391x the current configured observation modes
- *
- * \param[in] txMode : the current observation mode configured for transmission
- * \param[in] rxMode : the current observation mode configured for reception
- *
- *****************************************************************************
- */
- void rfalGetObsvMode(uint8_t* txMode, uint8_t* rxMode);
- /*!
- *****************************************************************************
- * \brief Disable Observation Mode
- *
- * Disables the ST25R391x observation mode
- *****************************************************************************
- */
- void rfalDisableObsvMode(void);
- /*!
- *****************************************************************************
- * \brief RFAL Set FDT Poll
- *
- * Sets the Frame Delay Time (FDT) to be used on the following
- * communications.
- *
- * FDT Poll is the minimum time following a Poll Frame during
- * which no subsequent Poll Frame can be sent (without a response from
- * the Listener in between)
- * FDTx,PP,MIN - Digital 1.1 6.10.2 & 7.9.2 & 8.7.2
- *
- * \param[in] FDTPoll : Frame Delay Time in 1/fc cycles
- *
- *****************************************************************************
- */
- void rfalSetFDTPoll(uint32_t FDTPoll);
- /*!
- *****************************************************************************
- * \brief RFAL Set FDT Poll
- *
- * Gets the current Frame Delay Time (FDT)
- *
- * FDT Poll is the minimum time following a Poll Frame during
- * which no subsequent Poll Frame can be sent (without a response from
- * the Listener in between)
- * FDTx,PP,MIN - Digital 1.1 6.10.2 & 7.9.2 & 8.7.2
- *
- * \return FDT : current FDT value in 1/fc cycles
- *
- *****************************************************************************
- */
- uint32_t rfalGetFDTPoll(void);
- /*!
- *****************************************************************************
- * \brief RFAL Set FDT Listen
- *
- * Sets the Frame Delay Time (FDT) Listen minimum to be used on the
- * following communications.
- *
- * FDT Listen is the minimum time between a Poll Frame and a Listen Frame
- * FDTx,LISTEN,MIN - Digital 1.1 6.10.1 & 7.9.1 & 8.7.1
- *
- * \param[in] FDTListen : Frame Delay Time in 1/fc cycles
- *
- *****************************************************************************
- */
- void rfalSetFDTListen(uint32_t FDTListen);
- /*!
- *****************************************************************************
- * \brief RFAL Set FDT Listen
- *
- * Gets the Frame Delay Time (FDT) Listen minimum
- *
- * FDT Listen is the minimum time between a Poll Frame and a Listen Frame
- * FDTx,LISTEN,MIN - Digital 1.1 6.10.1 & 7.9.1 & 8.7.1
- *
- * \return FDT : current FDT value in 1/fc cycles
- *
- *****************************************************************************
- */
- uint32_t rfalGetFDTListen(void);
- /*!
- *****************************************************************************
- * \brief RFAL Get GT
- *
- * Gets the current Guard Time (GT)
- *
- * GT is the minimum time when a device in Listen Mode is exposed to an
- * unmodulated carrier
- *
- * \return GT : Guard Time in 1/fc cycles
- *
- *****************************************************************************
- */
- uint32_t rfalGetGT(void);
- /*!
- *****************************************************************************
- * \brief RFAL Set GT
- *
- * Sets the Guard Time (GT) to be used on the following communications.
- *
- * GT is the minimum time when a device in Listen Mode is exposed to an
- * unmodulated carrier
- *
- * \param[in] GT : Guard Time in 1/fc cycles
- * RFAL_GT_NONE if no GT should be applied
- *
- *****************************************************************************
- */
- void rfalSetGT(uint32_t GT);
- /*!
- *****************************************************************************
- * \brief RFAL Is GT expired
- *
- * Checks whether the GT timer has expired
- *
- * \return true : GT has expired or not running
- * \return false : GT is still running
- *
- *****************************************************************************
- */
- bool rfalIsGTExpired(void);
- /*!
- *****************************************************************************
- * \brief RFAL Turn Field On and Start GT
- *
- * Turns the Field On, performing Initial Collision Avoidance
- *
- * After Field On, if GT was set before, it starts the GT timer to be
- * used on the following communications.
- *
- * \return ERR_RF_COLLISION : External field detected
- * \return ERR_NONE : Field turned On
- *
- *****************************************************************************
- */
- ReturnCode rfalFieldOnAndStartGT(void);
- /*!
- *****************************************************************************
- * \brief RFAL Turn Field Off
- *
- * Turns the Field Off
- *
- * \return ERR_NONE : Field turned Off
- *****************************************************************************
- */
- ReturnCode rfalFieldOff(void);
- /*****************************************************************************
- * Transceive *
- *****************************************************************************/
- /*!
- *****************************************************************************
- * \brief RFAL Set transceive context
- *
- * Set the context that will be used for the following Transceive
- * Output and input buffers have to be passed and all other details prior to
- * the Transceive itself has been started
- *
- * This method only sets the context, once set rfalWorker has
- * to be executed until is done
- *
- * \param[in] ctx : the context for the following Transceive
- *
- * \see rfalWorker
- * \see rfalGetTransceiveStatus
- *
- * \return ERR_NONE : Done with no error
- * \return ERR_WRONG_STATE : Not initialized properly
- * \return ERR_PARAM : Invalid parameter or configuration
- *****************************************************************************
- */
- ReturnCode rfalStartTransceive(const rfalTransceiveContext* ctx);
- /*!
- *****************************************************************************
- * \brief Get Transceive State
- *
- * Gets current Transceive internal State
- *
- * \return rfalTransceiveState : the current Transceive internal State
- *****************************************************************************
- */
- rfalTransceiveState rfalGetTransceiveState(void);
- /*!
- *****************************************************************************
- * \brief Get Transceive Status
- *
- * Gets current Transceive status
- *
- * \return ERR_NONE : Transceive done with no error
- * \return ERR_BUSY : Transceive ongoing
- * \return ERR_XXXX : Error occurred
- * \return ERR_TIMEOUT : No response
- * \return ERR_FRAMING : Framing error detected
- * \return ERR_PAR : Parity error detected
- * \return ERR_CRC : CRC error detected
- * \return ERR_LINK_LOSS : Link Loss - External Field is Off
- * \return ERR_RF_COLLISION : Collision detected
- * \return ERR_IO : Internal error
- *****************************************************************************
- */
- ReturnCode rfalGetTransceiveStatus(void);
- /*!
- *****************************************************************************
- * \brief Is Transceive in Tx
- *
- * Checks if Transceive is in Transmission state
- *
- * \return true Transmission ongoing
- * \return false Not in transmission state
- *****************************************************************************
- */
- bool rfalIsTransceiveInTx(void);
- /*!
- *****************************************************************************
- * \brief Is Transceive in Rx
- *
- * Checks if Transceive is in Reception state
- *
- * \return true Transmission done/reception ongoing
- * \return false Not in reception state
- *****************************************************************************
- */
- bool rfalIsTransceiveInRx(void);
- /*!
- *****************************************************************************
- * \brief Get Transceive RSSI
- *
- * Gets the RSSI value of the last executed Transceive in mV
- *
- * \param[out] rssi : RSSI value
- *
- * \return ERR_NOTSUPP : Feature not supported
- * \return ERR_PARAM : Invalid parameter
- * \return ERR_NONE : No error
- *****************************************************************************
- */
- ReturnCode rfalGetTransceiveRSSI(uint16_t* rssi);
- /*!
- *****************************************************************************
- * \brief RFAL Worker
- *
- * This runs RFAL layer, which drives the actual Transceive procedure
- * It MUST be executed frequently in order to execute the RFAL internal
- * states and perform the requested operations
- *
- *****************************************************************************
- */
- void rfalWorker(void);
- /*****************************************************************************
- * ISO1443A *
- *****************************************************************************/
- /*!
- *****************************************************************************
- * \brief Transceives an ISO14443A ShortFrame
- *
- * Sends REQA to detect if there is any PICC in the field
- *
- * \param[in] txCmd: Command to be sent:
- * 0x52 WUPA / ALL_REQ
- * 0x26 REQA / SENS_REQ
- *
- * \param[in] txCmd : type of short frame to be sent REQA or WUPA
- * \param[out] rxBuf : buffer to place the response
- * \param[in] rxBufLen : length of rxBuf
- * \param[out] rxRcvdLen: received length
- * \param[in] fwt : Frame Waiting Time in 1/fc
- *
- * \warning If fwt is set to RFAL_FWT_NONE it will make endlessly for
- * a response, which on a blocking method may not be the
- * desired usage
- *
- * \return ERR_NONE if there is response
- * \return ERR_TIMEOUT if there is no response
- * \return ERR_COLLISION collision has occurred
- *
- *****************************************************************************
- */
- ReturnCode rfalISO14443ATransceiveShortFrame(
- rfal14443AShortFrameCmd txCmd,
- uint8_t* rxBuf,
- uint8_t rxBufLen,
- uint16_t* rxRcvdLen,
- uint32_t fwt);
- /*!
- *****************************************************************************
- * \brief Sends an ISO14443A Anticollision Frame
- *
- * This is use to perform ISO14443A anti-collision.
- * \note Anticollision is sent without CRC
- *
- *
- * \param[in] buf : reference to ANTICOLLISION command (with known UID if any) to be sent (also out param)
- * reception will be place on this buf after bytesToSend
- * \param[in] bytesToSend: reference number of full bytes to be sent (including CMD byte and SEL_PAR)
- * if a collision occurs will contain the number of clear bytes
- * \param[in] bitsToSend : reference to number of bits (0-7) to be sent; and received (also out param)
- * if a collision occurs will indicate the number of clear bits (also out param)
- * \param[out] rxLength : reference to the return the received length
- * \param[in] fwt : Frame Waiting Time in 1/fc
- *
- * \return ERR_NONE if there is no error
- *****************************************************************************
- */
- ReturnCode rfalISO14443ATransceiveAnticollisionFrame(
- uint8_t* buf,
- uint8_t* bytesToSend,
- uint8_t* bitsToSend,
- uint16_t* rxLength,
- uint32_t fwt);
- /*****************************************************************************
- * FeliCa *
- *****************************************************************************/
- /*!
- *****************************************************************************
- * \brief FeliCa Poll
- *
- * Sends a Poll Request and collects all Poll Responses according to the
- * given slots
- *
- *
- * \param[in] slots : number of slots for the Poll Request
- * \param[in] sysCode : system code (SC) for the Poll Request
- * \param[in] reqCode : request code (RC) for the Poll Request
- * \param[out] pollResList : list of all responses
- * \param[in] pollResListSize : number of responses that can be placed in pollResList
- * \param[out] devicesDetected : number of cards found
- * \param[out] collisionsDetected: number of collisions detected
- *
- * \return ERR_NONE if there is no error
- * \return ERR_TIMEOUT if there is no response
- *****************************************************************************
- */
- ReturnCode rfalFeliCaPoll(
- rfalFeliCaPollSlots slots,
- uint16_t sysCode,
- uint8_t reqCode,
- rfalFeliCaPollRes* pollResList,
- uint8_t pollResListSize,
- uint8_t* devicesDetected,
- uint8_t* collisionsDetected);
- /*****************************************************************************
- * ISO15693 *
- *****************************************************************************/
- /*!
- *****************************************************************************
- * \brief Sends an ISO15693 Anticollision Frame
- *
- * This send the Anticollision|Inventory frame (INVENTORY_REQ)
- *
- * \warning rxBuf must be able to contain the payload and CRC
- *
- * \param[in] txBuf : Buffer where outgoing message is located
- * \param[in] txBufLen : Length of the outgoing message in bytes
- * \param[out] rxBuf : Buffer where incoming message will be placed
- * \param[in] rxBufLen : Maximum length of the incoming message in bytes
- * \param[out] actLen : Actual received length in bits
- *
- * \return ERR_NONE : Transceive done with no error
- * \return ERR_WRONG_STATE : RFAL not initialized or mode not set
- * \return ERR_IO : Internal error
- *****************************************************************************
- */
- ReturnCode rfalISO15693TransceiveAnticollisionFrame(
- uint8_t* txBuf,
- uint8_t txBufLen,
- uint8_t* rxBuf,
- uint8_t rxBufLen,
- uint16_t* actLen);
- /*!
- *****************************************************************************
- * \brief Sends an ISO15693 Anticollision EOF
- *
- * This sends the Anticollision|Inventory EOF used as a slot marker
- *
- * \warning rxBuf must be able to contain the payload and CRC
- *
- * \param[out] rxBuf : Buffer where incoming message will be placed
- * \param[in] rxBufLen : Maximum length of the incoming message in bytes
- * \param[out] actLen : Actual received length in bits
- *
- * \return ERR_NONE : Transceive done with no error
- * \return ERR_WRONG_STATE : RFAL not initialized or mode not set
- * \return ERR_IO : Internal error
- *****************************************************************************
- */
- ReturnCode
- rfalISO15693TransceiveEOFAnticollision(uint8_t* rxBuf, uint8_t rxBufLen, uint16_t* actLen);
- /*!
- *****************************************************************************
- * \brief Sends an ISO15693 EOF
- *
- * This is method sends an ISO15693 (EoF) used for a Write operation
- *
- * \warning rxBuf must be able to contain the payload and CRC
- *
- * \param[out] rxBuf : Buffer where incoming message will be placed
- * \param[in] rxBufLen : Maximum length of the incoming message in bytes
- * \param[out] actLen : Actual received length in bytes
- *
- * \return ERR_NONE : Transceive done with no error
- * \return ERR_IO : Internal error
- *****************************************************************************
- */
- ReturnCode rfalISO15693TransceiveEOF(uint8_t* rxBuf, uint8_t rxBufLen, uint16_t* actLen);
- /*!
- *****************************************************************************
- * \brief Transceive Blocking Tx
- *
- * This is method triggers a Transceive and executes it blocking until the
- * Tx has been completed
- *
- * \param[in] txBuf : Buffer where outgoing message is located
- * \param[in] txBufLen : Length of the outgoing message in bytes
- * \param[out] rxBuf : Buffer where incoming message will be placed
- * \param[in] rxBufLen : Maximum length of the incoming message in bytes
- * \param[out] actLen : Actual received length in bits
- * \param[in] flags : TransceiveFlags indication special handling
- * \param[in] fwt : Frame Waiting Time in 1/fc
- *
- * \return ERR_NONE : Transceive done with no error
- * \return ERR_BUSY : Transceive ongoing
- * \return ERR_XXXX : Error occurred
- * \return ERR_LINK_LOSS : Link Loss - External Field is Off
- * \return ERR_RF_COLLISION : Collision detected
- * \return ERR_IO : Internal error
- *****************************************************************************
- */
- ReturnCode rfalTransceiveBlockingTx(
- uint8_t* txBuf,
- uint16_t txBufLen,
- uint8_t* rxBuf,
- uint16_t rxBufLen,
- uint16_t* actLen,
- uint32_t flags,
- uint32_t fwt);
- /*!
- *****************************************************************************
- * \brief Transceive Blocking Rx
- *
- * This is method executes the reception of an ongoing Transceive triggered
- * before by rfalTransceiveBlockingTx()
- *
- * \return ERR_NONE : Transceive done with no error
- * \return ERR_BUSY : Transceive ongoing
- * \return ERR_XXXX : Error occurred
- * \return ERR_TIMEOUT : No response
- * \return ERR_FRAMING : Framing error detected
- * \return ERR_PAR : Parity error detected
- * \return ERR_CRC : CRC error detected
- * \return ERR_LINK_LOSS : Link Loss - External Field is Off
- * \return ERR_RF_COLLISION : Collision detected
- * \return ERR_IO : Internal error
- *****************************************************************************
- */
- ReturnCode rfalTransceiveBlockingRx(void);
- /*!
- *****************************************************************************
- * \brief Transceive Blocking
- *
- * This is method triggers a Transceive and executes it blocking until it
- * has been completed
- *
- * \param[in] txBuf : Buffer where outgoing message is located
- * \param[in] txBufLen : Length of the outgoing message in bytes
- * \param[out] rxBuf : Buffer where incoming message will be placed
- * \param[in] rxBufLen : Maximum length of the incoming message in bytes
- * \param[out] actLen : Actual received length in bytes
- * \param[in] flags : TransceiveFlags indication special handling
- * \param[in] fwt : Frame Waiting Time in 1/fc
- *
- * \return ERR_NONE : Transceive done with no error
- * \return ERR_BUSY : Transceive ongoing
- * \return ERR_XXXX : Error occurred
- * \return ERR_TIMEOUT : No response
- * \return ERR_FRAMING : Framing error detected
- * \return ERR_PAR : Parity error detected
- * \return ERR_CRC : CRC error detected
- * \return ERR_LINK_LOSS : Link Loss - External Field is Off
- * \return ERR_RF_COLLISION : Collision detected
- * \return ERR_IO : Internal error
- *****************************************************************************
- */
- ReturnCode rfalTransceiveBlockingTxRx(
- uint8_t* txBuf,
- uint16_t txBufLen,
- uint8_t* rxBuf,
- uint16_t rxBufLen,
- uint16_t* actLen,
- uint32_t flags,
- uint32_t fwt);
- ReturnCode rfalTransceiveBitsBlockingTx(
- uint8_t* txBuf,
- uint16_t txBufLen,
- uint8_t* rxBuf,
- uint16_t rxBufLen,
- uint16_t* actLen,
- uint32_t flags,
- uint32_t fwt);
- /*****************************************************************************
- * Listen Mode *
- *****************************************************************************/
- /*!
- *****************************************************************************
- * \brief Is external Field On
- *
- * Checks if external field (other peer/device) is on/detected
- *
- * \return true External field is On
- * \return false No external field is detected
- *
- *****************************************************************************
- */
- bool rfalIsExtFieldOn(void);
- /*!
- *****************************************************************************
- * \brief Listen Mode start
- *
- * Configures RF Chip to go into listen mode enabling the given technologies
- *
- *
- * \param[in] lmMask: mask with the enabled/disabled listen modes
- * use: RFAL_LM_MASK_NFCA ; RFAL_LM_MASK_NFCB ;
- * RFAL_LM_MASK_NFCF ; RFAL_LM_MASK_ACTIVE_P2P
- * \param[in] confA: pointer to Passive A configurations (NULL if disabled)
- * \param[in] confB: pointer to Passive B configurations (NULL if disabled)
- * \param[in] confF: pointer to Passive F configurations (NULL if disabled)
- * \param[in] rxBuf: buffer to place incoming data
- * \param[in] rxBufLen: length in bits of rxBuf
- * \param[in] rxLen: pointer to write the data length in bits placed into rxBuf
- *
- *
- * \return ERR_PARAM Invalid parameter
- * \return ERR_REQUEST Invalid listen mode mask
- * \return ERR_NONE Done with no error
- *
- *****************************************************************************
- */
- ReturnCode rfalListenStart(
- uint32_t lmMask,
- const rfalLmConfPA* confA,
- const rfalLmConfPB* confB,
- const rfalLmConfPF* confF,
- uint8_t* rxBuf,
- uint16_t rxBufLen,
- uint16_t* rxLen);
- /*!
- *****************************************************************************
- * \brief Listen Mode start Sleeping
- *
- *
- *****************************************************************************
- */
- ReturnCode
- rfalListenSleepStart(rfalLmState sleepSt, uint8_t* rxBuf, uint16_t rxBufLen, uint16_t* rxLen);
- /*!
- *****************************************************************************
- * \brief Listen Mode Stop
- *
- * Disables the listen mode on the RF Chip
- *
- * \warning the listen mode will be disabled immediately on the RFchip regardless
- * of any ongoing operations like Transceive
- *
- * \return ERR_NONE Done with no error
- *
- *****************************************************************************
- */
- ReturnCode rfalListenStop(void);
- /*!
- *****************************************************************************
- * \brief Listen Mode get state
- *
- * Sets the new state of the Listen Mode and applies the necessary changes
- * on the RF Chip
- *
- * \param[out] dataFlag: indicates that Listen Mode has rcvd data and caller
- * must process it. The received message is located
- * at the rxBuf passed on rfalListenStart().
- * rfalListenSetState() will clear this flag
- * if NULL output parameter will no be written/returned
- * \param[out] lastBR: bit rate detected of the last initiator request
- * if NULL output parameter will no be written/returned
- *
- * \return rfalLmState RFAL_LM_STATE_NOT_INIT : LM not initialized properly
- * Any Other : LM State
- *
- *****************************************************************************
- */
- rfalLmState rfalListenGetState(bool* dataFlag, rfalBitRate* lastBR);
- /*!
- *****************************************************************************
- * \brief Listen Mode set state
- *
- * Sets the new state of the Listen Mode and applies the necessary changes
- * on the RF Chip
- *
- * \param[in] newSt : New state to go to
- *
- * \return ERR_WRONG_STATE : Not initialized properly
- * \return ERR_PARAM : Invalid parameter
- * \return ERR_NONE : Done with no error
- *
- *****************************************************************************
- */
- ReturnCode rfalListenSetState(rfalLmState newSt);
- /*****************************************************************************
- * Wake-Up Mode *
- *****************************************************************************/
- /*!
- *****************************************************************************
- * \brief Wake-Up Mode Start
- *
- * Sets the RF Chip in Low Power Wake-Up Mode according to the given
- * configuration.
- *
- * \param[in] config : Generic Wake-Up configuration provided by lower
- * layers. If NULL will automatically configure the
- * Wake-Up mode
- *
- * \return ERR_WRONG_STATE : Not initialized properly
- * \return ERR_PARAM : Invalid parameter
- * \return ERR_NONE : Done with no error
- *
- *****************************************************************************
- */
- ReturnCode rfalWakeUpModeStart(const rfalWakeUpConfig* config);
- /*!
- *****************************************************************************
- * \brief Wake-Up Has Woke
- *
- * Returns true if the Wake-Up mode is enabled and it has already received
- * the indication from the RF Chip that the surrounding environment has changed
- * and flagged at least one wake-Up interrupt
- *
- * \return true : Wake-Up mode enabled and has received a wake-up IRQ
- * \return false : no Wake-Up IRQ has been received
- *
- *****************************************************************************
- */
- bool rfalWakeUpModeHasWoke(void);
- /*!
- *****************************************************************************
- * \brief Wake-Up Mode Stop
- *
- * Stops the Wake-Up Mode
- *
- * \return ERR_WRONG_STATE : Not initialized properly
- * \return ERR_PARAM : Invalid parameter
- * \return ERR_NONE : Done with no error
- *
- *****************************************************************************
- */
- ReturnCode rfalWakeUpModeStop(void);
- /*!
- *****************************************************************************
- * \brief Low Power Mode Start
- *
- * Sets the RF Chip in Low Power Mode.
- * In this mode the RF Chip is placed in Low Power Mode, similar to Wake-up
- * mode but no operation nor period measurement is performed.
- * Mode must be terminated by rfalLowPowerModeStop()
- *
- * \return ERR_WRONG_STATE : Not initialized properly
- * \return ERR_PARAM : Invalid parameter
- * \return ERR_NONE : Done with no error
- *
- *****************************************************************************
- */
- ReturnCode rfalLowPowerModeStart(void);
- /*!
- *****************************************************************************
- * \brief Low Power Mode Stop
- *
- * Stops the Low Power Mode re-enabling the device
- *
- * \return ERR_WRONG_STATE : Not initialized properly
- * \return ERR_PARAM : Invalid parameter
- * \return ERR_NONE : Done with no error
- *
- *****************************************************************************
- */
- ReturnCode rfalLowPowerModeStop(void);
- #endif /* RFAL_RF_H */
- /**
- * @}
- *
- * @}
- *
- * @}
- */
|