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