C++程序  |  2896行  |  144.07 KB

/*
 * 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  phLibNfc_1.1.h
*\brief Contains FRI1.1 API details.
*Project:   NFC-FRI 1.1
* $Workfile:: phLibNfc_1.1.h  $
* $Modtime::          $
* $Author: ing07385 $
* $Revision: 1.80 $
* $Aliases: NFC_FRI1.1_WK1014_SDK,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1019_SDK,NFC_FRI1.1_WK1024_SDK $
*\defgroup grp_lib_nfc LIBNFC Component
*/
/* \page LibNfc_release_label FRI1.1 API Release Label
* $Aliases: NFC_FRI1.1_WK1014_SDK,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1019_SDK,NFC_FRI1.1_WK1024_SDK $
*\note This is the TAG (label, alias) of the FRI1.1.
*If the string is empty, the current documentation
* has not been generated for official release.
*/
#ifndef PHLIBNFC_H
#define PHLIBNFC_H
#include <phNfcTypes.h>
#include <phLibNfcStatus.h>
#include <phFriNfc_NdefRecord.h>
#include <phNfcLlcpTypes.h>
#ifdef ANDROID
#include <string.h>
#endif
/*!
*\def PHLIBNFC_MAXNO_OF_SE
*Defines maximum no of secured elements supported by PN544.
*/
#define PHLIBNFC_MAXNO_OF_SE        (0x02)

typedef uint32_t    phLibNfc_Handle; 


/**
*\ingroup grp_lib_nfc
*   
*\brief Defines Testmode Init configuration values 
*/

typedef enum
{
    phLibNfc_TstMode_Off = 0x00,      /**< Test mode is off  */
    phLibNfc_TstMode_On               /**< Testmode is on */

} phLibNfc_Cfg_Testmode_t;


/**
*\ingroup grp_lib_nfc
*   
*\brief Defines Secure Element configurable states 
*/

typedef enum
{
    phLibNfc_SE_Active = 0x00,      /**< state of the SE is active  */
    phLibNfc_SE_Inactive= 0x01      /**< state of the SE is In active*/

} phLibNfc_SE_State_t;

/**
*\ingroup grp_lib_nfc
*
*\brief Defines Secure Element types.
*/
typedef enum
{
    phLibNfc_SE_Type_Invalid=0x00,/**< Indicates SE type is Invalid */
    phLibNfc_SE_Type_SmartMX=0x01,/**< Indicates SE type is SmartMX */
    phLibNfc_SE_Type_UICC   =0x02,/**<Indicates SE type is   UICC */
    phLibNfc_SE_Type_Unknown=0x03/**< Indicates SE type is Unknown */
}phLibNfc_SE_Type_t;

/**
*\ingroup grp_lib_nfc
*
*\brief Defines  Ndef Card Offset.
*/
typedef enum 
{
    phLibNfc_Ndef_EBegin = 0x01,      /**<  Start from Beginning position */
    phLibNfc_Ndef_ECurrent            /**<  Start from Current position */

} phLibNfc_Ndef_EOffset_t;

/**
* \ingroup grp_lib_nfc
*
*\brief This function allows to activate specific Secure element.

*\b VirtualMode: Virtual mode is used to communicated with secure elements from external reader.
*                This mode is also called as card emulation mode.when secure element mode is set
*                to this mode,external reader can communicate with this SE.
*
*\b WiredMode:   Wired mode is used to communicate with the Secure Element internally.  
*                No RF field is generated. In this mode, PN544 acts as reader and discovers 
*                SmartMX as MIFARE tag.External reader cannot access any of the SE's in this mode.
*                This mode is applicable to only SmartMX secure element.
*
*/
typedef enum
{
    phLibNfc_SE_ActModeWired=0x00,      /**< Enables Wired Mode communication.This mode shall
                                        be applied to */
    phLibNfc_SE_ActModeDefault = 0x01,    /**< Enables Virtual Mode communication.
                                        This can be applied to UICC as well as SmartMX*/
    phLibNfc_SE_ActModeVirtual=0x02,    /**< Enables Virtual Mode communication.
                                        This can be applied to UICC as well as SmartMX*/
    phLibNfc_SE_ActModeOff  =0x03       /**< Inactivate SE.This means,put SE in in-active state */

}phLibNfc_eSE_ActivationMode;

/**
* \ingroup grp_lib_nfc
*
*\brief Defines SE low power mode types.
*/
typedef enum
{
    phLibNfc_SE_LowPowerMode_Off= 0x01, /**< Indicates no SE to be selected in low power mode */
    phLibNfc_SE_LowPowerMode_On = 0x02  /**< Indicates requested SE to be  selected in low power mode */ 

} phLibNfc_SE_LowPowerMode_t;

/**
* \ingroup grp_lib_nfc
*
*\brief Defines Secure element event info .
*/
typedef union phLibNfc_uSeEvtInfo
{
   phNfc_sUiccInfo_t UiccEvtInfo;	/**< Indicates UICC event info for Evt_Transaction event */
}phLibNfc_uSeEvtInfo_t;

/**
* \ingroup grp_lib_nfc
*
*\brief Types of SE transaction events sent to SE notification handler .
*/
typedef enum
{
    phLibNfc_eSE_EvtStartTransaction=0x00,   /**< Indicates  transaction started on 
                                            secure element */
    phLibNfc_eSE_EvtEndTransaction=0x01,      /**<Indicates  transaction ended on    secure
                                             element*/
    phLibNfc_eSE_EvtTypeTransaction=0x02,   /**<Indicates external reader trying to access secure element */ 
                                                                                       
    phLibNfc_eSE_EvtConnectivity           /**<This event notifies the terminal host that it shall
                                           send a connectivity event from UICC as defined in 
                                           ETSI TS 102 622 V7.4.0 */                                                                                       
} phLibNfc_eSE_EvtType_t;

/**
* \ingroup grp_lib_nfc
*
*\brief Defines possible registration details for notifications.
*/
typedef phNfc_sSupProtocol_t    phLibNfc_Registry_Info_t;

/**
* \ingroup grp_lib_nfc
*
*\brief  Generic Data buffer definition.
*/
typedef phNfc_sData_t phLibNfc_Data_t;
/**
* \ingroup grp_lib_nfc
*
* Application Identifier (phLibNfc_AID)
*
* The application identifier defines a specific application on a SE.
*
*/
typedef phNfc_sData_t   phLibNfc_AID;
/**
* \ingroup grp_lib_nfc
*
*\brief Remote Device Info definition  .
*/
typedef phNfc_sRemoteDevInformation_t   phLibNfc_sRemoteDevInformation_t; 
/**
* \ingroup grp_lib_nfc
*/
typedef phNfc_eDiscoveryConfigMode_t    phLibNfc_eDiscoveryConfigMode_t;

/**
* \ingroup grp_lib_nfc
*
*\brief Transceive info definition.
*/
typedef phNfc_sTransceiveInfo_t         phLibNfc_sTransceiveInfo_t;
/**
* \ingroup grp_lib_nfc
*
*\brief Automatic Device Discovery Definition. 
*/
typedef phNfc_sADD_Cfg_t            phLibNfc_sADD_Cfg_t;
/**
*\ingroup grp_lib_nfc
*
*\brief Release mode definition. 
*/
typedef phNfc_eReleaseType_t        phLibNfc_eReleaseType_t;

/**
*\ingroup grp_lib_nfc
*
*\brief device capabilities details.
*/
typedef phNfc_sDeviceCapabilities_t phLibNfc_sDeviceCapabilities_t;

/**
* \ingroup grp_lib_nfc
*
*\brief Defines supported tag types for NDEF mapping and formatting feature.
*/
typedef struct SupportedTagInfo
{
    unsigned MifareUL:1;  /**<TRUE indicates  specified feature (mapping or formatting)for MIFARE UL tag supported else  not supported.*/
    unsigned MifareStd:1;  /**<TRUE indicates  specified feature (mapping or formatting)for Mifare Std tag supported else  not supported.*/
    unsigned MifareULC:1;  /**<TRUE indicates  specified feature (mapping or formatting)for MIFARE UL2 tag supported else  not supported.*/
    unsigned ISO14443_4A:1;  /**<TRUE indicates  specified feature (mapping or formatting)for ISO14443_4A tag supported else  not supported.*/
    unsigned ISO14443_4B:1;  /**<TRUE indicates  specified feature (mapping or formatting)for ISO14443_4B tag supported else  not supported.*/
    unsigned ISO15693:1;  /**<TRUE indicates  specified feature (mapping or formatting)for ISO15693 tag supported else  not supported.*/
    unsigned FeliCa:1;  /**<TRUE indicates  specified feature (mapping or formatting)for FeliCa tag  supported else  not supported.*/
    unsigned Jewel:1;  /**<TRUE indicates  specified feature (mapping or formatting)for JEWEL tag supported else  not supported.*/
    unsigned Desfire:1;  /**<TRUE indicates  specified feature (mapping or formatting)for desfire tag supported else  not supported.*/

}phLibNfc_sSupportedTagInfo_t;


/**
* \ingroup grp_lib_nfc
*
*\brief Defines supported tag types for NDEF mapping feature.
*/
typedef phLibNfc_sSupportedTagInfo_t  phLibNfc_sNDEFMappingInfo_t;

/**
* \ingroup grp_lib_nfc
*
*\brief Defines supported tag types for NDEF formatting feature.
*/

typedef phLibNfc_sSupportedTagInfo_t  phLibNfc_sTagFormattingInfo_t; 

/**
* \ingroup grp_lib_nfc
*
*\brief Stack capabilities details contains device capabilities and supported tags for NDEF mapping and formatting feature.
*/

typedef struct StackCapabilities
{ 
    phLibNfc_sDeviceCapabilities_t      psDevCapabilities;
    phLibNfc_sNDEFMappingInfo_t         psMappingCapabilities;
    phLibNfc_sTagFormattingInfo_t       psFormatCapabilities;
}phLibNfc_StackCapabilities_t;


/**
* \ingroup grp_lib_nfc
*
*\brief Defines Secure Element list type.
*/
typedef struct phLibNfc_SecureElementInfo
{
    phLibNfc_Handle         hSecureElement; /**< handle to Secure Element */
    phLibNfc_SE_Type_t      eSE_Type;       /**< type of Secure Element(SE)*/
    phLibNfc_SE_State_t     eSE_CurrentState;/**< state of the secure element indicates activated or not*/
} phLibNfc_SE_List_t;

/**
* \ingroup grp_lib_nfc
*
*\brief Defines target specific info obtained during device discovery.
*/
typedef struct phLibNfc_RemoteDev
{
    phLibNfc_Handle                   hTargetDev;       /**< discovered Target handle */
    phLibNfc_sRemoteDevInformation_t* psRemoteDevInfo;  /**< discovered Target details */

}phLibNfc_RemoteDevList_t;

typedef  phNfc_sNfcIPCfg_t      phLibNfc_sNfcIPCfg_t;

/**
*\ingroup grp_lib_nfc 
*\brief  NDEF registration structure definition.
*/
typedef struct phLibNfc_Ndef_SrchType
{
    uint8_t Tnf;        /**<  Type Name Format of this NDEF record */
    uint8_t *Type;      /**<  Type field of this NDEF record */
    uint8_t TypeLength; /**<  Length of the Type field of this NDEF record */
} phLibNfc_Ndef_SrchType_t;

/**
*\ingroup grp_lib_nfc 
* \brief NDEF information structure definition. \n 
*/
typedef struct phLibNfc_Ndef_Info
{
    uint32_t                NdefMessageLengthActual;   /**<  Actual length of the NDEF message  */
    uint32_t                NdefMessageLengthMaximum;  /**<  Maximum length of the NDEF message */
    uint8_t                 *pNdefMessage;             /**<  Pointer to raw NDEF Data buffer    */
    uint32_t                NdefRecordCount;           /**<  Number of NDEF records pointed by pNdefRecord */
    phFriNfc_NdefRecord_t   *pNdefRecord;              /**<  Pointer to the NDEF Records contained within the NDEF message */
    
} phLibNfc_Ndef_Info_t;


/**
* \ingroup grp_lib_nfc
*
*\brief Ndef Information Structure.
*/
typedef struct phLibNfc_ChkNdef_Info
{
    uint32_t  ActualNdefMsgLength;              /**< Indicates Actual length of NDEF Message in Tag */
    uint32_t  MaxNdefMsgLength;                 /**< Indicates Maximum Ndef Message length that Tag can hold*/ 
} phLibNfc_ChkNdef_Info_t;

/**
*\ingroup grp_lib_nfc
*
*\brief LLCP link status. Refer to \ref phFriNfc_LlcpMac_eLinkStatus_t
*
*/
typedef phFriNfc_LlcpMac_eLinkStatus_t phLibNfc_Llcp_eLinkStatus_t;

typedef  phFriNfc_Llcp_sLinkParameters_t  phLibNfc_Llcp_sLinkParameters_t;

typedef phFriNfc_LlcpTransport_eSocketType_t phLibNfc_Llcp_eSocketType_t;

typedef phFriNfc_LlcpTransport_sSocketOptions_t phLibNfc_Llcp_sSocketOptions_t;

/**
* \ingroup grp_lib_nfc
*
*\brief Response callback for connect request.
*
* Callback type used to indicate a Connect request Successful or Failure indication to 
* LibNfc client.
*
* \param[in] pContext           Context passed in the connect request before.
* \param[in] hRemoteDev         Handle to remote device on which connect was requested. 
* \param[in] psRemoteDevInfo    contains updated remote device details.For few tags
*                               like ISO-14443A  details like historical bytes gets updated 
*                               only after connecting to target.Once connect is successful
*                               \b psRemoteDevInfo gets updated.
*
* \param[in] status             Status of the response  callback.
*
*                  \param NFCSTATUS_SUCCESS          Connect operation successful.
*                  \param NFCSTATUS_TARGET_LOST Connect operation failed because target is lost.
*                  \param NFCSTATUS_SHUTDOWN    Shutdown in progress.
*
*/

typedef void (*pphLibNfc_ConnectCallback_t) (void*		pContext,
                                phLibNfc_Handle			hRemoteDev,
                                phLibNfc_sRemoteDevInformation_t* psRemoteDevInfo,
                                NFCSTATUS				Status
                                );

/**
* \ingroup grp_lib_nfc
*
*\brief Response callback for disconnect request.
*
* Callback type used to provide a disconnect Success or Failure indication to 
* LibNfc client.
*
* \param[in] pContext       Context passed in the disconnect request before.
* \param[in] hRemoteDev     Handle to remote device on which disconnect is requested.   
* \param[in] status         Status of the response  callback.
*
*                  \param NFCSTATUS_SUCCESS          Disconnect operation successful.
*                  \param NFCSTATUS_SHUTDOWN    Shutdown in progress.
*
*/
typedef void (*pphLibNfc_DisconnectCallback_t)(void*                pContext,
                                               phLibNfc_Handle      hRemoteDev,
                                               NFCSTATUS            Status
                                              );
/**
* \ingroup grp_lib_nfc
*
*\brief Response callback for IOCTL request.
*
* Callback type to inform success or failure of the Ioctl request 
* made by LibNfc client. It may optionally contain response data
* depending on the Ioctl command type issued.

*
* \param[in] pContext           Context passed in the connect request before.
* \param[in] status             Status of the response  callback.
*
*                  \param NFCSTATUS_SUCCESS          Ioctl operation successful.
*                  \param NFCSTATUS_TARGET_LOST Ioctl operation failed because target is lost.
*                  \param NFCSTATUS_SHUTDOWN    Ioctl operation failed because Shutdown in progress.
*
*\param[in,out]     pOutParam       contains Ioctl command specific response buffer and size 
*                                   of the buffer.This buffer address will be same as 
*                                   pOutParam sent in \ref phLibNfc_Mgt_IoCtl.
*
*/


typedef void (*pphLibNfc_IoctlCallback_t)   (void*          pContext,                                        
                                             phNfc_sData_t* pOutParam,
                                             NFCSTATUS      Status
                                             );



/**
* \ingroup grp_lib_nfc
*
*\brief Response callback for Transceive request.
*
* This callback type is used to provide received data and it's size to the 
* LibNfc client in \ref phNfc_sData_t format ,when  LibNfc client has performed 
* a Transceive operation on a tag or when the device acts as an Initiator during a 
* P2P transactions.
*
* \param[in] pContext       LibNfc client context   passed in the corresponding request before.
* \param[in] hRemoteDev     Handle to remote device on transceive is performed.     
* \param[in] pResBuffer     Response buffer of type \ref phNfc_sData_t.
* \param[in] status         Status of the response  callback.
*
*           \param NFCSTATUS_SUCCESS                 Transceive operation  successful.
*           \param NFCSTATUS_TARGET_LOST        Transceive operation failed because target is lost.
*           \param NFCSTATUS_SHUTDOWN           Transceive operation failed because Shutdown in progress.
*           \param NFCSTATUS_ABORTED            Aborted due to disconnect request in between.
*
*/
typedef void (*pphLibNfc_TransceiveCallback_t)( void*               pContext,
                                                phLibNfc_Handle     hRemoteDev,
                                                phNfc_sData_t*      pResBuffer,
                                                NFCSTATUS			Status
                                              );

/**
* \ingroup grp_lib_nfc
*
* \brief  Generic Response Callback definition.
*
* Generic callback definition used as callback type in few APIs below.
*
* \note : Status and error codes for this type of callback are documented in respective APIs 
* wherever it is used.
*
* \param[in] pContext       LibNfc client context   passed in the corresponding request
*                           before.
* \param[in] status         Status of the response  callback.
*/
typedef void(*pphLibNfc_RspCb_t) (void* pContext,NFCSTATUS  Status);
/**
* \ingroup grp_lib_nfc
*
* \brief  Check NDEF Callback definition.
*
* This call back is used by check ndef api.
*
* \note : Status and error codes for this type of callback are documented in API 
*
* \param[in] pContext       LibNfc client context   passed in the corresponding request
*                           before.
* \param[in] Ndef_Info      Ndef message length and the container size.
* \param[in] status         Status of the response  callback.
*/
typedef void(*pphLibNfc_ChkNdefRspCb_t)(void*           pContext,
                                phLibNfc_ChkNdef_Info_t Ndef_Info,
                                NFCSTATUS               Status);


/**
* \ingroup grp_lib_nfc
* \brief  Notification handler callback definition.
*
*This callback type is used to provide information on discovered targets to LibNfcClient.
*Discovered targets will be notified in \ref phLibNfc_RemoteDevList_t format.
*In case multiple targets discovered ,remote device list contains these targets one after another.
*
*\note List will be exported as memory block,based on \b uNofRemoteDev
*      parameter application has to access remote devices accordingly.
*
*\b Ex: Multiple targets discovered  can be referred as phLibNfc_RemoteDevList_t[0]
*and phLibNfc_RemoteDevList_t[1].
*
*Subsequent operations on discovered target shall be performed using  target specific handle
*\b hTargetDev.
*
* \param[in] pContext       Client context passed in the corresponding 
*                           request before.The context is handled by client 
*                           only.
*
* \param[in] psRemoteDevList Remote Device list contains discovered target details.
*                            Refer to \ref phLibNfc_RemoteDevList_t .
*                            List size depends on no of remote devices discovered.
*
* \param[in] uNofRemoteDev   Indicates no of remote devices discovered .
*                            In case more than one target discovered,\b psRemoteDevList contains 
*                            multiple target details.   
*
* \param[in] Status Status  of the response callback.
*
*                   \param NFCSTATUS_SUCCESS                 Discovered single target successfully.
*                   \param NFCSTATUS_MULTIPLE_TARGETS   multiple targets found.
*                   \param NFCSTATUS_MULTI_PROTOCOLS    Target found supports multiple protocols.
*                   \param NFCSTATUS_SHUTDOWN           Registration  failed because shutdown in progress.
*                   \param NFCSTATUS_DESELECTED         initiator issued disconnect or intiator 
*                                                       physically removed from the RF field.
*
*\note: multiple tag detection is possible only within same technology but not across 
*       different technologies. 
*/
typedef void (*phLibNfc_NtfRegister_RspCb_t)(
    void*                           pContext,
    phLibNfc_RemoteDevList_t*       psRemoteDevList,
    uint8_t                         uNofRemoteDev,
    NFCSTATUS                       Status
    );
  
/**
* \ingroup grp_lib_nfc
* \brief Response Callback for secure element mode settings.
*
* This callback type is used to provide information on requested secure element is
* activated or not to LibNfcClient. 
*
* \param[in] pContext LibNfc client context     passed in the activation request.
*
* \param[in] hSecureElement     Handle to secure element.
*
* \param[in] Status             Indicates API status.
*           \param NFCSTATUS_SUCCESS    Secure element  activated successfully.
*           \param NFCSTATUS_SHUTDOWN   Activation failed because shutdown in progress.
*           \param NFCSTATUS_FAILED     Activation failed.
*
*/
typedef void(*pphLibNfc_SE_SetModeRspCb_t)(
                                            void*            pContext,
                                            phLibNfc_Handle  hSecureElement,
                                            NFCSTATUS        Status                                          
                                           );
/**
* \ingroup grp_lib_nfc 
* \brief Notification callback for \ref phLibNfc_SE_NtfRegister().
*
* A function of this type is called when external reader tries to access SE.
*
*\param[in] pContext        LibNfc client context passed in the SE notification register request.
*                           The context is Handled by client only.
* \param[in] EventType          Event type of secure element transaction
* \param[in] hSecureElement     handle to Secures Element.
*
*\param[in] pAppID              Application identifier to be accessed on SE .
*                               Sent when available from SE otherwise empty.
*
*\param[in] Status      Indicates API status.
*       \param NFCSTATUS_SUCCESS         Notification handler registered sucessfully.
*       \param NFCSTATUS_SHUTDOWN   Shutdown in progress.
*       \param NFCSTATUS_FAILED     set mode operation failed.
*
*
*/
typedef void (*pphLibNfc_SE_NotificationCb_t) (void*                        pContext,
                                               phLibNfc_eSE_EvtType_t       EventType,
                                               phLibNfc_Handle              hSecureElement,
                                               phLibNfc_uSeEvtInfo_t*       pSeEvtInfo,
                                               NFCSTATUS                    Status
                                               );


/**
*\ingroup grp_lib_nfc
*\brief Receive callback definition.
*
* This callback type is used to provide received data and it's size to the 
* LibNfc client in \ref phNfc_sData_t format ,when  LibNfc client has performed 
* when the device acts as a Target during P2P communication 
*
* \param[in] pContext                   LibNfc client context   passed in the corresponding 
*                                       request before.
* \param[in] pRecvBufferInfo            Response buffer of type \ref phNfc_sData_t.
* \param[in] status                     Status of the response  callback.
*
*           \param NFCSTATUS_SUCCESS         Receive operation  successful.
*           \param NFCSTATUS_SHUTDOWN   Receive operation failed because
*                                       Shutdown in progress.
*           \param NFCSTATUS_ABORTED    Aborted due to initiator issued disconnect request.
*                                       This status code reported,to indicate P2P session
*                                       closed and send and receive requests not allowed any more
*                                       unless new session is started.
*/
typedef void (*pphLibNfc_Receive_RspCb_t)(void*              pContext,                                    
                                          phNfc_sData_t*     pRecvBufferInfo,
                                          NFCSTATUS          status
                                          );
/**
*\ingroup grp_lib_nfc
*
* \brief NDEF Response callback definition
*
*  A function of this type is notified when registered NDEF type detected.
*
* \b Note :Once this type callback is notified,discovery wheel is stopped.
*In order to restart discovery process again it is important to disconnect
*from current tag.LibNfc client shall disconnect explicitly using 
*\ref phLibNfc_RemoteDev_Disconnect() interface.
*
*\param[in] pContext                    Pointer to context previously provided by the user
*\param[in] psNdefInfo                  All Ndef specific details of the remote device discovered.
*\param[in] hRemoteDevice               handle to remote device on which NDEF detection is done.
*
*\param[in] Status                      Indicates callback status.
*
*           \param NFCSTATUS_SUCCESS         Indicates registered tnf  type detected.            .
*           \param NFCSTATUS_SHUTDOWN   Indicates shutdown in progress.
*           \param NFCSTATUS_FAILED     status failed.
*           \param NFCSTATUS_ABORTED    Aborted due to disconnect operation in between.


*/
typedef void (*pphLibNfc_Ndef_Search_RspCb_t)   ( void*                  pContext, 
                                                phLibNfc_Ndef_Info_t*    psNdefInfo,
                                                phLibNfc_Handle          hRemoteDevice,
                                                NFCSTATUS                Status
                                                );   


/**
*\ingroup grp_lib_nfc
*
* \brief LLCP check response callback definition
*/
typedef void (*pphLibNfc_ChkLlcpRspCb_t) ( void*      pContext,
                                           NFCSTATUS  status
                                           );


/**
*\ingroup grp_lib_nfc
*
* \brief LLCP check response callback definition
*/
typedef void (*pphLibNfc_LlcpLinkStatusCb_t) ( void*                         pContext,
                                               phLibNfc_Llcp_eLinkStatus_t   eLinkStatus
                                               );


/**
*\ingroup grp_lib_nfc
*
* \brief LLCP socket error notification callback definition
*/
typedef void (*pphLibNfc_LlcpSocketErrCb_t) ( void*      pContext,
                                              uint8_t    nErrCode
                                              );

/**
*\ingroup grp_lib_nfc
*
* \brief Incoming connection on a listening LLCP socket callback definition
*/
typedef void (*pphLibNfc_LlcpSocketListenCb_t) ( void*            pContext,
                                                 phLibNfc_Handle  hIncomingSocket
                                                 );

/**
*\ingroup grp_lib_nfc
*
* \brief LLCP socket connect callback definition
*/
typedef void (*pphLibNfc_LlcpSocketConnectCb_t) ( void*        pContext,
                                                  uint8_t      nErrCode,
                                                  NFCSTATUS    status
                                                  );

/**
*\ingroup grp_lib_nfc
*
* \brief LLCP socket disconnect callback definition
*/
typedef void (*pphLibNfc_LlcpSocketDisconnectCb_t) ( void*        pContext,
                                                     NFCSTATUS    status
                                                     );

/**
*\ingroup grp_lib_nfc
*
* \brief LLCP socket Accept callback definition
*/
typedef void (*pphLibNfc_LlcpSocketAcceptCb_t) ( void*        pContext,
                                                 NFCSTATUS    status
                                                 );

/**
*\ingroup grp_lib_nfc
*
* \brief LLCP socket Reject callback definition
*/
typedef void (*pphLibNfc_LlcpSocketRejectCb_t) ( void*        pContext,
                                                 NFCSTATUS    status
                                                 );

/**
*\ingroup grp_lib_nfc
*
* \brief LLCP socket reception callback definition
*/
typedef void (*pphLibNfc_LlcpSocketRecvCb_t) ( void*     pContext,
                                               NFCSTATUS status
                                               );

/**
*\ingroup grp_lib_nfc
*
* \brief LLCP socket reception with SSAP callback definition
*/
typedef void (*pphLibNfc_LlcpSocketRecvFromCb_t) ( void*       pContext,
                                                   uint8_t     ssap,
                                                   NFCSTATUS   status
                                                   );

/**
*\ingroup grp_lib_nfc
*
* \brief LLCP socket emission callback definition
*/
typedef void (*pphLibNfc_LlcpSocketSendCb_t) ( void*        pContext,
                                               NFCSTATUS    status
                                               );


/*  FUNCTION PROTOTYPES  */
/**
 * \ingroup grp_lib_nfc
 *
 * \brief Driver configuration function
 * This synchronous function configures the given driver Interface and
 * sends the HANDLE to the caller.
 *
 * \param[in]       psConfig   Driver configuration details as provided
 *                             by the upper layer. 
 * \param[in,out]   ppDriverHandle     pointer to which valid Handle to driver
 *                             interface is assigned.
 *
 * \retval NFCSTATUS_SUCCESS                    Configuration happened successfully.
 * \retval NFCSTATUS_INVALID_PARAMETER          At least one parameter of the function
 *                                              is invalid.
 * \retval NFCSTATUS_FAILED                     Configuration failed(example.unable to
 *                                              open HW Interface).
 * \retval NFCSTATUS_INVALID_DEVICE             The device has not been opened or
 *                                              has been disconnected meanwhile
 * \retval NFCSTATUS_BOARD_COMMUNICATION_ERROR  A board communication error occurred
                                                (e.g. configuration went wrong).
 *\msc
*LibNfcClient,LibNfc;
*--- [label="Before initializing Nfc LIB,Configure Driver layer"];
*LibNfcClient=>LibNfc[label="phLibNfc_Mgt_ConfigureDriver()",URL="\ref   phLibNfc_Mgt_ConfigureDriver"];
*LibNfcClient<<LibNfc[label="NFCSTATUS_SUCCESS"];
 *\endmsc
 */
NFCSTATUS phLibNfc_Mgt_ConfigureDriver (pphLibNfc_sConfig_t     psConfig,
                                        void **                 ppDriverHandle
                                        );
 /**
 * \ingroup grp_lib_nfc
 *
 * \brief Release configuration for the given driver Interface.
 *
 * \copydoc page_reg Release all that has been 
 *      initialised in \b phLibNfc_Mgt_ConfigureDriver function (Synchronous function).
 *
 * \param[in] pDriverHandle            Link information of the hardware
 *
 * \retval NFCSTATUS_SUCCESS            Driver Configuration Released successfully.
 * \retval NFCSTATUS_FAILED             Configuration release failed(example: Unable to close Com port).
 *
 *\msc
 *LibNfcClient,LibNfc;
 *LibNfcClient=>LibNfc [label="phLibNfc_Mgt_ConfigureDriver()",URL="\ref phLibNfc_Mgt_ConfigureDriver"];
 *LibNfcClient<<LibNfc [label="NFCSTATUS_SUCCESS"];
 *LibNfcClient=>LibNfc [label="phLibNfc_Mgt_Initialize()",URL="\ref phLibNfc_Mgt_Initialize"];
 *LibNfcClient<<LibNfc [label="NFCSTATUS_PENDING"];
 *LibNfcClient<-LibNfc [label="pInitCb"]; 
 *--- [label="Perform feature operations "];
 *LibNfcClient=>LibNfc [label="phLibNfc_Mgt_DeInitialize()",URL="\ref   phLibNfc_Mgt_DeInitialize"];
 *LibNfcClient<<LibNfc [label="NFCSTATUS_PENDING"];
 *LibNfcClient<-LibNfc [label="pDeInitCb"]; 
 *LibNfcClient=>LibNfc [label="phLibNfc_Mgt_UnConfigureDriver()",URL="\ref phLibNfc_Mgt_UnConfigureDriver"];
 *LibNfcClient<<LibNfc [label="NFCSTATUS_SUCCESS"]; 
 *\endmsc
 */
NFCSTATUS phLibNfc_Mgt_UnConfigureDriver (void *                 pDriverHandle
                                          );

NFCSTATUS phLibNfc_HW_Reset (long level);

NFCSTATUS phLibNfc_Download_Mode (long level);

/**
* \ingroup grp_lib_nfc
*
* \brief Initializes the NFC library .
*
*
*\brief This function initializes NFC library and its underlying layers.
* As part of this interface underlying modules gets initialized.
* A session with NFC hardware will be established.
* Once initialization is successful ,NFC library ready for use.
*\note It is must to initialize prior usage of the stack .
*
* \param[in] pDriverHandle      Driver Handle currently application is using.
* \param[in] pInitCb            The init callback is called by the LibNfc when  init is
*                               completed or there is an error in initialization.
*
* \param[in] pContext           Client context which will   be included in
*                               callback when the request is completed.
*
* \retval NFCSTATUS_ALREADY_INITIALISED     Stack is already initialized.
* \retval NFCSTATUS_PENDING                 Init sequence   has been successfully
*                                           started and result will be  conveyed via 
*                                           callback notification.
* \retval NFCSTATUS_INVALID_PARAMETER       The parameter could not be  properly
*                                           interpreted.
*\retval NFCSTATUS_INSUFFICIENT_RESOURCES   Insufficient resource.(Ex: insufficient memory)
*
*\msc
*LibNfcClient,LibNfc;
*--- [label="Before initializing Nfc LIB,Configure Driver layer"];
*LibNfcClient=>LibNfc[label="phLibNfc_Mgt_ConfigureDriver()",URL="\ref   phLibNfc_Mgt_ConfigureDriver"];
*LibNfcClient<<LibNfc[label="NFCSTATUS_SUCCESS"];
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_Initialize()",URL="\ref phLibNfc_Mgt_Initialize"];
*LibNfcClient<<LibNfc   [label="NFCSTATUS_PENDING"];
*LibNfcClient<-LibNfc   [label="pInitCb"];
*\endmsc
*/
NFCSTATUS phLibNfc_Mgt_Initialize (void *                 pDriverHandle,
                                  pphLibNfc_RspCb_t       pInitCb,
                                  void*                   pContext
                                  );
/**
* \ingroup grp_lib_nfc
*
* \brief De-Initializes NFC library.
*
*
* This function de-initializes and closes the current session with  PN544 NFC hardware.
* All configurations and setups done until now are invalidated to restart
* communication. Resources currently used by stack gets released during De-initialization.
*\ref phLibNfc_Mgt_Initialize needs to be    called once stack is
* De-initialized before using the stack again.
*
* \param[in]    pHwHandle       Hardware context currently application is using.
*
* \param[in]    pDeInitCb       De-initialization callback  is called by the LibNfc when init
*                               completed or there is an error in initialization.
* \param[in]    pContext        Client context which will   be included in
*                               callback when the request is completed.
*
* \retval NFCSTATUS_SUCCESS     Device stack is already De-Initialized.
* \retval NFCSTATUS_PENDING     De-Initialization sequence has been successfully
*                               started and result is conveyed via callback 
*                               notification.
*
* \retval NFCSTATUS_INVALID_PARAMETER   The parameter could not be  properly 
*                                       interpreted.
* \retval  NFCSTATUS_NOT_INITIALISED    Indicates stack is not yet initialized.
* \retval  NFCSTATUS_BUSY               Previous request in progress can not accept new request.
* \retval  NFCSTATUS_FAILED             Request failed.

*
*
*\msc
*LibNfcClient,LibNfc;
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_Initialize()",URL="\ref phLibNfc_Mgt_Initialize"];
*LibNfcClient<<LibNfc   [label="NFCSTATUS_PENDING"];
*LibNfcClient<-LibNfc   [label="pInitCb"]; 
*--- [label="Perform feature operations "];
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_DeInitialize()",URL="\ref   phLibNfc_Mgt_DeInitialize"];
*LibNfcClient<<LibNfc   [label="NFCSTATUS_PENDING"];
*LibNfcClient<-LibNfc   [label="pDeInitCb"]; 
*\endmsc
*/
NFCSTATUS phLibNfc_Mgt_DeInitialize(void *                      pDriverHandle,
                                   pphLibNfc_RspCb_t            pDeInitCb,
                                   void*                        pContext
                                   );

/**
* \ingroup grp_lib_nfc
* \brief Get list of available Secure Elements.
*
* This  function retrieves list of secure elements locally connected.
* during LibNfc initialization these SEs enumerated from lower stack and maintained 
* in LibNfc library.Once libNfc client queries using this interface,
* same details exposed to LibNfc client. 
* LibNfc client  shall pass empty list of size \ref PHLIBNFC_MAXNO_OF_SE .
* Once SE list is available, libNfc client can perform operation on specific SE 
* using SE handle.
* The handle given in the \ref phLibNfc_SE_List_t structure stays valid until
* shutdown is called.  
*
*\note In case no SE's found, API still returns \ref NFCSTATUS_SUCCESS with \b uSE_count 
set to zero.Value zero indicates none of the SE's connected to PN544 hardware.

* \param[in,out] pSE_List       contains list of SEs with SE details in \ref phLibNfc_SE_List_t format.
* \param[in,out] uSE_count      contains no of SEs in the list.
*
*\note LibNfc client has to interpret no of secure elements in \b pSE_List   based on this
*count.
*
*\retval    NFCSTATUS_SUCCESS                  Indicates operation is sucessfull.
*\retval    NFCSTATUS_SHUTDOWN                 Operation failed because shutdown in progress.
*\retval    NFCSTATUS_NOT_INITIALISED          Operation failed because stack is not yet initialized.
* \retval   NFCSTATUS_INVALID_PARAMETER        One or more of the supplied parameters
*                                              could not be properly interpreted.
*
*\msc
*LibNfcClient,LibNfc;
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_Initialize()",URL="\ref phLibNfc_Mgt_Initialize"];
*LibNfcClient<<LibNfc   [label="NFCSTATUS_PENDING"];
*LibNfcClient<-LibNfc   [label="pInitCb"]; 
*--- [label="Now SE list can be retrieved"];
*\endmsc
*/

NFCSTATUS phLibNfc_SE_GetSecureElementList(phLibNfc_SE_List_t*  pSE_List,
                                           uint8_t*             uSE_count
                                           );


/**
* \ingroup grp_lib_nfc
*
*\brief Sets secure element mode.
*
* This  function configures SE to specific mode based on activation mode type.
* Effect of different modes on SE is as below.
*
*\b a)If mode is \ref phLibNfc_SE_ActModeVirtual then external reader can communicate
* with this SE.
*\note This mode is applicable to both UICC and SmartMX.
*
\b b)If mode is \ref phLibNfc_SE_ActModeWired then internal reader can communicate with
* this SE.In this mode PN544 can act as reader and communicate with SE as normal Tag.
*In this mode mode external reader ca not communicate with any of the SEs since RF filed is off.
*
*\note 1.Wired Mode is applicable to only SmartMX not to UICC.
* 2.When SmartMX SE configured in Wired Mode ,LibNfc client shall restart discovery process.
*   SmartMX gets detected as MIFARE tag.
* 3.To exit wired mode ,LibNfc client has to disconnect with release type as "NFC_SMARTMX_RELEASE".
*    
*
*\b c)If mode is \ref phLibNfc_SE_ActModeOff
*This means SE is off mode .It can not be accessed any more in wired or virtual mode. 
*internal reader any more.communicate with internal reader and only
*PN544 can communicate in reader mode and external reader can not 
*communicate with it.This mode is applicable  both SE types ( UICC and SmartMX)
*
* \param[in]  hSE_Handle            Secure  Element Handle .
* \param[in]  eActivation_mode      Indicates SE mode to be configured.
*                                    
*
*
* \param[in]  pphLibNfc_SE_setModeRspCb_t   pointer to response callback.
*
* \param[in]  pContext              Client context which will   be included in
*                                   callback when the request is completed.
*
*
* \retval   NFCSTATUS_PENDING               Activation transaction started.
* \retval   NFSCSTATUS_SHUTDOWN             Shutdown in progress.
* \retval   NFCSTATUS_NOT_INITIALISED       Indicates stack is not yet initialized.
* \retval   NFCSTATUS_INVALID_HANDLE        Invalid Handle.
* \retval   NFCSTATUS_INVALID_PARAMETER     One or more of the supplied parameters
*                                           could not be properly interpreted.
* \retval   NFCSTATUS_REJECTED              Invalid request.(Ex: If wired mode settings called using 
*                                           UICC SE handle ,this error code seen).
* \retval   NFCSTATUS_FAILED                Request failed.
*
*\msc
*LibNfcClient,LibNfc;
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_Initialize()",URL="\ref phLibNfc_Mgt_Initialize"];
*LibNfcClient<<LibNfc   [label="NFCSTATUS_PENDING"];
*LibNfcClient<-LibNfc   [label="pInitCb"];
*--- [label="Now query for available SE's"];
*LibNfcClient=>LibNfc   [label="phLibNfc_SE_GetSecureElementList()",URL="\ref phLibNfc_SE_GetSecureElementList"];
*LibNfcClient<<LibNfc   [label="NFCSTATUS_SUCCESS"];
*--- [label="Now configure specific SE"];
*LibNfcClient=>LibNfc   [label="phLibNfc_SE_SetMode(hSE_Handle,)",URL="\ref phLibNfc_SE_SetMode"];
*LibNfcClient<<LibNfc   [label="NFCSTATUS_PENDING"];
*LibNfcClient<-LibNfc   [label="pSE_SetMode_Rsp_cb"];
*\endmsc 
*/
NFCSTATUS phLibNfc_SE_SetMode ( phLibNfc_Handle             hSE_Handle, 
                               phLibNfc_eSE_ActivationMode  eActivation_mode,
                               pphLibNfc_SE_SetModeRspCb_t  pSE_SetMode_Rsp_cb,
                               void *                       pContext
                               );

/**
* \ingroup grp_lib_nfc
* \brief Registers notification handler to handle secure element specific events.
*
*  This function registers handler to report SE specific transaction events.
*  Possible different types of events are as defined in \ref phLibNfc_eSE_EvtType_t.

* \param[in]  pSE_NotificationCb    pointer to notification callback.
* \param[in]  pContext              Client context which will   be included in
*                                   callback when the request is completed.
*
*\retval  NFCSTATUS_SUCCESS                 Registration Sucessful.
*\retval  NFSCSTATUS_SHUTDOWN               Shutdown in progress.
*\retval  NFCSTATUS_NOT_INITIALISED         Indicates stack is not yet initialized.
*\retval  NFCSTATUS_INVALID_PARAMETER       One or more of the supplied parameters
*                                           could not be properly interpreted.
*\retval  NFCSTATUS_FAILED                  Request failed.
*
*
*\msc
*LibNfcClient,LibNfc;
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_Initialize()",URL="\ref phLibNfc_Mgt_Initialize"];
*LibNfcClient<<LibNfc   [label="NFCSTATUS_PENDING"];
*LibNfcClient<-LibNfc   [label="pInitCb"]; 
*--- [label="Perform feature operations "];
*
*LibNfcClient=>LibNfc   [label="phLibNfc_SE_NtfRegister()",URL="\ref    phLibNfc_SE_NtfRegister"];
LibNfcClient<<LibNfc    [label="NFCSTATUS_SUCCESS"];
*--- [label="Registration sucessfull"];
*
*--- [label="In case external reader performs transactions,callback is notified as shown below"];
*LibNfcClient<-LibNfc   [label="pSE_NotificationCb"]; 
*\endmsc
*/

NFCSTATUS phLibNfc_SE_NtfRegister   (pphLibNfc_SE_NotificationCb_t  pSE_NotificationCb,
                                     void   *                       pContext
                                     );
/**
* \ingroup grp_lib_nfc
*\brief This function unregister the registered listener for SE event.
* This function unregisters the listener which  has been registered with \ref 
* phLibNfc_SE_NtfRegister.
*
*\retval  NFCSTATUS_SUCCESS                 Unregistration successful.
*\retval  NFSCSTATUS_SHUTDOWN               Shutdown in progress.
*\retval  NFCSTATUS_NOT_INITIALISED         Indicates stack is not yet initialized.
*\retval  NFCSTATUS_FAILED                  Request failed.
*\msc
*LibNfcClient,LibNfc;
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_Initialize()",URL="\ref phLibNfc_Mgt_Initialize"];
*LibNfcClient<<LibNfc   [label="NFCSTATUS_PENDING"];
*LibNfcClient<-LibNfc   [label="pInitCb"]; 
*--- [label="Perform feature operations "];
*LibNfcClient=>LibNfc   [label="phLibNfc_SE_NtfRegister()",URL="\ref    phLibNfc_SE_NtfRegister"];
LibNfcClient<<LibNfc    [label="NFCSTATUS_SUCCESS"];
*--- [label="Registration sucessfull"];
*
*--- [label="In case external reader performs transactions,callback is notified as shown below"];
*
*LibNfcClient<-LibNfc   [label="pSE_NotificationCb"]; 
*--- [label="Unregister SE notification handler in case required "];
*LibNfcClient=>LibNfc   [label="phLibNfc_SE_NtfUnregister()",URL="\ref  phLibNfc_SE_NtfUnregister"];
*LibNfcClient<<LibNfc   [label="NFCSTATUS_SUCCESS"];

*\endmsc
*/
NFCSTATUS phLibNfc_SE_NtfUnregister(void);

/**
*\ingroup   grp_lib_nfc
* \brief IOCTL interface. 
*
* The I/O Control function allows   the caller to configure specific 
* functionality provided by the lower layer.Each feature is accessible via a    
* specific IOCTL Code.
*
* \param[in]        pDriverHandle      Interface handle.This parameter is valid only for firmware download feature.
*                                   for other IOCTL features this parameter is  not relevent.
*
* \param[in]        IoctlCode       Control code for the operation. 
*                                   This value identifies the specific 
*                                   operation to be performed.For more details on supported
*                                   IOCTL codes refer to \ref grp_lib_ioctl.
*\param[in,out]     pInParam        Pointer to any input data structure 
*                                   containing data which is interpreted 
*                                   based on IoCtl code and the length of 
*                                   the data.
*
*\param[in,out]     pOutParam       Pointer to output buffer details to hold 
*                                   Ioctl specific response buffer and size of
*                                   the buffer.This buffer will be updated and
*                                   sent back as part of of callback details.
*                                   
*\param[in]         pIoCtl_Rsp_cb   Response callback registered by the caller. 
*                                                                   
* \param[in]    pContext            Client context which will   be included in
*                                   callback when the request is completed.
*
*
*\retval    NFCSTATUS_PENDING           Update in pending state. RspCB will be
*                                       called later. 
*\retval    NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
*                                       could not be properly interpreted. 
*
\retval     NFCSTATUS_BUFFER_TOO_SMALL  The buffer supplied by the caller is to 
*\retval    NFSCSTATUS_SHUTDOWN         Shutdown in progress.
*\retval    NFCSTATUS_NOT_INITIALISED   Indicates stack is not yet initialized.
*\retval    NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
*                                       could not be properly interpreted.
*
*\msc
*LibNfcClient,LibNfc;
*--- [label="Firmware download Scenario"];

*--- [label="Intialise Driver"];
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_IoCtl(pDriverHandle,)",URL="\ref phLibNfc_Mgt_IoCtl"];
*LibNfcClient<<LibNfc   [label="NFCSTATUS_PENDING"];
*LibNfcClient<-LibNfc   [label="pIoCtl_Rsp_cb()",URL="\ref pphLibNfc_IoctlCallback_t"];
**--- [label="requested IoCtl processed sucessfully "];
*
*\endmsc
*/
NFCSTATUS phLibNfc_Mgt_IoCtl    (void*                      pDriverHandle,
                                 uint16_t                   IoctlCode,
                                 phNfc_sData_t*             pInParam, 
                                 phNfc_sData_t*             pOutParam,
                                 pphLibNfc_IoctlCallback_t  pIoCtl_Rsp_cb,
                                 void*                      pContext    
                                 );

/**
* \ingroup  grp_lib_nfc
* \brief    This interface registers notification handler for target discovery.
*
* This  function allows  libNfc client to register for notifications based technology 
* type it is interested to discover. In case application is interested in multiples technology
* discovery,it can enable respective bits in \b pRegistryInfo . when Registered type target
* is discovered in RF field ,LibNfc notifies registered notification callback.
*
* \note In case this API is called multiple times ,most recent request registry details will be used 
*for registration.
* 
*\param[in] pRegistryInfo           structure contains bitwise registry information.
*                                   Specific technology type discovery can be registered if 
*                                   corresponding bit is enabled.In case bit is disabled
*                                   it indicates specific technology type unregistered.
*
*\param[in] pNotificationHandler    Notification callback.This callback will
*                                   be notified once registered target is discovered.
* \param[in]    pContext            Client context which will   be included in
*                                   callback when the request is completed.
*
* \retval NFCSTATUS_SUCCESS             Indicates registration successful.
* \retval NFCSTATUS_INVALID_PARAMETER   One or more of the supplied parameters could
*                                       not be properly interpreted.
* \retval  NFCSTATUS_NOT_INITIALISED    Indicates stack is not yet initialized.
* \retval NFSCSTATUS_SHUTDOWN           Shutdown in progress.
*
*
*\msc
*LibNfcClient,LibNfc;
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_Initialize()",URL="\ref phLibNfc_Mgt_Initialize"];
*LibNfcClient<-LibNfc   [label="pInitCb()",URL="\ref pphLibNfc_RspCb_t()"];
*--- [label="Register for technology type.Ex: MIFARE UL"];
*LibNfcClient=>LibNfc   [label="phLibNfc_RemoteDev_NtfRegister()",URL="\ref phLibNfc_RemoteDev_NtfRegister"];
*LibNfcClient<<LibNfc   [label="NFCSTATUS_SUCCESS"];
*
*\endmsc
*/

NFCSTATUS   phLibNfc_RemoteDev_NtfRegister( 
                                        phLibNfc_Registry_Info_t*       pRegistryInfo,
                                        phLibNfc_NtfRegister_RspCb_t    pNotificationHandler,
                                        void*                           pContext
                                        );


/**
* \ingroup  grp_lib_nfc
* \brief Configure Discovery Modes.
*
*This function is used to configure ,start and stop the discovery wheel. 
*Configuration includes 
*<br><br>a)Enabling/disabling of Reader phases for A,B and F technologies.
*<br>b)Configuring NFC-IP1 Initiator Speed and duration of the Emulation phase .
*
*Discovery wheel configuration based on discovery mode selected is as below.
*<br><br>1.If discovery Mode is set as \ref NFC_DISCOVERY_CONFIG then  previous configurations 
* over written by new configurations passed in \ref phLibNfc_sADD_Cfg_t and Discovery wheel
*restarts with new configurations.
*<br><br>2.If discovery Mode is set as \ref NFC_DISCOVERY_START or \ref NFC_DISCOVERY_STOP then 
* discovery parameters passed in \ref phLibNfc_sADD_Cfg_t will not be considered and previous 
*configurations still holds good.
*<br><br>3.If discovery Mode is set as \ref NFC_DISCOVERY_RESUME discovery mode starts the discovery
*wheel from where it is stopped previously.
*
*\b Note: Config types \b NFC_DISCOVERY_START, \b NFC_DISCOVERY_STOP and \b NFC_DISCOVERY_RESUME
* are not supported currently. It is for future use.
*
* \param[in]    DiscoveryMode           Discovery Mode allows to choose between: 
*                                       discovery configuration and start, stop
*                                       discovery and start discovery (with last
*                                       set configuration).For  mode details refer  to 
\ref phNfc_eDiscoveryConfigMode_t. 
* \param[in]    sADDSetup               Includes Enable/Disable discovery for 
*                                       each protocol   A,B and F.
*                                       Details refer to \ref phNfc_sADD_Cfg_t.
* \param[in]    pConfigDiscovery_RspCb  is called once the discovery wheel 
*                                       configuration is    complete. 
* \param[in]    pContext                Client context which will   be included in
*                                       callback when the request is completed.
*             
*
*\retval NFCSTATUS_PENDING                  Discovery request is in progress and result 
*                                           will be notified via callback later.
*\retval NFCSTATUS_INVALID_PARAMETER        One or more of the supplied parameters 
*                                           could not be properly interpreted.
*\retval NFCSTATUS_NOT_INITIALISED          Indicates stack is not initialized.
*\retval NFCSTATUS_INSUFFICIENT_RESOURCES   Insufficient resource.(Ex: insufficient memory)
*\retval NFCSTATUS_BUSY                     already discovery in progress
*                                           or it is already discovered Target  and 
*                                           connected.
*\retval NFSCSTATUS_SHUTDOWN                Shutdown in progress.
*\retval NFCSTATUS_FAILED                   Request failed.

*
*   \note :     During Reader/Initiator mode it is mandatory
*               to call \ref phLibNfc_RemoteDev_Connect before any transaction can be performed
*               with the discovered target. Even if the LibNfc client is not
*               interested in using any of the discovered targets \ref phLibNfc_RemoteDev_Connect
*               and \ref phLibNfc_RemoteDev_Disconnect should be called to restart the Discovery 
*               wheel.
*   \sa \ref phLibNfc_RemoteDev_Connect, phLibNfc_RemoteDev_Disconnect.

*\msc
*LibNfcClient,LibNfc;
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_Initialize()",URL="\ref phLibNfc_Mgt_Initialize"];
*LibNfcClient<-LibNfc   [label="pInitCb()",URL="\ref pphLibNfc_RspCb_t()"];
*LibNfcClient=>LibNfc   [label="phLibNfc_RemoteDev_NtfRegister()",URL="\ref 
phLibNfc_RemoteDev_NtfRegister"];
*LibNfcClient<<LibNfc   [label="NFCSTATUS_SUCCESS"];
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_ConfigureDiscovery()",URL="\ref phLibNfc_Mgt_ConfigureDiscovery"];
*LibNfcClient<-LibNfc   [label="pConfigDiscovery_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*--- [label="Now discovery wheel configured as requested"];
*
*\endmsc
*
*\note Response callback parameters details for this interface are as listed below.
*
* \param[in] pContext   LibNfc client context   passed in the corresponding request before.
* \param[in] status     Status of the response  callback.
*
*               \param NFCSTATUS_SUCCESS Discovery   Configuration  successful.
*               \param NFCSTATUS_SHUTDOWN       Shutdown in progress.
*               \param NFCSTATUS_FAILED         Request failed.
*/

NFCSTATUS phLibNfc_Mgt_ConfigureDiscovery (phLibNfc_eDiscoveryConfigMode_t  DiscoveryMode,   
                                           phLibNfc_sADD_Cfg_t              sADDSetup,
                                           pphLibNfc_RspCb_t                pConfigDiscovery_RspCb,
                                           void*                            pContext
                                           );


/**
* \ingroup  grp_lib_nfc
* \brief This function is used to to connect to a single Remote Device.
*
* This function is called to connect to discovered target.
* Once notification handler notified sucessfully discovered targets will be available in
* \ref phLibNfc_RemoteDevList_t .Remote device list contains valid handles for discovered 
* targets .Using this interface LibNfc client can connect to one out of 'n' discovered targets.
* A new session is started after  connect operation is successful.The session ends with a
* successful disconnect operation.Connect operation on an already connected tag Reactivates 
* the Tag.This Feature is not Valid for Jewel/Topaz Tags ,and hence a second connect if issued
* without disconnecting a Jewel/Topaz tag always Fails.
*
* \note :In case multiple targets discovered LibNfc client can connect to only one target.
*
* \param[in]     hRemoteDevice       Handle of the target device obtained during discovery process.
*
* \param[in]    pNotifyConnect_RspCb Client response callback to be to be 
*                                    notified to indicate status of the request.
*
* \param[in]    pContext             Client context which will  be included in
*                                    callback when the request is completed.
*
*\retval NFCSTATUS_PENDING           Request initiated, result will be informed via
*                                    callback.
*\retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters 
*                                    could not be properly interpreted.
*\retval NFCSTATUS_TARGET_LOST       Indicates target is lost.
*\retval NFSCSTATUS_SHUTDOWN         shutdown in progress.
*\retval NFCSTATUS_NOT_INITIALISED   Indicates stack is not yet initialized.
*\retval NFCSTATUS_INVALID_HANDLE    Target handle is invalid.
*
*\retval NFCSTATUS_FAILED            Request failed.
*
*
*\msc
*LibNfcClient,LibNfc;
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_Initialize()",URL="\ref phLibNfc_Mgt_Initialize"];
*LibNfcClient<-LibNfc   [label="pInitCb()",URL="\ref pphLibNfc_RspCb_t()"];
*LibNfcClient=>LibNfc   [label="phLibNfc_RemoteDev_NtfRegister()",URL="\ref phLibNfc_RemoteDev_NtfRegister"];
*LibNfcClient<<LibNfc   [label="NFCSTATUS_SUCCESS"];
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_configureDiscovery()",URL="\ref phLibNfc_Mgt_ConfigureDiscovery"];
*LibNfcClient<-LibNfc   [label="pConfigDiscovery_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*--- [label="Now Present Tag to be  discovered"];
*LibNfcClient<-LibNfc [label="pNotificationHandler",URL="\ref phLibNfc_NtfRegister_RspCb_t"];
*LibNfcClient=>LibNfc [label="phLibNfc_RemoteDev_Connect()",URL="\ref phLibNfc_RemoteDev_Connect"];
*LibNfcClient<-LibNfc [label="pNotifyConnect_RspCb",URL="\ref pphLibNfc_ConnectCallback_t"];
*
*\endmsc
*/

NFCSTATUS phLibNfc_RemoteDev_Connect(phLibNfc_Handle                hRemoteDevice,
                                     pphLibNfc_ConnectCallback_t    pNotifyConnect_RspCb,
                                     void*                          pContext
                                     );

/**
* \ingroup  grp_lib_nfc
* \brief This interface allows to perform Read/write operation on remote device.
*
* This function allows to send data to and receive data 
* from the target selected by libNfc client.It is also used by the 
* NFCIP1 Initiator while performing a transaction with the NFCIP1 target.
* The LibNfc client  has to provide the handle of the target and the 
* command in order to communicate with the selected remote device.
*
*
*\param[in] hRemoteDevice       handle of the remote device.This handle to be 
*                               same as as handle obtained for specific remote device 
*                               during device discovery.
* \param[in] psTransceiveInfo   Information required by transceive  is concealed in 
*                               this structure.It   contains send,receive buffers 
*                               and command specific details.
*
*
* \param[in] pTransceive_RspCb   Callback function for returning the received response 
*                                or error.
* \param[in]    pContext         Client context which will  be included in
*                                callback when the request is completed.
*
* \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 or  invalid.
*   \retval NFCSTATUS_COMMAND_NOT_SUPPORTED The command is not supported.
*   \retval NFSCSTATUS_SHUTDOWN             shutdown in progress.
*   \retval NFCSTATUS_TARGET_LOST           Indicates target is lost.
*   \retval NFCSTATUS_TARGET_NOT_CONNECTED            The Remote Device is not connected.
*   \retval NFCSTATUS_INVALID_HANDLE        Target  handle is invalid
*   \retval NFCSTATUS_NOT_INITIALISED       Indicates stack is not yet initialized.
*   \retval NFCSTATUS_REJECTED              Indicates invalid request.
*   \retval NFCSTATUS_FAILED                Request failed.
*
*\msc
*LibNfcClient,LibNfc;
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_Initialize()",URL="\ref phLibNfc_Mgt_Initialize"];
*LibNfcClient<-LibNfc   [label="pInitCb()",URL="\ref pphLibNfc_RspCb_t()"];
*LibNfcClient=>LibNfc   [label="phLibNfc_RemoteDev_NtfRegister()",URL="\ref phLibNfc_RemoteDev_NtfRegister"];
*LibNfcClient<<LibNfc   [label="NFCSTATUS_SUCCESS"];
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_configureDiscovery()",URL="\ref phLibNfc_Mgt_ConfigureDiscovery"];
*LibNfcClient<-LibNfc   [label="pConfigDiscovery_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*--- [label="Now Present Tag to be  discovered"];
*LibNfcClient<-LibNfc [label="pNotificationHandler",URL="\ref phLibNfc_NtfRegister_RspCb_t"];
*LibNfcClient=>LibNfc [label="phLibNfc_RemoteDev_Connect()",URL="\ref phLibNfc_RemoteDev_Connect"];
*LibNfcClient<-LibNfc [label="pNotifyConnect_RspCb",URL="\ref pphLibNfc_ConnectCallback_t"];
*--- [label="Now perform transceive operation"];
*LibNfcClient=>LibNfc   [label="phLibNfc_RemoteDev_Transceive()",URL="\ref  phLibNfc_RemoteDev_Transceive "];
*LibNfcClient<-LibNfc   [label="pTransceive_RspCb",URL="\ref pphLibNfc_TransceiveCallback_t"];
*
*\endmsc
*/

NFCSTATUS phLibNfc_RemoteDev_Transceive(phLibNfc_Handle                 hRemoteDevice,
                                        phLibNfc_sTransceiveInfo_t*     psTransceiveInfo,
                                        pphLibNfc_TransceiveCallback_t  pTransceive_RspCb,
                                        void*                           pContext
                                        );

/**
*\ingroup   grp_lib_nfc
*\brief Allows to disconnect from already connected target.
*
*  The function allows to disconnect from from already connected target. This 
*  function closes the session opened during connect operation.The status of discovery 
*  wheel after disconnection is determined by the \ref phLibNfc_eReleaseType_t parameter. 
*  it is also used to switch from wired to virtual mode in case the discovered
*  device is SmartMX in wired mode. 
*
*\param[in]  hRemoteDevice              handle of the target device.This handle to be 
*                                       same as as handle obtained for specific remote device 
*                                       during device discovery.
* \param[in] ReleaseType                Release mode to be  used while 
*                                       disconnecting from target.Refer \ref phLibNfc_eReleaseType_t
*                                       for possible release types.
*\param[in] pDscntCallback              Client response callback to be  to be notified 
to indicate status of the request.
* \param[in]    pContext                Client context which will   be included in
*                                       callback when the request is completed.

*\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_TARGET_NOT_CONNECTED   The Remote Device is not connected.
*\retval    NFCSTATUS_NOT_INITIALISED        Indicates stack is not yet initialized.
* \retval   NFCSTATUS_INVALID_HANDLE         Target  handle is invalid.
*\retval    NFSCSTATUS_SHUTDOWN              Shutdown in progress.
*\retval    NFCSTATUS_REJECTED               Indicates previous disconnect in progress.
* \retval   NFCSTATUS_BUSY                   Indicates can not disconnect due to outstanding transaction in progress.
* \retval   NFCSTATUS_FAILED                 Request failed.

*
*
*
*\msc
*LibNfcClient,LibNfc;
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_Initialize()",URL="\ref phLibNfc_Mgt_Initialize"];
*LibNfcClient<-LibNfc   [label="pInitCb()",URL="\ref pphLibNfc_RspCb_t()"];
*LibNfcClient=>LibNfc   [label="phLibNfc_RemoteDev_NtfRegister()",URL="\ref phLibNfc_RemoteDev_NtfRegister"];
*LibNfcClient<<LibNfc   [label="NFCSTATUS_SUCCESS"];
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_configureDiscovery()",URL="\ref phLibNfc_Mgt_ConfigureDiscovery"];
*LibNfcClient<-LibNfc   [label="pConfigDiscovery_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*--- [label="Now Present Tag to be  discovered"];
*LibNfcClient<-LibNfc [label="pNotificationHandler",URL="\ref phLibNfc_NtfRegister_RspCb_t"];
*LibNfcClient=>LibNfc [label="phLibNfc_RemoteDev_Connect()",URL="\ref phLibNfc_RemoteDev_Connect"];
*LibNfcClient<-LibNfc [label="pNotifyConnect_RspCb",URL="\ref pphLibNfc_ConnectCallback_t"];
*LibNfcClient=>LibNfc   [label="phLibNfc_RemoteDev_Transceive()",URL="\ref  phLibNfc_RemoteDev_Transceive"];
*LibNfcClient<-LibNfc   [label="pTransceive_RspCb",URL="\ref pphLibNfc_TransceiveCallback_t"];
*--- [label="Once transceive is completed Now disconnect"];
*LibNfcClient=>LibNfc   [label="phLibNfc_RemoteDev_Disconnect()",URL="\ref  phLibNfc_RemoteDev_Disconnect"];
*LibNfcClient<-LibNfc   [label="pDscntCallback",URL="\ref pphLibNfc_RspCb_t"];
*
*\endmsc
*/
NFCSTATUS phLibNfc_RemoteDev_Disconnect( phLibNfc_Handle                 hRemoteDevice,
                                        phLibNfc_eReleaseType_t          ReleaseType,
                                        pphLibNfc_DisconnectCallback_t   pDscntCallback,
                                        void*                            pContext
										);



/**
* \ingroup  grp_lib_nfc
*\brief This interface unregisters notification handler for target discovery.
*
* This  function unregisters the listener which has been registered with
* phLibNfc_RemoteDev_NtfUnregister() before. After  this call the callback
* function  won't be called anymore. If nothing is  registered the 
* function  still succeeds
* \retval NFCSTATUS_SUCCESS          callback unregistered.
* \retval NFCSTATUS_SHUTDOWN         Shutdown in progress.
*\retval  NFCSTATUS_NOT_INITIALISED Indicates stack is not yet initialized.
*
*\msc
*LibNfcClient,LibNfc;
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_Initialize()",URL="\ref phLibNfc_Mgt_Initialize"];
*LibNfcClient<-LibNfc   [label="pInitCb()",URL="\ref pphLibNfc_RspCb_t()"];
*LibNfcClient=>LibNfc   [label="phLibNfc_RemoteDev_NtfRegister()",URL="\ref phLibNfc_RemoteDev_NtfRegister"];
*LibNfcClient<<LibNfc   [label="NFCSTATUS_SUCCESS"];
*--- [label="Perform operations"];
*--- [label="In case required unregister now"];
*LibNfcClient=>LibNfc   [label="phLibNfc_RemoteDev_NtfUnregister()",URL="\ref phLibNfc_RemoteDev_NtfUnregister"];
*
*\endmsc
*/

NFCSTATUS phLibNfc_RemoteDev_NtfUnregister(void);

/**
* \ingroup  grp_lib_nfc
* \brief Check  for target presence.
* This  function checks ,given target is present in RF filed or not.
* Client can make  use of this API to check  periodically discovered
* tag is present in RF field or not.
*
*
*\param[in]  hRemoteDevice          handle of the target device.This handle to be 
*                                   same as as handle obtained for specific remote device 
*                                   during device discovery.
* \param[in] pPresenceChk_RspCb     callback function called on completion  of the
*                                   presence check or in case an error has occurred.
* \param[in]    pContext            Client context which will   be included in
*                                   callback when the request is completed.
*
* \retval  NFCSTATUS_PENDING        presence check  started. Status will be notified
*                                   via callback.
*
* \retval  NFCSTATUS_NOT_INITIALISED        Indicates stack is not initialized.
* \retval  NFCSTATUS_INVALID_PARAMETER      One or more of the supplied parameters could
*                                           not be properly interpreted.
* \retval  NFCSTATUS_TARGET_NOT_CONNECTED   The Remote Device is not connected.
* \retval  NFCSTATUS_INVALID_HANDLE         Target  handle is invalid
* \retval  NFCSTATUS_SHUTDOWN               Shutdown in progress.
* \retval  NFCSTATUS_FAILED                 Request failed.
*
*
*\msc
*LibNfcClient,LibNfc;
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_Initialize()",URL="\ref phLibNfc_Mgt_Initialize"];
*LibNfcClient<-LibNfc   [label="pInitCb()",URL="\ref pphLibNfc_RspCb_t()"];
*LibNfcClient=>LibNfc   [label="phLibNfc_RemoteDev_NtfRegister()",URL="\ref phLibNfc_RemoteDev_NtfRegister"];
*LibNfcClient<<LibNfc   [label="NFCSTATUS_SUCCESS"];
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_configureDiscovery()",URL="\ref phLibNfc_Mgt_ConfigureDiscovery"];
*LibNfcClient<-LibNfc   [label="pConfigDiscovery_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*--- [label="Now Present Tag to be  discovered"];
*LibNfcClient<-LibNfc [label="pNotificationHandler",URL="\ref phLibNfc_NtfRegister_RspCb_t"];
*LibNfcClient=>LibNfc   [label="phLibNfc_RemoteDev_Connect()",URL="\ref phLibNfc_RemoteDev_Connect"];
*LibNfcClient<-LibNfc   [label="pNotifyConnect_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*LibNfcClient=>LibNfc   [label="phLibNfc_RemoteDev_CheckPresence()",URL="\ref phLibNfc_RemoteDev_CheckPresence"];
*LibNfcClient<-LibNfc   [label="pPresenceChk_RspCb",URL="\ref   pphLibNfc_RspCb_t"];
*
*\endmsc
*
*\note Response callback parameters details for this interface are as listed below.
*
* \param[in] pContext   LibNfc client context   passed in the corresponding request before.
* \param[in] status     Status of the response  callback.
*
*                  \param NFCSTATUS_SUCCESS          Successful,indicates tag is present in RF field.
*                  \param NFCSTATUS_TARGET_LOST Indicates target is lost.
*                  \param NFCSTATUS_SHUTDOWN    Shutdown in progress.
*                  \param NFCSTATUS_FAILED      Request failed.
*
*/
NFCSTATUS phLibNfc_RemoteDev_CheckPresence( phLibNfc_Handle     hRemoteDevice,
                                           pphLibNfc_RspCb_t    pPresenceChk_RspCb,
                                           void*                pContext
                                           );

/**
* \ingroup  grp_lib_nfc
*\brief Allows  to check connected tag is NDEF compliant or not.
* This function allows  to validate connected tag is NDEF compliant or  not.
*
*\param[in] hRemoteDevice       handle of the remote device.This handle to be 
*                               same as as handle obtained for specific remote device 
*                               during device discovery.
*\param[in] pCheckNdef_RspCb    Response callback defined by the caller.    
*\param[in] pContext            Client context which will   be included in
*                               callback when the request is completed.
*
* \retval NFCSTATUS_PENDING            The action has been successfully triggered.
* \retval NFCSTATUS_INVALID_PARAMETER  At least one parameter of the function 
*                                      is invalid.
* \retval NFCSTATUS_TARGET_LOST        Indicates target is lost
* \retval NFCSTATUS_TARGET_NOT_CONNECTED         The Remote Device is not connected.
* \retval NFCSTATUS_INVALID_HANDLE     Target   handle is invalid
* \retval NFCSTATUS_SHUTDOWN           Shutdown in progress.
* \retval  NFCSTATUS_FAILED            Request failed.
*
*
*\msc
*LibNfcClient,LibNfc;
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_Initialize()",URL="\ref phLibNfc_Mgt_Initialize"];
*LibNfcClient<-LibNfc   [label="pInitCb()",URL="\ref pphLibNfc_RspCb_t()"];
*LibNfcClient=>LibNfc   [label="phLibNfc_RemoteDev_NtfRegister()",URL="\ref phLibNfc_RemoteDev_NtfRegister"];
*LibNfcClient<<LibNfc   [label="NFCSTATUS_SUCCESS"];
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_configureDiscovery()",URL="\ref phLibNfc_Mgt_ConfigureDiscovery"];
*LibNfcClient<-LibNfc   [label="pConfigDiscovery_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*--- [label="Now Present NDEF complaint Tag Type"];
*LibNfcClient<-LibNfc [label="pNotificationHandler",URL="\ref phLibNfc_NtfRegister_RspCb_t"];
*LibNfcClient=>LibNfc   [label="phLibNfc_RemoteDev_Connect()",URL="\ref phLibNfc_RemoteDev_Connect"];
*LibNfcClient<-LibNfc   [label="pNotifyConnect_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*LibNfcClient=>LibNfc   [label="phLibNfc_Ndef_CheckNdef()",URL="\ref phLibNfc_Ndef_CheckNdef "];
*LibNfcClient<-LibNfc   [label="pCheckNdef_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*
*\endmsc
*
*\note Response callback parameters details for this interface are as listed below.
*
* \param[in] pContext   LibNfc client context   passed in the corresponding request before.
* \param[in] status     Status of the response  callback.
*
*                  \param NFCSTATUS_SUCCESS             Successful and tag is NDEF compliant .
*                  \param NFCSTATUS_TARGET_LOST         NDEF check operation is failed because of target is	**														lost.
*                  \param NFCSTATUS_SHUTDOWN            Shutdown in progress.
*                  \param NFCSTATUS_ABORTED             Aborted due to disconnect operation in between.
*                  \param NFCSTATUS_FAILED              Request failed.
*/

NFCSTATUS phLibNfc_Ndef_CheckNdef(phLibNfc_Handle              hRemoteDevice,
                                  pphLibNfc_ChkNdefRspCb_t     pCheckNdef_RspCb,
                                  void*                        pContext);

/**
* \ingroup  grp_lib_nfc
* \brief Read NDEF  message from a Tag.
* This  function reads an NDEF message from already connected tag. 
* the NDEF  message is read starting after the position of the last read operation 
* of the same tag during current session.
* If it's FALSE the NDEF message is read from starting  of the NDEF message.
* If the call returns with NFCSTATUS_PENDING , a response callback pNdefRead_RspCb is 
* called ,when the read operation is complete.
*
*\note Before issuing NDEF read operation LibNfc client should perform NDEF check operation
* using \ref phLibNfc_Ndef_CheckNdef interface.
* If the call back error code is NFCSTATUS_FAILED then the LIBNFC client has to do the 
* phLibNfc_RemoteDev_CheckPresence to find , its communication error or target lost.
*
*\param[in]  hRemoteDevice          handle of the remote device.This handle to be 
*                                   same as as handle obtained for specific remote device 
*                                   during device discovery.
*   \param[in]  psRd                Pointer to  the  read buffer info.
*   \param[in]  Offset              Reading Offset  : phLibNfc_Ndef_EBegin means from the 
*                                   beginning, phLibNfc_Ndef_ECurrent means from the 
*                                   current offset.     
*   \param[in]  pNdefRead_RspCb     Response callback defined by the caller. 
*   \param[in]  pContext            Client context which will   be included in
*                                   callback when the request is completed.
*
* \retval NFCSTATUS_SUCCESS             NDEF read operation successful.
* \retval NFCSTATUS_PENDING             Request accepted and started
* \retval NFCSTATUS_SHUTDOWN            Shutdown in progress
* \retval NFCSTATUS_INVALID_HANDLE      Target  handle is invalid
* \retval NFCSTATUS_NOT_INITIALISED     Indicates stack is not yet initialized.
* \retval NFCSTATUS_INVALID_PARAMETER   One or more of the supplied parameters could not 
*                                       be properly interpreted.
* \retval NFCSTATUS_TARGET_NOT_CONNECTED          The Remote Device is not connected. 
* \retval NFCSTATUS_FAILED              Read operation failed since tag does not contain NDEF data.
* \retval NFCSTATUS_NON_NDEF_COMPLIANT  Tag is not Ndef Compliant.
* \param NFCSTATUS_REJECTED             Rejected due to NDEF read issued on non 
*                                       ,or Ndef check has not been performed 
*                                       before the readNDEF tag.
*
*\msc
*LibNfcClient,LibNfc;
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_Initialize()",URL="\ref phLibNfc_Mgt_Initialize"];
*LibNfcClient<-LibNfc   [label="pInitCb()",URL="\ref pphLibNfc_RspCb_t()"];
*LibNfcClient=>LibNfc   [label="phLibNfc_RemoteDev_NtfRegister()",URL="\ref phLibNfc_RemoteDev_NtfRegister"];
*LibNfcClient<<LibNfc   [label="NFCSTATUS_SUCCESS"];
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_configureDiscovery()",URL="\ref phLibNfc_Mgt_ConfigureDiscovery"];
*LibNfcClient<-LibNfc   [label="pConfigDiscovery_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*--- [label="Now Present NDEF complaint Tag Type"];
*LibNfcClient<-LibNfc [label="pNotificationHandler",URL="\ref phLibNfc_NtfRegister_RspCb_t"];
*LibNfcClient=>LibNfc   [label="phLibNfc_RemoteDev_Connect()",URL="\ref phLibNfc_RemoteDev_Connect"];
*LibNfcClient<-LibNfc   [label="pNotifyConnect_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*LibNfcClient=>LibNfc   [label="phLibNfc_Ndef_CheckNdef()",URL="\ref phLibNfc_Ndef_CheckNdef "];
*LibNfcClient<-LibNfc   [label="pCheckNdef_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*LibNfcClient=>LibNfc   [label="phLibNfc_Ndef_Read()",URL="\ref phLibNfc_Ndef_Read "];
*LibNfcClient<-LibNfc   [label="pNdefRead_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*
*\endmsc
*
*\note Response callback parameters details for this interface are as listed below.
*
* \param[in] pContext   LibNfc client context   passed in the corresponding request before.
* \param[in] status     Status of the response  callback.
*
*                  \param NFCSTATUS_SUCCESS             NDEF read operation successful.
*                  \param NFCSTATUS_SHUTDOWN            Shutdown in progress.
*                  \param NFCSTATUS_ABORTED             Aborted due to disconnect operation in between.
*                  \param NFCSTATUS_FAILED              Request failed.
*/
NFCSTATUS phLibNfc_Ndef_Read(phLibNfc_Handle                   hRemoteDevice,
                            phNfc_sData_t*                     psRd,
                            phLibNfc_Ndef_EOffset_t            Offset,
                            pphLibNfc_RspCb_t                  pNdefRead_RspCb,
                            void*                              pContext
                            );
/**
**  \ingroup grp_lib_nfc
*
* \brief Write  NDEF data to  NFC tag.
*
* This function allows the client to write a NDEF data to already connected NFC tag.
* Function writes a complete NDEF   message to a tag. If a NDEF message already 
* exists in the tag, it will be overwritten. When the transaction is complete,
* a notification callback is notified.
*   
*\note Before issuing NDEF write operation LibNfc client should perform NDEF check operation
* using \ref phLibNfc_Ndef_CheckNdef interface.
*
*\param[in] hRemoteDevice           handle of the remote device.This handle to be 
*                                   same as as handle obtained for specific remote device 
*                                   during device discovery.
*\param[in] psWr                    Ndef    Buffer to write. If NdefMessageLen is set to 0 
*                                   and pNdefMessage    = NULL, the NFC library will erase
*                                   tag internally.
*\param[in] pNdefWrite_RspCb        Response callback defined by the caller. 
*\param[in] pContext                Client context which will   be included in
*                                   callback when the request is completed.
*
*\note If \ref phNfc_sData_t.NdefMessageLen is 0 bytes,  this function will erase all
*current NDEF data present in the tag. Any non-zero length buffer size
*will attempt to write  NEDF data onto the tag.
* If the call back error code is NFCSTATUS_FAILED then the LIBNFC client has to do the 
* phLibNfc_RemoteDev_CheckPresence to find , its communication error or target lost.
*
*
* \retval NFCSTATUS_PENDING             Request accepted and started.
* \retval NFCSTATUS_SHUTDOWN            Shutdown in progress.
* \retval NFCSTATUS_INVALID_HANDLE      Target  handle is invalid.
* \retval NFCSTATUS_NOT_INITIALISED     Indicates stack is not yet initialized.
* \retval NFCSTATUS_INVALID_PARAMETER   One or more of the supplied parameters could not 
*                                       be  properly interpreted.
* \retval NFCSTATUS_NON_NDEF_COMPLIANT  Tag is not Ndef Compliant.
* \retval NFCSTATUS_TARGET_NOT_CONNECTED            The Remote Device is not connected.                
* \retval NFCSTATUS_REJECTED            Rejected due to NDEF write issued without 
*                                       performing a CheckNdef().
* \retval NFCSTATUS_FAILED              operation failed.
*
*\msc
*LibNfcClient,LibNfc;
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_Initialize()",URL="\ref phLibNfc_Mgt_Initialize"];
*LibNfcClient<-LibNfc   [label="pInitCb()",URL="\ref pphLibNfc_RspCb_t()"];
*LibNfcClient=>LibNfc   [label="phLibNfc_RemoteDev_NtfRegister()",URL="\ref phLibNfc_RemoteDev_NtfRegister"];
*LibNfcClient<<LibNfc   [label="NFCSTATUS_SUCCESS"];
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_configureDiscovery()",URL="\ref phLibNfc_Mgt_ConfigureDiscovery"];
*LibNfcClient<-LibNfc   [label="pConfigDiscovery_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*--- [label="Now Present NDEF Tag "];
*LibNfcClient<-LibNfc [label="pNotificationHandler",URL="\ref phLibNfc_NtfRegister_RspCb_t"];
*LibNfcClient=>LibNfc   [label="phLibNfc_RemoteDev_Connect()",URL="\ref phLibNfc_RemoteDev_Connect"];
*LibNfcClient<-LibNfc   [label="pNotifyConnect_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*LibNfcClient=>LibNfc   [label="phLibNfc_Ndef_CheckNdef()",URL="\ref phLibNfc_Ndef_CheckNdef "];
*LibNfcClient<-LibNfc   [label="pCheckNdef_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*LibNfcClient=>LibNfc   [label="phLibNfc_Ndef_Write()",URL="\ref phLibNfc_Ndef_Write "];
*LibNfcClient<-LibNfc   [label="pNdefWrite_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*
*\endmsc
*
*\note Response callback parameters details for this interface are as listed below.
*
* \param[in] pContext   LibNfc client context   passed in the corresponding request before.
* \param[in] status     Status of the response  callback.
*
*                  \param NFCSTATUS_SUCCESS                  NDEF write operation is successful.
*                  \param NFCSTATUS_SHUTDOWN            Shutdown in progress.
*                  \param NFCSTATUS_ABORTED,            Aborted due to disconnect operation in between.
*                  \param NFCSTATUS_NOT_ENOUGH_MEMORY   Requested no of bytes to be writen exceeds size of the memory available on the tag.
*                  \param NFCSTATUS_FAILED              Request failed.
*/

NFCSTATUS phLibNfc_Ndef_Write (phLibNfc_Handle          hRemoteDevice,
                               phNfc_sData_t*           psWr,
                               pphLibNfc_RspCb_t        pNdefWrite_RspCb,
                               void*                    pContext
                               );



/**
* \ingroup grp_lib_nfc
*
* \brief Format target.
*
* This function allows the LibNfc client to perform  NDEF formating operation on discovered target.
This function formats given target 
*
*\note 
* <br>1. Prior to formating it is recommended to perform NDEF check using \ref phLibNfc_Ndef_CheckNdef interface.
* <br>2. formatting feature supported only for MIFARE Std,MIFARE UL and Desfire tag types.
* If the call back error code is NFCSTATUS_FAILED then the LIBNFC client has to do the 
* phLibNfc_RemoteDev_CheckPresence to find , its communication error or target lost.
*
*\param[in]  hRemoteDevice          handle of the remote device.This handle to be 
*                                   same as as handle obtained for specific remote device 
*                                   during device discovery.
*\param[in] pScrtKey                info containing the secret key data
*                                   and  Secret key buffer length. 
*
*\param[in] pNdefformat_RspCb       Response    callback defined by the caller. 
*\param[in] pContext                Client context which will   be included in
*                                   callback when the request is completed.
*
*
* \retval NFCSTATUS_PENDING                 Request accepted and started.
* \retval NFCSTATUS_SHUTDOWN                Shutdown in progress.
* \retval NFCSTATUS_INVALID_HANDLE          Target  handle is invalid.
* \retval NFCSTATUS_NOT_INITIALISED         Indicates stack is not yet initialized.
* \retval NFCSTATUS_INVALID_PARAMETER       One or more of the supplied parameters could not 
*                                           be  properly interpreted.
* \retval NFCSTATUS_TARGET_NOT_CONNECTED    The Remote Device is not connected. 
* \retval NFCSTATUS_FAILED                  operation failed.
* \retval NFCSTATUS_REJECTED                Tag is already  formatted one.
*
*\msc
*LibNfcClient,LibNfc;
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_Initialize()",URL="\ref phLibNfc_Mgt_Initialize"];
*LibNfcClient<-LibNfc   [label="pInitCb()",URL="\ref pphLibNfc_RspCb_t()"];
*LibNfcClient=>LibNfc   [label="phLibNfc_RemoteDev_NtfRegister()",URL="\ref phLibNfc_RemoteDev_NtfRegister"];
*LibNfcClient<<LibNfc   [label="NFCSTATUS_SUCCESS"];
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_configureDiscovery()",URL="\ref phLibNfc_Mgt_ConfigureDiscovery"];
*LibNfcClient<-LibNfc   [label="pConfigDiscovery_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*--- [label="Now Present non NDEF Tag "];
*LibNfcClient<-LibNfc [label="pNotificationHandler",URL="\ref phLibNfc_NtfRegister_RspCb_t"];
*LibNfcClient=>LibNfc   [label="phLibNfc_RemoteDev_Connect()",URL="\ref phLibNfc_RemoteDev_Connect"];
*LibNfcClient<-LibNfc   [label="pNotifyConnect_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*LibNfcClient=>LibNfc   [label="phLibNfc_Ndef_CheckNdef()",URL="\ref phLibNfc_Ndef_CheckNdef "];
*LibNfcClient<-LibNfc   [label="pCheckNdef_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*--- [label="Tag found to be non NDEF compliant ,now format it"];
*LibNfcClient=>LibNfc   [label="phLibNfc_RemoteDev_FormatNdef()",URL="\ref  phLibNfc_RemoteDev_FormatNdef   "];
*LibNfcClient<-LibNfc   [label="pNdefformat_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*
*\endmsc
*
*\note Response callback parameters details for this interface are as listed below.
*
* \param[in] pContext   LibNfc client context   passed in the corresponding request before.
* \param[in] status     Status of the response  callback.
*
*                  \param NFCSTATUS_SUCCESS                  NDEF formatting operation is successful.
*                  \param NFCSTATUS_SHUTDOWN            Shutdown in progress.
*                  \param NFCSTATUS_ABORTED,            Aborted due to disconnect operation in between.
*                  \param NFCSTATUS_FAILED              Request failed.
*/

NFCSTATUS phLibNfc_RemoteDev_FormatNdef(phLibNfc_Handle         hRemoteDevice,
                                        phNfc_sData_t*          pScrtKey,  
                                        pphLibNfc_RspCb_t       pNdefformat_RspCb,
                                        void*                   pContext
                                        );

/**
* \ingroup grp_lib_nfc
* \brief <b>Search for NDEF Record type</b>.
*  
*  This function allows  LibNfc client to search NDEF content based on TNF value and type \n
*
*This API allows to find NDEF records based on  RTD (Record Type Descriptor) info.
*LibNfc internally parses NDEF content based registration type registered.
*In case there is match LibNfc notifies LibNfc client with NDEF information details.
*LibNfc client can search a new NDEF registration type once the previous call is handled.
*
*\param[in]     hRemoteDevice       Handle of the remote device.This handle to be 
*                                   same as as handle obtained for specific remote device 
*                                   during device discovery.
*\param[in]     psSrchTypeList      List of NDEF records to be looked in based on TNF value and type.
*                                   For NDEF search type refer to \ref phLibNfc_Ndef_SrchType.
*                                   If this set to NULL then it means that libNfc client interested in
*                                   all possible NDEF records.
*
*\param[in]     uNoSrchRecords      Indicates no of NDEF records in requested list as mentioned 
*                                   in psSrchTypeList.
*\param[in]     pNdefNtfRspCb       Response callback defined by the caller.    
*\param[in]     pContext            Client context which will   be included in
*                                   callback when callback is notified.
*
*
* \retval NFCSTATUS_SUCCESS             Indicates NDEF notification registration successful.
* \retval NFCSTATUS_SHUTDOWN            Shutdown in progress.
* \retval  NFCSTATUS_NOT_INITIALISED    Indicates stack is not yet initialized.
* \retval NFCSTATUS_INVALID_HANDLE      Target  handle is invalid.
* \retval NFCSTATUS_INVALID_PARAMETER   One or more of the supplied parameters could not 
*                                       be  properly interpreted.
* \retval NFCSTATUS_TARGET_NOT_CONNECTED          The Remote Device is not connected. 
* \retval NFCSTATUS_FAILED              operation failed.
* \retval NFCSTATUS_BUSY                Previous request in progress can not accept new request.   
*
* \retval NFCSTATUS_ABORTED             Aborted due to disconnect request in between.
*\msc
*LibNfcClient,LibNfc;
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_Initialize()",URL="\ref phLibNfc_Mgt_Initialize"];
*LibNfcClient<-LibNfc   [label="pInitCb()",URL="\ref pphLibNfc_RspCb_t()"];
*LibNfcClient=>LibNfc   [label="phLibNfc_RemoteDev_NtfRegister()",URL="\ref phLibNfc_RemoteDev_NtfRegister"];
*LibNfcClient<<LibNfc   [label="NFCSTATUS_SUCCESS"];
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_configureDiscovery()",URL="\ref phLibNfc_Mgt_ConfigureDiscovery"];
*LibNfcClient<-LibNfc   [label="pConfigDiscovery_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*--- [label="Now Present NDEF Tag "];
*LibNfcClient<-LibNfc [label="pNotificationHandler",URL="\ref phLibNfc_NtfRegister_RspCb_t"];
*LibNfcClient=>LibNfc   [label="phLibNfc_RemoteDev_Connect()",URL="\ref phLibNfc_RemoteDev_Connect"];
*LibNfcClient<-LibNfc   [label="pNotifyConnect_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*LibNfcClient=>LibNfc   [label="phLibNfc_Ndef_CheckNdef()",URL="\ref phLibNfc_Ndef_CheckNdef "];
*LibNfcClient<-LibNfc   [label="pCheckNdef_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*LibNfcClient=>LibNfc   [label="phLibNfc_Ndef_SearchNdefContent()",URL="\ref phLibNfc_Ndef_SearchNdefContent"];
*LibNfcClient<-LibNfc   [label="pNdefNtfRspCb",URL="\ref pphLibNfc_Ndef_Search_RspCb_t()"];
*\endmsc
*
*\note Response callback parameters details for this interface are as listed below.
*
* \param[in] pContext   LibNfc client context   passed in the corresponding request before.
* \param[in] status     Status of the response  callback.
*
*/
NFCSTATUS phLibNfc_Ndef_SearchNdefContent(  
                                phLibNfc_Handle                 hRemoteDevice,
                                phLibNfc_Ndef_SrchType_t*       psSrchTypeList,  
                                uint8_t                         uNoSrchRecords,
                                pphLibNfc_Ndef_Search_RspCb_t   pNdefNtfRspCb,  
                                void *                          pContext   
                                );




/**
* \ingroup grp_lib_nfc
* \brief <b> Interface used to receive data from initiator at target side during P2P communication</b>.
*
*This function  Allows the NFC-IP1 target to retrieve data/commands coming from the 
*Initiator.Once this function is called by LibNfc client on target side it waits for 
*receiving data from initiator.It is used by libNfc client which acts as target during P2P
*communication.
*
*\note : Once this API is called,its mandatory to wait for receive 
*\ref pphLibNfc_Receive_RspCb_t callback notification,before calling any other 
*API.Only function allowed is \ref phLibNfc_Mgt_DeInitialize.
*
*  \param[in]     hRemoteDevice         Peer handle obtained during device discovery process.
*                                       
*  \param[in]     pReceiveRspCb         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 operation is in progress.
*  \retval NFCSTATUS_INVALID_PARAMETER  One or more of the supplied parameters
*                                       could not be properly interpreted.
* \retval  NFCSTATUS_NOT_INITIALISED    Indicates stack is not yet initialized.
* \retval  NFCSTATUS_SHUTDOWN           Shutdown in progress.
* \retval  NFCSTATUS_INVALID_DEVICE     The device has been disconnected meanwhile.
* \retval  NFCSTATUS_DESELECTED         Receive operation is not possible due to
*                                       initiator issued disconnect or intiator 
*                                       physically removed from the RF field.
*
*\retval   NFCSTATUS_REJECTED           Indicates invalid request.
*\retval   NFCSTATUS_FAILED             Request failed.
*
*\msc 
*P2PInitiatorClient,InitiatorLibNfc,P2PTargetLibNfc,P2PTargetClient;
*--- [label="stack is intialised and P2P notification handler registered alredy"];
*P2PTargetClient=>P2PTargetLibNfc   [label="phLibNfc_Mgt_SetP2P_ConfigParams()",URL="\ref    phLibNfc_Mgt_SetP2P_ConfigParams"];
*P2PTargetClient<<P2PTargetLibNfc   [label="NFCSTATUS_PENDING"];
*P2PTargetClient<-P2PTargetLibNfc   [label="pConfigRspCb()",URL="\ref pphLibNfc_RspCb_t"];
*P2PInitiatorClient=>InitiatorLibNfc    [label="phLibNfc_Mgt_SetP2P_ConfigParams()",URL="\ref    phLibNfc_Mgt_SetP2P_ConfigParams"];
*P2PInitiatorClient<<InitiatorLibNfc    [label="NFCSTATUS_PENDING"];
*P2PInitiatorClient<-InitiatorLibNfc    [label="pConfigRspCb()",URL="\ref pphLibNfc_RspCb_t"];
*P2PTargetClient=>P2PTargetLibNfc [label="phLibNfc_Mgt_ConfigureDiscovery()",URL="\ref  phLibNfc_Mgt_ConfigureDiscovery"];
*P2PTargetClient<<P2PTargetLibNfc   [label="NFCSTATUS_PENDING"]; 
*P2PTargetClient<-P2PTargetLibNfc   [label="pConfigDiscovery_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*P2PInitiatorClient=>InitiatorLibNfc    [label="phLibNfc_Mgt_ConfigureDiscovery()",URL="\ref    phLibNfc_Mgt_ConfigureDiscovery"];
*P2PInitiatorClient<<InitiatorLibNfc    [label="NFCSTATUS_PENDING"];
*P2PInitiatorClient<-InitiatorLibNfc    [label="pConfigDiscovery_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*--- [label="Place Initiator and target closely"];
*P2PInitiatorClient<-InitiatorLibNfc    [label="pNotificationHandler",URL="\ref phLibNfc_NtfRegister_RspCb_t"];
*P2PInitiatorClient=>InitiatorLibNfc    [label="phLibNfc_RemoteDev_Connect()",URL="\ref phLibNfc_RemoteDev_Connect"];
*P2PInitiatorClient<<InitiatorLibNfc    [label="NFCSTATUS_PENDING"];
*P2PInitiatorClient<-InitiatorLibNfc    [label="pNotifyConnect_RspCb",URL="\ref pphLibNfc_ConnectCallback_t"];
*P2PTargetClient<-P2PTargetLibNfc   [label="pNotificationHandler",URL="\ref phLibNfc_NtfRegister_RspCb_t"];
*--- [label="On connect target must be immediately ready to receive data from initiator"];
*P2PTargetClient=>P2PTargetLibNfc   [label="phLibNfc_RemoteDev_Receive()",URL="\ref phLibNfc_RemoteDev_Receive"];
*--- [label="Now target waits to receive data from intiator"];
*--- [label="Send data from initiator now"]; 
*P2PInitiatorClient=>InitiatorLibNfc   [label="phLibNfc_RemoteDev_Transceive()",URL="\ref  phLibNfc_RemoteDev_Transceive "];
*P2PInitiatorClient<-InitiatorLibNfc   [label="pTransceive_RspCb",URL="\ref pphLibNfc_TransceiveCallback_t"];
*--- [label="Now data arrived at target side"];
*P2PTargetClient<-P2PTargetLibNfc   [label="pReceiveRspCb",URL="\ref    pphLibNfc_Receive_RspCb_t"];
\endmsc
*\note Response callback parameters details for this interface are as listed below.
*
* \param[in] pContext   LibNfc client context   passed in the corresponding request before.
* \param[in] status     Status of the response  callback.
*
*           \param NFCSTATUS_SUCCESS             Receive operation  successful.
*           \param NFCSTATUS_SHUTDOWN       Receive operation failed because Shutdown in progress.
*           \param NFCSTATUS_ABORTED        Aborted due to initiator issued disconnect request.
*                                           or intiator removed physically from the RF field.
*                                           This status code reported,to indicate P2P session
*                                           closed and send and receive requests not allowed 
*                                           any more unless new session is started.
*           \param  NFCSTATUS_DESELECTED    Receive operation is not possible due to
*                                           initiator issued disconnect or intiator 
*                                           physically removed from the RF field.
*/
extern 
NFCSTATUS 
phLibNfc_RemoteDev_Receive( phLibNfc_Handle            hRemoteDevice,
                           pphLibNfc_Receive_RspCb_t   pReceiveRspCb,
                           void*                       pContext
                           );





/**
* \ingroup grp_lib_nfc
* \brief <b>Interface used to send data from target to initiator during P2P communication</b>.
*
*This function  Allows the NFC-IP1 target to send data to Initiator,in response to packet received 
*from initiator during P2P communication.It is must prior to send request target has received 
*data from initiator using \ref phLibNfc_RemoteDev_Receive interface.
*
*
*  \param[in]     hRemoteDevice        Peer handle obtained during device discovery process.
*
*  \param[in]     pTransferData         Data and the length of the data to be 
*                                       transferred.
*  \param[in]     pSendRspCb            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 operation is in progress.
*  \retval NFCSTATUS_INVALID_PARAMETER  One or more of the supplied parameters
*                                       could not be properly interpreted.
* \retval  NFCSTATUS_NOT_INITIALISED    Indicates stack is not yet initialized.
* \retval  NFCSTATUS_SHUTDOWN           Shutdown in progress.
*  \retval NFCSTATUS_INVALID_DEVICE     The device has been disconnected meanwhile.
* \retval  NFCSTATUS_BUSY               Previous request in progress can not accept new request.   
* \retval  NFCSTATUS_DESELECTED         Receive operation is not possible due to
*                                       initiator issued disconnect or intiator 
*                                       physically removed from the RF field.
*\retval   NFCSTATUS_REJECTED           Indicates invalid request.
*\retval   NFCSTATUS_FAILED             Request failed.
*
*\msc 
*P2PInitiatorClient,InitiatorLibNfc,P2PTargetLibNfc,P2PTargetClient;
*--- [label="stack is intialised and P2P notification handler registered alredy"];
*P2PTargetClient=>P2PTargetLibNfc   [label="phLibNfc_Mgt_SetP2P_ConfigParams()",URL="\ref    phLibNfc_Mgt_SetP2P_ConfigParams"];
*P2PTargetClient<<P2PTargetLibNfc   [label="NFCSTATUS_PENDING"];
*P2PTargetClient<-P2PTargetLibNfc   [label="pConfigRspCb()",URL="\ref pphLibNfc_RspCb_t"];
*P2PInitiatorClient=>InitiatorLibNfc    [label="phLibNfc_Mgt_SetP2P_ConfigParams()",URL="\ref    phLibNfc_Mgt_SetP2P_ConfigParams"];
*P2PInitiatorClient<<InitiatorLibNfc    [label="NFCSTATUS_PENDING"];
*P2PInitiatorClient<-InitiatorLibNfc    [label="pConfigRspCb()",URL="\ref pphLibNfc_RspCb_t"];
*P2PTargetClient=>P2PTargetLibNfc [label="phLibNfc_Mgt_ConfigureDiscovery()",URL="\ref  phLibNfc_Mgt_ConfigureDiscovery"];
*P2PTargetClient<<P2PTargetLibNfc   [label="NFCSTATUS_PENDING"]; 
*P2PTargetClient<-P2PTargetLibNfc   [label="pConfigDiscovery_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*P2PInitiatorClient=>InitiatorLibNfc    [label="phLibNfc_Mgt_ConfigureDiscovery()",URL="\ref    phLibNfc_Mgt_ConfigureDiscovery"];
*P2PInitiatorClient<<InitiatorLibNfc    [label="NFCSTATUS_PENDING"];
*P2PInitiatorClient<-InitiatorLibNfc    [label="pConfigDiscovery_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*--- [label="Place Initiator and target closely"];
*P2PInitiatorClient<-InitiatorLibNfc    [label="pNotificationHandler",URL="\ref phLibNfc_NtfRegister_RspCb_t"];
*P2PInitiatorClient=>InitiatorLibNfc    [label="phLibNfc_RemoteDev_Connect()",URL="\ref phLibNfc_RemoteDev_Connect"];
*P2PInitiatorClient<<InitiatorLibNfc    [label="NFCSTATUS_PENDING"];
*P2PInitiatorClient<-InitiatorLibNfc    [label="pNotifyConnect_RspCb",URL="\ref pphLibNfc_ConnectCallback_t"];
*P2PTargetClient<-P2PTargetLibNfc   [label="pNotificationHandler",URL="\ref phLibNfc_NtfRegister_RspCb_t"];
*--- [label="On connect target must be immediately ready to receive data from initiator"];
*P2PTargetClient=>P2PTargetLibNfc   [label="phLibNfc_RemoteDev_Receive()",URL="\ref phLibNfc_RemoteDev_Receive"];
*--- [label="Now target waits to receive data from intiator"];
*--- [label="Send data from initiator now"]; 
*P2PInitiatorClient=>InitiatorLibNfc   [label="phLibNfc_RemoteDev_Transceive()",URL="\ref  phLibNfc_RemoteDev_Transceive "];
*--- [label="Now data arrived at target side"];
*P2PTargetClient<-P2PTargetLibNfc   [label="pReceiveRspCb",URL="\ref    pphLibNfc_Receive_RspCb_t"];
*--- [label="Now send data from target"];
*P2PTargetClient=>P2PTargetLibNfc   [label="phLibNfc_RemoteDev_Send()",URL="\ref    phLibNfc_RemoteDev_Send"];
*P2PInitiatorClient<-InitiatorLibNfc   [label="pTransceive_RspCb",URL="\ref pphLibNfc_TransceiveCallback_t"];
*P2PTargetClient<-P2PTargetLibNfc   [label="pSendRspCb",URL="\ref   pphLibNfc_RspCb_t"];
*\endmsc
*
*\note Response callback parameters details for this interface are as listed below.
*
* \param[in] pContext   LibNfc client context   passed in the corresponding request before.
* \param[in] status     Status of the response  callback.
*
*           \param NFCSTATUS_SUCCESS             Send operation  successful.
*           \param NFCSTATUS_SHUTDOWN       Send operation failed because Shutdown in progress.
*           \param NFCSTATUS_ABORTED        Aborted due to initiator issued disconnect request.
*                                           or intiator removed physically from the RF field.
*                                           This status code reported,to indicate P2P session
*                                           closed and send and receive requests not allowed 
*                                           any more unless new session is started.
*           \param  NFCSTATUS_DESELECTED    Receive operation is not possible due to
*                                           initiator issued disconnect or intiator 
*                                           physically removed from the RF field.
*
*
*/
extern 
NFCSTATUS 
phLibNfc_RemoteDev_Send(phLibNfc_Handle             hRemoteDevice,
                        phNfc_sData_t*              pTransferData,
                        pphLibNfc_RspCb_t           pSendRspCb,
                        void*                       pContext
                        );

/**
* \ingroup grp_lib_nfc
* \brief <b>Interface to configure P2P and intiator mode configurations</b>.
*  The  setting will be 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 Currently general bytes configuration supported.
*
*  \param[in] pConfigInfo           Union containing P2P configuration details as
*                                   in \ref phLibNfc_sNfcIPCfg_t.
*
*  \param[in] pConfigRspCb          This callback has to be called once LibNfc 
*                                   completes the Configuration.
*
*  \param[in] pContext              Upper layer context to be returned in 
*                                   the callback.
*
*
* \retval NFCSTATUS_PENDING             Config operation is in progress.
* \retval NFCSTATUS_INVALID_PARAMETER   One or more of the supplied parameters
*                                       could not be properly interpreted.
* \retval  NFCSTATUS_NOT_INITIALISED    Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN            Shutdown in progress.
* \retval NFCSTATUS_BUSY                Previous request in progress can not accept new request.   
*
*\msc 
*P2PInitiatorClient,InitiatorLibNfc,P2PTargetLibNfc,P2PTargetClient;
*--- [label="stack is intialised and P2P notification handler registered alredy"];
*P2PTargetClient=>P2PTargetLibNfc   [label="phLibNfc_Mgt_SetP2P_ConfigParams()",URL="\ref    phLibNfc_Mgt_SetP2P_ConfigParams"];
*P2PTargetClient<<P2PTargetLibNfc   [label="NFCSTATUS_PENDING"];
*P2PTargetClient<-P2PTargetLibNfc   [label="pConfigRspCb()",URL="\ref pphLibNfc_RspCb_t"];
*P2PInitiatorClient=>InitiatorLibNfc    [label="phLibNfc_Mgt_SetP2P_ConfigParams()",URL="\ref    phLibNfc_Mgt_SetP2P_ConfigParams"];
*P2PInitiatorClient<<InitiatorLibNfc    [label="NFCSTATUS_PENDING"];
*P2PTargetClient=>P2PTargetLibNfc [label="phLibNfc_Mgt_ConfigureDiscovery()",URL="\ref  phLibNfc_Mgt_ConfigureDiscovery"];
*P2PTargetClient<<P2PTargetLibNfc   [label="NFCSTATUS_PENDING"]; 
*P2PTargetClient<-P2PTargetLibNfc   [label="pConfigDiscovery_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*P2PInitiatorClient=>InitiatorLibNfc    [label="phLibNfc_Mgt_ConfigureDiscovery()",URL="\ref    phLibNfc_Mgt_ConfigureDiscovery"];
*P2PInitiatorClient<<InitiatorLibNfc    [label="NFCSTATUS_PENDING"];
*P2PInitiatorClient<-InitiatorLibNfc    [label="pConfigDiscovery_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*--- [label="Place Initiator and target closely"];
*P2PInitiatorClient<-InitiatorLibNfc    [label="pNotificationHandler",URL="\ref phLibNfc_NtfRegister_RspCb_t"];
*P2PInitiatorClient=>InitiatorLibNfc    [label="phLibNfc_RemoteDev_Connect()",URL="\ref phLibNfc_RemoteDev_Connect"];
*P2PInitiatorClient<<InitiatorLibNfc    [label="NFCSTATUS_PENDING"];
*P2PInitiatorClient<-InitiatorLibNfc    [label="pNotifyConnect_RspCb",URL="\ref pphLibNfc_ConnectCallback_t"];
*P2PTargetClient<-P2PTargetLibNfc   [label="pNotificationHandler",URL="\ref phLibNfc_NtfRegister_RspCb_t"];
*--- [label="Now configured params ( Ex : general bytes can been seen in remote device info"];
*\endmsc
*
*\note Response callback parameters details for this interface are as listed below.
*
* \param[in] pContext   LibNfc client context   passed in the corresponding request before.
* \param[in] status     Status of the response  callback.
*
*                  \param NFCSTATUS_SUCCESS                  configuration operation is successful.
*                  \param NFCSTATUS_SHUTDOWN            Shutdown in progress.
*                  \param NFCSTATUS_FAILED              Request failed.
*
*/
extern NFCSTATUS phLibNfc_Mgt_SetP2P_ConfigParams(   phLibNfc_sNfcIPCfg_t*   pConfigInfo,
                                                    pphLibNfc_RspCb_t       pConfigRspCb,
                                                    void*                   pContext
                                                );

/**
* \ingroup grp_lib_nfc
* \brief <b>Interface to stack capabilities</b>.
*
*  LibNfc client can query to retrieve stack capabilities.Stack capabilities contains
*  <br><br>a).Device capabilities which contains details like protocols supported, 
*  Hardware,Firmware  and model-id version details .For details refer to \ref phNfc_sDeviceCapabilities_t.
* <br><br>b).NDEF mapping related info. This info helps in identifying supported tags for NDEF mapping feature.
* <br><br>c).NDEF formatting related info. This info helps in identifying supported tags for NDEF formatting feature.
*
*  \param[in] phLibNfc_StackCapabilities   Contains device capabilities and NDEF mapping and formatting feature
                                           support for different tag types.
*
*  \param[in] pContext                     Upper layer context to be returned in 
*                                          the callback.
*
*
* \retval NFCSTATUS_SUCCESS               Indicates Get stack Capabilities operation successful.
* \retval NFCSTATUS_INVALID_PARAMETER     One or more of the supplied parameters
*                                         could not be properly interpreted.
* \retval NFCSTATUS_NOT_INITIALISED       Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN              Shutdown in progress.
* \retval NFCSTATUS_FAILED                operation failed.
* \retval NFCSTATUS_BUSY                  Previous request in progress can not accept new request.
*
*
*\msc
*LibNfcClient,LibNfc;
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_Initialize()",URL="\ref phLibNfc_Mgt_Initialize"];
*LibNfcClient<-LibNfc   [label="pInitCb()",URL="\ref pphLibNfc_RspCb_t()"];
*LibNfcClient=>LibNfc   [label="phLibNfc_RemoteDev_NtfRegister()",URL="\ref phLibNfc_RemoteDev_NtfRegister"];
*LibNfcClient<<LibNfc   [label="NFCSTATUS_SUCCESS"];
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_GetstackCapabilities()",URL="\ref phLibNfc_Mgt_GetstackCapabilities"];
*LibNfcClient<<LibNfc   [label="NFCSTATUS_SUCCESS"];
*--- [label="Now stack capabilities available "];
*
*\endmsc*/


extern NFCSTATUS phLibNfc_Mgt_GetstackCapabilities(phLibNfc_StackCapabilities_t* phLibNfc_StackCapabilities,
                                                   void*                         pContext
                                                  );


/**
* \ingroup grp_lib_nfcHW_
* \brief <b>Interface to configure local LLCP peer</b>.
*
* This function configures the parameters of the local LLCP peer. This function must be called
* before any other LLCP-related function from this API.
*
* \param[in] pConfigInfo   Contains local LLCP link parameters to be applied
* \param[in] pConfigRspCb  This callback has to be called once LibNfc
*                          completes the Configuration.
* \param[in] pContext      Upper layer context to be returned in
*                          the callback.
*
*
* \retval NFCSTATUS_SUCCESS               Operation successful.
* \retval NFCSTATUS_PENDING               Configuration operation is in progress,
                                          pConfigRspCb will be called upon completion.
* \retval NFCSTATUS_INVALID_PARAMETER     One or more of the supplied parameters
*                                         could not be properly interpreted.
* \retval NFCSTATUS_NOT_INITIALISED       Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN              Shutdown in progress.
* \retval NFCSTATUS_FAILED                Operation failed.
* \retval NFCSTATUS_BUSY                  Previous request in progress can not accept new request.
*/
extern NFCSTATUS phLibNfc_Mgt_SetLlcp_ConfigParams( phLibNfc_Llcp_sLinkParameters_t* pConfigInfo,
                                                   pphLibNfc_RspCb_t                pConfigRspCb,
                                                   void*                            pContext
                                                   );


/**
* \ingroup grp_lib_nfc
* \brief <b>Checks if a remote peer is LLCP compliant</b>.
*
* This functions allows to check if a previously detected tag is compliant with the
* LLCP protocol. This step is needed before calling any other LLCP-related function on
* this remote peer, except local LLCP peer configurationn, which is more general. Once
* this checking is done, the caller will be able to receive link status notifications
* until the peer is disconnected.
*
* \param[in] hRemoteDevice       Peer handle obtained during device discovery process.
* \param[in] pCheckLlcp_RspCb    The callback to be called once LibNfc
*                                completes the LLCP compliancy check.
* \param[in] pLink_Cb            The callback to be called each time the
*                                LLCP link status changes.
* \param[in] pContext            Upper layer context to be returned in
*                                the callbacks.
*
*
* \retval NFCSTATUS_SUCCESS               Operation successful.
* \retval NFCSTATUS_PENDING               Check operation is in progress, pCheckLlcp_RspCb will
*                                         be called upon completion.
* \retval NFCSTATUS_INVALID_PARAMETER     One or more of the supplied parameters
*                                         could not be properly interpreted.
* \retval NFCSTATUS_NOT_INITIALISED       Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN              Shutdown in progress.
* \retval NFCSTATUS_FAILED                Operation failed.
* \retval NFCSTATUS_BUSY                  Previous request in progress can not accept new request.
*/
extern NFCSTATUS phLibNfc_Llcp_CheckLlcp( phLibNfc_Handle              hRemoteDevice,
                                          pphLibNfc_ChkLlcpRspCb_t     pCheckLlcp_RspCb,
                                          pphLibNfc_LlcpLinkStatusCb_t pLink_Cb,
                                          void*                        pContext
                                          );


/**
* \ingroup grp_lib_nfc
* \brief <b>Activates a LLCP link with a remote device </b>.
*
* This function launches the link activation process on a remote LLCP-compliant peer. The link status
* notification will be sent by the corresponding callback given in the phLibNfc_Llcp_CheckLlcp function.
* If the activation fails, the deactivated status will be notified, even if the link is already in a
* deactivated state. 
*
* \param[in] hRemoteDevice       Peer handle obtained during device discovery process.
*
* \retval NFCSTATUS_SUCCESS               Operation successful.
* \retval NFCSTATUS_PENDING               Activation operation is in progress,
                                          pLink_Cb will be called upon completion.
* \retval NFCSTATUS_INVALID_PARAMETER     One or more of the supplied parameters
*                                         could not be properly interpreted.
* \retval NFCSTATUS_NOT_INITIALISED       Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN              Shutdown in progress.
* \retval NFCSTATUS_FAILED                Operation failed.
* \retval NFCSTATUS_BUSY                  Previous request in progress can not accept new request.
*/
extern NFCSTATUS phLibNfc_Llcp_Activate( phLibNfc_Handle hRemoteDevice );


/**
* \ingroup grp_lib_nfc
* \brief <b>Deactivate a previously activated LLCP link with a remote device</b>.
*
* This function launches the link deactivation process on a remote LLCP-compliant peer. The link status
* notification will be sent by the corresponding callback given in the phLibNfc_Llcp_CheckLlcp function.
*
* \param[in] hRemoteDevice       Peer handle obtained during device discovery process.
*
* \retval NFCSTATUS_SUCCESS               Operation successful.
* \retval NFCSTATUS_PENDING               Deactivation operation is in progress,
                                          pLink_Cb will be called upon completion.
* \retval NFCSTATUS_INVALID_PARAMETER     One or more of the supplied parameters
*                                         could not be properly interpreted.
* \retval NFCSTATUS_NOT_INITIALISED       Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN              Shutdown in progress.
* \retval NFCSTATUS_FAILED                Operation failed.
* \retval NFCSTATUS_BUSY                  Previous request in progress can not accept new request.
*/
extern NFCSTATUS phLibNfc_Llcp_Deactivate( phLibNfc_Handle  hRemoteDevice );


/**
* \ingroup grp_lib_nfc
* \brief <b>Get information on the local LLCP peer</b>.
*
* This function returns the LLCP link parameters of the local peer that were used
* during the link activation.
*
* \param[in]  hRemoteDevice         Peer handle obtained during device discovery process.
* \param[out] pConfigInfo           Pointer on the variable to be filled with the configuration
                                    parameters used during activation.
*
* \retval NFCSTATUS_SUCCESS               Operation successful.
* \retval NFCSTATUS_INVALID_PARAMETER     One or more of the supplied parameters
*                                         could not be properly interpreted.
* \retval NFCSTATUS_NOT_INITIALISED       Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN              Shutdown in progress.
* \retval NFCSTATUS_FAILED                Operation failed.
* \retval NFCSTATUS_BUSY                  Previous request in progress can not accept new request.
*/
extern NFCSTATUS phLibNfc_Llcp_GetLocalInfo( phLibNfc_Handle                  hRemoteDevice,
                                             phLibNfc_Llcp_sLinkParameters_t* pConfigInfo
                                             );


/**
* \ingroup grp_lib_nfc
* \brief <b>Get information on the remote LLCP peer</b>.
*
* This function returns the LLCP link parameters of the remote peer that were received
* during the link activation.
*
* \param[in]  hRemoteDevice         Peer handle obtained during device discovery process.
* \param[out] pConfigInfo           Pointer on the variable to be filled with the configuration
                                    parameters used during activation.
*
* \retval NFCSTATUS_SUCCESS               Operation successful.
* \retval NFCSTATUS_INVALID_PARAMETER     One or more of the supplied parameters
*                                         could not be properly interpreted.
* \retval NFCSTATUS_NOT_INITIALISED       Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN              Shutdown in progress.
* \retval NFCSTATUS_FAILED                Operation failed.
* \retval NFCSTATUS_BUSY                  Previous request in progress can not accept new request.
*/
extern NFCSTATUS phLibNfc_Llcp_GetRemoteInfo( phLibNfc_Handle                    hRemoteDevice,
                                              phLibNfc_Llcp_sLinkParameters_t*   pConfigInfo
                                              );


/**
* \ingroup grp_lib_nfc
* \brief <b>Create a socket on a LLCP-connected device</b>.
*
* This function creates a socket for a given LLCP link. Sockets can be of two types : 
* connection-oriented and connectionless. If the socket is connection-oriented, the caller
* must provide a working buffer to the socket in order to handle incoming data. This buffer
* must be large enough to fit the receive window (RW * MIU), the remaining space being
* used as a linear buffer to store incoming data as a stream. Data will be readable later
* using the phLibNfc_Llcp_Recv function.
* The options and working buffer are not required if the socket is used as a listening socket,
* since it cannot be directly used for communication.
*
* \param[in]  hRemoteDevice         Peer handle obtained during device discovery process.
* \param[in]  eType                 The socket type.
* \param[in]  psOptions             The options to be used with the socket.
* \param[in]  psWorkingBuffer       A working buffer to be used by the library.
* \param[out] phSocket              A pointer on the variable to be filled with the handle
*                                   on the created socket.
* \param[in]  pErr_Cb               The callback to be called each time the socket
*                                   is in error.
* \param[in]  pContext              Upper layer context to be returned in the callback.
*
* \retval NFCSTATUS_SUCCESS                  Operation successful.
* \retval NFCSTATUS_INVALID_PARAMETER        One or more of the supplied parameters
*                                            could not be properly interpreted.
* \retval NFCSTATUS_BUFFER_TOO_SMALL         The working buffer is too small for the MIU and RW
*                                            declared in the options.
* \retval NFCSTATUS_INSUFFICIENT_RESOURCES   No more socket handle available.
* \retval NFCSTATUS_NOT_INITIALISED          Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN                 Shutdown in progress.
* \retval NFCSTATUS_FAILED                   Operation failed.
*/
extern NFCSTATUS phLibNfc_Llcp_Socket( phLibNfc_Handle                  hRemoteDevice,
                                       phLibNfc_Llcp_eSocketType_t      eType,
                                       phLibNfc_Llcp_sSocketOptions_t*  psOptions,
                                       phNfc_sData_t*                   psWorkingBuffer,
                                       phLibNfc_Handle*                 phSocket,
                                       pphLibNfc_LlcpSocketErrCb_t      pErr_Cb,
                                       void*                            pContext
                                       );


/**
* \ingroup grp_lib_nfc
* \brief <b>Close a socket on a LLCP-connected device</b>.
*
* This function closes a LLCP socket previously created using phLibNfc_Llcp_Socket.
* If the socket was connected, it is first disconnected, and then closed.
*
* \param[in]  hSocket               Socket handle obtained during socket creation.
*
* \retval NFCSTATUS_SUCCESS                  Operation successful.
* \retval NFCSTATUS_INVALID_PARAMETER        One or more of the supplied parameters
*                                            could not be properly interpreted.
* \retval NFCSTATUS_NOT_INITIALISED          Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN                 Shutdown in progress.
* \retval NFCSTATUS_FAILED                   Operation failed.
*/
extern NFCSTATUS phLibNfc_Llcp_Close( phLibNfc_Handle hSocket );


/**
* \ingroup grp_lib_nfc
* \brief <b>Get the local options of a socket</b>.
*
* This function returns the local options (maximum packet size and receive window size) used
* for a given connection-oriented socket. This function shall not be used with connectionless
* sockets.
*
* \param[in]  hSocket               Socket handle obtained during socket creation.
* \param[in]  psLocalOptions        A pointer to be filled with the local options of the socket.
*
* \retval NFCSTATUS_SUCCESS                  Operation successful.
* \retval NFCSTATUS_INVALID_PARAMETER        One or more of the supplied parameters
*                                            could not be properly interpreted.
* \retval NFCSTATUS_INVALID_STATE            The socket is not in a valid state, or not of 
*                                            a valid type to perform the requsted operation.
* \retval NFCSTATUS_NOT_INITIALISED          Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN                 Shutdown in progress.
* \retval NFCSTATUS_FAILED                   Operation failed.
*/
extern NFCSTATUS phLibNfc_Llcp_SocketGetLocalOptions( phLibNfc_Handle                  hSocket,
                                                      phLibNfc_Llcp_sSocketOptions_t*  psLocalOptions
                                                      );


/**
* \ingroup grp_lib_nfc
* \brief <b>Get the local options of a socket</b>.
*
* This function returns the remote options (maximum packet size and receive window size) used
* for a given connection-oriented socket. This function shall not be used with connectionless
* sockets.
*
* \param[in]  hSocket               Socket handle obtained during socket creation.
* \param[in]  psRemoteOptions       A pointer to be filled with the remote options of the socket.
*
* \retval NFCSTATUS_SUCCESS                  Operation successful.
* \retval NFCSTATUS_INVALID_PARAMETER        One or more of the supplied parameters
*                                            could not be properly interpreted.
* \retval NFCSTATUS_INVALID_STATE            The socket is not in a valid state, or not of 
*                                            a valid type to perform the requsted operation.
* \retval NFCSTATUS_NOT_INITIALISED          Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN                 Shutdown in progress.
* \retval NFCSTATUS_FAILED                   Operation failed.
*/
extern NFCSTATUS phLibNfc_Llcp_SocketGetRemoteOptions( phLibNfc_Handle                  hSocket,
                                                       phLibNfc_Llcp_sSocketOptions_t*  psRemoteOptions
                                                       );


/**
* \ingroup grp_lib_nfc
* \brief <b>Bind a socket to a local SAP</b>.
*
* This function binds the socket to a local Service Access Point.
*
* \param[in]  hSocket               Peer handle obtained during device discovery process.
* \param[out] pConfigInfo           Pointer on the variable to be filled with the configuration
*                                   parameters used during activation.
*
* \retval NFCSTATUS_SUCCESS                  Operation successful.
* \retval NFCSTATUS_INVALID_PARAMETER        One or more of the supplied parameters
*                                            could not be properly interpreted.
* \retval NFCSTATUS_INVALID_STATE            The socket is not in a valid state, or not of 
*                                            a valid type to perform the requsted operation.
* \retval NFCSTATUS_ALREADY_REGISTERED       The selected SAP is already bound to another
                                             socket.
* \retval NFCSTATUS_NOT_INITIALISED          Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN                 Shutdown in progress.
* \retval NFCSTATUS_FAILED                   Operation failed.
*/
extern NFCSTATUS phLibNfc_Llcp_Bind( phLibNfc_Handle hSocket,
                                     uint8_t         nSap
                                     );


/**
* \ingroup grp_lib_nfc
* \brief <b>Listen for incoming connection requests on a socket</b>.
*
* This function switches a socket into a listening state and registers a callback on
* incoming connection requests. In this state, the socket is not able to communicate
* directly. The listening state is only available for connection-oriented sockets
* which are still not connected. The socket keeps listening until it is closed, and
* thus can trigger several times the pListen_Cb callback. The caller can adverise the
* service through SDP by providing a service name.
*
*
* \param[in]  hSocket            Socket handle obtained during socket creation.
* \param[in]  psServiceName      A buffer containing the name of the service for SDP. No SDP
*                                advertising if set to NULL.
* \param[in]  pListen_Cb         The callback to be called each time the
*                                socket receive a connection request.
* \param[in]  pContext           Upper layer context to be returned in
*                                the callback.
*
* \retval NFCSTATUS_SUCCESS                  Operation successful.
* \retval NFCSTATUS_INVALID_PARAMETER        One or more of the supplied parameters
*                                            could not be properly interpreted.
* \retval NFCSTATUS_INVALID_STATE            The socket is not in a valid state to switch
*                                            to listening state.
* \retval NFCSTATUS_NOT_INITIALISED          Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN                 Shutdown in progress.
* \retval NFCSTATUS_FAILED                   Operation failed.
*/
extern NFCSTATUS phLibNfc_Llcp_Listen( phLibNfc_Handle                  hSocket,
                                       phNfc_sData_t                    *psServiceName,
                                       pphLibNfc_LlcpSocketListenCb_t   pListen_Cb,
                                       void*                            pContext
                                       );


/**
* \ingroup grp_lib_nfc
* \brief <b>Accept an incoming connection request for a socket</b>.
*
* This functions allows the client to accept an incoming connection request.
* It must be used with the socket provided within the listen callback. The socket
* is implicitly switched to the connected state when the function is called.
*
* \param[in]  hSocket               Socket handle obtained in the listening callback.
* \param[in]  psOptions             The options to be used with the socket.
* \param[in]  psWorkingBuffer       A working buffer to be used by the library.
* \param[in]  pErr_Cb               The callback to be called each time the accepted socket
*                                   is in error.
* \param[in]  pAccept_RspCb         The callback to be called when the Accept operation 
*                                   is completed.
* \param[in]  pContext              Upper layer context to be returned in the callback.
*
* \retval NFCSTATUS_SUCCESS                  Operation successful.
* \retval NFCSTATUS_INVALID_PARAMETER        One or more of the supplied parameters
*                                            could not be properly interpreted.
* \retval NFCSTATUS_BUFFER_TOO_SMALL         The working buffer is too small for the MIU and RW
*                                            declared in the options.
* \retval NFCSTATUS_NOT_INITIALISED          Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN                 Shutdown in progress.
* \retval NFCSTATUS_FAILED                   Operation failed.
*/
extern NFCSTATUS phLibNfc_Llcp_Accept( phLibNfc_Handle                  hSocket,
                                       phLibNfc_Llcp_sSocketOptions_t*  psOptions,
                                       phNfc_sData_t*                   psWorkingBuffer,
                                       pphLibNfc_LlcpSocketErrCb_t      pErr_Cb,
                                       pphLibNfc_LlcpSocketAcceptCb_t   pAccept_RspCb,
                                       void*                            pContext
                                       );


/**
* \ingroup grp_lib_nfc
* \brief <b>Reject an incoming connection request for a socket</b>.
*
* This functions allows the client to reject an incoming connection request.
* It must be used with the socket provided within the listen callback. The socket
* is implicitly closed when the function is called.
*
* \param[in]  hSocket               Socket handle obtained in the listening callback.
* \param[in]  pReject_RspCb         The callback to be called when the Reject operation 
*                                   is completed.
* \retval NFCSTATUS_SUCCESS                  Operation successful.
* \retval NFCSTATUS_INVALID_PARAMETER        One or more of the supplied parameters
*                                            could not be properly interpreted.
* \retval NFCSTATUS_NOT_INITIALISED          Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN                 Shutdown in progress.
* \retval NFCSTATUS_FAILED                   Operation failed.
*/
extern NFCSTATUS phLibNfc_Llcp_Reject( phLibNfc_Handle                  hSocket,
                                       pphLibNfc_LlcpSocketAcceptCb_t   pReject_RspCb,
                                       void*                            pContext);


/**
* \ingroup grp_lib_nfc
* \brief <b>Try to establish connection with a socket on a remote SAP</b>.
*
* This function tries to connect to a given SAP on the remote peer. If the
* socket is not bound to a local SAP, it is implicitly bound to a free SAP.
*
* \param[in]  hSocket            Socket handle obtained during socket creation.
* \param[in]  nSap               The destination SAP to connect to.
* \param[in]  pConnect_RspCb     The callback to be called when the connection
*                                operation is completed.
* \param[in]  pContext           Upper layer context to be returned in
*                                the callback.
*
* \retval NFCSTATUS_SUCCESS                  Operation successful.
* \retval NFCSTATUS_INVALID_PARAMETER        One or more of the supplied parameters
*                                            could not be properly interpreted.
* \retval NFCSTATUS_PENDING                  Connection operation is in progress,
*                                            pConnect_RspCb will be called upon completion.
* \retval NFCSTATUS_INVALID_STATE            The socket is not in a valid state, or not of 
*                                            a valid type to perform the requsted operation.
* \retval NFCSTATUS_NOT_INITIALISED          Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN                 Shutdown in progress.
* \retval NFCSTATUS_FAILED                   Operation failed.
*/
extern NFCSTATUS phLibNfc_Llcp_Connect( phLibNfc_Handle                 hSocket,
                                        uint8_t                         nSap,
                                        pphLibNfc_LlcpSocketConnectCb_t pConnect_RspCb,
                                        void*                           pContext
                                        );


/**
* \ingroup grp_lib_nfc
* \brief <b>Try to establish connection with a socket on a remote service, given its URI</b>.
*
* This function tries to connect to a SAP designated by an URI. If the
* socket is not bound to a local SAP, it is implicitly bound to a free SAP.
*
* \param[in]  hSocket            Socket handle obtained during socket creation.
* \param[in]  psUri              The URI corresponding to the destination SAP to connect to.
* \param[in]  pConnect_RspCb     The callback to be called when the connection
*                                operation is completed.
* \param[in]  pContext           Upper layer context to be returned in
*                                the callback.
*
* \retval NFCSTATUS_SUCCESS                  Operation successful.
* \retval NFCSTATUS_INVALID_PARAMETER        One or more of the supplied parameters
*                                            could not be properly interpreted.
* \retval NFCSTATUS_PENDING                  Connection operation is in progress,
*                                            pConnect_RspCb will be called upon completion.
* \retval NFCSTATUS_INVALID_STATE            The socket is not in a valid state, or not of 
*                                            a valid type to perform the requsted operation.
* \retval NFCSTATUS_NOT_INITIALISED          Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN                 Shutdown in progress.
* \retval NFCSTATUS_FAILED                   Operation failed.
*/
extern NFCSTATUS phLibNfc_Llcp_ConnectByUri( phLibNfc_Handle                 hSocket,
                                             phNfc_sData_t*                  psUri,
                                             pphLibNfc_LlcpSocketConnectCb_t pConnect_RspCb,
                                             void*                           pContext
                                             );


/**
* \ingroup grp_lib_nfc
* \brief <b>Disconnect a currently connected socket</b>.
*
* This function initiates the disconnection of a previously connected socket.
*
* \param[in]  hSocket            Socket handle obtained during socket creation.
* \param[in]  pDisconnect_RspCb  The callback to be called when the 
*                                operation is completed.
* \param[in]  pContext           Upper layer context to be returned in
*                                the callback.
*
* \retval NFCSTATUS_SUCCESS                  Operation successful.
* \retval NFCSTATUS_INVALID_PARAMETER        One or more of the supplied parameters
*                                            could not be properly interpreted.
* \retval NFCSTATUS_PENDING                  Disconnection operation is in progress,
*                                            pDisconnect_RspCb will be called upon completion.
* \retval NFCSTATUS_INVALID_STATE            The socket is not in a valid state, or not of 
*                                            a valid type to perform the requsted operation.
* \retval NFCSTATUS_NOT_INITIALISED          Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN                 Shutdown in progress.
* \retval NFCSTATUS_FAILED                   Operation failed.
*/
extern NFCSTATUS phLibNfc_Llcp_Disconnect( phLibNfc_Handle                    hSocket,
                                           pphLibNfc_LlcpSocketDisconnectCb_t pDisconnect_RspCb,
                                           void*                              pContext
                                           );


/**
* \ingroup grp_lib_nfc
* \brief <b>Read data on a socket</b>.
*
* This function is used to read data from a socket. It reads at most the
* size of the reception buffer, but can also return less bytes if less bytes
* are available. If no data is available, the function will be pending until
* more data comes, and the response will be sent by the callback. This function
* can only be called on a connection-oriented socket.
* 
*
* \param[in]  hSocket            Socket handle obtained during socket creation.
* \param[in]  psBuffer           The buffer receiving the data.
* \param[in]  pRecv_RspCb        The callback to be called when the 
*                                operation is completed.
* \param[in]  pContext           Upper layer context to be returned in
*                                the callback.
*
* \retval NFCSTATUS_SUCCESS                  Operation successful.
* \retval NFCSTATUS_INVALID_PARAMETER        One or more of the supplied parameters
*                                            could not be properly interpreted.
* \retval NFCSTATUS_PENDING                  Reception operation is in progress,
*                                            pRecv_RspCb will be called upon completion.
* \retval NFCSTATUS_INVALID_STATE            The socket is not in a valid state, or not of 
*                                            a valid type to perform the requsted operation.
* \retval NFCSTATUS_NOT_INITIALISED          Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN                 Shutdown in progress.
* \retval NFCSTATUS_FAILED                   Operation failed.
*/
extern NFCSTATUS phLibNfc_Llcp_Recv( phLibNfc_Handle              hSocket,
                                     phNfc_sData_t*               psBuffer,
                                     pphLibNfc_LlcpSocketRecvCb_t pRecv_RspCb,
                                     void*                        pContext
                                     );


/**
* \ingroup grp_lib_nfc
* \brief <b>Read data on a socket and get the source SAP</b>.
*
* This function is the same as phLibNfc_Llcp_Recv, except that the callback includes
* the source SAP. This functions can only be called on a connectionless socket.
* 
*
* \param[in]  hSocket            Socket handle obtained during socket creation.
* \param[in]  psBuffer           The buffer receiving the data.
* \param[in]  pRecv_RspCb        The callback to be called when the 
*                                operation is completed.
* \param[in]  pContext           Upper layer context to be returned in
*                                the callback.
*
* \retval NFCSTATUS_SUCCESS                  Operation successful.
* \retval NFCSTATUS_INVALID_PARAMETER        One or more of the supplied parameters
*                                            could not be properly interpreted.
* \retval NFCSTATUS_PENDING                  Reception operation is in progress,
*                                            pRecv_RspCb will be called upon completion.
* \retval NFCSTATUS_INVALID_STATE            The socket is not in a valid state, or not of 
*                                            a valid type to perform the requsted operation.
* \retval NFCSTATUS_NOT_INITIALISED          Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN                 Shutdown in progress.
* \retval NFCSTATUS_FAILED                   Operation failed.
*/
extern NFCSTATUS phLibNfc_Llcp_RecvFrom( phLibNfc_Handle                   hSocket,
                                         phNfc_sData_t*                    psBuffer,
                                         pphLibNfc_LlcpSocketRecvFromCb_t  pRecv_Cb,
                                         void*                             pContext
                                         );


/**
* \ingroup grp_lib_nfc
* \brief <b>Send data on a socket</b>.
*
* This function is used to write data on a socket. This function
* can only be called on a connection-oriented socket which is already
* in a connected state.
* 
*
* \param[in]  hSocket            Socket handle obtained during socket creation.
* \param[in]  psBuffer           The buffer containing the data to send.
* \param[in]  pSend_RspCb        The callback to be called when the 
*                                operation is completed.
* \param[in]  pContext           Upper layer context to be returned in
*                                the callback.
*
* \retval NFCSTATUS_SUCCESS                  Operation successful.
* \retval NFCSTATUS_INVALID_PARAMETER        One or more of the supplied parameters
*                                            could not be properly interpreted.
* \retval NFCSTATUS_PENDING                  Reception operation is in progress,
*                                            pSend_RspCb will be called upon completion.
* \retval NFCSTATUS_INVALID_STATE            The socket is not in a valid state, or not of 
*                                            a valid type to perform the requsted operation.
* \retval NFCSTATUS_NOT_INITIALISED          Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN                 Shutdown in progress.
* \retval NFCSTATUS_FAILED                   Operation failed.
*/
extern NFCSTATUS phLibNfc_Llcp_Send( phLibNfc_Handle              hSocket,
                                     phNfc_sData_t*               psBuffer,
                                     pphLibNfc_LlcpSocketSendCb_t pSend_RspCb,
                                     void*                        pContext
                                     );


/**
* \ingroup grp_lib_nfc
* \brief <b>Send data on a socket to a given destination SAP</b>.
*
* This function is used to write data on a socket to a given destination SAP.
* This function can only be called on a connectionless socket.
* 
*
* \param[in]  hSocket            Socket handle obtained during socket creation.
* \param[in]  nSap               The destination SAP.
* \param[in]  psBuffer           The buffer containing the data to send.
* \param[in]  pSend_RspCb        The callback to be called when the 
*                                operation is completed.
* \param[in]  pContext           Upper layer context to be returned in
*                                the callback.
*
* \retval NFCSTATUS_SUCCESS                  Operation successful.
* \retval NFCSTATUS_INVALID_PARAMETER        One or more of the supplied parameters
*                                            could not be properly interpreted.
* \retval NFCSTATUS_PENDING                  Reception operation is in progress,
*                                            pSend_RspCb will be called upon completion.
* \retval NFCSTATUS_INVALID_STATE            The socket is not in a valid state, or not of 
*                                            a valid type to perform the requsted operation.
* \retval NFCSTATUS_NOT_INITIALISED          Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN                 Shutdown in progress.
* \retval NFCSTATUS_FAILED                   Operation failed.
*/
extern NFCSTATUS phLibNfc_Llcp_SendTo( phLibNfc_Handle               hSocket,
                                       uint8_t                       nSap,
                                       phNfc_sData_t*                psBuffer,
                                       pphLibNfc_LlcpSocketSendCb_t  pSend_RspCb,
                                       void*                         pContext
                                       );


/**
* \ingroup grp_lib_nfc
*
* \brief Initializes \ DeInitialize the NFC library for testmode.
*
*
*\brief This function initializes / DeInitialize NFC library and its underlying layers 
* in test mode. As part of this interface underlying layers gets configured.
* Once phLibNfc_TstMode_On is successful ,NFC library ready in testmode using IOCTL.
* After using test IOCTLs ,Test mode should be DeInit using phLibNfc_TstMode_Off.
*\note This API should be used only for test IOCTL codes. 
*
* \param[in] pDriverHandle         Driver Handle currently application is using.
* \param[in] pTestModeCb        The init callback is called by the LibNfc when 
*                               Configure test mode completed or there is an error
*                               in initialization.
*
* \param[in] pContext           Client context which will   be included in
*                               callback when the request is completed.
*
* \retval NFCSTATUS_ALREADY_INITIALISED     Stack is already initialized.
* \retval NFCSTATUS_PENDING                 Init sequence   has been successfully
*                                           started and result will be  conveyed via 
*                                           callback notification.
* \retval NFCSTATUS_INVALID_PARAMETER       The parameter could not be  properly
*                                           interpreted.
*\retval NFCSTATUS_INSUFFICIENT_RESOURCES   Insufficient resource.(Ex: insufficient memory)
*
*\msc
*LibNfcClient,LibNfc;
*--- [label="Before initializing Nfc LIB,Setup Driver layer"];
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_ConfigureDriver()",URL="\ref phLibNfc_Mgt_ConfigureDriver"];
*LibNfcClient<<LibNfc   [label="NFCSTATUS_SUCCESS"];
*LibNfcClient=>LibNfc   [label="phLibNfc_Mgt_ConfigureTestMode()",URL="\ref phLibNfc_Mgt_ConfigureTestMode"];
*LibNfcClient<<LibNfc   [label="NFCSTATUS_PENDING"];
*LibNfcClient<-LibNfc   [label="pTestModeCb"];
*\endmsc
*/
NFCSTATUS phLibNfc_Mgt_ConfigureTestMode(void              *pDriverHandle,
                                 pphLibNfc_RspCb_t         pTestModeCb,
                                 phLibNfc_Cfg_Testmode_t   eTstmode,
                                 void                      *pContext
                                 );

/**
* \ingroup grp_lib_nfc
* \brief <b>Interface to LibNfc Reset</b>.
*
*  LibNfc client can reset the stack.
*
*  \param[in] pContext                     Upper layer context to be returned in 
*                                          the callback.
*
*
* \retval NFCSTATUS_SUCCESS               Indicates Get stack Capabilities operation successful.
* \retval NFCSTATUS_INVALID_PARAMETER     One or more of the supplied parameters
*                                         could not be properly interpreted.
* \retval NFCSTATUS_NOT_INITIALISED       Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN              Shutdown in progress.
*/

NFCSTATUS phLibNfc_Mgt_Reset(void    *pContext);

#endif  /*  PHLIBNFC_H    */