1 /****************************************************************************** 2 * 3 * Copyright (C) 2003-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 DTA 23 * 24 ******************************************************************************/ 25 #ifndef NFA_DTA_INT_H 26 #define NFA_DTA_INT_H 27 28 #include "nfa_dta_api.h" 29 #include "nfa_sys.h" 30 #include "nfa_sys_int.h" 31 #include "nfc_api.h" 32 #include "rw_api.h" 33 #include "ce_api.h" 34 35 #if (NFA_DTA_INCLUDED == TRUE) 36 37 /***************************************************************************** 38 ** DTA definitions 39 *****************************************************************************/ 40 #define NFA_DTA_PATTERN_NUMBER_INVALID 0xFFFF 41 42 #define NFA_DTA_DISCOVER_PARAMS_MAX 6 43 44 #define NDEF_WKT_TEXT_HDR_LEN 7 /* Header length for long NDEF text message */ 45 #define NFA_DTA_T3T_WRITE_NDEF_SIZE 192 /* Size of NDEF message for T3T write-tests ([DTA] $5.5.6) */ 46 #define NFA_DTA_T3T_LISTEN_SYSTEMCODE 0xBABE /* System code to use for T3T Listen mode tests */ 47 48 #define NFA_PROTOCOL_RANK_INVALID 0xFF /* Maximum protocol preference rank */ 49 50 #define NFA_DTA_SCRATCH_BUF_SIZE T3T_MSG_BLOCKSIZE 51 52 #ifndef NFA_DTA_DEFAULT_CO_OUT_DSAP 53 #define NFA_DTA_DEFAULT_CO_OUT_DSAP 0x10 /* Default SAP[LT,CO-OUT-DEST] if SDP was not performed to get SAP from the LT */ 54 #endif 55 56 /***************************************************************************** 57 * DTA state machine definitions 58 *****************************************************************************/ 59 60 typedef struct { 61 BOOLEAN tp_continue; /* NFA_DTA_CFG_TP_CONTINUE */ 62 tNFA_DTA_FL_POLL_LISTEN poll_listen; /* NFA_DTA_CFG_POLL_LISTEN */ 63 BOOLEAN t4at_nfcdep_priority; /* NFA_DTA_CFG_T4AT_NFCDEP_PRIORITY */ 64 BOOLEAN reactivation; /* NFA_DTA_CFG_REACTIVATION */ 65 UINT16 total_duration; /* NFA_DTA_CFG_TOTAL_DURATION */ 66 BOOLEAN enable_dta_llcp; /* NFA_DTA_CFG_LLCP */ 67 tNFA_DTA_SNEP_MODE dta_snep_mode; /* NFA_DTA_CFG_SNEP */ 68 tNFA_DTA_EMVCO_PCD_MODE emvco_pcd_mode; /* NFA_DTA_CFG_EMVCO_PCD */ 69 } tNFA_DTA_CONFIG; 70 71 /***************************************************************************** 72 * DTA state machine definitions 73 *****************************************************************************/ 74 /* DTA events */ 75 enum 76 { 77 /* device manager local device API events */ 78 NFA_DTA_API_ENABLE_EVT = NFA_SYS_EVT_START (NFA_ID_DTA), 79 NFA_DTA_API_DISABLE_EVT, 80 NFA_DTA_API_CONFIG_EVT, 81 NFA_DTA_API_START_EVT, 82 NFA_DTA_API_STOP_EVT, 83 NFA_DTA_ACTIVATE_EVT, 84 NFA_DTA_DEACTIVATE_EVT, 85 NFA_DTA_DATA_CBACK_EVT, 86 87 NFA_DTA_MAX_EVT 88 }; 89 90 91 /* data type for NFA_DTA_API_ENABLE_EVT */ 92 typedef struct 93 { 94 BT_HDR hdr; 95 BOOLEAN auto_start; 96 tNFA_DTA_CBACK *p_cback; 97 } tNFA_DTA_API_ENABLE; 98 99 /* data type for NFA_DTA_API_START_EVT */ 100 typedef struct 101 { 102 BT_HDR hdr; 103 UINT8 pattern_number; 104 UINT8 tlv_len; 105 UINT8 *p_tlv_params; 106 } tNFA_DTA_API_START; 107 108 /* data type for NFA_DTA_API_CONFIG */ 109 typedef struct 110 { 111 BT_HDR hdr; 112 tNFA_DTA_CFG_ITEM item; 113 tNFA_DTA_CFG cfg_data; 114 } tNFA_DTA_API_CONFIG; 115 116 /* data type for NFA_DTA_DATA_CBACK_EVT */ 117 typedef struct 118 { 119 UINT8 event; 120 tRW_DATA data; 121 } tNFA_DTA_RW_DATA; 122 123 typedef struct 124 { 125 UINT8 event; 126 tCE_DATA data; 127 } tNFA_DTA_CE_DATA; 128 129 typedef struct 130 { 131 tNFC_CONN_EVT event; 132 tNFC_CONN data; 133 } tNFA_DTA_NFCDEP_DATA; 134 135 136 enum 137 { 138 NFA_DTA_LLCP_CONNECT_CO_ECHO_OUT, 139 NFA_DTA_LLCP_DISCONNECT_CO_ECHO_OUT 140 }; 141 typedef UINT8 tNFA_DTA_LLCP_EVT; 142 143 enum 144 { 145 NFA_DTA_RW_DATA, 146 NFA_DTA_CE_DATA, 147 NFA_DTA_NFCDEP_DATA, 148 NFA_DTA_LLCP_DATA 149 }; 150 151 typedef UINT8 tNFA_DTA_DATA_TYPE; 152 153 typedef struct 154 { 155 BT_HDR hdr; 156 tNFA_DTA_DATA_TYPE type; 157 union 158 { 159 tNFA_DTA_RW_DATA rw; 160 tNFA_DTA_CE_DATA ce; 161 tNFA_DTA_NFCDEP_DATA nfcdep; 162 tNFA_DTA_LLCP_EVT llcp_evt; 163 } data; 164 } tNFA_DTA_DATA_CBACK; 165 166 /* All API message type */ 167 typedef union 168 { 169 BT_HDR hdr; 170 tNFA_DTA_API_ENABLE enable; 171 tNFA_DTA_API_CONFIG cfg; 172 tNFA_DTA_API_START start; 173 tNFA_DTA_DATA_CBACK data_cback; 174 }tNFA_DTA_MSG; 175 176 177 178 /* DTA states */ 179 enum 180 { 181 NFA_DTA_ST_IDLE, 182 NFA_DTA_ST_DISCOVER, /* Polling/Listening */ 183 NFA_DTA_ST_ACTIVATED /* Activated, listen mode */ 184 }; 185 typedef UINT8 tNFA_DTA_STATE; 186 187 /* DTA Substates (while in ACTIVATED state) - substate enumerations are found in protocol-specific files (nfa_dta_XXX.c) */ 188 #define NFA_DTA_SST_IDLE 0 189 typedef UINT8 tNFA_DTA_SUBSTATE; 190 191 /* DTA discovery states */ 192 enum 193 { 194 NFA_DTA_DISC_STATE_IDLE, 195 NFA_DTA_DISC_STATE_DISCOVERY, 196 NFA_DTA_DISC_STATE_POLL_ACTIVE, 197 NFA_DTA_DISC_STATE_W4_ALL_DISCOVERIES, 198 NFA_DTA_DISC_STATE_W4_HOST_SELECT, 199 NFA_DTA_DISC_STATE_LISTEN_ACTIVE, 200 NFA_DTA_DISC_STATE_LISTEN_SLEEP, 201 NFA_DTA_DISC_STATE_MAX 202 }; 203 204 /***************************************************************************** 205 * DTA control block definitions 206 *****************************************************************************/ 207 208 /* NDEF buffer definitions */ 209 enum { 210 NFA_DTA_BUF_READ, /* Buffer for RW Read requests */ 211 NFA_DTA_BUF_WRITE, /* Buffer for RW Write requests */ 212 NFA_DTA_BUF_MAX 213 }; 214 215 typedef struct { 216 UINT8 *p_data; 217 UINT32 max_size; 218 UINT32 cur_size; 219 UINT32 offset; /* current read/write offset */ 220 } tNFA_DTA_BUF_CB; 221 222 223 /* T4T listen mode test application */ 224 enum { 225 NFA_DTA_T4T_CE_APP_NONE, /* Not selected */ 226 NFA_DTA_T4T_CE_APP_LOOPBACK, /* loopback test applicaiton */ 227 NFA_DTA_T4T_CE_APP_PROP /* propretary test application */ 228 }; 229 230 /* DTA test step command */ 231 typedef tNFC_STATUS (*tNFA_DTA_CMD_FCN) (void *); 232 233 /* dta control block flags */ 234 #define NFA_DTA_FL_ENABLED 0x00000001 /* DTA is enabled */ 235 #define NFA_DTA_FL_AUTOSTART 0x00000002 /* Automatically start discovery when NFC is enabled */ 236 #define NFA_DTA_FL_STOPPING 0x00000004 /* DTA is stopping (NFA_DtaStop called) */ 237 #define NFA_DTA_FL_DISABLING 0x00000008 /* DTA is being disabled (NFA_DtaDisable called) */ 238 #define NFA_DTA_FL_T4T_DESELECT_DEACT 0x00000010 /* T4T/NFCDEP is deactivating to IDLE (need to DESELECT first) */ 239 240 /* DTA control block */ 241 typedef struct { 242 UINT32 dta_flags; /* dta_flags must be first item in structure (statically intialized to 0 on startup) */ 243 244 /* Configuration */ 245 tNFA_DTA_CONFIG cfg; 246 247 /* DTA State Machine */ 248 tNFA_DTA_STATE state; 249 tNFA_DTA_SUBSTATE substate; /* Current protocol-specific sub-state */ 250 tNFA_DTA_CBACK *p_cback; /* Applicatation for DTA event notification */ 251 252 /* DTA test parameters */ 253 UINT32 pattern_number; 254 UINT32 pattern_number_old; 255 256 /* Discovery Parameters */ 257 UINT8 disc_state; 258 UINT8 disc_params_num; 259 tNFC_DISCOVER_PARAMS disc_params[NFA_DTA_DISCOVER_PARAMS_MAX]; 260 261 /* Activation parameters */ 262 tNFC_ACTIVATE_DEVT activate_params; 263 UINT8 cur_protocol_rank; /* perference ranking of currently discovered protocol */ 264 265 tRW_CBACK *p_rw_cback; 266 tCE_CBACK *p_ce_cback; 267 268 TIMER_LIST_ENT protocol_timer; /* timer for the activated protocol if needed */ 269 270 UINT8 t4t_ce_app; /* T4T listen mode test application */ 271 tCE_T4T_AID_HANDLE t4t_dta_aid_hdl; /* T4T registration handle for proprietary dta aid */ 272 tCE_T4T_AID_HANDLE t4t_prop_aid_hdl; /* T4T registration handle for proprietary aid */ 273 UINT8 nfc_dep_wt; 274 275 BOOLEAN llcp_cl_more_to_read; /* TRUE if there is more to read in llcp cl link*/ 276 BOOLEAN llcp_co_more_to_read; /* TRUE if there is more to read in llcp recieve window*/ 277 BOOLEAN llcp_is_initiator; /* TURE if IUT is LLCP initiator */ 278 UINT16 llcp_local_link_miu; /* link MIU of IUT */ 279 UINT16 llcp_remote_link_miu; /* link MIU of LT */ 280 281 UINT8 llcp_cl_in_local_sap; /* SAP of IUT-CL-IN-DEST */ 282 UINT8 llcp_cl_out_local_sap; /* SAP of IUT-CL-OUT-SRC */ 283 UINT8 llcp_cl_out_remote_sap; /* SAP of LT-CL-OUT-DEST */ 284 285 UINT8 llcp_co_in_local_sap; /* SAP of IUT-CO-IN-DEST */ 286 UINT8 llcp_co_in_remote_sap; /* SAP of LT-CO-IN-SRC */ 287 UINT8 llcp_co_out_local_sap; /* SAP of IUT-CO-OUT-SRC */ 288 UINT8 llcp_co_out_remote_sap; /* SAP of LT-CO-OUT-DEST */ 289 290 UINT16 llcp_co_out_remote_miu; /* MIU of LT-CO-OUT-DEST */ 291 UINT8 llcp_co_out_remote_rw; /* RW of LT-CO-OUT-DEST */ 292 293 #define NFA_DTA_LLCP_FLAGS_CO_OUT_CONNECTING 0x01 /* establishing outbound on connection-oriented */ 294 #define NFA_DTA_LLCP_FLAGS_CO_OUT_CONNECTED 0x02 /* established outbound on connection-oriented */ 295 296 UINT8 llcp_flags; /* internal flags for LLCP echo test */ 297 UINT8 llcp_sdp_tid; /* transaction ID for SDP */ 298 299 TIMER_LIST_ENT llcp_cl_echo_timer; /* timer for the connectionless echo test application */ 300 TIMER_LIST_ENT llcp_co_echo_timer; /* timer for the connection-oriented echo test application */ 301 BUFFER_Q llcp_cl_buffer; /* buffer for the connectionless echo test application */ 302 BUFFER_Q llcp_co_buffer; /* buffer for the connection-oriented echo test application*/ 303 304 tNFA_HANDLE snep_server_handle; 305 tNFA_HANDLE snep_server_conn_handle; 306 tNFA_HANDLE snep_client_handle; 307 308 #define NFA_DTA_SNEP_CLIENT_TEST_FLAGS_DEFAULT_SERVER 0x01 309 #define NFA_DTA_SNEP_CLIENT_TEST_FLAGS_EXTENDED_SERVER 0x02 310 #define NFA_DTA_SNEP_CLIENT_TEST_FLAGS_PUT_SHORT_NDEF 0x04 311 #define NFA_DTA_SNEP_CLIENT_TEST_FLAGS_PUT_LONG_NDEF 0x08 312 #define NFA_DTA_SNEP_CLIENT_TEST_FLAGS_GET 0x10 313 314 UINT8 snep_client_test_flags; 315 316 UINT8 *p_snep_short_ndef; 317 UINT32 snep_short_ndef_size; 318 UINT8 *p_snep_long_ndef; 319 UINT32 snep_long_ndef_size; 320 321 /* DTA buffer for NDEF read/write */ 322 tNFA_DTA_BUF_CB buf_cb[NFA_DTA_BUF_MAX]; 323 UINT32 ndef_size; /* Size of NDEF message from NDEF detection */ 324 325 /* Scratch buffer for miscelaneous use */ 326 UINT8 scratch_buf[NFA_DTA_SCRATCH_BUF_SIZE]; 327 328 /* DTA Test command table */ 329 tNFA_DTA_CMD_FCN *p_cur_cmd_tbl; /* Current table of commands for current test */ 330 UINT8 cur_cmd_idx; 331 } tNFA_DTA_CB; 332 extern tNFA_DTA_CB nfa_dta_cb; 333 334 /* NFA_SYS info for DTA */ 335 extern const tNFA_SYS_REG nfa_dta_sys_reg; 336 337 /* DTA startup setconfig parameters */ 338 extern UINT8 *p_nfa_dta_start_up_cfg; 339 extern UINT8 nfa_dta_start_up_cfg_len; 340 341 /***************************************************************************** 342 * DTA internal funciton protoytpes 343 *****************************************************************************/ 344 /* Internal function prototypes */ 345 void nfa_dta_deactivate (UINT8 deactivate_type); 346 void nfa_dta_shutdown (void); 347 void nfa_dta_discover_start (void); 348 349 /* nfa_sys handler for DTA */ 350 BOOLEAN nfa_dta_evt_hdlr (BT_HDR *p_msg); 351 void nfa_dta_sys_disable (void); 352 353 /* State machine action functions */ 354 BOOLEAN nfa_dta_enable (tNFA_DTA_MSG *p_data); 355 BOOLEAN nfa_dta_disable (tNFA_DTA_MSG *p_data); 356 BOOLEAN nfa_dta_config (tNFA_DTA_MSG *p_data); 357 BOOLEAN nfa_dta_start (tNFA_DTA_MSG *p_data); 358 BOOLEAN nfa_dta_handle_deact (tNFA_DTA_MSG *p_data); 359 BOOLEAN nfa_dta_stop (tNFA_DTA_MSG *p_data); 360 BOOLEAN nfa_dta_run_test (tNFA_DTA_MSG *p_data); 361 BOOLEAN nfa_dta_proc_data (tNFA_DTA_MSG *p_msg_data); 362 363 /* Utility functions */ 364 void nfa_dta_test_set_state (tNFA_DTA_STATE state); 365 void nfa_dta_test_set_substate (tNFA_DTA_SUBSTATE substate); 366 void nfa_dta_free_ndef_buf (UINT8 ndef_idx); 367 UINT8 *nfa_dta_realloc_buf (UINT8 ndef_idx, UINT32 size); 368 void nfa_dta_t3t_nfcid_rand (UINT8 nfcid2[NCI_RF_F_UID_LEN]); 369 370 /* Test function entry points (in nfa_dta_XXX.c) */ 371 void nfa_dta_nfcdep_poll_test_start (void); 372 void nfa_dta_nfcdep_proc_data (tNFC_CONN_EVT event, tNFC_CONN *p_data); 373 void nfa_dta_t1t_poll_test_start (void); 374 void nfa_dta_t2t_poll_test_start (void); 375 void nfa_dta_t3t_poll_test_start (void); 376 void nfa_dta_t4t_poll_test_start (void); 377 378 void nfa_dta_nfcdep_listen_test_start (void); 379 void nfa_dta_t3t_listen_test_start (void); 380 void nfa_dta_t4t_listen_test_start (void); 381 382 void nfa_dta_t1t_rw_cback (UINT8 event, tRW_DATA *p_data); 383 void nfa_dta_t2t_rw_cback (UINT8 event, tRW_DATA *p_data); 384 void nfa_dta_t3t_rw_cback (UINT8 event, tRW_DATA *p_data); 385 void nfa_dta_t4t_rw_cback (UINT8 event, tRW_DATA *p_data); 386 387 void nfa_dta_t3t_ce_cback (UINT8 event, tCE_DATA *p_data); 388 void nfa_dta_t4t_ce_cback (UINT8 event, tCE_DATA *p_data); 389 390 void nfa_dta_ce_cback (UINT8 event, tCE_DATA *p_ce_data); 391 392 void nfa_dta_t4t_register_apps (void); 393 void nfa_dta_t4t_deregister_apps (void); 394 395 void nfa_dta_llcp_register_echo (void); 396 void nfa_dta_llcp_deregister_echo (void); 397 void nfa_dta_llcp_activate_link (void); 398 void nfa_dta_llcp_connect_co_echo_out (void); 399 void nfa_dta_llcp_disconnect_co_echo_out (void); 400 401 void nfa_dta_snep_register (void); 402 void nfa_dta_snep_deregister (void); 403 void nfa_dta_snep_mode (tNFA_DTA_SNEP_MODE mode); 404 405 void nfa_dta_emvco_pcd_config_nfcc (BOOLEAN enable); 406 void nfa_dta_emvco_pcd_start (void); 407 void nfa_dta_emvco_pcd_cback (UINT8 event, tRW_DATA *p_data); 408 409 extern UINT8 *p_nfa_dta_brcm_start_up_cfg; 410 extern UINT8 nfa_dta_brcm_start_up_cfg_len; 411 extern UINT8 *p_nfa_dta_start_up_vsc_cfg; 412 413 #endif /* (NFA_DTA_INCLUDED == TRUE) */ 414 #endif /* NFA_DTA_INT_H */ 415 416