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 SNEP.
23  *
24  ******************************************************************************/
25 #ifndef NFA_SNEP_INT_H
26 #define NFA_SNEP_INT_H
27 
28 #if (defined (NFA_SNEP_INCLUDED) && (NFA_SNEP_INCLUDED==TRUE))
29 #include "llcp_api.h"
30 #include "nfa_snep_api.h"
31 
32 /*****************************************************************************
33 **  Constants and data types
34 *****************************************************************************/
35 #define NFA_SNEP_DEFAULT_SERVER_SAP     0x04    /* SNEP default server SAP   */
36 #define NFA_SNEP_HEADER_SIZE            6       /* SNEP header size          */
37 #define NFA_SNEP_ACCEPT_LEN_SIZE        4       /* SNEP Acceptable Length size */
38 #define NFA_SNEP_CLIENT_TIMEOUT         1000    /* ms, waiting for response  */
39 
40 /* NFA SNEP events */
41 enum
42 {
43     NFA_SNEP_API_START_DEFAULT_SERVER_EVT  = NFA_SYS_EVT_START (NFA_ID_SNEP),
44     NFA_SNEP_API_STOP_DEFAULT_SERVER_EVT,
45     NFA_SNEP_API_REG_SERVER_EVT,
46     NFA_SNEP_API_REG_CLIENT_EVT,
47     NFA_SNEP_API_DEREG_EVT,
48     NFA_SNEP_API_CONNECT_EVT,
49     NFA_SNEP_API_GET_REQ_EVT,
50     NFA_SNEP_API_PUT_REQ_EVT,
51     NFA_SNEP_API_GET_RESP_EVT,
52     NFA_SNEP_API_PUT_RESP_EVT,
53     NFA_SNEP_API_DISCONNECT_EVT,
54 
55     NFA_SNEP_LAST_EVT
56 };
57 
58 /* data type for NFA_SNEP_API_START_DEFAULT_SERVER_EVT */
59 typedef struct
60 {
61     BT_HDR              hdr;
62     tNFA_SNEP_CBACK     *p_cback;
63 } tNFA_SNEP_API_START_DEFAULT_SERVER;
64 
65 /* data type for NFA_SNEP_API_STOP_DEFAULT_SERVER_EVT */
66 typedef struct
67 {
68     BT_HDR              hdr;
69     tNFA_SNEP_CBACK     *p_cback;
70 } tNFA_SNEP_API_STOP_DEFAULT_SERVER;
71 
72 /* data type for NFA_SNEP_API_REG_SERVER_EVT */
73 typedef struct
74 {
75     BT_HDR              hdr;
76     UINT8               server_sap;
77     char                service_name[LLCP_MAX_SN_LEN + 1];
78     tNFA_SNEP_CBACK     *p_cback;
79 } tNFA_SNEP_API_REG_SERVER;
80 
81 /* data type for NFA_SNEP_API_REG_CLIENT_EVT */
82 typedef struct
83 {
84     BT_HDR              hdr;
85     tNFA_SNEP_CBACK     *p_cback;
86 } tNFA_SNEP_API_REG_CLIENT;
87 
88 /* data type for NFA_SNEP_API_DEREG_EVT */
89 typedef struct
90 {
91     BT_HDR              hdr;
92     tNFA_HANDLE         reg_handle;     /* handle for registered server/client */
93 } tNFA_SNEP_API_DEREG;
94 
95 /* data type for NFA_SNEP_API_CONNECT_EVT */
96 typedef struct
97 {
98     BT_HDR              hdr;
99     tNFA_HANDLE         client_handle;  /* handle for client                   */
100     char                service_name[LLCP_MAX_SN_LEN + 1];
101 } tNFA_SNEP_API_CONNECT;
102 
103 /* data type for NFA_SNEP_API_GET_REQ_EVT */
104 typedef struct
105 {
106     BT_HDR              hdr;
107     tNFA_HANDLE         conn_handle;    /* handle for data link connection      */
108     UINT32              buff_length;    /* length of buffer; acceptable length  */
109     UINT32              ndef_length;    /* length of current NDEF message       */
110     UINT8               *p_ndef_buff;   /* buffer for NDEF message              */
111 } tNFA_SNEP_API_GET_REQ;
112 
113 /* data type for NFA_SNEP_API_PUT_REQ_EVT */
114 typedef struct
115 {
116     BT_HDR              hdr;
117     tNFA_HANDLE         conn_handle;    /* handle for data link connection */
118     UINT32              ndef_length;    /* length of NDEF message          */
119     UINT8               *p_ndef_buff;   /* buffer for NDEF message         */
120 } tNFA_SNEP_API_PUT_REQ;
121 
122 /* data type for NFA_SNEP_API_GET_RESP_EVT */
123 typedef struct
124 {
125     BT_HDR              hdr;
126     tNFA_HANDLE         conn_handle;    /* handle for data link connection */
127     tNFA_SNEP_RESP_CODE resp_code;      /* response code                   */
128     UINT32              ndef_length;    /* length of NDEF message          */
129     UINT8               *p_ndef_buff;   /* buffer for NDEF message         */
130 } tNFA_SNEP_API_GET_RESP;
131 
132 /* data type for NFA_SNEP_API_PUT_RESP_EVT */
133 typedef struct
134 {
135     BT_HDR              hdr;
136     tNFA_HANDLE         conn_handle;    /* handle for data link connection */
137     tNFA_SNEP_RESP_CODE resp_code;      /* response code                   */
138 } tNFA_SNEP_API_PUT_RESP;
139 
140 /* data type for NFA_SNEP_API_DISCONNECT_EVT */
141 typedef struct
142 {
143     BT_HDR              hdr;
144     tNFA_HANDLE         conn_handle;    /* response code                   */
145     BOOLEAN             flush;          /* TRUE if discard pending data    */
146 } tNFA_SNEP_API_DISCONNECT;
147 
148 /* union of all event data types */
149 typedef union
150 {
151     BT_HDR                              hdr;
152     tNFA_SNEP_API_START_DEFAULT_SERVER  api_start_default_server;   /* NFA_SNEP_API_START_DEFAULT_SERVER_EVT */
153     tNFA_SNEP_API_STOP_DEFAULT_SERVER   api_stop_default_server;    /* NFA_SNEP_API_STOP_DEFAULT_SERVER_EVT  */
154     tNFA_SNEP_API_REG_SERVER            api_reg_server;             /* NFA_SNEP_API_REG_SERVER_EVT   */
155     tNFA_SNEP_API_REG_CLIENT            api_reg_client;             /* NFA_SNEP_API_REG_CLIENT_EVT   */
156     tNFA_SNEP_API_DEREG                 api_dereg;                  /* NFA_SNEP_API_DEREG_EVT        */
157     tNFA_SNEP_API_CONNECT               api_connect;                /* NFA_SNEP_API_CONNECT_EVT      */
158     tNFA_SNEP_API_GET_REQ               api_get_req;                /* NFA_SNEP_API_GET_REQ_EVT      */
159     tNFA_SNEP_API_PUT_REQ               api_put_req;                /* NFA_SNEP_API_PUT_REQ_EVT      */
160     tNFA_SNEP_API_GET_RESP              api_get_resp;               /* NFA_SNEP_API_GET_RESP_EVT     */
161     tNFA_SNEP_API_PUT_RESP              api_put_resp;               /* NFA_SNEP_API_PUT_RESP_EVT     */
162     tNFA_SNEP_API_DISCONNECT            api_disc;                   /* NFA_SNEP_API_DISCONNECT_EVT   */
163 } tNFA_SNEP_MSG;
164 
165 /*****************************************************************************
166 **  control block
167 *****************************************************************************/
168 
169 /* NFA SNEP service control block */
170 #define NFA_SNEP_FLAG_ANY               0x00   /* ignore flags while searching   */
171 #define NFA_SNEP_FLAG_SERVER            0x01   /* server */
172 #define NFA_SNEP_FLAG_CLIENT            0x02   /* client */
173 #define NFA_SNEP_FLAG_CONNECTING        0x04   /* waiting for connection confirm */
174 #define NFA_SNEP_FLAG_CONNECTED         0x08   /* data link connected            */
175 #define NFA_SNEP_FLAG_W4_RESP_CONTINUE  0x10   /* Waiting for continue response  */
176 #define NFA_SNEP_FLAG_W4_REQ_CONTINUE   0x20   /* Waiting for continue request   */
177 
178 typedef struct
179 {
180     UINT8               local_sap;      /* local SAP of service */
181     UINT8               remote_sap;     /* local SAP of service */
182     UINT8               flags;          /* internal flags       */
183     tNFA_SNEP_CBACK    *p_cback;        /* callback for event   */
184     TIMER_LIST_ENT      timer;          /* timer for client     */
185 
186     UINT16              tx_miu;         /* adjusted MIU for throughput              */
187     BOOLEAN             congest;        /* TRUE if data link connection is congested */
188     BOOLEAN             rx_fragments;   /* TRUE if waiting more fragments            */
189 
190     UINT8               tx_code;        /* transmitted code in request/response */
191     UINT8               rx_code;        /* received code in request/response    */
192 
193     UINT32              acceptable_length;
194     UINT32              buff_length;    /* size of buffer for NDEF message   */
195     UINT32              ndef_length;    /* length of NDEF message            */
196     UINT32              cur_length;     /* currently sent or received length */
197     UINT8               *p_ndef_buff;   /* NDEF message buffer               */
198 } tNFA_SNEP_CONN;
199 
200 /*
201 ** NFA SNEP control block
202 */
203 typedef struct
204 {
205     tNFA_SNEP_CONN      conn[NFA_SNEP_MAX_CONN];
206     BOOLEAN             listen_enabled;
207     BOOLEAN             is_dta_mode;
208     UINT8               trace_level;
209 } tNFA_SNEP_CB;
210 
211 /*
212 ** NFA SNEP default server control block
213 */
214 
215 /* multiple data link connections for default server */
216 typedef struct
217 {
218     tNFA_HANDLE         conn_handle;    /* connection handle for default server   */
219     UINT8               *p_rx_ndef;     /* buffer to receive NDEF                 */
220 } tNFA_SNEP_DEFAULT_CONN;
221 
222 #define NFA_SNEP_DEFAULT_MAX_CONN    3
223 
224 typedef struct
225 {
226 
227     tNFA_HANDLE             server_handle;                  /* registered handle for default server   */
228     tNFA_SNEP_DEFAULT_CONN  conn[NFA_SNEP_DEFAULT_MAX_CONN];/* connections for default server         */
229 
230 } tNFA_SNEP_DEFAULT_CB;
231 
232 /*****************************************************************************
233 **  External variables
234 *****************************************************************************/
235 
236 /* NFA SNEP control block */
237 #if NFA_DYNAMIC_MEMORY == FALSE
238 extern tNFA_SNEP_CB nfa_snep_cb;
239 #else
240 extern tNFA_SNEP_CB *nfa_snep_cb_ptr;
241 #define nfa_snep_cb (*nfa_snep_cb_ptr)
242 #endif
243 
244 /* NFA SNEP default server control block */
245 #if NFA_DYNAMIC_MEMORY == FALSE
246 extern tNFA_SNEP_DEFAULT_CB nfa_snep_default_cb;
247 #else
248 extern tNFA_SNEP_DEFAULT_CB *nfa_snep_default_cb_ptr;
249 #define nfa_snep_default_cb (*nfa_snep_default_cb_ptr)
250 #endif
251 
252 /*****************************************************************************
253 **  External functions
254 *****************************************************************************/
255 /*
256 **  nfa_snep_main.c
257 */
258 void nfa_snep_init (BOOLEAN is_dta_mode);
259 /*
260 **  nfa_snep_default.c
261 */
262 void nfa_snep_default_init (void);
263 BOOLEAN nfa_snep_start_default_server (tNFA_SNEP_MSG *p_msg);
264 BOOLEAN nfa_snep_stop_default_server (tNFA_SNEP_MSG *p_msg);
265 /*
266 **  nfa_snep_srv.c
267 */
268 UINT8 nfa_snep_allocate_cb (void);
269 void nfa_snep_deallocate_cb (UINT8 xx);
270 void nfa_snep_send_msg (UINT8 opcode, UINT8 dlink);
271 
272 void nfa_snep_llcp_cback (tLLCP_SAP_CBACK_DATA *p_data);
273 void nfa_snep_proc_llcp_data_ind (tLLCP_SAP_CBACK_DATA  *p_data);
274 void nfa_snep_proc_llcp_connect_ind (tLLCP_SAP_CBACK_DATA  *p_data);
275 void nfa_snep_proc_llcp_connect_resp (tLLCP_SAP_CBACK_DATA  *p_data);
276 void nfa_snep_proc_llcp_disconnect_ind (tLLCP_SAP_CBACK_DATA  *p_data);
277 void nfa_snep_proc_llcp_disconnect_resp (tLLCP_SAP_CBACK_DATA  *p_data);
278 void nfa_snep_proc_llcp_congest (tLLCP_SAP_CBACK_DATA  *p_data);
279 void nfa_snep_proc_llcp_link_status (tLLCP_SAP_CBACK_DATA  *p_data);
280 void nfa_snep_proc_llcp_tx_complete (tLLCP_SAP_CBACK_DATA  *p_data);
281 
282 BOOLEAN nfa_snep_reg_server (tNFA_SNEP_MSG *p_msg);
283 BOOLEAN nfa_snep_reg_client (tNFA_SNEP_MSG *p_msg);
284 BOOLEAN nfa_snep_dereg (tNFA_SNEP_MSG *p_msg);
285 BOOLEAN nfa_snep_connect (tNFA_SNEP_MSG *p_msg);
286 BOOLEAN nfa_snep_put_resp (tNFA_SNEP_MSG *p_msg);
287 BOOLEAN nfa_snep_get_resp (tNFA_SNEP_MSG *p_msg);
288 BOOLEAN nfa_snep_put_req (tNFA_SNEP_MSG *p_msg);
289 BOOLEAN nfa_snep_get_req (tNFA_SNEP_MSG *p_msg);
290 BOOLEAN nfa_snep_disconnect (tNFA_SNEP_MSG *p_msg);
291 
292 #endif /* (defined (NFA_SNEP_INCLUDED) && (NFA_SNEP_INCLUDED==TRUE)) */
293 #endif /* NFA_SNEP_INT_H */
294