###############################################################################
# Application options
APPL_TRACE_LEVEL=0x01
PROTOCOL_TRACE_LEVEL=0x00000000

###############################################################################
# performance measurement
# Change this setting to control how often USERIAL log the performance (throughput)
# data on read/write/poll
# defailt is to log performance dara for every 100 read or write
#REPORT_PERFORMANCE_MEASURE=100

###############################################################################
# File used for NFA storage
NFA_STORAGE="/data/nfc"
PRESERVE_STORAGE=1

###############################################################################
# Insert a delay in milliseconds after NFC_WAKE and before write to NFCC
NFC_WAKE_DELAY=20

###############################################################################
# Various Delay settings (in ms) used in USERIAL
#  POWER_ON_DELAY
#    Delay after turning on chip, before writing to transport (default 300)
#  PRE_POWER_OFF_DELAY
#    Delay after deasserting NFC-Wake before turn off chip (default 0)
#  POST_POWER_OFF_DELAY
#    Delay after turning off chip, before USERIAL_close returns (default 0)
#
POWER_ON_DELAY=50
PRE_POWER_OFF_DELAY=10
#POST_POWER_OFF_DELAY=0

################################################
#Disable BOC before sending XTAL_INDEX_CMD.
DO_GLOBAL_RESET=1

###############################################################################
# Maximum time (ms) to wait for RESET NTF after setting REG_PU to high
# The default is 1000.
NFCC_ENABLE_TIMEOUT=0

###############################################################################
# Device Manager Config
#
#  If NFA_DM_CFG is not provided, stack default settings are
#  used (see nfa_dm_cfg.c).  They are as follows:
#       0 (FALSE)     Automatic NDEF detection when background polling
#       0 (FALSE)     Automatic NDEF read when background polling
#
#NFA_DM_CFG={00:00}

###############################################################################
# Default poll duration (in ms)
#  The defualt is 500ms if not set (see nfc_target.h)
#NFA_DM_DISC_DURATION_POLL=500

###############################################################################
# Startup Vendor Specific Configuration (100 bytes maximum);
#  byte[0] TLV total len = 0x5
#  byte[1] NCI_MTS_CMD|NCI_GID_PROP = 0x2f
#  byte[2] NCI_MSG_FRAME_LOG = 0x9
#  byte[3] 2
#  byte[4] 0=turn off RF frame logging; 1=turn on
#  byte[5] 0=turn off SWP frame logging; 1=turn on
#  NFA_DM_START_UP_VSC_CFG={05:2F:09:02:01:01}

###############################################################################
# Configure the default Destination Gate used by HCI (the default is 4, which
# is the ETSI loopback gate.
#NFA_HCI_DEFAULT_DEST_GATE=0x04

###############################################################################
# Override the stack default for NFA_EE_MAX_EE_SUPPORTED set in nfc_target.h.
# The value is set to 3 by default as it assumes we will discover 0xF2,
# 0xF3, and 0xF4. If a platform will exclude an SE, this value can be reduced
# so that the stack will not wait any longer than necessary.  It can be set to
# 0 to disable EE and HCI sub-systems (i.e. if there are no SE on the system).
# Note, if set to 0, the ACTIVE_SE setting should also be set to 0.
NFA_MAX_EE_SUPPORTED=0

###############################################################################
# Configure the single default SE to use.  The default is to use the first
# SE that is detected by the stack.  This value might be used when the phone
# supports multiple SE (e.g. 0xF3 and 0xF4) but you want to force it to use
# one of them (e.g. 0xF4).  This can be set to 0 if there are no SE on the
# system in order to skip SE initialization.
ACTIVE_SE=0x0

###############################################################################
# Configure the default NfcA/IsoDep techology and protocol route. Can be
# either a secure element (e.g. 0xF4) or the host (0x00)
DEFAULT_ISODEP_ROUTE=0x00


###############################################################################
# Configure the NFC Extras to open and use a static pipe.  If the value is
# not set or set to 0, then the default is use a dynamic pipe based on a
# destination gate (see NFA_HCI_DEFAULT_DEST_GATE).  Note there is a value
# for each UICC (where F3="UICC0" and F4="UICC1")
#NFA_HCI_STATIC_PIPE_ID_F3=0x70
#NFA_HCI_STATIC_PIPE_ID_F4=0x71

###############################################################################
# Force UICC to only listen to the following technology(s).
# The bits are defined as tNFA_TECHNOLOGY_MASK in nfa_api.h.
# Default is NFA_TECHNOLOGY_MASK_A | NFA_TECHNOLOGY_MASK_B.
#UICC_LISTEN_TECH_MASK=0x01

###############################################################################
# Force tag polling for the following technology(s).
# The bits are defined as tNFA_TECHNOLOGY_MASK in nfa_api.h.
# Default is NFA_TECHNOLOGY_MASK_A | NFA_TECHNOLOGY_MASK_B |
#            NFA_TECHNOLOGY_MASK_F | NFA_TECHNOLOGY_MASK_ISO15693 |
#            NFA_TECHNOLOGY_MASK_B_PRIME | NFA_TECHNOLOGY_MASK_A_ACTIVE |
#            NFA_TECHNOLOGY_MASK_F_ACTIVE.
#
# Notable bits:
#   NFA_TECHNOLOGY_MASK_A         0x01
#   NFA_TECHNOLOGY_MASK_B         0x02
#   NFA_TECHNOLOGY_MASK_F         0x04
#   NFA_TECHNOLOGY_MASK_ISO15693  0x08
#   NFA_TECHNOLOGY_MASK_B_PRIME   0x10
#   NFA_TECHNOLOGY_MASK_KOVIO	    0x20
#   NFA_TECHNOLOGY_MASK_A_ACTIVE    0x40
#   NFA_TECHNOLOGY_MASK_F_ACTIVE    0x80
POLLING_TECH_MASK=0xEF

###############################################################################
# Force P2P to only listen for the following technology(s).
# The bits are defined as tNFA_TECHNOLOGY_MASK in nfa_api.h.
# Default is NFA_TECHNOLOGY_MASK_A | NFA_TECHNOLOGY_MASK_F |
#            NFA_TECHNOLOGY_MASK_A_ACTIVE | NFA_TECHNOLOGY_MASK_F_ACTIVE
#P2P_LISTEN_TECH_MASK=0xC5

###############################################################################
# Maximum Number of Credits to be allowed by the NFCC
#   This value overrides what the NFCC specifices allowing the host to have
#   the control to work-around transport limitations.  If this value does
#   not exist or is set to 0, the NFCC will provide the number of credits.
#MAX_RF_DATA_CREDITS=1

###############################################################################
# When screen is turned off, specify the desired power state of the controller.
# 0: power-off-sleep state; DEFAULT
# 1: full-power state
# 2: screen-off card-emulation (CE4/CE3/CE1 modes are used)
SCREEN_OFF_POWER_STATE=1

###############################################################################
# SPD Debug mode
#  If set to 1, any failure of downloading a patch will trigger a hard-stop
#SPD_DEBUG=0

###############################################################################
# SPD Max Retry Count
#  The number of attempts to download a patch before giving up (defualt is 3).
#  Note, this resets after a power-cycle.
#SPD_MAX_RETRY_COUNT=3

###############################################################################
# transport driver
#
# TRANSPORT_DRIVER=<driver>
#
#  where <driver> can be, for example:
#    "/dev/ttyS"        (UART)
#    "/dev/bcmi2cnfc"   (I2C)
#    "hwtun"            (HW Tunnel)
#    "/dev/bcmspinfc"   (SPI)
#    "/dev/btusb0"      (BT USB)
TRANSPORT_DRIVER="/dev/bcm2079x-i2c"

###############################################################################
# power control driver
# Specify a kernel driver that support ioctl commands to control NFC_EN and
# NFC_WAKE gpio signals.
#
# POWER_CONTRL_DRIVER=<driver>
#  where <driver> can be, for example:
#    "/dev/nfcpower"
#    "/dev/bcmi2cnfc"   (I2C)
#    "/dev/bcmspinfc"   (SPI)
#    i2c and spi driver may be used to control NFC_EN and NFC_WAKE signal
POWER_CONTROL_DRIVER="/dev/bcm2079x-i2c"

###############################################################################
# I2C transport driver options
# BCMI2CNFC_ADDRESS=0

###############################################################################
# I2C transport driver try to read multiple packets in read() if data is available
# remove the comment below to enable this feature
#READ_MULTIPLE_PACKETS=1

###############################################################################
# SPI transport driver options
#SPI_NEGOTIATION={0A:F0:00:01:00:00:00:FF:FF:00:00}

###############################################################################
# UART transport driver options
#
# PORT=1,2,3,...
# BAUD=115200, 19200, 9600, 4800,
# DATABITS=8, 7, 6, 5
# PARITY="even" | "odd" | "none"
# STOPBITS="0" | "1" | "1.5" | "2"

#UART_PORT=2
#UART_BAUD=115200
#UART_DATABITS=8
#UART_PARITY="none"
#UART_STOPBITS="1"

###############################################################################
# Insert a delay in microseconds per byte after a write to NFCC.
# after writing a block of data to the NFCC, delay this an amopunt of time before
# writing next block of data.  the delay is calculated as below
#   NFC_WRITE_DELAY * (number of byte written) / 1000 milliseconds
# e.g. after 259 bytes is written, delay (259 * 20 / 1000) 5 ms before next write
NFC_WRITE_DELAY=20

###############################################################################
# Configuration for the RF discovery frequency for each technology. The values mean
# frequency for NFC Technology A
#                   Technology B
#                   Technology F
#                   Proprietary Technology/15693
#                   Proprietary Technology/B-Prime
#                   Proprietary Technology/Kovio
#                   Technology A active mode
#                   Technology F active mode
#POLL_FREQUENCY={01:01:01:01:01:01:01:01}

###############################################################################
# Define the following variables to override the NFC stack's crystal
# frequency selection algorithm.
#XTAL_HARDWARE_ID=0x20791000: Controller's hardware ID.
#XTAL_FREQUENCY=26000: Controller's crystal frequency.
#XTAL_FREQ_INDEX=5: Controller's crystal frequency index.

###############################################################################
# Choose the presence-check algorithm for type-4 tag.  If not defined,
# the default value is 1.
# 0  NFA_RW_PRES_CHK_DEFAULT; Let stack selects an algorithm
# 1  NFA_RW_PRES_CHK_I_BLOCK; ISO-DEP protocol's empty I-block
# 2  NFA_RW_PRES_CHK_RESET; Deactivate to Sleep, then re-activate
# 3  NFA_RW_PRES_CHK_RB_CH0; Type-4 tag protocol's ReadBinary command on channel 0
# 4  NFA_RW_PRES_CHK_RB_CH3; Type-4 tag protocol's ReadBinary command on channel 3
PRESENCE_CHECK_ALGORITHM=1

###############################################################################
# Select controller support for AID matching
# the default value is 0.
# 0  Exact matching only
# 1  Exact+Prefix matching
# 2  Prefix matching only
AID_MATCHING_MODE=2
