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