# 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)
# Valid values are 0-9, with 0 = Auto, 4 = 11n, 9 = 11ac
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=000AF589dcab


# 802.11n Protection flag

gEnableApProt=1


#Enable OBSS protection

gEnableApOBSSProt=0


#Enable/Disable UAPSD for SoftAP

gEnableApUapsd=0


# 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=70
gNeighborReassocThreshold=75

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=0

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


#Channel Bonding
gChannelBondingMode5GHz=6


#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


gVhtChannelWidth=2
gEnableLogp=1


# Enable Automatic Tx Power control

gEnableAutomaticTxPowerControl=1

# 0 for OLPC 1 for CLPC and SCPC
gEnableCloseLoop=1

#Data Inactivity Timeout when in powersave (in ms)
gDataInactivityTimeout=200

# VHT Tx/Rx MCS values
# Valid values are 0,1,2. If commented out, the default value is 0.
# 0=MCS0-7, 1=MCS0-8, 2=MCS0-9
gVhtRxMCS=2
gVhtTxMCS=2

# Enable CRDA regulatory support by settings default country code
#gCrdaDefaultCountryCode=TW

END

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

