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