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