Home | History | Annotate | Download | only in inc
      1 /*
      2  * Copyright (C) 2010 NXP Semiconductors
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 /*
     18  * \file  phNfcTypes.h
     19  * \brief Basic type definitions.
     20  *
     21  * Project: NFC MW / HAL
     22  *
     23  * $Date: Thu Jun 25 21:24:53 2009 $
     24  * $Author: ing04880 $
     25  * $Revision: 1.13 $
     26  * $Aliases: NFC_FRI1.1_WK926_R28_1,NFC_FRI1.1_WK928_R29_1,NFC_FRI1.1_WK930_R30_1,NFC_FRI1.1_WK934_PREP_1,NFC_FRI1.1_WK934_R31_1,NFC_FRI1.1_WK941_PREP1,NFC_FRI1.1_WK941_PREP2,NFC_FRI1.1_WK941_1,NFC_FRI1.1_WK943_R32_1,NFC_FRI1.1_WK949_PREP1,NFC_FRI1.1_WK943_R32_10,NFC_FRI1.1_WK943_R32_13,NFC_FRI1.1_WK943_R32_14,NFC_FRI1.1_WK1007_R33_1,NFC_FRI1.1_WK1007_R33_4,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $
     27  *
     28  */
     29 
     30 #ifndef PHNFCTYPES /* */
     31 #define PHNFCTYPES /* */
     32 
     33 /**
     34  *  \name NFC Types
     35  *
     36  * File: \ref phNfcTypes.h
     37  *
     38  */
     39 /*@{*/
     40 #define PHNFCTYPES_FILEREVISION "$Revision: 1.13 $" /**< \ingroup grp_file_attributes */
     41 #define PHNFCTYPES_FILEALIASES  "$Aliases: NFC_FRI1.1_WK926_R28_1,NFC_FRI1.1_WK928_R29_1,NFC_FRI1.1_WK930_R30_1,NFC_FRI1.1_WK934_PREP_1,NFC_FRI1.1_WK934_R31_1,NFC_FRI1.1_WK941_PREP1,NFC_FRI1.1_WK941_PREP2,NFC_FRI1.1_WK941_1,NFC_FRI1.1_WK943_R32_1,NFC_FRI1.1_WK949_PREP1,NFC_FRI1.1_WK943_R32_10,NFC_FRI1.1_WK943_R32_13,NFC_FRI1.1_WK943_R32_14,NFC_FRI1.1_WK1007_R33_1,NFC_FRI1.1_WK1007_R33_4,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $"     /**< \ingroup grp_file_attributes */
     42 /*@}*/
     43 
     44 #ifndef _WIN32
     45 #include <stdint.h>
     46 #else
     47 #include <Windows.h>
     48 #include <stdio.h>
     49 #define snprintf _snprintf
     50 
     51 #ifndef linux
     52 /**
     53  *  \name Basic Type Definitions
     54  *
     55  *  Constant-length-type definition ('C99).
     56  *
     57  */
     58 /*@{*/
     59 #ifndef __int8_t_defined /* */
     60 #define __int8_t_defined /* */
     61 typedef signed   char   int8_t;         /**<  \ingroup grp_nfc_common
     62                                                8 bit signed integer */
     63 #endif
     64 
     65 #ifndef __int16_t_defined /* */
     66 #define __int16_t_defined /* */
     67 typedef signed   short  int16_t;        /**< \ingroup grp_nfc_common
     68                                              16 bit signed integer */
     69 #endif
     70 
     71 #ifndef __stdint_h
     72 #ifndef __int32_t_defined /* */
     73 #define __int32_t_defined /* */
     74 typedef signed   long   int32_t;        /**< \ingroup grp_nfc_common
     75                                              32 bit signed integer */
     76 #endif
     77 #endif
     78 
     79 #ifndef __uint8_t_defined /* */
     80 #define __uint8_t_defined /* */
     81 typedef unsigned char   uint8_t;        /**<  \ingroup grp_nfc_common
     82                                               8 bit unsigned integer */
     83 #endif
     84 
     85 #ifndef __uint16_t_defined /* */
     86 #define __uint16_t_defined /* */
     87 typedef unsigned short  uint16_t;       /**< \ingroup grp_nfc_common
     88                                              16 bit unsigned integer */
     89 #endif
     90 
     91 #ifndef __stdint_h
     92 #ifndef __uint32_t_defined /* */
     93 #define __uint32_t_defined /* */
     94 typedef unsigned long   uint32_t;       /**< \ingroup grp_nfc_common
     95                                              32 bit unsigned integer */
     96 #endif
     97 #endif
     98 
     99 #endif /* linux */
    100 
    101 #endif /* _WIN32 */
    102 
    103 #ifndef TRUE
    104 #define TRUE			(0x01)			  /**< \ingroup grp_nfc_common
    105                                               Logical True Value */
    106 #endif
    107 
    108 #ifndef FALSE
    109 #define FALSE			(0x00)			  /**< \ingroup grp_nfc_common
    110                                               Logical False Value */
    111 #endif
    112 
    113 typedef uint8_t			utf8_t;			/**< \ingroup grp_nfc_common
    114                                              UTF8 Character String */
    115 
    116 typedef uint8_t			bool_t;			/**< \ingroup grp_nfc_common
    117 												boolean data type */
    118 
    119 typedef uint16_t        NFCSTATUS;      /**< \ingroup grp_nfc_common
    120                                              NFC return values
    121                                          \ref phNfcStatus.h for different status
    122                                           values */
    123 
    124 #ifndef NULL
    125 #define NULL  ((void *)0)
    126 #endif
    127 
    128 /* This Macro to be used to resolve Unused and unreference
    129  * compiler warnings.
    130  */
    131 
    132 #define PHNFC_UNUSED_VARIABLE(x) for((x)=(x);(x)!=(x);)
    133 
    134 /*@}*/
    135 
    136 /**
    137  *
    138  *  \name HAL Overall Definitions
    139  *
    140  *  Definitions applicable to a variety of purposes and functions/features.
    141  *
    142  */
    143  /*@{*/
    144 
    145 #define PHHAL_COMMON_MAX_STRING_LENGTH  0x40U     /**< \ingroup grp_hal_common
    146                                                      Maximum vendor name length in bytes. */
    147 #define PHHAL_UNKNOWN_DEVICE_TYPE       0x00U   /**< \ingroup grp_hal_common
    148                                                      Unknown device type. */
    149 #define PHHAL_SERIAL_DEVICE             0x01U  /**< \ingroup grp_hal_common
    150                                                      Serial device type.  */
    151 #define PHHAL_USB_DEVICE                0x02U   /**< \ingroup grp_hal_common
    152                                                      USB device type. */
    153 #define PHHAL_I2C_DEVICE                0x03U   /**< \ingroup grp_hal_common
    154                                                      I2C device type. */
    155 #define PHHAL_SPI_DEVICE                0x04U   /**< \ingroup grp_hal_common
    156                                                      SPI device type. */
    157 #define PHHAL_PARALLEL_DEVICE           0x05U   /**< \ingroup grp_hal_common
    158                                                      Parallel device type. */
    159 #define PHHAL_NFCID_LENGTH              0x0AU  /**< \ingroup grp_hal_common
    160                                                      Maximum length of NFCID 1..3. */
    161 
    162 #define PHHAL_MAX_DATASIZE              0xFBU       /* 256 * Maximum Data size sent
    163                                                      * by the HAL
    164                                                      */
    165 
    166 #define PHHAL_ATQA_LENGTH               0x02U       /**< ATQA length */
    167 #define PHHAL_MAX_UID_LENGTH            0x0AU       /**< Maximum UID length expected */
    168 #define PHHAL_MAX_ATR_LENGTH            0x30U       /**< Maximum ATR_RES (General Bytes)
    169                                                      *   length expected */
    170 
    171 #define PHHAL_ATQB_LENGTH               0x0BU       /**< ATQB length */
    172 
    173 #define PHHAL_PUPI_LENGTH               0x04U       /**< PUPI length */
    174 #define PHHAL_APP_DATA_B_LENGTH         0x04U       /**< Application Data length for Type B */
    175 #define PHHAL_PROT_INFO_B_LENGTH        0x03U       /**< Protocol info length for Type B */
    176 #define PHHAL_FEL_SYS_CODE_LEN          0x02U       /**< Felica System Code Length */
    177 #define PHHAL_FEL_ID_LEN                0x08U       /**< Felica current ID Length */
    178 #define PHHAL_FEL_PM_LEN                0x08U       /**< Felica current PM Length */
    179 #define PHHAL_15693_UID_LENGTH          0x08U       /**< Length of the Inventory bytes for
    180                                                          ISO15693 Tag */
    181 
    182 #define VENDOR_NAME_LEN                 0x14U
    183 #define MAX_TRANSFER_UNIT               0x21U
    184 #define SESSIONID_SIZE                  0x08U
    185 #define MAX_AID_LEN                     0x10U
    186 #define MAX_UICC_PARAM_LEN              0xFFU
    187 
    188 #define MIFARE_BITMASK                  0x08U
    189 #define ISO_14443_BITMASK               0x20U
    190 #define ISO_14443_DETECTED              0x20U
    191 #define NFCIP_BITMASK                   0x40U
    192 #define NFCIP_DETECTED                  0x40U
    193 
    194 #define MAX_TARGET_SUPPORTED            MAX_REMOTE_DEVICES
    195 
    196 #define NFC_HW_PN65N                    0x10U
    197 
    198 #define NXP_NFCIP_NFCID2_ID             0x01FEU
    199 
    200 #define NXP_FULL_VERSION_LEN            0x0BU
    201 
    202 
    203 /*@}*/
    204 
    205 
    206 /**
    207  *  \name NFC specific Type Definitions
    208  *
    209  */
    210 /*@{*/
    211 
    212 /**
    213  * Data Buffer Structure to hold the Data Buffer
    214  *
    215  * This structure holds the Data in the Buffer of the specified
    216  * size.
    217  *
    218  */
    219 typedef struct phNfc_sData_t
    220 {
    221     uint8_t             *buffer;
    222     uint32_t            length;
    223 } phNfc_sData_t;
    224 
    225 
    226 /**
    227  *\brief Possible Hardware Configuration exposed to upper layer.
    228  * Typically this should be port name (Ex:"COM1","COM2") to which PN544 is connected.
    229  */
    230 typedef enum
    231 {
    232    ENUM_LINK_TYPE_COM1,
    233    ENUM_LINK_TYPE_COM2,
    234    ENUM_LINK_TYPE_COM3,
    235    ENUM_LINK_TYPE_COM4,
    236    ENUM_LINK_TYPE_COM5,
    237    ENUM_LINK_TYPE_COM6,
    238    ENUM_LINK_TYPE_COM7,
    239    ENUM_LINK_TYPE_COM8,
    240    ENUM_LINK_TYPE_I2C,
    241    ENUM_LINK_TYPE_USB,
    242    ENUM_LINK_TYPE_TCP,
    243 
    244    ENUM_LINK_TYPE_NB,
    245 } phLibNfc_eConfigLinkType;
    246 
    247 /**
    248  * \brief Possible Hardware Configuration exposed to upper layer.
    249  * Typically this should be at least the communication link (Ex:"COM1","COM2")
    250  * the controller is connected to.
    251  */
    252 typedef struct phLibNfc_sConfig_t
    253 {
    254    /** Hardware communication link to the controller */
    255    phLibNfc_eConfigLinkType  nLinkType;
    256    /** The client ID (thread ID or message queue ID) */
    257    unsigned int              nClientId;
    258 } phLibNfc_sConfig_t, *pphLibNfc_sConfig_t;
    259 
    260 
    261 /*!
    262  * NFC Message structure contains message specific details like
    263  * message type, message specific data block details, etc.
    264  */
    265 typedef struct phLibNfc_Message_t
    266 {
    267     uint32_t eMsgType;/**< Type of the message to be posted*/
    268     void   * pMsgData;/**< Pointer to message specific data block in case any*/
    269     uint32_t Size;/**< Size of the datablock*/
    270 } phLibNfc_Message_t,*pphLibNfc_Message_t;
    271 
    272 
    273 #ifdef WIN32
    274 #define PH_LIBNFC_MESSAGE_BASE  (WM_USER+0x3FF)
    275 #endif
    276 /**
    277  * Deferred message. This message type will be posted to the client application thread
    278  * to notify that a deferred call must be invoked.
    279  */
    280 #define PH_LIBNFC_DEFERREDCALL_MSG			  (0x311)
    281 
    282 /**
    283  *\brief Deferred call declaration.
    284  * This type of API is called from ClientApplication ( main thread) to notify
    285  * specific callback.
    286  */
    287 typedef  void (*pphLibNfc_DeferredCallback_t) (void*);
    288 /**
    289  *\brief Deferred parameter declaration.
    290  * This type of data is passed as parameter from ClientApplication (main thread) to the
    291  * callback.
    292  */
    293 typedef  void *pphLibNfc_DeferredParameter_t;
    294 /**
    295  *\brief Deferred message specific info declaration.
    296  * This type of information is packed as message data when \ref PH_LIBNFC_DEFERREDCALL_MSG
    297  * type message is posted to message handler thread.
    298  */
    299 typedef struct phLibNfc_DeferredCall_t
    300 {
    301 		pphLibNfc_DeferredCallback_t  pCallback;/**< pointer to Deferred callback */
    302 		pphLibNfc_DeferredParameter_t pParameter;/**< pointer to Deferred parameter */
    303 } phLibNfc_DeferredCall_t;
    304 
    305 
    306 /** \ingroup  grp_hal_common
    307  *
    308  *  \brief Protocol Support Information
    309  *
    310  *  The <em> Supported Protocols Structure </em> holds all protocol supported by the current NFC
    311  *  device.
    312  *
    313  *  \note All members of this structure are output parameters [out].
    314  *
    315  */
    316 typedef struct phNfc_sSupProtocol_t
    317 {
    318     unsigned int MifareUL    : 1;  /**< Protocol Mifare Ultra Light or
    319                                    any NFC Forum Type-2 tags */
    320     unsigned int MifareStd   : 1;  /**< Protocol Mifare Standard. */
    321     unsigned int ISO14443_4A : 1;  /**< Protocol ISO14443-4 Type A.  */
    322     unsigned int ISO14443_4B : 1;  /**< Protocol ISO14443-4 Type B.  */
    323     unsigned int ISO15693    : 1;  /**< Protocol ISO15693 HiTag.  */
    324     unsigned int Felica      : 1;  /**< Protocol Felica. */
    325     unsigned int NFC         : 1;  /**< Protocol NFC. */
    326     unsigned int Jewel       : 1;  /**< Protocol Innovision Jewel Tag. */
    327     /*** TODO: Add SWP, ETSI HCI to this list **/
    328 } phNfc_sSupProtocol_t;
    329 
    330 
    331 /** \ingroup grp_hal_common
    332  *
    333  *
    334  *  \brief Information related to the NFC Device
    335  *
    336  *  The <em> Device Information Structure </em> holds information
    337  *  related to the NFC IC read during initialization time.
    338  *  It allows the caller firware, hardware version, the model id,
    339  *  HCI verison supported and vendor name. Refer to the NFC Device
    340  *  User Manual on how to interpret each of the values. In addition
    341  *  it also contains capabilities of the NFC Device such as the
    342  *  protocols supported in Reader and emulation mode
    343  *
    344  */
    345 typedef struct phNfc_sDeviceCapabilities_t
    346 {
    347     /* */
    348     uint32_t                hal_version; /**< \ingroup grp_hal_common
    349                                               HAL 4.0 Version Information. */
    350     uint32_t                fw_version; /**< \ingroup grp_hal_common
    351                                               Firmware Version Info. */
    352     uint32_t                hw_version; /**< \ingroup grp_hal_common
    353                                               Hardware Version Info. */
    354     uint8_t                 model_id;   /**< \ingroup grp_hal_common
    355                                               IC Variant . */
    356     uint8_t                 hci_version; /**< \ingroup grp_hal_common
    357                                               ETSI HCI Version Supported */
    358     utf8_t                  vendor_name[VENDOR_NAME_LEN]; /**< \ingroup grp_hal_common
    359                                               Vendor name (Null terminated string)*/
    360     uint8_t                 full_version[NXP_FULL_VERSION_LEN];
    361 
    362     phNfc_sSupProtocol_t    ReaderSupProtocol; /**< Supported protocols
    363                                                       (Bitmapped) in Reader mode. */
    364     phNfc_sSupProtocol_t    EmulationSupProtocol;    /**< Supported protocols
    365                                                        (Bitmapped) in Emulation
    366                                                         mode. */
    367 } phNfc_sDeviceCapabilities_t;
    368 
    369 
    370 /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
    371 
    372 
    373 /** \ingroup grp_hal_common
    374  *
    375  *  \brief Enumerated MIFARE Commands
    376  *
    377  *  The <em> Mifare Command List Enumerator </em> lists all available Mifare native commands.
    378  *
    379  * \note None.
    380  *
    381  */
    382 typedef enum phNfc_eMifareCmdList_t
    383 {
    384     phNfc_eMifareRaw        = 0x00U,     /**< This command performs raw transcations .
    385                                               Format of the phLibNfc_sTransceiveInfo_t
    386                                               content in this case shall be as below:
    387                                                    cmd: filed shall set to  phHal_eMifareRaw .
    388                                                    addr : doesn't carry any significance.
    389                                                    sSendData : Shall contain formatted raw buffer
    390                                                                 based on MIFARE commands type used.
    391                                                                 Formatted buffer shall follow below
    392                                                                 formating scheme.
    393 
    394                                               CmdType+ Block No + CommandSpecific data + 2 byte CRC
    395                                               Ex: With  Write  4 byte command  on block 8  looks as
    396                                               " 0xA2,0x08,0x01,0x02,0x03,0x04,CRC1,CRC2
    397                                               Note :  For MIFARE Std card we recommend use MIFARE
    398                                                       commands directly.
    399                                            */
    400     phNfc_eMifareAuthentA   = 0x60U,     /**< Mifare Standard:\n
    401                                               This command performs an authentication with KEY A for a sector.\n
    402                                               Format of the phLibNfc_sTransceiveInfo_t content in this case is :
    403                                                        cmd: field shall set to  phHal_eMifareAuthentA .
    404                                                        addr : indicates MIFARE block address.
    405                                                            Ex: 0x08 indicates block 8 needs to be authenticated.
    406                                                        sSendData : Shall contain authentication key values.
    407                                                                     sSendData ,buffer shall contain authentication
    408                                                                     key values 01 02 03 04 05 06 authenticates
    409                                                                     block 08 with the key 0x01[..]06. If this
    410                                                                     command fails, then  user needs to reactivate
    411                                                                     the remote Mifare card.
    412                                           */
    413     phNfc_eMifareAuthentB   = 0x61U,     /**< Mifare Standard:\n
    414                                               This command performs an authentication with KEY B for a sector.\n
    415                                               Format of the phLibNfc_sTransceiveInfo_t content in this case is :
    416                                                        cmd: field shall set to  phHal_eMifareAuthentB .
    417                                                        addr : indicates MIFARE block address.
    418                                                            Ex: 0x08 indicates block 8 needs to be authenticated.
    419                                                        sSendData : Shall contain authentication key values.
    420                                                                     sSendData ,buffer shall contain authentication
    421                                                                     key values 01 02 03 04 05 06 authenticates
    422                                                                     block 08 with the key 0x01[..]06. If this
    423                                                                     command fails, then  user needs to reactivate
    424                                                                     the remote Mifare card.
    425                                           */
    426     phNfc_eMifareRead16     = 0x30U,     /**< Mifare Standard and Ultra Light:\n
    427                                               Read 16 Bytes from a Mifare Standard block or 4 Mifare Ultra Light pages.\n
    428                                               Format of the phLibNfc_sTransceiveInfo_t content in this case is :
    429                                                        cmd: field shall set to  phHal_eMifareRead16 .
    430                                                        addr : memory adress to read.
    431                                                        sRecvData : Shall contain buffer of size 16
    432                                                                     to read the data into.
    433 
    434                                               If this command fails, the user needs to reactivate the
    435                                               the remote Mifare card
    436                                           */
    437     phNfc_eMifareRead       = 0x30U,
    438     phNfc_eMifareWrite16    = 0xA0U,     /**< Mifare Standard and Ultra Light:\n
    439                                               Write 16 Bytes to a Mifare Standard block or 4 Mifare Ultra Light pages.\n
    440                                               Format of the phLibNfc_sTransceiveInfo_t content in this case is :
    441                                                        cmd: field shall set to  phHal_eMifareWrite16 .
    442                                                        addr : starting memory adress to write from.
    443                                                        sSendData : Shall contain buffer of size 16 containing
    444                                                                     the data bytes to be written.
    445 
    446                                               If this command fails, the user needs to reactivate the
    447                                               the remote Mifare card
    448                                            */
    449     phNfc_eMifareWrite4     = 0xA2U,     /**< Mifare Ultra Light:\n
    450                                               Write 4 bytes.\n
    451                                               Format of the phLibNfc_sTransceiveInfo_t content in this case is :
    452                                                        cmd: field shall set to  phHal_eMifareWrite4 .
    453                                                        addr : starting memory adress to write from.
    454                                                        sSendData : Shall contain buffer of size 4 containing
    455                                                                     the data bytes to be written.
    456 
    457                                               If this command fails, the user needs to reactivate the
    458                                               the remote Mifare card
    459                                           */
    460     phNfc_eMifareInc        = 0xC1U,     /**< Increment. */
    461     phNfc_eMifareDec        = 0xC0U,     /**< Decrement. */
    462     phNfc_eMifareTransfer   = 0xB0U,     /**< Tranfer.   */
    463     phNfc_eMifareRestore    = 0xC2U,     /**< Restore.   */
    464     phNfc_eMifareReadSector = 0x38U,     /**< Read Sector.   */
    465     phNfc_eMifareWriteSector= 0xA8U,     /**< Write Sector.   */
    466     phNfc_eMifareInvalidCmd = 0xFFU      /**< Invalid Command */
    467 } phNfc_eMifareCmdList_t;
    468 
    469 
    470 /** \ingroup grp_hal_common
    471  *
    472  *  The <em> T=Cl Command List Enumerator </em> lists all available T=Cl Commands.
    473  *
    474  * \note None.
    475  *
    476  */
    477 typedef enum phNfc_eIso14443_4_CmdList_t
    478 {
    479     phNfc_eIso14443_4_Raw             = 0x00U /**< ISO 14443-4 Exchange command:\n
    480                                                  - This command sends the data buffer directly
    481                                                  to the remote device */
    482 
    483 } phNfc_eIso14443_4_CmdList_t;
    484 
    485 
    486 /** \ingroup grp_hal_common
    487  *
    488  *  The <em> NFCIP1 Command List Enumerator </em> lists all available NFCIP1 Commands.
    489  *
    490  * \note None.
    491  *
    492  */
    493 typedef enum phNfc_eNfcIP1CmdList_t
    494 {
    495        phNfc_eNfcIP1_Raw             = 0x00U /**< NfcIP Exchange command:\n
    496                                                  - This command sends the data buffer directly
    497                                                   to the remote device */
    498 }phNfc_eNfcIP1CmdList_t;
    499 
    500 
    501 /** \ingroup grp_hal_common
    502  *
    503  *  The <em> ISO15693 Command List Enumerator </em> lists all available ISO15693 Commands.
    504  *
    505  * \note None.
    506  *
    507  */
    508 typedef enum phNfc_eIso15693_CmdList_t
    509 {
    510 #if 0
    511     phNfc_eIso15693_Raw             = 0x00U, /**< ISO 15693 Exchange Raw command:\n
    512                                                  - This command sends the data buffer directly
    513                                                  to the remote device */
    514 #endif
    515     phNfc_eIso15693_Cmd             = 0x20U, /**< ISO 15693 Exchange command:\n
    516                                                  - This command is used to access the card
    517                                                  to the remote device */
    518     phNfc_eIso15693_Invalid         = 0xFFU      /**< Invalid Command */
    519 } phNfc_eIso15693_CmdList_t;
    520 
    521 
    522 /** \ingroup grp_hal_common
    523  *
    524  *  The <em> Felica Command List Enumerator </em> lists all available Felica Commands.
    525  *
    526  * \note None.
    527  *
    528  */
    529 typedef enum phNfc_eFelicaCmdList_t
    530 {
    531     phNfc_eFelica_Raw             = 0xF0U, /**< Felica Raw command:\n
    532                                                  - This command sends the data buffer directly
    533                                                  to the remote device */
    534     phNfc_eFelica_Check           = 0x00, /**< Felica Check command:\n
    535                                                  - This command checks the data from the Felica
    536                                                   remote device */
    537     phNfc_eFelica_Update          = 0x01, /**< Felica Update command:\n
    538                                                  - This command updates the data onto the Felica
    539                                                   remote device */
    540     phNfc_eFelica_Invalid         = 0xFFU      /**< Invalid Command */
    541 } phNfc_eFelicaCmdList_t;
    542 
    543 
    544 /** \ingroup grp_hal_common
    545  *
    546  *  The <em> Jewel Command List Enumerator </em> lists all available Jewel Commands.
    547  *
    548  * \note None.
    549  *
    550  */
    551 typedef enum phNfc_eJewelCmdList_t
    552 {
    553     phNfc_eJewel_Raw            = 0x00U, /**< Jewel command:\n
    554                                                  - This command sends the data buffer directly
    555                                                  to the remote device */
    556     phNfc_eJewel_Invalid        = 0xFFU  /**< Invalid jewel command */
    557 }phNfc_eJewelCmdList_t;
    558 
    559 
    560 /** \ingroup grp_hal_nfci
    561 *
    562 *  \brief Remote Device Reader A RF Gate Information Container
    563 *
    564 *  The <em> Reader A structure </em> includes the available information
    565 *  related to the discovered ISO14443A remote device. This information
    566 *  is updated for every device discovery.
    567 *  \note None.
    568 *
    569 */
    570 typedef struct phNfc_sIso14443AInfo_t
    571 {
    572     uint8_t         Uid[PHHAL_MAX_UID_LENGTH];      /**< UID information of the TYPE A
    573                                                        Tag Discovered */
    574     uint8_t         UidLength;                      /**< UID information length, shall not be greater
    575                                                     than PHHAL_MAX_UID_LENGTH i.e., 10 */
    576     uint8_t         AppData[PHHAL_MAX_ATR_LENGTH]; /**< Application data information of the
    577                                                         tag discovered (= Historical bytes for
    578                                                         type A) */
    579     uint8_t         AppDataLength;                  /**< Application data length */
    580     uint8_t         Sak;                            /**< SAK informationof the TYPE A
    581                                                        Tag Discovered */
    582     uint8_t         AtqA[PHHAL_ATQA_LENGTH];        /**< ATQA informationof the TYPE A
    583                                                        Tag Discovered */
    584     uint8_t         MaxDataRate;                    /**< Maximum data rate supported by the TYPE A
    585                                                        Tag Discovered */
    586     uint8_t         Fwi_Sfgt;                       /**< Frame waiting time and start up frame guard
    587                                                     time as defined in ISO/IEC 14443-4[7] for
    588                                                     type A */
    589 } phNfc_sIso14443AInfo_t;
    590 
    591 
    592 /** \ingroup grp_hal_nfci
    593 *
    594 *  \brief Remote Device Reader B RF Gate Information Container
    595 *
    596 *  The <em> Reader B structure </em> includes the available information
    597 *  related to the discovered ISO14443B remote device. This information
    598 *  is updated for every device discovery.
    599 *  \note None.
    600 *
    601 */
    602 typedef struct phNfc_sIso14443BInfo_t
    603 {
    604     union phNfc_uAtqBInfo
    605     {
    606         struct phNfc_sAtqBInfo
    607         {
    608             uint8_t         Pupi[PHHAL_PUPI_LENGTH];            /**< PUPI information  of the TYPE B
    609                                                                     Tag Discovered */
    610             uint8_t         AppData[PHHAL_APP_DATA_B_LENGTH];   /**< Application Data  of the TYPE B
    611                                                                     Tag Discovered */
    612             uint8_t         ProtInfo[PHHAL_PROT_INFO_B_LENGTH]; /**< Protocol Information  of the TYPE B
    613                                                                     Tag Discovered */
    614         } AtqResInfo;
    615         uint8_t         AtqRes[PHHAL_ATQB_LENGTH];          /**< ATQB Response Information of TYPE B
    616                                                                 Tag Discovered */
    617     } AtqB;
    618     uint8_t         HiLayerResp[PHHAL_MAX_ATR_LENGTH];  /**< Higher Layer Response information
    619                                                              in answer to ATRRIB Command for Type B */
    620     uint8_t         HiLayerRespLength;                  /**< Higher Layer Response length */
    621     uint8_t         Afi;                                /**< Application Family Identifier of TYPE B
    622                                                                 Tag Discovered */
    623     uint8_t         MaxDataRate;                        /**< Maximum data rate supported by the TYPE B
    624                                                              Tag Discovered */
    625 } phNfc_sIso14443BInfo_t;
    626 
    627 
    628 /** \ingroup grp_hal_nfci
    629 *
    630 *  \brief Remote Device Reader B prime RF Gate Information Container
    631 *
    632 */
    633 typedef struct phNfc_sIso14443BPrimeInfo_t
    634 {
    635     /* TODO: This will be updated later */
    636     void *BPrimeCtxt;
    637 } phNfc_sIso14443BPrimeInfo_t;
    638 
    639 
    640 /** \ingroup grp_hal_nfci
    641 *
    642 *  \brief Remote Device Jewel Reader RF Gate Information Container
    643 *
    644 *  The <em> Jewel Reader structure </em> includes the available information
    645 *  related to the discovered Jewel remote device. This information
    646 *  is updated for every device discovery.
    647 *  \note None.
    648 *
    649 */
    650 typedef struct phNfc_sJewelInfo_t
    651 {
    652     uint8_t         Uid[PHHAL_MAX_UID_LENGTH];      /**< UID information of the TYPE A
    653                                                          Tag Discovered */
    654     uint8_t         UidLength;                      /**< UID information length, shall not be greater
    655                                                     than PHHAL_MAX_UID_LENGTH i.e., 10 */
    656     uint8_t         HeaderRom0; /**< Header Rom byte zero */
    657     uint8_t         HeaderRom1; /**< Header Rom byte one */
    658 
    659 } phNfc_sJewelInfo_t;
    660 
    661 
    662 /** \ingroup grp_hal_nfci
    663 *
    664 *  \brief Remote Device Felica Reader RF Gate Information Container
    665 *
    666 *  The <em> Felica Reader structure </em> includes the available information
    667 *  related to the discovered Felica remote device. This information
    668 *  is updated for every device discovery.
    669 *  \note None.
    670 *
    671 */
    672 typedef struct phNfc_sFelicaInfo_t
    673 {
    674     uint8_t     IDm[(PHHAL_FEL_ID_LEN + 2)];              /**< Current ID of Felica tag */
    675     uint8_t     IDmLength;                          /**< IDm length, shall not be greater
    676                                                     than PHHAL_FEL_ID_LEN i.e., 8 */
    677     uint8_t     PMm[PHHAL_FEL_PM_LEN];              /**< Current PM of Felica tag */
    678     uint8_t     SystemCode[PHHAL_FEL_SYS_CODE_LEN]; /**< System code of Felica tag */
    679 } phNfc_sFelicaInfo_t;
    680 
    681 
    682 /** \ingroup grp_hal_nfci
    683 *
    684 *  \brief Remote Device Reader 15693 RF Gate Information Container
    685 *
    686 *  The <em> Reader A structure </em> includes the available information
    687 *  related to the discovered ISO15693 remote device. This information
    688 *  is updated for every device discovery.
    689 *  \note None.
    690 *
    691 */
    692 
    693 typedef struct phNfc_sIso15693Info_t
    694 {
    695     uint8_t         Uid[PHHAL_15693_UID_LENGTH];      /**< UID information of the 15693
    696                                                        Tag Discovered */
    697     uint8_t         UidLength;                      /**< UID information length, shall not be greater
    698                                                     than PHHAL_15693_UID_LENGTH i.e., 8 */
    699     uint8_t         Dsfid;                          /**< DSF information of the 15693
    700                                                        Tag Discovered */
    701     uint8_t         Flags;                          /**< Information about the Flags
    702                                                         in the 15693 Tag Discovered */
    703     uint8_t         Afi;                            /**< Application Family Identifier of
    704                                                           15693 Tag Discovered */
    705 } phNfc_sIso15693Info_t;
    706 
    707 
    708 /** \ingroup grp_hal_nfci
    709 *
    710 *  \brief NFC Data Rate Supported between the Reader and the Target
    711 *
    712 *  The <em> \ref phHalNfc_eDataRate enum </em> lists all the Data Rate
    713 *  values to be used to determine the rate at which the data is transmitted
    714 *  to the target.
    715 *
    716 *  \note None.
    717 */
    718 
    719 
    720 /** \ingroup grp_hal_nfci
    721 *
    722 *  \brief NFCIP1 Data rates
    723 *
    724 */
    725 typedef enum phNfc_eDataRate_t{
    726     phNfc_eDataRate_106    = 0x00U,
    727     phNfc_eDataRate_212,
    728     phNfc_eDataRate_424,
    729     /* phNfc_eDataRate_848,
    730     phNfc_eDataRate_1696,
    731     phNfc_eDataRate_3392,
    732     phNfc_eDataRate_6784,*/
    733     phNfc_eDataRate_RFU
    734 } phNfc_eDataRate_t;
    735 
    736 
    737 /** \ingroup grp_hal_nfci
    738 *
    739 *  \brief NFCIP1 Gate Information Container
    740 *
    741 *  The <em> NFCIP1 structure </em> includes the available information
    742 *  related to the discovered NFCIP1 remote device. This information
    743 *  is updated for every device discovery.
    744 *  \note None.
    745 *
    746 */
    747 typedef struct phNfc_sNfcIPInfo_t
    748 {
    749     /* Contains the random NFCID3I conveyed with the ATR_REQ.
    750         always 10 bytes length
    751         or contains the random NFCID3T conveyed with the ATR_RES.
    752         always 10 bytes length */
    753     uint8_t         NFCID[PHHAL_MAX_UID_LENGTH];
    754     uint8_t         NFCID_Length;
    755     /* ATR_RES = General bytes length, Max length = 48 bytes */
    756     uint8_t         ATRInfo[PHHAL_MAX_ATR_LENGTH];
    757     uint8_t         ATRInfo_Length;
    758     /**< SAK information of the tag discovered */
    759     uint8_t         SelRes;
    760     /**< ATQA information of the tag discovered */
    761     uint8_t         SenseRes[PHHAL_ATQA_LENGTH];
    762     /**< Is Detection Mode of the NFCIP Target Active */
    763     uint8_t         Nfcip_Active;
    764     /**< Maximum frame length supported by the NFCIP device */
    765     uint16_t        MaxFrameLength;
    766     /**< Data rate supported by the NFCIP device */
    767     phNfc_eDataRate_t         Nfcip_Datarate;
    768 
    769 } phNfc_sNfcIPInfo_t;
    770 
    771 
    772 /** \ingroup grp_hal_nfci
    773 *
    774 *  \brief Remote Device Specific Information Container
    775 *
    776 *  The <em> Remote Device Information Union </em> includes the available Remote Device Information
    777 *  structures. Following the device detected, the corresponding data structure is used.
    778 *
    779 *  \note None.
    780 *
    781 */
    782 typedef union phNfc_uRemoteDevInfo_t
    783 {
    784     phNfc_sIso14443AInfo_t          Iso14443A_Info;
    785     phNfc_sIso14443BInfo_t          Iso14443B_Info;
    786     phNfc_sIso14443BPrimeInfo_t     Iso14443BPrime_Info;
    787     phNfc_sNfcIPInfo_t              NfcIP_Info;
    788     phNfc_sFelicaInfo_t             Felica_Info;
    789     phNfc_sJewelInfo_t              Jewel_Info;
    790     phNfc_sIso15693Info_t           Iso15693_Info;
    791 } phNfc_uRemoteDevInfo_t;
    792 
    793 
    794 /** \ingroup grp_hal_nfci
    795 *
    796 *  \brief RF Device Type Listing
    797 *
    798 *  The <em> RF Device Type List </em> is used to identify the type of
    799 *  remote device that is discovered/connected. There seperate
    800 *  types to identify a Remote Reader (denoted by _PCD) and
    801 *  Remote Tag (denoted by _PICC)
    802 *  \note None.
    803 *
    804 */
    805 typedef enum phNfc_eRFDevType_t
    806 {
    807     phNfc_eUnknown_DevType        = 0x00U,
    808 
    809     /* Specific PCD Devices */
    810     phNfc_eISO14443_A_PCD,
    811     phNfc_eISO14443_B_PCD,
    812     phNfc_eISO14443_BPrime_PCD,
    813     phNfc_eFelica_PCD,
    814     phNfc_eJewel_PCD,
    815     phNfc_eISO15693_PCD,
    816     /* Generic PCD Type */
    817     phNfc_ePCD_DevType,
    818 
    819     /* Generic PICC Type */
    820     phNfc_ePICC_DevType,
    821     /* Specific PICC Devices */
    822     phNfc_eISO14443_A_PICC,
    823     phNfc_eISO14443_4A_PICC,
    824     phNfc_eISO14443_3A_PICC,
    825     phNfc_eMifare_PICC,
    826     phNfc_eISO14443_B_PICC,
    827     phNfc_eISO14443_4B_PICC,
    828     phNfc_eISO14443_BPrime_PICC,
    829     phNfc_eFelica_PICC,
    830     phNfc_eJewel_PICC,
    831     phNfc_eISO15693_PICC,
    832 
    833     /* NFC-IP1 Device Types */
    834     phNfc_eNfcIP1_Target,
    835     phNfc_eNfcIP1_Initiator,
    836 
    837     /* Other Sources */
    838     phNfc_eInvalid_DevType
    839 
    840 } phNfc_eRFDevType_t;
    841 
    842 
    843 /** \ingroup grp_hal_nfci
    844 *
    845 *  \brief Remote Device Type Listing
    846 *
    847 *  The <em> Remote Device Type List </em> is used to identify the type of
    848 *  remote device that is discovered/connected
    849 *  \note This is same as RF Device Type List.
    850 *
    851 */
    852 typedef phNfc_eRFDevType_t phNfc_eRemDevType_t;
    853 
    854 
    855 /** \ingroup grp_hal_common
    856  *
    857  *
    858  *  \brief Common Command Attribute
    859  *
    860  *  The <em> Hal Command Union </em> includes each available type of Commands.
    861  *
    862  * \note None.
    863  *
    864  */
    865 typedef union phNfc_uCommand_t
    866 {
    867   phNfc_eMifareCmdList_t         MfCmd;         /**< Mifare command structure.  */
    868   phNfc_eIso14443_4_CmdList_t    Iso144434Cmd;  /**< ISO 14443-4 command structure.  */
    869   phNfc_eFelicaCmdList_t         FelCmd;        /**< Felica command structure.  */
    870   phNfc_eJewelCmdList_t          JewelCmd;      /**< Jewel command structure.  */
    871   phNfc_eIso15693_CmdList_t      Iso15693Cmd;   /**< ISO 15693 command structure.  */
    872   phNfc_eNfcIP1CmdList_t         NfcIP1Cmd;     /**< ISO 18092 (NFCIP1) command structure */
    873 } phNfc_uCmdList_t;
    874 
    875 
    876 /** \ingroup grp_hal_nfci
    877  *
    878  *  \brief Remote Device Information Structure
    879  *
    880  *  The <em> Remote Device Information Structure </em> holds information about one single Remote
    881  *  Device detected by the polling function .\n
    882  *  It lists parameters common to all supported remote devices.
    883  *
    884  *  \note
    885  *
    886  *  \sa \ref phHal4Nfc_ConfigureDiscovery and \ref phHal4Nfc_Connect
    887  *
    888  */
    889 typedef struct phNfc_sRemoteDevInformation_t
    890 {
    891     uint8_t                    SessionOpened;       /**< [out] Boolean
    892                                                      *   Flag indicating the validity of
    893                                                      *   the handle of the remote device. */
    894     phNfc_eRemDevType_t        RemDevType;          /**< [out] Remote device type which says that remote
    895                                                     is Reader A or Reader B or NFCIP or Felica or
    896                                                     Reader B Prime or Jewel*/
    897     phNfc_uRemoteDevInfo_t     RemoteDevInfo;       /**< Union of available Remote Device.
    898                                                      *   \ref phNfc_uRemoteDevInfo_t Information.  */
    899 } phNfc_sRemoteDevInformation_t;
    900 
    901 
    902 /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
    903 /*    TARGET STRUCTURES */
    904 
    905 
    906 /** \ingroup  grp_hal_common
    907  *
    908  *  \brief Transceive Information Data Structure for sending commands/response
    909  *         to the remote device
    910  *
    911  *  The <em> Transceive Information Data Structure </em> is used to pass the
    912  *  Command, Address (only required for MIFARE) and the send and receive data
    913  *  data structure (buffer and length) for communication with remote device
    914  *
    915  *
    916  */
    917 typedef struct phNfc_sTransceiveInfo_t
    918 {
    919     phNfc_uCmdList_t                cmd;
    920 
    921     /** \internal Address Field required for only Mifare
    922      *  Family Proprietary Cards.
    923      *  The Address Size is Valid only upto 255 Blocks limit
    924      *  i:e for Mifare 4K
    925      */
    926     uint8_t                         addr;
    927     phNfc_sData_t                   sSendData;
    928     phNfc_sData_t                   sRecvData;
    929 } phNfc_sTransceiveInfo_t;
    930 
    931 
    932 /** \ingroup grp_hal_nfci
    933 *
    934 *  \brief Poll Device Information for conifiguring the discovery wheel
    935           Reader and Card Emulation Phases
    936 *
    937 *  The <em> \ref phNfc_sPollDevInfo_t enum </em> is used to enable/disable
    938 *  phases of the discovery wheel related to specific reader types and
    939 *  card emulation phase
    940 *  \note Enabling specific Reader technology when NFCIP1 speed is set in the
    941 *        phNfc_sADD_Cfg_t is implicitly done in HAL. Use this structure to only
    942 *        enable/disable Card Reader Functionality
    943 */
    944 typedef struct phNfc_sPollDevInfo_t
    945 {
    946     unsigned                    EnableIso14443A : 1;      /**< Flag to enable
    947                                                         Reader A discovery */
    948     unsigned                    EnableIso14443B : 1;      /**< Flag to enable
    949                                                         Reader B discovery */
    950     unsigned                    EnableFelica212 : 1;   /**< Flag to enable
    951                                                         Felica 212 discovery */
    952     unsigned                    EnableFelica424 : 1;   /**< Flag to enable
    953                                                         Felica 424 discovery */
    954     unsigned                    EnableIso15693 : 1;     /**< Flag to enable
    955                                                         ISO 15693 discovery */
    956     unsigned                    EnableNfcActive : 1; /**< Flag to enable
    957                                                         Active Mode of NFC-IP discovery.
    958                                                         This is updated internally
    959                                                         based on the NFC-IP speed.
    960                                                         */
    961     unsigned                    RFU : 1;                /**< Reserved for future use */
    962     unsigned                    DisableCardEmulation : 1;    /**< Flag to
    963                                                             disable the card emulation */
    964 } phNfc_sPollDevInfo_t;
    965 
    966 
    967 /** \ingroup grp_hal_nfci
    968 *
    969 *  \brief P2P speed for the Initiator
    970 *
    971 *  The <em> \ref phNfc_eP2PMode_t enum </em> lists all the NFCIP1 speeds
    972 *  to be used for configuring the NFCIP1 discovery
    973 *
    974 *  \note None.
    975 */
    976 typedef enum phNfc_eP2PMode_t
    977 {
    978     phNfc_eDefaultP2PMode  = 0x00U,
    979     phNfc_ePassive106 = 0x01U,
    980     phNfc_ePassive212 = 0x02U,
    981     phNfc_ePassive424 = 0x04U,
    982     phNfc_eActive     = 0x08U,
    983     phNfc_eP2P_ALL    = 0x0FU,
    984     phNfc_eInvalidP2PMode = 0xFFU
    985 } phNfc_eP2PMode_t;
    986 
    987 
    988 /** \ingroup grp_hal_common
    989 *
    990 *  \brief Identities the type of Notification
    991 *
    992 *  This enumeration is used to specify the type of notification notified
    993 *  to the upper layer. This classifies the notification into two types
    994 *  one for the discovery notifications and the other for all the remaining
    995 *  event notifications
    996 *  \note None.
    997 */
    998 typedef enum phNfc_eNotificationType_t
    999 {
   1000     INVALID_NFC_NOTIFICATION    = 0x00U, /* Invalid Notification */
   1001     NFC_DISCOVERY_NOTIFICATION,         /* Remote Device Discovery Notification */
   1002     NFC_EVENT_NOTIFICATION              /* Event Notification from the other hosts */
   1003 } phNfc_eNotificationType_t;
   1004 
   1005 
   1006 /** \ingroup grp_hal_common
   1007 *
   1008 *  \brief
   1009 *
   1010 *  \note None.
   1011 */
   1012 typedef struct phNfc_sUiccInfo_t
   1013 {
   1014     /* AID and Parameter Information is obtained if the
   1015      * eventType is NFC_EVT_TRANSACTION.
   1016      */
   1017     phNfc_sData_t           aid;
   1018     phNfc_sData_t           param;
   1019 
   1020 } phNfc_sUiccInfo_t;
   1021 
   1022 
   1023 /** \ingroup grp_hal_nfci
   1024 *
   1025 *  \brief P2P Information for the Initiator
   1026 *
   1027 *  The <em> \ref phNfc_sNfcIPCfg_t </em> holds the P2P related information
   1028 *  use by the NFC Device during P2P Discovery and connection
   1029 *
   1030 *  \note None.
   1031 */
   1032 typedef struct phNfc_sNfcIPCfg_t
   1033 {
   1034     /* ATR_RES = General bytes length, Max length = 48 bytes */
   1035     uint8_t         generalBytesLength;
   1036     uint8_t         generalBytes[PHHAL_MAX_ATR_LENGTH];
   1037 
   1038     /* TODO: This will be updated later for any additional params*/
   1039 } phNfc_sNfcIPCfg_t;
   1040 
   1041 
   1042 /** \ingroup grp_hal_common
   1043 *
   1044 *  \brief Discovery Configuration Mode
   1045 *
   1046 *  This enumeration is used to choose the Discovery Configuration
   1047 *  Mode :- Configure and Start, Stop or Start with last set
   1048 *  configuration
   1049 *  \note None.
   1050 */
   1051 typedef enum phNfc_eDiscoveryConfigMode_t
   1052 {
   1053     NFC_DISCOVERY_CONFIG  = 0x00U,/**< Configure discovery with values
   1054                                        in phNfc_sADD_Cfg_t and start
   1055                                        discovery */
   1056     NFC_DISCOVERY_START,         /**< Start Discovery with previously set
   1057                                       configuration */
   1058     NFC_DISCOVERY_STOP,          /**< Stop the Discovery */
   1059     NFC_DISCOVERY_RESUME       /**< Resume the Discovery with previously
   1060                                    *  set configuration.
   1061                                    *  This is valid only when the Target
   1062                                    *  is not connected.
   1063                                    */
   1064 }phNfc_eDiscoveryConfigMode_t;
   1065 
   1066 /** \ingroup grp_hal_common
   1067 *
   1068 *  \brief Target or Tag Release Mode
   1069 *
   1070 *  This enumeration defines various modes of releasing an acquired target
   1071 *  or tag.
   1072 *  \note None.
   1073 */
   1074 typedef enum phNfc_eReleaseType_t
   1075 {
   1076     NFC_INVALID_RELEASE_TYPE    =0x00U,/**<Invalid release type */
   1077     NFC_DISCOVERY_RESTART,      /**< Release current target and
   1078                                      restart discovery within same technology*/
   1079     NFC_DISCOVERY_CONTINUE,    /**< Release current target and continue
   1080                                     discovery with next technology in the wheel */
   1081     NFC_SMARTMX_RELEASE    /**< Release SmartMX from wired mode to previous mode
   1082                                 (Virtual or Off) */
   1083 } phNfc_eReleaseType_t;
   1084 
   1085 /** \ingroup  grp_hal_common
   1086 *
   1087 *  \brief Poll configuration structure
   1088 *
   1089 *  The <em> Poll configuration structure </em> holds information about the
   1090 *  enabling the the type of discovery required by the application. This
   1091 *  structure is the input parameter for the discovery call
   1092 *
   1093 *  \note All members of this structure are input parameters [out].
   1094 *
   1095 *  \sa \ref phNfc_eP2PMode_t
   1096 *
   1097 */
   1098 typedef struct phNfc_sADD_Cfg_t
   1099 {
   1100     union
   1101     {
   1102         phNfc_sPollDevInfo_t        PollCfgInfo;        /**<  Enable/Disable Specific
   1103                                                               Reader Functionality and
   1104                                                               Card Emulation */
   1105         unsigned                    PollEnabled;     /** Can be used to set polling 'Off'
   1106                                                       by setting PollEnabled to zero */
   1107 
   1108     } PollDevInfo;
   1109     uint32_t                    Duration;           /**< Duration of virtual or idle
   1110                                                     period in microseconds in the step size
   1111                                                     of 48 microseconds.If duration is set less
   1112                                                     than  48 microseconds then default value is
   1113                                                     used.For more details please refer PN 544
   1114                                                     user manual*/
   1115     uint8_t                     NfcIP_Mode ;      /**< Select the P2P
   1116                                                     speeds using phNfc_eP2PMode_t type.
   1117                                                     This is used to enable NFC-IP Discovery
   1118                                                     The related Reader Type will be implicitly
   1119                                                     selected */
   1120     uint8_t                     NfcIP_Tgt_Disable;   /**< Flag to
   1121                                                    disable the NFCIP1 TARGET */
   1122 } phNfc_sADD_Cfg_t;
   1123 
   1124 /*@}*/
   1125 
   1126 #endif /* PHNFCTYPES */
   1127 
   1128