rw_api.h revision 6302aad47b96f2d26ea298f48ab7c4cf83ce3678
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 39enum { 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 129typedef 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 148typedef 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#define RW_T4T_CHK_ISO_DEP_NAK_PRES_CHK 5 157typedef 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 163typedef struct { 164 tNFC_STATUS status; 165 uint16_t msg_len; /* Length of the NDEF message */ 166} tRW_T2T_DETECT; 167 168typedef 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 177typedef 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 183typedef 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 193typedef 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 200typedef struct { 201 tNFC_STATUS status; 202 NFC_HDR* p_data; 203} tRW_READ_DATA; 204 205typedef struct { 206 tNFC_STATUS status; 207 uint8_t sw1; 208 uint8_t sw2; 209} tRW_T4T_SW; 210 211typedef 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 218typedef 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 225typedef 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 237typedef 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 244typedef struct { 245 tNFC_STATUS status; 246 NFC_HDR* p_data; 247} tRW_RAW_FRAME; 248 249typedef 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 264typedef 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*******************************************************************************/ 275extern 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*******************************************************************************/ 286extern 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*******************************************************************************/ 297extern 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*******************************************************************************/ 308extern 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*******************************************************************************/ 321extern 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*******************************************************************************/ 333extern 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*******************************************************************************/ 344extern 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*******************************************************************************/ 356extern 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*******************************************************************************/ 368extern 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*******************************************************************************/ 382extern 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*******************************************************************************/ 397extern 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*******************************************************************************/ 412extern 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*******************************************************************************/ 428extern 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*******************************************************************************/ 443extern 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*****************************************************************************/ 461extern 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*****************************************************************************/ 476tNFC_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*******************************************************************************/ 487extern 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*******************************************************************************/ 500extern 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*******************************************************************************/ 515extern 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*******************************************************************************/ 535extern 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*******************************************************************************/ 546extern 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*******************************************************************************/ 561extern 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*******************************************************************************/ 577extern 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*******************************************************************************/ 592extern 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*****************************************************************************/ 610extern 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*****************************************************************************/ 624tNFC_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*****************************************************************************/ 644extern 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*****************************************************************************/ 662extern 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*****************************************************************************/ 680extern 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*****************************************************************************/ 707extern 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*****************************************************************************/ 735extern 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*****************************************************************************/ 758extern 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*****************************************************************************/ 780extern 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*****************************************************************************/ 803extern 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*****************************************************************************/ 818extern 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*****************************************************************************/ 837extern 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*****************************************************************************/ 859extern 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*****************************************************************************/ 875extern 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*******************************************************************************/ 889extern 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*******************************************************************************/ 908extern 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*******************************************************************************/ 927extern 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*****************************************************************************/ 948extern 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*****************************************************************************/ 963extern 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*******************************************************************************/ 979extern 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*******************************************************************************/ 996extern 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*******************************************************************************/ 1012extern 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*******************************************************************************/ 1030extern 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*******************************************************************************/ 1047extern 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*******************************************************************************/ 1063extern 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*******************************************************************************/ 1080extern 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*******************************************************************************/ 1103extern 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*******************************************************************************/ 1119extern 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*******************************************************************************/ 1135extern 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*******************************************************************************/ 1151extern 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*******************************************************************************/ 1167extern 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*******************************************************************************/ 1183extern 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*******************************************************************************/ 1200extern 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*******************************************************************************/ 1217extern 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*******************************************************************************/ 1232extern 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*******************************************************************************/ 1251extern 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*******************************************************************************/ 1270extern 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*******************************************************************************/ 1284extern 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*******************************************************************************/ 1301extern 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*****************************************************************************/ 1318extern 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*******************************************************************************/ 1329extern 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*******************************************************************************/ 1340extern tNFC_STATUS RW_SetActivatedTagType(tNFC_ACTIVATE_DEVT* p_activate_params, 1341 tRW_CBACK* p_cback); 1342#endif /* RW_API_H */ 1343