Home | History | Annotate | Download | only in int
      1 /******************************************************************************
      2  *
      3  *  Copyright (C) 2010-2014 Broadcom Corporation
      4  *
      5  *  Licensed under the Apache License, Version 2.0 (the "License");
      6  *  you may not use this file except in compliance with the License.
      7  *  You may obtain a copy of the License at:
      8  *
      9  *  http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  *  Unless required by applicable law or agreed to in writing, software
     12  *  distributed under the License is distributed on an "AS IS" BASIS,
     13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  *  See the License for the specific language governing permissions and
     15  *  limitations under the License.
     16  *
     17  ******************************************************************************/
     18 
     19 
     20 /******************************************************************************
     21  *
     22  *  This is the private interface file for the NFA P2P.
     23  *
     24  ******************************************************************************/
     25 #ifndef NFA_P2P_INT_H
     26 #define NFA_P2P_INT_H
     27 
     28 #if (defined (NFA_P2P_INCLUDED) && (NFA_P2P_INCLUDED==TRUE))
     29 #include "nfa_p2p_api.h"
     30 #include "nfa_dm_int.h"
     31 
     32 /*****************************************************************************
     33 **  Constants and data types
     34 *****************************************************************************/
     35 #define NFA_P2P_DEBUG   BT_TRACE_VERBOSE
     36 
     37 /* NFA P2P LLCP link state */
     38 enum
     39 {
     40     NFA_P2P_LLCP_STATE_IDLE,
     41     NFA_P2P_LLCP_STATE_LISTENING,
     42     NFA_P2P_LLCP_STATE_ACTIVATED,
     43 
     44     NFA_P2P_LLCP_STATE_MAX
     45 };
     46 
     47 typedef UINT8 tNFA_P2P_LLCP_STATE;
     48 
     49 /* NFA P2P events */
     50 enum
     51 {
     52     NFA_P2P_API_REG_SERVER_EVT  = NFA_SYS_EVT_START (NFA_ID_P2P),
     53     NFA_P2P_API_REG_CLIENT_EVT,
     54     NFA_P2P_API_DEREG_EVT,
     55     NFA_P2P_API_ACCEPT_CONN_EVT,
     56     NFA_P2P_API_REJECT_CONN_EVT,
     57     NFA_P2P_API_DISCONNECT_EVT,
     58     NFA_P2P_API_CONNECT_EVT,
     59     NFA_P2P_API_SEND_UI_EVT,
     60     NFA_P2P_API_SEND_DATA_EVT,
     61     NFA_P2P_API_SET_LOCAL_BUSY_EVT,
     62     NFA_P2P_API_GET_LINK_INFO_EVT,
     63     NFA_P2P_API_GET_REMOTE_SAP_EVT,
     64     NFA_P2P_API_SET_LLCP_CFG_EVT,
     65     NFA_P2P_INT_RESTART_RF_DISC_EVT,
     66 
     67     NFA_P2P_LAST_EVT
     68 };
     69 
     70 /* data type for NFA_P2P_API_REG_SERVER_EVT */
     71 typedef struct
     72 {
     73     BT_HDR              hdr;
     74     UINT8               server_sap;
     75     tNFA_P2P_LINK_TYPE  link_type;
     76     char                service_name[LLCP_MAX_SN_LEN + 1];
     77     tNFA_P2P_CBACK     *p_cback;
     78 } tNFA_P2P_API_REG_SERVER;
     79 
     80 /* data type for NFA_P2P_API_REG_CLIENT_EVT */
     81 typedef struct
     82 {
     83     BT_HDR              hdr;
     84     tNFA_P2P_LINK_TYPE  link_type;
     85     tNFA_P2P_CBACK     *p_cback;
     86 } tNFA_P2P_API_REG_CLIENT;
     87 
     88 /* data type for NFA_P2P_API_DEREG_EVT */
     89 typedef struct
     90 {
     91     BT_HDR              hdr;
     92     tNFA_HANDLE         handle;
     93 } tNFA_P2P_API_DEREG;
     94 
     95 /* data type for NFA_P2P_API_ACCEPT_CONN_EVT */
     96 typedef struct
     97 {
     98     BT_HDR              hdr;
     99     tNFA_HANDLE         conn_handle;
    100     UINT16              miu;
    101     UINT8               rw;
    102 } tNFA_P2P_API_ACCEPT_CONN;
    103 
    104 /* data type for NFA_P2P_API_REJECT_CONN_EVT */
    105 typedef struct
    106 {
    107     BT_HDR              hdr;
    108     tNFA_HANDLE         conn_handle;
    109 } tNFA_P2P_API_REJECT_CONN;
    110 
    111 /* data type for NFA_P2P_API_DISCONNECT_EVT */
    112 typedef struct
    113 {
    114     BT_HDR              hdr;
    115     tNFA_HANDLE         conn_handle;
    116     BOOLEAN             flush;
    117 } tNFA_P2P_API_DISCONNECT;
    118 
    119 /* data type for NFA_P2P_API_CONNECT_EVT */
    120 typedef struct
    121 {
    122     BT_HDR              hdr;
    123     tNFA_HANDLE         client_handle;
    124     char                service_name[LLCP_MAX_SN_LEN + 1];
    125     UINT8               dsap;
    126     UINT16              miu;
    127     UINT8               rw;
    128 } tNFA_P2P_API_CONNECT;
    129 
    130 /* data type for NFA_P2P_API_SEND_UI_EVT */
    131 typedef struct
    132 {
    133     BT_HDR              hdr;
    134     tNFA_HANDLE         handle;
    135     UINT8               dsap;
    136     BT_HDR             *p_msg;
    137 } tNFA_P2P_API_SEND_UI;
    138 
    139 /* data type for NFA_P2P_API_SEND_DATA_EVT */
    140 typedef struct
    141 {
    142     BT_HDR              hdr;
    143     tNFA_HANDLE         conn_handle;
    144     BT_HDR             *p_msg;
    145 } tNFA_P2P_API_SEND_DATA;
    146 
    147 /* data type for NFA_P2P_API_SET_LOCAL_BUSY_EVT */
    148 typedef struct
    149 {
    150     BT_HDR              hdr;
    151     tNFA_HANDLE         conn_handle;
    152     BOOLEAN             is_busy;
    153 } tNFA_P2P_API_SET_LOCAL_BUSY;
    154 
    155 /* data type for NFA_P2P_API_GET_LINK_INFO_EVT */
    156 typedef struct
    157 {
    158     BT_HDR              hdr;
    159     tNFA_HANDLE         handle;
    160 } tNFA_P2P_API_GET_LINK_INFO;
    161 
    162 /* data type for NFA_P2P_API_GET_REMOTE_SAP_EVT */
    163 typedef struct
    164 {
    165     BT_HDR              hdr;
    166     tNFA_HANDLE         handle;
    167     char                service_name[LLCP_MAX_SN_LEN + 1];
    168 } tNFA_P2P_API_GET_REMOTE_SAP;
    169 
    170 /* data type for NFA_P2P_API_SET_LLCP_CFG_EVT */
    171 typedef struct
    172 {
    173     BT_HDR              hdr;
    174     UINT16              link_miu;
    175     UINT8               opt;
    176     UINT8               wt;
    177     UINT16              link_timeout;
    178     UINT16              inact_timeout_init;
    179     UINT16              inact_timeout_target;
    180     UINT16              symm_delay;
    181     UINT16              data_link_timeout;
    182     UINT16              delay_first_pdu_timeout;
    183 } tNFA_P2P_API_SET_LLCP_CFG;
    184 
    185 /* union of all event data types */
    186 typedef union
    187 {
    188     BT_HDR                      hdr;
    189     tNFA_P2P_API_REG_SERVER     api_reg_server;
    190     tNFA_P2P_API_REG_CLIENT     api_reg_client;
    191     tNFA_P2P_API_DEREG          api_dereg;
    192     tNFA_P2P_API_ACCEPT_CONN    api_accept;
    193     tNFA_P2P_API_REJECT_CONN    api_reject;
    194     tNFA_P2P_API_DISCONNECT     api_disconnect;
    195     tNFA_P2P_API_CONNECT        api_connect;
    196     tNFA_P2P_API_SEND_UI        api_send_ui;
    197     tNFA_P2P_API_SEND_DATA      api_send_data;
    198     tNFA_P2P_API_SET_LOCAL_BUSY api_local_busy;
    199     tNFA_P2P_API_GET_LINK_INFO  api_link_info;
    200     tNFA_P2P_API_GET_REMOTE_SAP api_remote_sap;
    201     tNFA_P2P_API_SET_LLCP_CFG   api_set_llcp_cfg;
    202 } tNFA_P2P_MSG;
    203 
    204 /*****************************************************************************
    205 **  control block
    206 *****************************************************************************/
    207 #define NFA_P2P_HANDLE_FLAG_CONN             0x80   /* Bit flag for connection handle           */
    208 
    209 /* NFA P2P Connection block */
    210 #define NFA_P2P_CONN_FLAG_IN_USE             0x01   /* Connection control block is used         */
    211 #define NFA_P2P_CONN_FLAG_REMOTE_RW_ZERO     0x02   /* Remote set RW to 0 (flow off)            */
    212 #define NFA_P2P_CONN_FLAG_CONGESTED          0x04   /* data link connection is congested        */
    213 
    214 typedef struct
    215 {
    216     UINT8               flags;                      /* internal flags for data link connection  */
    217     UINT8               local_sap;                  /* local SAP of data link connection        */
    218     UINT8               remote_sap;                 /* remote SAP of data link connection       */
    219     UINT16              remote_miu;                 /* MIU of remote end point                  */
    220     UINT8               num_pending_i_pdu;          /* number of tx I PDU not processed by NFA  */
    221 } tNFA_P2P_CONN_CB;
    222 
    223 /* NFA P2P SAP control block */
    224 #define NFA_P2P_SAP_FLAG_SERVER             0x01    /* registered server                        */
    225 #define NFA_P2P_SAP_FLAG_CLIENT             0x02    /* registered client                        */
    226 #define NFA_P2P_SAP_FLAG_LLINK_CONGESTED    0x04    /* logical link connection is congested     */
    227 
    228 typedef struct
    229 {
    230     UINT8              flags;                       /* internal flags for local SAP             */
    231     tNFA_P2P_CBACK     *p_cback;                    /* callback function for local SAP          */
    232     UINT8              num_pending_ui_pdu;          /* number of tx UI PDU not processed by NFA */
    233 } tNFA_P2P_SAP_CB;
    234 
    235 /* NFA P2P SDP control block */
    236 typedef struct
    237 {
    238     UINT8            tid;                           /* transaction ID */
    239     UINT8            local_sap;
    240 } tNFA_P2P_SDP_CB;
    241 
    242 #define NFA_P2P_NUM_SAP         64
    243 
    244 /* NFA P2P control block */
    245 typedef struct
    246 {
    247     tNFA_HANDLE         dm_disc_handle;
    248 
    249     tNFA_DM_RF_DISC_STATE rf_disc_state;
    250     tNFA_P2P_LLCP_STATE llcp_state;
    251     BOOLEAN             is_initiator;
    252     BOOLEAN             is_active_mode;
    253     UINT16              local_link_miu;
    254     UINT16              remote_link_miu;
    255 
    256     tNFA_TECHNOLOGY_MASK listen_tech_mask;          /* for P2P listening */
    257     tNFA_TECHNOLOGY_MASK listen_tech_mask_to_restore;/* to retry without active listen mode */
    258     TIMER_LIST_ENT      active_listen_restore_timer; /* timer to restore active listen mode */
    259     BOOLEAN             is_p2p_listening;
    260     BOOLEAN             is_cho_listening;
    261     BOOLEAN             is_snep_listening;
    262 
    263     tNFA_P2P_SAP_CB     sap_cb[NFA_P2P_NUM_SAP];
    264     tNFA_P2P_CONN_CB    conn_cb[LLCP_MAX_DATA_LINK];
    265     tNFA_P2P_SDP_CB     sdp_cb[LLCP_MAX_SDP_TRANSAC];
    266 
    267     UINT8               total_pending_ui_pdu;       /* total number of tx UI PDU not processed by NFA */
    268     UINT8               total_pending_i_pdu;        /* total number of tx I PDU not processed by NFA */
    269 
    270     UINT8               trace_level;
    271 } tNFA_P2P_CB;
    272 
    273 /*****************************************************************************
    274 **  External variables
    275 *****************************************************************************/
    276 
    277 /* NFA P2P control block */
    278 #if NFA_DYNAMIC_MEMORY == FALSE
    279 extern tNFA_P2P_CB nfa_p2p_cb;
    280 #else
    281 extern tNFA_P2P_CB *nfa_p2p_cb_ptr;
    282 #define nfa_p2p_cb (*nfa_p2p_cb_ptr)
    283 #endif
    284 
    285 /*****************************************************************************
    286 **  External functions
    287 *****************************************************************************/
    288 /*
    289 **  nfa_p2p_main.c
    290 */
    291 void nfa_p2p_init (void);
    292 void nfa_p2p_update_listen_tech (tNFA_TECHNOLOGY_MASK tech_mask);
    293 void nfa_p2p_enable_listening (tNFA_SYS_ID sys_id, BOOLEAN update_wks);
    294 void nfa_p2p_disable_listening (tNFA_SYS_ID sys_id, BOOLEAN update_wks);
    295 void nfa_p2p_activate_llcp (tNFC_DISCOVER *p_data);
    296 void nfa_p2p_deactivate_llcp (void);
    297 void nfa_p2p_set_config (tNFA_DM_DISC_TECH_PROTO_MASK disc_mask);
    298 
    299 /*
    300 **  nfa_p2p_act.c
    301 */
    302 void nfa_p2p_proc_llcp_data_ind (tLLCP_SAP_CBACK_DATA  *p_data);
    303 void nfa_p2p_proc_llcp_connect_ind (tLLCP_SAP_CBACK_DATA  *p_data);
    304 void nfa_p2p_proc_llcp_connect_resp (tLLCP_SAP_CBACK_DATA  *p_data);
    305 void nfa_p2p_proc_llcp_disconnect_ind (tLLCP_SAP_CBACK_DATA  *p_data);
    306 void nfa_p2p_proc_llcp_disconnect_resp (tLLCP_SAP_CBACK_DATA  *p_data);
    307 void nfa_p2p_proc_llcp_congestion (tLLCP_SAP_CBACK_DATA  *p_data);
    308 void nfa_p2p_proc_llcp_link_status (tLLCP_SAP_CBACK_DATA  *p_data);
    309 
    310 BOOLEAN nfa_p2p_start_sdp (char *p_service_name, UINT8 local_sap);
    311 
    312 BOOLEAN nfa_p2p_reg_server (tNFA_P2P_MSG *p_msg);
    313 BOOLEAN nfa_p2p_reg_client (tNFA_P2P_MSG *p_msg);
    314 BOOLEAN nfa_p2p_dereg (tNFA_P2P_MSG *p_msg);
    315 BOOLEAN nfa_p2p_accept_connection (tNFA_P2P_MSG *p_msg);
    316 BOOLEAN nfa_p2p_reject_connection (tNFA_P2P_MSG *p_msg);
    317 BOOLEAN nfa_p2p_disconnect (tNFA_P2P_MSG *p_msg);
    318 BOOLEAN nfa_p2p_create_data_link_connection (tNFA_P2P_MSG *p_msg);
    319 BOOLEAN nfa_p2p_send_ui (tNFA_P2P_MSG *p_msg);
    320 BOOLEAN nfa_p2p_send_data (tNFA_P2P_MSG *p_msg);
    321 BOOLEAN nfa_p2p_set_local_busy (tNFA_P2P_MSG *p_msg);
    322 BOOLEAN nfa_p2p_get_link_info (tNFA_P2P_MSG *p_msg);
    323 BOOLEAN nfa_p2p_get_remote_sap (tNFA_P2P_MSG *p_msg);
    324 BOOLEAN nfa_p2p_set_llcp_cfg (tNFA_P2P_MSG *p_msg);
    325 BOOLEAN nfa_p2p_restart_rf_discovery (tNFA_P2P_MSG *p_msg);
    326 
    327 #if (BT_TRACE_VERBOSE == TRUE)
    328 char *nfa_p2p_evt_code (UINT16 evt_code);
    329 #endif
    330 
    331 #else
    332 
    333 #define nfa_p2p_init ()
    334 #define nfa_p2p_activate_llcp (a) {};
    335 #define nfa_p2p_deactivate_llcp ()
    336 #define nfa_p2p_set_config ()
    337 
    338 #endif /* (defined (NFA_P2P_INCLUDED) && (NFA_P2P_INCLUDED==TRUE)) */
    339 #endif /* NFA_P2P_INT_H */
    340