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