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