wifi: support 802.11k and 802.11v (#3600)

This commit is contained in:
Stijn Tintel 2022-08-17 12:10:43 +03:00 committed by GitHub
parent 5561d4eaeb
commit b4bbe3d7b5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 43 additions and 1 deletions

View file

@ -10,6 +10,8 @@ from esphome.const import (
CONF_DNS1, CONF_DNS1,
CONF_DNS2, CONF_DNS2,
CONF_DOMAIN, CONF_DOMAIN,
CONF_ENABLE_BTM,
CONF_ENABLE_RRM,
CONF_FAST_CONNECT, CONF_FAST_CONNECT,
CONF_GATEWAY, CONF_GATEWAY,
CONF_HIDDEN, CONF_HIDDEN,
@ -32,10 +34,10 @@ from esphome.const import (
CONF_EAP, CONF_EAP,
) )
from esphome.core import CORE, HexInt, coroutine_with_priority from esphome.core import CORE, HexInt, coroutine_with_priority
from esphome.components.esp32 import add_idf_sdkconfig_option
from esphome.components.network import IPAddress from esphome.components.network import IPAddress
from . import wpa2_eap from . import wpa2_eap
AUTO_LOAD = ["network"] AUTO_LOAD = ["network"]
wifi_ns = cg.esphome_ns.namespace("wifi") wifi_ns = cg.esphome_ns.namespace("wifi")
@ -272,6 +274,12 @@ CONFIG_SCHEMA = cv.All(
cv.SplitDefault(CONF_OUTPUT_POWER, esp8266=20.0): cv.All( cv.SplitDefault(CONF_OUTPUT_POWER, esp8266=20.0): cv.All(
cv.decibel, cv.float_range(min=8.5, max=20.5) cv.decibel, cv.float_range(min=8.5, max=20.5)
), ),
cv.SplitDefault(CONF_ENABLE_BTM, esp32_idf=False): cv.All(
cv.boolean, cv.only_with_esp_idf
),
cv.SplitDefault(CONF_ENABLE_RRM, esp32_idf=False): cv.All(
cv.boolean, cv.only_with_esp_idf
),
cv.Optional("enable_mdns"): cv.invalid( cv.Optional("enable_mdns"): cv.invalid(
"This option has been removed. Please use the [disabled] option under the " "This option has been removed. Please use the [disabled] option under the "
"new mdns component instead." "new mdns component instead."
@ -373,6 +381,15 @@ async def to_code(config):
elif CORE.is_esp32 and CORE.using_arduino: elif CORE.is_esp32 and CORE.using_arduino:
cg.add_library("WiFi", None) cg.add_library("WiFi", None)
if CORE.is_esp32 and CORE.using_esp_idf:
if config[CONF_ENABLE_BTM] or config[CONF_ENABLE_RRM]:
add_idf_sdkconfig_option("CONFIG_WPA_11KV_SUPPORT", True)
cg.add_define("USE_WIFI_11KV_SUPPORT")
if config[CONF_ENABLE_BTM]:
cg.add(var.set_btm(config[CONF_ENABLE_BTM]))
if config[CONF_ENABLE_RRM]:
cg.add(var.set_rrm(config[CONF_ENABLE_RRM]))
cg.add_define("USE_WIFI") cg.add_define("USE_WIFI")
# Register at end for OTA safe mode # Register at end for OTA safe mode

View file

@ -166,6 +166,10 @@ WiFiComponent::WiFiComponent() { global_wifi_component = this; }
bool WiFiComponent::has_ap() const { return this->has_ap_; } bool WiFiComponent::has_ap() const { return this->has_ap_; }
bool WiFiComponent::has_sta() const { return !this->sta_.empty(); } bool WiFiComponent::has_sta() const { return !this->sta_.empty(); }
void WiFiComponent::set_fast_connect(bool fast_connect) { this->fast_connect_ = fast_connect; } void WiFiComponent::set_fast_connect(bool fast_connect) { this->fast_connect_ = fast_connect; }
#ifdef USE_WIFI_11KV_SUPPORT
void WiFiComponent::set_btm(bool btm) { this->btm_ = btm; }
void WiFiComponent::set_rrm(bool rrm) { this->rrm_ = rrm; }
#endif
network::IPAddress WiFiComponent::get_ip_address() { network::IPAddress WiFiComponent::get_ip_address() {
if (this->has_sta()) if (this->has_sta())
return this->wifi_sta_ip(); return this->wifi_sta_ip();
@ -366,6 +370,10 @@ void WiFiComponent::print_connect_params_() {
ESP_LOGCONFIG(TAG, " Gateway: %s", wifi_gateway_ip_().str().c_str()); ESP_LOGCONFIG(TAG, " Gateway: %s", wifi_gateway_ip_().str().c_str());
ESP_LOGCONFIG(TAG, " DNS1: %s", wifi_dns_ip_(0).str().c_str()); ESP_LOGCONFIG(TAG, " DNS1: %s", wifi_dns_ip_(0).str().c_str());
ESP_LOGCONFIG(TAG, " DNS2: %s", wifi_dns_ip_(1).str().c_str()); ESP_LOGCONFIG(TAG, " DNS2: %s", wifi_dns_ip_(1).str().c_str());
#ifdef USE_WIFI_11KV_SUPPORT
ESP_LOGCONFIG(TAG, " BTM: %s", this->btm_ ? "enabled" : "disabled");
ESP_LOGCONFIG(TAG, " RRM: %s", this->rrm_ ? "enabled" : "disabled");
#endif
} }
void WiFiComponent::start_scanning() { void WiFiComponent::start_scanning() {

View file

@ -219,6 +219,11 @@ class WiFiComponent : public Component {
bool has_sta() const; bool has_sta() const;
bool has_ap() const; bool has_ap() const;
#ifdef USE_WIFI_11KV_SUPPORT
void set_btm(bool btm);
void set_rrm(bool rrm);
#endif
network::IPAddress get_ip_address(); network::IPAddress get_ip_address();
std::string get_use_address() const; std::string get_use_address() const;
void set_use_address(const std::string &use_address); void set_use_address(const std::string &use_address);
@ -327,6 +332,10 @@ class WiFiComponent : public Component {
optional<float> output_power_; optional<float> output_power_;
ESPPreferenceObject pref_; ESPPreferenceObject pref_;
bool has_saved_wifi_settings_{false}; bool has_saved_wifi_settings_{false};
#ifdef USE_WIFI_11KV_SUPPORT
bool btm_{false};
bool rrm_{false};
#endif
}; };
extern WiFiComponent *global_wifi_component; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables) extern WiFiComponent *global_wifi_component; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)

View file

@ -285,6 +285,11 @@ bool WiFiComponent::wifi_sta_connect_(const WiFiAP &ap) {
} }
#endif #endif
#ifdef USE_WIFI_11KV_SUPPORT
conf.sta.btm_enabled = this->btm_;
conf.sta.rm_enabled = this->rrm_;
#endif
if (ap.get_bssid().has_value()) { if (ap.get_bssid().has_value()) {
conf.sta.bssid_set = true; conf.sta.bssid_set = true;
memcpy(conf.sta.bssid, ap.get_bssid()->data(), 6); memcpy(conf.sta.bssid, ap.get_bssid()->data(), 6);

View file

@ -197,8 +197,10 @@ CONF_ECO2 = "eco2"
CONF_EFFECT = "effect" CONF_EFFECT = "effect"
CONF_EFFECTS = "effects" CONF_EFFECTS = "effects"
CONF_ELSE = "else" CONF_ELSE = "else"
CONF_ENABLE_BTM = "enable_btm"
CONF_ENABLE_IPV6 = "enable_ipv6" CONF_ENABLE_IPV6 = "enable_ipv6"
CONF_ENABLE_PIN = "enable_pin" CONF_ENABLE_PIN = "enable_pin"
CONF_ENABLE_RRM = "enable_rrm"
CONF_ENABLE_TIME = "enable_time" CONF_ENABLE_TIME = "enable_time"
CONF_ENERGY = "energy" CONF_ENERGY = "energy"
CONF_ENTITY_CATEGORY = "entity_category" CONF_ENTITY_CATEGORY = "entity_category"

View file

@ -70,6 +70,7 @@
#define USE_ESP32_IGNORE_EFUSE_MAC_CRC #define USE_ESP32_IGNORE_EFUSE_MAC_CRC
#define USE_IMPROV #define USE_IMPROV
#define USE_SOCKET_IMPL_BSD_SOCKETS #define USE_SOCKET_IMPL_BSD_SOCKETS
#define USE_WIFI_11KV_SUPPORT
#ifdef USE_ARDUINO #ifdef USE_ARDUINO
#define USE_ARDUINO_VERSION_CODE VERSION_CODE(1, 0, 6) #define USE_ARDUINO_VERSION_CODE VERSION_CODE(1, 0, 6)