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