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