# 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 Close Loop or not
gEnableCloseLoop=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

# Enable Firmware RSSI monitoring for roaming
gEnableFWRssiMonitoring=1

# 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 and Bcast RX packets.
# Value 0: No filtering, 1: Filter all Multicast.
# 2: Filter all Broadcast. 3: Filter all Mcast and Bcast
McastBcastFilter=3

#Flag to enable HostARPOffload feature or not
hostArpOffload=0

#SoftAP Related Parameters
# AP MAc addr (obsolete)
gAPMacAddr=000AF58989EF

# Enable Random BSSID
gEnableApRandomBssid=1

# 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=1
ImplicitQosIsEnabled=1
gNeighborScanTimerPeriod=200

gNeighborLookupThreshold=76
gNeighborReassocThreshold=81

gNeighborScanChannelMinTime=20
gNeighborScanChannelMaxTime=30
gMaxNeighborReqTries=3

# Legacy (non-CCX, non-802.11r) Fast Roaming Support
# To enable, set FastRoamEnabled=1, gEnableFWRssiMonitoring=1, FastTransitionEnabled=1
# To disable, set FastRoamEnabled=0, gEnableFWRssiMonitoring=0, FastTransitionEnabled=0
FastRoamEnabled=1

#Check if the AP to which we are roaming is better than current AP in terms of RSSI.
#Checking is disabled if set to Zero.Otherwise it will use this value as to how better
#the RSSI of the new/roamable AP should be for roaming
RoamRssiDiff=3

#Configure the RSSI gap that will be used to partition/categorize width of
#each  individual category (aka bucket).
gRssiCatGap=5

# 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 band (both or 2.4 only or 5 only)
BandCapability=0

#Forced Device Listen Interval in multiples of DTIM Period aligned to DTIM
gEnableModulatedDTIM=3

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

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

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

#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 = 25

#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

# Disable HT40
gChannelBondingMode5GHz=0

# Enable Automatic Tx Power control
gEnableAutomaticTxPowerControl=1

# Derive P2P MAC address from primary MAC address
isP2pDeviceAddrAdministrated=1

# Disable channel 165 for Indonesia
gIgnore_Chan165=1

btcStaticLenLeBt=120000
btcStaticLenLeWlan=30000

gCountryCodePriority=1

gNumChanCombinedConc=255

END
# Note: Configuration parser would not read anything past the END marker
