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