1 /******************************************************************************
2  *
3  *  Copyright (C) 2009-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  *
22  *  This file contains the Near Field Communication (NFC) Card Emulation
23  *  mode related API function external definitions.
24  *
25  ******************************************************************************/
26 
27 #ifndef CE_API_H
28 #define CE_API_H
29 
30 #include "tags_defs.h"
31 
32 #define CE_T3T_FIRST_EVT    0x60
33 #define CE_T4T_FIRST_EVT    0x80
34 
35 enum
36 {
37     CE_T3T_NDEF_UPDATE_START_EVT = CE_T3T_FIRST_EVT,
38     CE_T3T_NDEF_UPDATE_CPLT_EVT,
39     CE_T3T_UPDATE_EVT,
40     CE_T3T_CHECK_EVT,
41     CE_T3T_RAW_FRAME_EVT,
42     CE_T3T_MAX_EVT,
43 
44     CE_T4T_NDEF_UPDATE_START_EVT  = CE_T4T_FIRST_EVT,
45     CE_T4T_NDEF_UPDATE_CPLT_EVT,
46     CE_T4T_NDEF_UPDATE_ABORT_EVT,
47     CE_T4T_RAW_FRAME_EVT,
48     CE_T4T_MAX_EVT
49 };
50 
51 
52 #define CE_RAW_FRAME_EVT     0xFF
53 
54 typedef UINT8 tCE_EVENT;
55 
56 typedef struct
57 {
58     tNFC_STATUS     status;
59     BT_HDR         *p_data;
60 } tCE_T2T_DATA;
61 
62 typedef struct
63 {
64     tNFC_STATUS     status;
65     UINT8          *p_data;
66     BOOLEAN         b_updated;
67     UINT32          length;
68 } tCE_UPDATE_INFO;
69 
70 typedef struct
71 {
72     tNFC_STATUS     status;
73     UINT8           aid_handle;
74     BT_HDR         *p_data;
75 } tCE_RAW_FRAME;
76 
77 typedef union
78 {
79     tNFC_STATUS         status;
80     tCE_UPDATE_INFO     update_info;
81     tCE_RAW_FRAME       raw_frame;
82 } tCE_DATA;
83 
84 typedef void (tCE_CBACK) (tCE_EVENT event, tCE_DATA *p_data);
85 
86 
87 /* T4T definitions */
88 typedef UINT8 tCE_T4T_AID_HANDLE;           /* Handle for AID registration  */
89 #define CE_T4T_AID_HANDLE_INVALID   0xFF    /* Invalid tCE_T4T_AID_HANDLE               */
90 #define CE_T4T_WILDCARD_AID_HANDLE  (CE_T4T_MAX_REG_AID)    /* reserved handle for wildcard aid */
91 
92 /*******************************************************************************
93 **
94 ** Function         CE_T3tSetLocalNDEFMsg
95 **
96 ** Description      Initialise CE Type 3 Tag with mandatory NDEF message
97 **
98 ** Returns          NFC_STATUS_OK if success
99 **
100 *******************************************************************************/
101 NFC_API extern tNFC_STATUS CE_T3tSetLocalNDEFMsg (BOOLEAN read_only,
102                                 UINT32 size_max,
103                                 UINT32 size_current,
104                                 UINT8 *p_buf,
105                                 UINT8 *p_scratch_buf);
106 
107 /*******************************************************************************
108 **
109 ** Function         CE_T3tSetLocalNDefParams
110 **
111 ** Description      Sets T3T-specific NDEF parameters. (Optional - if not
112 **                  called, then CE will use default parameters)
113 **
114 ** Returns          NFC_STATUS_OK if success
115 **
116 *******************************************************************************/
117 NFC_API extern tNFC_STATUS CE_T3tSetLocalNDefParams (UINT8 nbr, UINT8 nbw);
118 
119 /*******************************************************************************
120 **
121 ** Function         CE_T3tSendCheckRsp
122 **
123 ** Description      Send CHECK response message
124 **
125 ** Returns          NFC_STATUS_OK if success
126 **
127 *******************************************************************************/
128 NFC_API extern tNFC_STATUS CE_T3tSendCheckRsp (UINT8 status1, UINT8 status2, UINT8 num_blocks, UINT8 *p_block_data);
129 
130 /*******************************************************************************
131 **
132 ** Function         CE_T3tSendUpdateRsp
133 **
134 ** Description      Send UPDATE response message
135 **
136 ** Returns          NFC_STATUS_OK if success
137 **
138 *******************************************************************************/
139 NFC_API extern tNFC_STATUS CE_T3tSendUpdateRsp (UINT8 status1, UINT8 status2);
140 
141 /*******************************************************************************
142 **
143 ** Function         CE_T4tSetLocalNDEFMsg
144 **
145 ** Description      Initialise CE Type 4 Tag with mandatory NDEF message
146 **
147 **                  The following event may be returned
148 **                      CE_T4T_UPDATE_START_EVT for starting update
149 **                      CE_T4T_UPDATE_CPLT_EVT for complete update
150 **                      CE_T4T_UPDATE_ABORT_EVT for failure of update
151 **                      CE_T4T_RAW_FRAME_EVT for raw frame
152 **
153 **                  read_only:      TRUE if read only
154 **                  ndef_msg_max:   Max NDEF message size
155 **                  ndef_msg_len:   NDEF message size
156 **                  p_ndef_msg:     NDEF message (excluding NLEN)
157 **                  p_scratch_buf:  temp storage for update
158 **
159 ** Returns          NFC_STATUS_OK if success
160 **
161 *******************************************************************************/
162 NFC_API extern tNFC_STATUS CE_T4tSetLocalNDEFMsg (BOOLEAN    read_only,
163                                                   UINT16     ndef_msg_max,
164                                                   UINT16     ndef_msg_len,
165                                                   UINT8     *p_ndef_msg,
166                                                   UINT8     *p_scratch_buf);
167 
168 /*******************************************************************************
169 **
170 ** Function         CE_T4tRegisterAID
171 **
172 ** Description      Register AID in CE T4T
173 **
174 **                  aid_len: length of AID (up to NFC_MAX_AID_LEN)
175 **                  p_aid:   AID
176 **                  p_cback: Raw frame will be forwarded with CE_RAW_FRAME_EVT
177 **
178 ** Returns          tCE_T4T_AID_HANDLE if successful,
179 **                  CE_T4T_AID_HANDLE_INVALID otherwisse
180 **
181 *******************************************************************************/
182 NFC_API extern tCE_T4T_AID_HANDLE CE_T4tRegisterAID (UINT8      aid_len,
183                                                      UINT8      *p_aid,
184                                                      tCE_CBACK  *p_cback);
185 
186 /*******************************************************************************
187 **
188 ** Function         CE_T4tDeregisterAID
189 **
190 ** Description      Deregister AID in CE T4T
191 **
192 **                  aid_len: length of AID (up to NFC_MAX_AID_LEN)
193 **                  p_aid:   AID
194 **
195 ** Returns          NFC_STATUS_OK if success
196 **
197 *******************************************************************************/
198 NFC_API extern void CE_T4tDeregisterAID (tCE_T4T_AID_HANDLE aid_handle);
199 
200 /*******************************************************************************
201 **
202 ** Function         CE_T4TTestSetCC
203 **
204 ** Description      Set fields in Capability Container File for testing
205 **
206 ** Returns          NFC_STATUS_OK if success
207 **
208 *******************************************************************************/
209 NFC_API extern tNFC_STATUS CE_T4TTestSetCC (UINT16 cc_len,
210                                             UINT8  version,
211                                             UINT16 max_le,
212                                             UINT16 max_lc);
213 
214 /*******************************************************************************
215 **
216 ** Function         CE_T4TTestSetNDEFCtrlTLV
217 **
218 ** Description      Set fields in NDEF File Control TLV for testing
219 **
220 ** Returns          NFC_STATUS_OK if success
221 **
222 *******************************************************************************/
223 NFC_API extern tNFC_STATUS CE_T4TTestSetNDEFCtrlTLV (UINT8  type,
224                                                      UINT8  length,
225                                                      UINT16 file_id,
226                                                      UINT16 max_file_size,
227                                                      UINT8  read_access,
228                                                      UINT8  write_access);
229 
230 /*******************************************************************************
231 **
232 ** Function         CE_SendRawFrame
233 **
234 ** Description      This function sends a raw frame to the peer device.
235 **
236 ** Returns          tNFC_STATUS
237 **
238 *******************************************************************************/
239 NFC_API extern tNFC_STATUS CE_SendRawFrame (UINT8 *p_raw_data, UINT16 data_len);
240 
241 /*******************************************************************************
242 **
243 ** Function         CE_SetActivatedTagType
244 **
245 ** Description      This function selects the tag type for Reader/Writer mode.
246 **
247 ** Returns          tNFC_STATUS
248 **
249 *******************************************************************************/
250 NFC_API extern tNFC_STATUS CE_SetActivatedTagType (tNFC_ACTIVATE_DEVT *p_activate_params, UINT16 t3t_system_code, tCE_CBACK *p_cback);
251 
252 /*******************************************************************************
253 **
254 ** Function         CE_SetTraceLevel
255 **
256 ** Description      This function sets the trace level for Card Emulation mode.
257 **                  If called with a value of 0xFF,
258 **                  it simply returns the current trace level.
259 **
260 ** Returns          The new or current trace level
261 **
262 *******************************************************************************/
263 NFC_API extern UINT8 CE_SetTraceLevel (UINT8 new_level);
264 
265 #endif /* CE_API_H */
266