mirror of
https://github.com/esphome/esphome.git
synced 2024-12-26 07:24:54 +01:00
wifi: support 802.11k and 802.11v (#3600)
This commit is contained in:
parent
5561d4eaeb
commit
b4bbe3d7b5
6 changed files with 43 additions and 1 deletions
|
@ -10,6 +10,8 @@ from esphome.const import (
|
|||
CONF_DNS1,
|
||||
CONF_DNS2,
|
||||
CONF_DOMAIN,
|
||||
CONF_ENABLE_BTM,
|
||||
CONF_ENABLE_RRM,
|
||||
CONF_FAST_CONNECT,
|
||||
CONF_GATEWAY,
|
||||
CONF_HIDDEN,
|
||||
|
@ -32,10 +34,10 @@ from esphome.const import (
|
|||
CONF_EAP,
|
||||
)
|
||||
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 . import wpa2_eap
|
||||
|
||||
|
||||
AUTO_LOAD = ["network"]
|
||||
|
||||
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.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(
|
||||
"This option has been removed. Please use the [disabled] option under the "
|
||||
"new mdns component instead."
|
||||
|
@ -373,6 +381,15 @@ async def to_code(config):
|
|||
elif CORE.is_esp32 and CORE.using_arduino:
|
||||
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")
|
||||
|
||||
# Register at end for OTA safe mode
|
||||
|
|
|
@ -166,6 +166,10 @@ WiFiComponent::WiFiComponent() { global_wifi_component = this; }
|
|||
bool WiFiComponent::has_ap() const { return this->has_ap_; }
|
||||
bool WiFiComponent::has_sta() const { return !this->sta_.empty(); }
|
||||
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() {
|
||||
if (this->has_sta())
|
||||
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, " DNS1: %s", wifi_dns_ip_(0).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() {
|
||||
|
|
|
@ -219,6 +219,11 @@ class WiFiComponent : public Component {
|
|||
bool has_sta() 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();
|
||||
std::string get_use_address() const;
|
||||
void set_use_address(const std::string &use_address);
|
||||
|
@ -327,6 +332,10 @@ class WiFiComponent : public Component {
|
|||
optional<float> output_power_;
|
||||
ESPPreferenceObject pref_;
|
||||
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)
|
||||
|
|
|
@ -285,6 +285,11 @@ bool WiFiComponent::wifi_sta_connect_(const WiFiAP &ap) {
|
|||
}
|
||||
#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()) {
|
||||
conf.sta.bssid_set = true;
|
||||
memcpy(conf.sta.bssid, ap.get_bssid()->data(), 6);
|
||||
|
|
|
@ -197,8 +197,10 @@ CONF_ECO2 = "eco2"
|
|||
CONF_EFFECT = "effect"
|
||||
CONF_EFFECTS = "effects"
|
||||
CONF_ELSE = "else"
|
||||
CONF_ENABLE_BTM = "enable_btm"
|
||||
CONF_ENABLE_IPV6 = "enable_ipv6"
|
||||
CONF_ENABLE_PIN = "enable_pin"
|
||||
CONF_ENABLE_RRM = "enable_rrm"
|
||||
CONF_ENABLE_TIME = "enable_time"
|
||||
CONF_ENERGY = "energy"
|
||||
CONF_ENTITY_CATEGORY = "entity_category"
|
||||
|
|
|
@ -70,6 +70,7 @@
|
|||
#define USE_ESP32_IGNORE_EFUSE_MAC_CRC
|
||||
#define USE_IMPROV
|
||||
#define USE_SOCKET_IMPL_BSD_SOCKETS
|
||||
#define USE_WIFI_11KV_SUPPORT
|
||||
|
||||
#ifdef USE_ARDUINO
|
||||
#define USE_ARDUINO_VERSION_CODE VERSION_CODE(1, 0, 6)
|
||||
|
|
Loading…
Reference in a new issue