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