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