/****************************************************************************** * * 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 file contains the LLCP API definitions * ******************************************************************************/ #ifndef LLCP_API_H #define LLCP_API_H #include "nfc_target.h" #include "llcp_defs.h" /***************************************************************************** ** Constants *****************************************************************************/ #define LLCP_STATUS_SUCCESS 0 /* Successfully done */ #define LLCP_STATUS_FAIL 1 /* Failed without specific reason */ #define LLCP_STATUS_CONGESTED 2 /* Data link is congested */ typedef UINT8 tLLCP_STATUS; #define LLCP_MIN_OFFSET (NCI_MSG_OFFSET_SIZE + NCI_DATA_HDR_SIZE + LLCP_PDU_HEADER_SIZE + LLCP_SEQUENCE_SIZE) #define LLCP_INVALID_SAP 0xFF /* indication of failure to allocate data link resource */ /***************************************************************************** ** Type Definitions *****************************************************************************/ typedef struct { BOOLEAN is_initiator; /* TRUE if we are POLL mode */ UINT8 max_payload_size; /* 64, 128, 192 or 254 */ UINT8 waiting_time; UINT8 *p_gen_bytes; UINT8 gen_bytes_len; } tLLCP_ACTIVATE_CONFIG; typedef struct { UINT16 miu; /* Local receiving MIU */ UINT8 rw; /* Local receiving window */ char sn[LLCP_MAX_SN_LEN + 1]; /* Service name to connect */ } tLLCP_CONNECTION_PARAMS; /********************************* ** Callback Functions Prototypes **********************************/ /* Link Management Callback Events */ #define LLCP_LINK_ACTIVATION_FAILED_EVT 0x00 /* Fail to activate link */ #define LLCP_LINK_ACTIVATION_COMPLETE_EVT 0x01 /* LLCP Link is activated */ #define LLCP_LINK_DEACTIVATED_EVT 0x02 /* LLCP Link is deactivated */ #define LLCP_LINK_FIRST_PACKET_RECEIVED_EVT 0x03 /* First LLCP packet received from remote */ /* Link Management Callback Reasons */ #define LLCP_LINK_SUCCESS 0x00 /* Success */ #define LLCP_LINK_VERSION_FAILED 0x01 /* Failed to agree version */ #define LLCP_LINK_BAD_GEN_BYTES 0x02 /* Failed to parse received general bytes */ #define LLCP_LINK_INTERNAL_ERROR 0x03 /* internal error */ #define LLCP_LINK_LOCAL_INITIATED 0x04 /* Link has been deactivated by local */ #define LLCP_LINK_REMOTE_INITIATED 0x05 /* Link has been deactivated by remote */ #define LLCP_LINK_TIMEOUT 0x06 /* Link has been deactivated by timeout */ #define LLCP_LINK_FRAME_ERROR 0x07 /* Link has been deactivated by frame error */ #define LLCP_LINK_RF_LINK_LOSS_NO_RX_LLC 0x08 /* RF link loss without any rx LLC PDU */ #define LLCP_LINK_RF_TRANSMISSION_ERR NFC_STATUS_RF_TRANSMISSION_ERR #define LLCP_LINK_RF_PROTOCOL_ERR NFC_STATUS_RF_PROTOCOL_ERR #define LLCP_LINK_RF_TIMEOUT NFC_STATUS_TIMEOUT #define LLCP_LINK_RF_LINK_LOSS_ERR NFC_STATUS_LINK_LOSS typedef void (tLLCP_LINK_CBACK) (UINT8 event, UINT8 reason); /* Minimum length of Gen Bytes for LLCP */ /* In CE4 low power mode, NFCC can store up to 21 bytes */ #define LLCP_MIN_GEN_BYTES 20 /* Service Access Point (SAP) Callback Events */ #define LLCP_SAP_EVT_DATA_IND 0x00 /* Received data on SAP */ #define LLCP_SAP_EVT_CONNECT_IND 0x01 /* Connection request from peer */ #define LLCP_SAP_EVT_CONNECT_RESP 0x02 /* Connection accepted by peer */ #define LLCP_SAP_EVT_DISCONNECT_IND 0x03 /* Received disconnect request */ #define LLCP_SAP_EVT_DISCONNECT_RESP 0x04 /* Received disconnect response */ #define LLCP_SAP_EVT_CONGEST 0x05 /* congested status is changed */ #define LLCP_SAP_EVT_LINK_STATUS 0x06 /* Change of LLCP Link status */ #define LLCP_SAP_EVT_TX_COMPLETE 0x07 /* tx queue is empty and all PDU is acked */ #define LLCP_LINK_TYPE_LOGICAL_DATA_LINK 0x01 #define LLCP_LINK_TYPE_DATA_LINK_CONNECTION 0x02 typedef struct { UINT8 event; /* LLCP_SAP_EVT_DATA_IND */ UINT8 local_sap; /* SAP of local device */ UINT8 remote_sap; /* SAP of remote device */ UINT8 link_type; /* link type */ } tLLCP_SAP_DATA_IND; typedef struct { UINT8 event; /* LLCP_SAP_EVT_CONNECT_IND */ UINT8 server_sap; /* SAP of local server */ UINT8 local_sap; /* SAP of local device */ UINT8 remote_sap; /* SAP of remote device */ UINT16 miu; /* MIU of peer device */ UINT8 rw; /* RW of peer device */ char *p_service_name; /* Service name (only for SDP) */ } tLLCP_SAP_CONNECT_IND; typedef struct { UINT8 event; /* LLCP_SAP_EVT_CONNECT_RESP */ UINT8 local_sap; /* SAP of local device */ UINT8 remote_sap; /* SAP of remote device */ UINT16 miu; /* MIU of peer device */ UINT8 rw; /* RW of peer device */ } tLLCP_SAP_CONNECT_RESP; #define LLCP_SAP_DISCONNECT_REASON_TIMEOUT 0x80 typedef struct { UINT8 event; /* LLCP_SAP_EVT_DISCONNECT_IND */ UINT8 local_sap; /* SAP of local device */ UINT8 remote_sap; /* SAP of remote device */ } tLLCP_SAP_DISCONNECT_IND; typedef struct { UINT8 event; /* LLCP_SAP_EVT_DISCONNECT_RESP */ UINT8 local_sap; /* SAP of local device */ UINT8 remote_sap; /* SAP of remote device */ UINT8 reason; /* Reason of DM PDU if not timeout */ } tLLCP_SAP_DISCONNECT_RESP; typedef struct { UINT8 event; /* LLCP_SAP_EVT_CONGEST */ UINT8 local_sap; /* SAP of local device */ UINT8 remote_sap; /* SAP of remote device */ BOOLEAN is_congested; /* TRUE if congested */ UINT8 link_type; /* congested link type */ } tLLCP_SAP_CONGEST; typedef struct { UINT8 event; /* LLCP_SAP_EVT_LINK_STATUS */ UINT8 local_sap; /* SAP of local device */ BOOLEAN is_activated; /* TRUE if LLCP link is activated */ BOOLEAN is_initiator; /* TRUE if local LLCP is initiator */ } tLLCP_SAP_LINK_STATUS; typedef struct { UINT8 event; /* LLCP_SAP_EVT_TX_COMPLETE */ UINT8 local_sap; /* SAP of local device */ UINT8 remote_sap; /* SAP of remote device */ } tLLCP_SAP_TX_COMPLETE; typedef struct { UINT8 event; /* event */ UINT8 local_sap; /* SAP of local device */ } tLLCP_SAP_HEADER; typedef union { tLLCP_SAP_HEADER hdr; /* common header */ tLLCP_SAP_DATA_IND data_ind; /* LLCP_SAP_EVT_DATA_IND */ tLLCP_SAP_CONNECT_IND connect_ind; /* LLCP_SAP_EVT_CONNECT_IND */ tLLCP_SAP_CONNECT_RESP connect_resp; /* LLCP_SAP_EVT_CONNECT_RESP */ tLLCP_SAP_DISCONNECT_IND disconnect_ind; /* LLCP_SAP_EVT_DISCONNECT_IND */ tLLCP_SAP_DISCONNECT_RESP disconnect_resp; /* LLCP_SAP_EVT_DISCONNECT_RESP */ tLLCP_SAP_CONGEST congest; /* LLCP_SAP_EVT_CONGEST */ tLLCP_SAP_LINK_STATUS link_status; /* LLCP_SAP_EVT_LINK_STATUS */ tLLCP_SAP_TX_COMPLETE tx_complete; /* LLCP_SAP_EVT_TX_COMPLETE */ } tLLCP_SAP_CBACK_DATA; typedef void (tLLCP_APP_CBACK) (tLLCP_SAP_CBACK_DATA *p_data); /* Service Discovery Callback */ typedef void (tLLCP_SDP_CBACK) (UINT8 tid, UINT8 remote_sap); /* LLCP DTA Callback - notify DTA responded SNL for connectionless echo service */ typedef void (tLLCP_DTA_CBACK) (void); /***************************************************************************** ** External Function Declarations *****************************************************************************/ #ifdef __cplusplus extern "C" { #endif /******************************************************************************* ** ** Function LLCP_SetConfig ** ** Description Set configuration parameters for LLCP ** - Local Link MIU ** - Option parameter ** - 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 void ** *******************************************************************************/ LLCP_API extern void LLCP_SetConfig (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 LLCP_GetConfig ** ** Description Get configuration parameters for LLCP ** - 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 void ** *******************************************************************************/ LLCP_API extern void LLCP_GetConfig (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 LLCP_GetDiscoveryConfig ** ** Description Returns discovery config for LLCP MAC link activation ** This function is called to get general bytes for NFC_PMID_ATR_REQ_GEN_BYTES ** or NFC_PMID_ATR_RES_GEN_BYTES before starting discovery. ** ** wt:Waiting time 0 - 8, only for listen ** p_gen_bytes: pointer to store LLCP magic number and paramters ** p_gen_bytes_len: length of buffer for gen bytes as input ** (NOTE:it must be bigger than LLCP_MIN_GEN_BYTES) ** actual gen bytes size as output ** ** Restrictions on the use of ISO 18092 ** 1. The DID features shall not be used. ** 2. the NAD features shall not be used. ** 3. Frame waiting time extentions (WTX) shall not be used. ** ** Returns None ** *******************************************************************************/ LLCP_API extern void LLCP_GetDiscoveryConfig (UINT8 *p_wt, UINT8 *p_gen_bytes, UINT8 *p_gen_bytes_len); /******************************************************************************* ** ** Function LLCP_ActivateLink ** ** Description This function will activate LLCP link with LR, WT and Gen Bytes ** in activation NTF from NFCC. ** ** LLCP_LINK_ACTIVATION_COMPLETE_EVT will be returned through ** callback function if successful. ** Otherwise, LLCP_LINK_ACTIVATION_FAILED_EVT will be returned. ** ** Returns LLCP_STATUS_SUCCESS if success ** *******************************************************************************/ LLCP_API extern tLLCP_STATUS LLCP_ActivateLink (tLLCP_ACTIVATE_CONFIG config, tLLCP_LINK_CBACK *p_link_cback); /******************************************************************************* ** ** Function LLCP_DeactivateLink ** ** Description Deactivate LLCP link ** ** LLCP_LINK_DEACTIVATED_EVT will be returned through callback ** when LLCP link is deactivated. Then NFC link may be deactivated. ** ** Returns LLCP_STATUS_SUCCESS if success ** *******************************************************************************/ LLCP_API extern tLLCP_STATUS LLCP_DeactivateLink (void); /******************************************************************************* ** ** Function LLCP_RegisterServer ** ** Description Register server and callback function ** ** reg_sap : Well-Known SAP except LM and SDP (0x02 - 0x0F) ** Advertized by SDP (0x10 - 0x1F) ** LLCP_INVALID_SAP, LLCP will allocate between 0x10 and 0x1F ** link_type : LLCP_LINK_TYPE_LOGICAL_DATA_LINK ** and/or LLCP_LINK_TYPE_DATA_LINK_CONNECTION ** p_service_name : Null-terminated string up to LLCP_MAX_SN_LEN ** ** Returns SAP between 0x02 and 0x1F, if success ** LLCP_INVALID_SAP, otherwise ** *******************************************************************************/ LLCP_API extern UINT8 LLCP_RegisterServer (UINT8 reg_sap, UINT8 link_type, char *p_service_name, tLLCP_APP_CBACK *p_sap_cback); /******************************************************************************* ** ** Function LLCP_RegisterClient ** ** Description Register client and callback function ** ** link_type : LLCP_LINK_TYPE_LOGICAL_DATA_LINK ** and/or LLCP_LINK_TYPE_DATA_LINK_CONNECTION ** ** Returns SAP between 0x20 and 0x3F, if success ** LLCP_INVALID_SAP, otherwise ** *******************************************************************************/ LLCP_API extern UINT8 LLCP_RegisterClient (UINT8 link_type, tLLCP_APP_CBACK *p_sap_cback); /******************************************************************************* ** ** Function LLCP_Deregister ** ** Description Deregister server or client ** ** ** Returns LLCP_STATUS_SUCCESS if success ** *******************************************************************************/ LLCP_API extern tLLCP_STATUS LLCP_Deregister (UINT8 sap); /******************************************************************************* ** ** Function LLCP_IsLogicalLinkCongested ** ** Description Check if logical link is congested ** ** ** Returns TRUE if congested ** *******************************************************************************/ LLCP_API extern BOOLEAN LLCP_IsLogicalLinkCongested (UINT8 local_sap, UINT8 num_pending_ui_pdu, UINT8 total_pending_ui_pdu, UINT8 total_pending_i_pdu); /******************************************************************************* ** ** Function LLCP_SendUI ** ** Description Send connnectionless data to DSAP ** ** ** Returns LLCP_STATUS_SUCCESS if success ** LLCP_STATUS_CONGESTED if logical link is congested ** LLCP_STATUS_FAIL, otherwise ** *******************************************************************************/ LLCP_API extern tLLCP_STATUS LLCP_SendUI (UINT8 ssap, UINT8 dsap, BT_HDR *p_buf); /******************************************************************************* ** ** Function LLCP_ReadLogicalLinkData ** ** Description Read information of UI PDU for local SAP ** ** - Remote SAP who sent UI PDU is returned. ** - Information of UI PDU up to max_data_len is copied into p_data. ** - Information of next UI PDU is not concatenated. ** - Recommended max_data_len is link MIU of local device ** ** Returns TRUE if more information of UI PDU or more UI PDU in queue ** *******************************************************************************/ LLCP_API extern BOOLEAN LLCP_ReadLogicalLinkData (UINT8 local_sap, UINT32 max_data_len, UINT8 *p_remote_sap, UINT32 *p_data_len, UINT8 *p_data); /******************************************************************************* ** ** Function LLCP_FlushLogicalLinkRxData ** ** Description Discard received data in logical data link of local SAP ** ** ** Returns length of data flushed ** *******************************************************************************/ LLCP_API extern UINT32 LLCP_FlushLogicalLinkRxData (UINT8 local_sap); /******************************************************************************* ** ** Function LLCP_ConnectReq ** ** Description Create data link connection between registered SAP and DSAP ** in peer LLCP, ** ** ** Returns LLCP_STATUS_SUCCESS if success ** LLCP_STATUS_FAIL, otherwise ** *******************************************************************************/ LLCP_API extern tLLCP_STATUS LLCP_ConnectReq (UINT8 reg_sap, UINT8 dsap, tLLCP_CONNECTION_PARAMS *p_params); /******************************************************************************* ** ** Function LLCP_ConnectCfm ** ** Description Accept connection request from peer LLCP ** ** ** Returns LLCP_STATUS_SUCCESS if success ** LLCP_STATUS_FAIL, otherwise ** *******************************************************************************/ LLCP_API extern tLLCP_STATUS LLCP_ConnectCfm (UINT8 local_sap, UINT8 remote_sap, tLLCP_CONNECTION_PARAMS *p_params); /******************************************************************************* ** ** Function LLCP_ConnectReject ** ** Description Reject connection request from peer LLCP ** ** reason : LLCP_SAP_DM_REASON_APP_REJECTED ** LLCP_SAP_DM_REASON_PERM_REJECT_THIS ** LLCP_SAP_DM_REASON_PERM_REJECT_ANY ** LLCP_SAP_DM_REASON_TEMP_REJECT_THIS ** LLCP_SAP_DM_REASON_TEMP_REJECT_ANY ** ** Returns LLCP_STATUS_SUCCESS if success ** LLCP_STATUS_FAIL, otherwise ** *******************************************************************************/ LLCP_API extern tLLCP_STATUS LLCP_ConnectReject (UINT8 local_sap, UINT8 remote_sap, UINT8 reason); /******************************************************************************* ** ** Function LLCP_IsDataLinkCongested ** ** Description Check if data link is congested ** ** ** Returns TRUE if congested ** *******************************************************************************/ LLCP_API extern BOOLEAN LLCP_IsDataLinkCongested (UINT8 local_sap, UINT8 remote_sap, UINT8 num_pending_i_pdu, UINT8 total_pending_ui_pdu, UINT8 total_pending_i_pdu); /******************************************************************************* ** ** Function LLCP_SendData ** ** Description Send connection-oriented data ** ** ** Returns LLCP_STATUS_SUCCESS if success ** LLCP_STATUS_CONGESTED if data link is congested ** *******************************************************************************/ LLCP_API extern tLLCP_STATUS LLCP_SendData (UINT8 local_sap, UINT8 remote_sap, BT_HDR *p_buf); /******************************************************************************* ** ** Function LLCP_ReadDataLinkData ** ** Description Read information of I PDU for data link connection ** ** - Information of I PDU up to max_data_len is copied into p_data. ** - Information of next I PDU is not concatenated. ** - Recommended max_data_len is data link connection MIU of local ** end point ** ** Returns TRUE if more data in queue ** *******************************************************************************/ LLCP_API extern BOOLEAN LLCP_ReadDataLinkData (UINT8 local_sap, UINT8 remote_sap, UINT32 max_data_len, UINT32 *p_data_len, UINT8 *p_data); /******************************************************************************* ** ** Function LLCP_FlushDataLinkRxData ** ** Description Discard received data in data link connection ** ** ** Returns length of rx data flushed ** *******************************************************************************/ LLCP_API extern UINT32 LLCP_FlushDataLinkRxData (UINT8 local_sap, UINT8 remote_sap); /******************************************************************************* ** ** Function LLCP_DisconnectReq ** ** Description Disconnect data link ** discard any pending data if flush is set to TRUE ** ** Returns LLCP_STATUS_SUCCESS if success ** *******************************************************************************/ LLCP_API extern tLLCP_STATUS LLCP_DisconnectReq (UINT8 local_sap, UINT8 remote_sap, BOOLEAN flush); /******************************************************************************* ** ** Function LLCP_SetTxCompleteNtf ** ** Description This function is called to get LLCP_SAP_EVT_TX_COMPLETE ** when Tx queue is empty and all PDU is acked. ** This is one time event, so upper layer shall call this function ** again to get next LLCP_SAP_EVT_TX_COMPLETE. ** ** Returns LLCP_STATUS_SUCCESS if success ** *******************************************************************************/ LLCP_API extern tLLCP_STATUS LLCP_SetTxCompleteNtf (UINT8 local_sap, UINT8 remote_sap); /******************************************************************************* ** ** Function LLCP_SetLocalBusyStatus ** ** Description Set local busy status ** ** ** Returns LLCP_STATUS_SUCCESS if success ** *******************************************************************************/ LLCP_API extern tLLCP_STATUS LLCP_SetLocalBusyStatus (UINT8 local_sap, UINT8 remote_sap, BOOLEAN is_busy); /******************************************************************************* ** ** Function LLCP_GetRemoteWKS ** ** Description Return well-known service bitmap of connected device ** ** ** Returns WKS bitmap if success ** *******************************************************************************/ LLCP_API extern UINT16 LLCP_GetRemoteWKS (void); /******************************************************************************* ** ** Function LLCP_GetRemoteLSC ** ** Description Return link service class of connected device ** ** ** Returns link service class ** *******************************************************************************/ LLCP_API extern UINT8 LLCP_GetRemoteLSC (void); /******************************************************************************* ** ** Function LLCP_GetRemoteVersion ** ** Description Return LLCP version of connected device ** ** ** Returns LLCP version ** *******************************************************************************/ LLCP_API extern UINT8 LLCP_GetRemoteVersion (void); /******************************************************************************* ** ** Function LLCP_GetLinkMIU ** ** Description Return local and remote link MIU ** ** ** Returns None ** *******************************************************************************/ LLCP_API extern void LLCP_GetLinkMIU (UINT16 *p_local_link_miu, UINT16 *p_remote_link_miu); /******************************************************************************* ** ** Function LLCP_DiscoverService ** ** Description Return SAP of service name in connected device through callback ** ** ** Returns LLCP_STATUS_SUCCESS if success ** *******************************************************************************/ LLCP_API extern tLLCP_STATUS LLCP_DiscoverService (char *p_name, tLLCP_SDP_CBACK *p_cback, UINT8 *p_tid); /******************************************************************************* ** ** Function LLCP_SetTraceLevel ** ** Description This function sets the trace level for LLCP. If called with ** a value of 0xFF, it simply returns the current trace level. ** ** Returns The new or current trace level ** *******************************************************************************/ LLCP_API extern UINT8 LLCP_SetTraceLevel (UINT8 new_level); #if (LLCP_TEST_INCLUDED == TRUE) /******************************************************************************* ** ** Function LLCP_SetTestParams ** ** Description Set test parameters for LLCP ** ** ** Returns void ** *******************************************************************************/ LLCP_API extern void LLCP_SetTestParams (UINT8 version, UINT16 wks); #endif #ifdef __cplusplus } #endif #endif /* LLCP_API_H */