 389ff92cc1
			
		
	
	
		389ff92cc1
		
			
		
	
	
	
	
		
			
			* Makefile, Scripts: new linter * About: remove ID from IC * Firmware: remove double define for DIVC/DIVR * Scripts: check folder names too. Docker: replace syntax check with make lint. * Reformat Sources and Migrate to new file naming convention * Docker: symlink clang-format-12 to clang-format * Add coding style guide
		
			
				
	
	
		
			831 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			831 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
 | |
| /******************************************************************************
 | |
|   * \attention
 | |
|   *
 | |
|   * <h2><center>© COPYRIGHT 2020 STMicroelectronics</center></h2>
 | |
|   *
 | |
|   * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License");
 | |
|   * You may not use this file except in compliance with the License.
 | |
|   * You may obtain a copy of the License at:
 | |
|   *
 | |
|   *        www.st.com/myliberty
 | |
|   *
 | |
|   * Unless required by applicable law or agreed to in writing, software 
 | |
|   * distributed under the License is distributed on an "AS IS" BASIS, 
 | |
|   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
 | |
|   * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY,
 | |
|   * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
 | |
|   * See the License for the specific language governing permissions and
 | |
|   * limitations under the License.
 | |
|   *
 | |
| ******************************************************************************/
 | |
| 
 | |
| /*
 | |
|  *      PROJECT:   ST25R391x firmware
 | |
|  *      Revision:
 | |
|  *      LANGUAGE:  ISO C99
 | |
|  */
 | |
| 
 | |
| /*! \file rfal_nfcDep.h
 | |
|  *
 | |
|  *  \author  Gustavo Patricio
 | |
|  *
 | |
|  *  \brief Implementation of NFC-DEP protocol
 | |
|  *  
 | |
|  *  NFC-DEP is also known as NFCIP - Near Field Communication 
 | |
|  *  Interface and Protocol
 | |
|  *  
 | |
|  *  This implementation was based on the following specs:
 | |
|  *    - NFC Forum Digital 1.1
 | |
|  *    - ECMA 340 3rd Edition 2013
 | |
|  *
 | |
|  *
 | |
|  * \addtogroup RFAL
 | |
|  * @{
 | |
|  *
 | |
|  * \addtogroup RFAL-AL
 | |
|  * \brief RFAL Abstraction Layer
 | |
|  * @{
 | |
|  *
 | |
|  * \addtogroup NFC-DEP
 | |
|  * \brief RFAL NFC-DEP Module
 | |
|  * @{
 | |
|  */
 | |
| 
 | |
| #ifndef RFAL_NFCDEP_H_
 | |
| #define RFAL_NFCDEP_H_
 | |
| 
 | |
| /*
 | |
|  ******************************************************************************
 | |
|  * INCLUDES
 | |
|  ******************************************************************************
 | |
|  */
 | |
| #include "platform.h"
 | |
| #include "st_errno.h"
 | |
| #include "rfal_rf.h"
 | |
| 
 | |
| /*
 | |
|  ******************************************************************************
 | |
|  * ENABLE SWITCH
 | |
|  ******************************************************************************
 | |
|  */
 | |
| 
 | |
| #ifndef RFAL_FEATURE_NFC_DEP
 | |
| #define RFAL_FEATURE_NFC_DEP \
 | |
|     false /*!< NFC-DEP module configuration missing. Disabled by default */
 | |
| #endif
 | |
| 
 | |
| /* If module is disabled remove the need for the user to set lengths */
 | |
| #if !RFAL_FEATURE_NFC_DEP
 | |
| #undef RFAL_FEATURE_NFC_DEP_BLOCK_MAX_LEN
 | |
| #undef RFAL_FEATURE_NFC_DEP_PDU_MAX_LEN
 | |
| 
 | |
| #define RFAL_FEATURE_NFC_DEP_BLOCK_MAX_LEN 1U /*!< NFC-DEP Block/Payload length, set to "none" */
 | |
| #define RFAL_FEATURE_NFC_DEP_PDU_MAX_LEN 1U /*!< NFC-DEP PDU length, set to "none"           */
 | |
| #endif /* !RFAL_FEATURE_NFC_DEP  */
 | |
| 
 | |
| /*
 | |
|  ******************************************************************************
 | |
|  * DEFINES
 | |
|  ******************************************************************************
 | |
|  */
 | |
| #define RFAL_NFCDEP_FRAME_SIZE_MAX_LEN \
 | |
|     254U /*!< Maximum Frame Size   Digital 2.0 Table 90                      */
 | |
| #define RFAL_NFCDEP_DEPREQ_HEADER_LEN \
 | |
|     5U /*!< DEP_REQ header length: CMD_TYPE + CMD_CMD + PBF + DID + NAD    */
 | |
| 
 | |
| /*! Length NFCIP DEP REQ or RES header (incl LEN)                                                                           */
 | |
| #define RFAL_NFCDEP_DEP_HEADER \
 | |
|     (RFAL_NFCDEP_LEN_LEN + RFAL_NFCDEP_CMDTYPE_LEN + RFAL_NFCDEP_CMD_LEN + RFAL_NFCDEP_DEP_PFB_LEN)
 | |
| #define RFAL_NFCDEP_HEADER \
 | |
|     (RFAL_NFCDEP_CMDTYPE_LEN + RFAL_NFCDEP_CMD_LEN) /*!< NFCIP header length           */
 | |
| #define RFAL_NFCDEP_SB_LEN \
 | |
|     1U /*!< SB length on NFCIP fram for NFC-A                              */
 | |
| #define RFAL_NFCDEP_LEN_LEN \
 | |
|     1U /*!< LEN length on NFCIP frame                                      */
 | |
| #define RFAL_NFCDEP_CMDTYPE_LEN \
 | |
|     1U /*!< Length of the cmd type (REQ | RES) on NFCIP frame              */
 | |
| #define RFAL_NFCDEP_CMD_LEN \
 | |
|     1U /*!< Length of the cmd on NFCIP frame                               */
 | |
| #define RFAL_NFCDEP_DID_LEN \
 | |
|     1U /*!< Length of did on NFCIP frame                                   */
 | |
| #define RFAL_NFCDEP_DEP_PFB_LEN \
 | |
|     1U /*!< Length of the PFB field on NFCIP frame                         */
 | |
| 
 | |
| #define RFAL_NFCDEP_DSL_RLS_LEN_NO_DID               \
 | |
|     (RFAL_NFCDEP_LEN_LEN + RFAL_NFCDEP_CMDTYPE_LEN + \
 | |
|      RFAL_NFCDEP_CMD_LEN) /*!< Length of DSL_REQ and RLS_REQ with no DID */
 | |
| #define RFAL_NFCDEP_DSL_RLS_LEN_DID   \
 | |
|     (RFAL_NFCDEP_DSL_RLS_LEN_NO_DID + \
 | |
|      RFAL_NFCDEP_DID_LEN) /*!< Length of DSL_REQ and RLS_REQ with DID    */
 | |
| 
 | |
| #define RFAL_NFCDEP_FS_VAL_MIN \
 | |
|     64U /*!< Minimum LR value                                               */
 | |
| #define RFAL_NFCDEP_LR_VAL_MASK \
 | |
|     0x03U /*!< Bit mask for a LR value                                        */
 | |
| #define RFAL_NFCDEP_PP_LR_MASK \
 | |
|     0x30U /*!< Bit mask for LR value in PP byte on a ATR REQ/RES              */
 | |
| #define RFAL_NFCDEP_PP_LR_SHIFT \
 | |
|     4U /*!< Position of LR value in PP byte on a ATR REQ/RES               */
 | |
| 
 | |
| #define RFAL_NFCDEP_DID_MAX \
 | |
|     14U /*!< Max DID value Digital 14.6.2.3                                 */
 | |
| #define RFAL_NFCDEP_DID_KEEP \
 | |
|     0xFFU /*!< Keep DID value already configured                              */
 | |
| #define RFAL_NFCDEP_DID_NO \
 | |
|     0x00U /*!< No DID shall be used                                           */
 | |
| #define RFAL_NFCDEP_NAD_NO \
 | |
|     0x00U /*!< No NAD shall be used                                           */
 | |
| 
 | |
| #define RFAL_NFCDEP_OPER_RTOX_REQ_DIS \
 | |
|     0x01U /*!< Operation config: RTOX REQ disable                             */
 | |
| #define RFAL_NFCDEP_OPER_RTOX_REQ_EN \
 | |
|     0x00U /*!< Operation config: RTOX REQ enable                              */
 | |
| 
 | |
| #define RFAL_NFCDEP_OPER_ATN_DIS \
 | |
|     0x00U /*!< Operation config: ATN disable                                  */
 | |
| #define RFAL_NFCDEP_OPER_ATN_EN \
 | |
|     0x02U /*!< Operation config: ATN enable                                   */
 | |
| 
 | |
| #define RFAL_NFCDEP_OPER_EMPTY_DEP_DIS \
 | |
|     0x04U /*!< Operation config: empty DEPs disable                           */
 | |
| #define RFAL_NFCDEP_OPER_EMPTY_DEP_EN \
 | |
|     0x00U /*!< Operation config: empty DEPs enable                            */
 | |
| 
 | |
| #define RFAL_NFCDEP_OPER_FULL_MI_DIS \
 | |
|     0x00U /*!< Operation config: full chaining DEPs disable                   */
 | |
| #define RFAL_NFCDEP_OPER_FULL_MI_EN \
 | |
|     0x08U /*!< Operation config: full chaining DEPs enable                    */
 | |
| 
 | |
| #define RFAL_NFCDEP_BRS_MAINTAIN \
 | |
|     0xC0U /*!< Value signalling that BR is to be maintained (no PSL)          */
 | |
| #define RFAL_NFCDEP_BRS_Dx_MASK \
 | |
|     0x07U /*!< Value signalling that BR is to be maintained (no PSL)          */
 | |
| #define RFAL_NFCDEP_BRS_DSI_POS \
 | |
|     3U /*!< Value signalling that BR is to be maintained (no PSL)          */
 | |
| 
 | |
| #define RFAL_NFCDEP_WT_DELTA \
 | |
|     (16U - RFAL_NFCDEP_WT_DELTA_ADJUST) /*!< NFC-DEP dWRT (adjusted)  Digital 2.0 B.10  */
 | |
| #define RFAL_NFCDEP_WT_DELTA_ADJUST \
 | |
|     4U /*!< dWRT value adjustment                                          */
 | |
| 
 | |
| #define RFAL_NFCDEP_ATR_REQ_NFCID3_POS \
 | |
|     2U /*!< NFCID3 offset in ATR_REQ frame                                 */
 | |
| #define RFAL_NFCDEP_NFCID3_LEN \
 | |
|     10U /*!< NFCID3 Length                                                  */
 | |
| 
 | |
| #define RFAL_NFCDEP_LEN_MIN \
 | |
|     3U /*!< Minimum length byte LEN value                                  */
 | |
| #define RFAL_NFCDEP_LEN_MAX \
 | |
|     255U /*!< Maximum length byte LEN value                                  */
 | |
| 
 | |
| #define RFAL_NFCDEP_ATRRES_HEADER_LEN \
 | |
|     2U /*!< ATR RES Header Len:  CmdType: 0xD5 + Cod: 0x01                 */
 | |
| #define RFAL_NFCDEP_ATRRES_MIN_LEN \
 | |
|     17U /*!< Minimum length for an ATR RES                                  */
 | |
| #define RFAL_NFCDEP_ATRRES_MAX_LEN \
 | |
|     64U /*!< Maximum length for an ATR RES  Digital 1.0 14.6.1              */
 | |
| #define RFAL_NFCDEP_ATRREQ_MIN_LEN \
 | |
|     16U /*!< Minimum length for an ATR REQ                                  */
 | |
| #define RFAL_NFCDEP_ATRREQ_MAX_LEN \
 | |
|     RFAL_NFCDEP_ATRRES_MAX_LEN /*!< Maximum length for an ATR REQ  Digital 1.0 14.6.1   */
 | |
| 
 | |
| #define RFAL_NFCDEP_GB_MAX_LEN    \
 | |
|     (RFAL_NFCDEP_ATRREQ_MAX_LEN - \
 | |
|      RFAL_NFCDEP_ATRREQ_MIN_LEN) /*!< Maximum length the General Bytes on ATR  Digital 1.1  16.6.3 */
 | |
| 
 | |
| #define RFAL_NFCDEP_WT_INI_DEFAULT \
 | |
|     RFAL_NFCDEP_WT_INI_MAX /*!< WT Initiator default value Digital 1.0 14.6.3.8        */
 | |
| #define RFAL_NFCDEP_WT_INI_MIN 0U /*!< WT Initiator minimum value Digital 1.0 14.6.3.8        */
 | |
| #define RFAL_NFCDEP_WT_INI_MAX 14U /*!< WT Initiator maximum value Digital 1.0 14.6.3.8 A.10   */
 | |
| #define RFAL_NFCDEP_RWT_INI_MAX \
 | |
|     rfalNfcDepWT2RWT(RFAL_NFCDEP_WT_INI_MAX) /*!< RWT Initiator maximum value   */
 | |
| 
 | |
| #define RFAL_NFCDEP_WT_TRG_MAX_D10 8U /*!< WT target max Digital 1.0 14.6.3.8 A.10 */
 | |
| #define RFAL_NFCDEP_WT_TRG_MAX_D11 14U /*!< WT target max Digital 1.1 16.6.3.9 A.9  */
 | |
| #define RFAL_NFCDEP_WT_TRG_MAX_L13 10U /*!< WT target max [LLCP] 1.3 6.2.1          */
 | |
| #define RFAL_NFCDEP_WT_TRG_MAX \
 | |
|     RFAL_NFCDEP_WT_TRG_MAX_D11 /*!< WT target max Digital x.x | LLCP x.x    */
 | |
| #define RFAL_NFCDEP_RWT_TRG_MAX \
 | |
|     rfalNfcDepWT2RWT(RFAL_NFCDEP_WT_TRG_MAX) /*!< RWT Initiator maximum value         */
 | |
| 
 | |
| /*! Maximum Frame Waiting Time = ((256 * 16/fc)*2^FWImax) = ((256*16/fc)*2^14) = (1048576 / 64)/fc = (100000h*64)/fc         */
 | |
| #define RFAL_NFCDEP_MAX_FWT ((uint32_t)1U << 20)
 | |
| 
 | |
| #define RFAL_NFCDEP_WT_MASK \
 | |
|     0x0FU /*!< Bit mask for the Wait Time value                               */
 | |
| 
 | |
| #define RFAL_NFCDEP_BR_MASK_106 \
 | |
|     0x01U /*!< Enable mask bit rate 106                                    */
 | |
| #define RFAL_NFCDEP_BR_MASK_212 \
 | |
|     0x02U /*!< Enable mask bit rate 242                                    */
 | |
| #define RFAL_NFCDEP_BR_MASK_424 \
 | |
|     0x04U /*!< Enable mask bit rate 424                                    */
 | |
| 
 | |
| /*
 | |
|  ******************************************************************************
 | |
|  * GLOBAL MACROS
 | |
|  ******************************************************************************
 | |
|  */
 | |
| 
 | |
| #define rfalNfcDepWT2RWT(wt)                    \
 | |
|     ((uint32_t)1U                               \
 | |
|      << (((uint32_t)(wt)&RFAL_NFCDEP_WT_MASK) + \
 | |
|          12U)) /*!< Converts WT value to RWT (1/fc)               */
 | |
| 
 | |
| /*! Returns the BRS value from the given bit rate */
 | |
| #define rfalNfcDepDx2BRS(br)                                                \
 | |
|     ((((uint8_t)(br)&RFAL_NFCDEP_BRS_Dx_MASK) << RFAL_NFCDEP_BRS_DSI_POS) | \
 | |
|      ((uint8_t)(br)&RFAL_NFCDEP_BRS_Dx_MASK))
 | |
| 
 | |
| #define rfalNfcDepBRS2DRI(brs) \
 | |
|     (uint8_t)((                \
 | |
|         uint8_t)(brs)&RFAL_NFCDEP_BRS_Dx_MASK) /*!< Returns the DRI value from the given BRS byte */
 | |
| #define rfalNfcDepBRS2DSI(brs)                        \
 | |
|     (uint8_t)(                                        \
 | |
|         ((uint8_t)(brs) >> RFAL_NFCDEP_BRS_DSI_POS) & \
 | |
|         RFAL_NFCDEP_BRS_Dx_MASK) /*!< Returns the DSI value from the given BRS byte */
 | |
| 
 | |
| #define rfalNfcDepPP2LR(PPx)                    \
 | |
|     (((uint8_t)(PPx)&RFAL_NFCDEP_PP_LR_MASK) >> \
 | |
|      RFAL_NFCDEP_PP_LR_SHIFT) /*!< Returns the LR value from the given PPx byte  */
 | |
| #define rfalNfcDepLR2PP(LRx)                       \
 | |
|     (((uint8_t)(LRx) << RFAL_NFCDEP_PP_LR_SHIFT) & \
 | |
|      RFAL_NFCDEP_PP_LR_MASK) /*!< Returns the PP byte with the given LRx value  */
 | |
| 
 | |
| /*! Returns the Frame size value from the given LRx value  */
 | |
| #define rfalNfcDepLR2FS(LRx) \
 | |
|     (uint16_t)(              \
 | |
|         MIN((RFAL_NFCDEP_FS_VAL_MIN * ((uint16_t)(LRx) + 1U)), RFAL_NFCDEP_FRAME_SIZE_MAX_LEN))
 | |
| 
 | |
| /*! 
 | |
|  *  Despite DIGITAL 1.0 14.6.2.1 stating that the last two bytes may filled with 
 | |
|  *  any value, some devices (Samsung Google Nexus) only accept when these are 0 */
 | |
| #define rfalNfcDepSetNFCID(dst, src, len)           \
 | |
|     ST_MEMSET((dst), 0x00, RFAL_NFCDEP_NFCID3_LEN); \
 | |
|     if((len) > 0U) {                                \
 | |
|         ST_MEMCPY((dst), (src), (len));             \
 | |
|     }
 | |
| 
 | |
| /*
 | |
|  ******************************************************************************
 | |
|  * GLOBAL ENUMERATIONS
 | |
|  ******************************************************************************
 | |
|  */
 | |
| 
 | |
| /*! Enumeration of NFC-DEP bit rate in ATR    Digital 1.0 Table 93 and 94   */
 | |
| enum {
 | |
|     RFAL_NFCDEP_Bx_NO_HIGH_BR = 0x00, /*!< Peer supports no high bit rates      */
 | |
|     RFAL_NFCDEP_Bx_08_848 = 0x01, /*!< Peer also supports 848               */
 | |
|     RFAL_NFCDEP_Bx_16_1695 = 0x02, /*!< Peer also supports 1695              */
 | |
|     RFAL_NFCDEP_Bx_32_3390 = 0x04, /*!< Peer also supports 3390              */
 | |
|     RFAL_NFCDEP_Bx_64_6780 = 0x08 /*!< Peer also supports 6780              */
 | |
| };
 | |
| 
 | |
| /*! Enumeration of NFC-DEP bit rate Dividor in PSL   Digital 1.0 Table 100  */
 | |
| enum {
 | |
|     RFAL_NFCDEP_Dx_01_106 = RFAL_BR_106, /*!< Divisor D =  1 : bit rate = 106      */
 | |
|     RFAL_NFCDEP_Dx_02_212 = RFAL_BR_212, /*!< Divisor D =  2 : bit rate = 212      */
 | |
|     RFAL_NFCDEP_Dx_04_424 = RFAL_BR_424, /*!< Divisor D =  4 : bit rate = 424      */
 | |
|     RFAL_NFCDEP_Dx_08_848 = RFAL_BR_848, /*!< Divisor D =  8 : bit rate = 848      */
 | |
|     RFAL_NFCDEP_Dx_16_1695 = RFAL_BR_1695, /*!< Divisor D = 16 : bit rate = 1695     */
 | |
|     RFAL_NFCDEP_Dx_32_3390 = RFAL_BR_3390, /*!< Divisor D = 32 : bit rate = 3390     */
 | |
|     RFAL_NFCDEP_Dx_64_6780 = RFAL_BR_6780 /*!< Divisor D = 64 : bit rate = 6780     */
 | |
| };
 | |
| 
 | |
| /*! Enumeration of  NFC-DEP Length Reduction (LR)   Digital 1.0 Table 91    */
 | |
| enum {
 | |
|     RFAL_NFCDEP_LR_64 = 0x00, /*!< Maximum payload size is  64 bytes    */
 | |
|     RFAL_NFCDEP_LR_128 = 0x01, /*!< Maximum payload size is 128 bytes    */
 | |
|     RFAL_NFCDEP_LR_192 = 0x02, /*!< Maximum payload size is 192 bytes    */
 | |
|     RFAL_NFCDEP_LR_254 = 0x03 /*!< Maximum payload size is 254 bytes    */
 | |
| };
 | |
| 
 | |
| /*
 | |
|  ******************************************************************************
 | |
|  * GLOBAL DATA TYPES
 | |
|  ******************************************************************************
 | |
|  */
 | |
| 
 | |
| /*! NFC-DEP callback to check if upper layer has deactivation pending   */
 | |
| typedef bool (*rfalNfcDepDeactCallback)(void);
 | |
| 
 | |
| /*! Enumeration of the nfcip communication modes */
 | |
| typedef enum {
 | |
|     RFAL_NFCDEP_COMM_PASSIVE, /*!< Passive communication mode    */
 | |
|     RFAL_NFCDEP_COMM_ACTIVE /*!< Active communication mode     */
 | |
| } rfalNfcDepCommMode;
 | |
| 
 | |
| /*! Enumeration of the nfcip roles */
 | |
| typedef enum {
 | |
|     RFAL_NFCDEP_ROLE_INITIATOR, /*!< Perform as Initiator          */
 | |
|     RFAL_NFCDEP_ROLE_TARGET /*!< Perform as Target             */
 | |
| } rfalNfcDepRole;
 | |
| 
 | |
| /*! Struct that holds all NFCIP configs                                                      */
 | |
| typedef struct {
 | |
|     rfalNfcDepRole role; /*!< Current NFCIP role                                      */
 | |
|     rfalNfcDepCommMode commMode; /*!< Current NFCIP communication mode                        */
 | |
|     uint8_t oper; /*!< Operation config similar to NCI 1.0 Table 81            */
 | |
| 
 | |
|     uint8_t did; /*!< Current Device ID (DID)                                 */
 | |
|     uint8_t nad; /*!< Current Node Addressing (NAD)                           */
 | |
|     uint8_t bs; /*!< Bit rate in Sending Direction                           */
 | |
|     uint8_t br; /*!< Bit rate in Receiving Direction                         */
 | |
|     uint8_t nfcid[RFAL_NFCDEP_NFCID3_LEN]; /*!< Pointer to the NFCID to be used    */
 | |
|     uint8_t nfcidLen; /*!< Length of the given NFCID in nfcid                      */
 | |
|     uint8_t gb[RFAL_NFCDEP_GB_MAX_LEN]; /*!< Pointer General Bytes (GB) to be used */
 | |
|     uint8_t gbLen; /*!< Length of the given GB in gb                            */
 | |
|     uint8_t lr; /*!< Length Reduction (LR) to be used                        */
 | |
|     uint8_t to; /*!< Timeout (TO)  to be used                                */
 | |
|     uint32_t fwt; /*!< Frame Waiting Time (FWT) to be used                     */
 | |
|     uint32_t dFwt; /*!< Delta Frame Waiting Time (dFWT) to be used              */
 | |
| } rfalNfcDepConfigs;
 | |
| 
 | |
| /*! ATR_REQ command    Digital 1.1 16.6.2   */
 | |
| typedef struct {
 | |
|     uint8_t CMD1; /*!< Command format 0xD4                    */
 | |
|     uint8_t CMD2; /*!< Command Value                          */
 | |
|     uint8_t NFCID3[RFAL_NFCDEP_NFCID3_LEN]; /*!< NFCID3 value                           */
 | |
|     uint8_t DID; /*!< DID                                    */
 | |
|     uint8_t BSi; /*!< Sending Bitrate for Initiator          */
 | |
|     uint8_t BRi; /*!< Receiving Bitrate for Initiator        */
 | |
|     uint8_t PPi; /*!< Optional Parameters presence indicator */
 | |
|     uint8_t GBi[RFAL_NFCDEP_GB_MAX_LEN]; /*!< General Bytes                          */
 | |
| } rfalNfcDepAtrReq;
 | |
| 
 | |
| /*! ATR_RES response    Digital 1.1 16.6.3  */
 | |
| typedef struct {
 | |
|     uint8_t CMD1; /*!< Response Byte 0xD5                     */
 | |
|     uint8_t CMD2; /*!< Command Value                          */
 | |
|     uint8_t NFCID3[RFAL_NFCDEP_NFCID3_LEN]; /*!< NFCID3 value                           */
 | |
|     uint8_t DID; /*!< DID                                    */
 | |
|     uint8_t BSt; /*!< Sending Bitrate for Initiator          */
 | |
|     uint8_t BRt; /*!< Receiving Bitrate for Initiator        */
 | |
|     uint8_t TO; /*!< Timeout                                */
 | |
|     uint8_t PPt; /*!< Optional Parameters presence indicator */
 | |
|     uint8_t GBt[RFAL_NFCDEP_GB_MAX_LEN]; /*!< General Bytes                          */
 | |
| } rfalNfcDepAtrRes;
 | |
| 
 | |
| /*! Structure of transmit I-PDU Buffer format from caller                                    */
 | |
| typedef struct {
 | |
|     uint8_t prologue[RFAL_NFCDEP_DEPREQ_HEADER_LEN]; /*!< Prologue space for NFC-DEP header*/
 | |
|     uint8_t inf[RFAL_FEATURE_NFC_DEP_BLOCK_MAX_LEN]; /*!< INF | Data area of the buffer    */
 | |
| } rfalNfcDepBufFormat;
 | |
| 
 | |
| /*! Structure of APDU Buffer format from caller */
 | |
| typedef struct {
 | |
|     uint8_t prologue[RFAL_NFCDEP_DEPREQ_HEADER_LEN]; /*!< Prologue/SoD buffer                     */
 | |
|     uint8_t pdu[RFAL_FEATURE_NFC_DEP_PDU_MAX_LEN]; /*!< Complete PDU/Payload buffer             */
 | |
| } rfalNfcDepPduBufFormat;
 | |
| 
 | |
| /*! Activation info as Initiator and Target                                       */
 | |
| typedef union { /*  PRQA S 0750 # MISRA 19.2 - Both members of the union will not be used concurrently , device is only initiatior or target a time. No problem can occur. */
 | |
|     struct {
 | |
|         rfalNfcDepAtrRes ATR_RES; /*!< ATR RES            (Initiator mode)  */
 | |
|         uint8_t ATR_RESLen; /*!< ATR RES length     (Initiator mode)  */
 | |
|     } Target; /*!< Target                               */
 | |
|     struct {
 | |
|         rfalNfcDepAtrReq ATR_REQ; /*!< ATR REQ            (Target mode)     */
 | |
|         uint8_t ATR_REQLen; /*!< ATR REQ length     (Target mode)     */
 | |
|     } Initiator; /*!< Initiator                            */
 | |
| } rfalNfcDepActivation;
 | |
| 
 | |
| /*! NFC-DEP device Info */
 | |
| typedef struct {
 | |
|     uint8_t GBLen; /*!< General Bytes length                       */
 | |
|     uint8_t WT; /*!< WT to be used (ignored in Listen Mode)     */
 | |
|     uint32_t FWT; /*!< FWT to be used (1/fc)(ignored Listen Mode) */
 | |
|     uint32_t dFWT; /*!< Delta FWT to be used (1/fc)                */
 | |
|     uint8_t LR; /*!< Length Reduction coding the max payload    */
 | |
|     uint16_t FS; /*!< Frame Size                                 */
 | |
|     rfalBitRate DSI; /*!< Bit Rate coding from Initiator  to Target  */
 | |
|     rfalBitRate DRI; /*!< Bit Rate coding from Target to Initiator   */
 | |
|     uint8_t DID; /*!< Device ID (RFAL_NFCDEP_DID_NO if no DID)   */
 | |
|     uint8_t NAD; /*!< Node ADdress (RFAL_NFCDEP_NAD_NO if no NAD)*/
 | |
| } rfalNfcDepInfo;
 | |
| 
 | |
| /*! NFC-DEP Device structure */
 | |
| typedef struct {
 | |
|     rfalNfcDepActivation activation; /*!< Activation Info               */
 | |
|     rfalNfcDepInfo info; /*!< NFC-DEP device Info           */
 | |
| } rfalNfcDepDevice;
 | |
| 
 | |
| /*! NFCIP Protocol structure for P2P Target
 | |
|  *
 | |
|  *   operParam : derives from NFC-Forum NCI NFC-DEP Operation Parameter
 | |
|  *               NCI 1.1 Table 86: NFC-DEP Operation Parameter
 | |
|  *               and it's a bit mask composed as:
 | |
|  *                  [ 0000b 
 | |
|  *                    | Chain SHALL use max. Transport Data Byte[1b] 
 | |
|  *                    | I-PDU with no Transport Data SHALL NOT be sent [1b]
 | |
|  *                    | NFC-DEP Target SHALL NOT send RTOX request [1b]
 | |
|  *                  ]
 | |
|  * 
 | |
|  */
 | |
| typedef struct {
 | |
|     rfalNfcDepCommMode commMode; /*!< Initiator in Active P2P or Passive P2P*/
 | |
|     uint8_t operParam; /*!< NFC-DEP Operation Parameter           */
 | |
|     uint8_t* nfcid; /*!< Initiator's NFCID2 or NFCID3          */
 | |
|     uint8_t nfcidLen; /*!< Initiator's NFCID length (NFCID2/3)   */
 | |
|     uint8_t DID; /*!< Initiator's Device ID DID             */
 | |
|     uint8_t NAD; /*!< Initiator's Node ID NAD               */
 | |
|     uint8_t BS; /*!< Initiator's Bit Rates supported in Tx */
 | |
|     uint8_t BR; /*!< Initiator's Bit Rates supported in Rx */
 | |
|     uint8_t LR; /*!< Initiator's Length reduction          */
 | |
|     uint8_t* GB; /*!< Initiator's General Bytes (Gi)        */
 | |
|     uint8_t GBLen; /*!< Initiator's General Bytes length      */
 | |
| } rfalNfcDepAtrParam;
 | |
| 
 | |
| /*! Structure of parameters to be passed in for nfcDepListenStartActivation       */
 | |
| typedef struct {
 | |
|     rfalNfcDepBufFormat* rxBuf; /*!< Receive Buffer struct reference      */
 | |
|     uint16_t* rxLen; /*!< Receive INF data length in bytes     */
 | |
|     bool* isRxChaining; /*!< Received data is not complete        */
 | |
|     rfalNfcDepDevice* nfcDepDev; /*!< NFC-DEP device info                  */
 | |
| } rfalNfcDepListenActvParam;
 | |
| 
 | |
| /*! NFCIP Protocol structure for P2P Target
 | |
|  *
 | |
|  *   operParam : derives from NFC-Forum NCI NFC-DEP Operation Parameter
 | |
|  *               NCI 1.1 Table 86: NFC-DEP Operation Parameter
 | |
|  *               and it's a bit mask composed as:
 | |
|  *                  [ 0000b 
 | |
|  *                    | Chain SHALL use max. Transport Data Byte[1b] 
 | |
|  *                    | I-PDU with no Transport Data SHALL NOT be sent [1b]
 | |
|  *                    | NFC-DEP Target SHALL NOT send RTOX request [1b]
 | |
|  *                  ]
 | |
|  * 
 | |
|  */
 | |
| typedef struct {
 | |
|     rfalNfcDepCommMode commMode; /*!< Target in Active P2P or Passive P2P   */
 | |
|     uint8_t nfcid3[RFAL_NFCDEP_NFCID3_LEN]; /*!< Target's NFCID3                       */
 | |
|     uint8_t bst; /*!< Target's Bit Rates supported in Tx    */
 | |
|     uint8_t brt; /*!< Target's Bit Rates supported in Rx    */
 | |
|     uint8_t to; /*!< Target's timeout (TO) value           */
 | |
|     uint8_t ppt; /*!< Target's Presence optional Params(PPt)*/
 | |
|     uint8_t GBt[RFAL_NFCDEP_GB_MAX_LEN]; /*!< Target's General Bytes (Gt)           */
 | |
|     uint8_t GBtLen; /*!< Target's General Bytes length         */
 | |
|     uint8_t operParam; /*!< NFC-DEP Operation Parameter           */
 | |
| } rfalNfcDepTargetParam;
 | |
| 
 | |
| /*! Structure of parameters to be passed in for nfcDepStartIpduTransceive              */
 | |
| typedef struct {
 | |
|     rfalNfcDepBufFormat* txBuf; /*!< Transmit Buffer struct reference          */
 | |
|     uint16_t txBufLen; /*!< Transmit Buffer INF field length in bytes */
 | |
|     bool isTxChaining; /*!< Transmit data is not complete             */
 | |
|     rfalNfcDepBufFormat* rxBuf; /*!< Receive Buffer struct reference           */
 | |
|     uint16_t* rxLen; /*!< Receive INF data length                   */
 | |
|     bool* isRxChaining; /*!< Received data is not complete             */
 | |
|     uint32_t FWT; /*!< FWT to be used (ignored in Listen Mode)   */
 | |
|     uint32_t dFWT; /*!< Delta FWT to be used                      */
 | |
|     uint16_t FSx; /*!< Other device Frame Size (FSD or FSC)      */
 | |
|     uint8_t DID; /*!< Device ID (RFAL_ISODEP_NO_DID if no DID)  */
 | |
| } rfalNfcDepTxRxParam;
 | |
| 
 | |
| /*! Structure of parameters used on NFC DEP PDU Transceive */
 | |
| typedef struct {
 | |
|     rfalNfcDepPduBufFormat* txBuf; /*!< Transmit Buffer struct reference         */
 | |
|     uint16_t txBufLen; /*!< Transmit Buffer INF field length in Bytes*/
 | |
|     rfalNfcDepPduBufFormat* rxBuf; /*!< Receive Buffer struct reference in Bytes */
 | |
|     uint16_t* rxLen; /*!< Received INF data length in Bytes        */
 | |
|     rfalNfcDepBufFormat* tmpBuf; /*!< Temp buffer for single PDUs (internal)   */
 | |
|     uint32_t FWT; /*!< FWT to be used (ignored in Listen Mode)  */
 | |
|     uint32_t dFWT; /*!< Delta FWT to be used                     */
 | |
|     uint16_t FSx; /*!< Other device Frame Size (FSD or FSC)     */
 | |
|     uint8_t DID; /*!< Device ID (RFAL_ISODEP_NO_DID if no DID) */
 | |
| } rfalNfcDepPduTxRxParam;
 | |
| 
 | |
| /*
 | |
|  * *****************************************************************************
 | |
|  * GLOBAL VARIABLE DECLARATIONS
 | |
|  ******************************************************************************
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  ******************************************************************************
 | |
|  * GLOBAL FUNCTION PROTOTYPES
 | |
|  ******************************************************************************
 | |
|  */
 | |
| 
 | |
| /*!
 | |
|  ******************************************************************************
 | |
|  * \brief NFCIP Initialize
 | |
|  * 
 | |
|  * This method resets all NFC-DEP inner states, counters and context and sets
 | |
|  * default values
 | |
|  * 
 | |
|  ******************************************************************************
 | |
|  */
 | |
| void rfalNfcDepInitialize(void);
 | |
| 
 | |
| /*!
 | |
|  ******************************************************************************
 | |
|  * \brief Set deactivating callback
 | |
|  * 
 | |
|  * Sets the deactivating callback so that nfcip layer can check if upper layer
 | |
|  * has a deactivation pending, and not perform error recovery upon specific
 | |
|  * errors
 | |
|  * 
 | |
|  * \param[in] pFunc : method pointer to deactivation flag check 
 | |
|  ******************************************************************************
 | |
|  */
 | |
| void rfalNfcDepSetDeactivatingCallback(rfalNfcDepDeactCallback pFunc);
 | |
| 
 | |
| /*!
 | |
|  ******************************************************************************
 | |
|  * \brief Calculate Response Waiting Time
 | |
|  * 
 | |
|  * Calculates the Response Waiting Time (RWT) from the given Waiting Time (WT)
 | |
|  * 
 | |
|  * \param[in]  wt : the WT value to calculate RWT
 | |
|  * 
 | |
|  * \return RWT value in 1/fc
 | |
|  ******************************************************************************
 | |
|  */
 | |
| uint32_t rfalNfcDepCalculateRWT(uint8_t wt);
 | |
| 
 | |
| /*!
 | |
|  ******************************************************************************
 | |
|  * \brief NFC-DEP Initiator ATR (Attribute Request)
 | |
|  * 
 | |
|  * This method configures the NFC-DEP layer with given parameters and then
 | |
|  * sends an ATR to the Target with and checks for a valid response response
 | |
|  *
 | |
|  * \param[in]   param     : parameters to initialize and compose the ATR
 | |
|  * \param[out]  atrRes    : location to store the ATR_RES
 | |
|  * \param[out]  atrResLen : length of the ATR_RES received
 | |
|  * 
 | |
|  * \return ERR_NONE    : No error
 | |
|  * \return ERR_TIMEOUT : Timeout occurred
 | |
|  * \return ERR_PROTO   : Protocol error occurred
 | |
|  ******************************************************************************
 | |
|  */
 | |
| ReturnCode
 | |
|     rfalNfcDepATR(const rfalNfcDepAtrParam* param, rfalNfcDepAtrRes* atrRes, uint8_t* atrResLen);
 | |
| 
 | |
| /*!
 | |
|  ******************************************************************************
 | |
|  * \brief NFC-DEP Initiator PSL (Parameter Selection)
 | |
|  * 
 | |
|  * This method sends a PSL to the Target with the given parameters and checks
 | |
|  * for a valid response response
 | |
|  * 
 | |
|  * The parameters must be coded according to  Digital 1.1  16.7.1
 | |
|  * 
 | |
|  * \param[in] BRS : the selected Bit Rates for Initiator and Target
 | |
|  * \param[in] FSL : the maximum length of Commands and Responses
 | |
|  * 
 | |
|  * \return ERR_NONE    : No error
 | |
|  * \return ERR_TIMEOUT : Timeout occurred
 | |
|  * \return ERR_PROTO   : Protocol error occurred
 | |
|  ******************************************************************************
 | |
|  */
 | |
| ReturnCode rfalNfcDepPSL(uint8_t BRS, uint8_t FSL);
 | |
| 
 | |
| /*!
 | |
|  ******************************************************************************
 | |
|  * \brief NFC-DEP Initiator DSL (Deselect)
 | |
|  * 
 | |
|  * This method checks if the NFCIP module is configured as initiator and if 
 | |
|  * so sends a DSL REQ, waits  the target's response and checks it 
 | |
|  * 
 | |
|  * In case of performing as target no action is taken 
 | |
|  * 
 | |
|  * \return ERR_NONE       : No error
 | |
|  * \return ERR_TIMEOUT    : Timeout occurred
 | |
|  * \return ERR_MAX_RERUNS : Timeout occurred
 | |
|  * \return ERR_PROTO      : Protocol error occurred
 | |
|  ******************************************************************************
 | |
|  */
 | |
| ReturnCode rfalNfcDepDSL(void);
 | |
| 
 | |
| /*!
 | |
|  ******************************************************************************
 | |
|  * \brief NFC-DEP Initiator RLS (Release)
 | |
|  * 
 | |
|  * This method checks if the NFCIP module is configured as initiator and if 
 | |
|  * so sends a RLS REQ, waits target's response and checks it 
 | |
|  * 
 | |
|  * In case of performing as target no action is taken 
 | |
|  * 
 | |
|  * \return ERR_NONE       : No error
 | |
|  * \return ERR_TIMEOUT    : Timeout occurred
 | |
|  * \return ERR_MAX_RERUNS : Timeout occurred
 | |
|  * \return ERR_PROTO      : Protocol error occurred
 | |
|  ******************************************************************************
 | |
|  */
 | |
| ReturnCode rfalNfcDepRLS(void);
 | |
| 
 | |
| /*! 
 | |
|  *****************************************************************************
 | |
|  *  \brief  NFC-DEP Initiator Handle  Activation
 | |
|  *   
 | |
|  *  This performs a Activation into NFC-DEP layer with the given
 | |
|  *  parameters. It sends ATR_REQ and if the higher bit rates are supported by 
 | |
|  *  both devices it additionally sends PSL
 | |
|  *  Once Activated all details of the device are provided on nfcDepDev
 | |
|  *   
 | |
|  *  \param[in]  param     : required parameters to initialize and send ATR_REQ
 | |
|  *  \param[in]  desiredBR : Desired bit rate supported by the Poller
 | |
|  *  \param[out] nfcDepDev : NFC-DEP information of the activated Listen device
 | |
|  *
 | |
|  *  \return ERR_WRONG_STATE  : RFAL not initialized or incorrect mode
 | |
|  *  \return ERR_PARAM        : Invalid parameters
 | |
|  *  \return ERR_IO           : Generic internal error
 | |
|  *  \return ERR_TIMEOUT      : Timeout error
 | |
|  *  \return ERR_PAR          : Parity error detected
 | |
|  *  \return ERR_CRC          : CRC error detected
 | |
|  *  \return ERR_FRAMING      : Framing error detected
 | |
|  *  \return ERR_PROTO        : Protocol error detected
 | |
|  *  \return ERR_NONE         : No error, activation successful
 | |
|  *****************************************************************************
 | |
|  */
 | |
| ReturnCode rfalNfcDepInitiatorHandleActivation(
 | |
|     rfalNfcDepAtrParam* param,
 | |
|     rfalBitRate desiredBR,
 | |
|     rfalNfcDepDevice* nfcDepDev);
 | |
| 
 | |
| /*!
 | |
|  ******************************************************************************
 | |
|  * \brief Check if buffer contains valid ATR_REQ 
 | |
|  * 
 | |
|  * This method checks if the given ATR_REQ is valid
 | |
|  * 
 | |
|  * 
 | |
|  * \param[in]  buf    : buffer holding Initiator's received request
 | |
|  * \param[in]  bufLen : size of the msg contained on the buf in Bytes
 | |
|  * \param[out] nfcid3 : pointer to where the NFCID3 may be outputed, 
 | |
|  *                       nfcid3 has NFCF_SENSF_NFCID3_LEN as length
 | |
|  *                       Pass NULL if output parameter not desired 
 | |
|  *                       
 | |
|  * \return true  : Valid ATR_REQ received, the ATR_RES has been computed in txBuf
 | |
|  * \return false : Invalid protocol request
 | |
|  * 
 | |
|  ******************************************************************************
 | |
|  */
 | |
| bool rfalNfcDepIsAtrReq(const uint8_t* buf, uint16_t bufLen, uint8_t* nfcid3);
 | |
| 
 | |
| /*!
 | |
|  ******************************************************************************
 | |
|  * \brief Check is Target has received ATR 
 | |
|  * 
 | |
|  * This method checks if the NFCIP module is configured as target and if a
 | |
|  * ATR REQ has been received ( whether is in activation or in data exchange)
 | |
|  * 
 | |
|  * \return true  : a ATR has already been received
 | |
|  * \return false : no ATR has been received 
 | |
|  ******************************************************************************
 | |
|  */
 | |
| bool rfalNfcDepTargetRcvdATR(void);
 | |
| 
 | |
| /*!
 | |
|  *****************************************************************************
 | |
|  * \brief NFCDEP Start Listen Activation Handling
 | |
|  * 
 | |
|  * Start Activation Handling and setup to receive first frame which may
 | |
|  * contain complete or partial DEP-REQ after activation is completed 
 | |
|  * 
 | |
|  * Pass in ATR_REQ for NFC-DEP to handle ATR_RES. The Activation Handling 
 | |
|  * handles ATR_RES and PSL_RES if a PSL_REQ is received
 | |
|  * 
 | |
|  * Activation is completed if PSL_RES is sent or if first I-PDU is received
 | |
|  *  
 | |
|  * \ref rfalNfcDepListenGetActivationStatus() provide status of the 
 | |
|  *       ongoing activation
 | |
|  * 
 | |
|  * \warning nfcDepGetTransceiveStatus() shall be called right after activation 
 | |
|  * is completed (i.e. rfalNfcDepListenGetActivationStatus() return ERR_NONE) 
 | |
|  * to check for first received frame.
 | |
|  * 
 | |
|  * \param[in]  param       : Target parameters to be used
 | |
|  * \param[in]  atrReq      : reference to buffer containing ATR_REQ 
 | |
|  * \param[in]  atrReqLength: Length of ATR_REQ
 | |
|  * \param[out] rxParam     : references to buffer, length and chaining indication 
 | |
|  *                           for first complete LLCP to be received
 | |
|  * 
 | |
|  * \return ERR_NONE      : ATR_REQ is valid and activation ongoing
 | |
|  * \return ERR_PARAM     : ATR_REQ or other params are invalid
 | |
|  * \return ERR_LINK_LOSS : Remote Field is turned off
 | |
|  *****************************************************************************
 | |
|  */
 | |
| ReturnCode rfalNfcDepListenStartActivation(
 | |
|     const rfalNfcDepTargetParam* param,
 | |
|     const uint8_t* atrReq,
 | |
|     uint16_t atrReqLength,
 | |
|     rfalNfcDepListenActvParam rxParam);
 | |
| 
 | |
| /*!
 | |
|  *****************************************************************************
 | |
|  * \brief Get the current NFC-DEP Activation Status
 | |
|  * 
 | |
|  * \return ERR_NONE      : Activation has completed successfully
 | |
|  * \return ERR_BUSY      : Activation is ongoing
 | |
|  * \return ERR_LINK_LOSS : Remote Field was turned off
 | |
|  *****************************************************************************
 | |
|  */
 | |
| ReturnCode rfalNfcDepListenGetActivationStatus(void);
 | |
| 
 | |
| /*!
 | |
|  *****************************************************************************
 | |
|  * \brief Start Transceive 
 | |
|  * 
 | |
|  * Transceives a complete or partial DEP block
 | |
|  * 
 | |
|  * The txBuf contains complete or partial of DEP to be transmitted. 
 | |
|  * The Prologue field of the I-PDU is handled internally
 | |
|  * 
 | |
|  * If the buffer contains partial LLCP and is not the last block, then 
 | |
|  * isTxChaining must be set to true
 | |
|  * 
 | |
|  * \param[in] param: reference parameters to be used for the Transceive
 | |
|  *                    
 | |
|  * \return ERR_PARAM       : Bad request
 | |
|  * \return ERR_WRONG_STATE : The module is not in a proper state
 | |
|  * \return ERR_NONE        : The Transceive request has been started
 | |
|  *****************************************************************************
 | |
|  */
 | |
| ReturnCode rfalNfcDepStartTransceive(const rfalNfcDepTxRxParam* param);
 | |
| 
 | |
| /*!
 | |
|  *****************************************************************************
 | |
|  * \brief Return the Transceive status
 | |
|  *
 | |
|  * Returns the status of the NFC-DEP Transceive
 | |
|  * 
 | |
|  * \warning  When the other device is performing chaining once a chained 
 | |
|  *            block is received the error ERR_AGAIN is sent. At this point 
 | |
|  *            caller must handle the received data immediately. 
 | |
|  *            When ERR_AGAIN is returned an ACK has already been sent to 
 | |
|  *            the other device and the next block might be incoming. 
 | |
|  *            If rfalWorker() is called frequently it will place the next 
 | |
|  *            block on the given buffer  
 | |
|  * 
 | |
|  * \return ERR_NONE      : Transceive has been completed successfully
 | |
|  * \return ERR_BUSY      : Transceive is ongoing
 | |
|  * \return ERR_PROTO     : Protocol error occurred
 | |
|  * \return ERR_TIMEOUT   : Timeout error occurred
 | |
|  * \return ERR_SLEEP_REQ : Deselect has been received and responded
 | |
|  * \return ERR_NOMEM     : The received I-PDU does not fit into the
 | |
|  *                            receive buffer
 | |
|  * \return ERR_LINK_LOSS : Communication is lost because Reader/Writer 
 | |
|  *                            has turned off its field
 | |
|  * \return ERR_AGAIN     : received one chaining block, continue to call
 | |
|  *                            this method to retrieve the remaining blocks
 | |
|  *****************************************************************************
 | |
|  */
 | |
| ReturnCode rfalNfcDepGetTransceiveStatus(void);
 | |
| 
 | |
| /*!
 | |
|  *****************************************************************************
 | |
|  * \brief Start PDU Transceive 
 | |
|  * 
 | |
|  * This method triggers a NFC-DEP Transceive containing a complete PDU
 | |
|  * It transmits the given message and handles all protocol retransmitions,
 | |
|  * error handling and control messages
 | |
|  * 
 | |
|  * The txBuf  contains a complete PDU to be transmitted 
 | |
|  * The Prologue field will be manipulated by the Transceive
 | |
|  *  
 | |
|  * \warning the txBuf will be modified during the transmission
 | |
|  * \warning the maximum RF frame which can be received is limited by param.tmpBuf
 | |
|  * 
 | |
|  * \param[in] param: reference parameters to be used for the Transceive
 | |
|  *                    
 | |
|  * \return ERR_PARAM       : Bad request
 | |
|  * \return ERR_WRONG_STATE : The module is not in a proper state
 | |
|  * \return ERR_NONE        : The Transceive request has been started
 | |
|  *****************************************************************************
 | |
|  */
 | |
| ReturnCode rfalNfcDepStartPduTransceive(rfalNfcDepPduTxRxParam param);
 | |
| 
 | |
| /*!
 | |
|  *****************************************************************************
 | |
|  * \brief Return the PSU Transceive status
 | |
|  *
 | |
|  * Returns the status of the NFC-DEP PDU Transceive
 | |
|  * 
 | |
|  * 
 | |
|  * \return ERR_NONE      : Transceive has been completed successfully
 | |
|  * \return ERR_BUSY      : Transceive is ongoing
 | |
|  * \return ERR_PROTO     : Protocol error occurred
 | |
|  * \return ERR_TIMEOUT   : Timeout error occurred
 | |
|  * \return ERR_SLEEP_REQ : Deselect has been received and responded
 | |
|  * \return ERR_NOMEM     : The received I-PDU does not fit into the
 | |
|  *                            receive buffer
 | |
|  * \return ERR_LINK_LOSS : Communication is lost because Reader/Writer 
 | |
|  *                            has turned off its field
 | |
|  *****************************************************************************
 | |
|  */
 | |
| ReturnCode rfalNfcDepGetPduTransceiveStatus(void);
 | |
| 
 | |
| #endif /* RFAL_NFCDEP_H_ */
 | |
| 
 | |
| /**
 | |
|   * @}
 | |
|   *
 | |
|   * @}
 | |
|   *
 | |
|   * @}
 | |
|   */
 |