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