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) Reader/Writer mode
23  *  related API function external definitions.
24  *
25  ******************************************************************************/
26 
27 #ifndef RW_API_H
28 #define RW_API_H
29 #include "tags_defs.h"
30 
31 #define RW_T1T_BLD_ADD(a, k, y)   a = ((k & 0xF) << 3) | (y&0x7);
32 #define RW_T1T_BLD_ADDS(a, s)     a = ((s & 0xF) << 4);
33 
34 #define RW_T1T_FIRST_EVT    0x20
35 #define RW_T2T_FIRST_EVT    0x40
36 #define RW_T3T_FIRST_EVT    0x60
37 #define RW_T4T_FIRST_EVT    0x80
38 #define RW_I93_FIRST_EVT    0xA0
39 
40 enum
41 {
42     /* Note: the order of these events can not be changed */
43     /* Type 1 tag events for tRW_CBACK */
44     RW_T1T_RID_EVT = RW_T1T_FIRST_EVT,          /* Read ID command completd              */
45     RW_T1T_RALL_CPLT_EVT,                       /* Read All command completed            */
46     RW_T1T_READ_CPLT_EVT,                       /* Read byte completed                   */
47     RW_T1T_WRITE_E_CPLT_EVT,                    /* Write byte after erase completed      */
48     RW_T1T_WRITE_NE_CPLT_EVT,                   /* Write byte with no erase completed    */
49     RW_T1T_RSEG_CPLT_EVT,                       /* Read segment completed                */
50     RW_T1T_READ8_CPLT_EVT,                      /* Read block completed                  */
51     RW_T1T_WRITE_E8_CPLT_EVT,                   /* Write block after erase completed     */
52     RW_T1T_WRITE_NE8_CPLT_EVT,                  /* Write block with no erase completed   */
53     RW_T1T_TLV_DETECT_EVT,                      /* Lock/Mem/Prop tlv detection complete  */
54     RW_T1T_NDEF_DETECT_EVT,                     /* NDEF detection complete               */
55     RW_T1T_NDEF_READ_EVT,                       /* NDEF read completed                   */
56     RW_T1T_NDEF_WRITE_EVT,                      /* NDEF write complete                   */
57     RW_T1T_SET_TAG_RO_EVT,                      /* Tag is set as read only               */
58     RW_T1T_RAW_FRAME_EVT,                       /* Response of raw frame sent            */
59     RW_T1T_PRESENCE_CHECK_EVT,                  /* Response to RW_T1tPresenceCheck       */
60     RW_T1T_FORMAT_CPLT_EVT,                     /* Tag Formated                          */
61     RW_T1T_INTF_ERROR_EVT,                      /* RF Interface error event              */
62     RW_T1T_MAX_EVT,
63 
64     /* Type 2 tag events */
65     RW_T2T_READ_CPLT_EVT = RW_T2T_FIRST_EVT,    /* Read completed                        */
66     RW_T2T_WRITE_CPLT_EVT,                      /* Write completed                       */
67     RW_T2T_SELECT_CPLT_EVT,                     /* Sector select completed               */
68     RW_T2T_NDEF_DETECT_EVT,                     /* NDEF detection complete               */
69     RW_T2T_TLV_DETECT_EVT,                      /* Lock/Mem/Prop tlv detection complete  */
70     RW_T2T_NDEF_READ_EVT,                       /* NDEF read completed                   */
71     RW_T2T_NDEF_WRITE_EVT,                      /* NDEF write complete                   */
72     RW_T2T_SET_TAG_RO_EVT,                      /* Tag is set as read only               */
73     RW_T2T_RAW_FRAME_EVT,                       /* Response of raw frame sent            */
74     RW_T2T_PRESENCE_CHECK_EVT,                  /* Response to RW_T2tPresenceCheck       */
75     RW_T2T_FORMAT_CPLT_EVT,                     /* Tag Formated                          */
76     RW_T2T_INTF_ERROR_EVT,                      /* RF Interface error event              */
77     RW_T2T_MAX_EVT,
78 
79     /* Type 3 tag events for tRW_CBACK */
80     RW_T3T_CHECK_CPLT_EVT = RW_T3T_FIRST_EVT,   /* Read completed                           */
81     RW_T3T_UPDATE_CPLT_EVT,                     /* Write completed                          */
82     RW_T3T_CHECK_EVT,                           /* Segment of data received from type 3 tag */
83     RW_T3T_RAW_FRAME_EVT,                       /* SendRawFrame response                    */
84     RW_T3T_NDEF_DETECT_EVT,                     /* NDEF detection complete                  */
85     RW_T3T_PRESENCE_CHECK_EVT,                  /* Response to RW_T3tPresenceCheck          */
86     RW_T3T_POLL_EVT,                            /* Response to RW_T3tPoll                   */
87     RW_T3T_GET_SYSTEM_CODES_EVT,                /* Response to RW_T3tGetSystemCodes         */
88     RW_T3T_FORMAT_CPLT_EVT,                     /* Tag Formated (Felica-Lite only)          */
89     RW_T3T_SET_READ_ONLY_CPLT_EVT,              /* Tag is set as Read only                  */
90     RW_T3T_INTF_ERROR_EVT,                      /* RF Interface error event                 */
91     RW_T3T_MAX_EVT,
92 
93     /* Type 4 tag events for tRW_CBACK */
94     RW_T4T_NDEF_DETECT_EVT = RW_T4T_FIRST_EVT,  /* Result of NDEF detection procedure       */
95                                                 /* Mandatory NDEF file is selected          */
96     RW_T4T_NDEF_READ_EVT,                       /* Segment of data received from type 4 tag */
97     RW_T4T_NDEF_READ_CPLT_EVT,                  /* Read operation completed                 */
98     RW_T4T_NDEF_READ_FAIL_EVT,                  /* Read operation failed                    */
99     RW_T4T_NDEF_UPDATE_CPLT_EVT,                /* Update operation completed               */
100     RW_T4T_NDEF_UPDATE_FAIL_EVT,                /* Update operation failed                  */
101     RW_T4T_SET_TO_RO_EVT,                       /* Tag is set as read only                  */
102     RW_T4T_PRESENCE_CHECK_EVT,                  /* Response to RW_T4tPresenceCheck          */
103     RW_T4T_RAW_FRAME_EVT,                       /* Response of raw frame sent               */
104     RW_T4T_INTF_ERROR_EVT,                      /* RF Interface error event                 */
105     RW_T4T_NDEF_FORMAT_CPLT_EVT,                /* Format operation completed               */
106     RW_T4T_MAX_EVT,
107 
108     /* ISO 15693 tag events for tRW_CBACK */
109     RW_I93_NDEF_DETECT_EVT = RW_I93_FIRST_EVT,  /* Result of NDEF detection procedure */
110     RW_I93_NDEF_READ_EVT,                       /* Segment of data received from tag  */
111     RW_I93_NDEF_READ_CPLT_EVT,                  /* Read operation completed           */
112     RW_I93_NDEF_READ_FAIL_EVT,                  /* Read operation failed              */
113     RW_I93_NDEF_UPDATE_CPLT_EVT,                /* Update operation completed         */
114     RW_I93_NDEF_UPDATE_FAIL_EVT,                /* Update operation failed            */
115     RW_I93_FORMAT_CPLT_EVT,                     /* Format procedure complete          */
116     RW_I93_SET_TAG_RO_EVT,                      /* Set read-only procedure complete   */
117     RW_I93_INVENTORY_EVT,                       /* Response of Inventory              */
118     RW_I93_DATA_EVT,                            /* Response of Read, Get Multi Security */
119     RW_I93_SYS_INFO_EVT,                        /* Response of System Information     */
120     RW_I93_CMD_CMPL_EVT,                        /* Command complete                   */
121     RW_I93_PRESENCE_CHECK_EVT,                  /* Response to RW_I93PresenceCheck    */
122     RW_I93_RAW_FRAME_EVT,                       /* Response of raw frame sent         */
123     RW_I93_INTF_ERROR_EVT,                      /* RF Interface error event           */
124     RW_I93_MAX_EVT
125 };
126 
127 #define RW_RAW_FRAME_EVT     0xFF
128 
129 typedef UINT8 tRW_EVENT;
130 
131 #define RW_NDEF_FL_READ_ONLY                    0x01    /* Tag is read only              */
132 #define RW_NDEF_FL_FORMATED                     0x02    /* Tag formated for NDEF         */
133 #define RW_NDEF_FL_SUPPORTED                    0x04    /* NDEF supported by the tag     */
134 #define RW_NDEF_FL_UNKNOWN                      0x08    /* Unable to find if tag is ndef capable/formated/read only */
135 #define RW_NDEF_FL_FORMATABLE                   0x10    /* Tag supports format operation */
136 #define RW_NDEF_FL_SOFT_LOCKABLE                0x20    /* Tag can be soft locked */
137 #define RW_NDEF_FL_HARD_LOCKABLE                0x40    /* Tag can be hard locked */
138 #define RW_NDEF_FL_OTP                          0x80    /* Tag is one time programmable */
139 
140 typedef UINT8 tRW_NDEF_FLAG;
141 
142 /* options for RW_T4tPresenceCheck  */
143 #define RW_T4T_CHK_READ_BINARY_CH0      0
144 #define RW_T4T_CHK_READ_BINARY_CH1      1
145 #define RW_T4T_CHK_READ_BINARY_CH2      2
146 #define RW_T4T_CHK_READ_BINARY_CH3      3
147 #define RW_T4T_CHK_EMPTY_I_BLOCK        4
148 
149 typedef struct
150 {
151     tNFC_STATUS     status;
152     UINT8           hr[T1T_HR_LEN];
153     UINT8           uid[T1T_CMD_UID_LEN];
154 } tRW_T1T_RID_EVT;
155 
156 typedef struct
157 {
158     tNFC_STATUS     status;
159     UINT16          msg_len;            /* Length of the NDEF message */
160 } tRW_T2T_DETECT;
161 
162 typedef struct
163 {
164     tNFC_STATUS     status;             /* Status of the POLL request */
165     UINT8           rc;                 /* RC (request code) used in the POLL request */
166     UINT8           response_num;       /* Number of SENSF_RES responses */
167     UINT8           response_bufsize;   /* Size of SENSF_RES responses */
168     UINT8           *response_buf;      /* Buffer of responses (length + SENSF_RES) see $8.1.2.2 of NCI specs */
169 } tRW_T3T_POLL;
170 
171 typedef struct
172 {
173     tNFC_STATUS     status;             /* Status of the Get System Codes request */
174     UINT8           num_system_codes;   /* Number of system codes */
175     UINT16          *p_system_codes;    /* Table of system codes */
176 } tRW_T3T_SYSTEM_CODES;
177 
178 typedef struct
179 {
180     tNFC_STATUS     status;             /* status of NDEF detection */
181     tNFC_PROTOCOL   protocol;           /* protocol used to detect NDEF */
182     UINT32          max_size;           /* max number of bytes available for NDEF data */
183     UINT32          cur_size;           /* current size of stored NDEF data (in bytes) */
184     tRW_NDEF_FLAG   flags;              /* Flags to indicate NDEF capability,formated,formatable and read only */
185 } tRW_DETECT_NDEF_DATA;
186 
187 typedef struct
188 {
189     tNFC_STATUS     status;             /* status of NDEF detection */
190     tNFC_PROTOCOL   protocol;           /* protocol used to detect TLV */
191     UINT8           num_bytes;          /* number of reserved/lock bytes based on the type of tlv */
192 } tRW_DETECT_TLV_DATA;
193 
194 typedef struct
195 {
196     tNFC_STATUS     status;
197     BT_HDR         *p_data;
198 } tRW_READ_DATA;
199 
200 typedef struct
201 {
202     tNFC_STATUS     status;
203     UINT8           sw1;
204     UINT8           sw2;
205 } tRW_T4T_SW;
206 
207 typedef struct                              /* RW_I93_INVENTORY_EVT        */
208 {
209     tNFC_STATUS     status;                 /* status of Inventory command */
210     UINT8           dsfid;                  /* DSFID                       */
211     UINT8           uid[I93_UID_BYTE_LEN];  /* UID[0]:MSB, ... UID[7]:LSB  */
212 } tRW_I93_INVENTORY;
213 
214 typedef struct                              /* RW_I93_DATA_EVT               */
215 {
216     tNFC_STATUS     status;                 /* status of Read/Get security status command */
217     UINT8           command;                /* sent command                  */
218     BT_HDR         *p_data;                 /* block data of security status */
219 } tRW_I93_DATA;
220 
221 typedef struct                              /* RW_I93_SYS_INFO_EVT             */
222 {
223     tNFC_STATUS     status;                 /* status of Get Sys Info command  */
224     UINT8           info_flags;             /* information flags               */
225     UINT8           uid[I93_UID_BYTE_LEN];  /* UID[0]:MSB, ... UID[7]:LSB      */
226     UINT8           dsfid;                  /* DSFID if I93_INFO_FLAG_DSFID    */
227     UINT8           afi;                    /* AFI if I93_INFO_FLAG_AFI        */
228     UINT16          num_block;              /* number of blocks if I93_INFO_FLAG_MEM_SIZE   */
229     UINT8           block_size;             /* block size in byte if I93_INFO_FLAG_MEM_SIZE */
230     UINT8           IC_reference;           /* IC Reference if I93_INFO_FLAG_IC_REF         */
231 } tRW_I93_SYS_INFO;
232 
233 typedef struct                              /* RW_I93_CMD_CMPL_EVT             */
234 {
235     tNFC_STATUS     status;                 /* status of sent command          */
236     UINT8           command;                /* sent command                    */
237     UINT8           error_code;             /* error code; I93_ERROR_CODE_XXX  */
238 } tRW_I93_CMD_CMPL;
239 
240 typedef struct
241 {
242     tNFC_STATUS     status;
243     BT_HDR         *p_data;
244 } tRW_RAW_FRAME;
245 
246 typedef union
247 {
248     tNFC_STATUS             status;
249     tRW_T3T_POLL            t3t_poll;   /* Response to t3t poll command          */
250     tRW_T3T_SYSTEM_CODES    t3t_sc;     /* Received system codes from t3 tag     */
251     tRW_DETECT_TLV_DATA     tlv;        /* The information of detected TLV data  */
252     tRW_DETECT_NDEF_DATA    ndef;       /* The information of detected NDEF data */
253     tRW_READ_DATA           data;       /* The received data from a tag          */
254     tRW_RAW_FRAME           raw_frame;  /* Response of raw frame sent            */
255     tRW_T4T_SW              t4t_sw;     /* Received status words from a tag      */
256     tRW_I93_INVENTORY       i93_inventory;  /* ISO 15693 Inventory response      */
257     tRW_I93_DATA            i93_data;       /* ISO 15693 Data response           */
258     tRW_I93_SYS_INFO        i93_sys_info;   /* ISO 15693 System Information      */
259     tRW_I93_CMD_CMPL        i93_cmd_cmpl;   /* ISO 15693 Command complete        */
260 } tRW_DATA;
261 
262 
263 typedef void (tRW_CBACK) (tRW_EVENT event, tRW_DATA *p_data);
264 
265 /*******************************************************************************
266 **
267 ** Function         RW_T1tRid
268 **
269 ** Description      This function send a RID command for Reader/Writer mode.
270 **
271 ** Returns          tNFC_STATUS
272 **
273 *******************************************************************************/
274 NFC_API extern tNFC_STATUS RW_T1tRid (void);
275 
276 /*******************************************************************************
277 **
278 ** Function         RW_T1tReadAll
279 **
280 ** Description      This function send a RALL command for Reader/Writer mode.
281 **
282 ** Returns          tNFC_STATUS
283 **
284 *******************************************************************************/
285 NFC_API extern tNFC_STATUS RW_T1tReadAll (void);
286 
287 /*******************************************************************************
288 **
289 ** Function         RW_T1tRead
290 **
291 ** Description      This function send a READ command for Reader/Writer mode.
292 **
293 ** Returns          tNFC_STATUS
294 **
295 *******************************************************************************/
296 NFC_API extern tNFC_STATUS RW_T1tRead (UINT8 block, UINT8 byte);
297 
298 /*******************************************************************************
299 **
300 ** Function         RW_T1tWriteErase
301 **
302 ** Description      This function send a WRITE-E command for Reader/Writer mode.
303 **
304 ** Returns          tNFC_STATUS
305 **
306 *******************************************************************************/
307 NFC_API extern tNFC_STATUS RW_T1tWriteErase (UINT8 block, UINT8 byte, UINT8 new_byte);
308 
309 /*******************************************************************************
310 **
311 ** Function         RW_T1tWriteNoErase
312 **
313 ** Description      This function send a WRITE-NE command for Reader/Writer mode.
314 **
315 ** Returns          tNFC_STATUS
316 **
317 *******************************************************************************/
318 NFC_API extern tNFC_STATUS RW_T1tWriteNoErase (UINT8 block, UINT8 byte, UINT8 new_byte);
319 
320 /*******************************************************************************
321 **
322 ** Function         RW_T1tReadSeg
323 **
324 ** Description      This function send a RSEG command for Reader/Writer mode.
325 **
326 ** Returns          tNFC_STATUS
327 **
328 *******************************************************************************/
329 NFC_API extern tNFC_STATUS RW_T1tReadSeg (UINT8 segment);
330 
331 /*******************************************************************************
332 **
333 ** Function         RW_T1tRead8
334 **
335 ** Description      This function send a READ8 command for Reader/Writer mode.
336 **
337 ** Returns          tNFC_STATUS
338 **
339 *******************************************************************************/
340 NFC_API extern tNFC_STATUS RW_T1tRead8 (UINT8 block);
341 
342 /*******************************************************************************
343 **
344 ** Function         RW_T1tWriteErase8
345 **
346 ** Description      This function send a WRITE-E8 command for Reader/Writer mode.
347 **
348 ** Returns          tNFC_STATUS
349 **
350 *******************************************************************************/
351 NFC_API extern tNFC_STATUS RW_T1tWriteErase8 (UINT8 block, UINT8 *p_new_dat);
352 
353 /*******************************************************************************
354 **
355 ** Function         RW_T1tWriteNoErase8
356 **
357 ** Description      This function send a WRITE-NE8 command for Reader/Writer mode.
358 **
359 ** Returns          tNFC_STATUS
360 **
361 *******************************************************************************/
362 NFC_API extern tNFC_STATUS RW_T1tWriteNoErase8 (UINT8 block, UINT8 *p_new_dat);
363 
364 /*******************************************************************************
365 **
366 ** Function         RW_T1tLocateTlv
367 **
368 ** Description      This function is called to find the start of the given TLV
369 **
370 ** Parameters:      void
371 **
372 ** Returns          NCI_STATUS_OK, if detection was started. Otherwise, error status.
373 **
374 *******************************************************************************/
375 NFC_API extern tNFC_STATUS RW_T1tLocateTlv (UINT8 tlv_type);
376 
377 /*******************************************************************************
378 **
379 ** Function         RW_T1tDetectNDef
380 **
381 ** Description      This function can be called to detect if there is an NDEF
382 **                  message on the tag.
383 **
384 ** Parameters:      void
385 **
386 ** Returns          NCI_STATUS_OK, if detection was started. Otherwise, error status.
387 **
388 *******************************************************************************/
389 NFC_API extern tNFC_STATUS RW_T1tDetectNDef (void);
390 
391 /*******************************************************************************
392 **
393 ** Function         RW_T1tReadNDef
394 **
395 ** Description      This function can be called to read the NDEF message on the tag.
396 **
397 ** Parameters:      p_buffer:   The buffer into which to read the NDEF message
398 **                  buf_len:    The length of the buffer
399 **
400 ** Returns          NCI_STATUS_OK, if read was started. Otherwise, error status.
401 **
402 *******************************************************************************/
403 NFC_API extern tNFC_STATUS RW_T1tReadNDef (UINT8 *p_buffer, UINT16 buf_len);
404 
405 /*******************************************************************************
406 **
407 ** Function         RW_T1tWriteNDef
408 **
409 ** Description      This function can be called to write an NDEF message to the tag.
410 **
411 ** Parameters:      msg_len:    The length of the buffer
412 **                  p_msg:      The NDEF message to write
413 **
414 ** Returns          NCI_STATUS_OK, if write was started. Otherwise, error status.
415 **
416 *******************************************************************************/
417 NFC_API extern tNFC_STATUS RW_T1tWriteNDef (UINT16 msg_len, UINT8 *p_msg);
418 
419 /*******************************************************************************
420 **
421 ** Function         RW_T1tSetTagReadOnly
422 **
423 ** Description      This function can be called to set the tag in to read only
424 **                  state
425 **
426 ** Parameters:      b_hard_lock: To hard lock or just soft lock the tag
427 **
428 ** Returns          NCI_STATUS_OK, if set readonly operation started.
429 **                                 Otherwise, error status.
430 **
431 *******************************************************************************/
432 NFC_API extern tNFC_STATUS RW_T1tSetTagReadOnly (BOOLEAN b_hard_lock);
433 
434 /*****************************************************************************
435 **
436 ** Function         RW_T1tPresenceCheck
437 **
438 ** Description
439 **      Check if the tag is still in the field.
440 **
441 **      The RW_T1T_PRESENCE_CHECK_EVT w/ status is used to indicate presence
442 **      or non-presence.
443 **
444 ** Returns
445 **      NFC_STATUS_OK, if raw data frame sent
446 **      NFC_STATUS_NO_BUFFERS: unable to allocate a buffer for this operation
447 **      NFC_STATUS_FAILED: other error
448 **
449 *****************************************************************************/
450 NFC_API extern tNFC_STATUS RW_T1tPresenceCheck (void);
451 
452 /*****************************************************************************
453 **
454 ** Function         RW_T1tFormatNDef
455 **
456 ** Description
457 **      Format Tag content
458 **
459 ** Returns
460 **      NFC_STATUS_OK, Command sent to format Tag
461 **      NFC_STATUS_REJECTED: Invalid HR0 and cannot format the tag
462 **      NFC_STATUS_FAILED: other error
463 **
464 *****************************************************************************/
465 tNFC_STATUS RW_T1tFormatNDef (void);
466 
467 /*******************************************************************************
468 **
469 ** Function         RW_T2tLocateTlv
470 **
471 ** Description      This function is called to find the start of the given TLV
472 **
473 ** Returns          Pointer to the TLV, if successful. Otherwise, NULL.
474 **
475 *******************************************************************************/
476 NFC_API extern tNFC_STATUS RW_T2tLocateTlv(UINT8 tlv_type);
477 
478 /*******************************************************************************
479 **
480 ** Function         RW_T2tRead
481 **
482 ** Description      This function issues the Type 2 Tag READ command. When the
483 **                  operation is complete the callback function will be called
484 **                  with a RW_T2T_READ_EVT.
485 **
486 ** Returns          tNFC_STATUS
487 **
488 *******************************************************************************/
489 NFC_API extern tNFC_STATUS RW_T2tRead (UINT16 block);
490 
491 /*******************************************************************************
492 **
493 ** Function         RW_T2tWrite
494 **
495 ** Description      This function issues the Type 2 Tag WRITE command. When the
496 **                  operation is complete the callback function will be called
497 **                  with a RW_T2T_WRITE_EVT.
498 **
499 **                  p_write_data points to the array of 4 bytes to be written
500 **
501 ** Returns          tNFC_STATUS
502 **
503 *******************************************************************************/
504 NFC_API extern tNFC_STATUS RW_T2tWrite (UINT16 block, UINT8 *p_write_data);
505 
506 /*******************************************************************************
507 **
508 ** Function         RW_T2tSectorSelect
509 **
510 ** Description      This function issues the Type 2 Tag SECTOR-SELECT command
511 **                  packet 1. If a NACK is received as the response, the callback
512 **                  function will be called with a RW_T2T_SECTOR_SELECT_EVT. If
513 **                  an ACK is received as the response, the command packet 2 with
514 **                  the given sector number is sent to the peer device. When the
515 **                  response for packet 2 is received, the callback function will
516 **                  be called with a RW_T2T_SECTOR_SELECT_EVT.
517 **
518 **                  A sector is 256 contiguous blocks (1024 bytes).
519 **
520 ** Returns          tNFC_STATUS
521 **
522 *******************************************************************************/
523 NFC_API extern tNFC_STATUS RW_T2tSectorSelect (UINT8 sector);
524 
525 /*******************************************************************************
526 **
527 ** Function         RW_T2tDetectNDef
528 **
529 ** Description      This function will find NDEF message if any in the Tag
530 **
531 ** Returns          tNFC_STATUS
532 **
533 *******************************************************************************/
534 NFC_API extern tNFC_STATUS RW_T2tDetectNDef (BOOLEAN skip_dyn_locks);
535 
536 /*******************************************************************************
537 **
538 ** Function         RW_T2tReadNDef
539 **
540 ** Description      This function can be called to read the NDEF message on the tag.
541 **
542 ** Parameters:      p_buffer:   The buffer into which to read the NDEF message
543 **                  buf_len:    The length of the buffer
544 **
545 ** Returns          NCI_STATUS_OK, if read was started. Otherwise, error status.
546 **
547 *******************************************************************************/
548 NFC_API extern tNFC_STATUS RW_T2tReadNDef (UINT8 *p_buffer, UINT16 buf_len);
549 
550 /*******************************************************************************
551 **
552 ** Function         RW_T2tWriteNDef
553 **
554 ** Description      This function can be called to write an NDEF message to the tag.
555 **
556 ** Parameters:      msg_len:    The length of the buffer
557 **                  p_msg:      The NDEF message to write
558 **
559 ** Returns          NCI_STATUS_OK, if write was started. Otherwise, error status.
560 **
561 *******************************************************************************/
562 NFC_API extern tNFC_STATUS RW_T2tWriteNDef (UINT16 msg_len, UINT8 *p_msg );
563 
564 /*******************************************************************************
565 **
566 ** Function         RW_T2tSetTagReadOnly
567 **
568 ** Description      This function can be called to set the tag in to read only
569 **                  state
570 **
571 ** Parameters:      b_hard_lock:   To indicate hard lock the tag or not
572 **
573 ** Returns          NCI_STATUS_OK, if set readonly operation started.
574 **                                 Otherwise, error status.
575 **
576 *******************************************************************************/
577 NFC_API extern tNFC_STATUS RW_T2tSetTagReadOnly (BOOLEAN b_hard_lock);
578 
579 /*****************************************************************************
580 **
581 ** Function         RW_T2tPresenceCheck
582 **
583 ** Description
584 **      Check if the tag is still in the field.
585 **
586 **      The RW_T2T_PRESENCE_CHECK_EVT w/ status is used to indicate presence
587 **      or non-presence.
588 **
589 ** Returns
590 **      NFC_STATUS_OK, if raw data frame sent
591 **      NFC_STATUS_NO_BUFFERS: unable to allocate a buffer for this operation
592 **      NFC_STATUS_FAILED: other error
593 **
594 *****************************************************************************/
595 NFC_API extern tNFC_STATUS RW_T2tPresenceCheck (void);
596 
597 /*****************************************************************************
598 **
599 ** Function         RW_T2tFormatNDef
600 **
601 ** Description
602 **      Format Tag content
603 **
604 ** Returns
605 **      NFC_STATUS_OK, Command sent to format Tag
606 **      NFC_STATUS_FAILED: otherwise
607 **
608 *****************************************************************************/
609 tNFC_STATUS RW_T2tFormatNDef (void);
610 
611 /*****************************************************************************
612 **
613 ** Function         RW_T3tDetectNDef
614 **
615 ** Description
616 **      This function is used to perform NDEF detection on a Type 3 tag, and
617 **      retrieve the tag's NDEF attribute information (block 0).
618 **
619 **      Before using this API, the application must call RW_SelectTagType to
620 **      indicate that a Type 3 tag has been activated, and to provide the
621 **      tag's Manufacture ID (IDm) .
622 **
623 ** Returns
624 **      NFC_STATUS_OK: ndef detection procedure started
625 **      NFC_STATUS_NO_BUFFERS: unable to allocate a buffer for this operation
626 **      NFC_STATUS_FAILED: other error
627 **
628 *****************************************************************************/
629 NFC_API extern tNFC_STATUS RW_T3tDetectNDef (void);
630 
631 /*****************************************************************************
632 **
633 ** Function         RW_T3tFormatNDef
634 **
635 ** Description
636 **      Format a type-3 tag for NDEF.
637 **
638 **      Only Felica-Lite tags are supported by this API. The
639 **      RW_T3T_FORMAT_CPLT_EVT is used to notify the status of the operation.
640 **
641 ** Returns
642 **      NFC_STATUS_OK: ndef detection procedure started
643 **      NFC_STATUS_NO_BUFFERS: unable to allocate a buffer for this operation
644 **      NFC_STATUS_FAILED: other error
645 **
646 *****************************************************************************/
647 NFC_API extern tNFC_STATUS RW_T3tFormatNDef (void);
648 
649 /*****************************************************************************
650 **
651 ** Function         RW_T3tSetReadOnly
652 **
653 ** Description
654 **      Set a type-3 tag to Read Only
655 **
656 **      Only Felica-Lite tags are supported by this API.
657 **      RW_T3tDetectNDef() must be called before using this
658 **      The RW_T3T_SET_READ_ONLY_CPLT_EVT event will be returned.
659 **
660 ** Returns
661 **      NFC_STATUS_OK if success
662 **      NFC_STATUS_FAILED if T3T is busy or other error
663 **
664 *****************************************************************************/
665 NFC_API extern tNFC_STATUS RW_T3tSetReadOnly (BOOLEAN b_hard_lock);
666 
667 /*****************************************************************************
668 **
669 ** Function         RW_T3tCheckNDef
670 **
671 ** Description
672 **      Retrieve NDEF contents from a Type3 tag.
673 **
674 **      The RW_T3T_CHECK_EVT event is used to notify the application for each
675 **      segment of NDEF data received. The RW_T3T_CHECK_CPLT_EVT event is used to
676 **      notify the application all segments have been received.
677 **
678 **      Before using this API, the RW_T3tDetectNDef function must be called to
679 **      verify that the tag contains NDEF data, and to retrieve the NDEF
680 **      attributes.
681 **
682 **      Internally, this command will be separated into multiple Tag 3 Check
683 **      commands (if necessary) - depending on the tag's Nbr (max number of
684 **      blocks per read) attribute.
685 **
686 ** Returns
687 **      NFC_STATUS_OK: check command started
688 **      NFC_STATUS_NO_BUFFERS: unable to allocate a buffer for this operation
689 **      NFC_STATUS_FAILED: other error
690 **
691 *****************************************************************************/
692 NFC_API extern tNFC_STATUS RW_T3tCheckNDef (void);
693 
694 /*****************************************************************************
695 **
696 ** Function         RW_T3tUpdateNDef
697 **
698 ** Description
699 **      Write NDEF contents to a Type3 tag.
700 **
701 **      The RW_T3T_UPDATE_CPLT_EVT callback event will be used to notify the
702 **      application of the response.
703 **
704 **      Before using this API, the RW_T3tDetectNDef function must be called to
705 **      verify that the tag contains NDEF data, and to retrieve the NDEF
706 **      attributes.
707 **
708 **      Internally, this command will be separated into multiple Tag 3 Update
709 **      commands (if necessary) - depending on the tag's Nbw (max number of
710 **      blocks per write) attribute.
711 **
712 ** Returns
713 **      NFC_STATUS_OK: check command started
714 **      NFC_STATUS_NO_BUFFERS: unable to allocate a buffer for this operation
715 **      NFC_STATUS_REFUSED: tag is read-only
716 **      NFC_STATUS_BUFFER_FULL: len exceeds tag's maximum size
717 **      NFC_STATUS_FAILED: other error
718 **
719 *****************************************************************************/
720 NFC_API extern tNFC_STATUS RW_T3tUpdateNDef (UINT32 len, UINT8 *p_data);
721 
722 /*****************************************************************************
723 **
724 ** Function         RW_T3tCheck
725 **
726 ** Description
727 **      Read (non-NDEF) contents from a Type3 tag.
728 **
729 **      The RW_READ_EVT event is used to notify the application for each
730 **      segment of NDEF data received. The RW_READ_CPLT_EVT event is used to
731 **      notify the application all segments have been received.
732 **
733 **      Before using this API, the application must call RW_SelectTagType to
734 **      indicate that a Type 3 tag has been activated, and to provide the
735 **      tag's Manufacture ID (IDm) .
736 **
737 ** Returns
738 **      NFC_STATUS_OK: check command started
739 **      NFC_STATUS_NO_BUFFERS: unable to allocate a buffer for this operation
740 **      NFC_STATUS_FAILED: other error
741 **
742 *****************************************************************************/
743 NFC_API extern tNFC_STATUS RW_T3tCheck (UINT8 num_blocks, tT3T_BLOCK_DESC *t3t_blocks);
744 
745 /*****************************************************************************
746 **
747 ** Function         RW_T3tUpdate
748 **
749 ** Description
750 **      Write (non-NDEF) contents to a Type3 tag.
751 **
752 **      The RW_WRITE_CPLT_EVT event is used to notify the application all
753 **      segments have been received.
754 **
755 **      Before using this API, the application must call RW_SelectTagType to
756 **      indicate that a Type 3 tag has been activated, and to provide the tag's
757 **      Manufacture ID (IDm) .
758 **
759 ** Returns
760 **      NFC_STATUS_OK: check command started
761 **      NFC_STATUS_NO_BUFFERS: unable to allocate a buffer for this operation
762 **      NFC_STATUS_FAILED: other error
763 **
764 *****************************************************************************/
765 NFC_API extern tNFC_STATUS RW_T3tUpdate (UINT8 num_blocks, tT3T_BLOCK_DESC *t3t_blocks, UINT8 *p_data);
766 
767 /*****************************************************************************
768 **
769 ** Function         RW_T3tSendRawFrame
770 **
771 ** Description
772 **      This function is called to send a raw data frame to the peer device.
773 **      When type 3 tag receives response from peer, the callback function
774 **      will be called with a RW_T3T_RAW_FRAME_EVT [Table 6].
775 **
776 **      Before using this API, the application must call RW_SelectTagType to
777 **      indicate that a Type 3 tag has been activated.
778 **
779 **      The raw frame should be a properly formatted Type 3 tag message.
780 **
781 ** Returns
782 **      NFC_STATUS_OK, if raw data frame sent
783 **      NFC_STATUS_NO_BUFFERS: unable to allocate a buffer for this operation
784 **      NFC_STATUS_FAILED: other error
785 **
786 *****************************************************************************/
787 NFC_API extern tNFC_STATUS RW_T3tSendRawFrame (UINT16 len, UINT8 *p_data);
788 
789 /*****************************************************************************
790 **
791 ** Function         RW_T3tPoll
792 **
793 ** Description
794 **      Send POLL command
795 **
796 ** Returns
797 **      NFC_STATUS_OK, if raw data frame sent
798 **      NFC_STATUS_NO_BUFFERS: unable to allocate a buffer for this operation
799 **      NFC_STATUS_FAILED: other error
800 **
801 *****************************************************************************/
802 NFC_API extern tNFC_STATUS RW_T3tPoll (UINT16 system_code, tT3T_POLL_RC rc, UINT8 tsn);
803 
804 /*****************************************************************************
805 **
806 ** Function         RW_T3tPresenceCheck
807 **
808 ** Description
809 **      Check if the tag is still in the field.
810 **
811 **      The RW_T3T_PRESENCE_CHECK_EVT w/ status is used to indicate presence
812 **      or non-presence.
813 **
814 ** Returns
815 **      NFC_STATUS_OK, if raw data frame sent
816 **      NFC_STATUS_NO_BUFFERS: unable to allocate a buffer for this operation
817 **      NFC_STATUS_FAILED: other error
818 **
819 *****************************************************************************/
820 NFC_API extern tNFC_STATUS RW_T3tPresenceCheck (void);
821 
822 /*****************************************************************************
823 **
824 ** Function         RW_T3tGetSystemCodes
825 **
826 ** Description
827 **      Get systems codes supported by the activated tag:
828 **              Poll for wildcard (FFFF):
829 **                  - If felica-lite code then poll for ndef (12fc)
830 **                  - Otherwise send RequestSystmCode command to get
831 **                    system codes.
832 **
833 **      Before using this API, the application must call RW_SelectTagType to
834 **      indicate that a Type 3 tag has been activated.
835 **
836 ** Returns
837 **      NFC_STATUS_OK, if raw data frame sent
838 **      NFC_STATUS_NO_BUFFERS: unable to allocate a buffer for this operation
839 **      NFC_STATUS_FAILED: other error
840 **
841 *****************************************************************************/
842 NFC_API extern tNFC_STATUS RW_T3tGetSystemCodes (void);
843 
844 /*****************************************************************************
845 **
846 ** Function         RW_T4tFormatNDef
847 **
848 ** Description
849 **      Format a type-4 tag for NDEF.
850 **
851 **      Only Desifire tags are supported by this API. The
852 **      RW_T4T_FORMAT_CPLT_EVT is used to notify the status of the operation.
853 **
854 ** Returns
855 **      NFC_STATUS_OK: if success
856 **      NFC_STATUS_FAILED: other error
857 *****************************************************************************/
858 NFC_API extern tNFC_STATUS RW_T4tFormatNDef (void);
859 
860 /*******************************************************************************
861 **
862 ** Function         RW_T4tDetectNDef
863 **
864 ** Description      This function performs NDEF detection procedure
865 **
866 **                  RW_T4T_NDEF_DETECT_EVT will be returned
867 **
868 ** Returns          NFC_STATUS_OK if success
869 **                  NFC_STATUS_FAILED if T4T is busy or other error
870 **
871 *******************************************************************************/
872 NFC_API extern tNFC_STATUS RW_T4tDetectNDef (void);
873 
874 /*******************************************************************************
875 **
876 ** Function         RW_T4tReadNDef
877 **
878 ** Description      This function performs NDEF read procedure
879 **                  Note: RW_T4tDetectNDef() must be called before using this
880 **
881 **                  The following event will be returned
882 **                      RW_T4T_NDEF_READ_EVT for each segmented NDEF message
883 **                      RW_T4T_NDEF_READ_CPLT_EVT for the last segment or complete NDEF
884 **                      RW_T4T_NDEF_READ_FAIL_EVT for failure
885 **
886 ** Returns          NFC_STATUS_OK if success
887 **                  NFC_STATUS_FAILED if T4T is busy or other error
888 **
889 *******************************************************************************/
890 NFC_API extern tNFC_STATUS RW_T4tReadNDef (void);
891 
892 /*******************************************************************************
893 **
894 ** Function         RW_T4tUpdateNDef
895 **
896 ** Description      This function performs NDEF update procedure
897 **                  Note: RW_T4tDetectNDef() must be called before using this
898 **                        Updating data must not be removed until returning event
899 **
900 **                  The following event will be returned
901 **                      RW_T4T_NDEF_UPDATE_CPLT_EVT for complete
902 **                      RW_T4T_NDEF_UPDATE_FAIL_EVT for failure
903 **
904 ** Returns          NFC_STATUS_OK if success
905 **                  NFC_STATUS_FAILED if T4T is busy or other error
906 **
907 *******************************************************************************/
908 NFC_API extern tNFC_STATUS RW_T4tUpdateNDef (UINT16 length, UINT8 *p_data);
909 
910 /*****************************************************************************
911 **
912 ** Function         RW_T4tPresenceCheck
913 **
914 ** Description
915 **      Check if the tag is still in the field.
916 **
917 **      The RW_T4T_PRESENCE_CHECK_EVT w/ status is used to indicate presence
918 **      or non-presence.
919 **      option is RW_T4T_CHK_EMPTY_I_BLOCK, use empty I block for presence check.
920 **
921 ** Returns
922 **      NFC_STATUS_OK, if raw data frame sent
923 **      NFC_STATUS_NO_BUFFERS: unable to allocate a buffer for this operation
924 **      NFC_STATUS_FAILED: other error
925 **
926 *****************************************************************************/
927 NFC_API extern tNFC_STATUS RW_T4tPresenceCheck (UINT8 option);
928 
929 /*****************************************************************************
930 **
931 ** Function         RW_T4tSetNDefReadOnly
932 **
933 ** Description      This function performs NDEF read-only procedure
934 **                  Note: RW_T4tDetectNDef() must be called before using this
935 **
936 **                  The RW_T4T_SET_TO_RO_EVT event will be returned.
937 **
938 ** Returns          NFC_STATUS_OK if success
939 **                  NFC_STATUS_FAILED if T4T is busy or other error
940 **
941 *****************************************************************************/
942 NFC_API extern tNFC_STATUS RW_T4tSetNDefReadOnly (void);
943 
944 /*******************************************************************************
945 **
946 ** Function         RW_I93Inventory
947 **
948 ** Description      This function send Inventory command with/without AFI
949 **                  If UID is provided then set UID[0]:MSB, ... UID[7]:LSB
950 **
951 **                  RW_I93_RESPONSE_EVT will be returned
952 **
953 ** Returns          NFC_STATUS_OK if success
954 **                  NFC_STATUS_NO_BUFFERS if out of buffer
955 **                  NFC_STATUS_FAILED if T4T is busy or other error
956 **
957 *******************************************************************************/
958 NFC_API extern tNFC_STATUS RW_I93Inventory (BOOLEAN including_afi, UINT8 afi, UINT8 *p_uid);
959 
960 /*******************************************************************************
961 **
962 ** Function         RW_I93StayQuiet
963 **
964 ** Description      This function send Inventory command
965 **
966 **                  RW_I93_CMD_CMPL_EVT will be returned
967 **
968 ** Returns          NFC_STATUS_OK if success
969 **                  NFC_STATUS_NO_BUFFERS if out of buffer
970 **                  NFC_STATUS_BUSY if busy
971 **                  NFC_STATUS_FAILED if other error
972 **
973 *******************************************************************************/
974 NFC_API extern tNFC_STATUS RW_I93StayQuiet (void);
975 
976 /*******************************************************************************
977 **
978 ** Function         RW_I93ReadSingleBlock
979 **
980 ** Description      This function send Read Single Block command
981 **
982 **                  RW_I93_RESPONSE_EVT will be returned
983 **
984 ** Returns          NFC_STATUS_OK if success
985 **                  NFC_STATUS_NO_BUFFERS if out of buffer
986 **                  NFC_STATUS_BUSY if busy
987 **                  NFC_STATUS_FAILED if other error
988 **
989 *******************************************************************************/
990 NFC_API extern tNFC_STATUS RW_I93ReadSingleBlock (UINT16 block_number);
991 
992 /*******************************************************************************
993 **
994 ** Function         RW_I93WriteSingleBlock
995 **
996 ** Description      This function send Write Single Block command
997 **                  Application must get block size first by calling RW_I93GetSysInfo().
998 **
999 **                  RW_I93_CMD_CMPL_EVT will be returned
1000 **
1001 ** Returns          NFC_STATUS_OK if success
1002 **                  NFC_STATUS_NO_BUFFERS if out of buffer
1003 **                  NFC_STATUS_BUSY if busy
1004 **                  NFC_STATUS_FAILED if other error
1005 **
1006 *******************************************************************************/
1007 NFC_API extern tNFC_STATUS RW_I93WriteSingleBlock (UINT16 block_number,
1008                                                    UINT8  *p_data);
1009 
1010 /*******************************************************************************
1011 **
1012 ** Function         RW_I93LockBlock
1013 **
1014 ** Description      This function send Lock Block command
1015 **
1016 **                  RW_I93_CMD_CMPL_EVT will be returned
1017 **
1018 ** Returns          NFC_STATUS_OK if success
1019 **                  NFC_STATUS_NO_BUFFERS if out of buffer
1020 **                  NFC_STATUS_BUSY if busy
1021 **                  NFC_STATUS_FAILED if other error
1022 **
1023 *******************************************************************************/
1024 NFC_API extern tNFC_STATUS RW_I93LockBlock (UINT8 block_number);
1025 
1026 /*******************************************************************************
1027 **
1028 ** Function         RW_I93ReadMultipleBlocks
1029 **
1030 ** Description      This function send Read Multiple Blocks command
1031 **
1032 **                  RW_I93_RESPONSE_EVT will be returned
1033 **
1034 ** Returns          NFC_STATUS_OK if success
1035 **                  NFC_STATUS_NO_BUFFERS if out of buffer
1036 **                  NFC_STATUS_BUSY if busy
1037 **                  NFC_STATUS_FAILED if other error
1038 **
1039 *******************************************************************************/
1040 NFC_API extern tNFC_STATUS RW_I93ReadMultipleBlocks (UINT16 first_block_number,
1041                                                      UINT16 number_blocks);
1042 
1043 /*******************************************************************************
1044 **
1045 ** Function         RW_I93WriteMultipleBlocks
1046 **
1047 ** Description      This function send Write Multiple Blocks command
1048 **
1049 **                  RW_I93_CMD_CMPL_EVT will be returned
1050 **
1051 ** Returns          NFC_STATUS_OK if success
1052 **                  NFC_STATUS_NO_BUFFERS if out of buffer
1053 **                  NFC_STATUS_BUSY if busy
1054 **                  NFC_STATUS_FAILED if other error
1055 **
1056 *******************************************************************************/
1057 NFC_API extern tNFC_STATUS RW_I93WriteMultipleBlocks (UINT8  first_block_number,
1058                                                       UINT16 number_blocks,
1059                                                       UINT8 *p_data);
1060 
1061 /*******************************************************************************
1062 **
1063 ** Function         RW_I93Select
1064 **
1065 ** Description      This function send Select command
1066 **
1067 **                  UID[0]: 0xE0, MSB
1068 **                  UID[1]: IC Mfg Code
1069 **                  ...
1070 **                  UID[7]: LSB
1071 **
1072 **                  RW_I93_CMD_CMPL_EVT will be returned
1073 **
1074 ** Returns          NFC_STATUS_OK if success
1075 **                  NFC_STATUS_NO_BUFFERS if out of buffer
1076 **                  NFC_STATUS_BUSY if busy
1077 **                  NFC_STATUS_FAILED if other error
1078 **
1079 *******************************************************************************/
1080 NFC_API extern tNFC_STATUS RW_I93Select (UINT8 *p_uid);
1081 
1082 /*******************************************************************************
1083 **
1084 ** Function         RW_I93ResetToReady
1085 **
1086 ** Description      This function send Reset To Ready command
1087 **
1088 **                  RW_I93_CMD_CMPL_EVT will be returned
1089 **
1090 ** Returns          NFC_STATUS_OK if success
1091 **                  NFC_STATUS_NO_BUFFERS if out of buffer
1092 **                  NFC_STATUS_BUSY if busy
1093 **                  NFC_STATUS_FAILED if other error
1094 **
1095 *******************************************************************************/
1096 NFC_API extern tNFC_STATUS RW_I93ResetToReady (void);
1097 
1098 /*******************************************************************************
1099 **
1100 ** Function         RW_I93WriteAFI
1101 **
1102 ** Description      This function send Write AFI command
1103 **
1104 **                  RW_I93_CMD_CMPL_EVT will be returned
1105 **
1106 ** Returns          NFC_STATUS_OK if success
1107 **                  NFC_STATUS_NO_BUFFERS if out of buffer
1108 **                  NFC_STATUS_BUSY if busy
1109 **                  NFC_STATUS_FAILED if other error
1110 **
1111 *******************************************************************************/
1112 NFC_API extern tNFC_STATUS RW_I93WriteAFI (UINT8 afi);
1113 
1114 /*******************************************************************************
1115 **
1116 ** Function         RW_I93LockAFI
1117 **
1118 ** Description      This function send Lock AFI command
1119 **
1120 **                  RW_I93_CMD_CMPL_EVT will be returned
1121 **
1122 ** Returns          NFC_STATUS_OK if success
1123 **                  NFC_STATUS_NO_BUFFERS if out of buffer
1124 **                  NFC_STATUS_BUSY if busy
1125 **                  NFC_STATUS_FAILED if other error
1126 **
1127 *******************************************************************************/
1128 NFC_API extern tNFC_STATUS RW_I93LockAFI (void);
1129 
1130 /*******************************************************************************
1131 **
1132 ** Function         RW_I93WriteDSFID
1133 **
1134 ** Description      This function send Write DSFID command
1135 **
1136 **                  RW_I93_CMD_CMPL_EVT will be returned
1137 **
1138 ** Returns          NFC_STATUS_OK if success
1139 **                  NFC_STATUS_NO_BUFFERS if out of buffer
1140 **                  NFC_STATUS_BUSY if busy
1141 **                  NFC_STATUS_FAILED if other error
1142 **
1143 *******************************************************************************/
1144 NFC_API extern tNFC_STATUS RW_I93WriteDSFID (UINT8 dsfid);
1145 
1146 /*******************************************************************************
1147 **
1148 ** Function         RW_I93LockDSFID
1149 **
1150 ** Description      This function send Lock DSFID command
1151 **
1152 **                  RW_I93_CMD_CMPL_EVT will be returned
1153 **
1154 ** Returns          NFC_STATUS_OK if success
1155 **                  NFC_STATUS_NO_BUFFERS if out of buffer
1156 **                  NFC_STATUS_BUSY if busy
1157 **                  NFC_STATUS_FAILED if other error
1158 **
1159 *******************************************************************************/
1160 NFC_API extern tNFC_STATUS RW_I93LockDSFID (void);
1161 
1162 /*******************************************************************************
1163 **
1164 ** Function         RW_I93GetSysInfo
1165 **
1166 ** Description      This function send Get System Information command
1167 **                  If UID is provided then set UID[0]:MSB, ... UID[7]:LSB
1168 **
1169 **                  RW_I93_RESPONSE_EVT will be returned
1170 **
1171 ** Returns          NFC_STATUS_OK if success
1172 **                  NFC_STATUS_NO_BUFFERS if out of buffer
1173 **                  NFC_STATUS_BUSY if busy
1174 **                  NFC_STATUS_FAILED if other error
1175 **
1176 *******************************************************************************/
1177 NFC_API extern tNFC_STATUS RW_I93GetSysInfo (UINT8 *p_uid);
1178 
1179 /*******************************************************************************
1180 **
1181 ** Function         RW_I93GetMultiBlockSecurityStatus
1182 **
1183 ** Description      This function send Get Multiple Block Security Status command
1184 **
1185 **                  RW_I93_RESPONSE_EVT will be returned
1186 **
1187 ** Returns          NFC_STATUS_OK if success
1188 **                  NFC_STATUS_NO_BUFFERS if out of buffer
1189 **                  NFC_STATUS_BUSY if busy
1190 **                  NFC_STATUS_FAILED if other error
1191 **
1192 *******************************************************************************/
1193 NFC_API extern tNFC_STATUS RW_I93GetMultiBlockSecurityStatus (UINT16 first_block_number,
1194                                                               UINT16 number_blocks);
1195 
1196 /*******************************************************************************
1197 **
1198 ** Function         RW_I93DetectNDef
1199 **
1200 ** Description      This function performs NDEF detection procedure
1201 **
1202 **                  RW_I93_NDEF_DETECT_EVT will be returned
1203 **
1204 ** Returns          NFC_STATUS_OK if success
1205 **                  NFC_STATUS_FAILED if busy or other error
1206 **
1207 *******************************************************************************/
1208 NFC_API extern tNFC_STATUS RW_I93DetectNDef (void);
1209 
1210 /*******************************************************************************
1211 **
1212 ** Function         RW_I93ReadNDef
1213 **
1214 ** Description      This function performs NDEF read procedure
1215 **                  Note: RW_I93DetectNDef() must be called before using this
1216 **
1217 **                  The following event will be returned
1218 **                      RW_I93_NDEF_READ_EVT for each segmented NDEF message
1219 **                      RW_I93_NDEF_READ_CPLT_EVT for the last segment or complete NDEF
1220 **                      RW_I93_NDEF_READ_FAIL_EVT for failure
1221 **
1222 ** Returns          NFC_STATUS_OK if success
1223 **                  NFC_STATUS_FAILED if I93 is busy or other error
1224 **
1225 *******************************************************************************/
1226 NFC_API extern tNFC_STATUS RW_I93ReadNDef (void);
1227 
1228 /*******************************************************************************
1229 **
1230 ** Function         RW_I93UpdateNDef
1231 **
1232 ** Description      This function performs NDEF update procedure
1233 **                  Note: RW_I93DetectNDef() must be called before using this
1234 **                        Updating data must not be removed until returning event
1235 **
1236 **                  The following event will be returned
1237 **                      RW_I93_NDEF_UPDATE_CPLT_EVT for complete
1238 **                      RW_I93_NDEF_UPDATE_FAIL_EVT for failure
1239 **
1240 ** Returns          NFC_STATUS_OK if success
1241 **                  NFC_STATUS_FAILED if I93 is busy or other error
1242 **
1243 *******************************************************************************/
1244 NFC_API extern tNFC_STATUS RW_I93UpdateNDef (UINT16 length, UINT8 *p_data);
1245 
1246 /*******************************************************************************
1247 **
1248 ** Function         RW_I93FormatNDef
1249 **
1250 ** Description      This function performs formatting procedure
1251 **
1252 **                  RW_I93_FORMAT_CPLT_EVT will be returned
1253 **
1254 ** Returns          NFC_STATUS_OK if success
1255 **                  NFC_STATUS_FAILED if busy or other error
1256 **
1257 *******************************************************************************/
1258 NFC_API extern tNFC_STATUS RW_I93FormatNDef (void);
1259 
1260 /*******************************************************************************
1261 **
1262 ** Function         RW_I93SetTagReadOnly
1263 **
1264 ** Description      This function performs NDEF read-only procedure
1265 **                  Note: RW_I93DetectNDef() must be called before using this
1266 **                        Updating data must not be removed until returning event
1267 **
1268 **                  The RW_I93_SET_TAG_RO_EVT event will be returned.
1269 **
1270 ** Returns          NFC_STATUS_OK if success
1271 **                  NFC_STATUS_FAILED if I93 is busy or other error
1272 **
1273 *******************************************************************************/
1274 NFC_API extern tNFC_STATUS RW_I93SetTagReadOnly (void);
1275 
1276 /*****************************************************************************
1277 **
1278 ** Function         RW_I93PresenceCheck
1279 **
1280 ** Description      Check if the tag is still in the field.
1281 **
1282 **                  The RW_I93_PRESENCE_CHECK_EVT w/ status is used to indicate
1283 **                  presence or non-presence.
1284 **
1285 ** Returns          NFC_STATUS_OK, if raw data frame sent
1286 **                  NFC_STATUS_NO_BUFFERS: unable to allocate a buffer for this operation
1287 **                  NFC_STATUS_FAILED: other error
1288 **
1289 *****************************************************************************/
1290 NFC_API extern tNFC_STATUS RW_I93PresenceCheck (void);
1291 
1292 /*******************************************************************************
1293 **
1294 ** Function         RW_SendRawFrame
1295 **
1296 ** Description      This function sends a raw frame to the peer device.
1297 **
1298 ** Returns          tNFC_STATUS
1299 **
1300 *******************************************************************************/
1301 NFC_API extern tNFC_STATUS RW_SendRawFrame (UINT8 *p_raw_data, UINT16 data_len);
1302 
1303 /*******************************************************************************
1304 **
1305 ** Function         RW_SetActivatedTagType
1306 **
1307 ** Description      This function sets tag type for Reader/Writer mode.
1308 **
1309 ** Returns          tNFC_STATUS
1310 **
1311 *******************************************************************************/
1312 NFC_API extern tNFC_STATUS RW_SetActivatedTagType (tNFC_ACTIVATE_DEVT *p_activate_params, tRW_CBACK *p_cback);
1313 
1314 /*******************************************************************************
1315 **
1316 ** Function         RW_SetTraceLevel
1317 **
1318 ** Description      This function sets the trace level for Reader/Writer mode.
1319 **                  If called with a value of 0xFF,
1320 **                  it simply returns the current trace level.
1321 **
1322 ** Returns          The new or current trace level
1323 **
1324 *******************************************************************************/
1325 NFC_API extern UINT8 RW_SetTraceLevel (UINT8 new_level);
1326 
1327 #endif /* RW_API_H */
1328