<?xml version="1.0" encoding="utf-8"?>

<!--
/*
 * Copyright (C) 2019 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
-->
<resources>
    <!-- Boolean indicating whether the wifi chipset has 5GHz frequency band support -->
    <bool translatable="false" name="config_wifi5ghzSupport">true</bool>

    <!-- boolean indicating whether the WiFi chipset has 6GHz band support -->
    <bool translatable="false" name ="config_wifi6ghzSupport">true</bool>

    <!-- Boolean indicating whether 802.11r Fast BSS Transition is enabled on this platform -->
    <bool translatable="false" name="config_wifi_fast_bss_transition_enabled">true</bool>

    <!-- Boolean indicating whether the wifi chipset has background scan support -->
    <bool translatable="false" name="config_wifi_background_scan_support">true</bool>

    <!-- Integer thresholds, do not connect to APs with RSSI lower than these values  -->
    <integer translatable="false" name="config_wifi_framework_wifi_score_entry_rssi_threshold_5GHz">-77</integer>
    <integer translatable="false" name="config_wifi_framework_wifi_score_entry_rssi_threshold_24GHz">-80</integer>
    <!-- Integer thresholds for low network score, should be somewhat less than the entry thresholds -->
    <integer translatable="false" name="config_wifi_framework_wifi_score_bad_rssi_threshold_5GHz">-80</integer>
    <integer translatable="false" name="config_wifi_framework_wifi_score_bad_rssi_threshold_24GHz">-83</integer>

    <!-- Boolean indicating whether or not to revert to default country code when cellular
    radio is unable to find any MCC information to infer wifi country code from -->
    <bool translatable="false" name="config_wifi_revert_country_code_on_cellular_loss">false</bool>

    <!-- Boolean indicating whether or not wifi should turn off when emergency call is made -->
    <bool translatable="false" name="config_wifi_turn_off_during_emergency_call">true</bool>

    <!-- Configure wifi tcp buffersizes in the form:
         rmem_min,rmem_def,rmem_max,wmem_min,wmem_def,wmem_max -->
    <string name="config_wifi_tcp_buffers" translatable="false">524288,2097152,8388608,262144,524288,4194304</string>

    <!-- Enable ACS (auto channel selection) for Wifi hotspot (SAP) -->
    <bool translatable="false" name="config_wifi_softap_acs_supported">true</bool>

    <!-- Enable 802.11ac for Wifi hotspot (SAP) -->
    <bool translatable="false" name="config_wifi_softap_ieee80211ac_supported">true</bool>

    <!-- True if the firmware supports connected MAC randomization -->
    <bool name="config_wifi_connected_mac_randomization_supported">true</bool>

    <!-- True if the firmware supports p2p MAC randomization -->
    <bool name="config_wifi_p2p_mac_randomization_supported">true</bool>

    <!-- True if the firmware supports ap MAC randomization -->
    <bool name="config_wifi_ap_mac_randomization_supported">true</bool>

    <!-- True if the firmware supports Wi-Fi link probing -->
    <bool name="config_wifi_link_probing_supported">true</bool>

    <!-- Indicates that a full bugreport should be triggered when wifi diagnostics detects an error on non-user (i.e debug) builds -->
    <bool translatable="false" name="config_wifi_diagnostics_bugreport_enabled">true</bool>

    <!-- Default access point SSID used for tethering -->
    <string name="wifi_tether_configure_ssid_default" translatable="false">Pixel</string>

    <!-- Integer indicating maximum hardware supported client number of soft ap -->
    <integer translatable="false" name="config_wifiHardwareSoftapMaxClientCount">32</integer>

    <!-- Array indicating wifi fatal firmware alert error code list from driver -->
    <array translatable="false" name="config_wifi_fatal_firmware_alert_error_code_list">
        <item>1</item>      <!-- ALERT_TX_STALL -->
        <item>2</item>      <!-- ALERT_RX_STALL -->
        <item>3</item>      <!-- ALERT_IOCTL_TIMEOUT -->
        <item>8</item>      <!-- ALERT_FW_QUEUE_STALL -->
    </array>

    <!-- Integer delay in milliseconds before set wlan interface up during watchdog recovery -->
    <integer name="config_wifi_framework_recovery_timeout_delay">3000</integer>

    <!-- Number of self recoveries to be attempted per hour. Any fatal errors beyond this will
         cause the wifi stack to turn wifi off and wait for user input.
         Set to 0 to turn off recovery attempts and always turn off wifi on failures -->
    <integer translatable="false" name="config_wifiMaxNativeFailureSelfRecoveryPerHour">10</integer>

    <!-- Wifi driver supports IEEE80211AX for softap -->
    <bool translatable="false" name="config_wifiSoftapIeee80211axSupported">true</bool>

      <!-- Indicates that 11ax mode is supported on this device
           Note that if this flag is set to true, then 11ax is assumed to be supported.
           However, if it is left to the default value of false, the 11ax support will
           be checked via NL80211 interface -->
    <bool translatable="false" name="config_wifi11axSupportOverride">true</bool>

    <!-- Wifi driver supports 6GHz band for softap -->
    <bool translatable="false" name="config_wifiSoftap6ghzSupported">true</bool>

    <!-- Wifi driver supports WPA3 Simultaneous Authentication of Equals (WPA3-SAE) for softap -->
    <bool translatable="false" name="config_wifi_softap_sae_supported">true</bool>

    <!-- Override channel utilization estimation with fixed value, disabled in brcm-based pixels -->
    <bool translatable="false" name="config_wifiChannelUtilizationOverrideEnabled">false</bool>

    <!-- Enable adding minimum confirmation duration when sending network score to connectivity service. -->
    <bool translatable="false" name="config_wifiMinConfirmationDurationSendNetworkScoreEnabled">true</bool>

    <!-- Enable concurrent STA + STA peer to peer + internet connectivity -->
    <bool translatable="false" name="config_wifiMultiStaLocalOnlyConcurrencyEnabled">true</bool>

    <!-- Enable concurrent STA + STA MBB support -->
    <bool translatable="false" name="config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled">true</bool>

    <!-- Enable concurrent Bridged access point (AP) support -->
    <bool translatable="false" name="config_wifiBridgedSoftApSupported">true</bool>

    <!-- Enable concurrent STA + Bridged access point (AP) support -->
    <bool translatable="false" name="config_wifiStaWithBridgedSoftApConcurrencySupported">true</bool>

    <!-- Indicates that SAE Hash-to-Element is supported on this device -->
    <bool translatable="false" name="config_wifiSaeH2eSupported">true</bool>

    <!-- Enable the default coex channel avoidance algorithm and disable the functionality of
         WifiManager#setCoexUnsafeChannels. -->
    <bool translatable="false" name="config_wifiDefaultCoexAlgorithmEnabled">true</bool>
    <!-- Whether to use the explicit vendor HAL API: IWifiStaIface.setRoamingState for disabling fw roaming. -->
    <bool translatable="false" name="config_wifiUseHalApiToDisableFwRoaming">true</bool>
</resources>
