/******************************************************************************
 *
 *  Copyright (C) 2010-2012 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 private interface file for the NFA P2P.
 *
 ******************************************************************************/
#ifndef NFA_P2P_INT_H
#define NFA_P2P_INT_H

#if (defined (NFA_P2P_INCLUDED) && (NFA_P2P_INCLUDED==TRUE))
#include "nfa_p2p_api.h"
#include "nfa_dm_int.h"

/*****************************************************************************
**  Constants and data types
*****************************************************************************/
#define NFA_P2P_DEBUG   BT_TRACE_VERBOSE

/* NFA P2P LLCP link state */
enum
{
    NFA_P2P_LLCP_STATE_IDLE,
    NFA_P2P_LLCP_STATE_LISTENING,
    NFA_P2P_LLCP_STATE_ACTIVATED,

    NFA_P2P_LLCP_STATE_MAX
};

typedef UINT8 tNFA_P2P_LLCP_STATE;

/* NFA P2P events */
enum
{
    NFA_P2P_API_REG_SERVER_EVT  = NFA_SYS_EVT_START (NFA_ID_P2P),
    NFA_P2P_API_REG_CLIENT_EVT,
    NFA_P2P_API_DEREG_EVT,
    NFA_P2P_API_ACCEPT_CONN_EVT,
    NFA_P2P_API_REJECT_CONN_EVT,
    NFA_P2P_API_DISCONNECT_EVT,
    NFA_P2P_API_CONNECT_EVT,
    NFA_P2P_API_SEND_UI_EVT,
    NFA_P2P_API_SEND_DATA_EVT,
    NFA_P2P_API_SET_LOCAL_BUSY_EVT,
    NFA_P2P_API_GET_LINK_INFO_EVT,
    NFA_P2P_API_GET_REMOTE_SAP_EVT,
    NFA_P2P_API_SET_LLCP_CFG_EVT,

    NFA_P2P_LAST_EVT
};

/* data type for NFA_P2P_API_REG_SERVER_EVT */
typedef struct
{
    BT_HDR              hdr;
    UINT8               server_sap;
    tNFA_P2P_LINK_TYPE  link_type;
    char                service_name[LLCP_MAX_SN_LEN + 1];
    tNFA_P2P_CBACK     *p_cback;
} tNFA_P2P_API_REG_SERVER;

/* data type for NFA_P2P_API_REG_CLIENT_EVT */
typedef struct
{
    BT_HDR              hdr;
    tNFA_P2P_LINK_TYPE  link_type;
    tNFA_P2P_CBACK     *p_cback;
} tNFA_P2P_API_REG_CLIENT;

/* data type for NFA_P2P_API_DEREG_EVT */
typedef struct
{
    BT_HDR              hdr;
    tNFA_HANDLE         handle;
} tNFA_P2P_API_DEREG;

/* data type for NFA_P2P_API_ACCEPT_CONN_EVT */
typedef struct
{
    BT_HDR              hdr;
    tNFA_HANDLE         conn_handle;
    UINT16              miu;
    UINT8               rw;
} tNFA_P2P_API_ACCEPT_CONN;

/* data type for NFA_P2P_API_REJECT_CONN_EVT */
typedef struct
{
    BT_HDR              hdr;
    tNFA_HANDLE         conn_handle;
} tNFA_P2P_API_REJECT_CONN;

/* data type for NFA_P2P_API_DISCONNECT_EVT */
typedef struct
{
    BT_HDR              hdr;
    tNFA_HANDLE         conn_handle;
    BOOLEAN             flush;
} tNFA_P2P_API_DISCONNECT;

/* data type for NFA_P2P_API_CONNECT_EVT */
typedef struct
{
    BT_HDR              hdr;
    tNFA_HANDLE         client_handle;
    char                service_name[LLCP_MAX_SN_LEN + 1];
    UINT8               dsap;
    UINT16              miu;
    UINT8               rw;
} tNFA_P2P_API_CONNECT;

/* data type for NFA_P2P_API_SEND_UI_EVT */
typedef struct
{
    BT_HDR              hdr;
    tNFA_HANDLE         handle;
    UINT8               dsap;
    BT_HDR             *p_msg;
} tNFA_P2P_API_SEND_UI;

/* data type for NFA_P2P_API_SEND_DATA_EVT */
typedef struct
{
    BT_HDR              hdr;
    tNFA_HANDLE         conn_handle;
    BT_HDR             *p_msg;
} tNFA_P2P_API_SEND_DATA;

/* data type for NFA_P2P_API_SET_LOCAL_BUSY_EVT */
typedef struct
{
    BT_HDR              hdr;
    tNFA_HANDLE         conn_handle;
    BOOLEAN             is_busy;
} tNFA_P2P_API_SET_LOCAL_BUSY;

/* data type for NFA_P2P_API_GET_LINK_INFO_EVT */
typedef struct
{
    BT_HDR              hdr;
    tNFA_HANDLE         handle;
} tNFA_P2P_API_GET_LINK_INFO;

/* data type for NFA_P2P_API_GET_REMOTE_SAP_EVT */
typedef struct
{
    BT_HDR              hdr;
    tNFA_HANDLE         handle;
    char                service_name[LLCP_MAX_SN_LEN + 1];
} tNFA_P2P_API_GET_REMOTE_SAP;

/* data type for NFA_P2P_API_SET_LLCP_CFG_EVT */
typedef struct
{
    BT_HDR              hdr;
    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;
} tNFA_P2P_API_SET_LLCP_CFG;

/* union of all event data types */
typedef union
{
    BT_HDR                      hdr;
    tNFA_P2P_API_REG_SERVER     api_reg_server;
    tNFA_P2P_API_REG_CLIENT     api_reg_client;
    tNFA_P2P_API_DEREG          api_dereg;
    tNFA_P2P_API_ACCEPT_CONN    api_accept;
    tNFA_P2P_API_REJECT_CONN    api_reject;
    tNFA_P2P_API_DISCONNECT     api_disconnect;
    tNFA_P2P_API_CONNECT        api_connect;
    tNFA_P2P_API_SEND_UI        api_send_ui;
    tNFA_P2P_API_SEND_DATA      api_send_data;
    tNFA_P2P_API_SET_LOCAL_BUSY api_local_busy;
    tNFA_P2P_API_GET_LINK_INFO  api_link_info;
    tNFA_P2P_API_GET_REMOTE_SAP api_remote_sap;
    tNFA_P2P_API_SET_LLCP_CFG   api_set_llcp_cfg;
} tNFA_P2P_MSG;

/*****************************************************************************
**  control block
*****************************************************************************/
#define NFA_P2P_HANDLE_FLAG_CONN             0x80   /* Bit flag for connection handle           */

/* NFA P2P Connection block */
#define NFA_P2P_CONN_FLAG_IN_USE             0x01   /* Connection control block is used         */
#define NFA_P2P_CONN_FLAG_REMOTE_RW_ZERO     0x02   /* Remote set RW to 0 (flow off)            */
#define NFA_P2P_CONN_FLAG_CONGESTED          0x04   /* data link connection is congested        */

typedef struct
{
    UINT8               flags;                      /* internal flags for data link connection  */
    UINT8               local_sap;                  /* local SAP of data link connection        */
    UINT8               remote_sap;                 /* remote SAP of data link connection       */
    UINT16              remote_miu;                 /* MIU of remote end point                  */
    UINT8               num_pending_i_pdu;          /* number of tx I PDU not processed by NFA  */
} tNFA_P2P_CONN_CB;

/* NFA P2P SAP control block */
#define NFA_P2P_SAP_FLAG_SERVER             0x01    /* registered server                        */
#define NFA_P2P_SAP_FLAG_CLIENT             0x02    /* registered client                        */
#define NFA_P2P_SAP_FLAG_LLINK_CONGESTED    0x04    /* logical link connection is congested     */

typedef struct
{
    UINT8              flags;                       /* internal flags for local SAP             */
    tNFA_P2P_CBACK     *p_cback;                    /* callback function for local SAP          */
    UINT8              num_pending_ui_pdu;          /* number of tx UI PDU not processed by NFA */
} tNFA_P2P_SAP_CB;

/* NFA P2P SDP control block */
typedef struct
{
    UINT8            tid;                           /* transaction ID */
    UINT8            local_sap;
} tNFA_P2P_SDP_CB;

#define NFA_P2P_NUM_SAP         64

/* NFA P2P control block */
typedef struct
{
    tNFA_HANDLE         dm_disc_handle;

    tNFA_P2P_LLCP_STATE llcp_state;
    BOOLEAN             is_initiator;
    UINT16              local_link_miu;
    UINT16              remote_link_miu;

    tNFA_TECHNOLOGY_MASK listen_tech_mask;          /* for P2P listening */
    BOOLEAN             is_p2p_listening;
    BOOLEAN             is_cho_listening;
    BOOLEAN             is_snep_listening;

    tNFA_P2P_SAP_CB     sap_cb[NFA_P2P_NUM_SAP];
    tNFA_P2P_CONN_CB    conn_cb[LLCP_MAX_DATA_LINK];
    tNFA_P2P_SDP_CB     sdp_cb[LLCP_MAX_SDP_TRANSAC];

    UINT8               total_pending_ui_pdu;       /* total number of tx UI PDU not processed by NFA */
    UINT8               total_pending_i_pdu;        /* total number of tx I PDU not processed by NFA */

    UINT8               trace_level;
} tNFA_P2P_CB;

/*****************************************************************************
**  External variables
*****************************************************************************/

/* NFA P2P control block */
#if NFA_DYNAMIC_MEMORY == FALSE
extern tNFA_P2P_CB nfa_p2p_cb;
#else
extern tNFA_P2P_CB *nfa_p2p_cb_ptr;
#define nfa_p2p_cb (*nfa_p2p_cb_ptr)
#endif

/*****************************************************************************
**  External functions
*****************************************************************************/
/*
**  nfa_p2p_main.c
*/
void nfa_p2p_init (void);
void nfa_p2p_update_listen_tech (tNFA_TECHNOLOGY_MASK tech_mask);
void nfa_p2p_enable_listening (tNFA_SYS_ID sys_id, BOOLEAN update_wks);
void nfa_p2p_disable_listening (tNFA_SYS_ID sys_id, BOOLEAN update_wks);
void nfa_p2p_activate_llcp (tNFC_DISCOVER *p_data);
void nfa_p2p_deactivate_llcp (void);
void nfa_p2p_set_config (tNFA_DM_DISC_TECH_PROTO_MASK disc_mask);

/*
**  nfa_p2p_act.c
*/
void nfa_p2p_proc_llcp_data_ind (tLLCP_SAP_CBACK_DATA  *p_data);
void nfa_p2p_proc_llcp_connect_ind (tLLCP_SAP_CBACK_DATA  *p_data);
void nfa_p2p_proc_llcp_connect_resp (tLLCP_SAP_CBACK_DATA  *p_data);
void nfa_p2p_proc_llcp_disconnect_ind (tLLCP_SAP_CBACK_DATA  *p_data);
void nfa_p2p_proc_llcp_disconnect_resp (tLLCP_SAP_CBACK_DATA  *p_data);
void nfa_p2p_proc_llcp_congestion (tLLCP_SAP_CBACK_DATA  *p_data);
void nfa_p2p_proc_llcp_link_status (tLLCP_SAP_CBACK_DATA  *p_data);

BOOLEAN nfa_p2p_start_sdp (char *p_service_name, UINT8 local_sap);

BOOLEAN nfa_p2p_reg_server (tNFA_P2P_MSG *p_msg);
BOOLEAN nfa_p2p_reg_client (tNFA_P2P_MSG *p_msg);
BOOLEAN nfa_p2p_dereg (tNFA_P2P_MSG *p_msg);
BOOLEAN nfa_p2p_accept_connection (tNFA_P2P_MSG *p_msg);
BOOLEAN nfa_p2p_reject_connection (tNFA_P2P_MSG *p_msg);
BOOLEAN nfa_p2p_disconnect (tNFA_P2P_MSG *p_msg);
BOOLEAN nfa_p2p_create_data_link_connection (tNFA_P2P_MSG *p_msg);
BOOLEAN nfa_p2p_send_ui (tNFA_P2P_MSG *p_msg);
BOOLEAN nfa_p2p_send_data (tNFA_P2P_MSG *p_msg);
BOOLEAN nfa_p2p_set_local_busy (tNFA_P2P_MSG *p_msg);
BOOLEAN nfa_p2p_get_link_info (tNFA_P2P_MSG *p_msg);
BOOLEAN nfa_p2p_get_remote_sap (tNFA_P2P_MSG *p_msg);
BOOLEAN nfa_p2p_set_llcp_cfg (tNFA_P2P_MSG *p_msg);

#if (BT_TRACE_VERBOSE == TRUE)
char *nfa_p2p_evt_code (UINT16 evt_code);
#endif

#else

#define nfa_p2p_init ()
#define nfa_p2p_activate_llcp (a) {};
#define nfa_p2p_deactivate_llcp ()
#define nfa_p2p_set_config ()

#endif /* (defined (NFA_P2P_INCLUDED) && (NFA_P2P_INCLUDED==TRUE)) */
#endif /* NFA_P2P_INT_H */
