/******************************************************************************
*
* Copyright (C) 2010-2014 Broadcom Corporation
*
* 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.
*
******************************************************************************/
/******************************************************************************
*
* This is the public interface file for NFA P2P, Broadcom's NFC
* application layer for mobile phones.
*
******************************************************************************/
#ifndef NFA_P2P_API_H
#define NFA_P2P_API_H
#include "llcp_api.h"
#include "nfa_api.h"
/*****************************************************************************
** Constants and data types
*****************************************************************************/
/* NFA P2P Reason of disconnection */
#define NFA_P2P_DISC_REASON_REMOTE_INITIATE 0x00 /* remote initiated to disconnect */
#define NFA_P2P_DISC_REASON_LOCAL_INITITATE 0x01 /* local initiated to disconnect */
#define NFA_P2P_DISC_REASON_NO_SERVICE 0x02 /* no service bound in remote */
#define NFA_P2P_DISC_REASON_REMOTE_REJECT 0x03 /* remote rejected connection */
#define NFA_P2P_DISC_REASON_FRAME_ERROR 0x04 /* sending or receiving FRMR PDU */
#define NFA_P2P_DISC_REASON_LLCP_DEACTIVATED 0x05 /* LLCP link deactivated */
#define NFA_P2P_DISC_REASON_NO_RESOURCE 0x06 /* Out of resource in local device */
#define NFA_P2P_DISC_REASON_NO_INFORMATION 0x80 /* Without information */
/* NFA P2P callback events */
#define NFA_P2P_REG_SERVER_EVT 0x00 /* Server is registered */
#define NFA_P2P_REG_CLIENT_EVT 0x01 /* Client is registered */
#define NFA_P2P_ACTIVATED_EVT 0x02 /* LLCP Link has been activated */
#define NFA_P2P_DEACTIVATED_EVT 0x03 /* LLCP Link has been deactivated */
#define NFA_P2P_CONN_REQ_EVT 0x04 /* Data link connection request from peer */
#define NFA_P2P_CONNECTED_EVT 0x05 /* Data link connection has been established */
#define NFA_P2P_DISC_EVT 0x06 /* Data link connection has been disconnected */
#define NFA_P2P_DATA_EVT 0x07 /* Data received from peer */
#define NFA_P2P_CONGEST_EVT 0x08 /* Status indication of outgoing data */
#define NFA_P2P_LINK_INFO_EVT 0x09 /* link MIU and Well-Known Service list */
#define NFA_P2P_SDP_EVT 0x0A /* Remote SAP of SDP result */
typedef UINT8 tNFA_P2P_EVT;
/* NFA allocates a SAP for server */
#define NFA_P2P_ANY_SAP LLCP_INVALID_SAP
#define NFA_P2P_INVALID_SAP LLCP_INVALID_SAP
/* Recommanded MIU's for connection-oriented */
#define NFA_P2P_MIU_1 (NCI_NFC_DEP_MAX_DATA - LLCP_PDU_HEADER_SIZE - LLCP_SEQUENCE_SIZE)
#define NFA_P2P_MIU_2 (2*NCI_NFC_DEP_MAX_DATA - LLCP_PDU_HEADER_SIZE - LLCP_SEQUENCE_SIZE)
#define NFA_P2P_MIU_3 (3*NCI_NFC_DEP_MAX_DATA - LLCP_PDU_HEADER_SIZE - LLCP_SEQUENCE_SIZE)
#define NFA_P2P_MIU_8 (8*NCI_NFC_DEP_MAX_DATA - LLCP_PDU_HEADER_SIZE - LLCP_SEQUENCE_SIZE)
#define NFA_P2P_LLINK_TYPE LLCP_LINK_TYPE_LOGICAL_DATA_LINK
#define NFA_P2P_DLINK_TYPE LLCP_LINK_TYPE_DATA_LINK_CONNECTION
typedef UINT8 tNFA_P2P_LINK_TYPE;
/* Data for NFA_P2P_REG_SERVER_EVT */
typedef struct
{
tNFA_HANDLE server_handle; /* NFA_HANDLE_INVALID if failed */
char service_name[LLCP_MAX_SN_LEN + 1];
UINT8 server_sap;
} tNFA_P2P_REG_SERVER;
/* Data for NFA_P2P_REG_CLIENT_EVT */
typedef struct
{
tNFA_HANDLE client_handle; /* NFA_HANDLE_INVALID if failed */
} tNFA_P2P_REG_CLIENT;
/* Data for NFA_P2P_ACTIVATED_EVT */
typedef struct
{
tNFA_HANDLE handle;
UINT16 local_link_miu;
UINT16 remote_link_miu;
} tNFA_P2P_ACTIVATED;
/* Data for NFA_P2P_DEACTIVATED_EVT */
typedef struct
{
tNFA_HANDLE handle;
} tNFA_P2P_DEACTIVATED;
/* Data for NFA_P2P_CONN_REQ_EVT */
typedef struct
{
tNFA_HANDLE server_handle;
tNFA_HANDLE conn_handle;
UINT8 remote_sap;
UINT16 remote_miu;
UINT8 remote_rw;
} tNFA_P2P_CONN_REQ;
/* Data for NFA_P2P_CONNECTED_EVT */
typedef struct
{
tNFA_HANDLE client_handle;
tNFA_HANDLE conn_handle;
UINT8 remote_sap;
UINT16 remote_miu;
UINT8 remote_rw;
} tNFA_P2P_CONN;
/* Data for NFA_P2P_DISC_EVT */
typedef struct
{
tNFA_HANDLE handle;
UINT8 reason;
} tNFA_P2P_DISC;
/* Data for NFA_P2P_DATA_EVT */
typedef struct
{
tNFA_HANDLE handle;
UINT8 remote_sap;
tNFA_P2P_LINK_TYPE link_type;
} tNFA_P2P_DATA;
/* Data for NFA_P2P_CONGEST_EVT */
typedef struct
{
tNFA_HANDLE handle;
BOOLEAN is_congested;
tNFA_P2P_LINK_TYPE link_type;
} tNFA_P2P_CONGEST;
/* Data for NFA_P2P_LINK_INFO_EVT */
typedef struct
{
tNFA_HANDLE handle;
UINT16 wks; /* well-known service */
UINT16 local_link_miu;
UINT16 remote_link_miu;
} tNFA_P2P_LINK_INFO;
/* Data for NFA_P2P_SDP_EVT */
typedef struct
{
tNFA_HANDLE handle;
UINT8 remote_sap; /* 0x00 if failed */
} tNFA_P2P_SDP;
/* Union of all P2P callback structures */
typedef union
{
tNFA_P2P_REG_SERVER reg_server; /* NFA_P2P_REG_SERVER_EVT */
tNFA_P2P_REG_CLIENT reg_client; /* NFA_P2P_REG_CLIENT_EVT */
tNFA_P2P_ACTIVATED activated; /* NFA_P2P_ACTIVATED_EVT */
tNFA_P2P_DEACTIVATED deactivated; /* NFA_P2P_DEACTIVATED_EVT */
tNFA_P2P_CONN_REQ conn_req; /* NFA_P2P_CONN_REQ_EVT */
tNFA_P2P_CONN connected; /* NFA_P2P_CONNECTED_EVT */
tNFA_P2P_DISC disc; /* NFA_P2P_DISC_EVT */
tNFA_P2P_DATA data; /* NFA_P2P_DATA_EVT */
tNFA_P2P_CONGEST congest; /* NFA_P2P_CONGEST_EVT */
tNFA_P2P_LINK_INFO link_info; /* NFA_P2P_LINK_INFO_EVT */
tNFA_P2P_SDP sdp; /* NFA_P2P_SDP_EVT */
} tNFA_P2P_EVT_DATA;
/* NFA P2P callback */
typedef void (tNFA_P2P_CBACK)(tNFA_P2P_EVT event, tNFA_P2P_EVT_DATA *p_data);
/*****************************************************************************
** External Function Declarations
*****************************************************************************/
#ifdef __cplusplus
extern "C"
{
#endif
/*******************************************************************************
**
** Function NFA_P2pRegisterServer
**
** Description This function is called to listen to a SAP as server on LLCP.
**
** NFA_P2P_REG_SERVER_EVT will be returned with status and handle.
**
** If server_sap is set to NFA_P2P_ANY_SAP, then NFA will allocate
** a SAP between LLCP_LOWER_BOUND_SDP_SAP and LLCP_UPPER_BOUND_SDP_SAP
** Otherwise, server_sap must be between (LLCP_SDP_SAP + 1) and
** LLCP_UPPER_BOUND_SDP_SAP
**
** link_type : NFA_P2P_LLINK_TYPE and/or NFA_P2P_DLINK_TYPE
**
** Note: If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
** should happen before calling this function
**
** Returns NFA_STATUS_OK if successfully initiated
** NFA_STATUS_FAILED otherwise
**
*******************************************************************************/
NFC_API extern tNFA_STATUS NFA_P2pRegisterServer (UINT8 server_sap,
tNFA_P2P_LINK_TYPE link_type,
char *p_service_name,
tNFA_P2P_CBACK *p_cback);
/*******************************************************************************
**
** Function NFA_P2pRegisterClient
**
** Description This function is called to register a client service on LLCP.
**
** NFA_P2P_REG_CLIENT_EVT will be returned with status and handle.
**
** link_type : NFA_P2P_LLINK_TYPE and/or NFA_P2P_DLINK_TYPE
**
** Returns NFA_STATUS_OK if successfully initiated
** NFA_STATUS_FAILED otherwise
**
*******************************************************************************/
NFC_API extern tNFA_STATUS NFA_P2pRegisterClient (tNFA_P2P_LINK_TYPE link_type,
tNFA_P2P_CBACK *p_cback);
/*******************************************************************************
**
** Function NFA_P2pDeregister
**
** Description This function is called to stop listening to a SAP as server
** or stop client service on LLCP.
**
** Note: If this function is called to de-register a server and RF discovery
** is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
** should happen before calling this function
**
** Returns NFA_STATUS_OK if successfully initiated
** NFA_STATUS_BAD_HANDLE if handle is not valid
** NFA_STATUS_FAILED otherwise
**
*******************************************************************************/
NFC_API extern tNFA_STATUS NFA_P2pDeregister (tNFA_HANDLE handle);
/*******************************************************************************
**
** Function NFA_P2pAcceptConn
**
** Description This function is called to accept a request of data link
** connection to a listening SAP on LLCP after receiving
** NFA_P2P_CONN_REQ_EVT.
**
** Returns NFA_STATUS_OK if successfully initiated
** NFA_STATUS_BAD_HANDLE if handle is not valid
** NFA_STATUS_FAILED otherwise
**
*******************************************************************************/
NFC_API extern tNFA_STATUS NFA_P2pAcceptConn (tNFA_HANDLE conn_handle,
UINT16 miu,
UINT8 rw);
/*******************************************************************************
**
** Function NFA_P2pRejectConn
**
** Description This function is called to reject a request of data link
** connection to a listening SAP on LLCP after receiving
** NFA_P2P_CONN_REQ_EVT.
**
** Returns NFA_STATUS_OK if successfully initiated
** NFA_STATUS_BAD_HANDLE if handle is not valid
** NFA_STATUS_FAILED otherwise
**
*******************************************************************************/
NFC_API extern tNFA_STATUS NFA_P2pRejectConn (tNFA_HANDLE conn_handle);
/*******************************************************************************
**
** Function NFA_P2pDisconnect
**
** Description This function is called to disconnect an existing or
** connecting data link connection.
**
** discard any pending data on data link connection if flush is set to TRUE
**
** NFA_P2P_DISC_EVT will be returned after data link connection is disconnected
**
** Returns NFA_STATUS_OK if successfully initiated
** NFA_STATUS_BAD_HANDLE if handle is not valid
** NFA_STATUS_FAILED otherwise
**
*******************************************************************************/
NFC_API extern tNFA_STATUS NFA_P2pDisconnect (tNFA_HANDLE conn_handle,
BOOLEAN flush);
/*******************************************************************************
**
** Function NFA_P2pConnectByName
**
** Description This function is called to create a connection-oriented transport
** by a service name.
** NFA_P2P_CONNECTED_EVT if success
** NFA_P2P_DISC_EVT if failed
**
** Returns NFA_STATUS_OK if successfully initiated
** NFA_STATUS_BAD_HANDLE if client is not registered
** NFA_STATUS_FAILED otherwise
**
*******************************************************************************/
NFC_API extern tNFA_STATUS NFA_P2pConnectByName (tNFA_HANDLE client_handle,
char *p_service_name,
UINT16 miu,
UINT8 rw);
/*******************************************************************************
**
** Function NFA_P2pConnectBySap
**
** Description This function is called to create a connection-oriented transport
** by a SAP.
** NFA_P2P_CONNECTED_EVT if success
** NFA_P2P_DISC_EVT if failed
**
** Returns NFA_STATUS_OK if successfully initiated
** NFA_STATUS_BAD_HANDLE if client is not registered
** NFA_STATUS_FAILED otherwise
**
*******************************************************************************/
NFC_API extern tNFA_STATUS NFA_P2pConnectBySap (tNFA_HANDLE client_handle,
UINT8 dsap,
UINT16 miu,
UINT8 rw);
/*******************************************************************************
**
** Function NFA_P2pSendUI
**
** Description This function is called to send data on connectionless
** transport.
**
** Returns NFA_STATUS_OK if successfully initiated
** NFA_STATUS_BAD_HANDLE if handle is not valid
** NFA_STATUS_BAD_LENGTH if data length is more than remote link MIU
** NFA_STATUS_CONGESTED if congested
** NFA_STATUS_FAILED otherwise
**
*******************************************************************************/
NFC_API extern tNFA_STATUS NFA_P2pSendUI (tNFA_HANDLE handle,
UINT8 dsap,
UINT16 length,
UINT8 *p_data);
/*******************************************************************************
**
** Function NFA_P2pReadUI
**
** Description This function is called to read data on connectionless
** transport when receiving NFA_P2P_DATA_EVT with NFA_P2P_LLINK_TYPE.
**
** - Remote SAP who sent UI PDU is returned.
** - Information of UI PDU up to max_data_len is copied into p_data.
** - If more information of UI PDU or more UI PDU in queue then more
** is returned to TRUE.
** - Information of next UI PDU is not concatenated.
**
** Returns NFA_STATUS_OK if successfully initiated
** NFA_STATUS_BAD_HANDLE if handle is not valid
**
*******************************************************************************/
NFC_API extern tNFA_STATUS NFA_P2pReadUI (tNFA_HANDLE handle,
UINT32 max_data_len,
UINT8 *p_remote_sap,
UINT32 *p_data_len,
UINT8 *p_data,
BOOLEAN *p_more);
/*******************************************************************************
**
** Function NFA_P2pFlushUI
**
** Description This function is called to flush data on connectionless
** transport.
**
** Returns NFA_STATUS_OK if successfully initiated
** NFA_STATUS_BAD_HANDLE if handle is not valid
**
*******************************************************************************/
NFC_API extern tNFA_STATUS NFA_P2pFlushUI (tNFA_HANDLE handle,
UINT32 *p_length);
/*******************************************************************************
**
** Function NFA_P2pSendData
**
** Description This function is called to send data on connection-oriented
** transport.
**
** Returns NFA_STATUS_OK if successfully initiated
** NFA_STATUS_BAD_HANDLE if handle is not valid
** NFA_STATUS_BAD_LENGTH if data length is more than remote MIU
** NFA_STATUS_CONGESTED if congested
** NFA_STATUS_FAILED otherwise
**
*******************************************************************************/
NFC_API extern tNFA_STATUS NFA_P2pSendData (tNFA_HANDLE conn_handle,
UINT16 length,
UINT8 *p_data);
/*******************************************************************************
**
** Function NFA_P2pReadData
**
** Description This function is called to read data on connection-oriented
** transport when receiving NFA_P2P_DATA_EVT with NFA_P2P_DLINK_TYPE.
**
** - Information of I PDU is copied into p_data up to max_data_len.
** - If more information of I PDU or more I PDU in queue, then more
** is returned to TRUE.
** - Information of next I PDU is not concatenated.
**
** Returns NFA_STATUS_OK if successfully initiated
** NFA_STATUS_BAD_HANDLE if handle is not valid
**
*******************************************************************************/
NFC_API extern tNFA_STATUS NFA_P2pReadData (tNFA_HANDLE handle,
UINT32 max_data_len,
UINT32 *p_data_len,
UINT8 *p_data,
BOOLEAN *p_more);
/*******************************************************************************
**
** Function NFA_P2pFlushData
**
** Description This function is called to flush data on connection-oriented
** transport.
**
** Returns NFA_STATUS_OK if successfully initiated
** NFA_STATUS_BAD_HANDLE if handle is not valid
**
*******************************************************************************/
NFC_API extern tNFA_STATUS NFA_P2pFlushData (tNFA_HANDLE handle,
UINT32 *p_length);
/*******************************************************************************
**
** Function NFA_P2pSetLocalBusy
**
** Description This function is called to stop or resume incoming data on
** connection-oriented transport.
**
** Returns NFA_STATUS_OK if successfully initiated
** NFA_STATUS_BAD_HANDLE if handle is not valid
** NFA_STATUS_FAILED otherwise
**
*******************************************************************************/
NFC_API extern tNFA_STATUS NFA_P2pSetLocalBusy (tNFA_HANDLE conn_handle,
BOOLEAN is_busy);
/*******************************************************************************
**
** Function NFA_P2pGetLinkInfo
**
** Description This function is called to get local/remote link MIU and
** Well-Known Service list encoded as a 16-bit field of connected LLCP.
** NFA_P2P_LINK_INFO_EVT will be returned.
**
** Returns NFA_STATUS_OK if successfully initiated
** NFA_STATUS_BAD_HANDLE if server or client is not registered
** NFA_STATUS_FAILED otherwise
**
*******************************************************************************/
NFC_API extern tNFA_STATUS NFA_P2pGetLinkInfo (tNFA_HANDLE handle);
/*******************************************************************************
**
** Function NFA_P2pGetRemoteSap
**
** Description This function is called to get SAP associated by service name
** on connected remote LLCP.
** NFA_P2P_SDP_EVT will be returned.
**
** Returns NFA_STATUS_OK if successfully initiated
** NFA_STATUS_BAD_HANDLE if server or client is not registered
** NFA_STATUS_FAILED otherwise
**
*******************************************************************************/
NFC_API extern tNFA_STATUS NFA_P2pGetRemoteSap (tNFA_HANDLE handle,
char *p_service_name);
/*******************************************************************************
**
** Function NFA_P2pSetLLCPConfig
**
** Description This function is called to change LLCP config parameters.
** Application must call while LLCP is not activated.
**
** Parameters descriptions (default value)
** - Local Link MIU (LLCP_MIU)
** - Option parameter (LLCP_OPT_VALUE)
** - Response Waiting Time Index (LLCP_WAITING_TIME)
** - Local Link Timeout (LLCP_LTO_VALUE)
** - Inactivity Timeout as initiator role (LLCP_INIT_INACTIVITY_TIMEOUT)
** - Inactivity Timeout as target role (LLCP_TARGET_INACTIVITY_TIMEOUT)
** - Delay SYMM response (LLCP_DELAY_RESP_TIME)
** - Data link connection timeout (LLCP_DATA_LINK_CONNECTION_TOUT)
** - Delay timeout to send first PDU as initiator (LLCP_DELAY_TIME_TO_SEND_FIRST_PDU)
**
** Returns NFA_STATUS_OK if successfully initiated
** NFA_STATUS_FAILED otherwise
**
*******************************************************************************/
NFC_API extern tNFA_STATUS NFA_P2pSetLLCPConfig (UINT16 link_miu,
UINT8 opt,
UINT8 wt,
UINT16 link_timeout,
UINT16 inact_timeout_init,
UINT16 inact_timeout_target,
UINT16 symm_delay,
UINT16 data_link_timeout,
UINT16 delay_first_pdu_timeout);
/*******************************************************************************
**
** Function NFA_P2pGetLLCPConfig
**
** Description This function is called to read LLCP config parameters.
**
** Parameters descriptions
** - Local Link MIU
** - Option parameter
** - Response Waiting Time Index
** - Local Link Timeout
** - Inactivity Timeout as initiator role
** - Inactivity Timeout as target role
** - Delay SYMM response
** - Data link connection timeout
** - Delay timeout to send first PDU as initiator
**
** Returns None
**
*******************************************************************************/
NFC_API extern void NFA_P2pGetLLCPConfig (UINT16 *p_link_miu,
UINT8 *p_opt,
UINT8 *p_wt,
UINT16 *p_link_timeout,
UINT16 *p_inact_timeout_init,
UINT16 *p_inact_timeout_target,
UINT16 *p_symm_delay,
UINT16 *p_data_link_timeout,
UINT16 *p_delay_first_pdu_timeout);
/*******************************************************************************
**
** Function NFA_P2pSetTraceLevel
**
** Description This function sets the trace level for P2P. If called with
** a value of 0xFF, it simply returns the current trace level.
**
** Returns The new or current trace level
**
*******************************************************************************/
NFC_API extern UINT8 NFA_P2pSetTraceLevel (UINT8 new_level);
#ifdef __cplusplus
}
#endif
#endif /* NFA_P2P_API_H */