# This file allows user to override the factory
# defaults for the WLAN Driver

# Enable IMPS or not
gEnableImps=1

# Enable/Disable Idle Scan
gEnableIdleScan=0

# Increase sleep duration (seconds) during IMPS
# 0 implies no periodic wake up from IMPS. Periodic wakeup is 
# unnecessary if Idle Scan is disabled.
gImpsModSleepTime=0

# Enable BMPS or not
gEnableBmps=1

# Enable suspend or not
# 1: Enable standby, 2: Enable Deep sleep, 3: Enable Mcast/Bcast Filter
gEnableSuspend=3

# Phy Mode (auto, b, g, n, etc)
gDot11Mode=0

# Handoff Enable(1) Disable(0)
gEnableHandoff=0

# CSR Roaming Enable(1) Disable(0)
gRoamingTime=0

# Assigned MAC Addresses - This will be used until NV items are in place
# Each byte of MAC address is represented in Hex format as XX
Intf0MacAddress=000AF58989FF
Intf1MacAddress=000AF58989FE
Intf2MacAddress=000AF58989FD
Intf3MacAddress=000AF58989FC

# UAPSD service interval for VO,VI, BE, BK traffic
InfraUapsdVoSrvIntv=0
InfraUapsdViSrvIntv=0
InfraUapsdBeSrvIntv=0
InfraUapsdBkSrvIntv=0

# Disable RSSI FW filtering
gEnableFWRssiMonitoring=0

# Make 1x1 the default antenna configuration
gNumRxAnt=1

# Beacon filtering frequency (unit in beacon intervals)
gNthBeaconFilter=50

# Enable WAPI or not
# WAPIIsEnabled=0

# Flags to filter Mcast abd Bcast RX packets.
# Value 0: No filtering, 1: Filter all Multicast.
# 2: Filter all Broadcast. 3: Filter all Mcast abd Bcast
McastBcastFilter=3

#Flag to enable HostARPOffload feature or not
hostArpOffload=0

#SoftAP Related Parameters
# AP MAc addr
gAPMacAddr=000AF58989EF

# 802.11n Protection flag
gEnableApProt=1

#Enable OBSS protection
gEnableApOBSSProt=0

#Enable/Disable UAPSD for SoftAP
gEnableApUapsd=1

# Fixed Rate
gFixedRate=0

# Maximum Tx power
# gTxPowerCap=30

# Fragmentation Threshold
# gFragmentationThreshold=2346

# RTS threshold
RTSThreshold=2347

# Intra-BSS forward
gDisableIntraBssFwd=0

# WMM Enable/Disable
WmmIsEnabled=0

# 802.11d support
g11dSupportEnabled=1

# CCX Support and fast transition
CcxEnabled=0
FastTransitionEnabled=0
ImplicitQosIsEnabled=1
gNeighborScanTimerPeriod=200

gNeighborLookupThreshold=50
gNeighborReassocThreshold=55

gNeighborScanChannelList=1,11,36,64
gNeighborScanChannelMinTime=20
gNeighborScanChannelMaxTime=30
gMaxNeighborReqTries=3

# SAP Country code
# Default Country Code is 2 bytes, 3rd byte is optional indoor or out door.
# Example
#   US Indoor, USI
#   Korea Outdoor, KRO
#   Japan without optional byte, JP
#   France without optional byte, FR
#gAPCntryCode=USI

#Short Guard Interval Enable/disable
gShortGI20Mhz=1
gShortGI40Mhz=1

#Auto Shutdown  Value in seconds. A value of 0 means Auto shutoff is disabled
gAPAutoShutOff=0

# SAP auto channel selection configuration
# 0 = disable auto channel selection
# 1 = enable auto channel selection, channel provided by supplicant will be ignored
gApAutoChannelSelection=0

# Listen Energy Detect Mode Configuration
# Valid values 0-128
# 128 means disable Energy Detect feature
# 0-9 are threshold code and 7 is recommended value from system if feature is to be enabled.
# 10-128 are reserved.
# The EDET threshold mapping is as follows in 3dB step:
# 0 = -60 dBm
# 1 = -63 dBm
# 2 = -66 dBm
# ...
# 7 = -81 dBm
# 8 = -84 dBm
# 9 = -87 dBm
# Note: Any of these settings are valid. Setting 0 would yield the highest power saving (in a noisy environment) at the cost of more range. The range impact is approximately #calculated as:
#
#  Range Loss  (dB)  =  EDET threshold level (dBm) + 97 dBm.
#
gEnablePhyAgcListenMode=128

#Preferred channel to start BT AMP AP mode (0 means, any channel)
BtAmpPreferredChannel=0

#Preferred band (both or 2.4 only or 5 only)
BandCapability=0

#Beacon Early Termination (1 = enable the BET feature, 0 = disable)
enableBeaconEarlyTermination=0
beaconEarlyTerminationWakeInterval=3

#Bluetooth Alternate Mac Phy (1 = enable the BT AMP feature, 0 = disable)
gEnableBtAmp=1

#SOFTAP Channel Range selection 
gAPChannelSelectStartChannel=1
gAPChannelSelectEndChannel=11

#SOFTAP Channel Range selection Operating band
# 0:2.4GHZ 1: LOW-5GHZ 2:MID-5GHZ 3:HIGH-5GHZ 4: 4.9HZ BAND
gAPChannelSelectOperatingBand=0

#Enable Keep alive with non-zero period value
#gStaKeepAlivePeriod = 30

#If set will start with active scan after driver load, otherwise will start with
#passive scan to find out the domain
gEnableBypass11d=1

#If set to 0, will not scan DFS channels
gEnableDFSChnlScan=1

# Enable logp/SSR
gEnableLogp=1

# Enable Automatic Tx Power control
gEnableAutomaticTxPowerControl=1
END
# Note: Configuration parser would not read anything past the END marker
