1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 3e9629bad30a9f478b336ab46b8e6e02f7f87af46Evan Chu * Copyright (C) 2009-2014 Broadcom Corporation 4e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 5e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 6e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * you may not use this file except in compliance with the License. 7e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * You may obtain a copy of the License at: 8e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 9e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 11e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * See the License for the specific language governing permissions and 15e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * limitations under the License. 16e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 17e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 18e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 195c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 20e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 21e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * This file contains the Near Field Communication (NFC) Reader/Writer mode 23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * related internal function / definitions. 24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef RW_INT_H_ 28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_INT_H_ 29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "tags_defs.h" 31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "tags_int.h" 32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "rw_api.h" 33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Proprietary definitions for HR0 and HR1 */ 35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_HR0_HI_NIB 0xF0 /* HI NIB Tag */ 36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_IS_JEWEL64 0x20 /* Jewel 64 Tag */ 37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_IS_JEWEL 0x00 /* Jewel Tag */ 38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_IS_TOPAZ 0x10 /* TOPAZ Tag */ 39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_IS_TOPAZ96 0x11 /* TOPAZ96 Tag */ 40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_IS_TOPAZ512 0x12 /* TOPAZ512 Tag */ 41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_HR1_MIN 0x49 /* Supports dynamic commands on static tag if HR1 > 0x49 */ 42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_MAX_MEM_TLVS 0x05 /* Maximum supported Memory control TLVS in the tag */ 44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_MAX_LOCK_TLVS 0x05 /* Maximum supported Lock control TLVS in the tag */ 45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_MAX_LOCK_BYTES 0x1E /* Maximum supported dynamic lock bytes */ 46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* State of the Tag as interpreted by RW */ 48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1_TAG_ATTRB_UNKNOWN 0x00 /* TAG State is unknown to RW */ 49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1_TAG_ATTRB_INITIALIZED 0x01 /* TAG is in INITIALIZED state */ 50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1_TAG_ATTRB_INITIALIZED_NDEF 0x02 /* TAG is in INITIALIZED state and has NDEF tlv with len=0 */ 51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1_TAG_ATTRB_READ_ONLY 0x03 /* TAG is in READ ONLY state */ 52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1_TAG_ATTRB_READ_WRITE 0x04 /* TAG is in READ WRITE state */ 53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_LOCK_NOT_UPDATED 0x00 /* Lock not yet set as part of SET TAG RO op */ 55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_LOCK_UPDATE_INITIATED 0x01 /* Sent command to set the Lock bytes */ 56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_LOCK_UPDATED 0x02 /* Lock bytes are set */ 57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef UINT8 tRW_T1T_LOCK_STATUS; 58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* States */ 60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_STATE_NOT_ACTIVATED 0x00 /* Tag not activated and or response not received for RID */ 61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_STATE_IDLE 0x01 /* T1 Tag activated and ready to perform rw operation on Tag*/ 62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_STATE_READ 0x02 /* waiting rsp for read command sent to tag */ 63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_STATE_WRITE 0x03 /* waiting rsp for write command sent to tag */ 64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_STATE_TLV_DETECT 0x04 /* performing TLV detection procedure */ 65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_STATE_READ_NDEF 0x05 /* performing read NDEF procedure */ 66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_STATE_WRITE_NDEF 0x06 /* performing update NDEF procedure */ 67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_STATE_SET_TAG_RO 0x07 /* Setting Tag as read only tag */ 68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_STATE_CHECK_PRESENCE 0x08 /* Check if Tag is still present */ 69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_STATE_FORMAT_TAG 0x09 /* Format T1 Tag */ 70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Sub states */ 72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_SUBSTATE_NONE 0x00 /* Default substate */ 73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Sub states in RW_T1T_STATE_TLV_DETECT state */ 75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_TLV_DETECT 0x01 /* waiting for the detection of a tlv in a tag */ 76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_FIND_LEN_FIELD_LEN 0x02 /* waiting for finding the len field is 1 or 3 bytes long */ 77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_READ_TLV_LEN0 0x03 /* waiting for extracting len field value */ 78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_READ_TLV_LEN1 0x04 /* waiting for extracting len field value */ 79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_READ_TLV_VALUE 0x05 /* waiting for extracting value field in the TLV */ 80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_READ_LOCKS 0x06 /* waiting for reading dynamic locks in the TLV */ 81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Sub states in RW_T1T_STATE_WRITE_NDEF state */ 83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_READ_NDEF_BLOCK 0x07 /* waiting for response of reading a block that will be partially updated */ 84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_INVALIDATE_NDEF 0x08 /* waiting for response of invalidating NDEF Msg */ 85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_NDEF_WRITE 0x09 /* waiting for response of writing a part of NDEF Msg */ 86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_NDEF_UPDATED 0x0A /* waiting for response of writing last part of NDEF Msg */ 87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_VALIDATE_NDEF 0x0B /* waiting for response of validating NDEF Msg */ 88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Sub states in RW_T1T_STATE_SET_TAG_RO state */ 90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_SET_CC_RWA_RO 0x0C /* waiting for response of setting CC-RWA to read only */ 91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_SET_ST_LOCK_BITS 0x0D /* waiting for response of setting all static lock bits */ 92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_SET_DYN_LOCK_BITS 0x0E /* waiting for response of setting all dynamic lock bits */ 93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Sub states in RW_T1T_STATE_FORMAT_TAG state */ 95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_SET_CC 0x0F /* waiting for response to format/set capability container */ 96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T1T_SUBSTATE_WAIT_SET_NULL_NDEF 0x10 /* waiting for response to format/set NULL NDEF */ 97e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 99e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct 100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 offset; /* Offset of the lock byte in the Tag */ 102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 num_bits; /* Number of lock bits in the lock byte */ 103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 bytes_locked_per_bit; /* No. of tag bytes gets locked by a bit in this byte */ 104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tRW_T1T_LOCK_INFO; 105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct 107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 offset; /* Reserved bytes offset taken from Memory control TLV */ 109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 num_bytes; /* Number of reserved bytes as per the TLV */ 110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}tRW_T1T_RES_INFO; 111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct 113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 tlv_index; /* Index of Lock control tlv that points to this address*/ 115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 byte_index; /* Index of Lock byte pointed by the TLV */ 116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 lock_byte; /* Value in the lock byte */ 117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tRW_T1T_LOCK_STATUS lock_status; /* Indicates if it is modifed to set tag as Read only */ 118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BOOLEAN b_lock_read; /* Is the lock byte is already read from tag */ 119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tRW_T1T_LOCK; 120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct 122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 addr; /* ADD/ADD8/ADDS field value */ 124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 op_code; /* Command sent */ 125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 rsp_len; /* expected length of the response */ 126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 pend_retx_rsp; /* Number of pending rsps to retransmission on prev cmd */ 127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tRW_T1T_PREV_CMD_RSP_INFO; 128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (defined (RW_NDEF_INCLUDED) && (RW_NDEF_INCLUDED == TRUE)) 130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_BUFFER_SIZE T1T_STATIC_SIZE /* Buffer 0-E block, for easier tlv operation */ 131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else 132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_BUFFER_SIZE T1T_UID_LEN /* Buffer UID */ 133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* RW Type 1 Tag control blocks */ 136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct 137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 hr[T1T_HR_LEN]; /* Header ROM byte 0 - 0x1y,Header ROM byte 1 - 0x00 */ 139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 mem[T1T_SEGMENT_SIZE]; /* Tag contents of block 0 or from block 0-E */ 140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tT1T_CMD_RSP_INFO *p_cmd_rsp_info; /* Pointer to Command rsp info of last sent command */ 141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 state; /* Current state of RW module */ 142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 tag_attribute; /* Present state of the Tag as interpreted by RW */ 143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BT_HDR *p_cur_cmd_buf; /* Buffer to hold cur sent command for retransmission */ 144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 addr; /* ADD/ADD8/ADDS value */ 145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tRW_T1T_PREV_CMD_RSP_INFO prev_cmd_rsp_info; /* Information about previous sent command if retx */ 146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project TIMER_LIST_ENT timer; /* timer to set timelimit for the response to command */ 147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BOOLEAN b_update; /* Tag header updated */ 148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BOOLEAN b_rseg; /* Segment 0 read from tag */ 149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BOOLEAN b_hard_lock; /* Hard lock the tag as part of config tag to Read only */ 150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (defined (RW_NDEF_INCLUDED) && (RW_NDEF_INCLUDED == TRUE)) 151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 segment; /* Current Tag segment */ 152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 substate; /* Current substate of RW module */ 153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 work_offset; /* Working byte offset */ 154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 ndef_first_block[T1T_BLOCK_SIZE]; /* Buffer for ndef first block */ 155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 ndef_final_block[T1T_BLOCK_SIZE]; /* Buffer for ndef last block */ 156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p_ndef_buffer; /* Buffer to store ndef message */ 157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 new_ndef_msg_len; /* Lenght of new updating NDEF Message */ 158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 block_read; /* Last read Block */ 159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 write_byte; /* Index of last written byte */ 160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 tlv_detect; /* TLV type under detection */ 161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 ndef_msg_offset; /* The offset on Tag where first NDEF message is present*/ 162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 ndef_msg_len; /* Lenght of NDEF Message */ 163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 max_ndef_msg_len; /* Maximum size of NDEF that can be written on the tag */ 164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 ndef_header_offset; /* The offset on Tag where first NDEF tlv is present */ 165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 ndef_block_written; /* Last block where NDEF bytes are written */ 166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 num_ndef_finalblock; /* Block number where NDEF's last byte will be present */ 167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 num_lock_tlvs; /* Number of lcok tlvs detected in the tag */ 168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tRW_T1T_LOCK_INFO lock_tlv[RW_T1T_MAX_LOCK_TLVS]; /* Information retrieved from lock control tlv */ 169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 num_lockbytes; /* Number of dynamic lock bytes present in the tag */ 170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tRW_T1T_LOCK lockbyte[RW_T1T_MAX_LOCK_BYTES]; /* Dynamic Lock byte information */ 171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 num_mem_tlvs; /* Number of memory tlvs detected in the tag */ 172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tRW_T1T_RES_INFO mem_tlv[RW_T1T_MAX_MEM_TLVS]; /* Information retrieved from mem tlv */ 173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 attr_seg; /* Tag segment for which attributes are prepared */ 174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 lock_attr_seg; /* Tag segment for which lock attributes are prepared */ 175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 attr[T1T_BLOCKS_PER_SEGMENT]; /* byte information - Reserved/lock/otp or data */ 176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 lock_attr[T1T_BLOCKS_PER_SEGMENT]; /* byte information - read only or read write */ 177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tRW_T1T_CB; 179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Mifare Ultalight/ Ultralight Family blank tag version block settings */ 181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_MIFARE_VERSION_BLOCK 0x04 /* Block where version number of the tag is stored */ 182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_MIFARE_ULTRALIGHT_VER_NO 0xFFFF /* Blank Ultralight tag - Block 4 (byte 0, byte 1) */ 183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_MIFARE_ULTRALIGHT_FAMILY_VER_NO 0x0200 /* Blank Ultralight family tag - Block 4 (byte 0, byte 1) */ 184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Infineon my-d move / my-d blank tag uid block settings */ 186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_INFINEON_VERSION_BLOCK 0x00 187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_INFINEON_MYD_MOVE_LEAN 0x0570 188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_INFINEON_MYD_MOVE 0x0530 189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_BRCM_VERSION_BLOCK 0x00 191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_BRCM_STATIC_MEM 0x2E01 192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_BRCM_DYNAMIC_MEM 0x2E02 193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_NDEF_NOT_DETECTED 0x00 195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_NDEF_DETECTED 0x01 196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_NDEF_READ 0x02 197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_MAX_NDEF_OFFSET 128 /* Max offset of an NDEF message in a T2 tag */ 199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_MAX_RESERVED_BYTES_IN_TAG 0x64 200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_MAX_LOCK_BYTES_IN_TAG 0x64 201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_MAX_MEM_TLVS 0x05 /* Maximum supported Memory control TLVS in the tag */ 203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_MAX_LOCK_TLVS 0x05 /* Maximum supported Lock control TLVS in the tag */ 204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_MAX_LOCK_BYTES 0x1E /* Maximum supported dynamic lock bytes */ 205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SEGMENT_BYTES 128 206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SEGMENT_SIZE 16 207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_LOCK_NOT_UPDATED 0x00 /* Lock not yet set as part of SET TAG RO op */ 209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_LOCK_UPDATE_INITIATED 0x01 /* Sent command to set the Lock bytes */ 210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_LOCK_UPDATED 0x02 /* Lock bytes are set */ 211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef UINT8 tRW_T2T_LOCK_STATUS; 212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* States */ 215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_STATE_NOT_ACTIVATED 0x00 /* Tag not activated */ 216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_STATE_IDLE 0x01 /* T1 Tag activated and ready to perform rw operation on Tag*/ 217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_STATE_READ 0x02 /* waiting response for read command sent to tag */ 218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_STATE_WRITE 0x03 /* waiting response for write command sent to tag */ 219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_STATE_SELECT_SECTOR 0x04 /* Waiting response for sector select command */ 220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_STATE_DETECT_TLV 0x05 /* Detecting Lock/Memory/NDEF/Proprietary TLV in the Tag */ 221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_STATE_READ_NDEF 0x06 /* Performing NDEF Read procedure */ 222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_STATE_WRITE_NDEF 0x07 /* Performing NDEF Write procedure */ 223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_STATE_SET_TAG_RO 0x08 /* Setting Tag as Read only tag */ 224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_STATE_CHECK_PRESENCE 0x09 /* Check if Tag is still present */ 225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_STATE_FORMAT_TAG 0x0A /* Format the tag */ 226a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu#define RW_T2T_STATE_HALT 0x0B /* Tag is in HALT State */ 227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* rw_t2t_read/rw_t2t_write takes care of sector change if the block to read/write is in a different sector 229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Next Substate should be assigned to control variable 'substate' before calling these function for State Machine to 230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * move back to the particular substate after Sector change is completed and read/write command is sent on new sector */ 231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Sub states */ 233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SUBSTATE_NONE 0x00 234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Sub states in RW_T2T_STATE_SELECT_SECTOR state */ 236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_SELECT_SECTOR_SUPPORT 0x01 /* waiting for response of sector select CMD 1 */ 237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_SELECT_SECTOR 0x02 /* waiting for response of sector select CMD 2 */ 238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Sub states in RW_T1T_STATE_DETECT_XXX state */ 240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_READ_CC 0x03 /* waiting for the detection of a tlv in a tag */ 241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_TLV_DETECT 0x04 /* waiting for the detection of a tlv in a tag */ 242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_FIND_LEN_FIELD_LEN 0x05 /* waiting for finding the len field is 1 or 3 bytes long */ 243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_READ_TLV_LEN0 0x06 /* waiting for extracting len field value */ 244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_READ_TLV_LEN1 0x07 /* waiting for extracting len field value */ 245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_READ_TLV_VALUE 0x08 /* waiting for extracting value field in the TLV */ 246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_READ_LOCKS 0x09 /* waiting for reading dynamic locks in the TLV */ 247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Sub states in RW_T2T_STATE_WRITE_NDEF state */ 249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_READ_NDEF_FIRST_BLOCK 0x0A /* waiting for rsp to reading the block where NDEF starts */ 250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_READ_NDEF_LAST_BLOCK 0x0B /* waiting for rsp to reading block where new NDEF Msg ends */ 251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_READ_TERM_TLV_BLOCK 0x0C /* waiting for rsp to reading block where Trm tlv gets added*/ 252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_READ_NDEF_NEXT_BLOCK 0x0D /* waiting for rsp to reading block where nxt NDEF write */ 253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_WRITE_NDEF_NEXT_BLOCK 0x0E /* waiting for rsp to writting NDEF block */ 254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_WRITE_NDEF_LAST_BLOCK 0x0F /* waiting for rsp to last NDEF block write cmd */ 255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_READ_NDEF_LEN_BLOCK 0x10 /* waiting for rsp to reading NDEF len field block */ 256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_WRITE_NDEF_LEN_BLOCK 0x11 /* waiting for rsp of updating first NDEF len field block */ 257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_WRITE_NDEF_LEN_NEXT_BLOCK 0x12 /* waiting for rsp of updating next NDEF len field block */ 258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_WRITE_TERM_TLV_CMPLT 0x13 /* waiting for rsp to writing to Terminator tlv */ 259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Sub states in RW_T2T_STATE_FORMAT_TAG state */ 261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_READ_VERSION_INFO 0x14 262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_SET_CC 0x15 /* waiting for response to format/set capability container */ 263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_SET_LOCK_TLV 0x16 264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_SET_NULL_NDEF 0x17 /* waiting for response to format/set NULL NDEF */ 265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Sub states in RW_T2T_STATE_SET_TAG_RO state */ 267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_SET_CC_RO 0x19 /* waiting for response to set CC3 to RO */ 268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_READ_DYN_LOCK_BYTE_BLOCK 0x1A /* waiting for response to read dynamic lock bytes block */ 269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_SET_DYN_LOCK_BITS 0x1B /* waiting for response to set dynamic lock bits */ 270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T2T_SUBSTATE_WAIT_SET_ST_LOCK_BITS 0x1C /* waiting for response to set static lock bits */ 271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct 273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 offset; /* Offset of the lock byte in the Tag */ 275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 num_bits; /* Number of lock bits in the lock byte */ 276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 bytes_locked_per_bit; /* No. of tag bytes gets locked by a bit in this byte */ 277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tRW_T2T_LOCK_INFO; 278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct 280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 offset; /* Reserved bytes offset taken from Memory control TLV */ 282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 num_bytes; /* Number of reserved bytes as per the TLV */ 283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}tRW_T2T_RES_INFO; 284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct 286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 tlv_index; /* Index of Lock control tlv that points to this address */ 288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 byte_index; /* Index of Lock byte pointed by the TLV */ 289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 lock_byte; /* Value in the lock byte */ 290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tRW_T2T_LOCK_STATUS lock_status; /* Indicates if it is modifed to set tag as Read only */ 291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BOOLEAN b_lock_read; /* Is the lock byte is already read from tag */ 292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tRW_T2T_LOCK; 293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* RW Type 2 Tag control block */ 295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct 296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 297e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 state; /* Reader/writer state */ 298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 substate; /* Reader/write substate in NDEF write state */ 299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 prev_substate; /* Substate of the tag before moving to different sector */ 300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 sector; /* Sector number that is selected */ 301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 select_sector; /* Sector number that is expected to get selected */ 302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 tag_hdr[T2T_READ_DATA_LEN]; /* T2T Header blocks */ 303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 tag_data[T2T_READ_DATA_LEN]; /* T2T Block 4 - 7 data */ 304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 ndef_status; /* The current status of NDEF Write operation */ 305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 block_read; /* Read block */ 306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 block_written; /* Written block */ 307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tT2T_CMD_RSP_INFO *p_cmd_rsp_info; /* Pointer to Command rsp info of last sent command */ 308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BT_HDR *p_cur_cmd_buf; /* Copy of current command, for retx/send after sector change */ 309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BT_HDR *p_sec_cmd_buf; /* Copy of command, to send after sector change */ 310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project TIMER_LIST_ENT t2_timer; /* timeout for each API call */ 311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BOOLEAN b_read_hdr; /* Tag header read from tag */ 312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BOOLEAN b_read_data; /* Tag data block read from tag */ 313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BOOLEAN b_hard_lock; /* Hard lock the tag as part of config tag to Read only */ 314a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu BOOLEAN check_tag_halt; /* Resent command after NACK rsp to find tag is in HALT State */ 315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (defined (RW_NDEF_INCLUDED) && (RW_NDEF_INCLUDED == TRUE)) 316c95c79ccb65d82a65b960919077d5c359cf28cedEvan Chu BOOLEAN skip_dyn_locks; /* Skip reading dynamic lock bytes from the tag */ 317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 found_tlv; /* The Tlv found while searching a particular TLV */ 318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 tlv_detect; /* TLV type under detection */ 319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 num_lock_tlvs; /* Number of lcok tlvs detected in the tag */ 320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 attr_seg; /* Tag segment for which attributes are prepared */ 321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 lock_attr_seg; /* Tag segment for which lock attributes are prepared */ 322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 segment; /* Current operating segment */ 323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 ndef_final_block[T2T_BLOCK_SIZE]; /* Buffer for ndef last block */ 324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 num_mem_tlvs; /* Number of memory tlvs detected in the tag */ 325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 num_lockbytes; /* Number of dynamic lock bytes present in the tag */ 326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 attr[RW_T2T_SEGMENT_SIZE]; /* byte information - Reserved/lock/otp or data */ 327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 lock_attr[RW_T2T_SEGMENT_SIZE]; /* byte information - read only or read write */ 328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 tlv_value[3]; /* Read value field of TLV */ 329e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 ndef_first_block[T2T_BLOCK_LEN]; /* NDEF TLV Header block */ 330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 ndef_read_block[T2T_BLOCK_LEN]; /* Buffer to hold read before write block */ 331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 ndef_last_block[T2T_BLOCK_LEN]; /* Terminator TLV block after NDEF Write operation */ 332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 terminator_tlv_block[T2T_BLOCK_LEN];/* Terminator TLV Block */ 333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 ndef_last_block_num; /* Block where last byte of updating ndef message will exist */ 334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 ndef_read_block_num; /* Block read during NDEF Write to avoid overwritting res bytes */ 335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 bytes_count; /* No. of bytes remaining to collect during tlv detect */ 336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 terminator_byte_index; /* The offset of the tag where terminator tlv may be added */ 337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 work_offset; /* Working byte offset */ 338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 ndef_header_offset; 339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 ndef_msg_offset; /* Offset on Tag where first NDEF message is present */ 340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 ndef_msg_len; /* Lenght of NDEF Message */ 341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 max_ndef_msg_len; /* Maximum size of NDEF that can be written on the tag */ 342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 new_ndef_msg_len; /* Lenght of new updating NDEF Message */ 343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 ndef_write_block; 344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 prop_msg_len; /* Proprietary tlv length */ 345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p_new_ndef_buffer; /* Pointer to updating NDEF Message */ 346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p_ndef_buffer; /* Pointer to NDEF Message */ 347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tRW_T2T_LOCK_INFO lock_tlv[RW_T2T_MAX_LOCK_TLVS]; /* Information retrieved from lock control tlv */ 348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tRW_T2T_LOCK lockbyte[RW_T2T_MAX_LOCK_BYTES]; /* Dynamic Lock byte information */ 349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tRW_T2T_RES_INFO mem_tlv[RW_T2T_MAX_MEM_TLVS]; /* Information retrieved from mem tlv */ 350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tRW_T2T_CB; 352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Type 3 Tag control block */ 354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef UINT8 tRW_T3T_RW_STATE; 355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct 357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tNFC_STATUS status; 359e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 version; /* Ver: peer version */ 360e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 nbr; /* NBr: number of blocks that can be read using one Check command */ 361e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 nbw; /* Nbw: number of blocks that can be written using one Update command */ 362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 nmaxb; /* Nmaxb: maximum number of blocks available for NDEF data */ 363e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 writef; /* WriteFlag: 00h if writing data finished; 0Fh if writing data in progress */ 364e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 rwflag; /* RWFlag: 00h NDEF is read-only; 01h if read/write available */ 365e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT32 ln; /* Ln: actual size of stored NDEF data (in bytes) */ 366e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tRW_T3T_DETECT; 367e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 368e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* RW_T3T control block flags */ 369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T3T_FL_IS_FINAL_NDEF_SEGMENT 0x01 /* The final command for completing the NDEF read/write */ 370e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T3T_FL_W4_PRESENCE_CHECK_POLL_RSP 0x02 /* Waiting for POLL response for presence check */ 371e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T3T_FL_W4_GET_SC_POLL_RSP 0x04 /* Waiting for POLL response for RW_T3tGetSystemCodes */ 372e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T3T_FL_W4_NDEF_DETECT_POLL_RSP 0x08 /* Waiting for POLL response for RW_T3tDetectNDef */ 373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T3T_FL_W4_FMT_FELICA_LITE_POLL_RSP 0x10 /* Waiting for POLL response for RW_T3tFormat */ 3745c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen#define RW_T3T_FL_W4_SRO_FELICA_LITE_POLL_RSP 0x20 /* Waiting for POLL response for RW_T3tSetReadOnly */ 375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 376e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct 377e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 378e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT32 cur_tout; /* Current command timeout */ 379818b56eda129e0370afe6bcb808b0ed55c898d13Sherry Smith /* check timeout is check_tout_a + n * check_tout_b; X is T/t3t * 4^E */ 380818b56eda129e0370afe6bcb808b0ed55c898d13Sherry Smith UINT32 check_tout_a; /* Check command timeout (A+1)*X */ 381818b56eda129e0370afe6bcb808b0ed55c898d13Sherry Smith UINT32 check_tout_b; /* Check command timeout (B+1)*X */ 382818b56eda129e0370afe6bcb808b0ed55c898d13Sherry Smith /* update timeout is update_tout_a + n * update_tout_b; X is T/t3t * 4^E */ 383818b56eda129e0370afe6bcb808b0ed55c898d13Sherry Smith UINT32 update_tout_a; /* Update command timeout (A+1)*X */ 384818b56eda129e0370afe6bcb808b0ed55c898d13Sherry Smith UINT32 update_tout_b; /* Update command timeout (B+1)*X */ 385e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tRW_T3T_RW_STATE rw_state; /* Reader/writer state */ 386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 rw_substate; 387e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 cur_cmd; /* Current command being executed */ 388e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BT_HDR *p_cur_cmd_buf; /* Copy of current command, for retransmission */ 389e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project TIMER_LIST_ENT timer; /* timeout for waiting for response */ 390e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project TIMER_LIST_ENT poll_timer; /* timeout for waiting for response */ 391e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 392e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tRW_T3T_DETECT ndef_attrib; /* T3T NDEF attribute information */ 393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 394e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT32 ndef_msg_len; /* Length of ndef message to send */ 395e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT32 ndef_msg_bytes_sent; /* Length of ndef message sent so far */ 396e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *ndef_msg; /* Buffer for outgoing NDEF message */ 397e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT32 ndef_rx_readlen; /* Number of bytes read in current CHECK command */ 398e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT32 ndef_rx_offset; /* Length of ndef message read so far */ 399e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 num_system_codes; /* System codes detected */ 401e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 system_codes[T3T_MAX_SYSTEM_CODES]; 402e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 peer_nfcid2[NCI_NFCID2_LEN]; 404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 cur_poll_rc; /* RC used in current POLL command */ 405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 flags; /* Flags see RW_T3T_FL_* */ 407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tRW_T3T_CB; 408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* 411e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Type 4 Tag 412e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/ 413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Max data size using a single ReadBinary. 2 bytes are for status bytes */ 415e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T4T_MAX_DATA_PER_READ (NFC_RW_POOL_BUF_SIZE - BT_HDR_SIZE - NCI_DATA_HDR_SIZE - T4T_RSP_STATUS_WORDS_SIZE) 416e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 417e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Max data size using a single UpdateBinary. 6 bytes are for CLA, INS, P1, P2, Lc */ 418e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T4T_MAX_DATA_PER_WRITE (NFC_RW_POOL_BUF_SIZE - BT_HDR_SIZE - NCI_MSG_OFFSET_SIZE - NCI_DATA_HDR_SIZE - T4T_CMD_MAX_HDR_SIZE) 419e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 420e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 421e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 422e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Mandatory NDEF file control */ 423e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct 424e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 425e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 file_id; /* File Identifier */ 426e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 max_file_size; /* Max NDEF file size */ 427e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 read_access; /* read access condition */ 428e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 write_access; /* write access condition */ 429e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tRW_T4T_NDEF_FC; 430e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 431e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Capability Container */ 432e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct 433e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 434e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 cclen; /* the size of this capability container */ 435e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 version; /* the mapping specification version */ 436e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 max_le; /* the max data size by a single ReadBinary */ 437e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 max_lc; /* the max data size by a single UpdateBinary */ 438e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tRW_T4T_NDEF_FC ndef_fc; /* Mandatory NDEF file control */ 439e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tRW_T4T_CC; 440e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 441e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef UINT8 tRW_T4T_RW_STATE; 442e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef UINT8 tRW_T4T_RW_SUBSTATE; 443e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 444e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Type 4 Tag Control Block */ 445e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct 446e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 447e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tRW_T4T_RW_STATE state; /* main state */ 448e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tRW_T4T_RW_SUBSTATE sub_state; /* sub state */ 449e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 version; /* currently effective version */ 450e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project TIMER_LIST_ENT timer; /* timeout for each API call */ 451e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 452e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 ndef_length; /* length of NDEF data */ 453e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p_update_data; /* pointer of data to update */ 454e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 rw_length; /* remaining bytes to read/write */ 455e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 rw_offset; /* remaining offset to read/write */ 456e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BT_HDR *p_data_to_free; /* GKI buffet to delete after done */ 457e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 458e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tRW_T4T_CC cc_file; /* Capability Container File */ 459e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 460e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T4T_NDEF_STATUS_NDEF_DETECTED 0x01 /* NDEF has been detected */ 461e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_T4T_NDEF_STATUS_NDEF_READ_ONLY 0x02 /* NDEF file is read-only */ 462e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 463e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 ndef_status; /* bitmap for NDEF status */ 464a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu UINT8 channel; /* channel id: used for read-binary */ 465e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 466e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 max_read_size; /* max reading size per a command */ 467e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 max_update_size; /* max updating size per a command */ 468e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tRW_T4T_CB; 469e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 470e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* RW retransmission statistics */ 471e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (defined (RW_STATS_INCLUDED) && (RW_STATS_INCLUDED == TRUE)) 472e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct 473e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 474e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT32 start_tick; /* System tick count at activation */ 475e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT32 bytes_sent; /* Total bytes sent since activation */ 476e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT32 bytes_received; /* Total bytes received since activation */ 477e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT32 num_ops; /* Number of operations since activation */ 478e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT32 num_retries; /* Number of retranmissions since activation */ 479e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT32 num_crc; /* Number of crc failures */ 480e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT32 num_trans_err; /* Number of transmission error notifications */ 481e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT32 num_fail; /* Number of aborts (failures after retries) */ 482e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tRW_STATS; 483e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* RW_STATS_INCLUDED */ 484e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 485e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* ISO 15693 RW Control Block */ 486e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef UINT8 tRW_I93_RW_STATE; 487e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef UINT8 tRW_I93_RW_SUBSTATE; 488e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 489e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_I93_FLAG_READ_ONLY 0x01 /* tag is read-only */ 490e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_I93_FLAG_READ_MULTI_BLOCK 0x02 /* tag supports read multi block */ 491e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_I93_FLAG_RESET_DSFID 0x04 /* need to reset DSFID for formatting */ 492e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_I93_FLAG_RESET_AFI 0x08 /* need to reset AFI for formatting */ 49385b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu#define RW_I93_FLAG_16BIT_NUM_BLOCK 0x10 /* use 2 bytes for number of blocks */ 494e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 495e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_I93_TLV_DETECT_STATE_TYPE 0x01 /* searching for type */ 496e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_I93_TLV_DETECT_STATE_LENGTH_1 0x02 /* searching for the first byte of length */ 497e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_I93_TLV_DETECT_STATE_LENGTH_2 0x03 /* searching for the second byte of length */ 498e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_I93_TLV_DETECT_STATE_LENGTH_3 0x04 /* searching for the third byte of length */ 499e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define RW_I93_TLV_DETECT_STATE_VALUE 0x05 /* reading value field */ 500e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 501e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectenum 502e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 503e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project RW_I93_ICODE_SLI, /* ICODE SLI, SLIX */ 504e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project RW_I93_ICODE_SLI_S, /* ICODE SLI-S, SLIX-S */ 505e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project RW_I93_ICODE_SLI_L, /* ICODE SLI-L, SLIX-L */ 506e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project RW_I93_TAG_IT_HF_I_PLUS_INLAY, /* Tag-it HF-I Plus Inlay */ 507e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project RW_I93_TAG_IT_HF_I_PLUS_CHIP, /* Tag-it HF-I Plus Chip */ 508e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project RW_I93_TAG_IT_HF_I_STD_CHIP_INLAY, /* Tag-it HF-I Standard Chip/Inlyas */ 509e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project RW_I93_TAG_IT_HF_I_PRO_CHIP_INLAY, /* Tag-it HF-I Pro Chip/Inlyas */ 51085b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu RW_I93_STM_LRI1K, /* STM LRI1K */ 51185b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu RW_I93_STM_LRI2K, /* STM LRI2K */ 51285b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu RW_I93_STM_LRIS2K, /* STM LRIS2K */ 51385b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu RW_I93_STM_LRIS64K, /* STM LRIS64K */ 51485b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu RW_I93_STM_M24LR64_R, /* STM M24LR64-R */ 51585b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu RW_I93_STM_M24LR04E_R, /* STM M24LR04E-R */ 51685b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu RW_I93_STM_M24LR16E_R, /* STM M24LR16E-R */ 51785b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu RW_I93_STM_M24LR64E_R, /* STM M24LR64E-R */ 518e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project RW_I93_UNKNOWN_PRODUCT /* Unknwon product version */ 519e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}; 520e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 521e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct 522e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 523e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tRW_I93_RW_STATE state; /* main state */ 524e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tRW_I93_RW_SUBSTATE sub_state; /* sub state */ 525e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project TIMER_LIST_ENT timer; /* timeout for each sent command */ 526e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 sent_cmd; /* last sent command */ 52785b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu UINT8 retry_count; /* number of retry */ 52885b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu BT_HDR *p_retry_cmd; /* buffer to store cmd sent last */ 529e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 530e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 info_flags; /* information flags */ 531e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 uid[I93_UID_BYTE_LEN]; /* UID of currently activated */ 532e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 dsfid; /* DSFID if I93_INFO_FLAG_DSFID */ 533e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 afi; /* AFI if I93_INFO_FLAG_AFI */ 534e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 block_size; /* block size of tag, in bytes */ 535e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 num_block; /* number of blocks in tag */ 536e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 ic_reference; /* IC Reference of tag */ 537e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 product_version; /* tag product version */ 538e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 539e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 intl_flags; /* flags for internal information */ 540e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 541e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 tlv_detect_state; /* TLV detecting state */ 542e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 tlv_type; /* currently detected type */ 543e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 tlv_length; /* currently detected length */ 544e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 545e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 ndef_tlv_start_offset; /* offset of first byte of NDEF TLV */ 546e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 ndef_tlv_last_offset; /* offset of last byte of NDEF TLV */ 547e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 max_ndef_length; /* max NDEF length the tag contains */ 548e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 ndef_length; /* length of NDEF data */ 549e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 550e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *p_update_data; /* pointer of data to update */ 551e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 rw_length; /* bytes to read/write */ 552e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 rw_offset; /* offset to read/write */ 553e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tRW_I93_CB; 554e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 555e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* RW memory control blocks */ 556e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef union 557e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 558e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tRW_T1T_CB t1t; 559e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tRW_T2T_CB t2t; 560e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tRW_T3T_CB t3t; 561e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tRW_T4T_CB t4t; 562e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tRW_I93_CB i93; 563e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tRW_TCB; 564e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 565e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* RW control blocks */ 566e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct 567e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 568e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tRW_TCB tcb; 569e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tRW_CBACK *p_cback; 570e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT32 cur_retry; /* Retry count for the current operation */ 571e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (defined (RW_STATS_INCLUDED) && (RW_STATS_INCLUDED == TRUE)) 572e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project tRW_STATS stats; 573e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* RW_STATS_INCLUDED */ 574e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 trace_level; 575e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tRW_CB; 576e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 577e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 578e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/***************************************************************************** 579e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** EXTERNAL FUNCTION DECLARATIONS 580e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/ 581e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 582e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifdef __cplusplus 583e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern "C" { 584e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 585e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 586e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Global NFC data */ 587e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if NFC_DYNAMIC_MEMORY == FALSE 588e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectNFC_API extern tRW_CB rw_cb; 589e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else 590e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectNFC_API extern tRW_CB *rw_cb_ptr; 591e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define rw_cb (*rw_cb_ptr) 592e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 593e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 594e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* from .c */ 595e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 596e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (defined (RW_NDEF_INCLUDED) && (RW_NDEF_INCLUDED == TRUE)) 597e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern tRW_EVENT rw_t1t_handle_rsp (const tT1T_CMD_RSP_INFO * p_info, BOOLEAN *p_notify, UINT8 *p_data, tNFC_STATUS *p_status); 598e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern tRW_EVENT rw_t1t_info_to_event (const tT1T_CMD_RSP_INFO * p_info); 599e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else 600e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define rw_t1t_handle_rsp(p, a, b, c) t1t_info_to_evt (p) 601e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define rw_t1t_info_to_event(p) t1t_info_to_evt (p) 602e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 603e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 604e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern void rw_init (void); 605e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern tNFC_STATUS rw_t1t_select (UINT8 hr[T1T_HR_LEN], UINT8 uid[T1T_CMD_UID_LEN]); 606e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern tNFC_STATUS rw_t1t_send_dyn_cmd (UINT8 opcode, UINT8 add, UINT8 *p_dat); 607e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern tNFC_STATUS rw_t1t_send_static_cmd (UINT8 opcode, UINT8 add, UINT8 dat); 608e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern void rw_t1t_process_timeout (TIMER_LIST_ENT *p_tle); 609e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern void rw_t1t_handle_op_complete (void); 610e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 611e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (defined (RW_NDEF_INCLUDED) && (RW_NDEF_INCLUDED == TRUE)) 612e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern tRW_EVENT rw_t2t_info_to_event (const tT2T_CMD_RSP_INFO *p_info); 613e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern void rw_t2t_handle_rsp (UINT8 *p_data); 614e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else 615e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define rw_t2t_info_to_event(p) t2t_info_to_evt (p) 616e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define rw_t2t_handle_rsp(p) 617e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 618e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 619e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern tNFC_STATUS rw_t2t_sector_change (UINT8 sector); 620e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern tNFC_STATUS rw_t2t_read (UINT16 block); 621e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern tNFC_STATUS rw_t2t_write (UINT16 block, UINT8 *p_write_data); 622e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern void rw_t2t_process_timeout (TIMER_LIST_ENT *p_tle); 623e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern tNFC_STATUS rw_t2t_select (void); 624e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid rw_t2t_handle_op_complete (void); 625e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 626e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern void rw_t3t_process_timeout (TIMER_LIST_ENT *p_tle); 627e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern tNFC_STATUS rw_t3t_select (UINT8 peer_nfcid2[NCI_RF_F_UID_LEN], UINT8 mrti_check, UINT8 mrti_update); 628e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid rw_t3t_handle_nci_poll_ntf (UINT8 nci_status, UINT8 num_responses, UINT8 sensf_res_buf_size, UINT8 *p_sensf_res_buf); 629e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 630e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern tNFC_STATUS rw_t4t_select (void); 631e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern void rw_t4t_process_timeout (TIMER_LIST_ENT *p_tle); 632e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 63385b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chuextern tNFC_STATUS rw_i93_select (UINT8 *p_uid); 634e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern void rw_i93_process_timeout (TIMER_LIST_ENT *p_tle); 635e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 636e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (defined (RW_STATS_INCLUDED) && (RW_STATS_INCLUDED == TRUE)) 637e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Internal fcns for statistics (from rw_main.c) */ 638e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid rw_main_reset_stats (void); 639e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid rw_main_update_tx_stats (UINT32 bytes_tx, BOOLEAN is_retry); 640e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid rw_main_update_rx_stats (UINT32 bytes_rx); 641e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid rw_main_update_crc_error_stats (void); 642e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid rw_main_update_trans_error_stats (void); 643e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid rw_main_update_fail_stats (void); 644e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid rw_main_log_stats (void); 645e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* RW_STATS_INCLUDED */ 646e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 647e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifdef __cplusplus 648e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 649e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 650e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 651e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* RW_INT_H_ */ 652