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