1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 385b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu * Copyright (C) 2009-2013 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) Tags related 23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * definitions from the specification. 24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef TAGS_DEFS_H 28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define TAGS_DEFS_H 29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Manufacturer ID */ 31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define TAG_BRCM_MID 0x2E /* BROADCOM CORPORATION */ 32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define TAG_MIFARE_MID 0x04 /* MIFARE */ 33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define TAG_KOVIO_MID 0x37 /* KOVIO */ 34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define TAG_INFINEON_MID 0x05 /* Infineon Technologies */ 35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* TLV types present in Type1 and Type 2 Tags */ 37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define TAG_NULL_TLV 0 /* May be used for padding. SHALL ignore this */ 38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define TAG_LOCK_CTRL_TLV 1 /* Defines details of the lock bytes */ 39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define TAG_MEM_CTRL_TLV 2 /* Identifies reserved memory areas */ 40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define TAG_NDEF_TLV 3 /* Contains the NDEF message */ 41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define TAG_PROPRIETARY_TLV 0xFD /* Tag proprietary information */ 42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define TAG_TERMINATOR_TLV 0xFE /* Last TLV block in the data area */ 43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define TAG_BITS_PER_BYTE 0x08 /* Number of bits in every tag byte */ 44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define TAG_MAX_UID_LEN 0x0A /* Max UID Len of type 1 and type 2 tag */ 45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define TAG_LONG_NDEF_LEN_FIELD_BYTE0 0xFF /* Byte 0 Length field to indicate LNDEF */ 47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define TAG_DEFAULT_TLV_LEN 3 /* Tlv len for LOCK_CTRL/MEM TLV per spec */ 48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Type 1 Tag related definitions */ 50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_STATIC_BLOCKS 0x0F /* block 0 to Block E */ 52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_BLOCK_SIZE 0x08 /* T1T Block size in bytes */ 53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_STATIC_SIZE T1T_STATIC_BLOCKS * T1T_BLOCK_SIZE /* Static Tag size */ 55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_SEGMENT_SIZE 0x80 /* Size of Type 1 Tag segment in bytes */ 57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_MAX_SEGMENTS 0x10 /* Maximum segment supported by Type 1 Tag */ 58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_BLOCKS_PER_SEGMENT 0x10 /* Number of blocks present in a segment */ 59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_OTP_LOCK_RES_BYTES 0x10 /* No.of default OTP,staticlocks,res bytes in tag */ 60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_STATIC_HR0 0x11 /* HRO value to indicate static Tag */ 62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_DYNAMIC_HR0 0x12 /* 0x1y, as long as (y!=1) */ 63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_NDEF_SUPPORTED 0x10 /* HR0 value is 0x1y, indicates NDEF supported */ 64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_HR1 0x00 /* should be ignored */ 65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_UID_BLOCK 0x00 /* UID block */ 66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_RES_BLOCK 0x0D /* Reserved block */ 67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_LOCK_BLOCK 0x0E /* Static lock block */ 68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_MID_OFFSET 0x06 /* Manufacturer ID offset */ 69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_STATIC_RES_OFFSET 0x68 /* Reserved bytes offset */ 70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_LOCK_0_OFFSET 0x70 /* Static lock offset */ 71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_LOCK_1_OFFSET 0x71 /* Static lock offset */ 72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_DYNAMIC_LOCK_OFFSET 0x78 /* Block F - typically used for dynamic locks */ 73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_DYNAMIC_LOCK_BYTES 0x08 74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_RES_BYTE_LEN 1 /* the len of reserved byte in T1T block 0 */ 76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Capability Container definitions */ 78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_CC_BLOCK 1 /* Capability container block */ 79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_CC_LEN 4 /* the len of CC used in T1T tag */ 80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* CC offset */ 81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_CC_NMN_OFFSET 0x00 /* Offset for NDEF magic number in CC */ 82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_CC_VNO_OFFSET 0x01 /* Offset for Version number in CC */ 83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_CC_TMS_OFFSET 0x02 /* Offset for Tag memory size in CC */ 84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_CC_RWA_OFFSET 0x03 /* Offset for Read/Write access in CC */ 85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_CC_NMN_BYTE 0x08 /* NDEF Magic Number byte number */ 86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_CC_VNO_BYTE 0x09 /* Version Number byte number */ 87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_CC_TMS_BYTE 0x0A /* Tag Memory Size byte number */ 88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_CC_RWA_BYTE 0x0B /* Read Write Access byte number */ 89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_CC_NMN 0xE1 /* NDEF Magic Number */ 90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_CC_LEGACY_VNO 0x10 /* Supported Legacy Version */ 91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_CC_VNO 0x11 /* Version Number */ 92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_CC_TMS_STATIC 0x0E /* TMS static memory - (8 * (n+1)). */ 93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_CC_RWA_RW 0x00 /* RWA - Read/write allowed */ 94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_CC_RWA_RO 0x0F /* RWA - Read only */ 95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_TAG_NULL 0 /* May be used for padding. SHALL ignore this */ 97e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_TAG_LOCK_CTRL 1 /* Defines details of the lock bytes */ 98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_TAG_MEM_CTRL 2 /* Identifies reserved memory areas */ 99e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_TAG_NDEF 3 /* Contains the NDEF message */ 100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_TAG_PROPRIETARY 0xFD /* Tag proprietary information */ 101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_TAG_TERMINATOR 0xFE /* Last TLV block in the data area */ 102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_DEFAULT_TLV_LEN 3 /* Tlv len for LOCK_CTRL/MEM TLV per spec */ 104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_TLV_TYPE_LEN 1 /* Tlv type identifier len */ 105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_DEFAULT_TLV_LEN_FIELD_LEN 1 /* Length field size of lock/mem tlv */ 106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_HR_LEN 2 /* the len of HR used in Type 1 Tag */ 108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_CMD_UID_LEN 4 /* the len of UID used in Type 1 Tag Commands */ 109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_UID_LEN 7 /* the len of UID used in Type 1 Tag */ 110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_ADD_LEN 1 111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_SHORT_NDEF_LEN_FIELD_LEN 1 /* Length Field size of short NDEF Message */ 113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_LONG_NDEF_LEN_FIELD_LEN 3 /* Length Field size of Long NDEF Message */ 114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_LONG_NDEF_LEN_FIELD_BYTE0 0xFF /* Byte 0 in Length field to indicate LNDEF*/ 115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_LONG_NDEF_MIN_LEN 0x00FF /* Min. len of NDEF to qualify as LNDEF */ 116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Type 1 Tag Commands (7 bits) */ 118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_CMD_RID 0x78 /* read id */ 119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_CMD_RALL 0x00 /* read all bytes */ 120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_CMD_READ 0x01 /* read (1 byte) */ 121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_CMD_WRITE_E 0x53 /* write with erase (1 byte) */ 122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_CMD_WRITE_NE 0x1A /* write no erase (1 byte) */ 123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* dynamic memory only */ 124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_CMD_RSEG 0x10 /* read segment */ 125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_CMD_READ8 0x02 /* read (8 byte) */ 126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_CMD_WRITE_E8 0x54 /* write with erase (8 byte) */ 127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_CMD_WRITE_NE8 0x1B /* write no erase (8 byte) */ 128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Lock */ 130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_NUM_STATIC_LOCK_BYTES 2 /* Number of static lock bytes in tag */ 131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T1T_BYTES_LOCKED_BY_STATIC_LOCK_BIT 4 /* Bytes locked by one static lock bit */ 132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Type 2 Tag related definitions */ 135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_STATIC_MEM_STR 0 136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_DYNAMIC_MEM_STR 1 137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_STATIC_SIZE 64 138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_STATIC_BLOCKS 16 /* block 0 to Block 15 */ 139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_BLOCK_SIZE 4 140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_HEADER_BLOCKS 4 141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_HEADER_SIZE 16 142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_SECTOR_SIZE 1024 143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_BLOCKS_PER_SECTOR 0x100 144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_UID_LEN 4 /* the len of UID used in T2T tag */ 146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_BLOCK0_UID_LEN 3 /* the len of UID in Block 0 of T2T tag */ 147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_BCC0_LEN 1 /* the len of BCC0 of T2T tag */ 148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_BLOCK1_UID_LEN 4 /* the len of UID in Block 1 of T2T tag */ 149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_BCC1_LEN 1 /* the len of BCC0 of T2T tag */ 150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_SNO_LEN 4 /* the len of Serial number used in T2T tag */ 151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_INTERNAL_BYTES_LEN 2 /* the len of internal used in T2T tag */ 152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_STATIC_LOCK_LEN 2 /* the len of static lock used in T2T tag */ 153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Static Lock Bytes */ 154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_STATIC_LOCK0 0x0A /* Static Lock 0 offset */ 155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_STATIC_LOCK1 0x0B /* Static Lock 1 offset */ 156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_CC_LEN 4 /* the len of CC used in T2T tag */ 158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Capability Container definitions */ 160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_CC_BLOCK 0x03 /* Capability container block */ 161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_CC0_NMN_BYTE 0x0C /* NDEF Magic Number byte number */ 162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_CC1_VNO_BYTE 0x0D /* Version Number byte number*/ 163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_CC2_TMS_BYTE 0x0E /* Tag Memory Size byte number */ 164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_CC3_RWA_BYTE 0x0F /* Read Write Access byte number */ 165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_DATA_MEM 0x10 /* Data Memory */ 166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_CC0_NMN 0xE1 /* NDEF Magic Number */ 168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_CC1_VNO 0x11 /* Version Number */ 169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_CC1_LEGACY_VNO 0x10 /* Legacy Version Number */ 170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_CC1_NEW_VNO 0x12 /* Another supported Version Number */ 171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_CC2_TMS_STATIC 0x06 /* TMS static memory - (4 * (n+1)). */ 172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_CC3_RWA_RW 0x00 /* RWA - Read/write allowed */ 173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_CC3_RWA_RO 0x0F /* RWA - Read only */ 174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_TMS_TAG_FACTOR 0x08 /* Factor to multiply to get tag data size from TMS */ 176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_DEFAULT_LOCK_BLPB 0x08 /* Bytes locked per lock bit of default locks */ 177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Type 2 Tag Commands */ 179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_CMD_READ 0x30 /* read 4 blocks (16 bytes) */ 180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_CMD_WRITE 0xA2 /* write 1 block (4 bytes) */ 181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_CMD_SEC_SEL 0xC2 /* Sector select */ 182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_RSP_ACK 0xA 183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_RSP_NACK5 0x5 184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_RSP_NACK1 0x1 /* Nack can be either 1 */ 185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_FIRST_DATA_BLOCK 4 187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_READ_BLOCKS 4 188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_BLOCK_LEN 4 189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_READ_DATA_LEN (T2T_BLOCK_LEN * T2T_READ_BLOCKS) 190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_WRITE_DATA_LEN 4 191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Type 2 TLV definitions */ 194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_TLV_TYPE_NULL 0 /* May be used for padding. SHALL ignore this */ 195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_TLV_TYPE_LOCK_CTRL 1 /* Defines details of the lock bytes */ 196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_TLV_TYPE_MEM_CTRL 2 /* Identifies reserved memory areas */ 197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_TLV_TYPE_NDEF 3 /* Contains the NDEF message */ 198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_TLV_TYPE_PROPRIETARY 0xFD /* Tag proprietary information */ 199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_TLV_TYPE_TERMINATOR 0xFE /* Last TLV block in the data area */ 200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_TLEN_LOCK_CTRL_TLV 3 /* Tag len for LOCK_CTRL TLV per spec */ 203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_TLEN_MEM_CTRL_TLV 3 /* Tag len for MEM_CTRL TLV per spec */ 204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_MAX_SECTOR 2 /* Maximum number of sectors supported */ 206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_TLV_TYPE_LEN 1 /* Tlv type identifier len */ 208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_DEFAULT_TLV_LEN 3 /* Tlv len for LOCK_CTRL/MEM TLV per spec */ 210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_SHORT_NDEF_LEN_FIELD_LEN 1 /* Length Field size of short NDEF Message */ 211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_LONG_NDEF_LEN_FIELD_LEN 3 /* Length Field size of Long NDEF Message */ 212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_LONG_NDEF_LEN_FIELD_BYTE0 0xFF /* Byte 0 in Length field to indicate LNDEF*/ 213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_LONG_NDEF_MIN_LEN 0x00FF /* Min. len of NDEF to qualify as LNDEF */ 214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Lock */ 216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_NUM_STATIC_LOCK_BYTES 2 /* Number of static lock bytes in tag */ 217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_BYTES_LOCKED_BY_STATIC_LOCK_BIT 4 /* Bytes locked by one static lock bit */ 218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 219c11a054fc2855196292b062a843321121b591cc0Evan Chu#define T2T_CC2_TMS_MUL 0x06 220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T2T_CC2_TMS_MULC 0x12 221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* 222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Type 3 Tag Definitions 224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/ 226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_SYSTEM_CODE_NDEF 0x12FC /* System Code for NDEF tags */ 228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_SYSTEM_CODE_FELICA_LITE 0x88B4 /* System Code for felica-lite tags */ 229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MAX_SYSTEM_CODES 16 2305c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen#define T3T_FELICALITE_NMAXB 13 /* Maximum number of blocks for NDEF message for Felica Lite tags */ 231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Block descriptor, used to describe a block to check/update */ 233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef struct 234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 service_code; /* Block service code. Set to T3T_SERVICE_CODE_NDEF (0x000B) for NDEF data */ 236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16 block_number; /* Block number */ 237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tT3T_BLOCK_DESC; 238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Poll RC (request code) definitions */ 240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_POLL_RC_NONE 0 /* No RD requested in SENSF_RES */ 241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_POLL_RC_SC 1 /* System code requested in SENSF_RES */ 242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_POLL_RC_COMM 2 /* Avanced protocol features requested in SENSF_RES */ 243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projecttypedef UINT8 tT3T_POLL_RC; 244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Definitions for constructing t3t command messages */ 246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NFC Forum / Felica commands */ 248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_OPC_CHECK_CMD 0x06 249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_OPC_CHECK_RSP 0x07 250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_OPC_UPDATE_CMD 0x08 251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_OPC_UPDATE_RSP 0x09 252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Felica commands (not specified in NFC-Forum Type 3 tag specifications) */ 254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_OPC_POLL_CMD 0x00 255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_OPC_POLL_RSP 0x01 256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_OPC_REQ_SERVICE_CMD 0x02 257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_OPC_REQ_SERVICE_RSP 0x03 258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_OPC_REQ_RESPONSE_CMD 0x04 259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_OPC_REQ_RESPONSE_RSP 0x05 260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_OPC_REQ_SYSTEMCODE_CMD 0x0C 261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_OPC_REQ_SYSTEMCODE_RSP 0x0D 262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_NDEF_SC_RO 0x000B /* Service code: read-only NDEF */ 264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_NDEF_SC_RW 0x0009 /* Service code: read/write NDEF */ 265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_NDEF_VERSION 0x10 /* NDEF Mapping Version 1.0 */ 266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_NDEF_WRITEF_OFF 0x00 267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_NDEF_WRITEF_ON 0x0F 268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_NDEF_RWFLAG_RO 0x00 269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_NDEF_RWFLAG_RW 0x01 270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_NDEF_ATTR_INFO_SIZE 14 /* Size of NDEF attribute info block (minus checksum) */ 271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_OFFSET_IDM 1 /* offset of Manufacturer ID in UPDATE/CHECK messages */ 273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_OFFSET_NUM_SERVICES 9 /* offset of Number of Services parameter in UPDATE/CHECK messages */ 274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_OFFSET_SERVICE_CODE_LIST 10 /* offset of Service Code List parameter in UPDATE/CHECK messages */ 275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_MASK_TWO_BYTE_BLOCK_DESC_FORMAT 0x80 /* len flag for Block List Element */ 276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_SERVICE_LIST_MASK 0x0F /* service code list mask */ 277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_SERVICE_LIST_MAX 16 278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_NUM_SERVICES_UPDATE_MAX 12 /* Max Number of Services per UPDATE command */ 280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_NUM_SERVICES_CHECK_MAX 15 /* Max Number of Services per CHECK command */ 281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_NUM_BLOCKS_UPDATE_MAX 13 /* Max Number of Blocks per UPDATE command */ 282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_NUM_BLOCKS_CHECK_MAX 15 /* Max Number of Blocks per CHECK command */ 283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_BLOCKSIZE 16 /* Data block size for UPDATE and CHECK commands */ 285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Common header definitions for T3t commands */ 287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_CMD_COMMON_HDR_LEN 11 /* Common header: SoD + cmdcode + NFCID2 + num_services */ 288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Common header definition for T3t responses */ 290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_RSP_COMMON_HDR_LEN 11 /* Common header: rspcode + NFCID2 + StatusFlag1 + StatusFlag2 */ 291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_RSP_CHECK_HDR_LEN (T3T_MSG_RSP_COMMON_HDR_LEN + 1) /* Common header + NumBlocks */ 292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_RSP_OFFSET_RSPCODE 0 /* Offset for Response code */ 293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_RSP_OFFSET_IDM 1 /* Offset for Manufacturer ID */ 294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_RSP_OFFSET_STATUS1 9 /* Offset for Status Flag1 */ 295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_RSP_OFFSET_NUMBLOCKS 11 /* Offset for NumberOfBlocks (in CHECK response) */ 296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_RSP_OFFSET_CHECK_DATA 12 /* Offset for Block Data (in CHECK response) */ 297e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_RSP_OFFSET_POLL_PMM 9 /* Offset for PMm (in POLL response) */ 298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_RSP_OFFSET_POLL_RD 17 /* Offset for RD (in POLL response) */ 299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_RSP_OFFSET_NUMSYS 9 /* Offset for Number of Systems */ 300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_RSP_STATUS_OK 0x00 302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_RSP_STATUS_ERROR 0x01 303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_RSP_STATUS2_ERROR_MEMORY 0x70 305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_RSP_STATUS2_ERROR_EXCESSIVE_WRITES 0x71 306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_RSP_STATUS2_ERROR_PROCESSING 0xFF 307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_NFC_F_MAX_PAYLOAD_LEN 0xFE /* Maximum payload lenght for NFC-F messages (including SoD) */ 309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Felica Lite defintions */ 311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T3T_MSG_FELICALITE_BLOCK_ID_MC 0x88 /* Block ID for MC (memory configuration) */ 3125c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 3135c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen#define T3T_MSG_FELICALITE_MC_OFFSET_MC_SP 0x00 /* Memory Configuration Block offset: MC_SP (Memory Configuration for scratch pad) */ 3145c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen#define T3T_MSG_FELICALITE_MC_OFFSET_MC_ALL 0x02 /* Memory Configuration Block offset: MC_ALL (Memory Configuration for system block) */ 3155c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen#define T3T_MSG_FELICALITE_MC_OFFSET_SYS_OP 0x03 /* Memory Configuration Block offset: SYS_OP (System Option) */ 3165c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen#define T3T_MSG_FELICALITE_MC_OFFSET_RF_PRM 0x04 /* Memory Configuration Block offset: RF_PRM (Memory Configuration for RF Parameter) */ 317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* 321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Type 4 Tag Definitions 323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/ 325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_CMD_MIN_HDR_SIZE 4 /* CLA, INS, P1, P2 */ 326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_CMD_MAX_HDR_SIZE 5 /* CLA, INS, P1, P2, Lc */ 327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_VERSION_2_0 0x20 /* version 2.0 */ 329e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_VERSION_1_0 0x10 /* version 1.0 */ 330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_MY_VERSION T4T_VERSION_2_0 331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_GET_MAJOR_VERSION(x) ((x) >> 4) 332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_GET_MINOR_VERSION(x) ((x) & 0x0F ) 333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_CMD_CLASS 0x00 335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_CMD_INS_SELECT 0xA4 336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_CMD_INS_READ_BINARY 0xB0 337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_CMD_INS_UPDATE_BINARY 0xD6 338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_CMD_P1_SELECT_BY_NAME 0x04 339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_CMD_P1_SELECT_BY_FILE_ID 0x00 340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_CMD_P2_FIRST_OR_ONLY_00H 0x00 341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_CMD_P2_FIRST_OR_ONLY_0CH 0x0C 342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_MAX_LENGTH_LE 0xFF /* Max number of bytes to be read from file in ReadBinary Command */ 344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_MAX_LENGTH_LC 0xFF /* Max number of bytes written to NDEF file in UpdateBinary Command */ 345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_RSP_STATUS_WORDS_SIZE 0x02 347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_RSP_CMD_CMPLTED 0x9000 349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_RSP_NOT_FOUND 0x6A82 350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_RSP_WRONG_PARAMS 0x6B00 351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_RSP_CLASS_NOT_SUPPORTED 0x6E00 352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_RSP_WRONG_LENGTH 0x6700 353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_RSP_INSTR_NOT_SUPPORTED 0x6D00 354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_RSP_CMD_NOT_ALLOWED 0x6986 355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_V10_NDEF_TAG_AID_LEN 0x07 /* V1.0 Type 4 Tag Applicaiton ID length */ 357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_V20_NDEF_TAG_AID_LEN 0x07 /* V2.0 Type 4 Tag Applicaiton ID length */ 358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 359e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_MIN_MLE 0x000F /* Min of Max R-APDU data size */ 360e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 361e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_FILE_ID_SIZE 0x02 362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_CC_FILE_ID 0xE103 363e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_CC_FILE_MIN_LEN 0x000F 364e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3655c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen#define T4T_VERSION_OFFSET_IN_CC 0x02 3665c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen#define T4T_FC_TLV_OFFSET_IN_CC 0x07 3675c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen#define T4T_FC_WRITE_ACCESS_OFFSET_IN_TLV 0x07 /* Offset of Write access byte from type field in CC */ 368e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_NDEF_FILE_CONTROL_TYPE 0x04 /* NDEF File Control Type */ 370e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_PROP_FILE_CONTROL_TYPE 0x05 /* Proprietary File Control Type */ 371e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 372e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_FILE_CONTROL_TLV_SIZE 0x08 /* size of T(1),L(1),V(6) for file control */ 373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_FILE_CONTROL_LENGTH 0x06 /* size of V(6) for file control */ 374e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_FC_READ_ACCESS 0x00 /* read access granted without any security */ 376e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_FC_WRITE_ACCESS 0x00 /* write access granted without any security */ 377e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_FC_NO_WRITE_ACCESS 0xFF /* no write access granted at all (read-only) */ 378e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 379e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define T4T_FILE_LENGTH_SIZE 0x02 380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 381e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* 382e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 383e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** ISO 15693 Tag Definitions 384e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 385e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/ 386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 387e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Request flags 1 to 4 definition */ 388e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_SUB_CARRIER_MASK 0x01 /* Sub_carrier_flag */ 389e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_SUB_CARRIER_SINGLE 0x00 /* A single sub-carrier frequency shall be used by VICC */ 390e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_SUB_CARRIER_DOUBLE 0x01 /* Two sub-carriers shall be used by VICC */ 391e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 392e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_DATA_RATE_MASK 0x02 /* Data_rate_flag */ 393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_DATA_RATE_LOW 0x00 /* Low data rate shall be used */ 394e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_DATA_RATE_HIGH 0x02 /* High data rate shall be used */ 395e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 396e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_INVENTORY_MASK 0x04 /* Inventory_flag */ 397e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_INVENTORY_UNSET 0x00 /* Flags 5 to 8 meaning is according to table 4 */ 398e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_INVENTORY_SET 0x04 /* Flags 5 to 8 meaning is according to table 5 */ 399e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_PROT_EXT_MASK 0x08 /* Protocol_Extension_flag */ 401e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_PROT_EXT_NO 0x00 /* No protocol format extension */ 402e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_PROT_EXT_YES 0x08 /* Protocol format is extended. Reserved for future use */ 403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Request flags 5 to 6 definition when inventory flag is not set */ 405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_SELECT_MASK 0x10 /* Select_flag */ 406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_SELECT_UNSET 0x00 /* Request shall be executed by any VICC according to the setting of Address_flag */ 407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_SELECT_SET 0x10 /* Request shall be executed only by VICC in selected state */ 408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* The Address_flag shall be set to 0 and the UID field shall bot be included in the request */ 409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_ADDRESS_MASK 0x20 /* Address_flag */ 411e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_ADDRESS_UNSET 0x00 /* Request is not addressed. UID field is not included. It shall be executed by any VICC */ 412e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_ADDRESS_SET 0x20 /* Request is addressed. UID field is included. It shall be executed only by VICC */ 413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* whose UID matches the UID specified in the request */ 414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 415e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Request flags 5 to 6 definition when inventory flag is set */ 416e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_AFI_MASK 0x10 /* AFI_flag */ 417e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_AFI_NOT_PRESENT 0x00 /* AFI field is not present */ 418e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_AFI_PRESENT 0x10 /* AFI field is present */ 419e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 420e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_SLOT_MASK 0x20 /* Nb_slots_flag */ 421e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_SLOT_16 0x00 /* 16 slots */ 422e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_SLOT_ONE 0x20 /* 1 slot */ 423e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 424e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Request flags 6 to 8 definition when inventory flag is set or not set */ 425e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 426e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_OPTION_MASK 0x40 /* Option_flag */ 427e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_OPTION_UNSET 0x00 /* Meaning is defined by the command description. */ 428e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* It shall be set to 0 if not otherwise defined by command */ 429e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_OPTION_SET 0x40 /* Meaning is defined by the command description. */ 430e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 431e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Response flags */ 432e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_ERROR_MASK 0x01 /* Error_flag */ 433e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_ERORR_NOT_DETECTED 0x00 /* No error */ 434e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_FLAG_ERROR_DETECTED 0x01 /* Error detected, Error code is in the "Error" field */ 435e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 436e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Response error code */ 437e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_ERROR_CODE_NOT_SUPPORTED 0x01 /* The command is not supported, i.e. the request code is not recognized */ 438e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_ERROR_CODE_NOT_RECOGNIZED 0x02 /* The command is not recognized, for example: a format error occured */ 439e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_ERROR_CODE_OPTION_NOT_SUPPORTED 0x03 /* The command option is not supported */ 440e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_ERROR_CODE_NO_INFO 0x0F /* Error with no information given or a specific error code is not supported */ 441e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_ERROR_CODE_BLOCK_NOT_AVAILABLE 0x10 /* The specific block is not available (doesn't exist) */ 442e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_ERROR_CODE_BLOCK_ALREADY_LOCKED 0x11 /* The specific block is already locked and thus cannot be locked again */ 443e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_ERROR_CODE_BLOCK_LOCKED 0x12 /* The specific block is locked and its content cannot be changed */ 444e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_ERROR_CODE_BLOCK_FAIL_TO_WRITE 0x13 /* The specific block is was not successfully programmed */ 445e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_ERROR_CODE_BLOCK_FAIL_TO_LOCK 0x14 /* The specific block is was not successfully locked */ 446e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 447e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_UID_BYTE_LEN 8 /* UID length in bytes */ 448e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_DFS_UNSUPPORTED 0x00 /* Data Storage Format is not supported */ 449e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_BLOCK_UNLOCKED 0x00 /* Block is not locked */ 450e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_BLOCK_LOCKED 0x01 /* Block is locked */ 451e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 452e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* ISO 15693 Mandatory commands */ 453e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_CMD_INVENTORY 0x01 /* Inventory */ 454e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_CMD_STAY_QUIET 0x02 /* Stay Quiet */ 455e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 456e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* ISO 15693 Optional commands */ 457e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_CMD_READ_SINGLE_BLOCK 0x20 /* Read single block */ 458e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_CMD_WRITE_SINGLE_BLOCK 0x21 /* Write single block */ 459e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_CMD_LOCK_BLOCK 0x22 /* Lock block */ 460e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_CMD_READ_MULTI_BLOCK 0x23 /* Read multiple blocks */ 461e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_CMD_WRITE_MULTI_BLOCK 0x24 /* Write multiple blocks */ 462e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_CMD_SELECT 0x25 /* Select */ 463e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_CMD_RESET_TO_READY 0x26 /* Reset to ready */ 464e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_CMD_WRITE_AFI 0x27 /* Wreite AFI */ 465e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_CMD_LOCK_AFI 0x28 /* Lock AFI */ 466e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_CMD_WRITE_DSFID 0x29 /* Write DSFID */ 467e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_CMD_LOCK_DSFID 0x2A /* Lock DSFID */ 468e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_CMD_GET_SYS_INFO 0x2B /* Get system information */ 469e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_CMD_GET_MULTI_BLK_SEC 0x2C /* Get multiple block security status */ 470e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 471e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Information flags definition */ 472e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_INFO_FLAG_DSFID 0x01 /* DSFID is supported and DSFID field is present */ 473e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_INFO_FLAG_AFI 0x02 /* AFI is supported and AFI field is present */ 474e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_INFO_FLAG_MEM_SIZE 0x04 /* VICC memory size field is present */ 475e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_INFO_FLAG_IC_REF 0x08 /* IC reference field is present */ 476e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 477e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_MAX_BLOCK_LENGH 32 /* Max block size in bytes */ 478e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_MAX_NUM_BLOCK 256 /* Max number of blocks */ 479e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 480e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* ICODE Capability Container(CC) definition */ 481e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_ICODE_CC_MAGIC_NUMER 0xE1 /* magic number in CC[0] */ 482e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_ICODE_CC_MAJOR_VER_MASK 0xC0 /* major version in CC[1] */ 483e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_ICODE_CC_MINOR_VER_MASK 0x30 /* minor version in CC[1] */ 484e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_ICODE_CC_READ_ACCESS_MASK 0x0C /* read access condition in CC[1] */ 485e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_ICODE_CC_READ_ACCESS_GRANTED 0x00 /* read access granted without security */ 486e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_ICODE_CC_WRITE_ACCESS_MASK 0x03 /* write access condition in CC[1] */ 487e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_ICODE_CC_WRITE_ACCESS_GRANTED 0x00 /* write access granted without security */ 488e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_ICODE_CC_READ_ONLY 0x03 /* write access not granted at all */ 489e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_ICODE_CC_MBREAD_MASK 0x01 /* read multi block supported in CC[3] */ 490e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_ICODE_CC_IPREAD_MASK 0x02 /* inventory page read supported in CC[3] */ 49185b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu#define I93_STM_CC_OVERFLOW_MASK 0x04 /* More than 2040 bytes are supported in CC[3] */ 492e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 493e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* ICODE TLV type */ 494e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_ICODE_TLV_TYPE_NULL 0x00 /* NULL TLV */ 495e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_ICODE_TLV_TYPE_NDEF 0x03 /* NDEF message TLV */ 496e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_ICODE_TLV_TYPE_PROP 0xFD /* Proprietary TLV */ 497e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_ICODE_TLV_TYPE_TERM 0xFE /* Terminator TLV */ 498e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 499e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* UID Coding (UID Bit 64-57), First byte of ISO 15693 UID */ 500e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_UID_FIRST_BYTE 0xE0 501e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 502e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* UID Coding (UID Bit 56-49), IC manufacturer code */ 50385b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu#define I93_UID_IC_MFG_CODE_STM 0x02 504e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_UID_IC_MFG_CODE_NXP 0x04 505e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_UID_IC_MFG_CODE_TI 0x07 506e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 507e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NXP, UID Coding of ICODE type (UID Bit 48-41) */ 508e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_UID_ICODE_SLI 0x01 /* ICODE SLI, SLIX */ 509e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_UID_ICODE_SLI_S 0x02 /* ICODE SLI-S, SLIX-S */ 510e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_UID_ICODE_SLI_L 0x03 /* ICODE SLI-L, SLIX-L */ 511e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 512e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_IC_REF_ICODE_SLI_L 0x03 /* IC Reference for ICODE SLI-L */ 513e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_ICODE_IC_REF_MBREAD_MASK 0x02 /* read multi block supported check bit */ 514e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 515e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* TI, UID Coding of product version (UID Bit 48-42) */ 516e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_UID_TAG_IT_HF_I_PRODUCT_ID_MASK 0xFE /* upper 7 bits */ 517e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_UID_TAG_IT_HF_I_PLUS_INLAY 0x00 /* Tag-it HF-I Plus Inlay */ 518e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_UID_TAG_IT_HF_I_PLUS_CHIP 0x80 /* Tag-it HF-I Plus Chip */ 519e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_UID_TAG_IT_HF_I_STD_CHIP_INLAY 0xC0 /* Tag-it HF-I Standard Chip/Inlyas */ 520e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_UID_TAG_IT_HF_I_PRO_CHIP_INLAY 0xC4 /* Tag-it HF-I Pro Chip/Inlyas */ 521e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 522e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_TAG_IT_HF_I_STD_CHIP_INLAY_NUM_TOTAL_BLK 11 523e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_TAG_IT_HF_I_PRO_CHIP_INLAY_NUM_TOTAL_BLK 12 524e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 525e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_TAG_IT_HF_I_STD_PRO_CHIP_INLAY_BLK_SIZE 4 526e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_TAG_IT_HF_I_STD_PRO_CHIP_INLAY_NUM_USER_BLK 8 527e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define I93_TAG_IT_HF_I_STD_PRO_CHIP_INLAY_AFI_LOCATION 40 /* LSB in Block 0x0A */ 528e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 52985b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu/* STM, product version (IC manufacturer code) */ 53085b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu#define I93_IC_REF_STM_MASK 0xFC /* IC Reference mask for STM */ 53185b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu#define I93_IC_REF_STM_LRI1K 0x40 /* IC Reference for LRI1K: 010000xx(b), blockSize: 4, numberBlocks: 0x20 */ 53285b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu#define I93_IC_REF_STM_LRI2K 0x20 /* IC Reference for LRI2K: 001000xx(b), blockSize: 4, numberBlocks: 0x40 */ 53385b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu#define I93_IC_REF_STM_LRIS2K 0x28 /* IC Reference for LRIS2K: 001010xx(b), blockSize: 4, numberBlocks: 0x40 */ 53485b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu#define I93_IC_REF_STM_LRIS64K 0x44 /* IC Reference for LRIS64K: 010001xx(b), blockSize: 4, numberBlocks: 0x800 */ 53585b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu#define I93_IC_REF_STM_M24LR64_R 0x2C /* IC Reference for M24LR64-R: 001011xx(b), blockSize: 4, numberBlocks: 0x800 */ 53685b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu#define I93_IC_REF_STM_M24LR04E_R 0x5A /* IC Reference for M24LR04E-R: 01011010(b), blockSize: 4, numberBlocks: 0x80 */ 53785b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu#define I93_IC_REF_STM_M24LR16E_R 0x4E /* IC Reference for M24LR16E-R: 01001110(b), blockSize: 4, numberBlocks: 0x200 */ 53885b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu#define I93_IC_REF_STM_M24LR64E_R 0x5E /* IC Reference for M24LR64E-R: 01011110(b), blockSize: 4, numberBlocks: 0x800 */ 53985b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu 54085b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu#define I93_STM_BLOCKS_PER_SECTOR 32 54185b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu#define I93_STM_MAX_BLOCKS_PER_READ 32 54285b7e84f6cc61506c94e98844cac9ce50bbbe9dcEvan Chu 543e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* TAGS_DEFS_H */ 544