1 /******************************************************************************
2  *
3  *  Copyright (C) 2003-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 DTA
22  *
23  ******************************************************************************/
24 #ifndef NFA_DTA_INT_H
25 #define NFA_DTA_INT_H
26 
27 #include "ce_api.h"
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 
34 #if (NFA_DTA_INCLUDED == TRUE)
35 
36 /*****************************************************************************
37 **  DTA definitions
38 *****************************************************************************/
39 
40 #define NFA_DTA_DISCOVER_PARAMS_MAX 6
41 
42 #define NFA_DTA_SCRATCH_BUF_SIZE T3T_MSG_BLOCKSIZE
43 
44 #ifndef NFA_DTA_DEFAULT_CO_OUT_DSAP
45 /* Default SAP[LT,CO-OUT-DEST] if SDP was not performed to get SAP from the LT
46  */
47 #define NFA_DTA_DEFAULT_CO_OUT_DSAP 0x12
48 #endif
49 
50 /*****************************************************************************
51 * DTA state machine definitions
52 *****************************************************************************/
53 
54 typedef struct {
55   bool tp_continue;                       /* NFA_DTA_CFG_TP_CONTINUE    */
56   tNFA_DTA_FL_POLL_LISTEN poll_listen;    /* NFA_DTA_CFG_POLL_LISTEN    */
57   bool t4at_nfcdep_priority;              /* NFA_DTA_CFG_T4AT_NFCDEP_PRIORITY */
58   bool reactivation;                      /* NFA_DTA_CFG_REACTIVATION   */
59   uint16_t total_duration;                /* NFA_DTA_CFG_TOTAL_DURATION */
60   tNFA_DTA_EMVCO_PCD_MODE emvco_pcd_mode; /* NFA_DTA_CFG_EMVCO_PCD */
61 } tNFA_DTA_CONFIG;
62 
63 /*****************************************************************************
64 * DTA state machine definitions
65 *****************************************************************************/
66 /* DTA events */
67 enum {
68   /* device manager local device API events */
69   NFA_DTA_API_ENABLE_EVT = NFA_SYS_EVT_START(NFA_ID_DTA),
70   NFA_DTA_API_START_EVT,
71   NFA_DTA_DATA_CBACK_EVT,
72 
73   NFA_DTA_MAX_EVT
74 };
75 
76 /* data type for NFA_DTA_API_ENABLE_EVT */
77 typedef struct {
78   NFC_HDR hdr;
79   bool auto_start;
80   tNFA_DTA_CBACK* p_cback;
81 } tNFA_DTA_API_ENABLE;
82 
83 /* data type for NFA_DTA_API_START_EVT  */
84 typedef struct {
85   NFC_HDR hdr;
86   uint16_t pattern_number;
87   uint8_t tlv_len;
88   uint8_t* p_tlv_params;
89 } tNFA_DTA_API_START;
90 
91 /* data type for NFA_DTA_API_CONFIG  */
92 typedef struct {
93   NFC_HDR hdr;
94   tNFA_DTA_CFG_ITEM item;
95   tNFA_DTA_CFG cfg_data;
96 } tNFA_DTA_API_CONFIG;
97 
98 /* data type for NFA_DTA_DATA_CBACK_EVT */
99 typedef struct {
100   uint8_t event;
101   tRW_DATA data;
102 } tNFA_DTA_RW_DATA;
103 
104 typedef struct {
105   uint8_t event;
106   tCE_DATA data;
107 } tNFA_DTA_CE_DATA;
108 
109 typedef struct {
110   tNFC_CONN_EVT event;
111   tNFC_CONN data;
112 } tNFA_DTA_NFCDEP_DATA;
113 
114 typedef uint8_t tNFA_DTA_LLCP_EVT;
115 
116 typedef uint8_t tNFA_DTA_DATA_TYPE;
117 
118 typedef struct {
119   NFC_HDR hdr;
120   tNFA_DTA_DATA_TYPE type;
121   union {
122     tNFA_DTA_RW_DATA rw;
123     tNFA_DTA_CE_DATA ce;
124     tNFA_DTA_NFCDEP_DATA nfcdep;
125     tNFA_DTA_LLCP_EVT llcp_evt;
126   } data;
127 } tNFA_DTA_DATA_CBACK;
128 
129 /* All API message type */
130 typedef union {
131   NFC_HDR hdr;
132   tNFA_DTA_API_ENABLE enable;
133   tNFA_DTA_API_CONFIG cfg;
134   tNFA_DTA_API_START start;
135   tNFA_DTA_DATA_CBACK data_cback;
136 } tNFA_DTA_MSG;
137 
138 typedef uint8_t tNFA_DTA_STATE;
139 
140 typedef uint8_t tNFA_DTA_SUBSTATE;
141 
142 /*****************************************************************************
143 * DTA control block definitions
144 *****************************************************************************/
145 
146 /* NDEF buffer definitions */
147 enum {
148   NFA_DTA_BUF_MAX
149 };
150 
151 typedef struct {
152   uint8_t* p_data;
153   uint32_t max_size;
154   uint32_t cur_size;
155   uint32_t offset; /* current read/write offset */
156 } tNFA_DTA_BUF_CB;
157 
158 /* DTA test step command */
159 typedef tNFC_STATUS (*tNFA_DTA_CMD_FCN)(void*);
160 
161 /* DTA control block */
162 typedef struct {
163   uint32_t dta_flags; /* dta_flags must be first item in structure (statically
164                          intialized to 0 on startup) */
165 
166   /* Configuration */
167   tNFA_DTA_CONFIG cfg;
168 
169   /* DTA State Machine */
170   tNFA_DTA_STATE state;
171   tNFA_DTA_SUBSTATE substate; /* Current protocol-specific sub-state */
172   tNFA_DTA_CBACK* p_cback;    /* Applicatation for DTA event notification */
173 
174   /* DTA test parameters */
175   uint16_t pattern_number;
176   uint16_t pattern_number_old;
177 
178   /* Discovery Parameters */
179   uint8_t disc_state;
180   uint8_t disc_params_num;
181   tNFC_DISCOVER_PARAMS disc_params[NFA_DTA_DISCOVER_PARAMS_MAX];
182 
183   /* Activation parameters */
184   tNFC_ACTIVATE_DEVT activate_params;
185   uint8_t cur_protocol_rank; /* perference ranking of currently discovered
186                                 protocol */
187 
188   tRW_CBACK* p_rw_cback;
189   tCE_CBACK* p_ce_cback;
190 
191   TIMER_LIST_ENT
192   protocol_timer; /* timer for the activated protocol if needed */
193 
194   uint8_t t4t_ce_app; /* T4T listen mode test application */
195   tCE_T4T_AID_HANDLE
196       t4t_dta_aid_hdl; /* T4T registration handle for proprietary dta aid */
197   tCE_T4T_AID_HANDLE
198       t4t_prop_aid_hdl; /* T4T registration handle for proprietary aid */
199   uint8_t nfc_dep_wt;
200 
201   bool llcp_cl_more_to_read; /* TRUE if there is more to read in llcp cl link*/
202   bool llcp_co_more_to_read; /* TRUE if there is more to read in llcp recieve
203                                 window*/
204   bool llcp_is_initiator;    /* TURE if IUT is LLCP initiator */
205   uint16_t llcp_local_link_miu;  /* link MIU of IUT               */
206   uint16_t llcp_remote_link_miu; /* link MIU of LT                */
207 
208   uint8_t llcp_pattern_num_sap; /* SAP of pattern number exchange */
209 
210   uint8_t llcp_cl_in_local_sap;   /* SAP of IUT-CL-IN-DEST */
211   uint8_t llcp_cl_out_local_sap;  /* SAP of IUT-CL-OUT-SRC */
212   uint8_t llcp_cl_out_remote_sap; /* SAP of LT-CL-OUT-DEST */
213 
214   uint8_t llcp_co_in_local_sap;   /* SAP of IUT-CO-IN-DEST */
215   uint8_t llcp_co_in_remote_sap;  /* SAP of LT-CO-IN-SRC   */
216   uint8_t llcp_co_out_local_sap;  /* SAP of IUT-CO-OUT-SRC */
217   uint8_t llcp_co_out_remote_sap; /* SAP of LT-CO-OUT-DEST */
218 
219   uint16_t llcp_co_out_remote_miu; /* MIU of LT-CO-OUT-DEST */
220   uint8_t llcp_co_out_remote_rw;   /* RW of LT-CO-OUT-DEST  */
221 
222   uint8_t llcp_flags;      /* internal flags for LLCP echo test */
223   uint8_t llcp_sdp_tid_cl; /* SDP transaction ID for outbound connectionless */
224   uint8_t
225       llcp_sdp_tid_co; /* SDP transaction ID for outbound connection-oriented */
226 
227   TIMER_LIST_ENT llcp_cl_echo_timer; /* timer for the connectionless echo test
228                                         application      */
229   TIMER_LIST_ENT llcp_co_echo_timer; /* timer for the connection-oriented echo
230                                         test application */
231   BUFFER_Q
232   llcp_cl_buffer; /* buffer for the connectionless echo test application */
233   BUFFER_Q llcp_co_buffer; /* buffer for the connection-oriented echo test
234                               application*/
235 
236   tNFA_HANDLE snep_server_handle;
237   tNFA_HANDLE snep_server_conn_handle;
238   tNFA_HANDLE snep_client_handle;
239 
240   uint8_t* p_snep_short_ndef;
241   uint32_t snep_short_ndef_size;
242   uint8_t* p_snep_long_ndef;
243   uint32_t snep_long_ndef_size;
244 
245   /* DTA buffer for NDEF read/write */
246   tNFA_DTA_BUF_CB buf_cb[NFA_DTA_BUF_MAX];
247   uint32_t ndef_size; /* Size of NDEF message from NDEF detection */
248 
249   /* Scratch buffer for miscelaneous use */
250   uint8_t scratch_buf[NFA_DTA_SCRATCH_BUF_SIZE];
251 
252   /* DTA Test command table */
253   tNFA_DTA_CMD_FCN*
254       p_cur_cmd_tbl; /* Current table of commands for current test */
255   uint8_t cur_cmd_idx;
256 } tNFA_DTA_CB;
257 extern tNFA_DTA_CB nfa_dta_cb;
258 
259 /* NFA_SYS info for DTA */
260 extern const tNFA_SYS_REG nfa_dta_sys_reg;
261 
262 /* DTA startup setconfig parameters */
263 extern uint8_t* p_nfa_dta_start_up_cfg;
264 extern uint8_t nfa_dta_start_up_cfg_len;
265 
266 /*****************************************************************************
267 * DTA internal funciton protoytpes
268 *****************************************************************************/
269 
270 extern uint8_t* p_nfa_dta_brcm_start_up_cfg;
271 extern uint8_t nfa_dta_brcm_start_up_cfg_len;
272 extern uint8_t* p_nfa_dta_start_up_vsc_cfg;
273 
274 #endif /* (NFA_DTA_INCLUDED == TRUE) */
275 #endif /* NFA_DTA_INT_H */
276