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