/* * Copyright (c), NXP Semiconductors Bangalore / India * * (C)NXP Semiconductors * All rights are reserved. Reproduction in whole or in part is * prohibited without the written consent of the copyright owner. * NXP reserves the right to make changes without notice at any time. * NXP makes no warranty, expressed, implied or statutory, including but * not limited to any implied warranty of merchantability or fitness for any * particular purpose, or that the use will not infringe any third party patent, * copyright or trademark. NXP must not be liable for any loss or damage * arising from its use. */ /** \file * Generic Discovery Loop Activities Component of Reader Library Framework. * $Author: Ashish Pal (nxp79566) $ * $Revision: 6122 $ (v4.040.05.011646) * $Date: 2016-09-23 12:11:29 +0530 (Fri, 23 Sep 2016) $ * * History: * SS: Generated 23. Jan 2015 * */ #ifndef PHACDICLOOP_H #define PHACDICLOOP_H #include #define __DEBUG #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #ifdef NXPBUILD__PHAC_DISCLOOP_SW /** \defgroup phacDiscLoop_Sw Component : Software * @{ */ /** * ID for this layer (software implementation of Discover loop component). * * \ref phacDiscLoop_Sw_DataParams::wId is initialized with this ID in the * initialization function \ref phacDiscLoop_Sw_Init. * */ #define PHAC_DISCLOOP_SW_ID 0x01U /** * Maximum cards supported per technologies in passive poll mode. * * By default maximum cards supported per technology is set to 1. Users can * change this value to support more cards. * * NOTE: Size of discovery loop data structure \ref phacDiscLoop_Sw_DataParams * will increase if this value is increased. * */ #define PHAC_DISCLOOP_CFG_MAX_CARDS_SUPPORTED 0x01U /** * Maximum cards supported per vicinity technologies in passive poll mode. * * By default maximum cards supported per vicinity technology is set to 1. Users can * change this value to support more cards. * * NOTE: Size of discovery loop data structure \ref phacDiscLoop_Sw_DataParams * will increase if this value is increased. * */ #define PHAC_DISCLOOP_CFG_MAX_VICINITY_CARDS_SUPPORTED 0x01U /** * Maximum (NFC + proprietary) technologies support in passive poll mode. * * Supported technologies are:\n * - Type A (As per NFC Activity 1.1 and EMVCo Specification 2.3.1a)\n * - Type B (As per NFC Activity 1.1 and EMVCo Specification 2.3.1a)\n * - Type F @ 212 kbps (As per NFC Activity 1.1)\n * - Type F @ 424 kbps (As per NFC Activity 1.1)\n * - Type V (ISO 15693) (As per NFC Activity draft specification)\n * - ISO 18000P3M3 (Proprietary) * */ #define PHAC_DISCLOOP_PASS_POLL_MAX_TECHS_SUPPORTED 0x06U /** * \name Supported NFC Activity versions. * \brief Discovery loop support both NFC Activity version 1.0 and 1.1. By * default discovery loop is configured for NFC Activity version 1.1. Use * \ref phacDiscLoop_SetConfig with #PHAC_DISCLOOP_CONFIG_ACTIVITY_VERSION option * to configure below values. */ /*@{*/ #define PHAC_DISCLOOP_NFC_ACTIVITY_VERSION_1_0 0x01 /**< Supports NFC Activity version 1.0. */ #define PHAC_DISCLOOP_NFC_ACTIVITY_VERSION_1_1 0x02 /**< Supports NFC Activity version 1.1. This is default. */ /*@}*/ /** * \name Discovery loop return status codes. */ /*@{*/ /** * Discovery loop failure. * * This status can be returned by \ref phacDiscLoop_Run in poll and listen modes. * This is returned when discovery loop failed to proceed further due to an error * in lower layer. Use \ref phacDiscLoop_GetConfig with #PHAC_DISCLOOP_CONFIG_ADDITIONAL_INFO * to get the actual error code from lower layer. * */ #define PHAC_DISCLOOP_FAILURE 0x0080U /** * Indicates that collision is pending. * * This status is returned by \ref phacDiscLoop_Run in passive poll mode when * collision resolution is disabled or when device limit is set to zero for a * detected technology. * Use \ref phacDiscLoop_GetConfig with #PHAC_DISCLOOP_CONFIG_COLLISION_PENDING * option to get collision pending status for all technologies. * */ #define PHAC_DISCLOOP_COLLISION_PENDING 0x0081U /** * External RF field on. * * This status is returned by \ref phacDiscLoop_Run in passive poll mode when * external RF is detected during RF collision avoidance (RFCA) procedure. On * getting this error application may restart \ref phacDiscLoop_Run in listen * mode if supported. * */ #define PHAC_DISCLOOP_EXTERNAL_RFON 0x0082U /** * External RF field off. * * This status is returned by \ref phacDiscLoop_Run in listen mode if external * RF is switched off during listen. On getting this error application may * restart discovery loop in poll mode or wait for a specific time for external * RF to turn ON. * */ #define PHAC_DISCLOOP_EXTERNAL_RFOFF 0x0083U /** * No technologies detected. * * This status is returned by \ref phacDiscLoop_Run in passive poll mode if no * technologies are detected during detection stage of passive polling. * */ #define PHAC_DISCLOOP_NO_TECH_DETECTED 0x0084U /** * No card/device resolved. * * This status is returned by \ref phacDiscLoop_Run in passive poll mode if no * card/device is resolved during collision resolution stage but that technology * was detected during technology detection stage of passive polling. * */ #define PHAC_DISCLOOP_NO_DEVICE_RESOLVED 0x0085U /** * Low Power Card Detection (LPCD) succeeded but no technologies detected. * * This status is returned by \ref phacDiscLoop_Run in passive poll mode when * LPCD is enabled and LPCD returned success but no technologies were detected * during technology detection stage of passive poll mode. This can be due to * false triggering of LPCD interrupt or LPCD triggered by a card/device not * supported by discovery loop. * */ #define PHAC_DISCLOOP_LPCD_NO_TECH_DETECTED 0x0086U /** * Multiple Technologies detected. * * This status is returned by \ref phacDiscLoop_Run in passive poll mode when * multiple technologies are detected during technology detection stage of * passive poll mode.\n * * To continue with collision resolution stage of one of the detected technology, * application can follow below steps:\n * * - Use \ref phacDiscLoop_GetConfig with #PHAC_DISCLOOP_CONFIG_TECH_DETECTED * to get technologies detected.\n * - Use \ref phacDiscLoop_SetConfig with #PHAC_DISCLOOP_CONFIG_PAS_POLL_TECH_CFG * to configure passive polling for a single technology (one of the detected * technologies).\n * - Use \ref phacDiscLoop_SetConfig with #PHAC_DISCLOOP_CONFIG_NEXT_POLL_STATE * option and #PHAC_DISCLOOP_POLL_STATE_COLLISION_RESOLUTION as value and start * \ref phacDiscLoop_Run to start passive poll mode in collision resolution phase. * */ #define PHAC_DISCLOOP_MULTI_TECH_DETECTED 0x0088U /** * Multiple cards/devices resolved. * * This status is returned by \ref phacDiscLoop_Run in passive poll mode when * multiple cards/devices are resolved during collision resolution stage of * passive poll mode when CON_DEVICES_LIMIT > 1.\n * - Use \ref phacDiscLoop_GetConfig with #PHAC_DISCLOOP_CONFIG_TECH_DETECTED * to get the technology detected.\n * - Use \ref phacDiscLoop_GetConfig with #PHAC_DISCLOOP_CONFIG_NR_TAGS_FOUND * option to get number of devices/tags resolved.\n * - To activate a specific device/card from these resolved, application can use * \ref phacDiscLoop_ActivateCard. * */ #define PHAC_DISCLOOP_MULTI_DEVICES_RESOLVED 0x008AU /** * Single card/device activated. * * This status is returned by \ref phacDiscLoop_Run in passive poll mode when * a single card/device is successfully activated during activation stage.\n * Use \ref phacDiscLoop_GetConfig with #PHAC_DISCLOOP_CONFIG_TECH_DETECTED * to get the technology detected. * */ #define PHAC_DISCLOOP_DEVICE_ACTIVATED 0x008BU /** * Active target activated. * * This status is returned by \ref phacDiscLoop_Run in active poll mode when * a single active target is successfully activated during active polling.\n * Use \ref phacDiscLoop_GetConfig with #PHAC_DISCLOOP_CONFIG_TECH_DETECTED * to get the activated technology. * */ #define PHAC_DISCLOOP_ACTIVE_TARGET_ACTIVATED 0x008CU /** * Passive target activated. * * This status is returned by \ref phacDiscLoop_Run in passive poll mode when * a single passive target is successfully activated during passive polling.\n * Use \ref phacDiscLoop_GetConfig with #PHAC_DISCLOOP_CONFIG_TECH_DETECTED * to get the activated technology. * */ #define PHAC_DISCLOOP_PASSIVE_TARGET_ACTIVATED 0x008DU /** * Merged SEL_RES (Type A) with NFC-DEP and T4T support found. * * This status is returned by \ref phacDiscLoop_Run in passive poll mode when * device/card is successfully activated till ISO 14443-3 and both T4T and * NFC DEP support is detected in SEL_RES/SAK. Then ATR_REQ or RATS is not sent * by discovery loop. On getting this status application can decide whether to * send ATR_REQ or RATS. This status is applicable only to Type A. * */ #define PHAC_DISCLOOP_MERGED_SEL_RES_FOUND 0x008EU /** * Activated in listen mode. * * This status is returned by \ref phacDiscLoop_Run in listen mode when it got * successfully activated in listen mode by another reader/initiator.\n * Application shall check \ref phacDiscLoop_TargetParams to validate the * received request (ATR_REQ/RATS), data rate and framing (active/passive) and * send the response. * */ #define PHAC_DISCLOOP_ACTIVATED_BY_PEER 0x008FU /*@}*/ /** * \name Bit positions for different technologies. * * \brief Application can use these mask values to find the detected technology, * collision pending status, bail out configuration etc.\n * * Example (Check for Type A detection in passive poll mode):\n * - \ref phacDiscLoop_GetConfig (pDataParams, #PHAC_DISCLOOP_CONFIG_TECH_DETECTED, &wTagsDetected)\n * - #PHAC_DISCLOOP_CHECK_ANDMASK (wTagsDetected, #PHAC_DISCLOOP_POS_BIT_MASK_A)\n */ /*@{*/ #define PHAC_DISCLOOP_POS_BIT_MASK_A 0x01U /**< Position bit mask for Type A. */ #define PHAC_DISCLOOP_POS_BIT_MASK_B 0x02U /**< Position bit mask for Type B. */ #define PHAC_DISCLOOP_POS_BIT_MASK_F212 0x04U /**< Position bit mask for Type F212. */ #define PHAC_DISCLOOP_POS_BIT_MASK_F424 0x08U /**< Position bit mask for Type F424. */ #define PHAC_DISCLOOP_POS_BIT_MASK_V 0x10U /**< Position bit mask for Type V. */ #define PHAC_DISCLOOP_POS_BIT_MASK_18000P3M3 0x20U /**< Position bit mask for ISO 18000P3M3. */ /*@}*/ /** * \name Bit positions for active poll mode technologies. * * \brief Application can use these mask values to find the detected technology * in active poll mode and to configure technologies to be detected in active * poll mode.\n * * Example (Check for Active @ 106 kbps detection):\n * - \ref phacDiscLoop_GetConfig (pDataParams, #PHAC_DISCLOOP_CONFIG_TECH_DETECTED, &wTagsDetected)\n * - #PHAC_DISCLOOP_CHECK_ANDMASK (wTagsDetected, #PHAC_DISCLOOP_ACT_POS_BIT_MASK_106)\n */ /*@{*/ #define PHAC_DISCLOOP_ACT_POS_BIT_MASK_106 0x01U /**< 106 Kbps Bit rate for Active Communication. */ #define PHAC_DISCLOOP_ACT_POS_BIT_MASK_212 0x02U /**< 212 Kbps Bit rate for Active Communication. */ #define PHAC_DISCLOOP_ACT_POS_BIT_MASK_424 0x04U /**< 424 Kbps Bit rate for Active Communication. */ /*@}*/ /** * \name FELICA data rates. */ /*@{*/ #define PHAC_DISCLOOP_CON_BITR_212 PHAC_DISCLOOP_POS_BIT_MASK_F212 /**< Configures 212 Kbps bit rate for Type F tag. */ #define PHAC_DISCLOOP_CON_BITR_424 PHAC_DISCLOOP_POS_BIT_MASK_F424 /**< Configures 424 Kbps bit rate for Type F tag. */ /*@}*/ /** * \name Type A default parameters. */ /*@{*/ #define PHAC_DISCLOOP_I3P3A_MAX_ATQA_LENGTH 0x02U /**< Answer to RequestA (ATQA) length for ISO 14443-3A card type. */ #define PHAC_DISCLOOP_I3P3A_MAX_UID_LENGTH 0x0AU /**< Maximum UID length for 14443 Type A compliant tags. */ #define PHAC_DISCLOOP_I3P3A_SINGLE_SIZE_UID_LENGTH 0x04U /**< UID length for single size NFCID1 Type A compliant tags. */ #define PHAC_DISCLOOP_I3P3A_DOUBLE_SIZE_UID_LENGTH 0x07U /**< UID length for double size NFCID1 Type A compliant tags. */ #define PHAC_DISCLOOP_I3P3A_TRIPLE_SIZE_UID_LENGTH 0x0AU /**< UID length for triple size NFCID1 Type A compliant tags. */ #define PHAC_DISCLOOP_JEWEL_HR_LENGTH 0x02U /**< Type 1 Tag Header ROM byte length. */ /*@}*/ /** * \name Type B default parameters. */ /*@{*/ #define PHAC_DISCLOOP_I3P3B_PUPI_LENGTH 0x04U /**< Device Identifier length for Type B tag. */ #define PHAC_DISCLOOP_I3P3B_MAX_ATQB_LENGTH 13U /**< Maximum Answer to RequestB (ATQB) Response length. */ /*@}*/ /** * \name Type F default parameters. */ /*@{*/ #define PHAC_DISCLOOP_FELICA_IDM_LENGTH 0x08U /**< Manufacture ID (IDM) Length for FELICA. */ #define PHAC_DISCLOOP_FELICA_PMM_LENGTH 0x08U /**< Manufacturer Parameter (PMm) length for FELICA. */ #define PHAC_DISCLOOP_FELICA_RD_LENGTH 0x02U /**< Request Data (RD) length for Felica SENSF_RES. */ /*@}*/ /** * \name Select Acknowledge (SAK) mask values for different Type A tags. * \brief Application can use these mask values to detect the Type of tag * from the SAK value. * * Usage: \verbatim bTagType = (phacDiscLoop_Sw_DataParams->sTypeATargetInfo.aTypeA_I3P3[0].aSak & 0x60); bTagType = bTagType >> 5; switch(bTagType) { case PHAC_DISCLOOP_TYPEA_TYPE2_TAG_CONFIG_MASK: printf("\n\t\tType: Type 2 Tag\n"); break; case PHAC_DISCLOOP_TYPEA_TYPE4A_TAG_CONFIG_MASK: printf ("\n\t\tType: Type 4A Tag\n"); break; case PHAC_DISCLOOP_TYPEA_TYPE_NFC_DEP_TAG_CONFIG_MASK: printf ("\n\t\tType: P2P\n"); break; case PHAC_DISCLOOP_TYPEA_TYPE_NFC_DEP_TYPE4A_TAG_CONFIG_MASK: printf ("\n\t\tType: Type NFC_DEP and 4A Tag\n"); break; default: break; } \endverbatim */ /*@{*/ #define PHAC_DISCLOOP_TYPEA_T1T_ATQA1_MASK 0x1FU /**< Mask for Type 1 tag ATQA Byte 1. */ #define PHAC_DISCLOOP_TYPEA_T1T_ATQA2_MASK 0x0FU /**< Mask for determining whether a Type A tag is Type 1. Used along with byte 2 of ATQA. */ #define PHAC_DISCLOOP_TYPEA_TYPE2_TAG_CONFIG_MASK 0x00U /**< Mask for determining for Type 2 tag. */ #define PHAC_DISCLOOP_TYPEA_TYPE4A_TAG_CONFIG_MASK 0x01U /**< Mask for determining for Type 4A tag. */ #define PHAC_DISCLOOP_TYPEA_TYPE_NFC_DEP_TAG_CONFIG_MASK 0x02U /**< Mask for determining for NFC DEP Protocol. */ #define PHAC_DISCLOOP_TYPEA_TYPE_NFC_DEP_TYPE4A_TAG_CONFIG_MASK 0x03U /**< Mask for determining support for Type 4A and NFC DEP Protocol. */ /*@}*/ /** * \name Macros for checking set bit and set bit position. */ /*@{*/ /** * Logically AND value and mask, if the corresponding bit is set, then non * zero value is returned else zero is returned. * * Application can use this to check the detection technologies. * * Example (Check for Type B):\n * - \ref phacDiscLoop_GetConfig (pDataParams, #PHAC_DISCLOOP_CONFIG_TECH_DETECTED, &wTagsDetected)\n * - PHAC_DISCLOOP_CHECK_ANDMASK(wTagsDetected, #PHAC_DISCLOOP_POS_BIT_MASK_B)\n * */ #define PHAC_DISCLOOP_CHECK_ANDMASK(value, mask) \ (((value) & (mask)) != 0) /** * Get the first set bit position starting from least significant bit. * * Application can use this to check the bit position of detected technology. * * Example (Activation of device/tag at index 0, when \ref phacDiscLoop_Run * returns #PHAC_DISCLOOP_MULTI_DEVICES_RESOLVED):\n * - \ref phacDiscLoop_GetConfig (pDataParams, #PHAC_DISCLOOP_CONFIG_TECH_DETECTED, &wTagsDetected);\n * - PHAC_DISCLOOP_GET_BIT_POS(wTagsDetected, bTechType);\n * - \ref phacDiscLoop_ActivateCard (pDataParams, (bTechType - 1), 0); * */ #define PHAC_DISCLOOP_GET_BIT_POS(x , pos) \ { \ (pos) = 0; \ while((x)){ (x) >>= 1; ++(pos); } \ if ((pos) == 0) {return (PH_ERR_INTERNAL_ERROR);} \ } /*@}*/ /** * \brief Reader Library Profiles. * * This will be set and handled by the application. */ typedef enum phacDiscLoop_Profile{ PHAC_DISCLOOP_PROFILE_UNKNOWN = 0, /**< Unknown. */ PHAC_DISCLOOP_PROFILE_NFC, /**< NFC Forum Profile. */ PHAC_DISCLOOP_PROFILE_EMVCO, /**< EMVCo Profile. */ PHAC_DISCLOOP_PROFILE_ISO, /**< ISO Profile. */ PHAC_DISCLOOP_PROFILE_NFC_AND_ACTIVE /**< NFC Forum and Active Profile. */ }phacDiscLoop_Profile_t; /** * \brief Discovery loop poll states to start with while in passive poll mode.\n * * Use \ref phacDiscLoop_SetConfig with #PHAC_DISCLOOP_CONFIG_NEXT_POLL_STATE * option to configure these states. Default discovery loop starts with * #PHAC_DISCLOOP_POLL_STATE_DETECTION in passive poll mode. */ typedef enum phacDiscLoop_Sw_PollState{ PHAC_DISCLOOP_POLL_STATE_UNKNOWN = 0, /**< Unknown. */ PHAC_DISCLOOP_POLL_STATE_DETECTION, /**< Starts passive poll mode in Technology Detection stage. */ PHAC_DISCLOOP_POLL_STATE_COLLISION_RESOLUTION, /**< Starts passive poll mode in Collision Resolution stage. */ PHAC_DISCLOOP_POLL_STATE_REMOVAL /**< Starts passive poll mode in Card Removal stage (Only for EMVCo mode). */ }phacDiscLoop_Sw_PollState_t; /** * \brief Discovery entry points.\n * * This is an input parameter to \ref phacDiscLoop_Run. */ typedef enum phacDiscLoop_Sw_EntryPoints{ PHAC_DISCLOOP_ENTRY_POINT_POLL = 0, /**< Starts discovery loop in poll mode. */ PHAC_DISCLOOP_ENTRY_POINT_LISTEN /**< Starts discovery loop in listen mode. */ }phacDiscLoop_Sw_EntryPoints_t; /** * \brief Technology bit position / sequence.\n */ typedef enum phacDiscLoop_Sw_NfcTech{ PHAC_DISCLOOP_TECH_TYPE_A = 0, /**< Type A bit position. */ PHAC_DISCLOOP_TECH_TYPE_B, /**< Type B bit position. */ PHAC_DISCLOOP_TECH_TYPE_F212, /**< Type F @ 212 kbps bit position. */ PHAC_DISCLOOP_TECH_TYPE_F424, /**< Type F @ 424 kbps bit position. */ PHAC_DISCLOOP_TECH_TYPE_V, /**< Type V bit position. */ PHAC_DISCLOOP_TECH_TYPE_18000P3M3, /**< 18000P3M3 bit position. */ PHAC_DISCLOOP_TECH_TYPE_UNKNOWN /**< Unknown. */ }phacDiscLoop_Sw_NfcTech_t; /** * \brief Type A parameter structure */ typedef struct phacDiscLoop_Sw_TypeA_Info { uint8_t bTotalTagsFound; /**< Number of type A tags found. */ /** Flag to indicate detected tag is T1T Tag in NFC profile, could be any jewel tag in other profile */ uint8_t bT1TFlag; /** Structure info required for ISO/IEC 14443 communication */ #ifdef NXPBUILD__PHAC_DISCLOOP_TYPEA_TAGS struct phacDiscLoop_TypeA_I3P3 { uint8_t aAtqa[PHAC_DISCLOOP_I3P3A_MAX_ATQA_LENGTH]; /**< ATQA received from ISO/IEC 14443A compliant device. */ uint8_t aUid[PHAC_DISCLOOP_I3P3A_MAX_UID_LENGTH]; /**< Contains known UID bytes for the given cascade level. */ uint8_t bUidSize; /**< Size of the UID that was received from the PICC. */ uint8_t aSak; /**< Select acknowledge from the ISO/IEC 14443A type A card. */ }aTypeA_I3P3[PHAC_DISCLOOP_CFG_MAX_CARDS_SUPPORTED]; #endif /* NXPBUILD__PHAC_DISCLOOP_TYPEA_TAGS */ #if defined(NXPBUILD__PHAC_DISCLOOP_TYPEA_P2P_TAGS) || defined(NXPBUILD__PHAC_DISCLOOP_TYPEA_P2P_ACTIVE) /** Structure holding information on Type A P2P activation/communication */ struct phacDiscLoop_Type_P2P_TAGS { uint8_t bDid; /**< Device ID (DID) for ISO/IEC 18092 Initiator ATR command. */ uint8_t bLri; /**< Length reduction for ISO/IEC 18092 initiator. */ uint8_t bNadEnable; /**< Indicates whether Node Address (NAD) is enabled or not. */ uint8_t bNad; /**< Node address. Ignored if \a bNadEnabled is zero. */ uint8_t *pGi; /**< General bytes information. \a User should populate with appropriate address if \a bGiLength in non zero. */ uint8_t bGiLength; /**< Length of the general bytes. Should be zero if general bytes are not used. */ uint8_t *pAtrRes; /**< Attribute response; uint8_t[64]. */ uint8_t bAtrResLength; /**< Length of the ATR response. */ }sTypeA_P2P; #endif #ifdef NXPBUILD__PHAC_DISCLOOP_TYPEA_I3P4_TAGS /** Structure info required for ISO/IEC 14443-4 communication */ struct phascDiscLoop_TypeA_I3P4 { uint8_t bFsdi; /**< Frame size integer. */ uint8_t bCid; /**< Card identifier. */ uint8_t bNad; /**< Node ADdress. */ uint8_t bDri; /**< Data Rate received by Initiator. */ uint8_t bDsi; /**< Data Rate send by Initiator. */ uint8_t * pAts; /**< Holds the answer to select response. */ }sTypeA_I3P4; #endif /* NXPBUILD__PHAC_DISCLOOP_TYPEA_I3P4_TAGS */ } phacDiscLoop_Sw_TypeA_Info_t; /** * \brief Type B parameter structure */ typedef struct phacDiscLoop_Sw_TypeB_Info { uint8_t bTotalTagsFound; /**< Number of type B tags found. */ uint8_t bAfiReq; /**< Application file Identifier. */ uint8_t bExtendedAtqBbit; /**< For coding b5 of PARAM of REQB: b5=1 extended ATQB supported. */ uint8_t bAdvFeaturesBit; /**< For coding b6 of PARAM of REQB: b6=1 advanced features supported (NFC Forum). */ uint8_t bFsdi; /**< Frame size integer. Valid values: 0-8. */ uint8_t bCid; /**< Card identifier. Valid values 0-14. */ uint8_t bNad; /**< Node ADdress. */ uint8_t bDri; /**< Data Rate receive (PICC --> PCD) integer. Valid values: 0-3. */ uint8_t bDsi; /**< Data Rate send (PCD --> PICC) integer. Valid values: 0-3. */ /** Structure for Type B (ISO/IEC 14443-B) tags */ struct phacDiscLoop_TypeB_I3P3B { uint8_t aPupi[PHAC_DISCLOOP_I3P3B_PUPI_LENGTH]; /**< ISO/IEC 14443-3B Pseudo Unique PICC identifier. */ uint8_t aAtqB[PHAC_DISCLOOP_I3P3B_MAX_ATQB_LENGTH]; /**< ATQB received from ISO/IEC 14443-3B compliant device. */ uint8_t bAtqBLength; /**< Length of the ATQB response. */ uint8_t bSupportType4B; /**< Indicates activated TypeB tag supports Type 4B Tag Platform or not. */ } aTypeB_I3P3[PHAC_DISCLOOP_CFG_MAX_CARDS_SUPPORTED]; #ifdef NXPBUILD__PHAC_DISCLOOP_TYPEB_I3P4B_TAGS /** Type B ISO/IEC 14443-4B tag structure. */ struct phacDiscLoop_TypeB_I3P4B { uint8_t bMbli; /**< Maximum Buffer Length Index (MBLI) is available on bits [3:0]. */ uint8_t bParam1; /**< Param1 for type B Attrib: \n Bit 2 ... SOF \n Bit 3 ... EOF \n Bit 4-5 ... Minimum TR1 \n Bit 6-7 ... Minimum TR0. \n */ } sTypeB_I3P4; #endif /* NXPBUILD__PHAC_DISCLOOP_TYPEB_I3P4B_TAGS */ } phacDiscLoop_Sw_TypeB_Info_t; /** * \brief Type F parameter structure */ typedef struct phacDiscLoop_Sw_TypeF_Info { uint8_t bTotalTagsFound; /**< Number of type F tags found. */ uint8_t aSystemCode[2]; /**< System code. */ uint8_t bTimeSlot; /**< Maximum number of time slots. */ struct phacDiscLoop_TypeF_Tag_Info { uint8_t aIDmPMm[PHAC_DISCLOOP_FELICA_IDM_LENGTH + PHAC_DISCLOOP_FELICA_PMM_LENGTH]; /**< Manufacture ID + PMm. */ uint8_t aRD[2]; /**< Request Data received as response to Felica polling command. */ uint8_t bBaud; /**< Baud rate which card support. */ }aTypeFTag[PHAC_DISCLOOP_CFG_MAX_CARDS_SUPPORTED]; #if defined(NXPBUILD__PHAC_DISCLOOP_TYPEF_P2P_TAGS) || defined(NXPBUILD__PHAC_DISCLOOP_TYPEF212_P2P_ACTIVE) || defined(NXPBUILD__PHAC_DISCLOOP_TYPEF424_P2P_ACTIVE) /** Structure holding information for Type F P2P communication */ struct phacDiscLoop_TypeF_P2P_Info { uint8_t bDid; /**< Device identifier. Disabled if set to 0 else should have a value between 1-14. */ uint8_t bLri; /**< Length reduction of Initiator. Should be a value in range 0-3. */ uint8_t bNadEnable; /**< Enable usage of node address. If set to zero NAD is disabled. */ uint8_t bNad; /**< Node address. */ uint8_t *pGi; /**< Optional general bytes. */ uint8_t bGiLength; /**< Length of the optional bytes. */ uint8_t *pAtrRes; /**< Pointer to the Attribute response. */ uint8_t bAtrResLength; /**< Attribute response length. */ }sTypeF_P2P; #endif } phacDiscLoop_Sw_TypeF_Info_t; /** * \brief Type V parameter structure */ typedef struct phacDiscLoop_Sw_TypeV_Info { uint8_t bTotalTagsFound; /**< Number of type V (ISO 15693) tags found. */ uint8_t bFlag; /**< Request flags byte. */ struct phacDiscLoop_TypeV { uint8_t bDsfid; /**< [Out] Data Storage Format Identifier. */ uint8_t aUid[8]; /**< [Out] UID Received from card */ }aTypeV[PHAC_DISCLOOP_CFG_MAX_VICINITY_CARDS_SUPPORTED]; }phacDiscLoop_Sw_TypeV_Info_t; /** * \brief 18000p3m3 parameter structure */ typedef struct phacDiscLoop_I18000p3m3_Info { uint8_t bTotalTagsFound; /**< Holds the number of tags detected */ uint8_t bM; /**< Modulation; default #PHPAL_I18000P3M3_M_MANCHESTER_4 */ uint8_t bDr; /**< Link frequency; default #PHPAL_I18000P3M3_LF_847KHZ */ struct phacDiscLoop_I18000p3m3 { uint8_t aUii[58]; /**< ACK response from each tag */ uint16_t wUiiLength; /**< UII length in bits */ }aI18000p3m3[PHAC_DISCLOOP_CFG_MAX_VICINITY_CARDS_SUPPORTED]; }phacDiscLoop_I18000p3m3_Info_t; /** * \brief Target parameter structure */ typedef struct phacDiscLoop_TargetParams { uint8_t * pRxBuffer; /**< Pointer to the Receive Buffer. */ uint16_t wRxBufferLen; /**< Length of Data Present in Receive Buffer. */ uint16_t wProtParams; /**< Frame mode and RX speed information. */ uint8_t bRetryCount; /**< Retry count for AUTOCOLL in case of failure. Default is 0. */ }phacDiscLoop_Sw_TargetParams_t; /** * \brief Discovery loop parameter structure */ typedef struct phacDiscLoop_Sw_DataParams { /** * ID for this component, not to be modified. * * This is initialized with #PHAC_DISCLOOP_SW_ID in the initialization * function \ref phacDiscLoop_Sw_Init. This is used for validating the data * parameter structure and to make sure that discovery loop APIs are * called after initialization. * */ uint16_t wId; /** * Technologies to poll for in passive mode. * * #PHAC_DISCLOOP_POS_BIT_MASK_A -> Detect Type A.\n * #PHAC_DISCLOOP_POS_BIT_MASK_B -> Detect Type B.\n * #PHAC_DISCLOOP_POS_BIT_MASK_F212 -> Detect Type FELICA @ 212 kbps.\n * #PHAC_DISCLOOP_POS_BIT_MASK_F424 -> Detect Type FELICA @ 424 kbps.\n * #PHAC_DISCLOOP_POS_BIT_MASK_V -> Detect Type V / ISO 15693.\n * #PHAC_DISCLOOP_POS_BIT_MASK_18000P3M3 -> Detect ISO 18000p3m3/ EPC Gen2.\n * * Use \ref phacDiscLoop_SetConfig with #PHAC_DISCLOOP_CONFIG_PAS_POLL_TECH_CFG * option to configure above values. * */ uint8_t bPasPollTechCfg; /** * Technologies to poll for in active mode. * * #PHAC_DISCLOOP_ACT_POS_BIT_MASK_106 -> Detect active target @ 106 kbps\n * #PHAC_DISCLOOP_ACT_POS_BIT_MASK_212 -> Detect active target @ 212 kbps\n * #PHAC_DISCLOOP_ACT_POS_BIT_MASK_424 -> Detect active target @ 424 kbps\n * * Use \ref phacDiscLoop_SetConfig with #PHAC_DISCLOOP_CONFIG_ACT_POLL_TECH_CFG * option to configure above values. * */ uint8_t bActPollTechCfg; /** * Bail out for various technologies in Passive mode. * * #PHAC_DISCLOOP_POS_BIT_MASK_A -> Bail out for Type A.\n * #PHAC_DISCLOOP_POS_BIT_MASK_B -> Bail out for Type B.\n * #PHAC_DISCLOOP_POS_BIT_MASK_F212 -> Bail out for Type FELICA @ 212 kbps.\n * #PHAC_DISCLOOP_POS_BIT_MASK_F424 -> Bail out for Type FELICA @ 424 kbps.\n * #PHAC_DISCLOOP_POS_BIT_MASK_V -> Bail out for Type V / ISO 15693.\n * #PHAC_DISCLOOP_POS_BIT_MASK_18000P3M3 -> Bail out for ISO 18000p3m3/ EPC Gen2.\n * * Use \ref phacDiscLoop_SetConfig with #PHAC_DISCLOOP_CONFIG_BAIL_OUT option * to configure above values. * */ uint8_t bPasPollBailOut; /** * Technologies to listen for in passive listen mode. * * #PHAC_DISCLOOP_POS_BIT_MASK_A -> Listen for Type A.\n * #PHAC_DISCLOOP_POS_BIT_MASK_B -> Listen for Type B. [Reserved. Not supported currently] \n * #PHAC_DISCLOOP_POS_BIT_MASK_F212 -> Listen for Type FELICA @ 212 kbps.\n * #PHAC_DISCLOOP_POS_BIT_MASK_F424 -> Listen for Type FELICA @ 424 kbps.\n * #PHAC_DISCLOOP_POS_BIT_MASK_V -> Listen for Type V / ISO 15693.[Reserved. Not supported currently]\n * #PHAC_DISCLOOP_POS_BIT_MASK_18000P3M3 -> Listen for ISO 18000p3m3/ EPC Gen2.[Reserved. Not supported currently]\n * * Use \ref phacDiscLoop_SetConfig with #PHAC_DISCLOOP_CONFIG_PAS_LIS_TECH_CFG * option to configure above values. * */ uint8_t bPasLisTechCfg; /** * Technologies to listen for in active listen mode. * * #PHAC_DISCLOOP_POS_BIT_MASK_A -> Listen for Type A.\n * #PHAC_DISCLOOP_POS_BIT_MASK_B -> Listen for Type B.[Reserved. Not supported currently] \n * #PHAC_DISCLOOP_POS_BIT_MASK_F212 -> Listen for Type FELICA @ 212 kbps.\n * #PHAC_DISCLOOP_POS_BIT_MASK_F424 -> Listen for Type FELICA @ 424 kbps.\n * #PHAC_DISCLOOP_POS_BIT_MASK_V -> Listen for Type V / ISO 15693.[Reserved. Not supported currently]\n * #PHAC_DISCLOOP_POS_BIT_MASK_18000P3M3 -> Listen for ISO 18000p3m3/ EPC Gen2.[Reserved. Not supported currently]\n * * Use \ref phacDiscLoop_SetConfig with #PHAC_DISCLOOP_CONFIG_ACT_LIS_TECH_CFG * option to configure above values. * */ uint8_t bActLisTechCfg; /** * Discovery loop stage to start with while in poll mode. * * #PHAC_DISCLOOP_POLL_STATE_DETECTION -> Start with detection phase as per NFC Forum Activity Specification.\n * #PHAC_DISCLOOP_POLL_STATE_COLLISION_RESOLUTION -> Start with collision resolution as per NFC Forum Activity Specification.\n * #PHAC_DISCLOOP_POLL_STATE_REMOVAL -> Start with card removal phase (in EMVCo mode).\n * * When \ref phacDiscLoop_Run gives #PHAC_DISCLOOP_MULTI_TECH_DETECTED in poll mode, application * shall select one technology and start poll mode again in collision resolution state. * * Use \ref phacDiscLoop_SetConfig with #PHAC_DISCLOOP_CONFIG_NEXT_POLL_STATE * option to configure above states. * */ phacDiscLoop_Sw_PollState_t bPollState; /** * Contains device limits for different technologies in passive poll mode. * * #PHAC_DISCLOOP_CONFIG_TYPEA_DEVICE_LIMIT -> Device limit for Type A.\n * #PHAC_DISCLOOP_CONFIG_TYPEB_DEVICE_LIMIT -> Device limit for Type B.\n * #PHAC_DISCLOOP_CONFIG_TYPEF_DEVICE_LIMIT -> Device limit for Type F.\n * #PHAC_DISCLOOP_CONFIG_TYPEV_DEVICE_LIMIT -> Device limit for Type V.\n * #PHAC_DISCLOOP_CONFIG_18000P3M3_DEVICE_LIMIT -> Device limit for ISO 18000p3m3/ EPC Gen2.\n * * Use \ref phacDiscLoop_SetConfig with above options to configure device limit. * Maximum device limit is #PHAC_DISCLOOP_CFG_MAX_CARDS_SUPPORTED. * */ uint8_t baPasConDevLim[PHAC_DISCLOOP_PASS_POLL_MAX_TECHS_SUPPORTED]; /** * Contains guard times for different technologies in passive poll mode. * * #PHAC_DISCLOOP_CONFIG_GTA_VALUE_US -> Guard time for Type A.\n * #PHAC_DISCLOOP_CONFIG_GTB_VALUE_US -> Guard time for Type B.\n * #PHAC_DISCLOOP_CONFIG_GTFB_VALUE_US -> Guard time for Type F. Guard time is applied when polling for Type B is preceded by polling for Type F.\n * #PHAC_DISCLOOP_CONFIG_GTBF_VALUE_US -> Guard time for Type F. Guard time is applied when polling for Type F is preceded by polling for Type B.\n * #PHAC_DISCLOOP_CONFIG_GTV_VALUE_US -> Guard time for Type V.\n * #PHAC_DISCLOOP_CONFIG_GT18000P3M3_VALUE_US -> Guard time for ISO 18000p3m3/ EPC Gen2.\n * * Use \ref phacDiscLoop_SetConfig with above options to configure guard time. * */ uint16_t waPasPollGTimeUs[PHAC_DISCLOOP_PASS_POLL_MAX_TECHS_SUPPORTED]; /** * Contains guard times for different technologies in Active poll mode. * * #PHAC_DISCLOOP_CONFIG_GT_ACTIVE_US -> Guard time for Active mode polling * Default value is 5100 micro seconds. * * Use \ref phacDiscLoop_SetConfig with above options to configure guard time. * */ uint16_t wActPollGTimeUs; /** * Flag to indicate whether collision is pending or not. * * #PHAC_DISCLOOP_POS_BIT_MASK_A -> Type A.\n * #PHAC_DISCLOOP_POS_BIT_MASK_B -> Type B.\n * #PHAC_DISCLOOP_POS_BIT_MASK_F212 -> FELICA @ 212 kbps.\n * #PHAC_DISCLOOP_POS_BIT_MASK_F424 -> FELICA @ 424 kbps.\n * #PHAC_DISCLOOP_POS_BIT_MASK_V -> Type V / ISO 15693.\n * #PHAC_DISCLOOP_POS_BIT_MASK_18000P3M3 -> ISO 18000p3m3/ EPC Gen2.\n * * Use \ref phacDiscLoop_GetConfig with #PHAC_DISCLOOP_CONFIG_COLLISION_PENDING * option to get collision pending status. * */ uint8_t bCollPend; /** * Enable/Disable Low Power Card Detection. * * Use \ref phacDiscLoop_SetConfig with #PHAC_DISCLOOP_CONFIG_ENABLE_LPCD option * to #PH_ON / #PH_OFF LPCD. * */ uint8_t bLpcdEnabled; /** * Enable/Disable anti-collision for Type A for passive poll mode. * * Use \ref phacDiscLoop_SetConfig with #PHAC_DISCLOOP_CONFIG_ANTI_COLL option * to #PH_ON / #PH_OFF anti-collision. * */ uint8_t bUseAntiColl; /** * Operation mode of discovery loop. * * #RD_LIB_MODE_EMVCO -> Run in EMVCO mode as per the EMVCo 2.5 Digital specification.\n * #RD_LIB_MODE_NFC -> Run in NFC mode as per NFC Forum Activity Specification 1.1. This is the default mode.\n * * Use \ref phacDiscLoop_SetConfig with #PHAC_DISCLOOP_CONFIG_OPE_MODE option * to configure above modes. * */ uint8_t bOpeMode; /** * Number of cards detected in passive poll mode. * * Use \ref phacDiscLoop_GetConfig with #PHAC_DISCLOOP_CONFIG_NR_TAGS_FOUND * option to get number of tags. * */ uint8_t bNumOfCards; /** * Current FELICA baud rate. * */ uint8_t bFelicaBaud; /** * Supported NFC Activity version. * * #PHAC_DISCLOOP_NFC_ACTIVITY_VERSION_1_0 -> Run in NFC Forum Activity 1.0 mode.\n * #PHAC_DISCLOOP_NFC_ACTIVITY_VERSION_1_1 -> Run in NFC Forum Activity 1.1 mode. This is the default.\n * * Use \ref phacDiscLoop_SetConfig with #PHAC_DISCLOOP_CONFIG_ACTIVITY_VERSION * option to configure above modes. * */ uint8_t bNfcActivityVersion; /** * Detected technologies during poll mode. * * Passive technologies:\n * #PHAC_DISCLOOP_POS_BIT_MASK_A -> Detected Type A.\n * #PHAC_DISCLOOP_POS_BIT_MASK_B -> Detected Type B.\n * #PHAC_DISCLOOP_POS_BIT_MASK_F212 -> Detected FELICA @ 212 kbps.\n * #PHAC_DISCLOOP_POS_BIT_MASK_F424 -> Detected FELICA @ 424 kbps.\n * #PHAC_DISCLOOP_POS_BIT_MASK_V -> Detected Type V / ISO 15693.\n * #PHAC_DISCLOOP_POS_BIT_MASK_18000P3M3 -> Detected ISO 18000p3m3/ EPC Gen2.\n * * Active technologies:\n * #PHAC_DISCLOOP_ACT_POS_BIT_MASK_106 -> Detected active target @ 106 kbps.\n * #PHAC_DISCLOOP_ACT_POS_BIT_MASK_212 -> Detected active target @ 212 kbps.\n * #PHAC_DISCLOOP_ACT_POS_BIT_MASK_424 -> Detected active target @ 424 kbps.\n * * Use \ref phacDiscLoop_GetConfig with #PHAC_DISCLOOP_CONFIG_TECH_DETECTED * option to get detected technologies. * */ uint8_t bDetectedTechs; /** * Hold error received from lower layer when \ref phacDiscLoop_Run returns #PHAC_DISCLOOP_FAILURE. * * Use \ref phacDiscLoop_GetConfig with #PHAC_DISCLOOP_CONFIG_ADDITIONAL_INFO * option to get error from lower layer. * */ phStatus_t wErrorCode; /** * Pointer to the HAL data parameter. * * Application should initialize this pointer with address of HAL data * parameter structure. * */ void * pHalDataParams; /** * Pointer to the 14443P3A layer PAL data parameter. * * Application should initialize this pointer with address of 14443P3A PAL * data parameter structure. * */ void * pPal1443p3aDataParams; /** * Pointer to the Felica PAL data parameter. * * Application should initialize this pointer with address of Felica PAL * data parameter structure. * */ void * pPalFelicaDataParams; /** * Pointer to the 14443P3B PAL data parameter. * * Application should initialize this pointer with address of 14443P3B PAL * data parameter structure. * */ void * pPal1443p3bDataParams; /** * Pointer to the 14443P4 PAL data parameter. * * Application should initialize this pointer with address of 14443P4 PAL * data parameter structure. * */ void * pPal14443p4DataParams; /** * Pointer to the 14443P4A PAL data parameter. * * Application should initialize this pointer with address of 14443P4A PAL * data parameter structure. * */ void * pPal1443p4aDataParams; /** * Pointer to the 15693 PAL data parameter. * * Application should initialize this pointer with address of 15693 PAL * data parameter structure. * */ void * pPalSli15693DataParams; /** * Pointer to the 18000P3M3 PAL data parameter. * * Application should initialize this pointer with address of 18000P3M3 PAL * data parameter structure. * */ void * pPal18000p3m3DataParams; /** * Pointer to the 18000P3M3 AL data parameter. * * Application should initialize this pointer with address of 18000P3M3 AL * data parameter structure. * */ void * pAl18000p3m3DataParams; /** * Pointer to 18092MPI PAL data parameter. * * Application should initialize this pointer with address of 18092MPI PAL * data parameter structure. * */ void * pPal18092mPIDataParams; /** * Pointer to T1T AL data parameter. * * Application should initialize this pointer with address of T1T AL data * parameter structure. * */ void * pAlT1TDataParams; #if defined(NXPBUILD__PHAC_DISCLOOP_TYPEA_TAGS) || defined(NXPBUILD__PHAC_DISCLOOP_TYPEA_P2P_ACTIVE) /** * Information gathered from TYPE A devices/tags in poll mode. * * Application can access this directly to get information like UID, UID size, * SAK etc. of all Type A devices/tags detected in poll mode. * */ phacDiscLoop_Sw_TypeA_Info_t sTypeATargetInfo; #endif /* NXPBUILD__PHAC_DISCLOOP_TYPEA_TAGS */ #if defined(NXPBUILD__PHAC_DISCLOOP_TYPEF_TAGS) || defined(NXPBUILD__PHAC_DISCLOOP_TYPEF212_P2P_ACTIVE) || defined(NXPBUILD__PHAC_DISCLOOP_TYPEF424_P2P_ACTIVE) /** * Information gathered from TYPE F devices/tags in poll mode. * * Application can access this directly to get information like ID, Baud rate, * etc. of all Type F devices/tags detected in poll mode. * */ phacDiscLoop_Sw_TypeF_Info_t sTypeFTargetInfo; #endif /* NXPBUILD__PHAC_DISCLOOP_TYPEF_TAGS */ #ifdef NXPBUILD__PHAC_DISCLOOP_TYPEB_TAGS /** * Information gathered from TYPE B devices/tags in poll mode. * * Application can access this directly to get information like PUPI, ATQB, * ATQB length etc. of all Type B devices/tags detected in poll mode. * */ phacDiscLoop_Sw_TypeB_Info_t sTypeBTargetInfo; #endif /* NXPBUILD__PHAC_DISCLOOP_TYPEB_TAGS */ #ifdef NXPBUILD__PHAC_DISCLOOP_TYPEV_TAGS /** * Information gathered from TYPE V (15693) devices/tags in poll mode. * * Application can access this directly to get information like UID, DSFID, * etc. of all Type V devices/tags detected in poll mode. * */ phacDiscLoop_Sw_TypeV_Info_t sTypeVTargetInfo; #endif /* NXPBUILD__PHAC_DISCLOOP_TYPEV_TAGS */ #ifdef NXPBUILD__PHAC_DISCLOOP_I18000P3M3_TAGS /** * Information gathered from 18000P3M3 devices/tags in poll mode. * * Application can access this directly to get information like StoredCRC, * etc. of all 18000P3M3 devices/tags detected in poll mode. * */ phacDiscLoop_I18000p3m3_Info_t sI18000p3m3TargetInfo; #endif /* NXPBUILD__PHAC_DISCLOOP_I18000P3M3_TAGS */ #ifdef NXPBUILD__PHAC_DISCLOOP_TARGET /** * Information gathered from listen mode. * * Application can access this directly to get information like Request * received, Request length etc. from AUTOCOLL in listen mode. * */ phacDiscLoop_Sw_TargetParams_t sTargetParams; #endif /* NXPBUILD__PHAC_DISCLOOP_TARGET */ }phacDiscLoop_Sw_DataParams_t; /** * \brief Initialize discovery loop. * \anchor initialization * This should be called before using any of the discovery loop functions to do * the initialization of discovery loop component. This configures discovery loop * with default configurations. Refer \ref configurations "configuration options" * for supported configurations and their default values. * * \return Status code * \retval #PH_ERR_SUCCESS Operation successful. * \retval #PH_ERR_INVALID_PARAMETER Invalid option/response received. * \retval other Other Depending on implementation and underlying component. */ phStatus_t phacDiscLoop_Sw_Init( phacDiscLoop_Sw_DataParams_t * pDataParams, /**< [In] Pointer to discovery loop parameter structure. */ uint16_t wSizeOfDataParams, /**< [In] Specifies the size of the discovery data parameter structure. */ void * pHalDataParams /**< [In] Pointer to HAL parameter structure. */ ); /** @} */ #endif /* NXPBUILD__PHAC_DISCLOOP_SW */ #ifdef NXPBUILD__PHAC_DISCLOOP /** \defgroup phacDiscLoop Discovery Loop * \brief Discovery loop component as per NFC Forum Activity Specification 1.1 and EMVCo Digital 2.5 specification. * * Discovery loop implements poll mode based on NFC Activity Specification 1.1 * (backward compatibility with version 1.0) and EMVCo Specification 2.5. Listen * mode is implemented based on NFC Activity Specification 1.1. Support for Type V * (ISO 15693) polling is included based on NFC Forum draft specification. ISO 18000-3 * Mode 3 (EPC Gen2) is supported as a proprietary technology in poll mode. * *Poll_Mode *This scenario depicts sequence for Poll_Mode. *\image html Poll_Mode.png * *Listen_Mode *This scenario depicts sequence for Listen_Mode. *\image html Listen_Mode.png * @{ */ /** * \name Configuration Types * \anchor configurations * \brief These options shall be used along with \ref phacDiscLoop_SetConfig and * \ref phacDiscLoop_GetConfig to set/get discovery loop configurations. */ /*@{*/ /** * Set/Get the guard time for Type A technology in microseconds for passive poll * mode. * * Default guard time is set to 5200 microseconds for Type A. * */ #define PHAC_DISCLOOP_CONFIG_GTA_VALUE_US 0x00U /** * Set/Get the guard time for Type B technology in microseconds for passive poll * mode. * * Default guard time is set to 5200 microseconds for Type B. * */ #define PHAC_DISCLOOP_CONFIG_GTB_VALUE_US 0x01U /** * Set/Get the guard time for Type F technology in microseconds for passive poll mode * when polling for Type B is preceded by polling for Type F. * * Default guard time is set to 20400 microseconds for Type F. * */ #define PHAC_DISCLOOP_CONFIG_GTFB_VALUE_US 0x02U /** * Set/Get the guard time for Type F technology in microseconds for passive poll mode * when polling for Type F is preceded by polling for Type B. * * Default guard time is set to 15300 microseconds for Type F. * */ #define PHAC_DISCLOOP_CONFIG_GTBF_VALUE_US 0x03U /** * Set/Get the guard time for Type V technology in microseconds for passive poll * mode. * * Default guard time is set to 5200 microseconds for Type V. * */ #define PHAC_DISCLOOP_CONFIG_GTV_VALUE_US 0x04U /** * Set/Get the guard time for 18000P3M3 technology in microseconds for passive * poll mode. * * Default guard time is set to 10000 microseconds for 18000P3M3. * */ #define PHAC_DISCLOOP_CONFIG_GT18000P3M3_VALUE_US 0x05U /** * Set/Get the guard time for Active poll mode in microseconds * * Default guard time is set to 5100 microseconds. * */ #define PHAC_DISCLOOP_CONFIG_GT_ACTIVE_US 0x06U /** * Set/Get the number of Type A devices/tags that can be detected in passive * poll mode. * * Default device limit is 1 for Type A. Maximum supported device limit is * #PHAC_DISCLOOP_CFG_MAX_CARDS_SUPPORTED. * */ #define PHAC_DISCLOOP_CONFIG_TYPEA_DEVICE_LIMIT 0x10U /** * Set/Get the number of Type B devices/tags that can be detected in passive * poll mode. * * Default device limit is 1 for Type B. Maximum supported device limit is * #PHAC_DISCLOOP_CFG_MAX_CARDS_SUPPORTED. * */ #define PHAC_DISCLOOP_CONFIG_TYPEB_DEVICE_LIMIT 0x11U /** * Set/Get the number of Type F devices/tags that can be detected in passive * poll mode. * * Default device limit is 1 for Type F. Maximum supported device limit is * #PHAC_DISCLOOP_CFG_MAX_CARDS_SUPPORTED. * */ #define PHAC_DISCLOOP_CONFIG_TYPEF_DEVICE_LIMIT 0x12U /** * Set/Get the number of Type V tags that can be detected in passive * poll mode. * * Default device limit is 1 for Type V. Maximum supported device limit is * #PHAC_DISCLOOP_CFG_MAX_CARDS_SUPPORTED. * */ #define PHAC_DISCLOOP_CONFIG_TYPEV_DEVICE_LIMIT 0x13U /** * Set/Get the number of 18000P3M3 tags that can be detected in passive * poll mode. * * Default device limit is 1 for 18000P3M3. Maximum supported device limit is * #PHAC_DISCLOOP_CFG_MAX_CARDS_SUPPORTED. * */ #define PHAC_DISCLOOP_CONFIG_18000P3M3_DEVICE_LIMIT 0x14U /** * Returns the number of Type A devices/tags found in passive poll mode. * * This gives the number of Type A devices/tags found after \ref phacDiscLoop_Run * in poll mode (#PHAC_DISCLOOP_ENTRY_POINT_POLL). * */ #define PHAC_DISCLOOP_CONFIG_TYPEA_TAGS_FOUND 0x20U /** * Returns the number of Type B devices/tags found in passive poll mode. * * This gives the number of Type B devices/tags found after \ref phacDiscLoop_Run * in poll mode (#PHAC_DISCLOOP_ENTRY_POINT_POLL). * */ #define PHAC_DISCLOOP_CONFIG_TYPEB_TAGS_FOUND 0x21U /** * Returns the number of Type F devices/tags found in passive poll mode. * * This gives the number of Type F devices/tags found after \ref phacDiscLoop_Run * in poll mode (#PHAC_DISCLOOP_ENTRY_POINT_POLL). * */ #define PHAC_DISCLOOP_CONFIG_TYPEF_TAGS_FOUND 0x22U /** * Returns the number of Type V tags found in passive poll mode. * * This gives the number of Type V tags found after \ref phacDiscLoop_Run * in poll mode (#PHAC_DISCLOOP_ENTRY_POINT_POLL). * */ #define PHAC_DISCLOOP_CONFIG_TYPEV_TAGS_FOUND 0x23U /** * Returns the number of 18000P3M3 tags found in passive poll mode. * * This gives the number of 18000P3M3 tags found after \ref phacDiscLoop_Run * in poll mode (#PHAC_DISCLOOP_ENTRY_POINT_POLL). * */ #define PHAC_DISCLOOP_CONFIG_18000P3M3_TAGS_FOUND 0x24U /** * Returns if the activated Type B device/tag is compliant with ISO/IEC 14443-4 or not. * * In ISO mode this is used to take decision if tag is compliant with ISO/IEC 14443-4. * */ #define PHAC_DISCLOOP_CONFIG_TYPEB_SUPPORT_TYPE4B 0x25U /** * Set/Get Application Family Identifier (AFI) to be used for Type B in * passive poll mode. * * Default is 0. * */ #define PHAC_DISCLOOP_CONFIG_TYPEB_AFI_REQ 0x30U /** * Enable or disable (#PH_ON or #PH_OFF) extended ATQB (Answer to Request B) * option for Type B during passive poll mode. * * Default is #PH_OFF. * */ #define PHAC_DISCLOOP_CONFIG_TYPEB_EXTATQB 0x31U /** * Sets the Frame Size Device Integer (FSDI) value for the Type B tags in * passive poll mode. * * Default is 0x08. * */ #define PHAC_DISCLOOP_CONFIG_TYPEB_FSDI 0x32U /** * Sets the Card Identifier (CID) value for the Type B tags in passive poll mode. * * Default is 0. * */ #define PHAC_DISCLOOP_CONFIG_TYPEB_CID 0x33U /** * Sets the Node ADdress (NAD) value for the Type B tags in passive poll mode. * * Default is 0. * */ #define PHAC_DISCLOOP_CONFIG_TYPEB_NAD 0x34U /** * Sets the Divisor Receive Integer (DRI) for Type B tags in passive poll mode. * * Default is 0. * */ #define PHAC_DISCLOOP_CONFIG_TYPEB_DRI 0x35U /** * Sets the Divisor Send Integer (DSI) for Type B tags in passive poll mode. * * Default is 0. * */ #define PHAC_DISCLOOP_CONFIG_TYPEB_DSI 0x36U /** * Sets the Frame Size Device Integer (FSDI) for the 14443P4A tags in passive * poll mode. * * Default is 0x08. * */ #define PHAC_DISCLOOP_CONFIG_TYPEA_I3P4_FSDI 0x40U /** * Sets the Card Identifier (CID) for the 14443P4A tags in passive poll mode. * * Default is 0. * */ #define PHAC_DISCLOOP_CONFIG_TYPEA_I3P4_CID 0x41U /** * Sets the Node ADdress (NAD) for the 14443P4A tags in passive poll mode. * * Default is 0. * */ #define PHAC_DISCLOOP_CONFIG_TYPEA_I3P4_NAD 0x42U /** * Sets the Divisor Receive Integer (DRI) for the 14443P4A tags in passive * poll mode. * * Default is 0. * */ #define PHAC_DISCLOOP_CONFIG_TYPEA_I3P4_DRI 0x43U /** * Sets the Divisor Send Integer (DSI) for the 14443P4A tags in passive * poll mode. * * Default is 0. * */ #define PHAC_DISCLOOP_CONFIG_TYPEA_I3P4_DSI 0x44U /** * Sets the Device Identifier (DID) for Type A P2P devices in passive * poll mode. * * Default is 0. * */ #define PHAC_DISCLOOP_CONFIG_TYPEA_P2P_DID 0x45U /** * Sets the Initiator Length Reduction field (LRI) for Type A P2P devices in * passive poll mode. * * Default is 0. * */ #define PHAC_DISCLOOP_CONFIG_TYPEA_P2P_LRI 0x46U /** * Enable/Disable Node Addressing (NAD) (#PH_ON or #PH_OFF) for Type A P2P * devices in passive poll mode. * * Default is #PH_OFF. * */ #define PHAC_DISCLOOP_CONFIG_TYPEA_P2P_NAD_ENABLE 0x47U /** * Sets the Node Address (NAD) for Type A P2P devices in passive poll mode. * * Default is 0. * */ #define PHAC_DISCLOOP_CONFIG_TYPEA_P2P_NAD 0x48U /** * Sets the length of the general bytes for Type A P2P devices in passive poll * mode. * * Default is 0. * */ #define PHAC_DISCLOOP_CONFIG_TYPEA_P2P_GI_LEN 0x49U /** * Get ATR response length from Type A P2P devices in passive poll mode. * */ #define PHAC_DISCLOOP_CONFIG_TYPEA_P2P_ATR_RES_LEN 0x50U /** * Sets the Device Identifier (DID) for Type F P2P devices in passive * poll mode. * * Default is 0. * */ #define PHAC_DISCLOOP_CONFIG_TYPEF_P2P_DID 0x51U /** * Sets the Initiator Length Reduction field (LRI) for Type F P2P devices in * passive poll mode. * * Default is 0. * */ #define PHAC_DISCLOOP_CONFIG_TYPEF_P2P_LRI 0x52U /** * Enable/Disable Node Addressing (NAD) (#PH_ON or #PH_OFF) for Type F P2P * devices in passive poll mode. * * Default is #PH_OFF. * */ #define PHAC_DISCLOOP_CONFIG_TYPEF_P2P_NAD_ENABLE 0x53U /** * Sets the Node Address (NAD) for Type F P2P devices in passive poll mode. * * Default is 0. * */ #define PHAC_DISCLOOP_CONFIG_TYPEF_P2P_NAD 0x54U /** * Sets the length of the general bytes for Type F P2P devices in passive poll * mode. * * Default is 0. * */ #define PHAC_DISCLOOP_CONFIG_TYPEF_P2P_GI_LEN 0x55U /** * Get ATR response length from Type A P2P devices in passive poll mode. * */ #define PHAC_DISCLOOP_CONFIG_TYPEF_P2P_ATR_RES_LEN 0x56U /** * Set/Get the baud rate of Felica in passive poll mode. * * #PHAC_DISCLOOP_CON_BITR_212 - Felica @ 212 kbps.\n * #PHAC_DISCLOOP_CON_BITR_424 - Felica @ 424 kbps.\n * */ #define PHAC_DISCLOOP_CONFIG_TYPEF_CUR_BAUD 0x57U /** * Configure ISO 15693 for high/low RX data rate * * #PHHAL_HW_RF_RX_DATARATE_HIGH\n * #PHHAL_HW_RF_RX_DATARATE_LOW\n * * Default is #PHHAL_HW_RF_RX_DATARATE_HIGH. * */ #define PHAC_DISCLOOP_CONFIG_TYPEV_RX_DATA_RATE 0x60U /** * Configure ISO 18000p3m3 modulation/sub-carrier. * * #PHPAL_I18000P3M3_M_MANCHESTER_2 - Use two sub-carrier.\n * #PHPAL_I18000P3M3_M_MANCHESTER_4 - Use four sub-carrier.\n * * Default is #PHPAL_I18000P3M3_M_MANCHESTER_4. * */ #define PHAC_DISCLOOP_CONFIG_I18000P3M3_MODULATION 0x70U /** * Configure ISO 18000p3m3 link frequency. * * #PHPAL_I18000P3M3_LF_423KHZ - 423kHz (fc/32).\n * #PHPAL_I18000P3M3_LF_847KHZ - 847kHz (fc/16).\n * * Default is #PHPAL_I18000P3M3_LF_847KHZ. * */ #define PHAC_DISCLOOP_CONFIG_I18000P3M3_FREQUENCY 0x71U /** * Enable/Disable Low Power Card Detection (LPCD) in passive poll mode (#PH_ON * or #PH_OFF). * * Default is #PH_OFF. * */ #define PHAC_DISCLOOP_CONFIG_ENABLE_LPCD 0x80U /** * Returns the number of devices/tags found in passive poll mode. * * This gives the number of devices/tags found after \ref phacDiscLoop_Run * in poll mode (#PHAC_DISCLOOP_ENTRY_POINT_POLL). * */ #define PHAC_DISCLOOP_CONFIG_NR_TAGS_FOUND 0x81U /** * Enable/Disable anti-collision support for Type A technology (#PH_ON or #PH_OFF). * * Default is #PH_ON. * */ #define PHAC_DISCLOOP_CONFIG_ANTI_COLL 0x88U /** * Get the actual error code from lower layer when discovery loop returns * #PHAC_DISCLOOP_FAILURE. * */ #define PHAC_DISCLOOP_CONFIG_ADDITIONAL_INFO 0x85U /** * Configure operation mode of discovery loop. * * #RD_LIB_MODE_EMVCO -> Run in EMVCO mode.\n * #RD_LIB_MODE_NFC -> Run in NFC mode. This is the default mode.\n * * Default is #RD_LIB_MODE_NFC. * */ #define PHAC_DISCLOOP_CONFIG_OPE_MODE 0x82U /** * Get collision pending status of polled technologies. * * #PHAC_DISCLOOP_POS_BIT_MASK_A -> Collision pending for Type A.\n * #PHAC_DISCLOOP_POS_BIT_MASK_B -> Collision pending for Type B.\n * #PHAC_DISCLOOP_POS_BIT_MASK_F212 -> Collision pending for FELICA @ 212 kbps.\n * #PHAC_DISCLOOP_POS_BIT_MASK_F424 -> Collision pending for FELICA @ 424 kbps.\n * #PHAC_DISCLOOP_POS_BIT_MASK_V -> Collision pending for Type V / ISO 15693.\n * #PHAC_DISCLOOP_POS_BIT_MASK_18000P3M3 -> Collision pending for ISO 18000p3m3/ EPC Gen2.\n * */ #define PHAC_DISCLOOP_CONFIG_COLLISION_PENDING 0x83U /** * Set the discovery loop state to start with while in poll mode. * * Refer \ref phacDiscLoop_Sw_PollState for all supported states.\n * * #PHAC_DISCLOOP_POLL_STATE_DETECTION -> Start with detection phase.\n * #PHAC_DISCLOOP_POLL_STATE_COLLISION_RESOLUTION -> Start with collision resolution.\n * #PHAC_DISCLOOP_POLL_STATE_REMOVAL -> Start with card removal phase (shall be used only in EMVCo mode).\n * * Default is #PHAC_DISCLOOP_POLL_STATE_DETECTION. When \ref phacDiscLoop_Run gives * #PHAC_DISCLOOP_MULTI_TECH_DETECTED in poll mode, application shall select one technology * and start poll mode again in #PHAC_DISCLOOP_POLL_STATE_COLLISION_RESOLUTION state. * */ #define PHAC_DISCLOOP_CONFIG_NEXT_POLL_STATE 0x84U /** * Set/Get the bail out option for various technologies in passive poll mode. * * Default bail out is not set for any technology.\n * #PHAC_DISCLOOP_POS_BIT_MASK_A -> Bail out for Type A.\n * #PHAC_DISCLOOP_POS_BIT_MASK_B -> Bail out for Type B.\n * #PHAC_DISCLOOP_POS_BIT_MASK_F212 -> Bail out for Type FELICA @ 212 kbps.\n * #PHAC_DISCLOOP_POS_BIT_MASK_F424 -> Bail out for Type FELICA @ 424 kbps.\n * #PHAC_DISCLOOP_POS_BIT_MASK_V -> Bail out for Type V / ISO 15693.\n * #PHAC_DISCLOOP_POS_BIT_MASK_18000P3M3 -> Bail out for ISO 18000p3m3/ EPC Gen2.\n * */ #define PHAC_DISCLOOP_CONFIG_BAIL_OUT 0x86U /** * Returns the technologies that were detected during poll mode. * * Passive technologies:\n * #PHAC_DISCLOOP_POS_BIT_MASK_A -> Detected Type A.\n * #PHAC_DISCLOOP_POS_BIT_MASK_B -> Detected Type B.\n * #PHAC_DISCLOOP_POS_BIT_MASK_F212 -> Detected FELICA @ 212 kbps.\n * #PHAC_DISCLOOP_POS_BIT_MASK_F424 -> Detected FELICA @ 424 kbps.\n * #PHAC_DISCLOOP_POS_BIT_MASK_V -> Detected Type V / ISO 15693.\n * #PHAC_DISCLOOP_POS_BIT_MASK_18000P3M3 -> Detected ISO 18000p3m3/ EPC Gen2.\n * * Active technologies:\n * #PHAC_DISCLOOP_ACT_POS_BIT_MASK_106 -> Detected active target @ 106 kbps.\n * #PHAC_DISCLOOP_ACT_POS_BIT_MASK_212 -> Detected active target @ 212 kbps.\n * #PHAC_DISCLOOP_ACT_POS_BIT_MASK_424 -> Detected active target @ 424 kbps.\n * */ #define PHAC_DISCLOOP_CONFIG_TECH_DETECTED 0x87U /** * Configure technologies to listen for in active listen mode. * * #PHAC_DISCLOOP_POS_BIT_MASK_A -> Listen for Type A.\n * #PHAC_DISCLOOP_POS_BIT_MASK_B -> Listen for Type B.[Reserved. Not supported currently]\n * #PHAC_DISCLOOP_POS_BIT_MASK_F212 -> Listen for Type FELICA @ 212 kbps.\n * #PHAC_DISCLOOP_POS_BIT_MASK_F424 -> Listen for Type FELICA @ 424 kbps.\n * #PHAC_DISCLOOP_POS_BIT_MASK_V -> Listen for Type V / ISO 15693.[Reserved. Not supported currently]\n * #PHAC_DISCLOOP_POS_BIT_MASK_18000P3M3 -> Listen for ISO 18000p3m3/ EPC Gen2.[Reserved. Not supported currently]\n * */ #define PHAC_DISCLOOP_CONFIG_ACT_LIS_TECH_CFG 0x89U /** * Configure technologies to be detected in passive poll mode. * * #PHAC_DISCLOOP_ACT_POS_BIT_MASK_106 -> Detect active target @ 106 kbps\n * #PHAC_DISCLOOP_ACT_POS_BIT_MASK_212 -> Detect active target @ 212 kbps\n * #PHAC_DISCLOOP_ACT_POS_BIT_MASK_424 -> Detect active target @ 424 kbps\n * */ #define PHAC_DISCLOOP_CONFIG_ACT_POLL_TECH_CFG 0x8AU /** * Configure technologies to listen for in passive listen mode. * * #PHAC_DISCLOOP_POS_BIT_MASK_A -> Listen for Type A.\n * #PHAC_DISCLOOP_POS_BIT_MASK_B -> Listen for Type B.[Reserved. Not supported currently]\n * #PHAC_DISCLOOP_POS_BIT_MASK_F212 -> Listen for Type FELICA @ 212 kbps.\n * #PHAC_DISCLOOP_POS_BIT_MASK_F424 -> Listen for Type FELICA @ 424 kbps.\n * #PHAC_DISCLOOP_POS_BIT_MASK_V -> Listen for Type V / ISO 15693.[Reserved. Not supported currently]\n * #PHAC_DISCLOOP_POS_BIT_MASK_18000P3M3 -> Listen for ISO 18000p3m3/ EPC Gen2.[Reserved. Not supported currently]\n * */ #define PHAC_DISCLOOP_CONFIG_PAS_LIS_TECH_CFG 0x8BU /** * Configure technologies to be detected in passive poll mode. * * #PHAC_DISCLOOP_POS_BIT_MASK_A -> Detect Type A.\n * #PHAC_DISCLOOP_POS_BIT_MASK_B -> Detect Type B.\n * #PHAC_DISCLOOP_POS_BIT_MASK_F212 -> Detect Type FELICA @ 212 kbps.\n * #PHAC_DISCLOOP_POS_BIT_MASK_F424 -> Detect Type FELICA @ 424 kbps.\n * #PHAC_DISCLOOP_POS_BIT_MASK_V -> Detect Type V / ISO 15693.\n * #PHAC_DISCLOOP_POS_BIT_MASK_18000P3M3 -> Detect ISO 18000p3m3/ EPC Gen2.\n * */ #define PHAC_DISCLOOP_CONFIG_PAS_POLL_TECH_CFG 0x8CU /** * Configure NFC activity version. * * #PHAC_DISCLOOP_NFC_ACTIVITY_VERSION_1_0 -> Run in Activity 1.0 mode.\n * #PHAC_DISCLOOP_NFC_ACTIVITY_VERSION_1_1 -> Run in Activity 1.1 mode. This is the default.\n * */ #define PHAC_DISCLOOP_CONFIG_ACTIVITY_VERSION 0x8DU /** * Configure AUTOCOLL retry count in listen mode. * * How many times to retry AUTOCOLL command if it fails. Default is 0. Supported * range is from 0 to 255. * */ #define PHAC_DISCLOOP_CONFIG_TARGET_RETRY_COUNT 0x90U /*@}*/ #ifdef NXPRDLIB_REM_GEN_INTFS #include "../comps/phacDiscLoop/src/Sw/phacDiscLoop_Sw.h" #define phacDiscLoop_Run(pDataParams, bEntryPoint) \ phacDiscLoop_Sw_Run((phacDiscLoop_Sw_DataParams_t *)pDataParams, bEntryPoint) #define phacDiscLoop_GetConfig(pDataParams, wConfig, pValue) \ phacDiscLoop_Sw_GetConfig((phacDiscLoop_Sw_DataParams_t *)pDataParams, wConfig, pValue) #define phacDiscLoop_SetConfig(pDataParams, wConfig, wValue) \ phacDiscLoop_Sw_SetConfig((phacDiscLoop_Sw_DataParams_t *)pDataParams, wConfig, wValue) #define phacDiscLoop_ActivateCard(pDataParams, bTagType, bTagIndex) \ phacDiscLoop_Sw_ActivateCard((phacDiscLoop_Sw_DataParams_t *)pDataParams, bTagType, bTagIndex) #else /** * \brief Starts the discovery loop in poll mode or listen mode. * * Use \ref phacDiscLoop_SetConfig with \ref configurations "configuration options" * to modify poll mode and listen mode settings of discovery loop. * * \return Status code * \retval #PHAC_DISCLOOP_FAILURE Discovery loop failure due to error from lower layer. * \retval #PHAC_DISCLOOP_COLLISION_PENDING Indicates that collision is pending. * \retval #PHAC_DISCLOOP_EXTERNAL_RFON External RF field on. * \retval #PHAC_DISCLOOP_EXTERNAL_RFOFF External RF field off. * \retval #PHAC_DISCLOOP_NO_TECH_DETECTED No technologies detected. * \retval #PHAC_DISCLOOP_NO_DEVICE_RESOLVED No card/device resolved. * \retval #PHAC_DISCLOOP_LPCD_NO_TECH_DETECTED LPCD succeeded but no technologies detected.. * \retval #PHAC_DISCLOOP_MULTI_TECH_DETECTED Multiple Technologies detected. * \retval #PHAC_DISCLOOP_MULTI_DEVICES_RESOLVED Multiple cards/devices resolved. * \retval #PHAC_DISCLOOP_DEVICE_ACTIVATED Single card/device activated. * \retval #PHAC_DISCLOOP_ACTIVE_TARGET_ACTIVATED Active target activated.. * \retval #PHAC_DISCLOOP_PASSIVE_TARGET_ACTIVATED Passive target activated. * \retval #PHAC_DISCLOOP_MERGED_SEL_RES_FOUND Merged SAK with NFC-DEP and T4T support found. * \retval #PHAC_DISCLOOP_ACTIVATED_BY_PEER Activated in listen mode. */ phStatus_t phacDiscLoop_Run( void * pDataParams, /**< [In] Pointer to discovery loop parameter structure. */ uint8_t bEntryPoint /**< [In] Entry point to start discovery loop. Refer \ref phacDiscLoop_Sw_EntryPoints for supported list of entry points. */ ); /** * \brief Set discovery loop \ref configurations "configuration" value. * \return Status code * \retval #PH_ERR_SUCCESS Operation successful. * \retval #PH_ERR_INVALID_PARAMETER Invalid option/response received. * \retval Other Depending on implementation and underlying component. */ phStatus_t phacDiscLoop_SetConfig( void * pDataParams, /**< [In] Pointer to discovery loop parameter structure. */ uint16_t wConfig, /**< [In] Configuration identifier. */ uint16_t wValue /**< [In] Configuration value. */ ); /** * \brief Get discovery loop \ref configurations "configuration" value. * \return Status code * \retval #PH_ERR_SUCCESS Operation successful * \retval #PH_ERR_INVALID_PARAMETER Invalid option/response received * \retval Other Depending on implementation and underlying component. */ phStatus_t phacDiscLoop_GetConfig( void * pDataParams, /**< [In] Pointer to discovery loop parameter structure. */ uint16_t wConfig, /**< [In] Configuration identifier. */ uint16_t *pValue /**< [Out] Configuration value. */ ); /** * \brief Activates the given tag type with given index. * \return Status code * \retval #PHAC_DISCLOOP_DEVICE_ACTIVATED Single card/device activated. * \retval #PHAC_DISCLOOP_PASSIVE_TARGET_ACTIVATED Passive target activated. * \retval #PHAC_DISCLOOP_MERGED_SEL_RES_FOUND Merged SAK with NFC-DEP and T4T support found. * \retval #PH_ERR_INVALID_PARAMETER If invalid index or card type was given * \retval Other Depending on implementation and underlying component. */ phStatus_t phacDiscLoop_ActivateCard( void * pDataParams, /**< [In] Pointer to discovery loop parameter structure. */ uint8_t bTagType, /**< [In] Tag type \ref phacDiscLoop_Sw_NfcTech. */ uint8_t bTagIndex /**< [In] The tag index to be activated. */ ); /** @} */ #endif /* NXPBUILD__PHAC_DISCLOOP */ #endif /* NXPRDLIB_REM_GEN_INTFS */ #ifdef __cplusplus } /* Extern C */ #endif #endif