• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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