188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/****************************************************************************** 288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project * 388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project * Copyright (C) 2009-2014 Broadcom Corporation 488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project * 588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project * you may not use this file except in compliance with the License. 788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project * You may obtain a copy of the License at: 888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project * 988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 1088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project * 1188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 1288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 1388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project * See the License for the specific language governing permissions and 1588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project * limitations under the License. 1688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project * 1788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project ******************************************************************************/ 1864d85d0d827489c514f6aec075482563c80cda73Joe Onorato 1964d85d0d827489c514f6aec075482563c80cda73Joe Onorato/****************************************************************************** 2064d85d0d827489c514f6aec075482563c80cda73Joe Onorato * 2188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project * This file contains the Near Field Communication (NFC) Reader/Writer mode 2288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project * related internal function / definitions. 2388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project * 2488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project ******************************************************************************/ 2588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 2688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#ifndef RW_INT_H_ 2788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_INT_H_ 2888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 2988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#include "rw_api.h" 3088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#include "tags_defs.h" 3188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#include "tags_int.h" 3288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 3388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Proprietary definitions for HR0 and HR1 */ 3488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* TOPAZ96 Tag */ 3588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_IS_TOPAZ96 0x11 3688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* TOPAZ512 Tag */ 3788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_IS_TOPAZ512 0x12 3888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Supports dynamic commands on static tag if HR1 > 0x49 */ 3988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_HR1_MIN 0x49 4088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 4188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Maximum supported Memory control TLVS in the tag */ 4288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_MAX_MEM_TLVS 0x05 4388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Maximum supported Lock control TLVS in the tag */ 4488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_MAX_LOCK_TLVS 0x05 4588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Maximum supported dynamic lock bytes */ 4688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_MAX_LOCK_BYTES 0x1E 4788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 4888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* State of the Tag as interpreted by RW */ 4988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* TAG State is unknown to RW */ 5088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1_TAG_ATTRB_UNKNOWN 0x00 5188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* TAG is in INITIALIZED state */ 5288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1_TAG_ATTRB_INITIALIZED 0x01 5388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* TAG is in INITIALIZED state and has NDEF tlv with len=0 */ 5488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1_TAG_ATTRB_INITIALIZED_NDEF 0x02 5588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* TAG is in READ ONLY state */ 5688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1_TAG_ATTRB_READ_ONLY 0x03 5788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* TAG is in READ WRITE state */ 5888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1_TAG_ATTRB_READ_WRITE 0x04 5988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 6088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Lock not yet set as part of SET TAG RO op */ 6188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_LOCK_NOT_UPDATED 0x00 6288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Sent command to set the Lock bytes */ 6388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_LOCK_UPDATE_INITIATED 0x01 6488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Lock bytes are set */ 6588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_LOCK_UPDATED 0x02 6688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projecttypedef uint8_t tRW_T1T_LOCK_STATUS; 6788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 6888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* States */ 6988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Tag not activated and or response not received for RID */ 7088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_STATE_NOT_ACTIVATED 0x00 7188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* T1 Tag activated and ready to perform rw operation on Tag*/ 7288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_STATE_IDLE 0x01 7388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting rsp for read command sent to tag */ 7488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_STATE_READ 0x02 7588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting rsp for write command sent to tag */ 7688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_STATE_WRITE 0x03 7788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* performing TLV detection procedure */ 7888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_STATE_TLV_DETECT 0x04 797b64124f0baabfa7216727a03e23fa1330fc6fadSriram Raman/* performing read NDEF procedure */ 807b64124f0baabfa7216727a03e23fa1330fc6fadSriram Raman#define RW_T1T_STATE_READ_NDEF 0x05 817b64124f0baabfa7216727a03e23fa1330fc6fadSriram Raman/* performing update NDEF procedure */ 827b64124f0baabfa7216727a03e23fa1330fc6fadSriram Raman#define RW_T1T_STATE_WRITE_NDEF 0x06 837b64124f0baabfa7216727a03e23fa1330fc6fadSriram Raman/* Setting Tag as read only tag */ 847b64124f0baabfa7216727a03e23fa1330fc6fadSriram Raman#define RW_T1T_STATE_SET_TAG_RO 0x07 857b64124f0baabfa7216727a03e23fa1330fc6fadSriram Raman/* Check if Tag is still present */ 867b64124f0baabfa7216727a03e23fa1330fc6fadSriram Raman#define RW_T1T_STATE_CHECK_PRESENCE 0x08 877b64124f0baabfa7216727a03e23fa1330fc6fadSriram Raman/* Format T1 Tag */ 887b64124f0baabfa7216727a03e23fa1330fc6fadSriram Raman#define RW_T1T_STATE_FORMAT_TAG 0x09 897b64124f0baabfa7216727a03e23fa1330fc6fadSriram Raman 907b64124f0baabfa7216727a03e23fa1330fc6fadSriram Raman/* Sub states */ 917b64124f0baabfa7216727a03e23fa1330fc6fadSriram Raman/* Default substate */ 927b64124f0baabfa7216727a03e23fa1330fc6fadSriram Raman#define RW_T1T_SUBSTATE_NONE 0x00 937b64124f0baabfa7216727a03e23fa1330fc6fadSriram Raman 947b64124f0baabfa7216727a03e23fa1330fc6fadSriram Raman/* Sub states in RW_T1T_STATE_TLV_DETECT state */ 9588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for the detection of a tlv in a tag */ 9688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_TLV_DETECT 0x01 9788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for finding the len field is 1 or 3 bytes long */ 9888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_FIND_LEN_FIELD_LEN 0x02 9988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for extracting len field value */ 10088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_READ_TLV_LEN0 0x03 10188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for extracting len field value */ 10288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_READ_TLV_LEN1 0x04 10388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for extracting value field in the TLV */ 10488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_READ_TLV_VALUE 0x05 10588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for reading dynamic locks in the TLV */ 10688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_READ_LOCKS 0x06 10788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 10888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Sub states in RW_T1T_STATE_WRITE_NDEF state */ 10988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for response of reading a block that will be partially updated */ 11088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_READ_NDEF_BLOCK 0x07 11188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for response of invalidating NDEF Msg */ 11288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_INVALIDATE_NDEF 0x08 11388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for response of writing a part of NDEF Msg */ 11488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_NDEF_WRITE 0x09 11588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for response of writing last part of NDEF Msg */ 11688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_NDEF_UPDATED 0x0A 11788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for response of validating NDEF Msg */ 11888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_VALIDATE_NDEF 0x0B 11988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 12088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Sub states in RW_T1T_STATE_SET_TAG_RO state */ 12188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for response of setting CC-RWA to read only */ 12288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_SET_CC_RWA_RO 0x0C 12388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for response of setting all static lock bits */ 12488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_SET_ST_LOCK_BITS 0x0D 12588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for response of setting all dynamic lock bits */ 12688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_SET_DYN_LOCK_BITS 0x0E 12788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 12888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Sub states in RW_T1T_STATE_FORMAT_TAG state */ 1299537884b0dabe81bf612c79d12c7b4bf40de10a5Dianne Hackborn/* waiting for response to format/set capability container */ 13088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_SET_CC 0x0F 13188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for response to format/set NULL NDEF */ 13288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_SET_NULL_NDEF 0x10 13388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 134ecc70d705ab8ad6461f23d8be97791227f4219eaDianne Hackborntypedef struct { 13588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t offset; /* Offset of the lock byte in the Tag */ 13688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t num_bits; /* Number of lock bits in the lock byte */ 13788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t bytes_locked_per_bit; /* No. of tag bytes gets locked by a bit in this 13888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project byte */ 13988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project} tRW_T1T_LOCK_INFO; 14088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 14188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projecttypedef struct { 14288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t offset; /* Reserved bytes offset taken from Memory control TLV */ 14388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t num_bytes; /* Number of reserved bytes as per the TLV */ 14488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project} tRW_T1T_RES_INFO; 14588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 14688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projecttypedef struct { 14788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t tlv_index; /* Index of Lock control tlv that points to this address*/ 14888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t byte_index; /* Index of Lock byte pointed by the TLV */ 14988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t lock_byte; /* Value in the lock byte */ 15088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project tRW_T1T_LOCK_STATUS 15188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project lock_status; /* Indicates if it is modifed to set tag as Read only */ 15288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project bool b_lock_read; /* Is the lock byte is already read from tag */ 15388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project} tRW_T1T_LOCK; 15488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 15588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projecttypedef struct { 15688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t addr; /* ADD/ADD8/ADDS field value */ 15788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t op_code; /* Command sent */ 15888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t rsp_len; /* expected length of the response */ 15988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t 16088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project pend_retx_rsp; /* Number of pending rsps to retransmission on prev cmd */ 16188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project} tRW_T1T_PREV_CMD_RSP_INFO; 16288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 16388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#if (RW_NDEF_INCLUDED == TRUE) 16488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Buffer 0-E block, for easier tlv operation */ 16588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define T1T_BUFFER_SIZE T1T_STATIC_SIZE 16688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#else 16788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Buffer UID */ 16888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define T1T_BUFFER_SIZE T1T_UID_LEN 16988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#endif 17088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 17188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* RW Type 1 Tag control blocks */ 17288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projecttypedef struct { 17388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t 17488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project hr[T1T_HR_LEN]; /* Header ROM byte 0 - 0x1y,Header ROM byte 1 - 0x00 */ 17588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t mem[T1T_SEGMENT_SIZE]; /* Tag contents of block 0 or from block 0-E */ 17688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project tT1T_CMD_RSP_INFO* 17788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project p_cmd_rsp_info; /* Pointer to Command rsp info of last sent command */ 17888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t state; /* Current state of RW module */ 17988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t tag_attribute; /* Present state of the Tag as interpreted by RW */ 18088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project NFC_HDR* 18188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project p_cur_cmd_buf; /* Buffer to hold cur sent command for retransmission */ 18288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t addr; /* ADD/ADD8/ADDS value */ 18388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project tRW_T1T_PREV_CMD_RSP_INFO 18488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project prev_cmd_rsp_info; /* Information about previous sent command if retx */ 18588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project TIMER_LIST_ENT timer; /* timer to set timelimit for the response to command */ 18688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project bool b_update; /* Tag header updated */ 18788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project bool b_rseg; /* Segment 0 read from tag */ 18888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project bool b_hard_lock; /* Hard lock the tag as part of config tag to Read only */ 18988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#if (RW_NDEF_INCLUDED == TRUE) 19088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t segment; /* Current Tag segment */ 19188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t substate; /* Current substate of RW module */ 19288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t work_offset; /* Working byte offset */ 19388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t ndef_first_block[T1T_BLOCK_SIZE]; /* Buffer for ndef first block */ 19488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t ndef_final_block[T1T_BLOCK_SIZE]; /* Buffer for ndef last block */ 19588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t* p_ndef_buffer; /* Buffer to store ndef message */ 19688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t new_ndef_msg_len; /* Lenght of new updating NDEF Message */ 19788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t block_read; /* Last read Block */ 19888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t write_byte; /* Index of last written byte */ 19988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t tlv_detect; /* TLV type under detection */ 20088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t ndef_msg_offset; /* The offset on Tag where first NDEF message is 20188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project present*/ 20288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t ndef_msg_len; /* Lenght of NDEF Message */ 20388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t 20488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project max_ndef_msg_len; /* Maximum size of NDEF that can be written on the tag 20588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project */ 20688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t ndef_header_offset; /* The offset on Tag where first NDEF tlv is 20788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project present */ 20888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t ndef_block_written; /* Last block where NDEF bytes are written */ 20988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t num_ndef_finalblock; /* Block number where NDEF's last byte will be 21088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project present */ 21188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t num_lock_tlvs; /* Number of lcok tlvs detected in the tag */ 21288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project tRW_T1T_LOCK_INFO lock_tlv[RW_T1T_MAX_LOCK_TLVS]; /* Information retrieved 21388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project from lock control tlv */ 21488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t num_lockbytes; /* Number of dynamic lock bytes present in the tag */ 21588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project tRW_T1T_LOCK 21688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project lockbyte[RW_T1T_MAX_LOCK_BYTES]; /* Dynamic Lock byte information */ 21788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t num_mem_tlvs; /* Number of memory tlvs detected in the tag */ 21888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project tRW_T1T_RES_INFO 21988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project mem_tlv[RW_T1T_MAX_MEM_TLVS]; /* Information retrieved from mem tlv */ 22088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t attr_seg; /* Tag segment for which attributes are prepared */ 22188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t 22288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project lock_attr_seg; /* Tag segment for which lock attributes are prepared */ 22388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t 22488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project attr[T1T_BLOCKS_PER_SEGMENT]; /* byte information - Reserved/lock/otp or 22588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project data */ 22688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t lock_attr 22788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project [T1T_BLOCKS_PER_SEGMENT]; /* byte information - read only or read write */ 22888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#endif 2298678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongker} tRW_T1T_CB; 2308678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongker 2318678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongker/* Mifare Ultalight/ Ultralight Family blank tag version block settings */ 2328678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongker/* Block where version number of the tag is stored */ 2338678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongker#define T2T_MIFARE_VERSION_BLOCK 0x04 2348678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongker/* Blank Ultralight tag - Block 4 (byte 0, byte 1) */ 2358678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongker#define T2T_MIFARE_ULTRALIGHT_VER_NO 0xFFFF 2368678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongker/* Blank Ultralight family tag - Block 4 (byte 0, byte 1) */ 2378678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongker#define T2T_MIFARE_ULTRALIGHT_FAMILY_VER_NO 0x0200 23888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 23988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Infineon my-d move / my-d blank tag uid block settings */ 24088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define T2T_INFINEON_VERSION_BLOCK 0x00 24188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define T2T_INFINEON_MYD_MOVE_LEAN 0x0570 24288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define T2T_INFINEON_MYD_MOVE 0x0530 24388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 24488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define T2T_BRCM_VERSION_BLOCK 0x00 24588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define T2T_BRCM_STATIC_MEM 0x2E01 24688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define T2T_BRCM_DYNAMIC_MEM 0x2E02 24788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 24888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define T2T_NDEF_NOT_DETECTED 0x00 24988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define T2T_NDEF_DETECTED 0x01 25088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define T2T_NDEF_READ 0x02 25188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 25288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Maximum supported Memory control TLVS in the tag */ 25388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_MAX_MEM_TLVS 0x05 25488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Maximum supported Lock control TLVS in the tag */ 25588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_MAX_LOCK_TLVS 0x05 25688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Maximum supported dynamic lock bytes */ 25764d85d0d827489c514f6aec075482563c80cda73Joe Onorato#define RW_T2T_MAX_LOCK_BYTES 0x1E 25864d85d0d827489c514f6aec075482563c80cda73Joe Onorato#define RW_T2T_SEGMENT_BYTES 128 25964d85d0d827489c514f6aec075482563c80cda73Joe Onorato#define RW_T2T_SEGMENT_SIZE 16 26064d85d0d827489c514f6aec075482563c80cda73Joe Onorato 2618b70e8c6574e6e6e80aaa84fe1a9426995fa0a78Doug Zongker/* Lock not yet set as part of SET TAG RO op */ 26288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_LOCK_NOT_UPDATED 0x00 2638b70e8c6574e6e6e80aaa84fe1a9426995fa0a78Doug Zongker/* Sent command to set the Lock bytes */ 26488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_LOCK_UPDATE_INITIATED 0x01 26588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Lock bytes are set */ 26688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_LOCK_UPDATED 0x02 26788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projecttypedef uint8_t tRW_T2T_LOCK_STATUS; 26888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 26988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* States */ 27088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Tag not activated */ 27188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_STATE_NOT_ACTIVATED 0x00 27288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* T1 Tag activated and ready to perform rw operation on Tag*/ 27388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_STATE_IDLE 0x01 27488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting response for read command sent to tag */ 27588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_STATE_READ 0x02 27688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting response for write command sent to tag */ 27788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_STATE_WRITE 0x03 27888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Waiting response for sector select command */ 27988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_STATE_SELECT_SECTOR 0x04 28088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Detecting Lock/Memory/NDEF/Proprietary TLV in the Tag */ 28188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_STATE_DETECT_TLV 0x05 2821e0847c2fcbe1b95464f32a719d2b9e620d1e6ecDima Zavin/* Performing NDEF Read procedure */ 2831e0847c2fcbe1b95464f32a719d2b9e620d1e6ecDima Zavin#define RW_T2T_STATE_READ_NDEF 0x06 2841e0847c2fcbe1b95464f32a719d2b9e620d1e6ecDima Zavin/* Performing NDEF Write procedure */ 2851e0847c2fcbe1b95464f32a719d2b9e620d1e6ecDima Zavin#define RW_T2T_STATE_WRITE_NDEF 0x07 2861e0847c2fcbe1b95464f32a719d2b9e620d1e6ecDima Zavin/* Setting Tag as Read only tag */ 28788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_STATE_SET_TAG_RO 0x08 28888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Check if Tag is still present */ 28988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_STATE_CHECK_PRESENCE 0x09 29088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Format the tag */ 29188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_STATE_FORMAT_TAG 0x0A 29288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Tag is in HALT State */ 29388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_STATE_HALT 0x0B 29488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 29588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* rw_t2t_read/rw_t2t_write takes care of sector change if the block to 29688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project * read/write is in a different sector 29788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project * Next Substate should be assigned to control variable 'substate' before 29888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project * calling these function for State Machine to 29988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project * move back to the particular substate after Sector change is completed and 30088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project * read/write command is sent on new sector */ 30188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 30288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Sub states */ 30388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_SUBSTATE_NONE 0x00 30488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 30588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Sub states in RW_T2T_STATE_SELECT_SECTOR state */ 30688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for response of sector select CMD 1 */ 30788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_SELECT_SECTOR_SUPPORT 0x01 30888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for response of sector select CMD 2 */ 30988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_SELECT_SECTOR 0x02 31088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 31188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Sub states in RW_T1T_STATE_DETECT_XXX state */ 31288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for the detection of a tlv in a tag */ 31388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_READ_CC 0x03 31488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for the detection of a tlv in a tag */ 31588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_TLV_DETECT 0x04 31688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for finding the len field is 1 or 3 bytes long */ 31788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_FIND_LEN_FIELD_LEN 0x05 31888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for extracting len field value */ 31988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_READ_TLV_LEN0 0x06 32088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for extracting len field value */ 32188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_READ_TLV_LEN1 0x07 32288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for extracting value field in the TLV */ 32388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_READ_TLV_VALUE 0x08 32488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for reading dynamic locks in the TLV */ 32588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_READ_LOCKS 0x09 32688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 32788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Sub states in RW_T2T_STATE_WRITE_NDEF state */ 32888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for rsp to reading the block where NDEF starts */ 32988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_READ_NDEF_FIRST_BLOCK 0x0A 33088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for rsp to reading block where new NDEF Msg ends */ 33188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_READ_NDEF_LAST_BLOCK 0x0B 33288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for rsp to reading block where Trm tlv gets added*/ 33388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_READ_TERM_TLV_BLOCK 0x0C 33488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for rsp to reading block where nxt NDEF write */ 33588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_READ_NDEF_NEXT_BLOCK 0x0D 33688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for rsp to writting NDEF block */ 33788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_WRITE_NDEF_NEXT_BLOCK 0x0E 33888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for rsp to last NDEF block write cmd */ 33988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_WRITE_NDEF_LAST_BLOCK 0x0F 34088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for rsp to reading NDEF len field block */ 34188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_READ_NDEF_LEN_BLOCK 0x10 34288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for rsp of updating first NDEF len field block */ 34388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_WRITE_NDEF_LEN_BLOCK 0x11 34488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for rsp of updating next NDEF len field block */ 34588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_WRITE_NDEF_LEN_NEXT_BLOCK 0x12 34688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for rsp to writing to Terminator tlv */ 34788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_WRITE_TERM_TLV_CMPLT 0x13 34888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 34988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Sub states in RW_T2T_STATE_FORMAT_TAG state */ 35088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_READ_VERSION_INFO 0x14 35188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for response to format/set capability container */ 35288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_SET_CC 0x15 35388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_SET_LOCK_TLV 0x16 35488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for response to format/set NULL NDEF */ 35588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_SET_NULL_NDEF 0x17 35688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 35788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Sub states in RW_T2T_STATE_SET_TAG_RO state */ 35888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for response to set CC3 to RO */ 35988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_SET_CC_RO 0x19 36088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for response to read dynamic lock bytes block */ 36188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_READ_DYN_LOCK_BYTE_BLOCK 0x1A 36288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for response to set dynamic lock bits */ 36388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_SET_DYN_LOCK_BITS 0x1B 36488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* waiting for response to set static lock bits */ 36588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_SET_ST_LOCK_BITS 0x1C 36688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 36788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projecttypedef struct { 36888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t offset; /* Offset of the lock byte in the Tag */ 36988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t num_bits; /* Number of lock bits in the lock byte */ 37088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t bytes_locked_per_bit; /* No. of tag bytes gets locked by a bit in this 37188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project byte */ 37288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project} tRW_T2T_LOCK_INFO; 37388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 37488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projecttypedef struct { 37588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t offset; /* Reserved bytes offset taken from Memory control TLV */ 37688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t num_bytes; /* Number of reserved bytes as per the TLV */ 37788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project} tRW_T2T_RES_INFO; 37888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 37988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projecttypedef struct { 38088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t tlv_index; /* Index of Lock control tlv that points to this address */ 38188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t byte_index; /* Index of Lock byte pointed by the TLV */ 38288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t lock_byte; /* Value in the lock byte */ 38388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project tRW_T2T_LOCK_STATUS 38488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project lock_status; /* Indicates if it is modifed to set tag as Read only */ 38588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project bool b_lock_read; /* Is the lock byte is already read from tag */ 38688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project} tRW_T2T_LOCK; 38788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 38888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* RW Type 2 Tag control block */ 38988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projecttypedef struct { 39088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t state; /* Reader/writer state */ 39188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t substate; /* Reader/write substate in NDEF write state */ 39288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t 39388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project prev_substate; /* Substate of the tag before moving to different sector */ 39488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t sector; /* Sector number that is selected */ 39588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t select_sector; /* Sector number that is expected to get selected */ 39688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t tag_hdr[T2T_READ_DATA_LEN]; /* T2T Header blocks */ 39788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t tag_data[T2T_READ_DATA_LEN]; /* T2T Block 4 - 7 data */ 39888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t ndef_status; /* The current status of NDEF Write operation */ 39988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t block_read; /* Read block */ 40088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t block_written; /* Written block */ 40188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project tT2T_CMD_RSP_INFO* 40288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project p_cmd_rsp_info; /* Pointer to Command rsp info of last sent command */ 40388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project NFC_HDR* p_cur_cmd_buf; /* Copy of current command, for retx/send after sector 40488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project change */ 40588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project NFC_HDR* p_sec_cmd_buf; /* Copy of command, to send after sector change */ 40688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project TIMER_LIST_ENT t2_timer; /* timeout for each API call */ 40788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project bool b_read_hdr; /* Tag header read from tag */ 40888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project bool b_read_data; /* Tag data block read from tag */ 40988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project bool b_hard_lock; /* Hard lock the tag as part of config tag to Read only */ 41088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project bool check_tag_halt; /* Resent command after NACK rsp to find tag is in HALT 41188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project State */ 41288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#if (RW_NDEF_INCLUDED == TRUE) 41388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project bool skip_dyn_locks; /* Skip reading dynamic lock bytes from the tag */ 41488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t found_tlv; /* The Tlv found while searching a particular TLV */ 41588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t tlv_detect; /* TLV type under detection */ 41688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t num_lock_tlvs; /* Number of lcok tlvs detected in the tag */ 41788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t attr_seg; /* Tag segment for which attributes are prepared */ 41888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t 41988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project lock_attr_seg; /* Tag segment for which lock attributes are prepared */ 42088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t segment; /* Current operating segment */ 42188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t ndef_final_block[T2T_BLOCK_SIZE]; /* Buffer for ndef last block */ 42288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t num_mem_tlvs; /* Number of memory tlvs detected in the tag */ 42388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t num_lockbytes; /* Number of dynamic lock bytes present in the tag */ 42488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t attr 42588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project [RW_T2T_SEGMENT_SIZE]; /* byte information - Reserved/lock/otp or data */ 42688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t lock_attr[RW_T2T_SEGMENT_SIZE]; /* byte information - read only or 42788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project read write */ 42888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t tlv_value[3]; /* Read value field of TLV */ 42988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t ndef_first_block[T2T_BLOCK_LEN]; /* NDEF TLV Header block */ 43088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t ndef_read_block[T2T_BLOCK_LEN]; /* Buffer to hold read before write 43188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project block */ 43288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t ndef_last_block[T2T_BLOCK_LEN]; /* Terminator TLV block after NDEF 43388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project Write operation */ 43488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t terminator_tlv_block[T2T_BLOCK_LEN]; /* Terminator TLV Block */ 43588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t ndef_last_block_num; /* Block where last byte of updating ndef 43688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project message will exist */ 43788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t ndef_read_block_num; /* Block read during NDEF Write to avoid 43888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project overwritting res bytes */ 43988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t 44088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project bytes_count; /* No. of bytes remaining to collect during tlv detect */ 44188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t 44288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project terminator_byte_index; /* The offset of the tag where terminator tlv may 44388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project be added */ 44488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t work_offset; /* Working byte offset */ 44588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t ndef_header_offset; 44688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t 44788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project ndef_msg_offset; /* Offset on Tag where first NDEF message is present */ 44888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t ndef_msg_len; /* Lenght of NDEF Message */ 44988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t 4508b70e8c6574e6e6e80aaa84fe1a9426995fa0a78Doug Zongker max_ndef_msg_len; /* Maximum size of NDEF that can be written on the tag 4518678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongker */ 45288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t new_ndef_msg_len; /* Lenght of new updating NDEF Message */ 45388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t ndef_write_block; 45488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t prop_msg_len; /* Proprietary tlv length */ 4557b2845ab1a47324a6fb25261048510e79656a732Joe Onorato uint8_t* p_new_ndef_buffer; /* Pointer to updating NDEF Message */ 4567b2845ab1a47324a6fb25261048510e79656a732Joe Onorato uint8_t* p_ndef_buffer; /* Pointer to NDEF Message */ 4577b2845ab1a47324a6fb25261048510e79656a732Joe Onorato tRW_T2T_LOCK_INFO lock_tlv[RW_T2T_MAX_LOCK_TLVS]; /* Information retrieved 45888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project from lock control tlv */ 4597b2845ab1a47324a6fb25261048510e79656a732Joe Onorato tRW_T2T_LOCK 46088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project lockbyte[RW_T2T_MAX_LOCK_BYTES]; /* Dynamic Lock byte information */ 46188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project tRW_T2T_RES_INFO 46288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project mem_tlv[RW_T2T_MAX_MEM_TLVS]; /* Information retrieved from mem tlv */ 46388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#endif 46488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project} tRW_T2T_CB; 46588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 46688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Type 3 Tag control block */ 46788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projecttypedef uint8_t tRW_T3T_RW_STATE; 46888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 46988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projecttypedef struct { 47088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project tNFC_STATUS status; 47188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t version; /* Ver: peer version */ 4728678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongker uint8_t 4738678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongker nbr; /* NBr: number of blocks that can be read using one Check command */ 4748678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongker uint8_t nbw; /* Nbw: number of blocks that can be written using one Update 4758678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongker command */ 4768678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongker uint16_t nmaxb; /* Nmaxb: maximum number of blocks available for NDEF data */ 4778678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongker uint8_t writef; /* WriteFlag: 00h if writing data finished; 0Fh if writing 4788678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongker data in progress */ 4798678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongker uint8_t 48037c0e274d16b1b340f1fe1bd7d11e19aa2e73e26Doug Zongker rwflag; /* RWFlag: 00h NDEF is read-only; 01h if read/write available */ 4818678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongker uint32_t ln; /* Ln: actual size of stored NDEF data (in bytes) */ 4828678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongker} tRW_T3T_DETECT; 48337c0e274d16b1b340f1fe1bd7d11e19aa2e73e26Doug Zongker 4848678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongker/* RW_T3T control block flags */ 4858678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongker/* The final command for completing the NDEF read/write */ 4868678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongker#define RW_T3T_FL_IS_FINAL_NDEF_SEGMENT 0x01 4878678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongker/* Waiting for POLL response for presence check */ 4888678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongker#define RW_T3T_FL_W4_PRESENCE_CHECK_POLL_RSP 0x02 48988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Waiting for POLL response for RW_T3tGetSystemCodes */ 49088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T3T_FL_W4_GET_SC_POLL_RSP 0x04 49188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Waiting for POLL response for RW_T3tDetectNDef */ 49288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T3T_FL_W4_NDEF_DETECT_POLL_RSP 0x08 49388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Waiting for POLL response for RW_T3tFormat */ 49488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T3T_FL_W4_FMT_FELICA_LITE_POLL_RSP 0x10 49588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Waiting for POLL response for RW_T3tSetReadOnly */ 49688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T3T_FL_W4_SRO_FELICA_LITE_POLL_RSP 0x20 49788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 49888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projecttypedef struct { 49988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint32_t cur_tout; /* Current command timeout */ 50088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project /* check timeout is check_tout_a + n * check_tout_b; X is T/t3t * 4^E */ 50188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint32_t check_tout_a; /* Check command timeout (A+1)*X */ 50288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint32_t check_tout_b; /* Check command timeout (B+1)*X */ 50388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project /* update timeout is update_tout_a + n * update_tout_b; X is T/t3t * 4^E */ 50488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint32_t update_tout_a; /* Update command timeout (A+1)*X */ 50588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint32_t update_tout_b; /* Update command timeout (B+1)*X */ 50688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project tRW_T3T_RW_STATE rw_state; /* Reader/writer state */ 50788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t rw_substate; 50888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t cur_cmd; /* Current command being executed */ 50988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project NFC_HDR* p_cur_cmd_buf; /* Copy of current command, for retransmission */ 51088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project TIMER_LIST_ENT timer; /* timeout for waiting for response */ 51188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project TIMER_LIST_ENT poll_timer; /* timeout for waiting for response */ 51288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 51388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project tRW_T3T_DETECT ndef_attrib; /* T3T NDEF attribute information */ 51488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 51588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint32_t ndef_msg_len; /* Length of ndef message to send */ 51688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint32_t ndef_msg_bytes_sent; /* Length of ndef message sent so far */ 51788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t* ndef_msg; /* Buffer for outgoing NDEF message */ 51888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint32_t ndef_rx_readlen; /* Number of bytes read in current CHECK command */ 51988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint32_t ndef_rx_offset; /* Length of ndef message read so far */ 52088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 52188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t num_system_codes; /* System codes detected */ 52288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t system_codes[T3T_MAX_SYSTEM_CODES]; 52388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 52488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t peer_nfcid2[NCI_NFCID2_LEN]; 52588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t cur_poll_rc; /* RC used in current POLL command */ 52688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 52788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t flags; /* Flags see RW_T3T_FL_* */ 52888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project} tRW_T3T_CB; 52988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 53088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* 53188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project** Type 4 Tag 53288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project*/ 53388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 53488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Max data size using a single ReadBinary. 2 bytes are for status bytes */ 53588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T4T_MAX_DATA_PER_READ \ 53688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project (NFC_RW_POOL_BUF_SIZE - NFC_HDR_SIZE - NCI_DATA_HDR_SIZE - \ 53788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project T4T_RSP_STATUS_WORDS_SIZE) 53888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 53988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Max data size using a single UpdateBinary. 6 bytes are for CLA, INS, P1, P2, 54088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project * Lc */ 54188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T4T_MAX_DATA_PER_WRITE \ 54288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project (NFC_RW_POOL_BUF_SIZE - NFC_HDR_SIZE - NCI_MSG_OFFSET_SIZE - \ 54388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project NCI_DATA_HDR_SIZE - T4T_CMD_MAX_HDR_SIZE) 54488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 54588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Mandatory NDEF file control */ 54688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projecttypedef struct { 54788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t file_id; /* File Identifier */ 54888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t max_file_size; /* Max NDEF file size */ 54988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t read_access; /* read access condition */ 55088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t write_access; /* write access condition */ 55188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project} tRW_T4T_NDEF_FC; 55288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 55388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Capability Container */ 55488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projecttypedef struct { 55588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t cclen; /* the size of this capability container */ 55688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t version; /* the mapping specification version */ 55788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t max_le; /* the max data size by a single ReadBinary */ 55888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t max_lc; /* the max data size by a single UpdateBinary */ 55988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project tRW_T4T_NDEF_FC ndef_fc; /* Mandatory NDEF file control */ 56088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project} tRW_T4T_CC; 56188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 56288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projecttypedef uint8_t tRW_T4T_RW_STATE; 56388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projecttypedef uint8_t tRW_T4T_RW_SUBSTATE; 56488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 56588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Type 4 Tag Control Block */ 56688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projecttypedef struct { 56788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project tRW_T4T_RW_STATE state; /* main state */ 56888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project tRW_T4T_RW_SUBSTATE sub_state; /* sub state */ 56988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t version; /* currently effective version */ 57088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project TIMER_LIST_ENT timer; /* timeout for each API call */ 57188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 57288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t ndef_length; /* length of NDEF data */ 57388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t* p_update_data; /* pointer of data to update */ 57488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t rw_length; /* remaining bytes to read/write */ 57588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t rw_offset; /* remaining offset to read/write */ 57688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project NFC_HDR* p_data_to_free; /* GKI buffet to delete after done */ 57788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 57888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project tRW_T4T_CC cc_file; /* Capability Container File */ 57988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 58088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* NDEF has been detected */ 58188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T4T_NDEF_STATUS_NDEF_DETECTED 0x01 58288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* NDEF file is read-only */ 58388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_T4T_NDEF_STATUS_NDEF_READ_ONLY 0x02 58488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 58588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t ndef_status; /* bitmap for NDEF status */ 58688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t channel; /* channel id: used for read-binary */ 58788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 58888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t max_read_size; /* max reading size per a command */ 58988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t max_update_size; /* max updating size per a command */ 59088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t card_size; 59188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t card_type; 59288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project} tRW_T4T_CB; 59388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 59488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* RW retransmission statistics */ 59588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#if (RW_STATS_INCLUDED == TRUE) 59688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projecttypedef struct { 59788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint32_t start_tick; /* System tick count at activation */ 59888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint32_t bytes_sent; /* Total bytes sent since activation */ 59988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint32_t bytes_received; /* Total bytes received since activation */ 60088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint32_t num_ops; /* Number of operations since activation */ 60188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint32_t num_retries; /* Number of retranmissions since activation */ 60288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint32_t num_crc; /* Number of crc failures */ 60388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint32_t num_trans_err; /* Number of transmission error notifications */ 60488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint32_t num_fail; /* Number of aborts (failures after retries) */ 60588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project} tRW_STATS; 60688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#endif /* RW_STATS_INCLUDED */ 60788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 60888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* ISO 15693 RW Control Block */ 60988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projecttypedef uint8_t tRW_I93_RW_STATE; 61088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projecttypedef uint8_t tRW_I93_RW_SUBSTATE; 61188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 61288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* tag is read-only */ 61388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_I93_FLAG_READ_ONLY 0x01 61488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* tag supports read multi block */ 61588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_I93_FLAG_READ_MULTI_BLOCK 0x02 61688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* need to reset DSFID for formatting */ 61788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_I93_FLAG_RESET_DSFID 0x04 61864d85d0d827489c514f6aec075482563c80cda73Joe Onorato/* need to reset AFI for formatting */ 61964d85d0d827489c514f6aec075482563c80cda73Joe Onorato#define RW_I93_FLAG_RESET_AFI 0x08 62064d85d0d827489c514f6aec075482563c80cda73Joe Onorato/* use 2 bytes for number of blocks */ 62164d85d0d827489c514f6aec075482563c80cda73Joe Onorato#define RW_I93_FLAG_16BIT_NUM_BLOCK 0x10 62288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* use extended commands */ 62388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_I93_FLAG_EXT_COMMANDS 0x20 62488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 62588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* searching for type */ 62688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_I93_TLV_DETECT_STATE_TYPE 0x01 62788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* searching for the first byte of length */ 62888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_I93_TLV_DETECT_STATE_LENGTH_1 0x02 62988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* searching for the second byte of length */ 63088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_I93_TLV_DETECT_STATE_LENGTH_2 0x03 63188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* searching for the third byte of length */ 63288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_I93_TLV_DETECT_STATE_LENGTH_3 0x04 63388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* reading value field */ 63488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define RW_I93_TLV_DETECT_STATE_VALUE 0x05 63588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 63688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectenum { 63788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project RW_I93_ICODE_SLI, /* ICODE SLI, SLIX */ 63888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project RW_I93_ICODE_SLI_S, /* ICODE SLI-S, SLIX-S */ 63988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project RW_I93_ICODE_SLI_L, /* ICODE SLI-L, SLIX-L */ 64088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project RW_I93_TAG_IT_HF_I_PLUS_INLAY, /* Tag-it HF-I Plus Inlay */ 64188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project RW_I93_TAG_IT_HF_I_PLUS_CHIP, /* Tag-it HF-I Plus Chip */ 64288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project RW_I93_TAG_IT_HF_I_STD_CHIP_INLAY, /* Tag-it HF-I Standard Chip/Inlyas */ 64388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project RW_I93_TAG_IT_HF_I_PRO_CHIP_INLAY, /* Tag-it HF-I Pro Chip/Inlyas */ 64488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project RW_I93_STM_LRI1K, /* STM LRI1K */ 64588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project RW_I93_STM_LRI2K, /* STM LRI2K */ 64688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project RW_I93_STM_LRIS2K, /* STM LRIS2K */ 64788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project RW_I93_STM_LRIS64K, /* STM LRIS64K */ 64888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project RW_I93_STM_M24LR64_R, /* STM M24LR64-R */ 64988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project RW_I93_STM_M24LR04E_R, /* STM M24LR04E-R */ 65088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project RW_I93_STM_M24LR16E_R, /* STM M24LR16E-R */ 65188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project RW_I93_STM_M24LR64E_R, /* STM M24LR64E-R */ 65288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project RW_I93_STM_ST25DV04K, /* STM ST25DV04K */ 65388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project RW_I93_STM_ST25DVHIK, /* STM ST25DV 16K OR 64K */ 65488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project RW_I93_UNKNOWN_PRODUCT /* Unknwon product version */ 65588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project}; 65688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 65788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projecttypedef struct { 65888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project tRW_I93_RW_STATE state; /* main state */ 65988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project tRW_I93_RW_SUBSTATE sub_state; /* sub state */ 66088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project TIMER_LIST_ENT timer; /* timeout for each sent command */ 66188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t sent_cmd; /* last sent command */ 66288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t retry_count; /* number of retry */ 66388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project NFC_HDR* p_retry_cmd; /* buffer to store cmd sent last */ 66488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 66588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t info_flags; /* information flags */ 66688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t uid[I93_UID_BYTE_LEN]; /* UID of currently activated */ 66788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t dsfid; /* DSFID if I93_INFO_FLAG_DSFID */ 66888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t afi; /* AFI if I93_INFO_FLAG_AFI */ 66988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t block_size; /* block size of tag, in bytes */ 67088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t num_block; /* number of blocks in tag */ 67188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t ic_reference; /* IC Reference of tag */ 67288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t product_version; /* tag product version */ 67388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 67488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t intl_flags; /* flags for internal information */ 67588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 67688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t tlv_detect_state; /* TLV detecting state */ 67788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t tlv_type; /* currently detected type */ 67888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t tlv_length; /* currently detected length */ 67988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 68088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint16_t ndef_tlv_start_offset; /* offset of first byte of NDEF TLV */ 6816ea3b8856d656752c0310ca237ed99e7451be83bDima Zavin uint16_t ndef_tlv_last_offset; /* offset of last byte of NDEF TLV */ 6826ea3b8856d656752c0310ca237ed99e7451be83bDima Zavin uint16_t max_ndef_length; /* max NDEF length the tag contains */ 6836ea3b8856d656752c0310ca237ed99e7451be83bDima Zavin uint16_t ndef_length; /* length of NDEF data */ 68488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 68517c83cf22c426c628b4b21bc65128a0d80866d31Doug Zongker uint8_t* p_update_data; /* pointer of data to update */ 68617c83cf22c426c628b4b21bc65128a0d80866d31Doug Zongker uint16_t rw_length; /* bytes to read/write */ 68717c83cf22c426c628b4b21bc65128a0d80866d31Doug Zongker uint16_t rw_offset; /* offset to read/write */ 68817c83cf22c426c628b4b21bc65128a0d80866d31Doug Zongker} tRW_I93_CB; 68917c83cf22c426c628b4b21bc65128a0d80866d31Doug Zongker 69017c83cf22c426c628b4b21bc65128a0d80866d31Doug Zongker/* RW memory control blocks */ 69117c83cf22c426c628b4b21bc65128a0d80866d31Doug Zongkertypedef union { 69217c83cf22c426c628b4b21bc65128a0d80866d31Doug Zongker tRW_T1T_CB t1t; 69317c83cf22c426c628b4b21bc65128a0d80866d31Doug Zongker tRW_T2T_CB t2t; 69417c83cf22c426c628b4b21bc65128a0d80866d31Doug Zongker tRW_T3T_CB t3t; 69517c83cf22c426c628b4b21bc65128a0d80866d31Doug Zongker tRW_T4T_CB t4t; 69617c83cf22c426c628b4b21bc65128a0d80866d31Doug Zongker tRW_I93_CB i93; 69717c83cf22c426c628b4b21bc65128a0d80866d31Doug Zongker} tRW_TCB; 69817c83cf22c426c628b4b21bc65128a0d80866d31Doug Zongker 69917c83cf22c426c628b4b21bc65128a0d80866d31Doug Zongker/* RW control blocks */ 70017c83cf22c426c628b4b21bc65128a0d80866d31Doug Zongkertypedef struct { 70117c83cf22c426c628b4b21bc65128a0d80866d31Doug Zongker tRW_TCB tcb; 7028b70e8c6574e6e6e80aaa84fe1a9426995fa0a78Doug Zongker tRW_CBACK* p_cback; 70388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint32_t cur_retry; /* Retry count for the current operation */ 70488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#if (RW_STATS_INCLUDED == TRUE) 70588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project tRW_STATS stats; 70688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#endif /* RW_STATS_INCLUDED */ 70788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project} tRW_CB; 70817c83cf22c426c628b4b21bc65128a0d80866d31Doug Zongker 70917c83cf22c426c628b4b21bc65128a0d80866d31Doug Zongker/***************************************************************************** 71088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project** EXTERNAL FUNCTION DECLARATIONS 71188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project*****************************************************************************/ 71288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 71388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Global NFC data */ 71488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectextern tRW_CB rw_cb; 71588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 71688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* from .c */ 71788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 71888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#if (RW_NDEF_INCLUDED == TRUE) 71988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectextern tRW_EVENT rw_t1t_handle_rsp(const tT1T_CMD_RSP_INFO* p_info, 72088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project bool* p_notify, uint8_t* p_data, 72188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project tNFC_STATUS* p_status); 72288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectextern tRW_EVENT rw_t1t_info_to_event(const tT1T_CMD_RSP_INFO* p_info); 72388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#else 72417c83cf22c426c628b4b21bc65128a0d80866d31Doug Zongker#define rw_t1t_handle_rsp(p, a, b, c) t1t_info_to_evt(p) 72588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define rw_t1t_info_to_event(p) t1t_info_to_evt(p) 72688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#endif 7278b70e8c6574e6e6e80aaa84fe1a9426995fa0a78Doug Zongker 72888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectextern void rw_init(void); 72988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectextern tNFC_STATUS rw_t1t_select(uint8_t hr[T1T_HR_LEN], 73088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t uid[T1T_CMD_UID_LEN]); 73188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectextern tNFC_STATUS rw_t1t_send_dyn_cmd(uint8_t opcode, uint8_t add, 73288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t* p_dat); 73388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectextern tNFC_STATUS rw_t1t_send_static_cmd(uint8_t opcode, uint8_t add, 73488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project uint8_t dat); 73588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectextern void rw_t1t_process_timeout(TIMER_LIST_ENT* p_tle); 73688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectextern void rw_t1t_handle_op_complete(void); 73788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 73888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#if (RW_NDEF_INCLUDED == TRUE) 73988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectextern tRW_EVENT rw_t2t_info_to_event(const tT2T_CMD_RSP_INFO* p_info); 74088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectextern void rw_t2t_handle_rsp(uint8_t* p_data); 74188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#else 74288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define rw_t2t_info_to_event(p) t2t_info_to_evt(p) 74388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#define rw_t2t_handle_rsp(p) 74488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#endif 74588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 7468678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongkerextern tNFC_STATUS rw_t2t_sector_change(uint8_t sector); 7478678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongkerextern tNFC_STATUS rw_t2t_read(uint16_t block); 7488678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongkerextern tNFC_STATUS rw_t2t_write(uint16_t block, uint8_t* p_write_data); 7498678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongkerextern void rw_t2t_process_timeout(); 7508678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongkerextern tNFC_STATUS rw_t2t_select(void); 7518678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongkervoid rw_t2t_handle_op_complete(void); 7528678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongker 7538678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongkerextern void rw_t3t_process_timeout(TIMER_LIST_ENT* p_tle); 7548678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongkerextern tNFC_STATUS rw_t3t_select(uint8_t peer_nfcid2[NCI_RF_F_UID_LEN], 7558678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongker uint8_t mrti_check, uint8_t mrti_update); 7568678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongkervoid rw_t3t_handle_nci_poll_ntf(uint8_t nci_status, uint8_t num_responses, 7578678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongker uint8_t sensf_res_buf_size, 7588678df4c064a17575137bbacf8f5856052dd5bd7Doug Zongker uint8_t* p_sensf_res_buf); 75988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 76088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectextern tNFC_STATUS rw_t4t_select(void); 76188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectextern void rw_t4t_process_timeout(TIMER_LIST_ENT* p_tle); 76288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 76388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectextern tNFC_STATUS rw_i93_select(uint8_t* p_uid); 76488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectextern void rw_i93_process_timeout(TIMER_LIST_ENT* p_tle); 76588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectextern void rw_t4t_handle_isodep_nak_rsp(uint8_t status, bool is_ntf); 76688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#if (RW_STATS_INCLUDED == TRUE) 76788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project/* Internal fcns for statistics (from rw_main.c) */ 76888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectvoid rw_main_reset_stats(void); 76988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectvoid rw_main_update_tx_stats(uint32_t bytes_tx, bool is_retry); 77088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectvoid rw_main_update_rx_stats(uint32_t bytes_rx); 77188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectvoid rw_main_update_crc_error_stats(void); 77288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectvoid rw_main_update_trans_error_stats(void); 77388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectvoid rw_main_update_fail_stats(void); 77488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectvoid rw_main_log_stats(void); 77588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#endif /* RW_STATS_INCLUDED */ 77688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project 77788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project#endif /* RW_INT_H_ */ 77888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project