/*
* 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 */