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