• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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  
63  typedef 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   */
85  typedef 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  
107  typedef 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   */
145  typedef 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  
181  typedef 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 */
199  typedef 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  
208  typedef 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  
233  typedef 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   */
258  typedef 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   */
270  typedef 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  
283  typedef 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  
299  typedef 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  
314  typedef 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  */
338  typedef 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  
355  typedef phNfc_sIso14443BInfo_t phHal_sIso14443BInfo_t;
356  
357  typedef 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  
376  typedef 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  
393  typedef 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  
411  typedef 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  
430  typedef 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  
448  typedef 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  
466  typedef 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  
484  typedef 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  */
532  typedef 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  
549  typedef 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  
574  typedef 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  
583  typedef 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  
644  typedef 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  */
660  typedef 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  */
694  typedef 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  
714  typedef 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  */
737  typedef 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  
753  typedef 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  
813  typedef 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  
829  typedef 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  
868  typedef 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  
883  typedef 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  
931  typedef 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  
958  typedef 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  */
972  typedef 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  
996  typedef 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  */
1011  typedef 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  
1027  typedef 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  
1062  typedef 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  
1083  typedef 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  
1104  typedef 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  
1126  typedef 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  
1149  typedef 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  
1172  typedef 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  
1194  typedef 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  
1215  typedef 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  
1236  typedef 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  
1264  typedef 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  
1290  typedef 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  
1317  typedef 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  
1335  typedef 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