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 */ 40 enum 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 */ 58 typedef 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 */ 65 typedef 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 */ 72 typedef 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 */ 81 typedef 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 */ 88 typedef 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 */ 95 typedef 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 */ 103 typedef 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 */ 113 typedef 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 */ 122 typedef 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 */ 132 typedef 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 */ 140 typedef 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 */ 148 typedef 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 177 typedef 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 */ 202 typedef 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 */ 215 typedef 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 223 typedef 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 237 extern tNFA_SNEP_CB nfa_snep_cb; 238 #else 239 extern 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 245 extern tNFA_SNEP_DEFAULT_CB nfa_snep_default_cb; 246 #else 247 extern 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 */ 257 void nfa_snep_init (BOOLEAN is_dta_mode); 258 /* 259 ** nfa_snep_default.c 260 */ 261 void nfa_snep_default_init (void); 262 BOOLEAN nfa_snep_start_default_server (tNFA_SNEP_MSG *p_msg); 263 BOOLEAN nfa_snep_stop_default_server (tNFA_SNEP_MSG *p_msg); 264 /* 265 ** nfa_snep_srv.c 266 */ 267 UINT8 nfa_snep_allocate_cb (void); 268 void nfa_snep_deallocate_cb (UINT8 xx); 269 void nfa_snep_send_msg (UINT8 opcode, UINT8 dlink); 270 271 void nfa_snep_llcp_cback (tLLCP_SAP_CBACK_DATA *p_data); 272 void nfa_snep_proc_llcp_data_ind (tLLCP_SAP_CBACK_DATA *p_data); 273 void nfa_snep_proc_llcp_connect_ind (tLLCP_SAP_CBACK_DATA *p_data); 274 void nfa_snep_proc_llcp_connect_resp (tLLCP_SAP_CBACK_DATA *p_data); 275 void nfa_snep_proc_llcp_disconnect_ind (tLLCP_SAP_CBACK_DATA *p_data); 276 void nfa_snep_proc_llcp_disconnect_resp (tLLCP_SAP_CBACK_DATA *p_data); 277 void nfa_snep_proc_llcp_congest (tLLCP_SAP_CBACK_DATA *p_data); 278 void nfa_snep_proc_llcp_link_status (tLLCP_SAP_CBACK_DATA *p_data); 279 void nfa_snep_proc_llcp_tx_complete (tLLCP_SAP_CBACK_DATA *p_data); 280 281 BOOLEAN nfa_snep_reg_server (tNFA_SNEP_MSG *p_msg); 282 BOOLEAN nfa_snep_reg_client (tNFA_SNEP_MSG *p_msg); 283 BOOLEAN nfa_snep_dereg (tNFA_SNEP_MSG *p_msg); 284 BOOLEAN nfa_snep_connect (tNFA_SNEP_MSG *p_msg); 285 BOOLEAN nfa_snep_put_resp (tNFA_SNEP_MSG *p_msg); 286 BOOLEAN nfa_snep_get_resp (tNFA_SNEP_MSG *p_msg); 287 BOOLEAN nfa_snep_put_req (tNFA_SNEP_MSG *p_msg); 288 BOOLEAN nfa_snep_get_req (tNFA_SNEP_MSG *p_msg); 289 BOOLEAN 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