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* =========================================================================== *
19*                                                                             *
20*                                                                             *
21* \file  phHciNfc_RFReader.h                                                  *
22* \brief HCI Header for the RF Reader Management Gate.                        *
23*                                                                             *
24*                                                                             *
25* Project: NFC-FRI-1.1                                                        *
26*                                                                             *
27* $Date: Fri Aug 14 17:01:28 2009 $                                           *
28* $Author: ing04880 $                                                         *
29* $Revision: 1.17 $                                                            *
30* $Aliases: 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 $                                                                *
31*                                                                             *
32* =========================================================================== *
33*/
34
35
36#ifndef PHHCINFC_RFREADER_H
37#define PHHCINFC_RFREADER_H
38
39/*@}*/
40
41
42/**
43 *  \name HCI
44 *
45 * File: \ref phHciNfc_RFReader.h
46 *
47 */
48/*@{*/
49#define PHHCINFC_RF_READER_FILEREVISION "$Revision: 1.17 $" /**< \ingroup grp_file_attributes */
50#define PHHCINFC_RF_READER_FILEALIASES  "$Aliases: 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 */
51/*@}*/
52
53/*
54***************************** Header File Inclusion ****************************
55*/
56
57#include <phHciNfc_Generic.h>
58
59/*
60****************************** Macro Definitions *******************************
61*/
62/* Events Requested by the Reader Application Gates */
63#define EVT_READER_REQUESTED            0x10U
64#define EVT_END_OPERATION               0x11U
65
66/* Events Triggered by the Reader RF Gates */
67#define EVT_TARGET_DISCOVERED           0x10U
68
69/* Commands from ETSI HCI Specification */
70#define WR_XCHGDATA                     0x10U
71
72/* NXP Additional Commands apart from ETSI HCI Specification */
73/* Command to Check the presence of the card */
74#define NXP_WR_PRESCHECK                0x30U
75
76/* Command to Activate the next card present in the field */
77#define NXP_WR_ACTIVATE_NEXT            0x31U
78
79/* Command to Activate a card with its UID */
80#define NXP_WR_ACTIVATE_ID              0x32U
81
82/* Command to Dispatch the card to UICC */
83#define NXP_WR_DISPATCH_TO_UICC         0x33U
84
85/* NXP Additional Events apart from ETSI HCI Specification */
86/* Event to Release the Target and Restart The Wheel */
87#define NXP_EVT_RELEASE_TARGET          0x35U
88
89
90/* Type Macro to Update the  RF Reader Information */
91
92#define HCI_RDR_ENABLE_TYPE             0x01U
93
94#define UICC_CARD_ACTIVATION_SUCCESS    0x00U
95#define UICC_CARD_ACTIVATION_ERROR      0x01U
96#define UICC_RDR_NOT_INTERESTED         0x02U
97
98
99/*
100******************** Enumeration and Structure Definition **********************
101*/
102
103
104
105/*
106*********************** Function Prototype Declaration *************************
107*/
108
109/**
110 * \ingroup grp_hci_nfc
111 *
112 *  The phHciNfc_ReaderMgmt_Initialise function creates and the opens RF Reader
113 *  Management Gate
114 *
115 *  \param[in]  psHciContext            psHciContext is the pointer to HCI Layer
116 *                                      context Structure.
117 *  \param[in]  pHwRef                  pHwRef is the Information of
118 *                                      the Device Interface Link .
119 *
120 *  \retval NFCSTATUS_PENDING           Reader RF Mgmt Gate Initialisation is pending.
121 *  \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
122 *                                      could not be interpreted properly.
123 *  \retval Other errors                Errors related to the other layers
124 *
125 */
126extern
127NFCSTATUS
128phHciNfc_ReaderMgmt_Initialise(
129                                phHciNfc_sContext_t     *psHciContext,
130                                void                    *pHwRef
131                         );
132/**
133 * \ingroup grp_hci_nfc
134 *
135 *  The phHciNfc_ReaderMgmt_Release function closes the opened RF Reader pipes
136 *  between the Host Controller Device and the NFC Device.
137 *
138 *  \param[in]  psHciContext            psHciContext is the pointer to HCI Layer
139 *                                      context Structure.
140 *  \param[in]  pHwRef                  pHwRef is the Information of
141 *                                      the Device Interface Link .
142 *
143 *  \retval NFCSTATUS_PENDING           Release of the Reader RF Management gate
144 *                                      resources are pending.
145 *  \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
146 *                                      could not be interpreted properly.
147 *  \retval Other errors                Errors related to the other layers
148 *
149 */
150extern
151NFCSTATUS
152phHciNfc_ReaderMgmt_Release(
153                                phHciNfc_sContext_t     *psHciContext,
154                                void                    *pHwRef
155                     );
156
157/**
158 * \ingroup grp_hci_nfc
159 *
160 *  The phHciNfc_ReaderMgmt_Update_Sequence function Resets/Updates the sequence
161 *  to the Specified RF Reader Sequence .
162 *
163 *  \param[in]  psHciContext            psHciContext is the pointer to HCI Layer
164 *                                      context Structure.
165 *  \param[in]  reader_seq              reader_seq is the Type of sequence update
166 *                                      required to reset .
167 *
168 *  \retval NFCSTATUS_SUCCESS           Updates/Resets the Sequence of the Reader
169 *                                       RF Management gate Successsfully.
170 *  \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
171 *                                      could not be interpreted properly.
172 *  \retval
173 *   NFCSTATUS_INVALID_HCI_INFORMATION  The RF Reader Management information is
174 *                                      invalid.
175 *
176 */
177
178extern
179NFCSTATUS
180phHciNfc_ReaderMgmt_Update_Sequence(
181                                phHciNfc_sContext_t     *psHciContext,
182                                phHciNfc_eSeqType_t     reader_seq
183                             );
184
185/**
186 * \ingroup grp_hci_nfc
187 *
188 *  The phHciNfc_ReaderMgmt_Enable_Discovery function Enables the RF Reader
189 *  Gates to discover the corresponding PICC Tags .
190 *
191 *  \param[in]  psHciContext            psHciContext is the pointer to HCI Layer
192 *                                      context Structure.
193 *  \param[in]  pHwRef                  pHwRef is the Information of
194 *                                      the Device Interface Link .
195 *
196 *  \retval NFCSTATUS_PENDING           Enable of the Reader RF Management gate
197 *                                      Discovery is pending.
198 *  \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
199 *                                      could not be interpreted properly.
200 *  \retval Other errors                Errors related to the other layers
201 *
202 */
203
204extern
205NFCSTATUS
206phHciNfc_ReaderMgmt_Enable_Discovery(
207                                phHciNfc_sContext_t     *psHciContext,
208                                void                    *pHwRef
209                             );
210
211/**
212 * \ingroup grp_hci_nfc
213 *
214 *  The phHciNfc_ReaderMgmt_Discovery function Enables/Disables/Restart/Continue
215 *  the RF Reader Gates to discover the corresponding PICC Tags .
216 *
217 *  \param[in]  psHciContext            psHciContext is the pointer to HCI Layer
218 *                                      context Structure.
219 *  \param[in]  pHwRef                  pHwRef is the Information of
220 *                                      the Device Interface Link .
221 *
222 *  \retval NFCSTATUS_PENDING           Enable of the Reader RF Management gate
223 *                                      Discovery is pending.
224 *  \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
225 *                                      could not be interpreted properly.
226 *  \retval Other errors                Errors related to the other layers
227 *
228 */
229
230
231/**
232 * \ingroup grp_hci_nfc
233 *
234 *  The phHciNfc_ReaderMgmt_Disable_Discovery function Disables the RF Reader
235 *  Gates discovery .
236 *
237 *  \param[in]  psHciContext            psHciContext is the pointer to HCI Layer
238 *                                      context Structure.
239 *  \param[in]  pHwRef                  pHwRef is the Information of
240 *                                      the Device Interface Link .
241 *
242 *  \retval NFCSTATUS_PENDING           Disable of the Reader RF Management gate
243 *                                      Discovery is pending.
244 *  \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
245 *                                      could not be interpreted properly.
246 *  \retval Other errors                Errors related to the other layers
247 *
248 */
249
250extern
251NFCSTATUS
252phHciNfc_ReaderMgmt_Disable_Discovery(
253                                phHciNfc_sContext_t     *psHciContext,
254                                void                    *pHwRef
255                             );
256
257
258/**
259 * \ingroup grp_hci_nfc
260 *
261 *  The phHciNfc_ReaderMgmt_Info_Sequence function Gets the information
262 *  of the Tag discovered .
263 *
264 *  \param[in]  psHciContext            psHciContext is the pointer to HCI Layer
265 *                                      context Structure.
266 *  \param[in]  pHwRef                  pHwRef is the Information of
267 *                                      the Device Interface Link .
268 *
269 *  \retval NFCSTATUS_PENDING           Reception the information of the discoverd
270 *                                      tag is ongoing.
271 *  \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
272 *                                      could not be interpreted properly.
273 *  \retval Other errors                Errors related to the other layers
274 *
275 */
276
277extern
278NFCSTATUS
279phHciNfc_ReaderMgmt_Info_Sequence(
280                                   phHciNfc_sContext_t      *psHciContext,
281                                   void                     *pHwRef
282                               );
283
284/**
285 * \ingroup grp_hci_nfc
286 *
287 *  The phHciNfc_ReaderMgmt_Select function connects the
288 *  the selected tag by performing certain operation.
289 *
290 *  \param[in]  psHciContext            psHciContext is the pointer to HCI Layer
291 *                                      context Structure.
292 *  \param[in]  pHwRef                  pHwRef is the Information of
293 *                                      the Device Interface Link .
294 *  \param[in]  target_type             target_type is the type of the
295 *                                      Target Device to be connected .
296 *
297 *  \retval NFCSTATUS_PENDING           The selected tag initialisation for
298 *                                      transaction ongoing.
299 *  \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
300 *                                      could not be interpreted properly.
301 *  \retval Other errors                Errors related to the other layers
302 *
303 */
304
305extern
306NFCSTATUS
307phHciNfc_ReaderMgmt_Select(
308                                    phHciNfc_sContext_t     *psHciContext,
309                                    void                    *pHwRef,
310                                    phHal_eRemDevType_t     target_type
311                );
312
313
314/**
315 * \ingroup grp_hci_nfc
316 *
317 *  The phHciNfc_ReaderMgmt_Reactivate function reactivates the
318 *  the tag by performing reactivate operation.
319 *
320 *  \param[in]  psHciContext            psHciContext is the pointer to HCI Layer
321 *                                      context Structure.
322 *  \param[in]  pHwRef                  pHwRef is the Information of
323 *                                      the Device Interface Link .
324 *  \param[in]  target_type             target_type is the type of the
325 *                                      Target Device to be reactivated .
326 *
327 *  \retval NFCSTATUS_PENDING           The tag reactivation ongoing.
328 *  \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
329 *                                      could not be interpreted properly.
330 *  \retval Other errors                Errors related to the other layers
331 *
332 */
333
334
335extern
336NFCSTATUS
337phHciNfc_ReaderMgmt_Reactivate(
338                                    phHciNfc_sContext_t     *psHciContext,
339                                    void                    *pHwRef,
340                                    phHal_eRemDevType_t     target_type
341                );
342
343/**
344* \ingroup grp_hci_nfc
345*
346*   The phHciNfc_ReaderMgmt_Presence_Check function performs presence on ISO
347*   cards.
348*
349*   \param[in]  psHciContext            psHciContext is the pointer to HCI Layer
350*                                       context Structure.
351*   \param[in]  pHwRef                  pHwRef is the Information of
352*                                       the Device Interface Link .
353*
354*   \retval NFCSTATUS_PENDING           The presence check for tag is ongoing.
355*   \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
356*                                       could not be interpreted properly.
357*  \retval Other errors                Errors related to the other layers
358*
359*/
360
361extern
362NFCSTATUS
363phHciNfc_ReaderMgmt_Presence_Check(
364                                  phHciNfc_sContext_t       *psHciContext,
365                                  void                      *pHwRef
366                                  );
367
368/**
369* \ingroup grp_hci_nfc
370*
371*   The phHciNfc_ReaderMgmt_Activate_Next function activates and selects next
372*   tag or target present in the RF Field .
373*
374*   \param[in]  psHciContext            psHciContext is the pointer to HCI Layer
375*                                       context Structure.
376*   \param[in]  pHwRef                  pHwRef is the Information of
377*                                       the Device Interface Link .
378*
379*   \retval NFCSTATUS_PENDING           The activation of the next tag is ongoing.
380*   \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
381*                                       could not be interpreted properly.
382*  \retval Other errors                Errors related to the other layers
383*
384*/
385
386extern
387NFCSTATUS
388phHciNfc_ReaderMgmt_Activate_Next(
389                                  phHciNfc_sContext_t       *psHciContext,
390                                  void                  *pHwRef
391                                  );
392
393
394/**
395 * \ingroup grp_hci_nfc
396 *
397 *  The phHciNfc_ReaderMgmt_UICC_Dispatch function de-activates the
398 *  the selected tag by de-selecting the tag and dispatch the Card to UICC.
399 *
400 *  \param[in]  psHciContext            psHciContext is the pointer to HCI Layer
401 *                                      context Structure.
402 *  \param[in]  pHwRef                  pHwRef is the Information of
403 *                                      the Device Interface Link .
404 *  \param[in]  target_type             target_type is the type of the
405 *                                      Target Device to be de-selected .
406 *  \param[in]  re_poll                 If True: Start re-polling of the target
407 *                                      after the Target Device is de-activated
408 *                                      or else - continue discovery with next
409 *                                      technology.
410 *
411 *
412 *  \retval NFCSTATUS_PENDING           Dispatching the selected tag to UICC
413 *                                      is ongoing.
414 *  \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
415 *                                      could not be interpreted properly.
416 *  \retval Other errors                Errors related to the other layers
417 *
418 */
419
420extern
421NFCSTATUS
422phHciNfc_ReaderMgmt_UICC_Dispatch(
423                                    phHciNfc_sContext_t     *psHciContext,
424                                    void                    *pHwRef,
425                                    phHal_eRemDevType_t     target_type
426                );
427
428
429/**
430 * \ingroup grp_hci_nfc
431 *
432 *  The phHciNfc_ReaderMgmt_Deselect function de-activates the
433 *  the selected tag by de-selecting the tag and restarting the discovery.
434 *
435 *  \param[in]  psHciContext            psHciContext is the pointer to HCI Layer
436 *                                      context Structure.
437 *  \param[in]  pHwRef                  pHwRef is the Information of
438 *                                      the Device Interface Link .
439 *  \param[in]  target_type             target_type is the type of the
440 *                                      Target Device to be de-selected .
441 *
442 *  \retval NFCSTATUS_PENDING           Terminating the operations between selected
443 *                                      tag is ongoing.
444 *  \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
445 *                                      could not be interpreted properly.
446 *  \retval Other errors                Errors related to the other layers
447 *
448 */
449
450extern
451NFCSTATUS
452phHciNfc_ReaderMgmt_Deselect(
453                                    phHciNfc_sContext_t     *psHciContext,
454                                    void                    *pHwRef,
455                                    phHal_eRemDevType_t     target_type,
456                                    uint8_t                 re_poll
457                );
458
459/**
460 * \ingroup grp_hci_nfc
461 *
462 *  The phHciNfc_ReaderMgmt_Exchange_Data function exchanges the
463 *  data to/from the selected tag .
464 *
465 *  \param[in]  psHciContext            psHciContext is the pointer to HCI Layer
466 *                                      context Structure.
467 *  \param[in]  pHwRef                  pHwRef is the Information of
468 *                                      the Device Interface Link .
469 *  \param[in]  p_xchg_info             The tag exchange info contains the command type,
470 *                                      addr and data to be sent to the connected
471 *                                      remote target device.
472 *
473 *  \retval NFCSTATUS_PENDING           Exchange of the data between the selected
474 *                                      tag is ongoing.
475 *  \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
476 *                                      could not be interpreted properly.
477 *  \retval Other errors                Errors related to the other layers
478 *
479 */
480
481extern
482NFCSTATUS
483phHciNfc_ReaderMgmt_Exchange_Data(
484                                    phHciNfc_sContext_t     *psHciContext,
485                                    void                    *pHwRef,
486                                    phHciNfc_XchgInfo_t     *p_xchg_info
487                );
488
489
490
491/**
492 * \ingroup grp_hci_nfc
493 *
494 *  The phHciNfc_Send_RFReader_Command function sends the HCI Reader Gate
495 *  Specific Commands to the HCI Controller device.
496 *
497 *  \param[in]  psHciContext            psHciContext is the context of
498 *                                      the HCI Layer.
499 *  \param[in]  pHwRef                  pHwRef is the Information of
500 *                                      the Device Interface Link .
501 *  \param[in]  pipe_id                 The Reader pipe to which the
502 *                                      command is being sent.
503 *  \param[in]  cmd                     The HCI Reader Gate specific command
504 *                                      sent to a Reader pipe .
505 *
506 *
507 *  \retval NFCSTATUS_PENDING           ETSI HCI RF Reader gate Command
508 *                                      to be sent is pending.
509 *  \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
510 *                                      could not be interpreted properly.
511 *  \retval Other errors                Errors related to the other layers
512 *
513 */
514
515extern
516NFCSTATUS
517 phHciNfc_Send_RFReader_Command (
518                                phHciNfc_sContext_t *psHciContext,
519                                void                *pHwRef,
520                                uint8_t             pipe_id,
521                                uint8_t             cmd
522                    );
523
524/**
525 * \ingroup grp_hci_nfc
526 *
527 *  The phHciNfc_Send_RFReader_Event function sends the HCI Reader Gate
528 *  Specific Events to the HCI Controller device.
529 *
530 *  \param[in]  psHciContext            psHciContext is the context of
531 *                                      the HCI Layer.
532 *  \param[in]  pHwRef                  pHwRef is the Information of
533 *                                      the Device Interface Link .
534 *  \param[in]  pipe_id                 The Reader pipe to which the
535 *                                      command is being sent.
536 *  \param[in]  event                   The HCI Reader Gate specific event
537 *                                      sent to a Reader pipe .
538 *
539 *
540 *  \retval NFCSTATUS_PENDING           ETSI HCI RF Reader gate Event
541 *                                      to be sent is pending.
542 *  \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
543 *                                      could not be interpreted properly.
544 *  \retval Other errors                Errors related to the other layers
545 *
546 */
547
548extern
549NFCSTATUS
550 phHciNfc_Send_RFReader_Event (
551                                phHciNfc_sContext_t *psHciContext,
552                                void                *pHwRef,
553                                uint8_t             pipe_id,
554                                uint8_t             event
555                    );
556
557#endif /* PHHCINFC_RFREADER_H */
558
559