1 /****************************************************************************** 2 * 3 * Copyright (C) 2010-2013 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