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 * \file phHal4Nfc.h
20 * \brief HAL Function Prototypes
21 *  The HAL4.0 API provides the user to have a interface for PN544(PN54x)/PN65N
22 *  NFC device.The API is a non-blocking API, asynchronous API. This means that
23 *  when ever an API function call results in waiting for a response from the
24 *  NFC device, the API function will return immediately with status 'PENDING'
25 *  and the actual result will be returned through specific callback functions
26 *  on receiving the response from the NFC device
27 *
28 * \note This is the representative header file of the HAL 4.0. The release
29 *       TAG or label is representing the release TAG (alias) of the entire
30 *       library.A mechanism (see documentation \ref hal_release_label near
31 *       the include guards of this file) is used to propagate the alias to
32 *       the main documentation page.
33 *
34 * Project: NFC-FRI-1.1 / HAL4.0
35 *
36 * $Date: Mon Jun 14 11:36:12 2010 $
37 * $Author: ing07385 $
38 * $Revision: 1.171 $
39 * $Aliases: NFC_FRI1.1_WK1023_R35_2,NFC_FRI1.1_WK1023_R35_1 $
40 *
41 */
42
43/** page hal_release_label HAL 4.0 Release Label
44 *  SDK_HAL_4.0 v 0.1 Draft
45 *  \note This is the TAG (label, alias) of the HAL. If the string is empty,the
46 *        current documentation has not been generated from an official release.
47 */
48/*@{*/
49#ifndef PHHAL4NFC_H
50#define PHHAL4NFC_H
51/*@}*/
52
53
54/**
55 *  \name HAL4
56 *
57 * File: \ref phHal4Nfc.h
58 *\def  hal
59 */
60
61/*@{*/
62#define PH_HAL4NFC_FILEREVISION "$Revision: 1.171 $" /**< \ingroup grp_file_attributes */
63#define PH_HAL4NFC_FILEALIASES  "$Aliases: NFC_FRI1.1_WK1023_R35_2,NFC_FRI1.1_WK1023_R35_1 $"     /**< \ingroup grp_file_attributes */
64/*@}*/
65
66/* -----------------Include files ---------------------------------------*/
67#include <phNfcStatus.h>
68#include <phNfcCompId.h>
69#include <phNfcHalTypes.h>
70#include <phNfcInterface.h>
71#include <phNfcIoctlCode.h>
72#include <phNfcConfig.h>
73#include <phDbgTrace.h>
74#ifdef ANDROID
75#include <string.h>
76#endif
77
78/*************************** Includes *******************************/
79/** \defgroup grp_mw_external_hal_funcs NFC HAL4.0
80*
81*
82*
83*/
84/* ---------------- Macros ----------------------------------------------*/
85
86/** HAL Implementation Version Macros : Updated for every feature release of
87    HAL functionality */
88#define PH_HAL4NFC_VERSION                              8
89#define PH_HAL4NFC_REVISION                            21
90#define PH_HAL4NFC_PATCH                                1
91#define PH_HAL4NFC_BUILD                                0
92
93/** HAL Interface Version Macros : Updated for every external release of
94    HAL Interface */
95#define PH_HAL4NFC_INTERFACE_VERSION                    0
96#define PH_HAL4NFC_INTERFACE_REVISION                   6
97#define PH_HAL4NFC_INTERFACE_PATCH                      0
98#define PH_HAL4NFC_INTERAFECE_BUILD                     0
99
100/**Maximum length of receive buffer maintained by HAL*/
101#define PH_HAL4NFC_MAX_RECEIVE_BUFFER                4096U
102
103/**Send length used for Transceive*/
104#define PH_HAL4NFC_MAX_SEND_LEN                      PHHAL_MAX_DATASIZE
105
106/* -----------------Structures and Enumerations -------------------------*/
107
108/**
109 * \ingroup grp_mw_external_hal_funcs
110 *
111 * Structure containing information about discovered remote device, like
112 * the number of remote devices found, device specific information
113 * like type of device (eg: ISO14443-4A/4B, NFCIP1 target etc) and
114 * the type sepcific information (eg: UID, SAK etc). This structure is
115 * returned as part of the disocvery notification. For more info refer
116 * \ref phHal4Nfc_ConfigureDiscovery,
117 * \ref phHal4Nfc_RegisterNotification,
118 * \ref pphHal4Nfc_Notification_t,
119 * phHal4Nfc_NotificationInfo_t
120 *
121 *
122 */
123typedef struct phHal4Nfc_DiscoveryInfo
124{
125    uint32_t NumberOfDevices;/**< Number of devices found */
126    phHal_sRemoteDevInformation_t **ppRemoteDevInfo;/**< Pointer to Remote
127                                                         device info list*/
128}phHal4Nfc_DiscoveryInfo_t;
129
130/**
131 * \ingroup grp_mw_external_hal_funcs
132 *
133 *  This is a union returned as part of the \ref pphHal4Nfc_Notification_t
134 *  callback. It contains either discovery information or other event
135 *  information for which the client has registered using the
136 *  \ref phHal4Nfc_RegisterNotification.
137 */
138typedef union
139{
140    phHal4Nfc_DiscoveryInfo_t *psDiscoveryInfo;
141    phHal_sEventInfo_t        *psEventInfo;
142}phHal4Nfc_NotificationInfo_t;
143
144
145
146/**
147* \ingroup grp_mw_external_hal_funcs
148*
149* Prototype for Generic callback type provided by upper layer. This is used
150* to return the success or failure status an asynchronous API function which
151* does not have any other additional information to be returned. Refer
152* specific function for applicable status codes.
153*/
154typedef void (*pphHal4Nfc_GenCallback_t)(
155                                        void  *context,
156                                        NFCSTATUS status
157                                        );
158
159/**
160* \ingroup grp_mw_external_hal_funcs
161*
162* Disconnect callback type provided by upper layer to called on completion
163* of disconnect call \ref phHal4Nfc_Disconnect.
164*
165*/
166typedef void (*pphHal4Nfc_DiscntCallback_t)(
167                        void  *context,
168                        phHal_sRemoteDevInformation_t *psDisconnectDevInfo,
169                        NFCSTATUS status
170                        );
171
172/**
173* \ingroup grp_mw_external_hal_funcs
174*
175* Notification callback type used by HAL to provide a Discovery or
176* Event notification to the upper layer.
177*
178*/
179typedef void (*pphHal4Nfc_Notification_t) (
180                                        void                         *context,
181                                        phHal_eNotificationType_t     type,
182                                        phHal4Nfc_NotificationInfo_t  info,
183                                        NFCSTATUS                    status
184                                        );
185
186
187/**
188* \ingroup grp_mw_external_hal_funcs
189*
190* Callback type used to provide a Connect Success or Failure indication to
191* the upper layer as a result of \ref phHal4Nfc_Connect call used to connect
192* to discovered remote device.
193*
194*/
195typedef void (*pphHal4Nfc_ConnectCallback_t)(
196                        void  *context,
197                        phHal_sRemoteDevInformation_t *psRemoteDevInfo,
198                        NFCSTATUS status
199                        );
200
201/**
202* \ingroup grp_mw_external_hal_funcs
203*
204* This callback type is used to provide received data and it's size to the
205* upper layer in \ref phNfc_sData_t format ,when the upper layer has performed
206* a Transceive operation on a tag or when the Device acts as an Initiator in a
207* P2P transaction.
208*
209*
210*/
211typedef void (*pphHal4Nfc_TransceiveCallback_t) (
212                                void *context,
213                                phHal_sRemoteDevInformation_t *ConnectedDevice,
214                                phNfc_sData_t  *pRecvdata,
215                                NFCSTATUS status
216                                );
217
218/**
219* \ingroup grp_mw_external_hal_funcs
220*
221* This callback type is used to provide received data and it's size to the
222* upper layer in  \ref phNfc_sData_t structure, when the upper layer when the
223* Device acts as a Target in a P2P transaction.
224*
225*
226*/
227typedef void (*pphHal4Nfc_ReceiveCallback_t) (
228                                    void                *context,
229                                    phNfc_sData_t       *pDataInfo,
230                                    NFCSTATUS            status
231                                    );
232
233/**
234* \ingroup grp_mw_external_hal_funcs
235*
236* Callback type to inform success or failure of the Ioctl calls
237* made by upper layer. It may optionally contain response data
238* depending on the Ioctl command issued.
239*
240*/
241typedef void (*pphHal4Nfc_IoctlCallback_t) (void          *context,
242                                            phNfc_sData_t *pOutData,
243                                            NFCSTATUS      status );
244
245/**
246* \ingroup grp_mw_external_hal_funcs
247*\if hal
248*   \sa \ref pphHal4Nfc_GenCallback_t
249* \endif
250*
251*/
252
253/** Same as general callback type, used to inform the completion of
254* \ref phHal4Nfc_Send call done by when in NFCIP1 Target mode
255*/
256typedef pphHal4Nfc_GenCallback_t pphHal4Nfc_SendCallback_t;
257
258/**
259* \ingroup grp_mw_external_hal_funcs
260*
261* Enum type to distinguish between normal init and test mode init
262* to be done as part of phHal4Nfc_Open
263* In test mode init only minimal initialization of the NFC Device
264* sufficient to run the self test is performed.
265*
266* \note Note: No functional features can be accessed when
267* phHal4Nfc_Open is called with TestModeOn
268* \ref phHal4Nfc_Open
269*
270*/
271typedef enum{
272    eInitDefault = 0x00,     /**<Complete initialization for normal
273                                 firmware operation*/
274    eInitTestModeOn,         /**<Limited Initialization used for running self
275                                tests */
276    eInitCustom              /**<Reserved for Future Use */
277} phHal4Nfc_InitType_t;
278
279/**
280* \ingroup grp_mw_external_hal_funcs
281*
282* Type to select the type of notification registration
283* for Tags, P2P and SecureElement and Host Card Emulation events
284*
285* \if hal
286* \ref phHal4Nfc_RegisterNotification,phHal4Nfc_UnregisterNotification
287* \endif
288*
289*/
290typedef enum{
291    eRegisterDefault = 0x00,    /**<For All other generic notifications
292                                     like Host Wakeup Notification */
293    eRegisterTagDiscovery,      /**<For Tag Discovery notification*/
294    eRegisterP2PDiscovery,      /**<For P2P Discovery notification*/
295    eRegisterSecureElement,    /**<For Secure Element notification*/
296    eRegisterHostCardEmulation /**<For notification related to Virtual
297                                    Card Emulation from host */
298} phHal4Nfc_RegisterType_t;
299
300/**
301* \ingroup grp_mw_external_hal_funcs
302*
303* Specifies the Remote Reader type,either initiator or ISO A/B or Felica
304*
305*/
306typedef struct phHal4Nfc_TransactInfo{
307    phHal_eRFDevType_t               remotePCDType;
308}phHal4Nfc_TransactInfo_t;
309
310/*preliminary definitions end*/
311
312/* -----------------Exported Functions----------------------------------*/
313/**
314 *  \if hal
315 *   \ingroup grp_hal_common
316 *  \else
317 *   \ingroup grp_mw_external_hal_funcs
318 *  \endif
319 *
320 *  This function initializes and establishes a link to the NFC Device. This is
321 *  a asynchronous call as it requires a series of setup calls with the NFC
322 *  device. The open is complete when the status response callback <em>
323 *   pOpenCallback </em> is called. It uses a Hardware Reference
324 *  \ref phHal_sHwReference, allocated by the upper layer and the p_board_driver
325 *  member initialized with the dal_instance (handle to the communication driver)
326 *  and other members initialized to zero or NULL.
327 *
328 * \note
329 *  - The device is in initialized state after the command has completed
330 *    successfully.
331 *
332 *
333 * \param[in,out] psHwReference Hardware Reference, pre-initialized by upper
334 *                layer. Members of this structure are made valid if
335 *                this function is successful. \n
336 *
337 * \param[in]     InitType Initialization type, used to differentiate between
338 *                test mode limited initialization and normal init.
339 *
340 * \param[in]     pOpenCallback The open callback function called by the HAL
341 *                when open (initialization) sequence is completed or if there
342 *                is an error in initialization. \n
343 *
344 * \param[in]     pContext Upper layer context which will be included in the
345 *                call back when request is completed. \n
346 *
347 * \retval NFCSTATUS_PENDING                 Open sequence has been successfully
348 *                                           started and result will be conveyed
349 *                                           via the pOpenCallback function.
350 * \retval NFCSTATUS_ALREADY_INITIALISED     Device initialization already in
351 *                                           progress.
352 * \retval NFCSTATUS_INVALID_PARAMETER       The parameter could not be properly
353 *                                           interpreted (structure uninitialized?).
354 * \retval NFCSTATUS_INSUFFICIENT_RESOURCES  Insufficient resources for
355 *                                           completing the request.
356 * \retval Others                            Errors related to the lower layers.
357 *
358 * \if hal
359 *  \sa \ref phHal4Nfc_Close,
360 * \endif
361 */
362extern NFCSTATUS phHal4Nfc_Open(
363                                phHal_sHwReference_t     *psHwReference,
364                                phHal4Nfc_InitType_t      InitType,
365                                pphHal4Nfc_GenCallback_t  pOpenCallback,
366                                void                     *pContext
367                                );
368
369
370
371/**
372 *  \if hal
373 *   \ingroup grp_hal_common
374 *  \else
375 *   \ingroup grp_mw_external_hal_funcs
376 *  \endif
377 *
378 *  Retrieves the capabilities of the device represented by the Hardware
379 *  Reference parameter.The HW, FW versions,model-id and other capability
380 *  information are located inside the pDevCapabilities parameter.
381 *
382 *  \param[in]  psHwReference     Hardware Reference, pre-initialized
383 *                                by upper layer. \n
384 *  \param[out] psDevCapabilities Pointer to the device capabilities structure
385 *                                where all relevant capabilities of the
386 *                                peripheral are stored. \n
387 *  \param[in]  pContext          Upper layer context which will be included in
388 *                                the call back when request is completed. \n
389 *
390 *  \retval NFCSTATUS_SUCCESS            Success and the psDevCapabilities is
391 *                                       updated with info.
392 *  \retval NFCSTATUS_INVALID_PARAMETER  One or more of the supplied parameters
393 *                                       could not be properly interpreted.
394 *  \retval NFCSTATUS_NOT_INITIALISED    Hal is not yet initialized.
395 *  \retval Others                       Errors related to the lower layers.
396 *
397 */
398extern NFCSTATUS phHal4Nfc_GetDeviceCapabilities(
399                            phHal_sHwReference_t          *psHwReference,
400                            phHal_sDeviceCapabilities_t   *psDevCapabilities,
401                            void                          *pContext
402                            );
403
404
405/**
406*  \if hal
407*   \ingroup grp_hal_common
408*  \else
409*   \ingroup grp_mw_external_hal_funcs
410*  \endif
411*
412*  This function is used to Configure discovery wheel (and start if
413*  required) based on the discovery configuration passed.
414*  This includes enabling/disabling of the Reader phases (A, B, F),
415*  NFCIP1 Initiator Speed and duration of the Emulation phase.
416*  Additional optional parameters for each of the features i.e. Reader,
417*  Emulation and Peer2Peer can be set using the
418* \ref phHal4Nfc_ConfigParameters function
419*
420*  \param[in] psHwReference         Hardware Reference, pre-initialized by
421*                                   upper layer. \n
422*
423*  \param[in] discoveryMode         Discovery Mode allows to choose between:
424*                                   discovery configuration and start, stop
425*                                   discovery and start discovery (with last
426*                                   set configuration).
427*                                   \ref phHal_eDiscoveryConfigMode_t
428*   \note Note: Presently only NFC_DISCOVERY_CONFIG is supported, other values
429*               are for future use. When in Reader/Initiator mode it mandatory
430*               to call phHal4Nfc_Connect before any transaction can be performed
431*               with the discovered device.
432*
433*  \param[in] discoveryCfg          Discovery configuration parameters.
434*                                   Reader A/Reader B, Felica 212, Felica 424,
435*                                   NFCIP1 Speed, Emulation Enable and Duration.
436*
437*
438*  \param[in] pConfigCallback       This callback has to be called once Hal
439*                                   completes the Configuration.
440*
441*  \param[in] pContext              Upper layer context to be returned in the
442*                                   callback.
443*
444*  \retval NFCSTATUS_INVALID_PARAMETER         Wrong Parameter values.
445*
446*  \retval NFCSTATUS_NOT_INITIALISED           Hal is not initialized.
447*
448*  \retval NFCSTATUS_BUSY                      Cannot Configure Hal in
449*                                              Current state.
450*
451*  \retval NFCSTATUS_INSUFFICIENT_RESOURCES    System Resources insufficient.
452*
453*  \retval NFCSTATUS_PENDING                   Configuration request accepted
454*                                              and Configuration is in progress.
455*
456*  \retval NFCSTATUS_INVALID_PARAMETER         One or more of the supplied
457*                                              parameters could not be properly
458*                                              interpreted.
459*  \retval Others                              Errors related to the lower layers
460*
461*   \note Note: When in Reader/Initiator mode it mandatory
462*               to call phHal4Nfc_Connect before any transaction can be performed
463*               with the discovered device. Even if the HAL client is not
464*               interested in using any of the discovered phHal4Nfc_Connect and
465*               phHal4Nfc_Disconnect should be called to restart the Discovery
466*               wheel
467*
468*  \ref phHal4Nfc_Connect, phHal4Nfc_Disconnect
469*
470*/
471extern NFCSTATUS phHal4Nfc_ConfigureDiscovery(
472                        phHal_sHwReference_t          *psHwReference,
473                        phHal_eDiscoveryConfigMode_t   discoveryMode,
474                        phHal_sADD_Cfg_t               *discoveryCfg,
475                        pphHal4Nfc_GenCallback_t       pConfigCallback,
476                        void                           *pContext
477                        );
478/**
479*  \if hal
480*   \ingroup grp_hal_common
481*  \else
482*   \ingroup grp_mw_external_hal_funcs
483*  \endif
484*
485*  This function is used to set parameters of various features of the Hal,
486*  based on the CfgType parameter. Presently following configuration
487*  types are supported :-
488*  \n 1. NFC_RF_READER_CONFIG (optional)-> Configure parameters for Reader A
489*     or Reader B based on the configuration passed
490*  \n 2. NFC_P2P_CONFIG (optional)-> Congfigure P2P parameters like
491*     'General bytes', 'PSL Request' etc.
492*  \n 3. NFC_EMULATION_CONFIG -> Enable and configure the emulation mode
493*     parameters for either NFC Target, SmartMX, UICC and
494*  \n   Card Emulation from Host (A, B, F)
495*  All the configuration modes can be called independent of each other. The
496*  setting will typically take effect for the next cycle of the relevant
497*  phase of discovery. For optional configuration internal defaults will be
498*  used in case the configuration is not set.
499*  \note Card emulation from Host and Card Emulation from UICC are mutually
500*  exclusive modes, i.e: only one can be enabled at a time. Using
501*  this function to enable one of the emulation modes implicitly disables the
502*  the other. eg. Setting Type A (or Type B) Emulation from Host disables
503*  card emulation from UICC and vice versa.
504*
505*  \param[in] psHwReference         Hardware Reference, pre-initialized by
506*                                   upper layer. \n
507*
508*  \param[in] eCfgType              Configuration type which can take one of the
509*                                   enum values of \ref phHal_eConfigType_t. Each
510*                                   config type is associated with its corresponding
511*                                   information which is passed using the uCfg structure.
512*
513*
514*  \param[in] uCfg                  Union containing configuration information,
515*                                   which will be interpreted based on eCfgType
516*                                   parameter.
517*
518*
519*  \param[in] pConfigCallback       This callback has to be called once Hal
520*                                   completes the Configuration.
521*
522*  \param[in] pContext              Upper layer context to be returned in the
523*                                   callback.
524*
525*  \retval NFCSTATUS_INVALID_PARAMETER         Wrong Parameter values.
526*
527*  \retval NFCSTATUS_NOT_INITIALISED           Hal is not initialized.
528*
529*  \retval NFCSTATUS_BUSY                      Cannot Configure Hal in
530*                                              Current state.
531*
532*  \retval NFCSTATUS_INSUFFICIENT_RESOURCES    System Resources insufficient.
533*
534*  \retval NFCSTATUS_PENDING                   Configuration request accepted
535*                                              and Configuration is in progress.
536*
537*  \retval NFCSTATUS_INVALID_PARAMETER         One or more of the supplied
538*                                              parameters could not be properly
539*                                              interpreted.
540*  \retval Others                              Errors related to the lower layers
541*/
542
543extern NFCSTATUS phHal4Nfc_ConfigParameters(
544                        phHal_sHwReference_t     *psHwReference,
545                        phHal_eConfigType_t       eCfgType,
546                        phHal_uConfig_t          *uCfg,
547                        pphHal4Nfc_GenCallback_t  pConfigCallback,
548                        void                     *pContext
549                        );
550
551/**
552 *  \if hal
553 *   \ingroup grp_hal_nfci
554 *  \else
555 *   \ingroup grp_mw_external_hal_funcs
556 *  \endif
557 *
558 *  This function is called to connect to a one (out of many if multiple
559 *  devices are discovered) already discovered Remote Device notified
560 *  through register notification. The  Remote Device Information structure is
561 *  already pre-initialized with data (e.g. from Discovery Notificaiton
562 *  Callback) A new session is started after the connect function returns
563 *  successfully. The session ends with a successful disconnect
564 *  (see  \ref phHal4Nfc_Disconnect).
565 *
566 *  \param[in]     psHwReference        Hardware Reference, pre-initialized by
567 *                                      upper layer. \n
568 *
569 *  \param[in,out] psRemoteDevInfo      Points to the Remote Device Information
570 *                                      structure. The members of it can be
571 *                                      re-used from a previous session.
572 *
573 *  \param[in]     pNotifyConnectCb     Upper layer callback to be called for
574 *                                      notifying Connect Success/Failure
575 *
576 *  \param[in]     pContext             Upper layer context to be returned in
577 *                                      pNotifyConnectCb.
578 *
579 *  \retval NFCSTATUS_PENDING                  Request initiated, result will
580 *                                             be informed through the callback.
581 *  \retval NFCSTATUS_INVALID_PARAMETER        One or more of the supplied
582 *                                             parameters could not be
583 *                                             properly interpreted.
584 *  \retval NFCSTATUS_FAILED                   More than one phHal4Nfc_Connect
585 *                                             is not allowed during a session
586 *                                             on the same remote device. The
587 *                                             session has to be closed before
588 *                                             (see\ref phHal4Nfc_Disconnect).
589 *  \retval NFCSTATUS_NOT_INITIALIZED          Hal is not initialized.
590 *  \retval NFCSTATUS_FEATURE_NOT_SUPPORTED    Reactivation is not supported for
591 *                                             NfcIp target and Jewel/Topaz
592 *                                             remote device types.
593 *  \retval NFCSTATUS_INVALID_REMOTE_DEVICE    The Remote Device Identifier is
594 *                                             not valid.
595 *  \retval Others                             Errors related to the lower layers.
596 *
597 *  \if hal
598 *   \sa \ref phHal4Nfc_Disconnect
599 *  \endif
600 */
601extern NFCSTATUS phHal4Nfc_Connect(
602                            phHal_sHwReference_t          *psHwReference,
603                            phHal_sRemoteDevInformation_t *psRemoteDevInfo,
604                            pphHal4Nfc_ConnectCallback_t   pNotifyConnectCb,
605                            void                          *pContext
606                            );
607
608
609/**
610 *  \if hal
611 *   \ingroup grp_hal_nfci
612 *  \else
613 *   \ingroup grp_mw_external_hal_funcs
614 *  \endif
615 *
616 *  The phHal4Nfc_Transceive function allows to send data to and receive data
617 *  from the Remote Device selected by the caller.It is also used by the
618 *  NFCIP1 Initiator while performing a transaction with the NFCIP1 target.
619 *  The caller has to provide the Remote Device Information structure and the
620 *  command in order to communicate with the selected remote device.For P2P
621 *  transactions the command type will not be used.
622 *
623 *
624 *  \note the RecvData should be valid until the pTrcvCallback has been called.
625 *
626 *
627 *  \param[in]      psHwReference       Hardware Reference, pre-initialized by
628 *                                      upper layer. \n
629 *
630 *  \param[in,out]  psTransceiveInfo    Information required by transceive is
631 *                                      concealed in this structure.It contains
632 *                                      the send,receive buffers and their
633 *                                      lengths.
634 *
635 *  \param[in]      psRemoteDevInfo     Points to the Remote Device Information
636 *                                      structure which identifies the selected
637 *                                      Remote Device.
638 *
639 *  \param[in]      pTrcvCallback       Callback function for returning the
640 *                                      received response or error.
641 *
642 *  \param[in]      pContext            Upper layer context to be returned in
643 *                                      the callback.
644 *
645 *  \retval NFCSTATUS_PENDING                Transceive initiated.pTrcvCallback
646 *                                           will return the response or error.
647 *  \retval NFCSTATUS_NOT_INITIALIZED        Hal is not initialized.
648 *  \retval NFCSTATUS_SUCCESS                This status is used when send data
649 *                                           length is zero and HAL contains
650 *                                           previously more bytes from previous
651 *                                           receive. \n
652 *  \retval NFCSTATUS_INVALID_PARAMETER      One or more of the supplied
653 *                                           parameters could not be properly
654 *                                           interpreted or are invalid.
655 *  \retval NFCSTATUS_INVALID_DEVICE         The device has not been opened or
656 *                                           has been disconnected meanwhile.
657 *  \retval NFCSTATUS_FEATURE_NOT_SUPPORTED  Transaction on this Device type is
658 *                                           not supported.
659 *  \retval NFCSTATUS_BUSY                   Previous transaction is not
660 *                                           completed.
661 *  \retval NFCSTATUS_INSUFFICIENT_RESOURCES System resources are insufficient
662 *                                           to complete the request at that
663 *                                           point in time.
664 *  \retval NFCSTATUS_MORE_INFORMATION       Received number of bytes is greater
665 *                                           than receive buffer provided by the
666 *                                           upper layer.Extra bytes will be
667 *                                           retained by Hal and returned on next
668 *                                           call to transceive.
669 *  \retval Others                           Errors related to the lower layers.
670 *
671 */
672extern NFCSTATUS phHal4Nfc_Transceive(
673                            phHal_sHwReference_t            *psHwReference,
674                            phHal_sTransceiveInfo_t         *psTransceiveInfo,
675                            phHal_sRemoteDevInformation_t   *psRemoteDevInfo,
676                            pphHal4Nfc_TransceiveCallback_t  pTrcvCallback,
677                            void                            *pContext
678                            );
679
680
681
682
683/**
684 *  \if hal
685 *   \ingroup grp_hal_nfci
686 *  \else
687 *   \ingroup grp_mw_external_hal_funcs
688 *  \endif
689 *
690 *  The function allows to disconnect from a specific Remote Device. This
691 *  function closes the session opened with \ref phHal4Nfc_Connect "Connect".It
692 *  is also used to switch from wired to virtual mode in case the discovered
693 *  device is SmartMX in wired mode. The status of discovery wheel after
694 *  disconnection is determined by the ReleaseType parameter.
695 *
696 *
697 *
698 *  \param[in]      psHwReference       Hardware Reference, pre-initialized by
699 *                                      upper layer. \n
700 *  \param[in,out]  psRemoteDevInfo     Points to the valid (connected) Remote
701 *                                      Device Information structure.
702 *
703 *  \param[in]      ReleaseType         Defines various modes of releasing an acquired
704 *                                      target or tag
705 *
706 *  \param[in]      pDscntCallback      Callback function to notify
707 *                                      disconnect success/error.
708 *
709 *  \param[in]      pContext            Upper layer context to be returned in
710 *                                      the callback.
711 *
712 *
713 *  \retval NFCSTATUS_PENDING                Disconnect initiated.pDscntCallback
714 *                                           will return the response or error.
715 *  \retval NFCSTATUS_INVALID_PARAMETER      One or more of the supplied
716 *                                           parameters could not be properly
717 *                                           interpreted.
718 *  \retval NFCSTATUS_INVALID_REMOTE_DEVICE  The device has not been opened
719 *                                           before or has already been closed.
720 *  \retval NFCSTATUS_NOT_INITIALIZED        Hal is not initialized.
721 *  \retval Others                           Errors related to the lower layers.
722 *
723 *  \if hal
724 *   \sa \ref phHal4Nfc_Connect
725 *  \endif
726 */
727extern NFCSTATUS phHal4Nfc_Disconnect(
728                            phHal_sHwReference_t          *psHwReference,
729                            phHal_sRemoteDevInformation_t *psRemoteDevInfo,
730                            phHal_eReleaseType_t           ReleaseType,
731                            pphHal4Nfc_DiscntCallback_t    pDscntCallback,
732                            void                          *pContext
733                            );
734
735/**
736*  \if hal
737*   \ingroup grp_hal_common
738*  \else
739*   \ingroup grp_mw_external_hal_funcs
740*  \endif
741*
742*  The function allows to do a one time check on whether the connected target
743*  is still present in the field of the Reader. The call back returns the
744*  result of the presence check sequence indicating whether it is still present
745*  or moved out of the reader field.
746*
747*  \param[in]     psHwReference     Hardware Reference, pre-initialized by
748*                                   upper layer. \n
749*
750*  \param[in]     pPresenceChkCb    Callback function called on completion of the
751*                                   presence check sequence or in case an error
752*                                   has occurred..
753*
754*  \param[in]     context          Upper layer context to be returned in the
755*                                   callback.
756*
757*  \retval NFCSTATUS_PENDING           Call successfully issued to lower layer.
758*                                      Status will be returned in pPresenceChkCb.
759*
760*  \retval NFCSTATUS_NOT_INITIALISED   The device has not been opened or has
761*                                      been disconnected meanwhile.
762*
763*  \retval NFCSTATUS_BUSY              Previous presence check callback has not
764*                                      been received
765*
766*  \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
767*                                      could not be properly interpreted.
768*
769*  \retval NFCSTATUS_RELEASED          P2P target has been released by Initiator.
770*  \retval Others                      Errors related to the lower layers
771*
772*/
773extern NFCSTATUS phHal4Nfc_PresenceCheck(
774                                  phHal_sHwReference_t     *psHwReference,
775                                  pphHal4Nfc_GenCallback_t  pPresenceChkCb,
776                                  void                     *context
777                                  );
778
779
780/**
781 *  \if hal
782 *   \ingroup grp_hal_common
783 *  \else
784 *   \ingroup grp_mw_external_hal_funcs
785 *  \endif
786 *
787 *  The I/O Control function allows the caller to use (vendor-) specific
788 *  functionality provided by the lower layer or by the hardware. Each feature
789 *  is accessible via a specific IOCTL Code and has to be documented by the
790 *  provider of the driver and the hardware.
791 *  See "IOCTL Codes" for the definition of a standard command set.\n
792 *
793 *
794 *  \param[in]      psHwReference       Hardware Reference, pre-initialized by
795 *                                      upper layer. \n
796 *  \param[in]      IoctlCode           Control code for the operation.
797 *                                      This value identifies the specific
798 *                                      operation to be performed and are defined
799 *                                      in  \ref phNfcIoctlCode.h
800 *
801 *  \param[in]      pInParam            Pointer to any input data structure
802 *                                      containing data which is interpreted
803 *                                      based on Ioctl code and the length of
804 *                                      the data.
805 *
806 *  \param[in]      pOutParam           Pointer to output data structure
807 *                                      containing data which is returned as a
808 *                                      result of the Ioctl operation and the
809 *                                      length of the data.
810 *
811 *  \param[in]      pIoctlCallback      callback function called in case an
812 *                                      error has occurred while performing
813 *                                      requested operation,or on successful
814 *                                      completion of the request
815 *
816 *  \param[in]      pContext            Upper layer context to be returned in
817 *                                      the callback.
818 *
819 *  \retval NFCSTATUS_SUCCESS           Success.
820 *  \retval NFCSTATUS_PENDING           Call issued to lower layer.Status will
821 *                                      be notified in pIoctlCallback.
822 *  \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
823 *                                      could not be properly interpreted.
824 *  \retval NFCSTATUS_NOT_INITIALIZED   Hal is not initialized.
825 *  \retval Others                      Errors related to the lower layers.
826 *
827 */
828extern NFCSTATUS phHal4Nfc_Ioctl(
829                                phHal_sHwReference_t       *psHwReference,
830                                uint32_t                    IoctlCode,
831                                phNfc_sData_t              *pInParam,
832                                phNfc_sData_t              *pOutParam,
833                                pphHal4Nfc_IoctlCallback_t  pIoctlCallback,
834                                void                       *pContext
835                                );
836
837
838
839/**
840 *  \if hal
841 *   \ingroup grp_hal_common
842 *  \else
843 *   \ingroup grp_mw_external_hal_funcs
844 *  \endif
845 *
846 *  Closes the link to the NFC device. All configurations/setups
847 *  done until now are invalidated.To restart communication, phHal4Nfc_Open
848 *  needs to be called. The pClosecallback is called when all steps
849 *  in the close sequence are completed.
850 *
851 *
852 *  \param[in]     psHwReference        Hardware Reference, pre-initialized by
853 *                                      upper layer. \n
854 *
855 *  \param[in]     pCloseCallback       Callback function called on completion of
856 *                                      the close sequence or in case an error
857 *                                      has occurred..
858 *
859 *  \param[in]     pContext             Upper layer context to be returned
860 *                                      in the callback.
861 *
862 *  \retval NFCSTATUS_SUCCESS           Closing successful.
863 *  \retval NFCSTATUS_NOT_INITIALIZED   The device has not been opened or has
864 *                                      been disconnected meanwhile.
865 *  \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
866 *                                      could not be properly interpreted.
867 *  \retval NFCSTATUS_BUSY              Configuration is in progress.Shutdown
868 *                                      is not allowed until configure complete.
869 *  \retval Others                      Errors related to the lower layers.
870 *
871 *  \if hal
872 *   \sa \ref phHal4Nfc_Open
873 *  \endif
874 */
875extern NFCSTATUS phHal4Nfc_Close(
876                                phHal_sHwReference_t     *psHwReference,
877                                pphHal4Nfc_GenCallback_t  pCloseCallback,
878                                void                     *pContext
879                                );
880
881
882/**
883 *  \if hal
884 *   \ingroup grp_hal_common
885 *  \else
886 *   \ingroup grp_mw_external_hal_funcs
887 *  \endif
888 *
889 *  Forcibly shutdown the HAl.This API makes a call to forcibly shutdown the
890 *  lower layer and frees all resources in use by Hal before shutting down.The
891 *  API always succeeds.It does not however reset the target.
892 *
893 *  \param[in]     psHwReference        Hardware Reference, pre-initialized by
894 *                                      upper layer. \n
895 *
896 *  \param[in]     pConfig              Reserved for future use.
897 *
898 *
899 */
900extern void phHal4Nfc_Hal4Reset(
901                                phHal_sHwReference_t *psHwReference,
902                                void                 *pConfig
903                                );
904
905
906/**
907*  \if hal
908*   \ingroup grp_hal_common
909*  \else
910*   \ingroup grp_mw_external_hal_funcs
911*  \endif
912*
913*  The function is used by the NFCIP1 Target to respond to packect received
914*  from NFCIP1 initiator. pSendCallback()
915*  is called , when all steps in the send sequence are completed.
916*
917*  \param[in]     psHwReference         Hardware Reference, pre-initialized by
918*                                       upper layer. \n
919*
920*  \param[in]     psTransactInfo        information required for transferring
921*                                       the data
922*
923*  \param[in]     sTransferData         Data and the length of the data to be
924*                                       transferred
925*
926*  \param[in]     pSendCallback         Callback function called on completion
927*                                       of the NfcIP sequence or in case an
928*                                       error has occurred.
929*
930*  \param[in]     pContext              Upper layer context to be returned in
931*                                       the callback.
932*
933*  \retval NFCSTATUS_PENDING            Send is in progress.
934*  \retval NFCSTATUS_INVALID_DEVICE     The device has not been opened or has
935*                                       been disconnected meanwhile.
936*  \retval NFCSTATUS_INVALID_PARAMETER  One or more of the supplied parameters
937*                                       could not be properly interpreted.
938*  \retval NFCSTATUS_NOT_INITIALIZED    Hal is not initialized.
939*  \retval Others                       Errors related to the lower layers.
940*
941*
942*/
943extern
944NFCSTATUS
945phHal4Nfc_Send(
946                phHal_sHwReference_t                    *psHwReference,
947                phHal4Nfc_TransactInfo_t                *psTransactInfo,
948                phNfc_sData_t                            sTransferData,
949                pphHal4Nfc_SendCallback_t                pSendCallback,
950                void                                    *pContext
951                );
952
953/**
954*  \if hal
955*   \ingroup grp_hal_common
956*  \else
957*   \ingroup grp_mw_external_hal_funcs
958*  \endif
959*
960*  This function is called by the NfcIP Peer to wait for receiving data from
961*  the other peer.It is used only by the NfcIP Target.
962*  \note NOTE: After this function is called, its mandatory to wait for the
963*  pphHal4Nfc_ReceiveCallback_t callback, before calling any other function.
964*  Only functions allowed are phHal4Nfc_Close() and phHal4Nfc_Hal4Reset().
965*
966*
967*  \param[in]     psHwReference         Hardware Reference, pre-initialized by
968*                                       upper layer. \n
969*
970*  \param[in]     psTransactInfo            information required for transferring the
971*                                       data
972*
973*  \param[in]     pReceiveCallback      Callback function called after receiving
974*                                       the data or in case an error has
975*                                       has occurred.
976*
977*  \param[in]     pContext              Upper layer context to be returned
978*                                       in the callback.
979*
980*  \retval NFCSTATUS_PENDING            Receive is in progress.
981*  \retval NFCSTATUS_INVALID_DEVICE     The device has not been opened or has
982*                                       been disconnected meanwhile.
983*  \retval NFCSTATUS_INVALID_PARAMETER  One or more of the supplied parameters
984*                                       could not be properly interpreted.
985*  \retval NFCSTATUS_NOT_INITIALIZED    Hal is not initialized.
986*  \retval Others                       Errors related to the lower layers
987*
988*/
989extern
990NFCSTATUS
991phHal4Nfc_Receive(
992                  phHal_sHwReference_t                  *psHwReference,
993                  phHal4Nfc_TransactInfo_t              *psTransactInfo,
994                  pphHal4Nfc_ReceiveCallback_t           pReceiveCallback,
995                  void                                  *pContext
996                 );
997
998
999/**
1000*  \if hal
1001*   \ingroup grp_hal_common
1002*  \else
1003*   \ingroup grp_mw_external_hal_funcs
1004*  \endif
1005*
1006*  This API is a synchronous call used to register a listener for either tag
1007*  discovery, Secure element notification or P2P Notification or a general
1008*  notification handler for all the three.
1009*
1010*
1011*  \param[in] psHwRef               Hardware Reference, pre-initialized by
1012*                                   upper layer. \n
1013*
1014*  \param[in] eRegisterType         Type of Notification registered.Informs
1015*                                   whether upper layer is interested in Tag
1016*                                   Discovery,secure element or P2P notification.
1017*
1018*  \param[in] pNotificationHandler  Notification callback.If this parameter is
1019*                                   NULL,any notification from Hci will be
1020*                                   ignored and upper layer will not be notified
1021*                                   of the event.
1022*
1023*  \param[in] Context              Upper layer context.
1024*
1025*  \retval NFCSTATUS_SUCCESS            Notification unregister successful.
1026*
1027*  \retval NFCSTATUS_INVALID_PARAMETER  One or more of the supplied parameters
1028*                                       could not be properly interpreted.
1029*  \retval NFCSTATUS_NOT_INITIALIZED    Hal is not initialized.
1030*
1031*/
1032extern NFCSTATUS phHal4Nfc_RegisterNotification(
1033                            phHal_sHwReference_t      *psHwRef,
1034                            phHal4Nfc_RegisterType_t   eRegisterType,
1035                            pphHal4Nfc_Notification_t  pNotificationHandler,
1036                            void                      *Context
1037                            );
1038
1039/**
1040*  \if hal
1041*   \ingroup grp_hal_common
1042*  \else
1043*   \ingroup grp_mw_external_hal_funcs
1044*  \endif
1045*
1046*  This API is a synchronous call used to unregister a listener for either tag
1047*  discovery, Secure element notification or P2P Notification, previously
1048*  registered using \ref phHal4Nfc_RegisterNotification.
1049*
1050*  \param[in]   psHwReference           Hardware Reference, pre-initialized by
1051*                                       upper layer. \n
1052*
1053*  \param[in]   eRegisterType           Type of registration ,tells whether upper
1054*                                       layer is interested in unregistering for
1055*                                       Tag Discovery,Secure element or P2P. \n
1056*
1057*  \param[in]   Context                Upper layer context.
1058*
1059*  \retval NFCSTATUS_SUCCESS            Notification unregister successful.
1060*
1061*  \retval NFCSTATUS_INVALID_PARAMETER  One or more of the supplied parameters
1062*                                       could not be properly interpreted.
1063*
1064*  \retval NFCSTATUS_NOT_INITIALIZED    Hal is not initialized.
1065*
1066*
1067*/
1068extern NFCSTATUS phHal4Nfc_UnregisterNotification(
1069                                    phHal_sHwReference_t     *psHwReference,
1070                                    phHal4Nfc_RegisterType_t  eRegisterType,
1071                                    void                     *Context
1072                                    );
1073
1074
1075/**
1076*  \if hal
1077*   \ingroup grp_hal_common
1078*  \else
1079*   \ingroup grp_mw_external_hal_funcs
1080*  \endif
1081*
1082*  This function is called to switch the SmartMX to Wired Mode. After switching
1083* to Wired mode the SmartMX can be discovered through Tag Discovery like a normal
1084* tag and used in the same manner as a tag. SmartMx returns to previous mode
1085* (Virtual or Off) when the tag is relased by phHal4Nfc_Disconnect
1086*
1087*
1088*  \param[in]  psHwReference            Hardware Reference, pre-initialized by
1089*                                       upper layer. \n
1090*
1091*  \param[in]  smx_mode                 Mode to which the switch should be made.
1092*
1093*  \param[in]  pSwitchModecb            Callback for Switch mode complete
1094*                                       with success/error notification.
1095*
1096*  \param[in]  pContext                 Upper layer context.
1097*
1098*  \retval NFCSTATUS_PENDING                    Switch in progress.Status will be
1099*                                               returned in pSwitchModecb.
1100*  \retval NFCSTATUS_INVALID_PARAMETER          One or more of the supplied
1101*                                               parameters could not be properly
1102*                                               interpreted.
1103*  \retval NFCSTATUS_NOT_INITIALIZED            Hal is not initialized.
1104*  \retval NFCSTATUS_BUSY                       Configuration in Progress or
1105*                                               remote device is connected.
1106*  \retval NFCSTATUS_INSUFFICIENT_RESOURCES     System resources are insufficient
1107*                                               to complete the request at that
1108*                                               point in time.
1109* \retval NFCSTATUS_FAILED                      No listener has been registered
1110*                                               by the upper layer for Emulation
1111*                                               before making this call.
1112*  \retval Others                               Errors related to the lower
1113*                                               layers.
1114*/
1115extern NFCSTATUS phHal4Nfc_Switch_SMX_Mode(
1116                                    phHal_sHwReference_t      *psHwReference,
1117                                    phHal_eSmartMX_Mode_t      smx_mode,
1118                                    pphHal4Nfc_GenCallback_t   pSwitchModecb,
1119                                    void                      *pContext
1120                                    );
1121
1122
1123/**
1124*  \if hal
1125*   \ingroup grp_hal_common
1126*  \else
1127*   \ingroup grp_mw_external_hal_funcs
1128*  \endif
1129*
1130*  This function is called to switch the UICC on or Off.
1131*
1132*
1133*  \param[in]  psHwReference            Hardware Reference, pre-initialized by
1134*                                       upper layer. \n
1135*
1136*  \param[in]  smx_mode                 Mode to which the switch should be made.
1137*
1138*  \param[in]  pSwitchModecb            Callback for Switch mode complete
1139*                                       with success/error notification.
1140*
1141*  \param[in]  pContext                 Upper layer context.
1142*
1143*  \retval NFCSTATUS_PENDING                    Switch in progress.Status will be
1144*                                               returned in pSwitchModecb.
1145*  \retval NFCSTATUS_INVALID_PARAMETER          One or more of the supplied
1146*                                               parameters could not be properly
1147*                                               interpreted.
1148*  \retval NFCSTATUS_NOT_INITIALIZED            Hal is not initialized.
1149*  \retval NFCSTATUS_BUSY                       Configuration in Progress or
1150*                                               remote device is connected.
1151*  \retval NFCSTATUS_INSUFFICIENT_RESOURCES     System resources are insufficient
1152*                                               to complete the request at that
1153*                                               point in time.
1154* \retval NFCSTATUS_FAILED                      No listener has been registered
1155*                                               by the upper layer for Emulation
1156*                                               before making this call.
1157*  \retval Others                               Errors related to the lower
1158*                                               layers.
1159*/
1160extern NFCSTATUS phHal4Nfc_Switch_Swp_Mode(
1161                                    phHal_sHwReference_t      *psHwReference,
1162                                    phHal_eSWP_Mode_t          swp_mode,
1163                                    pphHal4Nfc_GenCallback_t   pSwitchModecb,
1164                                    void                      *pContext
1165                                    );
1166
1167#endif /* end of PHHAL4NFC_H */
1168
1169
1170