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 /* SNEP Acceptable Length size */
35 
36 /* NFA SNEP events */
37 enum {
38   NFA_SNEP_API_START_DEFAULT_SERVER_EVT = NFA_SYS_EVT_START(NFA_ID_SNEP),
39   NFA_SNEP_API_STOP_DEFAULT_SERVER_EVT,
40   NFA_SNEP_API_REG_SERVER_EVT,
41   NFA_SNEP_API_REG_CLIENT_EVT,
42   NFA_SNEP_API_DEREG_EVT,
43   NFA_SNEP_API_CONNECT_EVT,
44   NFA_SNEP_API_GET_REQ_EVT,
45   NFA_SNEP_API_PUT_REQ_EVT,
46   NFA_SNEP_API_GET_RESP_EVT,
47   NFA_SNEP_API_PUT_RESP_EVT,
48   NFA_SNEP_API_DISCONNECT_EVT
49 
50 };
51 
52 /* data type for NFA_SNEP_API_START_DEFAULT_SERVER_EVT */
53 typedef struct {
54   NFC_HDR hdr;
55   tNFA_SNEP_CBACK* p_cback;
56 } tNFA_SNEP_API_START_DEFAULT_SERVER;
57 
58 /* data type for NFA_SNEP_API_STOP_DEFAULT_SERVER_EVT */
59 typedef struct {
60   NFC_HDR hdr;
61   tNFA_SNEP_CBACK* p_cback;
62 } tNFA_SNEP_API_STOP_DEFAULT_SERVER;
63 
64 /* data type for NFA_SNEP_API_REG_SERVER_EVT */
65 typedef struct {
66   NFC_HDR hdr;
67   uint8_t server_sap;
68   char service_name[LLCP_MAX_SN_LEN + 1];
69   tNFA_SNEP_CBACK* p_cback;
70 } tNFA_SNEP_API_REG_SERVER;
71 
72 /* data type for NFA_SNEP_API_REG_CLIENT_EVT */
73 typedef struct {
74   NFC_HDR hdr;
75   tNFA_SNEP_CBACK* p_cback;
76 } tNFA_SNEP_API_REG_CLIENT;
77 
78 /* data type for NFA_SNEP_API_DEREG_EVT */
79 typedef struct {
80   NFC_HDR hdr;
81   tNFA_HANDLE reg_handle; /* handle for registered server/client */
82 } tNFA_SNEP_API_DEREG;
83 
84 /* data type for NFA_SNEP_API_CONNECT_EVT */
85 typedef struct {
86   NFC_HDR hdr;
87   tNFA_HANDLE client_handle; /* handle for client                   */
88   char service_name[LLCP_MAX_SN_LEN + 1];
89 } tNFA_SNEP_API_CONNECT;
90 
91 /* data type for NFA_SNEP_API_GET_REQ_EVT */
92 typedef struct {
93   NFC_HDR hdr;
94   tNFA_HANDLE conn_handle; /* handle for data link connection      */
95   uint32_t buff_length;    /* length of buffer; acceptable length  */
96   uint32_t ndef_length;    /* length of current NDEF message       */
97   uint8_t* p_ndef_buff;    /* buffer for NDEF message              */
98 } tNFA_SNEP_API_GET_REQ;
99 
100 /* data type for NFA_SNEP_API_PUT_REQ_EVT */
101 typedef struct {
102   NFC_HDR hdr;
103   tNFA_HANDLE conn_handle; /* handle for data link connection */
104   uint32_t ndef_length;    /* length of NDEF message          */
105   uint8_t* p_ndef_buff;    /* buffer for NDEF message         */
106 } tNFA_SNEP_API_PUT_REQ;
107 
108 /* data type for NFA_SNEP_API_GET_RESP_EVT */
109 typedef struct {
110   NFC_HDR hdr;
111   tNFA_HANDLE conn_handle;       /* handle for data link connection */
112   tNFA_SNEP_RESP_CODE resp_code; /* response code                   */
113   uint32_t ndef_length;          /* length of NDEF message          */
114   uint8_t* p_ndef_buff;          /* buffer for NDEF message         */
115 } tNFA_SNEP_API_GET_RESP;
116 
117 /* data type for NFA_SNEP_API_PUT_RESP_EVT */
118 typedef struct {
119   NFC_HDR hdr;
120   tNFA_HANDLE conn_handle;       /* handle for data link connection */
121   tNFA_SNEP_RESP_CODE resp_code; /* response code                   */
122 } tNFA_SNEP_API_PUT_RESP;
123 
124 /* data type for NFA_SNEP_API_DISCONNECT_EVT */
125 typedef struct {
126   NFC_HDR hdr;
127   tNFA_HANDLE conn_handle; /* response code                   */
128   bool flush;              /* TRUE if discard pending data    */
129 } tNFA_SNEP_API_DISCONNECT;
130 
131 /* union of all event data types */
132 typedef union {
133   NFC_HDR hdr;
134   tNFA_SNEP_API_START_DEFAULT_SERVER
135       api_start_default_server; /* NFA_SNEP_API_START_DEFAULT_SERVER_EVT */
136   tNFA_SNEP_API_STOP_DEFAULT_SERVER
137       api_stop_default_server; /* NFA_SNEP_API_STOP_DEFAULT_SERVER_EVT  */
138   tNFA_SNEP_API_REG_SERVER api_reg_server; /* NFA_SNEP_API_REG_SERVER_EVT   */
139   tNFA_SNEP_API_REG_CLIENT api_reg_client; /* NFA_SNEP_API_REG_CLIENT_EVT   */
140   tNFA_SNEP_API_DEREG api_dereg;           /* NFA_SNEP_API_DEREG_EVT        */
141   tNFA_SNEP_API_CONNECT api_connect;       /* NFA_SNEP_API_CONNECT_EVT      */
142   tNFA_SNEP_API_GET_REQ api_get_req;       /* NFA_SNEP_API_GET_REQ_EVT      */
143   tNFA_SNEP_API_PUT_REQ api_put_req;       /* NFA_SNEP_API_PUT_REQ_EVT      */
144   tNFA_SNEP_API_GET_RESP api_get_resp;     /* NFA_SNEP_API_GET_RESP_EVT     */
145   tNFA_SNEP_API_PUT_RESP api_put_resp;     /* NFA_SNEP_API_PUT_RESP_EVT     */
146   tNFA_SNEP_API_DISCONNECT api_disc;       /* NFA_SNEP_API_DISCONNECT_EVT   */
147 } tNFA_SNEP_MSG;
148 
149 /*****************************************************************************
150 **  control block
151 *****************************************************************************/
152 
153 /* NFA SNEP service control block */
154 /* ignore flags while searching   */
155 /* waiting for connection confirm */
156 /* data link connected            */
157 /* Waiting for continue response  */
158 /* Waiting for continue request   */
159 
160 typedef struct {
161   uint8_t local_sap;        /* local SAP of service */
162   uint8_t remote_sap;       /* local SAP of service */
163   uint8_t flags;            /* internal flags       */
164   tNFA_SNEP_CBACK* p_cback; /* callback for event   */
165   TIMER_LIST_ENT timer;     /* timer for client     */
166 
167   uint16_t tx_miu;   /* adjusted MIU for throughput              */
168   bool congest;      /* TRUE if data link connection is congested */
169   bool rx_fragments; /* TRUE if waiting more fragments            */
170 
171   uint8_t tx_code; /* transmitted code in request/response */
172   uint8_t rx_code; /* received code in request/response    */
173 
174   uint32_t acceptable_length;
175   uint32_t buff_length; /* size of buffer for NDEF message   */
176   uint32_t ndef_length; /* length of NDEF message            */
177   uint32_t cur_length;  /* currently sent or received length */
178   uint8_t* p_ndef_buff; /* NDEF message buffer               */
179 } tNFA_SNEP_CONN;
180 
181 /*
182 ** NFA SNEP control block
183 */
184 typedef struct {
185   tNFA_SNEP_CONN conn[NFA_SNEP_MAX_CONN];
186   bool listen_enabled;
187   bool is_dta_mode;
188 } tNFA_SNEP_CB;
189 
190 /*
191 ** NFA SNEP default server control block
192 */
193 
194 /* multiple data link connections for default server */
195 typedef struct {
196   tNFA_HANDLE conn_handle; /* connection handle for default server   */
197   uint8_t* p_rx_ndef;      /* buffer to receive NDEF                 */
198 } tNFA_SNEP_DEFAULT_CONN;
199 
200 #define NFA_SNEP_DEFAULT_MAX_CONN 3
201 
202 typedef struct {
203   tNFA_HANDLE server_handle; /* registered handle for default server   */
204   tNFA_SNEP_DEFAULT_CONN
205       conn[NFA_SNEP_DEFAULT_MAX_CONN]; /* connections for default server */
206 
207 } tNFA_SNEP_DEFAULT_CB;
208 
209 /*****************************************************************************
210 **  External variables
211 *****************************************************************************/
212 
213 /* NFA SNEP control block */
214 extern tNFA_SNEP_CB nfa_snep_cb;
215 
216 /* NFA SNEP default server control block */
217 extern tNFA_SNEP_DEFAULT_CB nfa_snep_default_cb;
218 
219 /*****************************************************************************
220 **  External functions
221 *****************************************************************************/
222 /*
223 **  nfa_snep_main.c
224 */
225 void nfa_snep_init(bool is_dta_mode);
226 
227 #endif /* (NFA_SNEP_INCLUDED == TRUE) */
228 #endif /* NFA_SNEP_INT_H */
229