summaryrefslogtreecommitdiffstats
path: root/src/phHal4Nfc.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/phHal4Nfc.h')
-rw-r--r--src/phHal4Nfc.h1169
1 files changed, 1169 insertions, 0 deletions
diff --git a/src/phHal4Nfc.h b/src/phHal4Nfc.h
new file mode 100644
index 0000000..47e3136
--- /dev/null
+++ b/src/phHal4Nfc.h
@@ -0,0 +1,1169 @@
+/*
+ * Copyright (C) 2010 NXP Semiconductors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/**
+ * \file phHal4Nfc.h
+ * \brief HAL Function Prototypes
+ * The HAL4.0 API provides the user to have a interface for PN544(PN54x)/PN65N
+ * NFC device.The API is a non-blocking API, asynchronous API. This means that
+ * when ever an API function call results in waiting for a response from the
+ * NFC device, the API function will return immediately with status 'PENDING'
+ * and the actual result will be returned through specific callback functions
+ * on receiving the response from the NFC device
+ *
+ * \note This is the representative header file of the HAL 4.0. The release
+ * TAG or label is representing the release TAG (alias) of the entire
+ * library.A mechanism (see documentation \ref hal_release_label near
+ * the include guards of this file) is used to propagate the alias to
+ * the main documentation page.
+ *
+ * Project: NFC-FRI-1.1 / HAL4.0
+ *
+ * $Date: Mon Jun 14 11:36:12 2010 $
+ * $Author: ing07385 $
+ * $Revision: 1.171 $
+ * $Aliases: NFC_FRI1.1_WK1023_R35_2,NFC_FRI1.1_WK1023_R35_1 $
+ *
+ */
+
+/** page hal_release_label HAL 4.0 Release Label
+ * SDK_HAL_4.0 v 0.1 Draft
+ * \note This is the TAG (label, alias) of the HAL. If the string is empty,the
+ * current documentation has not been generated from an official release.
+ */
+/*@{*/
+#ifndef PHHAL4NFC_H
+#define PHHAL4NFC_H
+/*@}*/
+
+
+/**
+ * \name HAL4
+ *
+ * File: \ref phHal4Nfc.h
+ *\def hal
+ */
+
+/*@{*/
+#define PH_HAL4NFC_FILEREVISION "$Revision: 1.171 $" /**< \ingroup grp_file_attributes */
+#define PH_HAL4NFC_FILEALIASES "$Aliases: NFC_FRI1.1_WK1023_R35_2,NFC_FRI1.1_WK1023_R35_1 $" /**< \ingroup grp_file_attributes */
+/*@}*/
+
+/* -----------------Include files ---------------------------------------*/
+#include <phNfcStatus.h>
+#include <phNfcCompId.h>
+#include <phNfcHalTypes.h>
+#include <phNfcInterface.h>
+#include <phNfcIoctlCode.h>
+#include <phNfcConfig.h>
+#include <phDbgTrace.h>
+#ifdef ANDROID
+#include <string.h>
+#endif
+
+/*************************** Includes *******************************/
+/** \defgroup grp_mw_external_hal_funcs NFC HAL4.0
+*
+*
+*
+*/
+/* ---------------- Macros ----------------------------------------------*/
+
+/** HAL Implementation Version Macros : Updated for every feature release of
+ HAL functionality */
+#define PH_HAL4NFC_VERSION 8
+#define PH_HAL4NFC_REVISION 21
+#define PH_HAL4NFC_PATCH 1
+#define PH_HAL4NFC_BUILD 0
+
+/** HAL Interface Version Macros : Updated for every external release of
+ HAL Interface */
+#define PH_HAL4NFC_INTERFACE_VERSION 0
+#define PH_HAL4NFC_INTERFACE_REVISION 6
+#define PH_HAL4NFC_INTERFACE_PATCH 0
+#define PH_HAL4NFC_INTERAFECE_BUILD 0
+
+/**Maximum length of receive buffer maintained by HAL*/
+#define PH_HAL4NFC_MAX_RECEIVE_BUFFER 4096U
+
+/**Send length used for Transceive*/
+#define PH_HAL4NFC_MAX_SEND_LEN PHHAL_MAX_DATASIZE
+
+/* -----------------Structures and Enumerations -------------------------*/
+
+/**
+ * \ingroup grp_mw_external_hal_funcs
+ *
+ * Structure containing information about discovered remote device, like
+ * the number of remote devices found, device specific information
+ * like type of device (eg: ISO14443-4A/4B, NFCIP1 target etc) and
+ * the type sepcific information (eg: UID, SAK etc). This structure is
+ * returned as part of the disocvery notification. For more info refer
+ * \ref phHal4Nfc_ConfigureDiscovery,
+ * \ref phHal4Nfc_RegisterNotification,
+ * \ref pphHal4Nfc_Notification_t,
+ * phHal4Nfc_NotificationInfo_t
+ *
+ *
+ */
+typedef struct phHal4Nfc_DiscoveryInfo
+{
+ uint32_t NumberOfDevices;/**< Number of devices found */
+ phHal_sRemoteDevInformation_t **ppRemoteDevInfo;/**< Pointer to Remote
+ device info list*/
+}phHal4Nfc_DiscoveryInfo_t;
+
+/**
+ * \ingroup grp_mw_external_hal_funcs
+ *
+ * This is a union returned as part of the \ref pphHal4Nfc_Notification_t
+ * callback. It contains either discovery information or other event
+ * information for which the client has registered using the
+ * \ref phHal4Nfc_RegisterNotification.
+ */
+typedef union
+{
+ phHal4Nfc_DiscoveryInfo_t *psDiscoveryInfo;
+ phHal_sEventInfo_t *psEventInfo;
+}phHal4Nfc_NotificationInfo_t;
+
+
+
+/**
+* \ingroup grp_mw_external_hal_funcs
+*
+* Prototype for Generic callback type provided by upper layer. This is used
+* to return the success or failure status an asynchronous API function which
+* does not have any other additional information to be returned. Refer
+* specific function for applicable status codes.
+*/
+typedef void (*pphHal4Nfc_GenCallback_t)(
+ void *context,
+ NFCSTATUS status
+ );
+
+/**
+* \ingroup grp_mw_external_hal_funcs
+*
+* Disconnect callback type provided by upper layer to called on completion
+* of disconnect call \ref phHal4Nfc_Disconnect.
+*
+*/
+typedef void (*pphHal4Nfc_DiscntCallback_t)(
+ void *context,
+ phHal_sRemoteDevInformation_t *psDisconnectDevInfo,
+ NFCSTATUS status
+ );
+
+/**
+* \ingroup grp_mw_external_hal_funcs
+*
+* Notification callback type used by HAL to provide a Discovery or
+* Event notification to the upper layer.
+*
+*/
+typedef void (*pphHal4Nfc_Notification_t) (
+ void *context,
+ phHal_eNotificationType_t type,
+ phHal4Nfc_NotificationInfo_t info,
+ NFCSTATUS status
+ );
+
+
+/**
+* \ingroup grp_mw_external_hal_funcs
+*
+* Callback type used to provide a Connect Success or Failure indication to
+* the upper layer as a result of \ref phHal4Nfc_Connect call used to connect
+* to discovered remote device.
+*
+*/
+typedef void (*pphHal4Nfc_ConnectCallback_t)(
+ void *context,
+ phHal_sRemoteDevInformation_t *psRemoteDevInfo,
+ NFCSTATUS status
+ );
+
+/**
+* \ingroup grp_mw_external_hal_funcs
+*
+* This callback type is used to provide received data and it's size to the
+* upper layer in \ref phNfc_sData_t format ,when the upper layer has performed
+* a Transceive operation on a tag or when the Device acts as an Initiator in a
+* P2P transaction.
+*
+*
+*/
+typedef void (*pphHal4Nfc_TransceiveCallback_t) (
+ void *context,
+ phHal_sRemoteDevInformation_t *ConnectedDevice,
+ phNfc_sData_t *pRecvdata,
+ NFCSTATUS status
+ );
+
+/**
+* \ingroup grp_mw_external_hal_funcs
+*
+* This callback type is used to provide received data and it's size to the
+* upper layer in \ref phNfc_sData_t structure, when the upper layer when the
+* Device acts as a Target in a P2P transaction.
+*
+*
+*/
+typedef void (*pphHal4Nfc_ReceiveCallback_t) (
+ void *context,
+ phNfc_sData_t *pDataInfo,
+ NFCSTATUS status
+ );
+
+/**
+* \ingroup grp_mw_external_hal_funcs
+*
+* Callback type to inform success or failure of the Ioctl calls
+* made by upper layer. It may optionally contain response data
+* depending on the Ioctl command issued.
+*
+*/
+typedef void (*pphHal4Nfc_IoctlCallback_t) (void *context,
+ phNfc_sData_t *pOutData,
+ NFCSTATUS status );
+
+/**
+* \ingroup grp_mw_external_hal_funcs
+*\if hal
+* \sa \ref pphHal4Nfc_GenCallback_t
+* \endif
+*
+*/
+
+/** Same as general callback type, used to inform the completion of
+* \ref phHal4Nfc_Send call done by when in NFCIP1 Target mode
+*/
+typedef pphHal4Nfc_GenCallback_t pphHal4Nfc_SendCallback_t;
+
+/**
+* \ingroup grp_mw_external_hal_funcs
+*
+* Enum type to distinguish between normal init and test mode init
+* to be done as part of phHal4Nfc_Open
+* In test mode init only minimal initialization of the NFC Device
+* sufficient to run the self test is performed.
+*
+* \note Note: No functional features can be accessed when
+* phHal4Nfc_Open is called with TestModeOn
+* \ref phHal4Nfc_Open
+*
+*/
+typedef enum{
+ eInitDefault = 0x00, /**<Complete initialization for normal
+ firmware operation*/
+ eInitTestModeOn, /**<Limited Initialization used for running self
+ tests */
+ eInitCustom /**<Reserved for Future Use */
+} phHal4Nfc_InitType_t;
+
+/**
+* \ingroup grp_mw_external_hal_funcs
+*
+* Type to select the type of notification registration
+* for Tags, P2P and SecureElement and Host Card Emulation events
+*
+* \if hal
+* \ref phHal4Nfc_RegisterNotification,phHal4Nfc_UnregisterNotification
+* \endif
+*
+*/
+typedef enum{
+ eRegisterDefault = 0x00, /**<For All other generic notifications
+ like Host Wakeup Notification */
+ eRegisterTagDiscovery, /**<For Tag Discovery notification*/
+ eRegisterP2PDiscovery, /**<For P2P Discovery notification*/
+ eRegisterSecureElement, /**<For Secure Element notification*/
+ eRegisterHostCardEmulation /**<For notification related to Virtual
+ Card Emulation from host */
+} phHal4Nfc_RegisterType_t;
+
+/**
+* \ingroup grp_mw_external_hal_funcs
+*
+* Specifies the Remote Reader type,either initiator or ISO A/B or Felica
+*
+*/
+typedef struct phHal4Nfc_TransactInfo{
+ phHal_eRFDevType_t remotePCDType;
+}phHal4Nfc_TransactInfo_t;
+
+/*preliminary definitions end*/
+
+/* -----------------Exported Functions----------------------------------*/
+/**
+ * \if hal
+ * \ingroup grp_hal_common
+ * \else
+ * \ingroup grp_mw_external_hal_funcs
+ * \endif
+ *
+ * This function initializes and establishes a link to the NFC Device. This is
+ * a asynchronous call as it requires a series of setup calls with the NFC
+ * device. The open is complete when the status response callback <em>
+ * pOpenCallback </em> is called. It uses a Hardware Reference
+ * \ref phHal_sHwReference, allocated by the upper layer and the p_board_driver
+ * member initialized with the dal_instance (handle to the communication driver)
+ * and other members initialized to zero or NULL.
+ *
+ * \note
+ * - The device is in initialized state after the command has completed
+ * successfully.
+ *
+ *
+ * \param[in,out] psHwReference Hardware Reference, pre-initialized by upper
+ * layer. Members of this structure are made valid if
+ * this function is successful. \n
+ *
+ * \param[in] InitType Initialization type, used to differentiate between
+ * test mode limited initialization and normal init.
+ *
+ * \param[in] pOpenCallback The open callback function called by the HAL
+ * when open (initialization) sequence is completed or if there
+ * is an error in initialization. \n
+ *
+ * \param[in] pContext Upper layer context which will be included in the
+ * call back when request is completed. \n
+ *
+ * \retval NFCSTATUS_PENDING Open sequence has been successfully
+ * started and result will be conveyed
+ * via the pOpenCallback function.
+ * \retval NFCSTATUS_ALREADY_INITIALISED Device initialization already in
+ * progress.
+ * \retval NFCSTATUS_INVALID_PARAMETER The parameter could not be properly
+ * interpreted (structure uninitialized?).
+ * \retval NFCSTATUS_INSUFFICIENT_RESOURCES Insufficient resources for
+ * completing the request.
+ * \retval Others Errors related to the lower layers.
+ *
+ * \if hal
+ * \sa \ref phHal4Nfc_Close,
+ * \endif
+ */
+extern NFCSTATUS phHal4Nfc_Open(
+ phHal_sHwReference_t *psHwReference,
+ phHal4Nfc_InitType_t InitType,
+ pphHal4Nfc_GenCallback_t pOpenCallback,
+ void *pContext
+ );
+
+
+
+/**
+ * \if hal
+ * \ingroup grp_hal_common
+ * \else
+ * \ingroup grp_mw_external_hal_funcs
+ * \endif
+ *
+ * Retrieves the capabilities of the device represented by the Hardware
+ * Reference parameter.The HW, FW versions,model-id and other capability
+ * information are located inside the pDevCapabilities parameter.
+ *
+ * \param[in] psHwReference Hardware Reference, pre-initialized
+ * by upper layer. \n
+ * \param[out] psDevCapabilities Pointer to the device capabilities structure
+ * where all relevant capabilities of the
+ * peripheral are stored. \n
+ * \param[in] pContext Upper layer context which will be included in
+ * the call back when request is completed. \n
+ *
+ * \retval NFCSTATUS_SUCCESS Success and the psDevCapabilities is
+ * updated with info.
+ * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
+ * could not be properly interpreted.
+ * \retval NFCSTATUS_NOT_INITIALISED Hal is not yet initialized.
+ * \retval Others Errors related to the lower layers.
+ *
+ */
+extern NFCSTATUS phHal4Nfc_GetDeviceCapabilities(
+ phHal_sHwReference_t *psHwReference,
+ phHal_sDeviceCapabilities_t *psDevCapabilities,
+ void *pContext
+ );
+
+
+/**
+* \if hal
+* \ingroup grp_hal_common
+* \else
+* \ingroup grp_mw_external_hal_funcs
+* \endif
+*
+* This function is used to Configure discovery wheel (and start if
+* required) based on the discovery configuration passed.
+* This includes enabling/disabling of the Reader phases (A, B, F),
+* NFCIP1 Initiator Speed and duration of the Emulation phase.
+* Additional optional parameters for each of the features i.e. Reader,
+* Emulation and Peer2Peer can be set using the
+* \ref phHal4Nfc_ConfigParameters function
+*
+* \param[in] psHwReference Hardware Reference, pre-initialized by
+* upper layer. \n
+*
+* \param[in] discoveryMode Discovery Mode allows to choose between:
+* discovery configuration and start, stop
+* discovery and start discovery (with last
+* set configuration).
+* \ref phHal_eDiscoveryConfigMode_t
+* \note Note: Presently only NFC_DISCOVERY_CONFIG is supported, other values
+* are for future use. When in Reader/Initiator mode it mandatory
+* to call phHal4Nfc_Connect before any transaction can be performed
+* with the discovered device.
+*
+* \param[in] discoveryCfg Discovery configuration parameters.
+* Reader A/Reader B, Felica 212, Felica 424,
+* NFCIP1 Speed, Emulation Enable and Duration.
+*
+*
+* \param[in] pConfigCallback This callback has to be called once Hal
+* completes the Configuration.
+*
+* \param[in] pContext Upper layer context to be returned in the
+* callback.
+*
+* \retval NFCSTATUS_INVALID_PARAMETER Wrong Parameter values.
+*
+* \retval NFCSTATUS_NOT_INITIALISED Hal is not initialized.
+*
+* \retval NFCSTATUS_BUSY Cannot Configure Hal in
+* Current state.
+*
+* \retval NFCSTATUS_INSUFFICIENT_RESOURCES System Resources insufficient.
+*
+* \retval NFCSTATUS_PENDING Configuration request accepted
+* and Configuration is in progress.
+*
+* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied
+* parameters could not be properly
+* interpreted.
+* \retval Others Errors related to the lower layers
+*
+* \note Note: When in Reader/Initiator mode it mandatory
+* to call phHal4Nfc_Connect before any transaction can be performed
+* with the discovered device. Even if the HAL client is not
+* interested in using any of the discovered phHal4Nfc_Connect and
+* phHal4Nfc_Disconnect should be called to restart the Discovery
+* wheel
+*
+* \ref phHal4Nfc_Connect, phHal4Nfc_Disconnect
+*
+*/
+extern NFCSTATUS phHal4Nfc_ConfigureDiscovery(
+ phHal_sHwReference_t *psHwReference,
+ phHal_eDiscoveryConfigMode_t discoveryMode,
+ phHal_sADD_Cfg_t *discoveryCfg,
+ pphHal4Nfc_GenCallback_t pConfigCallback,
+ void *pContext
+ );
+/**
+* \if hal
+* \ingroup grp_hal_common
+* \else
+* \ingroup grp_mw_external_hal_funcs
+* \endif
+*
+* This function is used to set parameters of various features of the Hal,
+* based on the CfgType parameter. Presently following configuration
+* types are supported :-
+* \n 1. NFC_RF_READER_CONFIG (optional)-> Configure parameters for Reader A
+* or Reader B based on the configuration passed
+* \n 2. NFC_P2P_CONFIG (optional)-> Congfigure P2P parameters like
+* 'General bytes', 'PSL Request' etc.
+* \n 3. NFC_EMULATION_CONFIG -> Enable and configure the emulation mode
+* parameters for either NFC Target, SmartMX, UICC and
+* \n Card Emulation from Host (A, B, F)
+* All the configuration modes can be called independent of each other. The
+* setting will typically take effect for the next cycle of the relevant
+* phase of discovery. For optional configuration internal defaults will be
+* used in case the configuration is not set.
+* \note Card emulation from Host and Card Emulation from UICC are mutually
+* exclusive modes, i.e: only one can be enabled at a time. Using
+* this function to enable one of the emulation modes implicitly disables the
+* the other. eg. Setting Type A (or Type B) Emulation from Host disables
+* card emulation from UICC and vice versa.
+*
+* \param[in] psHwReference Hardware Reference, pre-initialized by
+* upper layer. \n
+*
+* \param[in] eCfgType Configuration type which can take one of the
+* enum values of \ref phHal_eConfigType_t. Each
+* config type is associated with its corresponding
+* information which is passed using the uCfg structure.
+*
+*
+* \param[in] uCfg Union containing configuration information,
+* which will be interpreted based on eCfgType
+* parameter.
+*
+*
+* \param[in] pConfigCallback This callback has to be called once Hal
+* completes the Configuration.
+*
+* \param[in] pContext Upper layer context to be returned in the
+* callback.
+*
+* \retval NFCSTATUS_INVALID_PARAMETER Wrong Parameter values.
+*
+* \retval NFCSTATUS_NOT_INITIALISED Hal is not initialized.
+*
+* \retval NFCSTATUS_BUSY Cannot Configure Hal in
+* Current state.
+*
+* \retval NFCSTATUS_INSUFFICIENT_RESOURCES System Resources insufficient.
+*
+* \retval NFCSTATUS_PENDING Configuration request accepted
+* and Configuration is in progress.
+*
+* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied
+* parameters could not be properly
+* interpreted.
+* \retval Others Errors related to the lower layers
+*/
+
+extern NFCSTATUS phHal4Nfc_ConfigParameters(
+ phHal_sHwReference_t *psHwReference,
+ phHal_eConfigType_t eCfgType,
+ phHal_uConfig_t *uCfg,
+ pphHal4Nfc_GenCallback_t pConfigCallback,
+ void *pContext
+ );
+
+/**
+ * \if hal
+ * \ingroup grp_hal_nfci
+ * \else
+ * \ingroup grp_mw_external_hal_funcs
+ * \endif
+ *
+ * This function is called to connect to a one (out of many if multiple
+ * devices are discovered) already discovered Remote Device notified
+ * through register notification. The Remote Device Information structure is
+ * already pre-initialized with data (e.g. from Discovery Notificaiton
+ * Callback) A new session is started after the connect function returns
+ * successfully. The session ends with a successful disconnect
+ * (see \ref phHal4Nfc_Disconnect).
+ *
+ * \param[in] psHwReference Hardware Reference, pre-initialized by
+ * upper layer. \n
+ *
+ * \param[in,out] psRemoteDevInfo Points to the Remote Device Information
+ * structure. The members of it can be
+ * re-used from a previous session.
+ *
+ * \param[in] pNotifyConnectCb Upper layer callback to be called for
+ * notifying Connect Success/Failure
+ *
+ * \param[in] pContext Upper layer context to be returned in
+ * pNotifyConnectCb.
+ *
+ * \retval NFCSTATUS_PENDING Request initiated, result will
+ * be informed through the callback.
+ * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied
+ * parameters could not be
+ * properly interpreted.
+ * \retval NFCSTATUS_FAILED More than one phHal4Nfc_Connect
+ * is not allowed during a session
+ * on the same remote device. The
+ * session has to be closed before
+ * (see\ref phHal4Nfc_Disconnect).
+ * \retval NFCSTATUS_NOT_INITIALIZED Hal is not initialized.
+ * \retval NFCSTATUS_FEATURE_NOT_SUPPORTED Reactivation is not supported for
+ * NfcIp target and Jewel/Topaz
+ * remote device types.
+ * \retval NFCSTATUS_INVALID_REMOTE_DEVICE The Remote Device Identifier is
+ * not valid.
+ * \retval Others Errors related to the lower layers.
+ *
+ * \if hal
+ * \sa \ref phHal4Nfc_Disconnect
+ * \endif
+ */
+extern NFCSTATUS phHal4Nfc_Connect(
+ phHal_sHwReference_t *psHwReference,
+ phHal_sRemoteDevInformation_t *psRemoteDevInfo,
+ pphHal4Nfc_ConnectCallback_t pNotifyConnectCb,
+ void *pContext
+ );
+
+
+/**
+ * \if hal
+ * \ingroup grp_hal_nfci
+ * \else
+ * \ingroup grp_mw_external_hal_funcs
+ * \endif
+ *
+ * The phHal4Nfc_Transceive function allows to send data to and receive data
+ * from the Remote Device selected by the caller.It is also used by the
+ * NFCIP1 Initiator while performing a transaction with the NFCIP1 target.
+ * The caller has to provide the Remote Device Information structure and the
+ * command in order to communicate with the selected remote device.For P2P
+ * transactions the command type will not be used.
+ *
+ *
+ * \note the RecvData should be valid until the pTrcvCallback has been called.
+ *
+ *
+ * \param[in] psHwReference Hardware Reference, pre-initialized by
+ * upper layer. \n
+ *
+ * \param[in,out] psTransceiveInfo Information required by transceive is
+ * concealed in this structure.It contains
+ * the send,receive buffers and their
+ * lengths.
+ *
+ * \param[in] psRemoteDevInfo Points to the Remote Device Information
+ * structure which identifies the selected
+ * Remote Device.
+ *
+ * \param[in] pTrcvCallback Callback function for returning the
+ * received response or error.
+ *
+ * \param[in] pContext Upper layer context to be returned in
+ * the callback.
+ *
+ * \retval NFCSTATUS_PENDING Transceive initiated.pTrcvCallback
+ * will return the response or error.
+ * \retval NFCSTATUS_NOT_INITIALIZED Hal is not initialized.
+ * \retval NFCSTATUS_SUCCESS This status is used when send data
+ * length is zero and HAL contains
+ * previously more bytes from previous
+ * receive. \n
+ * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied
+ * parameters could not be properly
+ * interpreted or are invalid.
+ * \retval NFCSTATUS_INVALID_DEVICE The device has not been opened or
+ * has been disconnected meanwhile.
+ * \retval NFCSTATUS_FEATURE_NOT_SUPPORTED Transaction on this Device type is
+ * not supported.
+ * \retval NFCSTATUS_BUSY Previous transaction is not
+ * completed.
+ * \retval NFCSTATUS_INSUFFICIENT_RESOURCES System resources are insufficient
+ * to complete the request at that
+ * point in time.
+ * \retval NFCSTATUS_MORE_INFORMATION Received number of bytes is greater
+ * than receive buffer provided by the
+ * upper layer.Extra bytes will be
+ * retained by Hal and returned on next
+ * call to transceive.
+ * \retval Others Errors related to the lower layers.
+ *
+ */
+extern NFCSTATUS phHal4Nfc_Transceive(
+ phHal_sHwReference_t *psHwReference,
+ phHal_sTransceiveInfo_t *psTransceiveInfo,
+ phHal_sRemoteDevInformation_t *psRemoteDevInfo,
+ pphHal4Nfc_TransceiveCallback_t pTrcvCallback,
+ void *pContext
+ );
+
+
+
+
+/**
+ * \if hal
+ * \ingroup grp_hal_nfci
+ * \else
+ * \ingroup grp_mw_external_hal_funcs
+ * \endif
+ *
+ * The function allows to disconnect from a specific Remote Device. This
+ * function closes the session opened with \ref phHal4Nfc_Connect "Connect".It
+ * is also used to switch from wired to virtual mode in case the discovered
+ * device is SmartMX in wired mode. The status of discovery wheel after
+ * disconnection is determined by the ReleaseType parameter.
+ *
+ *
+ *
+ * \param[in] psHwReference Hardware Reference, pre-initialized by
+ * upper layer. \n
+ * \param[in,out] psRemoteDevInfo Points to the valid (connected) Remote
+ * Device Information structure.
+ *
+ * \param[in] ReleaseType Defines various modes of releasing an acquired
+ * target or tag
+ *
+ * \param[in] pDscntCallback Callback function to notify
+ * disconnect success/error.
+ *
+ * \param[in] pContext Upper layer context to be returned in
+ * the callback.
+ *
+ *
+ * \retval NFCSTATUS_PENDING Disconnect initiated.pDscntCallback
+ * will return the response or error.
+ * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied
+ * parameters could not be properly
+ * interpreted.
+ * \retval NFCSTATUS_INVALID_REMOTE_DEVICE The device has not been opened
+ * before or has already been closed.
+ * \retval NFCSTATUS_NOT_INITIALIZED Hal is not initialized.
+ * \retval Others Errors related to the lower layers.
+ *
+ * \if hal
+ * \sa \ref phHal4Nfc_Connect
+ * \endif
+ */
+extern NFCSTATUS phHal4Nfc_Disconnect(
+ phHal_sHwReference_t *psHwReference,
+ phHal_sRemoteDevInformation_t *psRemoteDevInfo,
+ phHal_eReleaseType_t ReleaseType,
+ pphHal4Nfc_DiscntCallback_t pDscntCallback,
+ void *pContext
+ );
+
+/**
+* \if hal
+* \ingroup grp_hal_common
+* \else
+* \ingroup grp_mw_external_hal_funcs
+* \endif
+*
+* The function allows to do a one time check on whether the connected target
+* is still present in the field of the Reader. The call back returns the
+* result of the presence check sequence indicating whether it is still present
+* or moved out of the reader field.
+*
+* \param[in] psHwReference Hardware Reference, pre-initialized by
+* upper layer. \n
+*
+* \param[in] pPresenceChkCb Callback function called on completion of the
+* presence check sequence or in case an error
+* has occurred..
+*
+* \param[in] context Upper layer context to be returned in the
+* callback.
+*
+* \retval NFCSTATUS_PENDING Call successfully issued to lower layer.
+* Status will be returned in pPresenceChkCb.
+*
+* \retval NFCSTATUS_NOT_INITIALISED The device has not been opened or has
+* been disconnected meanwhile.
+*
+* \retval NFCSTATUS_BUSY Previous presence check callback has not
+* been received
+*
+* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
+* could not be properly interpreted.
+*
+* \retval NFCSTATUS_RELEASED P2P target has been released by Initiator.
+* \retval Others Errors related to the lower layers
+*
+*/
+extern NFCSTATUS phHal4Nfc_PresenceCheck(
+ phHal_sHwReference_t *psHwReference,
+ pphHal4Nfc_GenCallback_t pPresenceChkCb,
+ void *context
+ );
+
+
+/**
+ * \if hal
+ * \ingroup grp_hal_common
+ * \else
+ * \ingroup grp_mw_external_hal_funcs
+ * \endif
+ *
+ * The I/O Control function allows the caller to use (vendor-) specific
+ * functionality provided by the lower layer or by the hardware. Each feature
+ * is accessible via a specific IOCTL Code and has to be documented by the
+ * provider of the driver and the hardware.
+ * See "IOCTL Codes" for the definition of a standard command set.\n
+ *
+ *
+ * \param[in] psHwReference Hardware Reference, pre-initialized by
+ * upper layer. \n
+ * \param[in] IoctlCode Control code for the operation.
+ * This value identifies the specific
+ * operation to be performed and are defined
+ * in \ref phNfcIoctlCode.h
+ *
+ * \param[in] pInParam Pointer to any input data structure
+ * containing data which is interpreted
+ * based on Ioctl code and the length of
+ * the data.
+ *
+ * \param[in] pOutParam Pointer to output data structure
+ * containing data which is returned as a
+ * result of the Ioctl operation and the
+ * length of the data.
+ *
+ * \param[in] pIoctlCallback callback function called in case an
+ * error has occurred while performing
+ * requested operation,or on successful
+ * completion of the request
+ *
+ * \param[in] pContext Upper layer context to be returned in
+ * the callback.
+ *
+ * \retval NFCSTATUS_SUCCESS Success.
+ * \retval NFCSTATUS_PENDING Call issued to lower layer.Status will
+ * be notified in pIoctlCallback.
+ * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
+ * could not be properly interpreted.
+ * \retval NFCSTATUS_NOT_INITIALIZED Hal is not initialized.
+ * \retval Others Errors related to the lower layers.
+ *
+ */
+extern NFCSTATUS phHal4Nfc_Ioctl(
+ phHal_sHwReference_t *psHwReference,
+ uint32_t IoctlCode,
+ phNfc_sData_t *pInParam,
+ phNfc_sData_t *pOutParam,
+ pphHal4Nfc_IoctlCallback_t pIoctlCallback,
+ void *pContext
+ );
+
+
+
+/**
+ * \if hal
+ * \ingroup grp_hal_common
+ * \else
+ * \ingroup grp_mw_external_hal_funcs
+ * \endif
+ *
+ * Closes the link to the NFC device. All configurations/setups
+ * done until now are invalidated.To restart communication, phHal4Nfc_Open
+ * needs to be called. The pClosecallback is called when all steps
+ * in the close sequence are completed.
+ *
+ *
+ * \param[in] psHwReference Hardware Reference, pre-initialized by
+ * upper layer. \n
+ *
+ * \param[in] pCloseCallback Callback function called on completion of
+ * the close sequence or in case an error
+ * has occurred..
+ *
+ * \param[in] pContext Upper layer context to be returned
+ * in the callback.
+ *
+ * \retval NFCSTATUS_SUCCESS Closing successful.
+ * \retval NFCSTATUS_NOT_INITIALIZED The device has not been opened or has
+ * been disconnected meanwhile.
+ * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
+ * could not be properly interpreted.
+ * \retval NFCSTATUS_BUSY Configuration is in progress.Shutdown
+ * is not allowed until configure complete.
+ * \retval Others Errors related to the lower layers.
+ *
+ * \if hal
+ * \sa \ref phHal4Nfc_Open
+ * \endif
+ */
+extern NFCSTATUS phHal4Nfc_Close(
+ phHal_sHwReference_t *psHwReference,
+ pphHal4Nfc_GenCallback_t pCloseCallback,
+ void *pContext
+ );
+
+
+/**
+ * \if hal
+ * \ingroup grp_hal_common
+ * \else
+ * \ingroup grp_mw_external_hal_funcs
+ * \endif
+ *
+ * Forcibly shutdown the HAl.This API makes a call to forcibly shutdown the
+ * lower layer and frees all resources in use by Hal before shutting down.The
+ * API always succeeds.It does not however reset the target.
+ *
+ * \param[in] psHwReference Hardware Reference, pre-initialized by
+ * upper layer. \n
+ *
+ * \param[in] pConfig Reserved for future use.
+ *
+ *
+ */
+extern void phHal4Nfc_Hal4Reset(
+ phHal_sHwReference_t *psHwReference,
+ void *pConfig
+ );
+
+
+/**
+* \if hal
+* \ingroup grp_hal_common
+* \else
+* \ingroup grp_mw_external_hal_funcs
+* \endif
+*
+* The function is used by the NFCIP1 Target to respond to packect received
+* from NFCIP1 initiator. pSendCallback()
+* is called , when all steps in the send sequence are completed.
+*
+* \param[in] psHwReference Hardware Reference, pre-initialized by
+* upper layer. \n
+*
+* \param[in] psTransactInfo information required for transferring
+* the data
+*
+* \param[in] sTransferData Data and the length of the data to be
+* transferred
+*
+* \param[in] pSendCallback Callback function called on completion
+* of the NfcIP sequence or in case an
+* error has occurred.
+*
+* \param[in] pContext Upper layer context to be returned in
+* the callback.
+*
+* \retval NFCSTATUS_PENDING Send is in progress.
+* \retval NFCSTATUS_INVALID_DEVICE The device has not been opened or has
+* been disconnected meanwhile.
+* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
+* could not be properly interpreted.
+* \retval NFCSTATUS_NOT_INITIALIZED Hal is not initialized.
+* \retval Others Errors related to the lower layers.
+*
+*
+*/
+extern
+NFCSTATUS
+phHal4Nfc_Send(
+ phHal_sHwReference_t *psHwReference,
+ phHal4Nfc_TransactInfo_t *psTransactInfo,
+ phNfc_sData_t sTransferData,
+ pphHal4Nfc_SendCallback_t pSendCallback,
+ void *pContext
+ );
+
+/**
+* \if hal
+* \ingroup grp_hal_common
+* \else
+* \ingroup grp_mw_external_hal_funcs
+* \endif
+*
+* This function is called by the NfcIP Peer to wait for receiving data from
+* the other peer.It is used only by the NfcIP Target.
+* \note NOTE: After this function is called, its mandatory to wait for the
+* pphHal4Nfc_ReceiveCallback_t callback, before calling any other function.
+* Only functions allowed are phHal4Nfc_Close() and phHal4Nfc_Hal4Reset().
+*
+*
+* \param[in] psHwReference Hardware Reference, pre-initialized by
+* upper layer. \n
+*
+* \param[in] psTransactInfo information required for transferring the
+* data
+*
+* \param[in] pReceiveCallback Callback function called after receiving
+* the data or in case an error has
+* has occurred.
+*
+* \param[in] pContext Upper layer context to be returned
+* in the callback.
+*
+* \retval NFCSTATUS_PENDING Receive is in progress.
+* \retval NFCSTATUS_INVALID_DEVICE The device has not been opened or has
+* been disconnected meanwhile.
+* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
+* could not be properly interpreted.
+* \retval NFCSTATUS_NOT_INITIALIZED Hal is not initialized.
+* \retval Others Errors related to the lower layers
+*
+*/
+extern
+NFCSTATUS
+phHal4Nfc_Receive(
+ phHal_sHwReference_t *psHwReference,
+ phHal4Nfc_TransactInfo_t *psTransactInfo,
+ pphHal4Nfc_ReceiveCallback_t pReceiveCallback,
+ void *pContext
+ );
+
+
+/**
+* \if hal
+* \ingroup grp_hal_common
+* \else
+* \ingroup grp_mw_external_hal_funcs
+* \endif
+*
+* This API is a synchronous call used to register a listener for either tag
+* discovery, Secure element notification or P2P Notification or a general
+* notification handler for all the three.
+*
+*
+* \param[in] psHwRef Hardware Reference, pre-initialized by
+* upper layer. \n
+*
+* \param[in] eRegisterType Type of Notification registered.Informs
+* whether upper layer is interested in Tag
+* Discovery,secure element or P2P notification.
+*
+* \param[in] pNotificationHandler Notification callback.If this parameter is
+* NULL,any notification from Hci will be
+* ignored and upper layer will not be notified
+* of the event.
+*
+* \param[in] Context Upper layer context.
+*
+* \retval NFCSTATUS_SUCCESS Notification unregister successful.
+*
+* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
+* could not be properly interpreted.
+* \retval NFCSTATUS_NOT_INITIALIZED Hal is not initialized.
+*
+*/
+extern NFCSTATUS phHal4Nfc_RegisterNotification(
+ phHal_sHwReference_t *psHwRef,
+ phHal4Nfc_RegisterType_t eRegisterType,
+ pphHal4Nfc_Notification_t pNotificationHandler,
+ void *Context
+ );
+
+/**
+* \if hal
+* \ingroup grp_hal_common
+* \else
+* \ingroup grp_mw_external_hal_funcs
+* \endif
+*
+* This API is a synchronous call used to unregister a listener for either tag
+* discovery, Secure element notification or P2P Notification, previously
+* registered using \ref phHal4Nfc_RegisterNotification.
+*
+* \param[in] psHwReference Hardware Reference, pre-initialized by
+* upper layer. \n
+*
+* \param[in] eRegisterType Type of registration ,tells whether upper
+* layer is interested in unregistering for
+* Tag Discovery,Secure element or P2P. \n
+*
+* \param[in] Context Upper layer context.
+*
+* \retval NFCSTATUS_SUCCESS Notification unregister successful.
+*
+* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
+* could not be properly interpreted.
+*
+* \retval NFCSTATUS_NOT_INITIALIZED Hal is not initialized.
+*
+*
+*/
+extern NFCSTATUS phHal4Nfc_UnregisterNotification(
+ phHal_sHwReference_t *psHwReference,
+ phHal4Nfc_RegisterType_t eRegisterType,
+ void *Context
+ );
+
+
+/**
+* \if hal
+* \ingroup grp_hal_common
+* \else
+* \ingroup grp_mw_external_hal_funcs
+* \endif
+*
+* This function is called to switch the SmartMX to Wired Mode. After switching
+* to Wired mode the SmartMX can be discovered through Tag Discovery like a normal
+* tag and used in the same manner as a tag. SmartMx returns to previous mode
+* (Virtual or Off) when the tag is relased by phHal4Nfc_Disconnect
+*
+*
+* \param[in] psHwReference Hardware Reference, pre-initialized by
+* upper layer. \n
+*
+* \param[in] smx_mode Mode to which the switch should be made.
+*
+* \param[in] pSwitchModecb Callback for Switch mode complete
+* with success/error notification.
+*
+* \param[in] pContext Upper layer context.
+*
+* \retval NFCSTATUS_PENDING Switch in progress.Status will be
+* returned in pSwitchModecb.
+* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied
+* parameters could not be properly
+* interpreted.
+* \retval NFCSTATUS_NOT_INITIALIZED Hal is not initialized.
+* \retval NFCSTATUS_BUSY Configuration in Progress or
+* remote device is connected.
+* \retval NFCSTATUS_INSUFFICIENT_RESOURCES System resources are insufficient
+* to complete the request at that
+* point in time.
+* \retval NFCSTATUS_FAILED No listener has been registered
+* by the upper layer for Emulation
+* before making this call.
+* \retval Others Errors related to the lower
+* layers.
+*/
+extern NFCSTATUS phHal4Nfc_Switch_SMX_Mode(
+ phHal_sHwReference_t *psHwReference,
+ phHal_eSmartMX_Mode_t smx_mode,
+ pphHal4Nfc_GenCallback_t pSwitchModecb,
+ void *pContext
+ );
+
+
+/**
+* \if hal
+* \ingroup grp_hal_common
+* \else
+* \ingroup grp_mw_external_hal_funcs
+* \endif
+*
+* This function is called to switch the UICC on or Off.
+*
+*
+* \param[in] psHwReference Hardware Reference, pre-initialized by
+* upper layer. \n
+*
+* \param[in] smx_mode Mode to which the switch should be made.
+*
+* \param[in] pSwitchModecb Callback for Switch mode complete
+* with success/error notification.
+*
+* \param[in] pContext Upper layer context.
+*
+* \retval NFCSTATUS_PENDING Switch in progress.Status will be
+* returned in pSwitchModecb.
+* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied
+* parameters could not be properly
+* interpreted.
+* \retval NFCSTATUS_NOT_INITIALIZED Hal is not initialized.
+* \retval NFCSTATUS_BUSY Configuration in Progress or
+* remote device is connected.
+* \retval NFCSTATUS_INSUFFICIENT_RESOURCES System resources are insufficient
+* to complete the request at that
+* point in time.
+* \retval NFCSTATUS_FAILED No listener has been registered
+* by the upper layer for Emulation
+* before making this call.
+* \retval Others Errors related to the lower
+* layers.
+*/
+extern NFCSTATUS phHal4Nfc_Switch_Swp_Mode(
+ phHal_sHwReference_t *psHwReference,
+ phHal_eSWP_Mode_t swp_mode,
+ pphHal4Nfc_GenCallback_t pSwitchModecb,
+ void *pContext
+ );
+
+#endif /* end of PHHAL4NFC_H */
+
+