phNfcHalTypes.h revision 6dd948323de0f31b413c9f19a905f1c145c9c456
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  phNfcHalTypes.h
19 * \brief Structure declarations/type definitions belonging to the HAL subsystem.
20 *
21 * Project: NFC MW / HAL
22 *
23 * $Date: Thu Apr  8 17:11:39 2010 $
24 * $Author: ing04880 $
25 * $Revision: 1.106 $
26 * $Aliases: NFC_FRI1.1_WK1007_SDK,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
31#ifndef PHNFCHALTYPES_H /* */
32#define PHNFCHALTYPES_H /* */
33
34/**
35 *  \name HAL Types
36 *
37 * File: \ref phNfcHalTypes.h
38 *
39 */
40
41/*@{*/
42#define PHNFCHALTYPES_FILEREVISION "$Revision: 1.106 $" /**< \ingroup grp_file_attributes */
43#define PHNFCHALTYPES_FILEALIASES  "$Aliases: NFC_FRI1.1_WK1007_SDK,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 */
44/*@}*/
45
46#include <phNfcTypes.h>
47#include <phNfcCompId.h>
48#include <phNfcConfig.h>
49
50#ifndef NXP_HAL_MEM_INFO_SIZE
51#define NXP_HAL_MEM_INFO_SIZE           0x01U
52#endif
53
54#if (NXP_HAL_MEM_INFO_SIZE > 0x01)
55#define NXP_FW_UPLOAD_PROGRESS          0x965AU
56#define NXP_FW_UPLOAD_SUCCESS           0x0000U
57#else
58#define NXP_FW_UPLOAD_PROGRESS          0x5AU
59#define NXP_FW_UPLOAD_SUCCESS           0x00U
60#endif
61
62
63typedef struct phHal_sMemInfo
64{
65    uint16_t            fw_magic;
66    uint16_t            fw_rfu;
67    uint32_t            hal_version;
68}phHal_sMemInfo_t;
69
70
71/** \ingroup  grp_hal_common
72 *
73 * \if hal
74 *  \brief Protocol Support Information
75 * \else
76 *  \brief HAL-Specific
77 * \endif
78 *
79 *  The <em> Supported Protocols Structure </em> holds all protocol supported by the current NFC
80 *  device.
81 *
82 *  \note All members of this structure are output parameters [out].
83 *
84 */
85typedef phNfc_sSupProtocol_t phHal_sSupProtocol_t;
86
87
88/** \ingroup grp_hal_common
89 *
90 *
91 * \if hal
92 *  \brief Information related to the NFC Device
93 * \else
94 *  \brief HAL-Specific
95 * \endif
96 *
97 *  The <em> Device Information Structure </em> holds information
98 *  related to the NFC IC read during initialization time.
99 *  It allows the caller firware, hardware version, the model id,
100 *  HCI verison supported and vendor name. Refer to the NFC Device
101 *  User Manual on how to interpret each of the values. In addition
102 *  it also contains capabilities of the NFC Device such as the
103 *  protocols supported in Reader and emulation mode
104 *
105 */
106
107typedef phNfc_sDeviceCapabilities_t phHal_sDeviceCapabilities_t;
108
109
110/**
111 * \ingroup grp_hal_common
112 *
113 * \if hal
114 *  \brief Hardware Reference - The Peripheral Representation
115 * \else
116 *  \brief HAL-Specific
117 * \endif
118 *
119 *  The Hardware Reference structure is filled as part of the open function and
120 *  contains information regarding connected peripheral NFC device. It also
121 *  stores the refernce to the communication driver passed by the HAL client
122 *  for usage during communication with the NFC Device
123 *
124 * \note The caller can consider this structure atomic, no interpretation is required
125 *       for HAL operation.
126 *
127 * \sa phHal4Nfc_Open .
128 *
129 */
130
131/**
132 * \ingroup grp_hal_common
133 *
134 *  \brief Hardware Reference - The Peripheral Representation
135 *
136 *  The Hardware Reference structure is filled as part of the open function and
137 *  contains information regarding connected peripheral NFC device. It also
138 *  stores the refernce to the communication driver passed by the HAL client
139 *  for usage during communication with the NFC Device
140 *
141 * \note The caller can consider this structure atomic, no interpretation is required
142 *       for HAL operation.
143 *
144 */
145typedef struct phHal_sHwReference
146{
147    /**<  Will be usable/valid after the Open function. */
148    void                            *p_board_driver;
149    /**<  Session Identifier for the established session */
150    uint8_t                         session_id[SESSIONID_SIZE];
151    /**<  SMX  Connected TRUE/FALSE */
152    uint8_t                         smx_connected;
153    /**<  UICC  Connected TRUE/FALSE */
154    uint8_t                         uicc_connected;
155    /**<  UICC  Reader Mode is Active TRUE/FALSE */
156    uint8_t                         uicc_rdr_active;
157    /**<  Device information. */
158    phNfc_sDeviceCapabilities_t     device_info;
159    /**<  Context of the HAL Layer */
160    void                            *hal_context;
161    /**<  Context of the DAL Layer */
162    void                            *dal_context;
163} phHal_sHwReference_t;
164
165
166/** \ingroup grp_hal_common
167 *
168 * \if hal
169 * \brief Hardware configuration - Configuration Parameters for the NFC Device
170 * \else
171 * \brief HAL-Specific
172 * \endif
173 *
174 *  The parameters used to configure the device during the initialisation.
175 *  This structure is used internally by the HAL implementation and is filled
176 *  up based on various configuration parameters from the config file
177 * \note None.
178 *
179 */
180
181typedef struct phHal_sHwConfig
182{
183
184    uint8_t             session_id[SESSIONID_SIZE]; /**<  Session Identifier for
185                                                     the established session */
186
187    uint8_t             clk_req; /**<  Clock Request Setting */
188
189    uint8_t             input_clk; /**<  Input Clock Setting */
190
191} phHal_sHwConfig_t;
192
193
194
195/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
196
197/* This data structure is not used anymore and will be removed in subsequent
198   release */
199typedef struct phHal_sDepFlags
200{
201   unsigned int MetaChaining : 1;
202   unsigned int NADPresent   : 1;
203} phHal_sDepFlags_t;
204
205/* This data structure is not used anymore and will be removed in subsequent
206   release */
207
208typedef struct phHal_sDepAdditionalInfo
209{
210    phHal_sDepFlags_t DepFlags;
211    uint8_t NAD;
212} phHal_sDepAdditionalInfo_t;
213
214
215/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
216
217
218
219/** \ingroup grp_hal_common
220 *
221 * \if hal
222 *  \brief Enumerated MIFARE Commands
223 * \else
224 *  \brief HAL-Specific
225 * \endif
226 *
227 *  The <em> Mifare Command List Enumerator </em> lists all available Mifare native commands.
228 *
229 * \note None.
230 *
231 */
232
233typedef phNfc_eMifareCmdList_t phHal_eMifareCmdList_t;
234
235#define    phHal_eMifareRaw        phNfc_eMifareRaw
236#define    phHal_eMifareAuthentA   phNfc_eMifareAuthentA
237#define    phHal_eMifareAuthentB   phNfc_eMifareAuthentB
238#define    phHal_eMifareRead16     phNfc_eMifareRead16
239#define    phHal_eMifareRead       phNfc_eMifareRead
240#define    phHal_eMifareWrite16    phNfc_eMifareWrite16
241#define    phHal_eMifareWrite4     phNfc_eMifareWrite4
242#define    phHal_eMifareInc        phNfc_eMifareInc
243#define    phHal_eMifareDec        phNfc_eMifareDec
244#define    phHal_eMifareTransfer   phNfc_eMifareTransfer
245#define    phHal_eMifareRestore    phNfc_eMifareRestore
246#define    phHal_eMifareReadSector phNfc_eMifareReadSector
247#define    phHal_eMifareWriteSector phNfc_eMifareWriteSector
248#define    phHal_eMifareInvalidCmd phNfc_eMifareInvalidCmd
249
250
251/** \ingroup grp_hal_common
252 *
253 *  The <em> T=Cl Command List Enumerator </em> lists all available T=Cl Commands.
254 *
255 * \note None.
256 *
257 */
258typedef phNfc_eIso14443_4_CmdList_t phHal_eIso14443_4_CmdList_t;
259
260#define    phHal_eIso14443_4_Raw    phNfc_eIso14443_4_Raw
261
262
263/** \ingroup grp_hal_common
264 *
265 *  The <em> NFCIP1 Command List Enumerator </em> lists all available NFCIP1 Commands.
266 *
267 * \note None.
268 *
269 */
270typedef phNfc_eNfcIP1CmdList_t phHal_eNfcIP1CmdList_t;
271
272#define       phHal_eNfcIP1_Raw             phNfc_eNfcIP1_Raw
273
274
275/** \ingroup grp_hal_common
276 *
277 *  The <em> ISO15693 Command List Enumerator </em> lists all available ISO15693 Commands.
278 *
279 * \note None.
280 *
281 */
282
283typedef phNfc_eIso15693_CmdList_t phHal_eIso15693_CmdList_t;
284
285#if 0
286#define    phHal_eIso15693_Raw             phNfc_eIso15693_Raw
287#endif
288#define    phHal_eIso15693_Cmd             phNfc_eIso15693_Cmd
289#define    phHal_eIso15693_Invalid         phNfc_eIso15693_Invalid
290
291/** \ingroup grp_hal_common
292 *
293 *  The <em> Felica Command List Enumerator </em> lists all available Felica Commands.
294 *
295 * \note None.
296 *
297 */
298
299typedef enum phHal_eFelicaCmdList
300{
301    phHal_eFelica_Raw             = 0xF0U, /**< Felica Raw command:\n
302                                                 - This command sends the data buffer directly
303                                                 to the remote device */
304    phHal_eFelica_Check           = 0x00, /**< Felica Check command:\n
305                                                 - This command checks the data from the Felica
306                                                  remote device */
307    phHal_eFelica_Update          = 0x01, /**< Felica Update command:\n
308                                                 - This command updates the data onto the Felica
309                                                  remote device */
310    phHal_eFelica_Invalid         = 0xFFU      /**< Invalid Command */
311} phHal_eFelicaCmdList_t;
312
313
314typedef enum phHal_eJewelCmdList
315{
316    phHal_eJewel_Raw            = 0x00U, /**< Jewel command:\n
317                                                 - This command sends the data buffer directly
318                                                 to the remote device */
319    phHal_eJewel_Invalid        = 0xFFU  /**< Invalid jewel command */
320}phHal_eJewelCmdList_t;
321
322
323
324/** \ingroup grp_hal_nfci
325*
326* \if hal
327*  \brief Remote Device Reader A RF Gate Information Container
328* \else
329*  \brief HAL-Specific
330* \endif
331*
332*  The <em> Reader A structure </em> includes the available information
333*  related to the discovered ISO14443A remote device. This information
334*  is updated for every device discovery.
335*  \note None.
336*
337*/
338typedef phNfc_sIso14443AInfo_t phHal_sIso14443AInfo_t;
339
340/** \ingroup grp_hal_nfci
341*
342* \if hal
343*  \brief Remote Device Reader B RF Gate Information Container
344* \else
345*  \brief HAL-Specific
346* \endif
347*
348*  The <em> Reader B structure </em> includes the available information
349*  related to the discovered ISO14443B remote device. This information
350*  is updated for every device discovery.
351*  \note None.
352*
353*/
354
355typedef phNfc_sIso14443BInfo_t phHal_sIso14443BInfo_t;
356
357typedef phNfc_sIso14443BPrimeInfo_t phHal_sIso14443BPrimeInfo;
358
359
360/** \ingroup grp_hal_nfci
361*
362* \if hal
363*  \brief Remote Device Jewel Reader RF Gate Information Container
364* \else
365*  \brief HAL-Specific
366* \endif
367*
368*  The <em> Jewel Reader structure </em> includes the available information
369*  related to the discovered Jewel remote device. This information
370*  is updated for every device discovery.
371*  \note None.
372*
373*/
374
375
376typedef phNfc_sJewelInfo_t phHal_sJewelInfo_t;
377
378/** \ingroup grp_hal_nfci
379*
380* \if hal
381*  \brief Remote Device Felica Reader RF Gate Information Container
382* \else
383*  \brief HAL-Specific
384* \endif
385*
386*  The <em> Felica Reader structure </em> includes the available information
387*  related to the discovered Felica remote device. This information
388*  is updated for every device discovery.
389*  \note None.
390*
391*/
392
393typedef phNfc_sFelicaInfo_t phHal_sFelicaInfo_t;
394
395
396/** \ingroup grp_hal_nfci
397*
398* \if hal
399*  \brief Remote Device Reader 15693 RF Gate Information Container
400* \else
401*  \brief HAL-Specific
402* \endif
403*
404*  The <em> Reader A structure </em> includes the available information
405*  related to the discovered ISO15693 remote device. This information
406*  is updated for every device discovery.
407*  \note None.
408*
409*/
410
411typedef phNfc_sIso15693Info_t phHal_sIso15693Info_t;
412
413
414/** \ingroup grp_hal_nfci
415*
416* \if hal
417*  \brief NFC Data Rate Supported between the Reader and the Target
418* \else
419*  \brief HAL-Specific
420* \endif
421*
422*  The <em> \ref phHalNfc_eDataRate enum </em> lists all the Data Rate
423*  values to be used to determine the rate at which the data is transmitted
424*  to the target.
425*
426*  \note None.
427*/
428
429
430typedef phNfc_eDataRate_t phHalNfc_eDataRate_t;
431
432
433/** \ingroup grp_hal_nfci
434*
435* \if hal
436*  \brief NFCIP1 Gate Information Container
437* \else
438*  \brief HAL-Specific
439* \endif
440*
441*  The <em> NFCIP1 structure </em> includes the available information
442*  related to the discovered NFCIP1 remote device. This information
443*  is updated for every device discovery.
444*  \note None.
445*
446*/
447
448typedef phNfc_sNfcIPInfo_t phHal_sNfcIPInfo_t;
449
450
451/** \ingroup grp_hal_nfci
452*
453* \if hal
454*  \brief Remote Device Specific Information Container
455* \else
456*  \brief HAL-Specific
457* \endif
458*
459*  The <em> Remote Device Information Union </em> includes the available Remote Device Information
460*  structures. Following the device detected, the corresponding data structure is used.
461*
462*  \note None.
463*
464*/
465
466typedef phNfc_uRemoteDevInfo_t phHal_uRemoteDevInfo_t;
467
468/** \ingroup grp_hal_nfci
469*
470* \if hal
471*  \brief RF Device Type Listing
472* \else
473*  \brief HAL-Specific
474* \endif
475*
476*  The <em> RF Device Type List </em> is used to identify the type of
477*  remote device that is discovered/connected. There seperate
478*  types to identify a Remote Reader (denoted by _PCD) and
479*  Remote Tag (denoted by _PICC)
480*  \note None.
481*
482*/
483
484typedef phNfc_eRFDevType_t phHal_eRFDevType_t;
485
486#define    phHal_eUnknown_DevType phNfc_eUnknown_DevType
487
488    /* Specific PCD Devices */
489#define    phHal_eISO14443_A_PCD phNfc_eISO14443_A_PCD
490#define    phHal_eISO14443_B_PCD phNfc_eISO14443_B_PCD
491#define    phHal_eISO14443_BPrime_PCD phNfc_eISO14443_BPrime_PCD
492#define    phHal_eFelica_PCD phNfc_eFelica_PCD
493#define    phHal_eJewel_PCD phNfc_eJewel_PCD
494#define    phHal_eISO15693_PCD phNfc_eISO15693_PCD
495    /* Generic PCD Type */
496#define    phHal_ePCD_DevType phNfc_ePCD_DevType
497
498    /* Generic PICC Type */
499#define    phHal_ePICC_DevType phNfc_ePICC_DevType
500    /* Specific PICC Devices */
501#define    phHal_eISO14443_A_PICC phNfc_eISO14443_A_PICC
502#define    phHal_eISO14443_4A_PICC phNfc_eISO14443_4A_PICC
503#define    phHal_eISO14443_3A_PICC phNfc_eISO14443_3A_PICC
504#define    phHal_eMifare_PICC phNfc_eMifare_PICC
505#define    phHal_eISO14443_B_PICC phNfc_eISO14443_B_PICC
506#define    phHal_eISO14443_4B_PICC phNfc_eISO14443_4B_PICC
507#define    phHal_eISO14443_BPrime_PICC phNfc_eISO14443_BPrime_PICC
508#define    phHal_eFelica_PICC phNfc_eFelica_PICC
509#define    phHal_eJewel_PICC phNfc_eJewel_PICC
510#define    phHal_eISO15693_PICC phNfc_eISO15693_PICC
511
512    /* NFC-IP1 Device Types */
513#define    phHal_eNfcIP1_Target phNfc_eNfcIP1_Target
514#define    phHal_eNfcIP1_Initiator phNfc_eNfcIP1_Initiator
515
516    /* Other Sources */
517#define    phHal_eInvalid_DevType phNfc_eInvalid_DevType
518
519/** \ingroup grp_hal_nfci
520*
521* \if hal
522*  \brief Remote Device Type Listing
523* \else
524*  \brief HAL-Specific
525* \endif
526*
527*  The <em> Remote Device Type List </em> is used to identify the type of
528*  remote device that is discovered/connected
529*  \note This is same as RF Device Type List.
530*
531*/
532typedef phNfc_eRemDevType_t phHal_eRemDevType_t;
533
534/** \ingroup grp_hal_common
535 *
536 *
537 * \if hal
538 *  \brief Common Command Attribute
539 * \else
540 *  \brief HAL-Specific
541 * \endif
542 *
543 *  The <em> Hal Command Union </em> includes each available type of Commands.
544 *
545 * \note None.
546 *
547 */
548
549typedef phNfc_uCmdList_t phHal_uCmdList_t;
550
551
552/** \ingroup grp_hal_nfci
553 *
554 * \if hal
555 *  \brief Remote Device Information Structure
556 * \else
557 *  \brief HAL-Specific
558 * \endif
559 *
560 *  The <em> Remote Device Information Structure </em> holds information about one single Remote
561 *  Device detected by the polling function .\n
562 *  It lists parameters common to all supported remote devices.
563 *
564 *  \note
565 *
566 *  \if hal
567 *   \sa \ref phHal4Nfc_ConfigureDiscovery and \ref phHal4Nfc_Connect
568 *  \else
569 *   \sa
570 *  \endif
571 *
572 */
573
574typedef phNfc_sRemoteDevInformation_t phHal_sRemoteDevInformation_t;
575
576
577
578/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
579
580/* This data structure is not used anymore and will be removed in subsequent
581   release */
582
583typedef struct phHal_sDevInputParam
584{
585    uint8_t FelicaPollPayload[5];
586
587
588    uint8_t NfcPollPayload[5];
589
590
591    uint8_t NFCIDAuto;
592
593
594    uint8_t NFCID3i[PHHAL_NFCID_LENGTH];
595
596
597
598    uint8_t DIDiUsed;
599
600    uint8_t CIDiUsed;
601
602    uint8_t NfcNADiUsed;
603
604    /*+ MantisId : 31 - JP - 09-01-2006 */
605        /*uint8_t TClNADiUsed; */
606
607    /*- MantisId : 31 - JP - 09-01-2006 */
608    uint8_t GeneralByte[48];
609
610
611    uint8_t GeneralByteLength;
612
613
614    uint8_t ISO14443_4B_AFI;
615
616} phHal_sDevInputParam_t;
617
618
619
620
621/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
622
623
624/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
625/*    TARGET STRUCTURES */
626
627
628/** \ingroup  grp_hal_common
629 *
630 * \if hal
631 *  \brief Transceive Information Data Structure for sending commands/response
632 *         to the remote device
633 * \else
634 *  \brief HAL-Specific
635 * \endif
636 *
637 *  The <em> Transceive Information Data Structure </em> is used to pass the
638 *  Command, Address (only required for MIFARE) and the send and receive data
639 *  data structure (buffer and length) for communication with remote device
640 *
641 *
642 */
643
644typedef phNfc_sTransceiveInfo_t phHal_sTransceiveInfo_t;
645
646
647/** \ingroup grp_hal_nfci
648*
649* \if hal
650*  \brief Input information for the Type A tags
651* \else
652*  \brief HAL-Specific
653* \endif
654*
655*  The <em> \ref phHal_sIso14443ACfg structure </em> holds the information
656*  required for the NFC device to be used during ISO14443A target discovery
657*
658*  \note None.
659*/
660typedef struct phHal_sIso14443ACfg
661{
662    uint8_t     Auto_Activation;       /**< Enable Auto Activation for
663                                    Technology A \n
664                                    If set to 0, the activation procedure will stop
665                                    after Select (SAK has been received).
666                                    The host could evaluate SAK value and then decide:
667                                        - to start communicating with the remote card
668                                          using proprietary commands (see NXP_MIFARE_RAW
669                                          and NXP_MIFARE_CMD)
670                                    or
671                                        - to activate the remote card up to ISO14443-4
672                                          level (RATS and PPS) using
673                                          CONTINUE ACTIVATION command
674                                    If set to 1, activation follows the flow described in
675                                    ETSI HCI specification (restrict detection to
676                                    ISO14443-4 compliant cards).
677                                    */
678}phHal_sIso14443ACfg_t;
679
680
681/** \ingroup grp_hal_nfci
682*
683* \if hal
684*  \brief Input information for the Type B tags
685* \else
686*  \brief HAL-Specific
687* \endif
688*
689*  The <em> \ref phHal_sIso14443BCfg structure </em> holds the information
690*  required for the NFC device to be used during ISO14443B target discovery
691*
692*  \note None.
693*/
694typedef struct phHal_sIso14443BCfg
695{
696    uint8_t     AppFamily_ID;       /**< Application Family Identifier for
697                                    Technology B, 0x00 means all application */
698}phHal_sIso14443BCfg_t;
699
700/** \ingroup grp_hal_nfci
701*
702* \if hal
703*  \brief Input information for the Felica tags
704* \else
705*  \brief HAL-Specific
706* \endif
707*
708*  The <em> \ref phHal_sFelicaCfg_t structure </em> holds the information
709*  required for the NFC device to be used during Felica target discovery
710*
711*  \note None.
712*/
713
714typedef struct phHal_sFelicaCfg
715{
716    uint8_t     SystemCode[PHHAL_FEL_SYS_CODE_LEN];     /**< System code for Felica tags */
717
718}phHal_sFelicaCfg_t;
719
720
721/** \ingroup grp_hal_nfci
722*
723* \if hal
724*  \brief Poll Device Information for conifiguring the discovery wheel
725          Reader and Card Emulation Phases
726* \else
727*  \brief HAL-Specific
728* \endif
729*
730*  The <em> \ref phHal_sPollDevInfo_t enum </em> is used to enable/disable
731*  phases of the discovery wheel related to specific reader types and
732*  card emulation phase
733*  \note Enabling specific Reader technology when NFCIP1 speed is set in the
734*        phNfc_sADD_Cfg_t is implicitly done in HAL. Use this structure to only
735*        enable/disable Card Reader Functionality
736*/
737typedef phNfc_sPollDevInfo_t phHal_sPollDevInfo_t;
738
739
740/** \ingroup grp_hal_common
741*
742* \if hal
743*  \brief Identifies Type of Host
744* \else
745*  \brief HAL-Specific
746* \endif
747*
748*  This enumeration is used to identify the type of the host providing the
749*  information or the notification to the Terminal host.
750*  \note None.
751*/
752
753typedef enum phHal_HostType {
754    /*
755     * This type identifies the host controller
756     * in the NFC device
757     */
758    phHal_eHostController       = 0x00U,
759    /*
760     * This type identifies the Host Device
761     * controlling the NFC device.
762     */
763    phHal_eTerminalHost         = 0x01U,
764    /*
765     * This type identifies the uicc host
766     * connnected to the NFC device
767     */
768    phHal_eUICCHost             = 0x02U,
769    /* Host type is unknown */
770    phHal_eUnknownHost          = 0xFFU
771}phHal_HostType_t;
772
773
774/** \ingroup grp_hal_nfci
775*
776* \if hal
777*  \brief P2P speed for the Initiator
778* \else
779*  \brief HAL-Specific
780* \endif
781*
782*  The <em> \ref phHal_eP2PMode enum </em> lists all the NFCIP1 speeds
783*  to be used for configuring the NFCIP1 discovery
784*
785*  \note None.
786*/
787
788#define    phHal_eDefaultP2PMode  phNfc_eDefaultP2PMode
789#define    phHal_ePassive106 phNfc_ePassive106
790#define    phHal_ePassive212 phNfc_ePassive212
791#define    phHal_ePassive424 phNfc_ePassive424
792#define    phHal_eActive  phNfc_eActive
793#define    phHal_eP2P_ALL    phNfc_eP2P_ALL
794#define    phHal_eInvalidP2PMode phNfc_eInvalidP2PMode
795
796
797/** \ingroup grp_hal_common
798*
799* \if hal
800*  \brief Identities the type of Notification
801* \else
802*  \brief HAL-Specific
803* \endif
804*
805*  This enumeration is used to specify the type of notification notified
806*  to the upper layer. This classifies the notification into two types
807*  one for the discovery notifications and the other for all the remaining
808*  event notifications
809*  \note None.
810*/
811
812
813typedef phNfc_eNotificationType_t phHal_eNotificationType_t;
814
815
816/** \ingroup grp_hal_common
817*
818* \if hal
819*  \brief Identifies the type of event notification
820* \else
821*  \brief HAL-Specific
822* \endif
823*
824*  This enumeration is used to identify the type of the event notified
825*  to the Terminal host.
826*  \note None.
827*/
828
829typedef enum phHal_Event {
830
831
832    /* Transaction Events */
833    NFC_EVT_END_OF_TRANSACTION   = 0x11U ,
834    NFC_EVT_TRANSACTION          = 0x12U ,
835    NFC_EVT_START_OF_TRANSACTION = 0x20U ,
836
837    /* Field Events */
838    NFC_EVT_FIELD_ON             = 0x31U,
839    NFC_EVT_FIELD_OFF            = 0x34U,
840
841    /* Card/Target Activation Events */
842    NFC_EVT_ACTIVATED           = 0x33U,
843    NFC_EVT_DEACTIVATED         = 0x32U,
844
845    NFC_EVT_PROTECTED           = 0x24U ,
846
847    /* Reader Phases configuration request by UICC */
848    NFC_UICC_RDPHASES_ACTIVATE_REQ = 0x43U,
849    NFC_UICC_RDPHASES_DEACTIVATE_REQ = 0x44U,
850
851    /* Connectivity and Triggering Events - Future Use */
852    NFC_EVT_CONNECTIVITY         = 0x10U ,
853    NFC_EVT_OPERATION_ENDED      = 0x13U ,
854
855    /* NXP Specific System Information Events */
856    NFC_INFO_TXLDO_OVERCUR       = 0x71U,
857    NFC_INFO_MEM_VIOLATION       = 0x73U,
858    NFC_INFO_TEMP_OVERHEAT       = 0x74U,
859    NFC_INFO_LLC_ERROR           = 0x75U,
860
861    /* NXP EVENTS */
862    NFC_EVT_MIFARE_ACCESS          = 0x35,
863    NFC_EVT_APDU_RECEIVED          = 0x36,
864    NFC_EVT_EMV_CARD_REMOVAL       = 0x37
865
866}phHal_Event_t;
867
868typedef phNfc_sUiccInfo_t phHal_sUiccInfo_t;
869
870/** \ingroup grp_hal_common
871*
872* \if hal
873*  \brief Event notification Information
874* \else
875*  \brief HAL-Specific
876* \endif
877*
878*  This structure provides the information about the event notified
879*  to the terminal host.
880*  \note None.
881*/
882
883typedef struct phHal_sEventInfo
884{
885    /* Type of the host issuing the event */
886    phHal_HostType_t    eventHost;
887    /* Type of the source issuing the event */
888    phHal_eRFDevType_t  eventSource;
889    /* Type of the source issuing the event */
890    phHal_Event_t       eventType;
891    union   uEventInfo
892    {
893        /* Parameter information Information is obtained if the eventType is
894         * NFC_EVT_TRANSACTION for UICC.
895         */
896        phHal_sUiccInfo_t       uicc_info;
897        /* AID Information is obtained if the eventType is
898         * NFC_EVT_TRANSACTION.
899         */
900        phNfc_sData_t           aid;
901        /* Overheat Status Information is obtained if the eventType is
902         * NFC_INFO_TEMP_OVERHEAT.
903         */
904        uint8_t                 overheat_status;
905        /* rd_phases Information is obtained if the eventType is
906         * NFC_UICC_RDPHASES_ACTIVATE_REQ.
907         */
908        uint8_t                 rd_phases;
909        /* Remote Device Information is obtained if the eventType is
910         * NFC_EVT_ACTIVATED.
911         */
912        phHal_sRemoteDevInformation_t *pRemoteDevInfo;
913    }eventInfo;
914}phHal_sEventInfo_t;
915
916
917/** \ingroup grp_hal_common
918*
919* \if hal
920*  \brief Information for the Host/Uicc Emulation Support
921* \else
922*  \brief HAL-Specific
923* \endif
924*
925*  The <em> \ref phHal_sEmuSupport structure </em> holds the type
926*   of the target emulation supported.
927*
928*  \note None.
929*/
930
931typedef struct phHal_sEmuSupport
932{
933    unsigned int TypeA:1;
934    unsigned int TypeB:1;
935    unsigned int TypeBPrime:1;
936    unsigned int TypeFelica:1;
937    unsigned int TypeMifare:1;
938    unsigned int TypeNfcIP1:1;
939    unsigned int RFU:2;
940
941}phHal_sEmuSupport_t;
942
943
944/** \ingroup grp_hal_nfci
945*
946* \if hal
947*  \brief P2P Information for the Initiator
948* \else
949*  \brief HAL-Specific
950* \endif
951*
952*  The <em> \ref phHal_sNfcIPCfg </em> holds the P2P related information
953*  use by the NFC Device during P2P Discovery and connection
954*
955*  \note None.
956*/
957
958typedef phNfc_sNfcIPCfg_t phHal_sNfcIPCfg_t;
959
960/** \ingroup grp_hal_common
961*
962* \if hal
963*  \brief Enumeration used to choose which type of parameters
964*         are to be configured
965* \else
966*  \brief HAL-Specific
967* \endif
968*
969*
970*  \note None.
971*/
972typedef enum phHal_eConfigType
973{
974    NFC_INVALID_CONFIG  =   0x00U, /**< Invalid Configuration */
975    NFC_RF_READER_CONFIG, /**< Reader Parmaeters */
976    NFC_P2P_CONFIG,       /**< NFCIP1 Parameters */
977    NFC_SE_PROTECTION_CONFIG, /**< Secure Element
978                                   Protection Cofiguration */
979    NFC_EMULATION_CONFIG  /**< Emulation Parameters */
980}phHal_eConfigType_t;
981
982/** \ingroup grp_hal_common
983*
984* \if hal
985*  \brief Discovery Configuration Mode
986* \else
987*  \brief HAL-Specific
988* \endif
989*
990*  This enumeration is used to choose the Discovery Configuration
991*  Mode :- Configure and Start, Stop or Start with last set
992*  configuration
993*  \note None.
994*/
995
996typedef phNfc_eDiscoveryConfigMode_t phHal_eDiscoveryConfigMode_t;
997
998
999/** \ingroup grp_hal_common
1000*
1001* \if hal
1002*  \brief Target or Tag Release Mode
1003* \else
1004*  \brief HAL-Specific
1005* \endif
1006*
1007*  This enumeration defines various modes of releasing an acquired target
1008*  or tag.
1009*  \note None.
1010*/
1011typedef phNfc_eReleaseType_t phHal_eReleaseType_t;
1012
1013
1014/** \ingroup grp_hal_common
1015*
1016* \if hal
1017*  \brief Configuration of specific Emulation Feature
1018* \else
1019*  \brief HAL-Specific
1020* \endif
1021*
1022*  This enumeration is used to choose configuration for a specific
1023*  emulation feature.
1024*  \note None.
1025*/
1026
1027typedef enum phHal_eEmulationType
1028{
1029    NFC_UNKNOWN_EMULATION       = 0x00U, /**< Invalid Configuration */
1030    NFC_HOST_CE_A_EMULATION     = 0x01U, /**< Configure parameters for Type A
1031                                              card emulation from host */
1032    NFC_HOST_CE_B_EMULATION     = 0x02U, /**< Configure parameters for Type B
1033                                              card emulation from host */
1034    NFC_B_PRIME_EMULATION       = 0x03U, /**< Configure parameters for Type B'
1035                                              card emulation from host */
1036    NFC_FELICA_EMULATION        = 0x04U, /**< Configure parameters for Type F
1037                                              card emulation from host */
1038    NFC_MIFARE_EMULATION        = 0x06U, /**< Configure parameters for MIFARE
1039                                              card emulation - For Future Use */
1040    NFC_SMARTMX_EMULATION       = 0x07U, /**< Configure parameters for SmartMX
1041                                            */
1042    NFC_UICC_EMULATION          = 0x08U  /**< Configure parameters for UICC
1043                                            emulation */
1044}phHal_eEmulationType_t;
1045
1046#if 0
1047/** \ingroup grp_hal_nfct
1048 *
1049 * \if hal
1050 *  \brief Information for Target Mode Start-Up
1051 * \else
1052 *  \brief HAL-Specific
1053 * \endif
1054 *
1055 *  The <em> Target Information Structure </em> required to start Target mode.
1056 *  It contains all the information for the Target mode.
1057 *
1058 *  \note None.
1059 *
1060 */
1061
1062typedef struct phHal_sTargetInfo
1063{
1064    uint8_t                 enableEmulation;
1065    phHal_sNfcIPCfg_t       targetConfig;
1066} phHal_sTargetInfo_t;
1067#endif
1068
1069
1070/** \ingroup grp_hal_common
1071*
1072* \if hal
1073*  \brief Mode of operation for SmartMX
1074* \else
1075*  \brief HAL-Specific
1076* \endif
1077*
1078*  This enumeration is used to choose the mode of operation for the SmartMx Module.
1079*  Default static configuration at initialization time.
1080*  \note None.
1081*/
1082
1083typedef enum phHal_eSmartMX_Mode{
1084    eSmartMx_Wired      = 0x00U, /* SmartMX is in Wired Mode */
1085    eSmartMx_Default,            /* SmartMX is in Default Configuration Mode */
1086    eSmartMx_Virtual,            /* SmartMx in the Virutal Mode */
1087    eSmartMx_Off                 /* SmartMx Feature is Switched off */
1088} phHal_eSmartMX_Mode_t;
1089
1090
1091/** \ingroup grp_hal_common
1092*
1093* \if hal
1094*  \brief Mode of operation for SWP
1095* \else
1096*  \brief HAL-Specific
1097* \endif
1098*
1099*  This enumeration is used to choose the mode of operation for the SWP Link
1100*  for UICC Module. Default static configuration at initialization time.
1101*  \note None.
1102*/
1103
1104typedef enum phHal_eSWP_Mode{
1105    eSWP_Switch_Off      = 0x00U,   /* SWP Link is Switched off */
1106    eSWP_Switch_Default,            /* SWP is in Default Configuration Mode */
1107    eSWP_Switch_On                  /* SWP Link is Switched on */
1108} phHal_eSWP_Mode_t;
1109
1110
1111/** \ingroup grp_hal_common
1112*
1113* \if hal
1114*  \brief Information for the Configuring the SmartMX
1115* \else
1116*  \brief HAL-Specific
1117* \endif
1118*
1119*  The <em> \ref phHal_sSmartMX_Cfg structure </em> holds the information
1120*   to configure the SmartMX Module in the NFC Device.
1121*
1122*  \note None.
1123*/
1124
1125
1126typedef struct phHal_sSmartMX_Cfg
1127{
1128    uint8_t                 enableEmulation;
1129    uint8_t                 lowPowerMode;
1130    phHal_eSmartMX_Mode_t   smxMode;
1131}phHal_sSmartMX_Cfg_t;
1132
1133
1134/** \ingroup grp_hal_common
1135*
1136* \if hal
1137*  \brief Information for the Configuring the UICC
1138* \else
1139*  \brief HAL-Specific
1140* \endif
1141*
1142*  The <em> \ref phHal_sUiccEmuCfg structure </em> holds the information
1143*   to configure the UICC Host.
1144*
1145*  \note None.
1146*/
1147
1148
1149typedef struct phHal_sUiccEmuCfg
1150{
1151    uint8_t             enableUicc;
1152    uint8_t             uiccEmuSupport;
1153    uint8_t             uiccReaderSupport;
1154    uint8_t             lowPowerMode;
1155    /* TODO: This will be updated later */
1156}phHal_sUiccEmuCfg_t;
1157
1158/** \ingroup grp_hal_common
1159*
1160* \if hal
1161*  \brief Information for the Configuring the Type A Host Emulation Feature
1162* \else
1163*  \brief HAL-Specific
1164* \endif
1165*
1166*  The <em> \ref phHal_sHostEmuCfg_A structure </em> holds the information
1167*   to configure the Host Emulation for Type A.
1168*
1169*  \note None.
1170*/
1171
1172typedef struct phHal_sHostEmuCfg_A
1173{
1174    uint8_t                 enableEmulation;
1175    phNfc_sIso14443AInfo_t  hostEmuCfgInfo;
1176    uint8_t                 enableCID;
1177}phHal_sHostEmuCfg_A_t;
1178
1179
1180/** \ingroup grp_hal_common
1181*
1182* \if hal
1183*  \brief Information for the Configuring the Type B Host Emulation Feature
1184* \else
1185*  \brief HAL-Specific
1186* \endif
1187*
1188*  The <em> \ref phHal_sHostEmuCfg_B structure </em> holds the information
1189*   to configure the Host Emulation for Type B.
1190*
1191*  \note None.
1192*/
1193
1194typedef struct phHal_sHostEmuCfg_B
1195{
1196    uint8_t                 enableEmulation;
1197    phNfc_sIso14443BInfo_t  hostEmuCfgInfo;
1198}phHal_sHostEmuCfg_B_t;
1199
1200/** \ingroup grp_hal_common
1201*
1202* \if hal
1203*  \brief Information for the Configuring the Felica Host Emulation Feature
1204* \else
1205*  \brief HAL-Specific
1206* \endif
1207*
1208*  The <em> \ref phHal_sHostEmuCfg_F structure </em> holds the information
1209*   to configure the Felica Host Emulation.
1210*
1211*  \note None.
1212*/
1213
1214
1215typedef struct phHal_sHostEmuCfg_F
1216{
1217    uint8_t                 enableEmulation;
1218}phHal_sHostEmuCfg_F_t;
1219
1220
1221/** \ingroup grp_hal_common
1222*
1223* \if hal
1224*  \brief Information for the Configuring the Emulation
1225* \else
1226*  \brief HAL-Specific
1227* \endif
1228*
1229*  The <em> \ref phHal_sEmulationCfg structure </em> holds the information
1230*   required for the device to act as a Tag or NFCIP1 Target.
1231*
1232*  \note phHal_sHostEmuCfg_F_t Type F emulation is not presently supported
1233*  is reserved for future use.
1234*/
1235
1236typedef struct phHal_sEmulationCfg
1237{
1238    phHal_HostType_t        hostType;
1239    phHal_eEmulationType_t  emuType;
1240    union phHal_uEmuConfig
1241    {
1242        phHal_sSmartMX_Cfg_t    smartMxCfg;
1243        phHal_sHostEmuCfg_A_t   hostEmuCfg_A;
1244        phHal_sHostEmuCfg_B_t   hostEmuCfg_B;
1245        phHal_sHostEmuCfg_F_t   hostEmuCfg_F;
1246        phHal_sUiccEmuCfg_t     uiccEmuCfg;
1247    }config;
1248}phHal_sEmulationCfg_t;
1249
1250/** \ingroup grp_hal_common
1251*
1252* \if hal
1253*  \brief Information for the Configuring the Reader parameters
1254* \else
1255*  \brief HAL-Specific
1256* \endif
1257*
1258*  The <em> \ref phHal_sReaderCfg structure </em> holds the information
1259*   to configure the Reader A or Reader B parameters.
1260*
1261*  \note None.
1262*/
1263
1264typedef struct phHal_sReaderCfg
1265{
1266    phHal_eRFDevType_t    readerType;
1267    union phHal_uReaderCfg
1268    {
1269        phHal_sIso14443ACfg_t       Iso14443ACfg;
1270        phHal_sIso14443BCfg_t       Iso14443BCfg;
1271    }config;
1272}phHal_sReaderCfg_t;
1273
1274
1275/** \ingroup grp_hal_common
1276*
1277* \if hal
1278*  \brief Information for Configuring the Protected Mode for
1279*  the Secure Elements.
1280* \else
1281*  \brief HAL-Specific
1282* \endif
1283*
1284*  The <em> \ref phHal_sSEProtectionCfg structure </em> holds the
1285*  information to configure the Secure Element Protection configuration.
1286*
1287*  \note None.
1288*/
1289
1290typedef struct phHal_sSEProtectionCfg
1291{
1292    uint8_t         mode;
1293}phHal_sSEProtectionCfg_t;
1294
1295
1296/** \ingroup  grp_hal_common
1297*
1298* \if hal
1299*  \brief Poll configuration structure
1300* \else
1301*  \brief HAL-Specific
1302* \endif
1303*
1304*  The <em> Poll configuration structure </em> holds information about the
1305*  enabling the the type of discovery required by the application. This
1306*  structure is the input parameter for the discovery call
1307*
1308*  \note All members of this structure are input parameters [out].
1309*
1310*  \if hal
1311*   \sa \ref phHal4Nfc_Connect, \ref phHal4Nfc_ConfigParameters,
1312*            \ref phHal_eP2PMode_t and \ref phHal4Nfc_Disconnect.
1313*  \endif
1314*
1315*/
1316
1317typedef phNfc_sADD_Cfg_t phHal_sADD_Cfg_t;
1318
1319
1320/** \ingroup grp_hal_common
1321*
1322* \if hal
1323*  \brief Configuration information.
1324* \else
1325*  \brief HAL-Specific
1326* \endif
1327*
1328*  The <em> \ref phHal_uConfig structure </em> holds the information
1329*   required for Configuring the Device.
1330*
1331*  \note None.
1332*/
1333
1334
1335typedef union phHal_uConfig
1336{
1337    phHal_sEmulationCfg_t emuConfig;
1338    phHal_sNfcIPCfg_t     nfcIPConfig;    /**< Gives the information about
1339                                           *  the General Bytes for NFC-IP
1340                                           *  Communication.
1341                                           */
1342    phHal_sReaderCfg_t       readerConfig;
1343    phHal_sSEProtectionCfg_t protectionConfig;
1344}phHal_uConfig_t;
1345
1346
1347#endif
1348
1349/* EOF */
1350