mirror of
https://github.com/espressif/esp-idf.git
synced 2026-08-18 06:35:35 +03:00
Merge branch 'bugfix/backport_wifi_fixes_v6.0' into 'release/v6.0'
fix(wifi): backport some wifi fixes to v6.0 See merge request espressif/esp-idf!48386
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2023-2025 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2023-2026 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -54,6 +54,31 @@ static inline void pau_ll_set_regdma_entry_link_backup_start_enable(pau_dev_t *d
|
||||
dev->regdma_conf.start = enable;
|
||||
}
|
||||
|
||||
static inline void pau_ll_set_regdma_select_wifimac_link(pau_dev_t *dev)
|
||||
{
|
||||
dev->regdma_conf.sel_mac = 1;
|
||||
}
|
||||
|
||||
static inline void pau_ll_set_regdma_deselect_wifimac_link(pau_dev_t *dev)
|
||||
{
|
||||
dev->regdma_conf.sel_mac = 0;
|
||||
}
|
||||
|
||||
static inline void pau_ll_set_regdma_wifimac_link_backup_direction(pau_dev_t *dev, bool to_mem)
|
||||
{
|
||||
dev->regdma_conf.to_mem_mac = to_mem ? 1 : 0;
|
||||
}
|
||||
|
||||
static inline void pau_ll_set_regdma_wifimac_link_backup_start_enable(pau_dev_t *dev)
|
||||
{
|
||||
dev->regdma_conf.start_mac = 1;
|
||||
}
|
||||
|
||||
static inline void pau_ll_set_regdma_wifimac_link_backup_start_disable(pau_dev_t *dev)
|
||||
{
|
||||
dev->regdma_conf.start_mac = 0;
|
||||
}
|
||||
|
||||
static inline uint32_t pau_ll_get_regdma_current_link_addr(pau_dev_t *dev)
|
||||
{
|
||||
return dev->regdma_current_link_addr.val;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -32,6 +32,25 @@ void IRAM_ATTR pau_hal_stop_regdma_modem_link(pau_hal_context_t *hal)
|
||||
pau_ll_clear_regdma_backup_done_intr_state(hal->dev);
|
||||
}
|
||||
|
||||
#if SOC_PM_PAU_REGDMA_MODEM_WIFIMAC_WORKAROUND
|
||||
void IRAM_ATTR pau_hal_start_regdma_wifimac_link(pau_hal_context_t *hal, bool backup_or_restore)
|
||||
{
|
||||
pau_ll_clear_regdma_backup_done_intr_state(hal->dev);
|
||||
pau_ll_set_regdma_select_wifimac_link(hal->dev);
|
||||
pau_ll_set_regdma_wifimac_link_backup_direction(hal->dev, backup_or_restore);
|
||||
pau_ll_set_regdma_wifimac_link_backup_start_enable(hal->dev);
|
||||
|
||||
while (!(pau_ll_get_regdma_intr_raw_signal(hal->dev) & PAU_DONE_INT_RAW));
|
||||
}
|
||||
|
||||
void IRAM_ATTR pau_hal_stop_regdma_wifimac_link(pau_hal_context_t *hal)
|
||||
{
|
||||
pau_ll_set_regdma_wifimac_link_backup_start_disable(hal->dev);
|
||||
pau_ll_set_regdma_deselect_wifimac_link(hal->dev);
|
||||
pau_ll_clear_regdma_backup_done_intr_state(hal->dev);
|
||||
}
|
||||
#endif
|
||||
|
||||
void IRAM_ATTR pau_hal_start_regdma_extra_link(pau_hal_context_t *hal, bool backup_or_restore)
|
||||
{
|
||||
pau_ll_clear_regdma_backup_done_intr_state(hal->dev);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -61,6 +61,23 @@ void pau_hal_start_regdma_modem_link(pau_hal_context_t *hal, bool backup_or_rest
|
||||
* @param hal regdma hal context
|
||||
*/
|
||||
void pau_hal_stop_regdma_modem_link(pau_hal_context_t *hal);
|
||||
|
||||
#if SOC_PM_PAU_REGDMA_MODEM_WIFIMAC_WORKAROUND
|
||||
/**
|
||||
* @brief Start transmission on regdma WiFi MAC SEL link
|
||||
*
|
||||
* @param hal regdma hal context
|
||||
* @param backup_or_restore false: restore, true: backup
|
||||
*/
|
||||
void pau_hal_start_regdma_wifimac_link(pau_hal_context_t *hal, bool backup_or_restore);
|
||||
|
||||
/**
|
||||
* @brief Stop transmission on regdma WiFi MAC SEL link
|
||||
*
|
||||
* @param hal regdma hal context
|
||||
*/
|
||||
void pau_hal_stop_regdma_wifimac_link(pau_hal_context_t *hal);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if SOC_PM_RETENTION_SW_TRIGGER_REGDMA
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -41,6 +41,18 @@ void pau_regdma_trigger_modem_link_backup(void);
|
||||
* @brief Software trigger regdma to perform modem link restore
|
||||
*/
|
||||
void pau_regdma_trigger_modem_link_restore(void);
|
||||
|
||||
#if SOC_PM_PAU_REGDMA_MODEM_WIFIMAC_WORKAROUND
|
||||
/**
|
||||
* @brief Software trigger REGDMA backup on WiFi MAC SEL link
|
||||
*/
|
||||
void pau_regdma_trigger_wifimac_link_backup(void);
|
||||
|
||||
/**
|
||||
* @brief Software trigger REGDMA restore on WiFi MAC SEL link
|
||||
*/
|
||||
void pau_regdma_trigger_wifimac_link_restore(void);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if SOC_PM_RETENTION_SW_TRIGGER_REGDMA
|
||||
|
||||
@@ -83,8 +83,9 @@ void sleep_modem_mac_bb_power_up_prepare(void);
|
||||
* @brief The retention action in the modem state of WiFi PHY module
|
||||
*
|
||||
* @param restore true for restore the PHY context, false for backup the PHY context
|
||||
* @param wifimac_link_is_sel true to trigger REGDMA via WiFi MAC link
|
||||
*/
|
||||
void sleep_modem_wifi_do_phy_retention(bool restore);
|
||||
void sleep_modem_wifi_do_phy_retention(bool restore, bool wifimac_link_is_sel);
|
||||
|
||||
/**
|
||||
* @brief Get WiFi modem state
|
||||
|
||||
@@ -293,8 +293,10 @@ void sleep_retention_do_system_retention(bool backup_or_restore);
|
||||
*
|
||||
* @param backup_or_restore true for backup register context to memory
|
||||
* or false for restore to register from memory
|
||||
* @param wifimac_link_is_sel true to use dedicated WiFi MAC link,
|
||||
* false to use modem entry link
|
||||
*/
|
||||
void sleep_retention_do_phy_retention(bool backup_or_restore);
|
||||
void sleep_retention_do_phy_retention(bool backup_or_restore, bool wifimac_link_is_sel);
|
||||
#endif /*SOC_PM_SUPPORT_PMU_MODEM_STATE */
|
||||
#endif // SOC_PAU_SUPPORTED
|
||||
|
||||
|
||||
@@ -84,6 +84,18 @@ entries:
|
||||
sleep_modes: esp_sleep_enable_vbat_under_volt_wakeup (noflash)
|
||||
sleep_modes: esp_sleep_sub_mode_config (noflash)
|
||||
sleep_modes: esp_sleep_sub_mode_force_disable (noflash)
|
||||
if SOC_PM_MODEM_RETENTION_BY_REGDMA = y && ESP_PHY_MAC_BB_PD = y:
|
||||
sleep_retention:sleep_retention_find_link_by_id (noflash)
|
||||
regdma_link:regdma_find_link_by_id (noflash)
|
||||
regdma_link:regdma_link_get_next (noflash)
|
||||
regdma_link:regdma_link_get_next_continuous_wrapper (noflash)
|
||||
regdma_link:regdma_link_get_next_addr_map_wrapper (noflash)
|
||||
regdma_link:regdma_link_get_next_write_wait_wrapper (noflash)
|
||||
regdma_link:regdma_link_get_next_branch_continuous_wrapper (noflash)
|
||||
regdma_link:regdma_link_get_next_branch_addr_map_wrapper (noflash)
|
||||
regdma_link:regdma_link_get_next_branch_write_wait_wrapper (noflash)
|
||||
regdma_link:regdma_link_set_write_wait_content (noflash)
|
||||
regdma_link:regdma_link_get_instance (noflash)
|
||||
|
||||
[mapping:hal_gpio_pm]
|
||||
archive: libesp_hal_gpio.a
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -87,6 +87,20 @@ void IRAM_ATTR pau_regdma_trigger_modem_link_restore(void)
|
||||
pau_hal_start_regdma_modem_link(PAU_instance()->hal, false);
|
||||
pau_hal_stop_regdma_modem_link(PAU_instance()->hal);
|
||||
}
|
||||
|
||||
#if SOC_PM_PAU_REGDMA_MODEM_WIFIMAC_WORKAROUND
|
||||
void IRAM_ATTR pau_regdma_trigger_wifimac_link_backup(void)
|
||||
{
|
||||
pau_hal_start_regdma_wifimac_link(PAU_instance()->hal, true);
|
||||
pau_hal_stop_regdma_wifimac_link(PAU_instance()->hal);
|
||||
}
|
||||
|
||||
void IRAM_ATTR pau_regdma_trigger_wifimac_link_restore(void)
|
||||
{
|
||||
pau_hal_start_regdma_wifimac_link(PAU_instance()->hal, false);
|
||||
pau_hal_stop_regdma_wifimac_link(PAU_instance()->hal);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if SOC_PM_RETENTION_SW_TRIGGER_REGDMA
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -318,43 +318,43 @@ void * regdma_link_init(const regdma_link_config_t *config, bool branch, int mod
|
||||
return link;
|
||||
}
|
||||
|
||||
static void * regdma_link_get_next_continuous_wrapper(void *link)
|
||||
__attribute__((used, noinline)) static void * regdma_link_get_next_continuous_wrapper(void *link)
|
||||
{
|
||||
regdma_link_continuous_t *continuous = __containerof(link, regdma_link_continuous_t, head);
|
||||
return (void *)(continuous->body.next);
|
||||
}
|
||||
|
||||
static void * regdma_link_get_next_addr_map_wrapper(void *link)
|
||||
__attribute__((used, noinline)) static void * regdma_link_get_next_addr_map_wrapper(void *link)
|
||||
{
|
||||
regdma_link_addr_map_t *addr_map = __containerof(link, regdma_link_addr_map_t, head);
|
||||
return (void *)(addr_map->body.next);
|
||||
}
|
||||
|
||||
static void * regdma_link_get_next_write_wait_wrapper(void *link)
|
||||
__attribute__((used, noinline)) static void * regdma_link_get_next_write_wait_wrapper(void *link)
|
||||
{
|
||||
regdma_link_write_wait_t *write_wait = __containerof(link, regdma_link_write_wait_t, head);
|
||||
return (void *)(write_wait->body.next);
|
||||
}
|
||||
|
||||
static regdma_entry_buf_t * regdma_link_get_next_branch_continuous_wrapper(void *link)
|
||||
__attribute__((used, noinline)) static regdma_entry_buf_t * regdma_link_get_next_branch_continuous_wrapper(void *link)
|
||||
{
|
||||
regdma_link_branch_continuous_t *branch_continuous = __containerof(link, regdma_link_branch_continuous_t, head);
|
||||
return &branch_continuous->body.next;
|
||||
}
|
||||
|
||||
static regdma_entry_buf_t * regdma_link_get_next_branch_addr_map_wrapper(void *link)
|
||||
__attribute__((used, noinline)) static regdma_entry_buf_t * regdma_link_get_next_branch_addr_map_wrapper(void *link)
|
||||
{
|
||||
regdma_link_branch_addr_map_t *branch_addr_map = __containerof(link, regdma_link_branch_addr_map_t, head);
|
||||
return &branch_addr_map->body.next;
|
||||
}
|
||||
|
||||
static regdma_entry_buf_t * regdma_link_get_next_branch_write_wait_wrapper(void *link)
|
||||
__attribute__((used, noinline)) static regdma_entry_buf_t * regdma_link_get_next_branch_write_wait_wrapper(void *link)
|
||||
{
|
||||
regdma_link_branch_write_wait_t *branch_write_wait = __containerof(link, regdma_link_branch_write_wait_t, head);
|
||||
return &branch_write_wait->body.next;
|
||||
}
|
||||
|
||||
static void * regdma_link_get_next(void *link, int entry)
|
||||
__attribute__((used, noinline)) static void * regdma_link_get_next(void *link, int entry)
|
||||
{
|
||||
if (link) {
|
||||
regdma_link_head_t head = REGDMA_LINK_HEAD(link);
|
||||
@@ -407,7 +407,7 @@ void * regdma_link_recursive(void *link, int entry, void (*hook)(void *, int, in
|
||||
return regdma_link_recursive_impl(link, entry, 0, hook);
|
||||
}
|
||||
|
||||
static void * regdma_link_get_instance(void *link)
|
||||
__attribute__((used, noinline)) static void * regdma_link_get_instance(void *link)
|
||||
{
|
||||
void * container_memaddr[] = {
|
||||
(void *)__containerof(link, regdma_link_continuous_t, head),
|
||||
|
||||
@@ -171,10 +171,10 @@ __attribute__((unused)) void sleep_modem_wifi_modem_state_deinit(void)
|
||||
}
|
||||
}
|
||||
|
||||
void IRAM_ATTR sleep_modem_wifi_do_phy_retention(bool restore)
|
||||
void IRAM_ATTR sleep_modem_wifi_do_phy_retention(bool restore, bool wifimac_link_is_sel)
|
||||
{
|
||||
sleep_modem_state_phy_link_config(s_sleep_modem.wifi.phy_link, 1);
|
||||
sleep_retention_do_phy_retention(!restore);
|
||||
sleep_retention_do_phy_retention(!restore, wifimac_link_is_sel);
|
||||
sleep_modem_state_phy_link_config(s_sleep_modem.wifi.phy_link, 0);
|
||||
if (!restore) {
|
||||
s_sleep_modem.wifi.modem_state_phy_done = 1;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -1007,7 +1007,7 @@ void IRAM_ATTR sleep_retention_do_system_retention(bool backup_or_restore)
|
||||
#endif
|
||||
|
||||
#if SOC_PM_SUPPORT_PMU_MODEM_STATE
|
||||
void IRAM_ATTR sleep_retention_do_phy_retention(bool backup_or_restore)
|
||||
void IRAM_ATTR sleep_retention_do_phy_retention(bool backup_or_restore, bool wifimac_link_is_sel)
|
||||
{
|
||||
/* since the PHY link and other module links are within the sleep-retention entry (4) context,
|
||||
* add mutex protection to avoid data race.
|
||||
@@ -1016,9 +1016,23 @@ void IRAM_ATTR sleep_retention_do_phy_retention(bool backup_or_restore)
|
||||
_lock_acquire_recursive(&s_retention.lock);
|
||||
#endif
|
||||
if (backup_or_restore) {
|
||||
pau_regdma_trigger_modem_link_backup();
|
||||
#if SOC_PM_PAU_REGDMA_MODEM_WIFIMAC_WORKAROUND
|
||||
if (wifimac_link_is_sel) {
|
||||
pau_regdma_trigger_wifimac_link_backup();
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
pau_regdma_trigger_modem_link_backup();
|
||||
}
|
||||
} else {
|
||||
pau_regdma_trigger_modem_link_restore();
|
||||
#if SOC_PM_PAU_REGDMA_MODEM_WIFIMAC_WORKAROUND
|
||||
if (wifimac_link_is_sel) {
|
||||
pau_regdma_trigger_wifimac_link_restore();
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
pau_regdma_trigger_modem_link_restore();
|
||||
}
|
||||
}
|
||||
#if SOC_PM_PAU_REGDMA_COMMON_PHY_LINK_ENTRY
|
||||
_lock_release_recursive(&s_retention.lock);
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include "esp_private/esp_sleep_internal.h"
|
||||
#include "esp_check.h"
|
||||
#include "sdkconfig.h"
|
||||
#include "soc/soc_caps.h"
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/portmacro.h"
|
||||
#include "endian.h"
|
||||
@@ -73,6 +74,9 @@ extern wifi_mac_time_update_cb_t s_wifi_mac_time_update_cb;
|
||||
#if SOC_PM_SUPPORT_PMU_MODEM_STATE && CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP
|
||||
extern void pm_mac_modem_clear_rf_power_state(void);
|
||||
extern bool pm_mac_modem_rf_already_enabled(void);
|
||||
#if SOC_PM_PAU_REGDMA_LINK_IDX_WIFIMAC
|
||||
extern bool pm_get_wifimac_regdma_link_selection(void);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
static const char* TAG = "phy_init";
|
||||
@@ -341,9 +345,23 @@ void esp_phy_enable(esp_phy_modem_t modem)
|
||||
s_is_phy_calibrated = true;
|
||||
} else {
|
||||
#if SOC_PM_SUPPORT_PMU_MODEM_STATE && CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP
|
||||
bool wifimac_link_is_sel = false;
|
||||
if (!pm_mac_modem_rf_already_enabled()) {
|
||||
if (sleep_modem_wifi_modem_state_enabled() && sleep_modem_wifi_modem_link_done()) {
|
||||
sleep_modem_wifi_do_phy_retention(true);
|
||||
#if SOC_PM_PAU_REGDMA_LINK_IDX_WIFIMAC && SOC_PM_PAU_REGDMA_MODEM_WIFIMAC_WORKAROUND
|
||||
/*
|
||||
* A race exists between SoC wakeup and modem state sleep. After modem initiates sleep,
|
||||
* SoC may wake up before REGDMA completes RF close, leaving mac_modem_sleep_flag uncleared
|
||||
* (it depends on regdma done). The stale flag can incorrectly trigger a sleep request
|
||||
* on the next modem entry, causing abnormal sleep behavior.
|
||||
*
|
||||
* Therefore, this workaround ensures that mac_modem_sleep_flag is properly
|
||||
* cleared by regdma closing RF with wifimac link.
|
||||
* See WIFI-7246 for details.
|
||||
*/
|
||||
wifimac_link_is_sel = pm_get_wifimac_regdma_link_selection();
|
||||
#endif
|
||||
sleep_modem_wifi_do_phy_retention(true, wifimac_link_is_sel);
|
||||
} else {
|
||||
// TODO: IDF-15338
|
||||
#if CONFIG_IDF_TARGET_ESP32C5
|
||||
@@ -419,7 +437,11 @@ void esp_phy_disable(esp_phy_modem_t modem)
|
||||
#if SOC_PM_SUPPORT_PMU_MODEM_STATE && CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP
|
||||
pm_mac_modem_clear_rf_power_state();
|
||||
if (sleep_modem_wifi_modem_state_enabled()) {
|
||||
sleep_modem_wifi_do_phy_retention(false);
|
||||
bool wifimac_link_is_sel = false;
|
||||
#if SOC_PM_PAU_REGDMA_LINK_IDX_WIFIMAC && SOC_PM_PAU_REGDMA_MODEM_WIFIMAC_WORKAROUND
|
||||
wifimac_link_is_sel = pm_get_wifimac_regdma_link_selection();
|
||||
#endif
|
||||
sleep_modem_wifi_do_phy_retention(false, wifimac_link_is_sel);
|
||||
} else
|
||||
#endif /* SOC_PM_SUPPORT_PMU_MODEM_STATE && CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP */
|
||||
{
|
||||
|
||||
@@ -882,8 +882,8 @@ ampdu_dispatch_as_many_as_possible = 0x4000182c;
|
||||
ampdu_dispatch_movement = 0x40001830;
|
||||
ampdu_dispatch_upto = 0x40001834;
|
||||
chm_is_at_home_channel = 0x40001838;
|
||||
cnx_node_is_existing = 0x4000183c;
|
||||
cnx_node_search = 0x40001840;
|
||||
/*cnx_node_is_existing = 0x4000183c;*/
|
||||
/*cnx_node_search = 0x40001840;*/
|
||||
ic_ebuf_recycle_rx = 0x40001844;
|
||||
ic_ebuf_recycle_tx = 0x40001848;
|
||||
ic_reset_rx_ba = 0x4000184c;
|
||||
|
||||
@@ -26,8 +26,8 @@ ampdu_dispatch_as_many_as_possible = 0x40000b28;
|
||||
ampdu_dispatch_movement = 0x40000b2c;
|
||||
ampdu_dispatch_upto = 0x40000b30;
|
||||
chm_is_at_home_channel = 0x40000b34;
|
||||
cnx_node_is_existing = 0x40000b38;
|
||||
cnx_node_search = 0x40000b3c;
|
||||
/*cnx_node_is_existing = 0x40000b38;*/
|
||||
/*cnx_node_search = 0x40000b3c;*/
|
||||
ic_ebuf_recycle_rx = 0x40000b40;
|
||||
ic_ebuf_recycle_tx = 0x40000b44;
|
||||
ic_reset_rx_ba = 0x40000b48;
|
||||
|
||||
@@ -25,8 +25,8 @@ ampdu_dispatch_as_many_as_possible = 0x40000b58;
|
||||
ampdu_dispatch_movement = 0x40000b5c;
|
||||
ampdu_dispatch_upto = 0x40000b60;
|
||||
chm_is_at_home_channel = 0x40000b64;
|
||||
cnx_node_is_existing = 0x40000b68;
|
||||
cnx_node_search = 0x40000b6c;
|
||||
/*cnx_node_is_existing = 0x40000b68;*/
|
||||
/*cnx_node_search = 0x40000b6c;*/
|
||||
ic_ebuf_recycle_rx = 0x40000b70;
|
||||
ic_ebuf_recycle_tx = 0x40000b74;
|
||||
ic_reset_rx_ba = 0x40000b78;
|
||||
|
||||
@@ -27,7 +27,7 @@ pm_set_beacon_filter = 0x40000cd8;
|
||||
//pm_is_in_wifi_slice_threshold = 0x40000cdc;
|
||||
//pm_keep_alive = 0x40000ce4;
|
||||
pm_process_tim = 0x40000d14;
|
||||
pm_tbtt_process = 0x40000d28;
|
||||
//pm_tbtt_process = 0x40000d28;
|
||||
pm_tx_data_process = 0x40000d44;
|
||||
pm_twt_process = 0x40000d54;
|
||||
pm_mac_try_enable_modem_state = 0x40000d68;
|
||||
|
||||
@@ -22,8 +22,8 @@ ampdu_dispatch_as_many_as_possible = 0x40000a90;
|
||||
ampdu_dispatch_movement = 0x40000a94;
|
||||
ampdu_dispatch_upto = 0x40000a98;
|
||||
chm_is_at_home_channel = 0x40000a9c;
|
||||
cnx_node_is_existing = 0x40000aa0;
|
||||
cnx_node_search = 0x40000aa4;
|
||||
/*cnx_node_is_existing = 0x40000aa0;*/
|
||||
/*cnx_node_search = 0x40000aa4;*/
|
||||
ic_ebuf_recycle_rx = 0x40000aa8;
|
||||
ic_ebuf_recycle_tx = 0x40000aac;
|
||||
ic_reset_rx_ba = 0x40000ab0;
|
||||
|
||||
@@ -124,7 +124,7 @@ pm_on_isr_set_twt_target = 0x40000d00;
|
||||
pm_on_isr_twt_wake = 0x40000d04;
|
||||
pm_on_tsf_timer = 0x40000d08;
|
||||
pm_on_twt_force_tx = 0x40000d0c;
|
||||
pm_parse_beacon = 0x40000d10;
|
||||
//pm_parse_beacon = 0x40000d10;
|
||||
/*pm_process_tim = 0x40000d14;*/
|
||||
pm_rx_beacon_process = 0x40000d18;
|
||||
pm_rx_data_process = 0x40000d1c;
|
||||
|
||||
@@ -76,7 +76,7 @@ idf_component_register(SRCS "${srcs}"
|
||||
INCLUDE_DIRS "include" "include/local" "wifi_apps/include" "wifi_apps/nan_app/include"
|
||||
|
||||
REQUIRES esp_event esp_phy esp_netif
|
||||
PRIV_REQUIRES esp_pm esp_timer nvs_flash
|
||||
PRIV_REQUIRES esp_pm esp_timer nvs_flash efuse
|
||||
wpa_supplicant hal lwip esp_coex
|
||||
PRIV_INCLUDE_DIRS ../wpa_supplicant/src/ ../wpa_supplicant/esp_supplicant/src/
|
||||
wifi_apps/roaming_app/include wifi_apps/roaming_app/src
|
||||
|
||||
@@ -459,7 +459,8 @@ menu "Wi-Fi"
|
||||
config ESP_WIFI_SLP_BEACON_LOST_TIMEOUT
|
||||
int "Beacon loss timeout"
|
||||
range 5 100
|
||||
default 10
|
||||
default 25 if ESP_COEX_SW_COEXIST_ENABLE
|
||||
default 10 if (!ESP_COEX_SW_COEXIST_ENABLE)
|
||||
depends on ESP_WIFI_SLP_BEACON_LOST_OPT
|
||||
help
|
||||
Timeout time for close rf phy when beacon loss occurs, Unit: 1024 microsecond.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -641,6 +641,11 @@ static void esp_phy_disable_wrapper(void)
|
||||
esp_phy_disable(PHY_MODEM_WIFI);
|
||||
}
|
||||
|
||||
static bool esp_wifi_disable_ac_ax_wrapper(void)
|
||||
{
|
||||
return false; // disable 11ac and 11ax is not supported on esp32c5.
|
||||
}
|
||||
|
||||
wifi_osi_funcs_t g_wifi_osi_funcs = {
|
||||
._version = ESP_WIFI_OS_ADAPTER_VERSION,
|
||||
._env_is_chip = esp_coex_common_env_is_chip_wrapper,
|
||||
@@ -764,5 +769,6 @@ wifi_osi_funcs_t g_wifi_osi_funcs = {
|
||||
._coex_schm_flexible_period_set = coex_schm_flexible_period_set_wrapper,
|
||||
._coex_schm_flexible_period_get = coex_schm_flexible_period_get_wrapper,
|
||||
._coex_schm_get_phase_by_idx = coex_schm_get_phase_by_idx_wrapper,
|
||||
._wifi_disable_ac_ax = esp_wifi_disable_ac_ax_wrapper,
|
||||
._magic = ESP_WIFI_OS_ADAPTER_MAGIC,
|
||||
};
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -568,17 +568,22 @@ static void esp_phy_disable_wrapper(void)
|
||||
}
|
||||
|
||||
#if SOC_PM_MODEM_RETENTION_BY_REGDMA
|
||||
static void regdma_link_set_write_wait_content_wrapper(void *addr, uint32_t value, uint32_t mask)
|
||||
static void IRAM_ATTR regdma_link_set_write_wait_content_wrapper(void *addr, uint32_t value, uint32_t mask)
|
||||
{
|
||||
regdma_link_set_write_wait_content(addr, value, mask);
|
||||
}
|
||||
|
||||
static void *sleep_retention_find_link_by_id_wrapper(int id)
|
||||
static void *IRAM_ATTR sleep_retention_find_link_by_id_wrapper(int id)
|
||||
{
|
||||
return sleep_retention_find_link_by_id(id);
|
||||
}
|
||||
#endif
|
||||
|
||||
static bool esp_wifi_disable_ac_ax_wrapper(void)
|
||||
{
|
||||
return false; // disable 11ac and 11ax is not supported on esp32c6.
|
||||
}
|
||||
|
||||
wifi_osi_funcs_t g_wifi_osi_funcs = {
|
||||
._version = ESP_WIFI_OS_ADAPTER_VERSION,
|
||||
._env_is_chip = esp_coex_common_env_is_chip_wrapper,
|
||||
@@ -702,5 +707,6 @@ wifi_osi_funcs_t g_wifi_osi_funcs = {
|
||||
._coex_schm_flexible_period_set = coex_schm_flexible_period_set_wrapper,
|
||||
._coex_schm_flexible_period_get = coex_schm_flexible_period_get_wrapper,
|
||||
._coex_schm_get_phase_by_idx = coex_schm_get_phase_by_idx_wrapper,
|
||||
._wifi_disable_ac_ax = esp_wifi_disable_ac_ax_wrapper,
|
||||
._magic = ESP_WIFI_OS_ADAPTER_MAGIC,
|
||||
};
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -40,6 +40,8 @@
|
||||
#include "esp_private/periph_ctrl.h"
|
||||
#include "esp_private/esp_clk.h"
|
||||
#include "nvs.h"
|
||||
#include "esp_efuse.h"
|
||||
#include "esp_efuse_table.h"
|
||||
#include "os.h"
|
||||
#include "esp_smartconfig.h"
|
||||
#ifdef CONFIG_ESP_COEX_ENABLED
|
||||
@@ -641,6 +643,11 @@ static void esp_phy_disable_wrapper(void)
|
||||
esp_phy_disable(PHY_MODEM_WIFI);
|
||||
}
|
||||
|
||||
static bool esp_wifi_disable_ac_ax_wrapper(void)
|
||||
{
|
||||
return esp_efuse_read_field_bit(ESP_EFUSE_DIS_WIFI6);
|
||||
}
|
||||
|
||||
wifi_osi_funcs_t g_wifi_osi_funcs = {
|
||||
._version = ESP_WIFI_OS_ADAPTER_VERSION,
|
||||
._env_is_chip = esp_coex_common_env_is_chip_wrapper,
|
||||
@@ -764,5 +771,6 @@ wifi_osi_funcs_t g_wifi_osi_funcs = {
|
||||
._coex_schm_flexible_period_set = coex_schm_flexible_period_set_wrapper,
|
||||
._coex_schm_flexible_period_get = coex_schm_flexible_period_get_wrapper,
|
||||
._coex_schm_get_phase_by_idx = coex_schm_get_phase_by_idx_wrapper,
|
||||
._wifi_disable_ac_ax = esp_wifi_disable_ac_ax_wrapper,
|
||||
._magic = ESP_WIFI_OS_ADAPTER_MAGIC,
|
||||
};
|
||||
|
||||
@@ -156,6 +156,9 @@ typedef struct wifi_osi_funcs_t {
|
||||
int (*_coex_schm_flexible_period_set)(uint8_t);
|
||||
uint8_t (*_coex_schm_flexible_period_get)(void);
|
||||
void * (*_coex_schm_get_phase_by_idx)(int);
|
||||
#if CONFIG_SOC_WIFI_HE_SUPPORT
|
||||
bool (*_wifi_disable_ac_ax)(void);
|
||||
#endif
|
||||
int32_t _magic;
|
||||
} wifi_osi_funcs_t;
|
||||
|
||||
|
||||
@@ -779,8 +779,9 @@ esp_err_t esp_wifi_get_bandwidth(wifi_interface_t ifx, wifi_bandwidth_t *bw);
|
||||
*
|
||||
* @attention 1. This API should be called after esp_wifi_start() and before esp_wifi_stop()
|
||||
* @attention 2. When device is in STA mode, this API should not be called when STA is scanning or connecting to an external AP
|
||||
* @attention 3. When device is in softAP mode, this API should not be called when softAP has connected to external STAs
|
||||
* @attention 4. When device is in STA+softAP mode, this API should not be called when in the scenarios described above
|
||||
* @attention 3. When device is in softAP mode and has connected to external STAs, it initiates the CSA process
|
||||
* @attention 4. When device is in STA+softAP mode, this API should not be called when STA is scanning or connecting to an external AP
|
||||
* or softAP has connected to external STAs.
|
||||
* @attention 5. The channel info set by this API will not be stored in NVS. So If you want to remember the channel used before WiFi stop,
|
||||
* you need to call this API again after WiFi start, or you can call `esp_wifi_set_config()` to store the channel info in NVS.
|
||||
* @attention 6. When operating in 5 GHz band, the second channel is automatically determined by the primary channel according to the 802.11 standard.
|
||||
|
||||
@@ -529,7 +529,7 @@ typedef struct {
|
||||
uint8_t channel; /**< Channel of soft-AP. Set to 0 for auto selection (min channel: typically 1 for 2.4G, 36 for 5G). Other invalid values return ESP_ERR_INVALID_ARG. */
|
||||
wifi_auth_mode_t authmode; /**< Auth mode of soft-AP. Do not support AUTH_WEP, AUTH_WAPI_PSK and AUTH_OWE in soft-AP mode. When the auth mode is set to WPA2_PSK, WPA2_WPA3_PSK or WPA3_PSK, the pairwise cipher will be overwritten with WIFI_CIPHER_TYPE_CCMP by default, unless explicitly set. */
|
||||
uint8_t ssid_hidden; /**< Broadcast SSID or not, default 0, broadcast the SSID */
|
||||
uint8_t max_connection; /**< Max number of stations allowed to connect in */
|
||||
uint8_t max_connection; /**< Max number of stations allowed to connect in. Please note that soft-AP and ESP-NOW share the same encryption hardware keys, so the max_connection parameter will be affected by CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM. */
|
||||
uint16_t beacon_interval; /**< Beacon interval which should be multiples of 100. Unit: TU(time unit, 1 TU = 1024 us). Range: 100 ~ 60000. Default value: 100 */
|
||||
uint8_t csa_count; /**< Channel Switch Announcement Count. Notify the station that the channel will switch after the csa_count beacon intervals. Default value: 3 */
|
||||
uint8_t dtim_period; /**< Dtim period of soft-AP. Range: 1 ~ 10. Default value: 1 */
|
||||
@@ -1488,7 +1488,6 @@ typedef struct {
|
||||
bool dcm; /**< Using dcm rate to send frame */
|
||||
} wifi_tx_rate_config_t;
|
||||
|
||||
#define WIFI_MAX_SUPPORT_COUNTRY_NUM 176 /**< max number of supported countries */
|
||||
#ifdef CONFIG_SOC_WIFI_SUPPORT_5G
|
||||
#define WIFI_MAX_REGULATORY_RULE_NUM 7 /**< max number of regulatory rules */
|
||||
#else
|
||||
|
||||
@@ -18,10 +18,8 @@ extern "C" {
|
||||
|
||||
#if CONFIG_IDF_TARGET_ESP32C2
|
||||
#define ESP_WIFI_MAX_CONN_NUM (4) /**< max number of stations which can connect to ESP32C2 soft-AP */
|
||||
#elif CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C61
|
||||
#define ESP_WIFI_MAX_CONN_NUM (10) /**< max number of stations which can connect to ESP32C3/ESP32C6/ESP32C5/ESP32C61 soft-AP */
|
||||
#else
|
||||
#define ESP_WIFI_MAX_CONN_NUM (15) /**< max number of stations which can connect to ESP32/ESP32S3/ESP32S2 soft-AP */
|
||||
#define ESP_WIFI_MAX_CONN_NUM (15)
|
||||
#endif
|
||||
|
||||
/** @brief List of stations associated with the Soft-AP */
|
||||
|
||||
Submodule components/esp_wifi/lib updated: cdb85041a2...e65c4d335e
@@ -5,8 +5,6 @@
|
||||
|
||||
`esp_wifi_regulatory.c` is generated from `esp_wifi_regulatory.txt` by using the `reg2fw.py` script.
|
||||
|
||||
The num of all suppported countries in `esp_wifi_regulatory.txt` is `WIFI_MAX_SUPPORT_COUNTRY_NUM` that is defined in `esp_wifi_types_generic.h`
|
||||
|
||||
- Generate `esp_wifi_regulatory.c`
|
||||
- `cd ~/esp-idf/components/esp_wifi/regulatory`
|
||||
- `python reg2fw.py`
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2025-2026 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -25,7 +25,6 @@ typedef enum {
|
||||
ESP_WIFI_REGULATORY_TYPE_NCC,
|
||||
ESP_WIFI_REGULATORY_TYPE_FCC,
|
||||
ESP_WIFI_REGULATORY_TYPE_AF,
|
||||
ESP_WIFI_REGULATORY_TYPE_AI,
|
||||
ESP_WIFI_REGULATORY_TYPE_AM,
|
||||
ESP_WIFI_REGULATORY_TYPE_AS,
|
||||
ESP_WIFI_REGULATORY_TYPE_AZ,
|
||||
@@ -35,6 +34,7 @@ typedef enum {
|
||||
ESP_WIFI_REGULATORY_TYPE_BN,
|
||||
ESP_WIFI_REGULATORY_TYPE_BO,
|
||||
ESP_WIFI_REGULATORY_TYPE_BS,
|
||||
ESP_WIFI_REGULATORY_TYPE_BW,
|
||||
ESP_WIFI_REGULATORY_TYPE_BZ,
|
||||
ESP_WIFI_REGULATORY_TYPE_CF,
|
||||
ESP_WIFI_REGULATORY_TYPE_CR,
|
||||
@@ -43,13 +43,13 @@ typedef enum {
|
||||
ESP_WIFI_REGULATORY_TYPE_DZ,
|
||||
ESP_WIFI_REGULATORY_TYPE_EC,
|
||||
ESP_WIFI_REGULATORY_TYPE_EG,
|
||||
ESP_WIFI_REGULATORY_TYPE_FO,
|
||||
ESP_WIFI_REGULATORY_TYPE_GB,
|
||||
ESP_WIFI_REGULATORY_TYPE_GD,
|
||||
ESP_WIFI_REGULATORY_TYPE_GT,
|
||||
ESP_WIFI_REGULATORY_TYPE_GU,
|
||||
ESP_WIFI_REGULATORY_TYPE_HR,
|
||||
ESP_WIFI_REGULATORY_TYPE_ID,
|
||||
ESP_WIFI_REGULATORY_TYPE_IL,
|
||||
ESP_WIFI_REGULATORY_TYPE_IR,
|
||||
ESP_WIFI_REGULATORY_TYPE_JO,
|
||||
ESP_WIFI_REGULATORY_TYPE_KE,
|
||||
@@ -73,11 +73,10 @@ typedef enum {
|
||||
ESP_WIFI_REGULATORY_TYPE_RU,
|
||||
ESP_WIFI_REGULATORY_TYPE_SG,
|
||||
ESP_WIFI_REGULATORY_TYPE_SV,
|
||||
ESP_WIFI_REGULATORY_TYPE_SX,
|
||||
ESP_WIFI_REGULATORY_TYPE_SY,
|
||||
ESP_WIFI_REGULATORY_TYPE_TC,
|
||||
ESP_WIFI_REGULATORY_TYPE_TG,
|
||||
ESP_WIFI_REGULATORY_TYPE_TR,
|
||||
ESP_WIFI_REGULATORY_TYPE_TZ,
|
||||
ESP_WIFI_REGULATORY_TYPE_UA,
|
||||
ESP_WIFI_REGULATORY_TYPE_VE,
|
||||
ESP_WIFI_REGULATORY_TYPE_VN,
|
||||
@@ -87,13 +86,17 @@ typedef enum {
|
||||
ESP_WIFI_REGULATORY_TYPE_MAX,
|
||||
} esp_wifi_regulatory_type_t;
|
||||
|
||||
const wifi_regdomain_t regdomain_table[WIFI_MAX_SUPPORT_COUNTRY_NUM] = {
|
||||
/*
|
||||
* regdomain_table: ISO alpha-2 country codes and their regulatory profile indices.
|
||||
* Last row is a sentinel (not a real country code).
|
||||
*/
|
||||
const wifi_regdomain_t regdomain_table[] = {
|
||||
{"01", ESP_WIFI_REGULATORY_TYPE_DEFAULT},
|
||||
{"EU", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"AD", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"AE", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"AF", ESP_WIFI_REGULATORY_TYPE_AF},
|
||||
{"AI", ESP_WIFI_REGULATORY_TYPE_AI},
|
||||
{"AI", ESP_WIFI_REGULATORY_TYPE_AF},
|
||||
{"AL", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"AM", ESP_WIFI_REGULATORY_TYPE_AM},
|
||||
{"AN", ESP_WIFI_REGULATORY_TYPE_AF},
|
||||
@@ -117,6 +120,7 @@ const wifi_regdomain_t regdomain_table[WIFI_MAX_SUPPORT_COUNTRY_NUM] = {
|
||||
{"BR", ESP_WIFI_REGULATORY_TYPE_ANATEL},
|
||||
{"BS", ESP_WIFI_REGULATORY_TYPE_BS},
|
||||
{"BT", ESP_WIFI_REGULATORY_TYPE_AF},
|
||||
{"BW", ESP_WIFI_REGULATORY_TYPE_BW},
|
||||
{"BY", ESP_WIFI_REGULATORY_TYPE_AF},
|
||||
{"BZ", ESP_WIFI_REGULATORY_TYPE_BZ},
|
||||
{"CA", ESP_WIFI_REGULATORY_TYPE_ISED},
|
||||
@@ -143,14 +147,16 @@ const wifi_regdomain_t regdomain_table[WIFI_MAX_SUPPORT_COUNTRY_NUM] = {
|
||||
{"ET", ESP_WIFI_REGULATORY_TYPE_AF},
|
||||
{"FI", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"FM", ESP_WIFI_REGULATORY_TYPE_AS},
|
||||
{"FO", ESP_WIFI_REGULATORY_TYPE_FO},
|
||||
{"FR", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"GB", ESP_WIFI_REGULATORY_TYPE_GB},
|
||||
{"GD", ESP_WIFI_REGULATORY_TYPE_GD},
|
||||
{"GE", ESP_WIFI_REGULATORY_TYPE_AZ},
|
||||
{"GF", ESP_WIFI_REGULATORY_TYPE_AI},
|
||||
{"GF", ESP_WIFI_REGULATORY_TYPE_AF},
|
||||
{"GH", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"GL", ESP_WIFI_REGULATORY_TYPE_AI},
|
||||
{"GP", ESP_WIFI_REGULATORY_TYPE_AI},
|
||||
{"GI", ESP_WIFI_REGULATORY_TYPE_FO},
|
||||
{"GL", ESP_WIFI_REGULATORY_TYPE_AF},
|
||||
{"GP", ESP_WIFI_REGULATORY_TYPE_AF},
|
||||
{"GR", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"GT", ESP_WIFI_REGULATORY_TYPE_GT},
|
||||
{"GU", ESP_WIFI_REGULATORY_TYPE_GU},
|
||||
@@ -162,7 +168,8 @@ const wifi_regdomain_t regdomain_table[WIFI_MAX_SUPPORT_COUNTRY_NUM] = {
|
||||
{"HU", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"ID", ESP_WIFI_REGULATORY_TYPE_ID},
|
||||
{"IE", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"IL", ESP_WIFI_REGULATORY_TYPE_IL},
|
||||
{"IL", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"IM", ESP_WIFI_REGULATORY_TYPE_FO},
|
||||
{"IN", ESP_WIFI_REGULATORY_TYPE_WPC},
|
||||
{"IR", ESP_WIFI_REGULATORY_TYPE_IR},
|
||||
{"IS", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
@@ -190,13 +197,13 @@ const wifi_regdomain_t regdomain_table[WIFI_MAX_SUPPORT_COUNTRY_NUM] = {
|
||||
{"MC", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"MD", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"ME", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"MF", ESP_WIFI_REGULATORY_TYPE_AI},
|
||||
{"MF", ESP_WIFI_REGULATORY_TYPE_AF},
|
||||
{"MH", ESP_WIFI_REGULATORY_TYPE_AS},
|
||||
{"MK", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"MN", ESP_WIFI_REGULATORY_TYPE_BS},
|
||||
{"MO", ESP_WIFI_REGULATORY_TYPE_MO},
|
||||
{"MP", ESP_WIFI_REGULATORY_TYPE_AS},
|
||||
{"MQ", ESP_WIFI_REGULATORY_TYPE_AI},
|
||||
{"MQ", ESP_WIFI_REGULATORY_TYPE_AF},
|
||||
{"MR", ESP_WIFI_REGULATORY_TYPE_AF},
|
||||
{"MT", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"MU", ESP_WIFI_REGULATORY_TYPE_BS},
|
||||
@@ -214,18 +221,18 @@ const wifi_regdomain_t regdomain_table[WIFI_MAX_SUPPORT_COUNTRY_NUM] = {
|
||||
{"OM", ESP_WIFI_REGULATORY_TYPE_OM},
|
||||
{"PA", ESP_WIFI_REGULATORY_TYPE_PA},
|
||||
{"PE", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"PF", ESP_WIFI_REGULATORY_TYPE_AI},
|
||||
{"PF", ESP_WIFI_REGULATORY_TYPE_AF},
|
||||
{"PG", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"PH", ESP_WIFI_REGULATORY_TYPE_PH},
|
||||
{"PK", ESP_WIFI_REGULATORY_TYPE_PK},
|
||||
{"PL", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"PM", ESP_WIFI_REGULATORY_TYPE_AI},
|
||||
{"PM", ESP_WIFI_REGULATORY_TYPE_AF},
|
||||
{"PR", ESP_WIFI_REGULATORY_TYPE_GD},
|
||||
{"PT", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"PW", ESP_WIFI_REGULATORY_TYPE_AS},
|
||||
{"PY", ESP_WIFI_REGULATORY_TYPE_BS},
|
||||
{"QA", ESP_WIFI_REGULATORY_TYPE_QA},
|
||||
{"RE", ESP_WIFI_REGULATORY_TYPE_AI},
|
||||
{"RE", ESP_WIFI_REGULATORY_TYPE_AF},
|
||||
{"RO", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"RS", ESP_WIFI_REGULATORY_TYPE_RS},
|
||||
{"RU", ESP_WIFI_REGULATORY_TYPE_RU},
|
||||
@@ -235,11 +242,13 @@ const wifi_regdomain_t regdomain_table[WIFI_MAX_SUPPORT_COUNTRY_NUM] = {
|
||||
{"SG", ESP_WIFI_REGULATORY_TYPE_SG},
|
||||
{"SI", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"SK", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"SM", ESP_WIFI_REGULATORY_TYPE_FO},
|
||||
{"SN", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"SR", ESP_WIFI_REGULATORY_TYPE_AF},
|
||||
{"SV", ESP_WIFI_REGULATORY_TYPE_SV},
|
||||
{"SX", ESP_WIFI_REGULATORY_TYPE_SX},
|
||||
{"SY", ESP_WIFI_REGULATORY_TYPE_SY},
|
||||
{"TC", ESP_WIFI_REGULATORY_TYPE_TC},
|
||||
{"TC", ESP_WIFI_REGULATORY_TYPE_BS},
|
||||
{"TD", ESP_WIFI_REGULATORY_TYPE_AF},
|
||||
{"TG", ESP_WIFI_REGULATORY_TYPE_TG},
|
||||
{"TH", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
@@ -247,23 +256,25 @@ const wifi_regdomain_t regdomain_table[WIFI_MAX_SUPPORT_COUNTRY_NUM] = {
|
||||
{"TR", ESP_WIFI_REGULATORY_TYPE_TR},
|
||||
{"TT", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"TW", ESP_WIFI_REGULATORY_TYPE_NCC},
|
||||
{"TZ", ESP_WIFI_REGULATORY_TYPE_TZ},
|
||||
{"TZ", ESP_WIFI_REGULATORY_TYPE_BW},
|
||||
{"UA", ESP_WIFI_REGULATORY_TYPE_UA},
|
||||
{"UG", ESP_WIFI_REGULATORY_TYPE_BS},
|
||||
{"US", ESP_WIFI_REGULATORY_TYPE_FCC},
|
||||
{"UY", ESP_WIFI_REGULATORY_TYPE_BB},
|
||||
{"UZ", ESP_WIFI_REGULATORY_TYPE_MA},
|
||||
{"VA", ESP_WIFI_REGULATORY_TYPE_FO},
|
||||
{"VC", ESP_WIFI_REGULATORY_TYPE_AF},
|
||||
{"VE", ESP_WIFI_REGULATORY_TYPE_VE},
|
||||
{"VI", ESP_WIFI_REGULATORY_TYPE_AS},
|
||||
{"VN", ESP_WIFI_REGULATORY_TYPE_VN},
|
||||
{"VU", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"WF", ESP_WIFI_REGULATORY_TYPE_AI},
|
||||
{"WF", ESP_WIFI_REGULATORY_TYPE_AF},
|
||||
{"WS", ESP_WIFI_REGULATORY_TYPE_WS},
|
||||
{"YE", ESP_WIFI_REGULATORY_TYPE_YE},
|
||||
{"YT", ESP_WIFI_REGULATORY_TYPE_AI},
|
||||
{"YT", ESP_WIFI_REGULATORY_TYPE_AF},
|
||||
{"ZA", ESP_WIFI_REGULATORY_TYPE_ZA},
|
||||
{"ZW", ESP_WIFI_REGULATORY_TYPE_AF},
|
||||
{"##", ESP_WIFI_REGULATORY_TYPE_MAX}, /* Sentinel: end of table; not a real country code — do not use as wifi_country_t.cc. */
|
||||
};
|
||||
|
||||
const wifi_regulatory_t regulatory_data[] = {
|
||||
@@ -315,12 +326,12 @@ const wifi_regulatory_t regulatory_data[] = {
|
||||
{
|
||||
6, /* Number of rules */
|
||||
{
|
||||
{ 1, 11, 2, 30, 0, 0 }, /* chan:1~11, max_bw:40M, max_power:30(dBm), dfs:0, reserved.*/
|
||||
{ 1, 13, 2, 36, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:36(dBm), dfs:0, reserved.*/
|
||||
{ 36, 48, 3, 23, 0, 0 }, /* chan:36~48, max_bw:80M, max_power:23(dBm), dfs:0, reserved.*/
|
||||
{ 52, 64, 3, 24, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:24(dBm), dfs:1, reserved.*/
|
||||
{ 100, 116, 3, 24, 1, 0 }, /* chan:100~116, max_bw:80M, max_power:24(dBm), dfs:1, reserved.*/
|
||||
{ 132, 144, 3, 24, 1, 0 }, /* chan:132~144, max_bw:80M, max_power:24(dBm), dfs:1, reserved.*/
|
||||
{ 149, 165, 3, 30, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:30(dBm), dfs:0, reserved.*/
|
||||
{ 52, 64, 3, 26, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:26(dBm), dfs:1, reserved.*/
|
||||
{ 100, 144, 4, 26, 1, 0 }, /* chan:100~144, max_bw:160M, max_power:26(dBm), dfs:1, reserved.*/
|
||||
{ 149, 165, 3, 36, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:36(dBm), dfs:0, reserved.*/
|
||||
{ 173, 177, 2, 27, 0, 0 }, /* chan:173~177, max_bw:40M, max_power:27(dBm), dfs:0, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_SRRC */
|
||||
@@ -419,7 +430,7 @@ const wifi_regulatory_t regulatory_data[] = {
|
||||
{ 36, 48, 3, 23, 0, 0 }, /* chan:36~48, max_bw:80M, max_power:23(dBm), dfs:0, reserved.*/
|
||||
{ 52, 64, 3, 24, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:24(dBm), dfs:1, reserved.*/
|
||||
{ 100, 144, 4, 24, 1, 0 }, /* chan:100~144, max_bw:160M, max_power:24(dBm), dfs:1, reserved.*/
|
||||
{ 149, 169, 3, 27, 0, 0 }, /* chan:149~169, max_bw:80M, max_power:27(dBm), dfs:0, reserved.*/
|
||||
{ 149, 165, 3, 30, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:30(dBm), dfs:0, reserved.*/
|
||||
{ 173, 177, 2, 27, 0, 0 }, /* chan:173~177, max_bw:40M, max_power:27(dBm), dfs:0, reserved.*/
|
||||
}
|
||||
},
|
||||
@@ -433,16 +444,6 @@ const wifi_regulatory_t regulatory_data[] = {
|
||||
{ 100, 140, 4, 27, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:27(dBm), dfs:1, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_AI */
|
||||
{
|
||||
4, /* Number of rules */
|
||||
{
|
||||
{ 1, 13, 2, 20, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/
|
||||
{ 36, 48, 3, 20, 0, 0 }, /* chan:36~48, max_bw:80M, max_power:20(dBm), dfs:0, reserved.*/
|
||||
{ 52, 64, 3, 20, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:20(dBm), dfs:1, reserved.*/
|
||||
{ 100, 140, 4, 27, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:27(dBm), dfs:1, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_AM */
|
||||
{
|
||||
3, /* Number of rules */
|
||||
@@ -530,6 +531,17 @@ const wifi_regulatory_t regulatory_data[] = {
|
||||
{ 149, 165, 3, 30, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:30(dBm), dfs:0, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_BW */
|
||||
{
|
||||
5, /* Number of rules */
|
||||
{
|
||||
{ 1, 13, 2, 20, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/
|
||||
{ 36, 48, 3, 23, 0, 0 }, /* chan:36~48, max_bw:80M, max_power:23(dBm), dfs:0, reserved.*/
|
||||
{ 52, 64, 3, 20, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:20(dBm), dfs:1, reserved.*/
|
||||
{ 100, 140, 4, 23, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:23(dBm), dfs:1, reserved.*/
|
||||
{ 149, 165, 3, 24, 1, 0 }, /* chan:149~165, max_bw:80M, max_power:24(dBm), dfs:1, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_BZ */
|
||||
{
|
||||
2, /* Number of rules */
|
||||
@@ -551,13 +563,14 @@ const wifi_regulatory_t regulatory_data[] = {
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_CR */
|
||||
{
|
||||
5, /* Number of rules */
|
||||
6, /* Number of rules */
|
||||
{
|
||||
{ 1, 13, 2, 36, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:36(dBm), dfs:0, reserved.*/
|
||||
{ 36, 48, 1, 30, 0, 0 }, /* chan:36~48, max_bw:20M, max_power:30(dBm), dfs:0, reserved.*/
|
||||
{ 52, 64, 1, 30, 1, 0 }, /* chan:52~64, max_bw:20M, max_power:30(dBm), dfs:1, reserved.*/
|
||||
{ 100, 144, 1, 30, 1, 0 }, /* chan:100~144, max_bw:20M, max_power:30(dBm), dfs:1, reserved.*/
|
||||
{ 149, 165, 1, 36, 0, 0 }, /* chan:149~165, max_bw:20M, max_power:36(dBm), dfs:0, reserved.*/
|
||||
{ 36, 48, 3, 30, 0, 0 }, /* chan:36~48, max_bw:80M, max_power:30(dBm), dfs:0, reserved.*/
|
||||
{ 52, 64, 3, 30, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:30(dBm), dfs:1, reserved.*/
|
||||
{ 100, 144, 4, 30, 1, 0 }, /* chan:100~144, max_bw:160M, max_power:30(dBm), dfs:1, reserved.*/
|
||||
{ 149, 165, 3, 36, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:36(dBm), dfs:0, reserved.*/
|
||||
{ 173, 177, 2, 36, 0, 0 }, /* chan:173~177, max_bw:40M, max_power:36(dBm), dfs:0, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_CU */
|
||||
@@ -610,6 +623,16 @@ const wifi_regulatory_t regulatory_data[] = {
|
||||
{ 52, 64, 3, 20, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:20(dBm), dfs:1, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_FO */
|
||||
{
|
||||
4, /* Number of rules */
|
||||
{
|
||||
{ 1, 13, 2, 20, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/
|
||||
{ 36, 48, 3, 23, 0, 0 }, /* chan:36~48, max_bw:80M, max_power:23(dBm), dfs:0, reserved.*/
|
||||
{ 52, 64, 3, 20, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:20(dBm), dfs:1, reserved.*/
|
||||
{ 100, 140, 4, 26, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:26(dBm), dfs:1, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_GB */
|
||||
{
|
||||
5, /* Number of rules */
|
||||
@@ -673,17 +696,6 @@ const wifi_regulatory_t regulatory_data[] = {
|
||||
{ 149, 161, 3, 23, 0, 0 }, /* chan:149~161, max_bw:80M, max_power:23(dBm), dfs:0, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_IL */
|
||||
{
|
||||
5, /* Number of rules */
|
||||
{
|
||||
{ 1, 13, 2, 20, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/
|
||||
{ 36, 48, 3, 23, 0, 0 }, /* chan:36~48, max_bw:80M, max_power:23(dBm), dfs:0, reserved.*/
|
||||
{ 52, 64, 3, 20, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:20(dBm), dfs:1, reserved.*/
|
||||
{ 100, 140, 4, 26, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:26(dBm), dfs:1, reserved.*/
|
||||
{ 149, 173, 3, 13, 0, 0 }, /* chan:149~173, max_bw:80M, max_power:13(dBm), dfs:0, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_IR */
|
||||
{
|
||||
4, /* Number of rules */
|
||||
@@ -815,11 +827,11 @@ const wifi_regulatory_t regulatory_data[] = {
|
||||
{
|
||||
5, /* Number of rules */
|
||||
{
|
||||
{ 1, 13, 2, 26, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:26(dBm), dfs:0, reserved.*/
|
||||
{ 1, 14, 2, 26, 0, 0 }, /* chan:1~14, max_bw:40M, max_power:26(dBm), dfs:0, reserved.*/
|
||||
{ 36, 48, 3, 30, 0, 0 }, /* chan:36~48, max_bw:80M, max_power:30(dBm), dfs:0, reserved.*/
|
||||
{ 52, 64, 3, 30, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:30(dBm), dfs:1, reserved.*/
|
||||
{ 100, 128, 4, 30, 1, 0 }, /* chan:100~128, max_bw:160M, max_power:30(dBm), dfs:1, reserved.*/
|
||||
{ 149, 165, 3, 30, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:30(dBm), dfs:0, reserved.*/
|
||||
{ 52, 64, 3, 23, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:23(dBm), dfs:1, reserved.*/
|
||||
{ 100, 128, 4, 23, 1, 0 }, /* chan:100~128, max_bw:160M, max_power:23(dBm), dfs:1, reserved.*/
|
||||
{ 149, 173, 3, 30, 0, 0 }, /* chan:149~173, max_bw:80M, max_power:30(dBm), dfs:0, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_NA */
|
||||
@@ -903,7 +915,7 @@ const wifi_regulatory_t regulatory_data[] = {
|
||||
{
|
||||
{ 1, 13, 2, 20, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/
|
||||
{ 36, 64, 4, 20, 0, 0 }, /* chan:36~64, max_bw:160M, max_power:20(dBm), dfs:0, reserved.*/
|
||||
{ 132, 165, 4, 20, 0, 0 }, /* chan:132~165, max_bw:160M, max_power:20(dBm), dfs:0, reserved.*/
|
||||
{ 132, 165, 4, 23, 0, 0 }, /* chan:132~165, max_bw:160M, max_power:23(dBm), dfs:0, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_SG */
|
||||
@@ -927,6 +939,17 @@ const wifi_regulatory_t regulatory_data[] = {
|
||||
{ 149, 165, 1, 30, 0, 0 }, /* chan:149~165, max_bw:20M, max_power:30(dBm), dfs:0, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_SX */
|
||||
{
|
||||
5, /* Number of rules */
|
||||
{
|
||||
{ 1, 13, 2, 20, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/
|
||||
{ 36, 48, 3, 16, 0, 0 }, /* chan:36~48, max_bw:80M, max_power:16(dBm), dfs:0, reserved.*/
|
||||
{ 52, 64, 3, 21, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:21(dBm), dfs:1, reserved.*/
|
||||
{ 100, 140, 4, 23, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:23(dBm), dfs:1, reserved.*/
|
||||
{ 149, 173, 3, 24, 1, 0 }, /* chan:149~173, max_bw:80M, max_power:24(dBm), dfs:1, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_SY */
|
||||
{
|
||||
6, /* Number of rules */
|
||||
@@ -939,17 +962,6 @@ const wifi_regulatory_t regulatory_data[] = {
|
||||
{ 173, 173, 1, 23, 0, 0 }, /* chan:173~173, max_bw:20M, max_power:23(dBm), dfs:0, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_TC */
|
||||
{
|
||||
5, /* Number of rules */
|
||||
{
|
||||
{ 1, 13, 2, 20, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/
|
||||
{ 36, 48, 3, 24, 0, 0 }, /* chan:36~48, max_bw:80M, max_power:24(dBm), dfs:0, reserved.*/
|
||||
{ 52, 64, 3, 24, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:24(dBm), dfs:1, reserved.*/
|
||||
{ 100, 144, 4, 24, 1, 0 }, /* chan:100~144, max_bw:160M, max_power:24(dBm), dfs:1, reserved.*/
|
||||
{ 149, 165, 3, 30, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:30(dBm), dfs:0, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_TG */
|
||||
{
|
||||
3, /* Number of rules */
|
||||
@@ -969,17 +981,6 @@ const wifi_regulatory_t regulatory_data[] = {
|
||||
{ 100, 140, 4, 27, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:27(dBm), dfs:1, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_TZ */
|
||||
{
|
||||
5, /* Number of rules */
|
||||
{
|
||||
{ 1, 13, 2, 20, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/
|
||||
{ 36, 48, 3, 23, 0, 0 }, /* chan:36~48, max_bw:80M, max_power:23(dBm), dfs:0, reserved.*/
|
||||
{ 52, 64, 3, 20, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:20(dBm), dfs:1, reserved.*/
|
||||
{ 100, 140, 4, 23, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:23(dBm), dfs:1, reserved.*/
|
||||
{ 149, 165, 3, 24, 1, 0 }, /* chan:149~165, max_bw:80M, max_power:24(dBm), dfs:1, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_UA */
|
||||
{
|
||||
5, /* Number of rules */
|
||||
@@ -1005,10 +1006,10 @@ const wifi_regulatory_t regulatory_data[] = {
|
||||
{
|
||||
5, /* Number of rules */
|
||||
{
|
||||
{ 1, 13, 2, 20, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/
|
||||
{ 36, 48, 3, 17, 0, 0 }, /* chan:36~48, max_bw:80M, max_power:17(dBm), dfs:0, reserved.*/
|
||||
{ 52, 64, 3, 24, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:24(dBm), dfs:1, reserved.*/
|
||||
{ 100, 144, 3, 24, 1, 0 }, /* chan:100~144, max_bw:80M, max_power:24(dBm), dfs:1, reserved.*/
|
||||
{ 1, 13, 2, 23, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:23(dBm), dfs:0, reserved.*/
|
||||
{ 36, 48, 3, 23, 0, 0 }, /* chan:36~48, max_bw:80M, max_power:23(dBm), dfs:0, reserved.*/
|
||||
{ 52, 64, 3, 20, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:20(dBm), dfs:1, reserved.*/
|
||||
{ 100, 140, 4, 26, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:26(dBm), dfs:1, reserved.*/
|
||||
{ 149, 165, 3, 30, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:30(dBm), dfs:0, reserved.*/
|
||||
}
|
||||
},
|
||||
@@ -1056,194 +1057,204 @@ typedef enum {
|
||||
ESP_WIFI_REGULATORY_TYPE_RCM,
|
||||
ESP_WIFI_REGULATORY_TYPE_NCC,
|
||||
ESP_WIFI_REGULATORY_TYPE_FCC,
|
||||
ESP_WIFI_REGULATORY_TYPE_CU,
|
||||
ESP_WIFI_REGULATORY_TYPE_GT,
|
||||
ESP_WIFI_REGULATORY_TYPE_ID,
|
||||
ESP_WIFI_REGULATORY_TYPE_KE,
|
||||
ESP_WIFI_REGULATORY_TYPE_KP,
|
||||
ESP_WIFI_REGULATORY_TYPE_OM,
|
||||
ESP_WIFI_REGULATORY_TYPE_MY,
|
||||
ESP_WIFI_REGULATORY_TYPE_PK,
|
||||
ESP_WIFI_REGULATORY_TYPE_TG,
|
||||
ESP_WIFI_REGULATORY_TYPE_MAX,
|
||||
} esp_wifi_regulatory_type_t;
|
||||
|
||||
const wifi_regdomain_t regdomain_table[WIFI_MAX_SUPPORT_COUNTRY_NUM] = {
|
||||
/*
|
||||
* regdomain_table: ISO alpha-2 country codes and their regulatory profile indices.
|
||||
* Last row is a sentinel (not a real country code).
|
||||
*/
|
||||
const wifi_regdomain_t regdomain_table[] = {
|
||||
{"01", ESP_WIFI_REGULATORY_TYPE_DEFAULT},
|
||||
{"EU", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"AD", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"AE", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"AF", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"AI", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"AL", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"AM", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"AN", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"AR", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"AS", ESP_WIFI_REGULATORY_TYPE_ISED},
|
||||
{"AT", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"AU", ESP_WIFI_REGULATORY_TYPE_ACMA},
|
||||
{"AW", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"AZ", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"BA", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"BB", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"BD", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"BE", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"BF", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"BG", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"BH", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"BL", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"BM", ESP_WIFI_REGULATORY_TYPE_ISED},
|
||||
{"BN", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"BO", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"BR", ESP_WIFI_REGULATORY_TYPE_ANATEL},
|
||||
{"BS", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"BT", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"BY", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"BZ", ESP_WIFI_REGULATORY_TYPE_ANATEL},
|
||||
{"CA", ESP_WIFI_REGULATORY_TYPE_ISED},
|
||||
{"CF", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"CH", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"CI", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"CL", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"CN", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"CO", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"CR", ESP_WIFI_REGULATORY_TYPE_OFCA},
|
||||
{"CU", ESP_WIFI_REGULATORY_TYPE_CU},
|
||||
{"CX", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"CY", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"CZ", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"DE", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"DK", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"DM", ESP_WIFI_REGULATORY_TYPE_ISED},
|
||||
{"DO", ESP_WIFI_REGULATORY_TYPE_ISED},
|
||||
{"DZ", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"EC", ESP_WIFI_REGULATORY_TYPE_ANATEL},
|
||||
{"EE", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"EG", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"ES", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"ET", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"FI", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"FM", ESP_WIFI_REGULATORY_TYPE_ISED},
|
||||
{"FR", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"GB", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"GD", ESP_WIFI_REGULATORY_TYPE_ISED},
|
||||
{"GE", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"GF", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"GH", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"GL", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"GP", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"GR", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"EU", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"AD", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"AE", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"AF", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"AI", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"AL", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"AM", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"AN", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"AR", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"AS", ESP_WIFI_REGULATORY_TYPE_FCC},
|
||||
{"AT", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"AU", ESP_WIFI_REGULATORY_TYPE_RCM},
|
||||
{"AW", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"AZ", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"BA", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"BB", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"BD", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"BE", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"BF", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"BG", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"BH", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"BL", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"BM", ESP_WIFI_REGULATORY_TYPE_FCC},
|
||||
{"BN", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"BO", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"BR", ESP_WIFI_REGULATORY_TYPE_NCC},
|
||||
{"BS", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"BT", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"BW", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"BY", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"BZ", ESP_WIFI_REGULATORY_TYPE_NCC},
|
||||
{"CA", ESP_WIFI_REGULATORY_TYPE_RCM},
|
||||
{"CF", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"CH", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"CI", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"CL", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"CN", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"CO", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"CR", ESP_WIFI_REGULATORY_TYPE_RCM},
|
||||
{"CU", ESP_WIFI_REGULATORY_TYPE_KCC},
|
||||
{"CX", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"CY", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"CZ", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"DE", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"DK", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"DM", ESP_WIFI_REGULATORY_TYPE_FCC},
|
||||
{"DO", ESP_WIFI_REGULATORY_TYPE_FCC},
|
||||
{"DZ", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"EC", ESP_WIFI_REGULATORY_TYPE_NCC},
|
||||
{"EE", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"EG", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"ES", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"ET", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"FI", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"FM", ESP_WIFI_REGULATORY_TYPE_FCC},
|
||||
{"FO", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"FR", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"GB", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"GD", ESP_WIFI_REGULATORY_TYPE_FCC},
|
||||
{"GE", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"GF", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"GH", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"GI", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"GL", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"GP", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"GR", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"GT", ESP_WIFI_REGULATORY_TYPE_GT},
|
||||
{"GU", ESP_WIFI_REGULATORY_TYPE_ISED},
|
||||
{"GY", ESP_WIFI_REGULATORY_TYPE_ANATEL},
|
||||
{"HK", ESP_WIFI_REGULATORY_TYPE_OFCA},
|
||||
{"HN", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"HR", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"HT", ESP_WIFI_REGULATORY_TYPE_ISED},
|
||||
{"HU", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"ID", ESP_WIFI_REGULATORY_TYPE_ID},
|
||||
{"IE", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"IL", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"IN", ESP_WIFI_REGULATORY_TYPE_ANATEL},
|
||||
{"IR", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"IS", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"IT", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"JM", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"JO", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"GU", ESP_WIFI_REGULATORY_TYPE_FCC},
|
||||
{"GY", ESP_WIFI_REGULATORY_TYPE_NCC},
|
||||
{"HK", ESP_WIFI_REGULATORY_TYPE_RCM},
|
||||
{"HN", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"HR", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"HT", ESP_WIFI_REGULATORY_TYPE_FCC},
|
||||
{"HU", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"ID", ESP_WIFI_REGULATORY_TYPE_GT},
|
||||
{"IE", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"IL", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"IM", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"IN", ESP_WIFI_REGULATORY_TYPE_NCC},
|
||||
{"IR", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"IS", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"IT", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"JM", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"JO", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"JP", ESP_WIFI_REGULATORY_TYPE_MIC},
|
||||
{"KE", ESP_WIFI_REGULATORY_TYPE_KE},
|
||||
{"KH", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"KN", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"KH", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"KN", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"KP", ESP_WIFI_REGULATORY_TYPE_KP},
|
||||
{"KR", ESP_WIFI_REGULATORY_TYPE_KCC},
|
||||
{"KW", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"KY", ESP_WIFI_REGULATORY_TYPE_ANATEL},
|
||||
{"KZ", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"LB", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"LC", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"LI", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"LK", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"LS", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"LT", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"LU", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"LV", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"MA", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"MC", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"MD", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"ME", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"MF", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"MH", ESP_WIFI_REGULATORY_TYPE_ISED},
|
||||
{"MK", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"MN", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"MO", ESP_WIFI_REGULATORY_TYPE_CU},
|
||||
{"MP", ESP_WIFI_REGULATORY_TYPE_ISED},
|
||||
{"MQ", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"MR", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"MT", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"MU", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"MV", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"MW", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"MX", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"MY", ESP_WIFI_REGULATORY_TYPE_GT},
|
||||
{"NA", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"NG", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"NI", ESP_WIFI_REGULATORY_TYPE_ISED},
|
||||
{"NL", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"NO", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"NP", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"NZ", ESP_WIFI_REGULATORY_TYPE_OFCA},
|
||||
{"OM", ESP_WIFI_REGULATORY_TYPE_OM},
|
||||
{"PA", ESP_WIFI_REGULATORY_TYPE_OFCA},
|
||||
{"PE", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"PF", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"PG", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"PH", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"KW", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"KY", ESP_WIFI_REGULATORY_TYPE_NCC},
|
||||
{"KZ", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"LB", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"LC", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"LI", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"LK", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"LS", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"LT", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"LU", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"LV", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"MA", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"MC", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"MD", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"ME", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"MF", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"MH", ESP_WIFI_REGULATORY_TYPE_FCC},
|
||||
{"MK", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"MN", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"MO", ESP_WIFI_REGULATORY_TYPE_KCC},
|
||||
{"MP", ESP_WIFI_REGULATORY_TYPE_FCC},
|
||||
{"MQ", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"MR", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"MT", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"MU", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"MV", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"MW", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"MX", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"MY", ESP_WIFI_REGULATORY_TYPE_MY},
|
||||
{"NA", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"NG", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"NI", ESP_WIFI_REGULATORY_TYPE_FCC},
|
||||
{"NL", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"NO", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"NP", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"NZ", ESP_WIFI_REGULATORY_TYPE_RCM},
|
||||
{"OM", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"PA", ESP_WIFI_REGULATORY_TYPE_RCM},
|
||||
{"PE", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"PF", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"PG", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"PH", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"PK", ESP_WIFI_REGULATORY_TYPE_PK},
|
||||
{"PL", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"PM", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"PR", ESP_WIFI_REGULATORY_TYPE_ISED},
|
||||
{"PT", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"PW", ESP_WIFI_REGULATORY_TYPE_ISED},
|
||||
{"PY", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"QA", ESP_WIFI_REGULATORY_TYPE_OM},
|
||||
{"RE", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"RO", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"RS", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"RU", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"RW", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"SA", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"SE", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"SG", ESP_WIFI_REGULATORY_TYPE_CU},
|
||||
{"SI", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"SK", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"SN", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"SR", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"SV", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"SY", ESP_WIFI_REGULATORY_TYPE_OM},
|
||||
{"TC", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"TD", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"PL", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"PM", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"PR", ESP_WIFI_REGULATORY_TYPE_FCC},
|
||||
{"PT", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"PW", ESP_WIFI_REGULATORY_TYPE_FCC},
|
||||
{"PY", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"QA", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"RE", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"RO", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"RS", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"RU", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"RW", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"SA", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"SE", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"SG", ESP_WIFI_REGULATORY_TYPE_KCC},
|
||||
{"SI", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"SK", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"SM", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"SN", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"SR", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"SV", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"SX", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"SY", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"TC", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"TD", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"TG", ESP_WIFI_REGULATORY_TYPE_TG},
|
||||
{"TH", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"TN", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"TR", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"TT", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"TW", ESP_WIFI_REGULATORY_TYPE_ANATEL},
|
||||
{"TZ", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"UA", ESP_WIFI_REGULATORY_TYPE_OM},
|
||||
{"UG", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"US", ESP_WIFI_REGULATORY_TYPE_ISED},
|
||||
{"UY", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"UZ", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"VC", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"VE", ESP_WIFI_REGULATORY_TYPE_ANATEL},
|
||||
{"VI", ESP_WIFI_REGULATORY_TYPE_ISED},
|
||||
{"VN", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"VU", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"WF", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"WS", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"YE", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"YT", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"ZA", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"ZW", ESP_WIFI_REGULATORY_TYPE_CE},
|
||||
{"TH", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"TN", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"TR", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"TT", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"TW", ESP_WIFI_REGULATORY_TYPE_NCC},
|
||||
{"TZ", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"UA", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"UG", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"US", ESP_WIFI_REGULATORY_TYPE_FCC},
|
||||
{"UY", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"UZ", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"VA", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"VC", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"VE", ESP_WIFI_REGULATORY_TYPE_NCC},
|
||||
{"VI", ESP_WIFI_REGULATORY_TYPE_FCC},
|
||||
{"VN", ESP_WIFI_REGULATORY_TYPE_KCC},
|
||||
{"VU", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"WF", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"WS", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"YE", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"YT", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"ZA", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"ZW", ESP_WIFI_REGULATORY_TYPE_IFETEL},
|
||||
{"##", ESP_WIFI_REGULATORY_TYPE_MAX}, /* Sentinel: end of table; not a real country code — do not use as wifi_country_t.cc. */
|
||||
};
|
||||
|
||||
const wifi_regulatory_t regulatory_data[] = {
|
||||
@@ -1279,10 +1290,10 @@ const wifi_regulatory_t regulatory_data[] = {
|
||||
{
|
||||
1, /* Number of rules */
|
||||
{
|
||||
{ 1, 11, 2, 30, 0, 0 }, /* chan:1~11, max_bw:40M, max_power:30(dBm), dfs:0, reserved.*/
|
||||
{ 1, 13, 2, 36, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:36(dBm), dfs:0, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_CE */
|
||||
/* ESP_WIFI_REGULATORY_TYPE_SRRC */
|
||||
{
|
||||
1, /* Number of rules */
|
||||
{
|
||||
@@ -1296,7 +1307,7 @@ const wifi_regulatory_t regulatory_data[] = {
|
||||
{ 1, 13, 2, 36, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:36(dBm), dfs:0, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_ANATEL */
|
||||
/* ESP_WIFI_REGULATORY_TYPE_WPC */
|
||||
{
|
||||
1, /* Number of rules */
|
||||
{
|
||||
@@ -1318,41 +1329,34 @@ const wifi_regulatory_t regulatory_data[] = {
|
||||
{ 1, 13, 2, 23, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:23(dBm), dfs:0, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_CE */
|
||||
/* ESP_WIFI_REGULATORY_TYPE_IFETEL */
|
||||
{
|
||||
1, /* Number of rules */
|
||||
{
|
||||
{ 1, 13, 2, 20, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_OFCA */
|
||||
/* ESP_WIFI_REGULATORY_TYPE_RCM */
|
||||
{
|
||||
1, /* Number of rules */
|
||||
{
|
||||
{ 1, 13, 2, 36, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:36(dBm), dfs:0, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_ANATEL */
|
||||
/* ESP_WIFI_REGULATORY_TYPE_NCC */
|
||||
{
|
||||
1, /* Number of rules */
|
||||
{
|
||||
{ 1, 13, 2, 30, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:30(dBm), dfs:0, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_ISED */
|
||||
/* ESP_WIFI_REGULATORY_TYPE_FCC */
|
||||
{
|
||||
1, /* Number of rules */
|
||||
{
|
||||
{ 1, 11, 2, 30, 0, 0 }, /* chan:1~11, max_bw:40M, max_power:30(dBm), dfs:0, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_CU */
|
||||
{
|
||||
1, /* Number of rules */
|
||||
{
|
||||
{ 1, 13, 2, 23, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:23(dBm), dfs:0, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_GT */
|
||||
{
|
||||
1, /* Number of rules */
|
||||
@@ -1360,13 +1364,6 @@ const wifi_regulatory_t regulatory_data[] = {
|
||||
{ 1, 13, 2, 26, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:26(dBm), dfs:0, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_ID */
|
||||
{
|
||||
1, /* Number of rules */
|
||||
{
|
||||
{ 1, 13, 2, 26, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:26(dBm), dfs:0, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_KE */
|
||||
{
|
||||
1, /* Number of rules */
|
||||
@@ -1381,11 +1378,11 @@ const wifi_regulatory_t regulatory_data[] = {
|
||||
{ 1, 13, 1, 20, 0, 0 }, /* chan:1~13, max_bw:20M, max_power:20(dBm), dfs:0, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_OM */
|
||||
/* ESP_WIFI_REGULATORY_TYPE_MY */
|
||||
{
|
||||
1, /* Number of rules */
|
||||
{
|
||||
{ 1, 13, 2, 20, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/
|
||||
{ 1, 14, 2, 26, 0, 0 }, /* chan:1~14, max_bw:40M, max_power:26(dBm), dfs:0, reserved.*/
|
||||
}
|
||||
},
|
||||
/* ESP_WIFI_REGULATORY_TYPE_PK */
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# SPDX-FileCopyrightText: 2008 Johannes Berg <johannes@sipsolutions.net>
|
||||
# SPDX-FileCopyrightText: 2008 Michael Green <Michael.Green@Atheros.com>
|
||||
#
|
||||
# SPDX-FileContributor: 2025 Espressif Systems (Shanghai) CO LTD
|
||||
# SPDX-FileContributor: 2025-2026 Espressif Systems (Shanghai) CO LTD
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
# Copyright (c) 2008, Luis R. Rodriguez <mcgrof@gmail.com>
|
||||
@@ -60,6 +60,9 @@ country EU: DFS-ETSI
|
||||
# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
# Harmonized CEPT countries: https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf
|
||||
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
|
||||
# https://docdb.cept.org/implementation/16737
|
||||
# https://docdb.cept.org/download/4685
|
||||
country AD: DFS-ETSI
|
||||
(2400 - 2483.5 @ 40), (100 mW)
|
||||
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
@@ -67,6 +70,7 @@ country AD: DFS-ETSI
|
||||
(5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
# short range devices (ETSI EN 300 440-1)
|
||||
(5725 - 5875 @ 80), (25 mW)
|
||||
(5945 - 6425 @ 320), (23), NO-OUTDOOR
|
||||
# 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
@@ -99,6 +103,9 @@ country AI: DFS-ETSI
|
||||
# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf
|
||||
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
|
||||
# https://docdb.cept.org/implementation/16737
|
||||
# https://docdb.cept.org/download/4685
|
||||
country AL: DFS-ETSI
|
||||
(2400 - 2483.5 @ 40), (100 mW)
|
||||
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
@@ -106,6 +113,7 @@ country AL: DFS-ETSI
|
||||
(5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
# short range devices (ETSI EN 300 440-1)
|
||||
(5725 - 5875 @ 80), (25 mW)
|
||||
(5945 - 6425 @ 320), (23), NO-OUTDOOR
|
||||
|
||||
# Source:
|
||||
# 2.4 GHz https://www.psrc.am/contents/document/4749
|
||||
@@ -146,6 +154,9 @@ country AS: DFS-FCC
|
||||
# Harmonized CEPT countries (February 2021): https://docdb.cept.org/download/25c41779-cd6e/Rec7003e.pdf
|
||||
# AT: https://www.rtr.at/TKP/was_wir_tun/telekommunikation/spectrum/bands/1997_bmvit-info-052010en.pdf
|
||||
# AT: acceptance https://www.ris.bka.gv.at/Dokumente/BgblAuth/BGBLA_2014_II_63/BGBLA_2014_II_63.pdfsig
|
||||
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
|
||||
# https://docdb.cept.org/implementation/16737
|
||||
# https://docdb.cept.org/download/4685
|
||||
country AT: DFS-ETSI
|
||||
(2400 - 2483.5 @ 40), (100 mW)
|
||||
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
@@ -160,43 +171,43 @@ country AT: DFS-ETSI
|
||||
|
||||
# Source:
|
||||
# 'Item' in the comments below refers to each numbered rule found at:
|
||||
# https://www.legislation.gov.au/Details/F2023C00524
|
||||
# https://www.legislation.gov.au/Details/F2025L01047 within Table 8
|
||||
# except for 5850-5875 which is found in Table 1.
|
||||
# Both DFS-ETSI and DFS-FCC are acceptable per AS/NZS 4268 Appendix B.
|
||||
# The EIRP for DFS bands can be increased by 3dB if TPC is implemented.
|
||||
# In order to allow 80MHz operation between 5650-5730MHz the upper boundary
|
||||
# of this more restrictive band has been shifted up by 5MHz from 5725MHz.
|
||||
country AU: DFS-ETSI
|
||||
# Item 58
|
||||
(915 - 920 @ 4), (1000 mW)
|
||||
(920 - 928 @ 8), (1000 mW)
|
||||
# Item 1
|
||||
(915 - 928 @ 8), (1000 mW)
|
||||
|
||||
# Item 59
|
||||
# Item 3 and 7
|
||||
(2400 - 2483.5 @ 40), (4000 mW)
|
||||
|
||||
# Item 61
|
||||
# Item 10
|
||||
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW
|
||||
|
||||
# Item 62 (200 mW allowed if TPC is used)
|
||||
# Item 11 (200 mW allowed if TPC is used)
|
||||
(5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, AUTO-BW, DFS
|
||||
|
||||
# Item 63(a) (1000 mW with TPC)
|
||||
# Item 12(a) (1000 mW with TPC)
|
||||
(5470 - 5600 @ 80), (500 mW), DFS
|
||||
|
||||
# Item 63(b) (1000 mW with TPC)
|
||||
# Item 12(b) (1000 mW with TPC)
|
||||
# The end is 5725 but we borrow 5 MHz from the following less restrictive band
|
||||
# so we can get an 80 MHz channel.
|
||||
(5650 - 5730 @ 80), (500 mW), DFS
|
||||
|
||||
# Item 60
|
||||
# Item 9
|
||||
(5730 - 5850 @ 80), (4000 mW), AUTO-BW
|
||||
|
||||
# Item 22
|
||||
# Item 22 of Table 1
|
||||
(5850 - 5875 @ 20), (25 mW), AUTO-BW
|
||||
|
||||
# Item 63AA (25 mW if outdoors)
|
||||
(5925 - 6425 @ 160), (250 mW), NO-OUTDOOR
|
||||
# Item 13 (25 mW if outdoors)
|
||||
(5925 - 6585 @ 320), (250 mW), NO-OUTDOOR
|
||||
|
||||
# Item 65
|
||||
# Item 18
|
||||
(57000 - 71000 @ 2160), (20000 mW), NO-OUTDOOR
|
||||
|
||||
country AW: DFS-ETSI
|
||||
@@ -216,6 +227,9 @@ country AZ: DFS-ETSI
|
||||
# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf
|
||||
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
|
||||
# https://docdb.cept.org/implementation/16737
|
||||
# https://docdb.cept.org/download/4685
|
||||
country BA: DFS-ETSI
|
||||
(2400 - 2483.5 @ 40), (100 mW)
|
||||
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
@@ -223,6 +237,7 @@ country BA: DFS-ETSI
|
||||
(5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
# short range devices (ETSI EN 300 440-1)
|
||||
(5725 - 5875 @ 80), (25 mW)
|
||||
(5945 - 6425 @ 320), (23), NO-OUTDOOR
|
||||
# 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
@@ -246,6 +261,9 @@ country BD: DFS-JP
|
||||
# BE: https://www.ibpt.be/public/files/en/21761/B03-02_2.1_EN.pdf
|
||||
# BE: https://www.ibpt.be/public/files/en/21762/B03-03_2.1_EN.pdf
|
||||
# BE: https://www.ibpt.be/public/files/en/22165/B01-28_3.1_EN.pdf
|
||||
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
|
||||
# https://docdb.cept.org/implementation/16737
|
||||
# https://docdb.cept.org/download/4685
|
||||
country BE: DFS-ETSI
|
||||
(2400 - 2483.5 @ 40), (100 mW)
|
||||
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
@@ -348,7 +366,7 @@ country BO: DFS-JP
|
||||
# Source:
|
||||
# https://www.gov.br/anatel/pt-br/regulado/radiofrequencia/radiacao-restrita
|
||||
# https://informacoes.anatel.gov.br/legislacao/resolucoes/2017/936-resolucao-680
|
||||
# https://informacoes.anatel.gov.br/legislacao/atos-de-certificacao-de-produtos/2017/1139-ato-14448
|
||||
# https://informacoes.anatel.gov.br/legislacao/atos-de-certificacao-de-produtos/2021/1510-ato-1306
|
||||
country BR: DFS-FCC
|
||||
(2400 - 2483.5 @ 40), (30)
|
||||
# The next three ranges have been reduced by 3dB, could be increased
|
||||
@@ -357,7 +375,7 @@ country BR: DFS-FCC
|
||||
(5250 - 5350 @ 80), (27), NO-OUTDOOR, DFS, AUTO-BW
|
||||
(5470 - 5725 @ 160), (27), DFS, AUTO-BW
|
||||
(5725 - 5850 @ 80), (30), AUTO-BW
|
||||
(5925 - 7125 @ 320), (12), NO-OUTDOOR, NO-IR
|
||||
(5925 - 7125 @ 320), (12), NO-OUTDOOR
|
||||
# EIRP=40dBm (43dBm peak)
|
||||
(57000 - 71000 @ 2160), (40)
|
||||
|
||||
@@ -376,6 +394,15 @@ country BT: DFS-ETSI
|
||||
(5250 - 5330 @ 80), (20), DFS, AUTO-BW
|
||||
(5490 - 5710 @ 160), (27), DFS
|
||||
|
||||
# Source:
|
||||
# https://www.bocra.org.bw/sites/default/files/documents/Annexure_3.3.2A_SRDs_Guidelines_Feb_2022.pdf
|
||||
country BW: DFS-ETSI
|
||||
(2400 - 2483.5 @ 40), (100 mW)
|
||||
(5150 - 5250 @ 80), (200 mW), AUTO-BW
|
||||
(5250 - 5350 @ 80), (20), DFS, AUTO-BW
|
||||
(5470 - 5725 @ 160), (250 mW), DFS
|
||||
(5725 - 5850 @ 80), (24), DFS
|
||||
|
||||
country BY: DFS-ETSI
|
||||
(2402 - 2482 @ 40), (20)
|
||||
(5170 - 5250 @ 80), (20), AUTO-BW
|
||||
@@ -387,15 +414,20 @@ country BZ: DFS-JP
|
||||
(5735 - 5835 @ 80), (30)
|
||||
|
||||
# Sources:
|
||||
# https://www.ic.gc.ca/eic/site/smt-gst.nsf/vwapj/rss-247-i2-e.pdf/$file/rss-247-i2-e.pdf
|
||||
# RSS-247 Issue 4
|
||||
# https://ised-isde.canada.ca/site/spectrum-management-telecommunications/en/devices-and-equipment/radio-equipment-standards/radio-standards-specifications-rss/rss-247-digital-transmission-systems-dtss-frequency-hopping-systems-fhss-and-licence-exempt-local
|
||||
# https://www.ic.gc.ca/eic/site/smt-gst.nsf/eng/sf11750.html (6 GHz operation)
|
||||
country CA: DFS-FCC
|
||||
(2402 - 2472 @ 40), (30)
|
||||
(5150 - 5250 @ 80), (23), NO-OUTDOOR, AUTO-BW
|
||||
(5250 - 5350 @ 80), (24), DFS, AUTO-BW
|
||||
(5470 - 5600 @ 80), (24), DFS
|
||||
(5650 - 5730 @ 80), (24), DFS
|
||||
(5735 - 5835 @ 80), (30)
|
||||
(2400 - 2483.5 @ 40), (4000 mW)
|
||||
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW
|
||||
(5250 - 5350 @ 80), (500 mW), DFS, AUTO-BW
|
||||
# This range ends at 5725 MHz, but channel 144 extends to 5730 MHz.
|
||||
# Since 5725 ~ 5730 MHz belongs to the next range which has looser
|
||||
# requirements, we can extend the range by 5 MHz to make the kernel
|
||||
# happy and be able to use channel 144.
|
||||
(5470 - 5730 @ 160), (500 mW), DFS
|
||||
(5730 - 5850 @ 80), (4000 mW), AUTO-BW
|
||||
(5850 - 5895 @ 40), (27), AUTO-BW
|
||||
(5925 - 7125 @ 320), (12), NO-OUTDOOR
|
||||
|
||||
# Source:
|
||||
@@ -417,6 +449,9 @@ country CF: DFS-FCC
|
||||
# CH: https://www.ofcomnet.ch/api/rir/1010/04
|
||||
# CH: https://www.ofcomnet.ch/api/rir/1008/12
|
||||
# CH: https://www.ofcomnet.ch/#/fatTable
|
||||
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
|
||||
# https://docdb.cept.org/implementation/16737
|
||||
# https://docdb.cept.org/download/4685
|
||||
country CH: DFS-ETSI
|
||||
(2400 - 2483.5 @ 40), (100 mW)
|
||||
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
@@ -473,14 +508,17 @@ country CO: DFS-FCC
|
||||
|
||||
# Source:
|
||||
# https://storage.googleapis.com/eleoscompliance1.appspot.com/public/PNAF%20modificaci%C3%B3n%20ALCA87_30_04_2021.pdf
|
||||
# https://pgrweb.go.cr/scij/Busqueda/Normativa/Normas/nrm_texto_completo.aspx?param1=NRTC&nValor1=1&nValor2=99551&nValor3=144158&strTipM=TC
|
||||
country CR: DFS-FCC
|
||||
(2402 - 2482 @ 40), (36)
|
||||
(5170 - 5250 @ 20), (30)
|
||||
(5250 - 5330 @ 20), (30), DFS
|
||||
(5490 - 5730 @ 20), (30), DFS
|
||||
(5735 - 5835 @ 20), (36)
|
||||
(5875 - 5925 @ 20), (30)
|
||||
(5150 - 5250 @ 80), (30), AUTO-BW
|
||||
(5250 - 5350 @ 80), (30), DFS, AUTO-BW
|
||||
(5470 - 5730 @ 160), (30), DFS
|
||||
(5730 - 5850 @ 80), (36), AUTO-BW
|
||||
(5850 - 5895 @ 40), (36), AUTO-BW
|
||||
(5895 - 5925 @ 20), (30), AUTO-BW
|
||||
(5925 - 7125 @ 320), (30), NO-OUTDOOR
|
||||
(57000 - 71000 @ 2160), (43)
|
||||
|
||||
# Source:
|
||||
# https://www.mincom.gob.cu/es/marco-legal
|
||||
@@ -643,26 +681,31 @@ country EC: DFS-FCC
|
||||
# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
# EU decision 2021/1067/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32021D1067&from=EN
|
||||
# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf
|
||||
# EE: https://www.ttja.ee/et/ettevottele-organisatsioonile/sideteenused/raadioseadmed/wifi-seade
|
||||
# EE: https://ttja.ee/eraklient/side-ja-meediateenused/raadioside/wifi-seadmete-kasutus
|
||||
# EE: https://www.riigiteataja.ee/akt/117052024018?leiaKehtiv (Lisa 6)
|
||||
# EE: https://www.itu.int/ITU-D/study_groups/SGP_1998-2002/JGRES09/pdf/estonia.pdf
|
||||
country EE: DFS-ETSI
|
||||
(863 - 868 @ 1), (25 mW)
|
||||
(915.8 - 919.4 @ 1), (25 mW)
|
||||
(2400 - 2483.5 @ 40), (100 mW)
|
||||
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
(5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
|
||||
(5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
(5470 - 5725 @ 160), (500 mW), DFS, AUTO-BW, wmmrule=ETSI
|
||||
# short range devices (ETSI EN 300 440-1)
|
||||
(5725 - 5875 @ 80), (25 mW)
|
||||
(5725 - 5875 @ 80), (25 mW), AUTO-BW
|
||||
# 6 GHz band
|
||||
(5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI
|
||||
(5945 - 6425 @ 320), (200 mW), NO-OUTDOOR, wmmrule=ETSI
|
||||
# 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
(57000 - 71000 @ 8640), (40)
|
||||
|
||||
# https://www.tra.gov.eg/wp-content/uploads/2022/03/EGY-NTRA-March-2022-SRD_English_Final.pdf
|
||||
# https://www.tra.gov.eg/wp-content/uploads/2024/11/EGY-NTRA-November-2024-SRD_English-1.pdf
|
||||
country EG: DFS-ETSI
|
||||
(2402 - 2483.5 @ 40), (20)
|
||||
(5150 - 5250 @ 80), (23), AUTO-BW, wmmrule=ETSI
|
||||
(5250 - 5350 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
(2402 - 2483.5 @ 40), (100 mW), NO-OUTDOOR
|
||||
(5150 - 5250 @ 80), (200 mW), AUTO-BW, NO-OUTDOOR, wmmrule=ETSI
|
||||
(5250 - 5350 @ 80), (100 mW), DFS, AUTO-BW, NO-OUTDOOR, wmmrule=ETSI
|
||||
(5925 - 6425 @ 320), (250 mW), NO-OUTDOOR
|
||||
(57000 - 66000 @ 2160), (40), NO-OUTDOOR
|
||||
|
||||
# ES as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
@@ -714,6 +757,13 @@ country FM: DFS-FCC
|
||||
(5490 - 5730 @ 160), (24), DFS
|
||||
(5735 - 5835 @ 80), (30)
|
||||
|
||||
country FO: DFS-ETSI
|
||||
(2400 - 2483.5 @ 40), (100 mW)
|
||||
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW
|
||||
(5250 - 5350 @ 80), (100 mW), DFS, NO-OUTDOOR, AUTO-BW
|
||||
(5470 - 5725 @ 160), (500 mW), DFS
|
||||
(5945 - 6425 @ 320), (23), NO-OUTDOOR
|
||||
|
||||
# FR as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
|
||||
# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
|
||||
# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
@@ -748,7 +798,7 @@ country GB: DFS-ETSI
|
||||
(5470 - 5730 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
# short range devices (ETSI EN 300 440-1)
|
||||
(5725 - 5850 @ 80), (200 mW), NO-OUTDOOR
|
||||
(5925 - 6425 @ 160), (250 mW), NO-OUTDOOR, wmmrule=ETSI
|
||||
(5925 - 6425 @ 320), (250 mW), NO-OUTDOOR, wmmrule=ETSI
|
||||
# 60 GHz band channels 1-6
|
||||
(57000 - 71000 @ 2160), (40)
|
||||
|
||||
@@ -759,10 +809,15 @@ country GD: DFS-FCC
|
||||
(5490 - 5730 @ 160), (24), DFS
|
||||
(5735 - 5835 @ 80), (30)
|
||||
|
||||
# Source:
|
||||
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
|
||||
# https://docdb.cept.org/implementation/16737
|
||||
# https://docdb.cept.org/download/4685
|
||||
country GE: DFS-ETSI
|
||||
(2402 - 2482 @ 40), (20)
|
||||
(5170 - 5250 @ 80), (18), AUTO-BW
|
||||
(5250 - 5330 @ 80), (18), DFS, AUTO-BW
|
||||
(5945 - 6425 @ 320), (23), NO-OUTDOOR
|
||||
# 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
@@ -779,6 +834,13 @@ country GH: DFS-FCC
|
||||
(5490 - 5730 @ 160), (24), DFS
|
||||
(5735 - 5835 @ 80), (30)
|
||||
|
||||
country GI: DFS-ETSI
|
||||
(2400 - 2483.5 @ 40), (100 mW)
|
||||
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW
|
||||
(5250 - 5350 @ 80), (100 mW), DFS, NO-OUTDOOR, AUTO-BW
|
||||
(5470 - 5725 @ 160), (500 mW), DFS
|
||||
(5945 - 6425 @ 320), (23), NO-OUTDOOR
|
||||
|
||||
country GL: DFS-ETSI
|
||||
(2402 - 2482 @ 40), (20)
|
||||
(5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI
|
||||
@@ -847,7 +909,7 @@ country HK: DFS-ETSI
|
||||
(5250 - 5350 @ 80), (23), DFS, AUTO-BW, NO-OUTDOOR
|
||||
(5470 - 5730 @ 160), (27), DFS
|
||||
(5730 - 5850 @ 80), (36)
|
||||
(5925 - 6425 @ 160), (14)
|
||||
(5945 - 6425 @ 160), (24), NO-OUTDOOR
|
||||
|
||||
# Source:
|
||||
# https://www.conatel.gob.hn/doc/Regulacion/resoluciones/2023/NR05-23.pdf
|
||||
@@ -954,6 +1016,13 @@ country IL: DFS-ETSI
|
||||
(5725 - 5875 @ 80), (25 mW), AUTO-BW
|
||||
(5945 - 6425 @ 320), (200 mW), NO-OUTDOOR
|
||||
|
||||
country IM: DFS-ETSI
|
||||
(2400 - 2483.5 @ 40), (100 mW)
|
||||
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW
|
||||
(5250 - 5350 @ 80), (100 mW), DFS, NO-OUTDOOR, AUTO-BW
|
||||
(5470 - 5725 @ 160), (500 mW), DFS
|
||||
(5945 - 6425 @ 320), (23), NO-OUTDOOR
|
||||
|
||||
# Source:
|
||||
# https://dot.gov.in/spectrummanagement/delicensing-24-24835-ghz-band-gsr-45-e-5150-5350-ghz-gsr-46-e-and-5725-5875-ghz
|
||||
# https://dot.gov.in/spectrummanagement/license-exemption-5-ghz-gsr-1048e-dated-22102018
|
||||
@@ -963,6 +1032,7 @@ country IN:
|
||||
(5250 - 5350 @ 80), (24), DFS
|
||||
(5470 - 5725 @ 160), (24), DFS
|
||||
(5725 - 5875 @ 80), (30)
|
||||
(5925 - 6425 @ 320), (24), NO-OUTDOOR
|
||||
|
||||
# Source:
|
||||
# https://asnad.cra.ir/fa/Public/Documents/Details/73af8590-f065-eb11-968f-0050569b0899
|
||||
@@ -978,7 +1048,9 @@ country IR: DFS-ETSI
|
||||
# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf
|
||||
# IS: https://www.pfs.is/library/Skrar/Tidnir-og-taekni/MHZ_21022019.pdf
|
||||
# CEPT ECC Decision (20)01 for 6GHz: https://docdb.cept.org/download/1448
|
||||
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
|
||||
# https://docdb.cept.org/implementation/16737
|
||||
# https://docdb.cept.org/download/4685
|
||||
country IS: DFS-ETSI
|
||||
(2400 - 2483.5 @ 40), (100 mW)
|
||||
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
@@ -1089,8 +1161,9 @@ country KR: DFS-JP
|
||||
(5250 - 5350 @ 80), (20), DFS, AUTO-BW
|
||||
(5470 - 5725 @ 160), (20), DFS
|
||||
(5725 - 5850 @ 80), (23)
|
||||
# 6 GHz band
|
||||
(5925 - 7125 @ 160), (15), NO-OUTDOOR
|
||||
# 6 GHz band - per MSIT Notice 2026-10
|
||||
(5925 - 6425 @ 320), (18), NO-OUTDOOR, AUTO-BW
|
||||
(6425 - 7125 @ 320), (15), NO-OUTDOOR, AUTO-BW
|
||||
# 60 GHz band channels 1-4
|
||||
(57000 - 66000 @ 2160), (43)
|
||||
|
||||
@@ -1117,11 +1190,12 @@ country KY: DFS-FCC
|
||||
# http://adilet.zan.kz/rus/docs/V1500010730
|
||||
# http://adilet.zan.kz/rus/docs/V1500010375
|
||||
country KZ: DFS-ETSI
|
||||
(2400 - 2483.5 @ 40), (20)
|
||||
(5150 - 5250 @ 80), (23), NO-OUTDOOR, AUTO-BW
|
||||
(2400 - 2483.5 @ 40), (100 mW)
|
||||
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW
|
||||
(5250 - 5350 @ 80), (20), NO-OUTDOOR, DFS, AUTO-BW
|
||||
(5470 - 5725 @ 160), (20), NO-OUTDOOR, DFS
|
||||
(5725 - 5850 @ 80), (20), NO-OUTDOOR
|
||||
(5470 - 5725 @ 160), (100 mW), NO-OUTDOOR, DFS
|
||||
(5725 - 5850 @ 80), (100 mW), NO-OUTDOOR
|
||||
(5925 - 6425 @ 320), (200 mW), NO-OUTDOOR
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
country LB: DFS-FCC
|
||||
@@ -1149,8 +1223,10 @@ country LC: DFS-ETSI
|
||||
# LI: https://www.ofcomnet.ch/api/rir/1010/04
|
||||
# LI: https://www.ofcomnet.ch/api/rir/1008/12
|
||||
# LI: https://www.ofcomnet.ch/#/fatTable
|
||||
# CEPT ECC Decision (20)01 for 6GHz: https://docdb.cept.org/download/1448
|
||||
# LI: https://www.ofcomnet.ch/api/rir/1010/11
|
||||
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
|
||||
# https://docdb.cept.org/implementation/16737
|
||||
# https://docdb.cept.org/download/4685
|
||||
country LI: DFS-ETSI
|
||||
(2400 - 2483.5 @ 40), (100 mW)
|
||||
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
@@ -1248,6 +1324,9 @@ country MA: DFS-ETSI
|
||||
# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf
|
||||
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
|
||||
# https://docdb.cept.org/implementation/16737
|
||||
# https://docdb.cept.org/download/4685
|
||||
country MC: DFS-ETSI
|
||||
(2400 - 2483.5 @ 40), (100 mW)
|
||||
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
@@ -1255,6 +1334,7 @@ country MC: DFS-ETSI
|
||||
(5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
# short range devices (ETSI EN 300 440-1)
|
||||
(5725 - 5875 @ 80), (25 mW)
|
||||
(5945 - 6425 @ 320), (23), NO-OUTDOOR
|
||||
|
||||
# Source:
|
||||
# http://www.cnfr.md/index.php?pag=sec&id=117&l=en
|
||||
@@ -1264,6 +1344,9 @@ country MC: DFS-ETSI
|
||||
# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf
|
||||
# https://www.legis.md/cautare/downloadpdf/134846
|
||||
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
|
||||
# https://docdb.cept.org/implementation/16737
|
||||
# https://docdb.cept.org/download/4685
|
||||
country MD: DFS-ETSI
|
||||
(2400 - 2483.5 @ 40), (100 mW)
|
||||
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
@@ -1280,6 +1363,9 @@ country MD: DFS-ETSI
|
||||
# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf
|
||||
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
|
||||
# https://docdb.cept.org/implementation/16737
|
||||
# https://docdb.cept.org/download/4685
|
||||
country ME: DFS-ETSI
|
||||
(2400 - 2483.5 @ 40), (100 mW)
|
||||
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
@@ -1287,6 +1373,7 @@ country ME: DFS-ETSI
|
||||
(5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
# short range devices (ETSI EN 300 440-1)
|
||||
(5725 - 5875 @ 80), (25 mW)
|
||||
(5945 - 6425 @ 320), (23), NO-OUTDOOR
|
||||
|
||||
country MF: DFS-ETSI
|
||||
(2402 - 2482 @ 40), (20)
|
||||
@@ -1306,6 +1393,9 @@ country MH: DFS-FCC
|
||||
# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
|
||||
# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
|
||||
# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf
|
||||
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
|
||||
# https://docdb.cept.org/implementation/16737
|
||||
# https://docdb.cept.org/download/4685
|
||||
country MK: DFS-ETSI
|
||||
(2400 - 2483.5 @ 40), (100 mW)
|
||||
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
@@ -1313,6 +1403,7 @@ country MK: DFS-ETSI
|
||||
(5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
|
||||
# short range devices (ETSI EN 300 440-1)
|
||||
(5725 - 5875 @ 80), (25 mW)
|
||||
(5945 - 6425 @ 320), (23), NO-OUTDOOR
|
||||
# 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
@@ -1413,14 +1504,16 @@ country MX: DFS-FCC
|
||||
(5925 - 6425 @ 320), (12), NO-OUTDOOR
|
||||
|
||||
# Source:
|
||||
# https://www.mcmc.gov.my/skmmgovmy/media/General/CA-No-1-of-2022_-signed_19012022.pdf
|
||||
# https://www.mcmc.gov.my/skmmgovmy/media/General/pdf2/Class-Assignment-No-2-of-2025.pdf
|
||||
country MY: DFS-FCC
|
||||
(2402 - 2482 @ 40), (500 mW)
|
||||
(5170 - 5250 @ 80), (1000 mW), AUTO-BW
|
||||
(5250 - 5330 @ 80), (1000 mW), DFS, AUTO-BW
|
||||
(5490 - 5650 @ 160), (1000 mW), DFS
|
||||
(5735 - 5835 @ 80), (1000 mW)
|
||||
(5925 - 6425 @ 320), (200 mW), NO-OUTDOOR
|
||||
(2400 - 2500 @ 40), (500 mW)
|
||||
(5150 - 5250 @ 80), (1000 mW), AUTO-BW, NO-OUTDOOR
|
||||
# 5250 - 5350 MHz regulatory limit is 1000 mW, but 200 mW reaches the PSD limit of 10 mW / MHz at 20 MHz channel width
|
||||
(5250 - 5350 @ 80), (200 mW), DFS, AUTO-BW, NO-OUTDOOR
|
||||
# 5470 - 5650 MHz regulatory limit is 1000 mW, but 200 mW reaches the PSD limit of 10 mW / MHz at 20 MHz channel width
|
||||
(5470 - 5650 @ 160), (200 mW), DFS
|
||||
(5725 - 5875 @ 80), (1000 mW)
|
||||
(5925 - 6425 @ 320), (250 mW), NO-OUTDOOR
|
||||
|
||||
# Source:
|
||||
# https://www.cran.na/yglilidy/2023/04/GG-8060-dated-3-April-2023.pdf
|
||||
@@ -1476,6 +1569,9 @@ country NL: DFS-ETSI
|
||||
# NO: https://eng.nkom.no/technical/temporary-licenses/mobile-videolink/wireless-cameras-mobile-video-links/_attachment/9947
|
||||
# NO: http://www.lovdata.no/dokument/SF/forskrift/2012-01-19-77
|
||||
# In addition to EU NO can use 5725–5795 MHz and 5815–5850 bands with limit of 4 W EIRP (with DFS and TPC)
|
||||
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
|
||||
# https://docdb.cept.org/implementation/16737
|
||||
# https://docdb.cept.org/download/4685
|
||||
country NO: DFS-ETSI
|
||||
(2400 - 2483.5 @ 40), (100 mW)
|
||||
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
@@ -1633,12 +1729,15 @@ country PW: DFS-FCC
|
||||
(5490 - 5730 @ 160), (24), DFS
|
||||
(5735 - 5835 @ 80), (30)
|
||||
|
||||
# Source:
|
||||
# https://www.conatel.gov.py/conatel/wp-content/uploads/2025/05/2025-rd-1035-sistema-acceso-inalambrico-baja-potencia-6ghz-norma-tecnica.pdf
|
||||
country PY: DFS-FCC
|
||||
(2402 - 2482 @ 40), (20)
|
||||
(5170 - 5250 @ 80), (24), AUTO-BW
|
||||
(5250 - 5330 @ 80), (24), DFS, AUTO-BW
|
||||
(5490 - 5730 @ 160), (24), DFS
|
||||
(5735 - 5835 @ 80), (30)
|
||||
(5925 - 6425 @ 320), (12), NO-OUTDOOR
|
||||
|
||||
# Source:
|
||||
# https://www.cra.gov.qa/-/media/System/D/2/5/8/D258CF18B83A5613B0D590193CB799CB/Class-License-WIFI-6E-Final-English-032022--V3.ashx
|
||||
@@ -1699,8 +1798,8 @@ country RS: DFS-ETSI
|
||||
country RU:
|
||||
(2400 - 2483.5 @ 40), (100mW)
|
||||
(5150 - 5350 @ 160), (100 mW), NO-OUTDOOR
|
||||
(5650 - 5850 @ 160), (100 mW), NO-OUTDOOR
|
||||
(5925 - 6425 @ 160), (100 mW), NO-OUTDOOR
|
||||
(5650 - 5850 @ 160), (200 mW), NO-OUTDOOR
|
||||
(5925 - 6425 @ 320), (200 mW), NO-OUTDOOR
|
||||
# 60 GHz band channels 1-4, ref: Changes to NLA 124_Order №129_22042015.pdf
|
||||
(57000 - 66000 @ 2160), (40), NO-OUTDOOR
|
||||
|
||||
@@ -1804,6 +1903,13 @@ country SK: DFS-ETSI
|
||||
# 60 GHz band channels 1-4 (ETSI EN 302 567)
|
||||
(57000 - 66000 @ 2160), (40)
|
||||
|
||||
country SM: DFS-ETSI
|
||||
(2400 - 2483.5 @ 40), (100 mW)
|
||||
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW
|
||||
(5250 - 5350 @ 80), (100 mW), DFS, NO-OUTDOOR, AUTO-BW
|
||||
(5470 - 5725 @ 160), (500 mW), DFS
|
||||
(5945 - 6425 @ 320), (23), NO-OUTDOOR
|
||||
|
||||
# Source:
|
||||
# Regulation N° 2004-005 ART/DG/DRC/D.Rég
|
||||
country SN: DFS-FCC
|
||||
@@ -1828,6 +1934,15 @@ country SV: DFS-FCC
|
||||
(5735 - 5835 @ 20), (30)
|
||||
(5925 - 7125 @ 320), (12), NO-OUTDOOR
|
||||
|
||||
# Source:
|
||||
# https://btp.sx/dash/files/Telecommunications/Technical-Requirements/10t98466434723___TGVnYWwgYW5kIGlsbGVnYWwgd2lyZWxlc3MgY29tbXVuaWNhdGlvbiBkZXZpY2Vzb_64.pdf
|
||||
country SX: DFS-ETSI
|
||||
(2400 - 2483.5 @ 40), (100 mW)
|
||||
(5150 - 5250 @ 80), (50 mW), AUTO-BW
|
||||
(5250 - 5350 @ 80), (21), DFS, AUTO-BW
|
||||
(5470 - 5725 @ 160), (250 mW), DFS
|
||||
(5725 - 5875 @ 80), (24), DFS
|
||||
|
||||
# Source:
|
||||
# https://sytpra.gov.sy/public/uploads/files/%D8%A7%D9%84%D8%A7%D8%B7%D8%A7%D8%B1%20%D8%A7%D9%84%D9%82%D8%A7%D9%86%D9%88%D9%86%D9%8A/%D9%84%D9%88%D8%A7%D8%A6%D8%AD%20%D8%AA%D9%86%D8%B8%D9%8A%D9%85%D9%8A%D8%A9/%D9%84%D9%88%D8%A7%D8%A6%D8%AD%20%D8%A7%D9%84%D8%B7%D9%8A%D9%81%20%D8%A7%D9%84%D8%AA%D8%B1%D8%AF%D8%AF%D9%8A%20%D8%A7%D9%84%D8%B1%D8%A7%D8%AF%D9%8A%D9%88%D9%8A/L1.pdf
|
||||
country SY: DFS-ETSI
|
||||
@@ -1875,14 +1990,20 @@ country TH: DFS-FCC
|
||||
(5735 - 5835 @ 80), (30)
|
||||
(5925 - 6425 @ 320), (250 mW), NO-OUTDOOR
|
||||
|
||||
# Source:
|
||||
# https://www.anf.tn/sites/default/files/2025-01/Arr%C3%AAt%C3%A92024_4611.pdf
|
||||
country TN: DFS-ETSI
|
||||
(2402 - 2482 @ 40), (20)
|
||||
(5170 - 5250 @ 80), (20), AUTO-BW
|
||||
(5250 - 5330 @ 80), (20), DFS, AUTO-BW
|
||||
(5925 - 6425 @ 320), (200 mW), NO-OUTDOOR
|
||||
|
||||
# Source:
|
||||
# Technical Criteria for Radio Devices and Systems Excluded from Frequency Allocation, Sept 9, 2022
|
||||
# https://www.btk.gov.tr/uploads/pages/ftm-teknik-olcutler-ek-5.pdf
|
||||
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
|
||||
# https://docdb.cept.org/implementation/16737
|
||||
# https://docdb.cept.org/download/4685
|
||||
country TR: DFS-ETSI
|
||||
(2400 - 2483.5 @ 40), (20)
|
||||
(5150 - 5250 @ 80), (23), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
@@ -1939,14 +2060,18 @@ country TZ: DFS-ETSI
|
||||
# 2.4 GHz band channels can be used outdoors when some requirements are met.
|
||||
# 5 GHz band channels must be used only indoors in some cases. They are neither
|
||||
# permitted nor denied outdoors in others.
|
||||
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
|
||||
# https://docdb.cept.org/implementation/16737
|
||||
# https://docdb.cept.org/download/4685
|
||||
country UA: DFS-ETSI
|
||||
(2400 - 2483.5 @ 40), (100 mW), NO-OUTDOOR
|
||||
(5150 - 5250 @ 80), (100 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
(5250 - 5350 @ 80), (100 mW), DFS, NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
|
||||
(5470 - 5725 @ 160), (100 mW), DFS, NO-OUTDOOR, wmmrule=ETSI
|
||||
(5725 - 5850 @ 80), (100 mW), NO-OUTDOOR
|
||||
(5945 - 6425 @ 320), (23), NO-OUTDOOR
|
||||
# 60 GHz band channels 1-4, ref: Etsi En 302 567
|
||||
(57000 - 66000 @ 2160), (40 mW), NO-OUTDOOR
|
||||
(57000 - 66000 @ 2160), (40), NO-OUTDOOR
|
||||
|
||||
country UG: DFS-FCC
|
||||
(2402 - 2482 @ 40), (20)
|
||||
@@ -1977,14 +2102,10 @@ country US: DFS-FCC
|
||||
# requirements, we can extend the range by 5 MHz to make the kernel
|
||||
# happy and be able to use channel 144.
|
||||
(5470 - 5730 @ 160), (24), DFS
|
||||
# This range ends at 5850 MHz, but channel 169 extends to 5855 MHz.
|
||||
# Since 5850 ~ 5855 MHz belongs to the next range which has looser
|
||||
# requirements, we extend the range by 5 MHz to make the driver
|
||||
# happy and be able to use channel 169.
|
||||
(5730 - 5855 @ 80), (27), AUTO-BW
|
||||
(5730 - 5850 @ 80), (30), AUTO-BW
|
||||
# https://www.federalregister.gov/documents/2021/05/03/2021-08802/use-of-the-5850-5925-ghz-band
|
||||
# max. 33 dBm AP @ 20MHz, 36 dBm AP @ 40Mhz+, 6 dB less for clients
|
||||
(5855 - 5895 @ 40), (27), NO-OUTDOOR, AUTO-BW, NO-IR
|
||||
(5850 - 5895 @ 40), (27), NO-OUTDOOR, AUTO-BW, NO-IR
|
||||
# 6g band
|
||||
# https://www.federalregister.gov/documents/2020/05/26/2020-11236/unlicensed-use-of-the-6ghz-band
|
||||
(5925 - 7125 @ 320), (12), NO-OUTDOOR, NO-IR
|
||||
@@ -2006,6 +2127,13 @@ country UZ: DFS-ETSI
|
||||
(5170 - 5250 @ 80), (20), AUTO-BW
|
||||
(5250 - 5330 @ 80), (20), DFS, AUTO-BW
|
||||
|
||||
country VA: DFS-ETSI
|
||||
(2400 - 2483.5 @ 40), (100 mW)
|
||||
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW
|
||||
(5250 - 5350 @ 80), (100 mW), DFS, NO-OUTDOOR, AUTO-BW
|
||||
(5470 - 5725 @ 160), (500 mW), DFS
|
||||
(5945 - 6425 @ 320), (23), NO-OUTDOOR
|
||||
|
||||
# Source:
|
||||
# http://www.ntrc.vc/regulations/Jun_2006_Spectrum_Managment_Regulations.pdf
|
||||
country VC: DFS-ETSI
|
||||
@@ -2031,12 +2159,17 @@ country VI: DFS-FCC
|
||||
(5490 - 5730 @ 160), (24), DFS
|
||||
(5735 - 5835 @ 80), (30)
|
||||
|
||||
# Source:
|
||||
# https://datafiles.chinhphu.vn/cpp/files/vbpq/2021/10/08-btttt.signed.pdf
|
||||
# https://mic.gov.vn/van-ban-phap-luat/25099.htm
|
||||
country VN: DFS-FCC
|
||||
(2402 - 2482 @ 40), (20)
|
||||
(5170 - 5250 @ 80), (17)
|
||||
(5250 - 5330 @ 80), (24), DFS
|
||||
(5490 - 5730 @ 80), (24), DFS
|
||||
(5735 - 5835 @ 80), (30)
|
||||
(2400 - 2483.5 @ 40), (200 mW)
|
||||
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW
|
||||
(5250 - 5350 @ 80), (100 mW), DFS, AUTO-BW
|
||||
(5470 - 5725 @ 160), (500 mW), DFS, AUTO-BW
|
||||
(5725 - 5850 @ 80), (1000 mW), AUTO-BW
|
||||
(5925 - 6425 @ 320), (200 mW), NO-OUTDOOR, AUTO-BW
|
||||
(57000 - 66000 @ 2160), (10000 mW), NO-OUTDOOR
|
||||
|
||||
# Source:
|
||||
# http://www.trr.vu/attachments/category/130/GURL_for_Short-range_Radiocommunication_Devices2.pdf
|
||||
@@ -2074,7 +2207,7 @@ country ZA: DFS-ETSI
|
||||
(5170 - 5250 @ 80), (20), AUTO-BW
|
||||
(5250 - 5330 @ 80), (20), DFS, AUTO-BW
|
||||
(5490 - 5710 @ 160), (30)
|
||||
(5925 - 6425 @ 320), (14)
|
||||
(5925 - 6425 @ 320), (23), NO-OUTDOOR
|
||||
|
||||
country ZW: DFS-ETSI
|
||||
(2402 - 2482 @ 40), (20)
|
||||
|
||||
@@ -1,15 +1,18 @@
|
||||
#!/usr/bin/env python
|
||||
# SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
|
||||
# SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
import os
|
||||
from typing import List
|
||||
from datetime import datetime
|
||||
from typing import TextIO
|
||||
|
||||
from reg_parse import DBParser
|
||||
from reg_parse import Regdomain
|
||||
|
||||
# Not a valid ISO 3166-1 alpha-2 code; marks end of regdomain_table for linear scans (matches wifi_regdomain_t.cn[2]).
|
||||
REGDOMAIN_TABLE_SENTINEL_CC = '##'
|
||||
|
||||
def write_regulatory_rules(cfile: TextIO, perms: List, filter_5g: bool = False) -> None:
|
||||
|
||||
def write_regulatory_rules(cfile: TextIO, perms: list, filter_5g: bool = False) -> None:
|
||||
"""Helper function to write regulatory rules to the C file."""
|
||||
filtered_perms = [perm for perm in perms if not filter_5g or (perm.freqband.start >= 1 and perm.freqband.end <= 14)]
|
||||
rule_count = len(filtered_perms)
|
||||
@@ -39,7 +42,7 @@ def write_regulatory_rules(cfile: TextIO, perms: List, filter_5g: bool = False)
|
||||
|
||||
|
||||
def write_regulatory_data(
|
||||
cfile: TextIO, reg: Regdomain, type_list: List[str], perm_list: List[List], filter_5g: bool
|
||||
cfile: TextIO, reg: Regdomain, type_list: list[str], perm_list: list[list], filter_5g: bool
|
||||
) -> None:
|
||||
"""Helper function to write regulatory data."""
|
||||
cfile.write('typedef enum {\n')
|
||||
@@ -48,18 +51,29 @@ def write_regulatory_data(
|
||||
cfile.write(' ESP_WIFI_REGULATORY_TYPE_MAX,\n')
|
||||
cfile.write('} esp_wifi_regulatory_type_t;\n\n')
|
||||
|
||||
cfile.write('const wifi_regdomain_t regdomain_table[WIFI_MAX_SUPPORT_COUNTRY_NUM] = {\n')
|
||||
|
||||
country_map = reg.regdomain_countries if filter_5g else reg.regdomain_countries_2g
|
||||
|
||||
cfile.write(
|
||||
'/*\n'
|
||||
' * regdomain_table: ISO alpha-2 country codes and their regulatory profile indices.\n'
|
||||
' * Last row is a sentinel (not a real country code).\n'
|
||||
' */\n'
|
||||
)
|
||||
cfile.write('const wifi_regdomain_t regdomain_table[] = {\n')
|
||||
|
||||
for cc, reg_type_index in country_map.items():
|
||||
reg_type = f'ESP_WIFI_REGULATORY_TYPE_{type_list[reg_type_index]}'
|
||||
cfile.write(f' {{"{cc.decode("utf-8")}", {reg_type}}},\n')
|
||||
|
||||
cfile.write(
|
||||
' {"' + REGDOMAIN_TABLE_SENTINEL_CC + '", ESP_WIFI_REGULATORY_TYPE_MAX}, '
|
||||
'/* Sentinel: end of table; not a real country code — '
|
||||
'do not use as wifi_country_t.cc. */\n'
|
||||
)
|
||||
cfile.write('};\n\n')
|
||||
cfile.write('const wifi_regulatory_t regulatory_data[] = {\n')
|
||||
|
||||
for perms in perm_list:
|
||||
index = perm_list.index(perms)
|
||||
for index, perms in enumerate(perm_list):
|
||||
regulatory_type = f'ESP_WIFI_REGULATORY_TYPE_{type_list[index]}'
|
||||
cfile.write(f' /* {regulatory_type} */\n')
|
||||
write_regulatory_rules(cfile, perms, not filter_5g)
|
||||
@@ -75,14 +89,34 @@ def main() -> None:
|
||||
directory = os.path.dirname(os.path.abspath(__file__))
|
||||
file_path = os.path.join(directory, filename)
|
||||
try:
|
||||
with open(file_path, 'r', encoding='utf-8') as file:
|
||||
with open(file_path, encoding='utf-8') as file:
|
||||
regdomains = p.parse(file)
|
||||
# Get the modification time of the source file to determine copyright year
|
||||
mtime = os.path.getmtime(file_path)
|
||||
copyright_year = datetime.fromtimestamp(mtime).year
|
||||
except FileNotFoundError:
|
||||
raise Exception(f'File {file_path} not found')
|
||||
|
||||
reg.simplify_countries(regdomains)
|
||||
reg.simplify_countries_2g(regdomains)
|
||||
|
||||
total_countries = len(regdomains)
|
||||
country_rules_count = {}
|
||||
for country_code, country in regdomains.items():
|
||||
country_str = country_code.decode('utf-8')
|
||||
rules_count = len(country.permissions)
|
||||
country_rules_count[country_str] = rules_count
|
||||
|
||||
max_rules_country = max(country_rules_count.items(), key=lambda x: x[1])
|
||||
max_rules_count = max_rules_country[1]
|
||||
max_rules_countries = [cc for cc, count in country_rules_count.items() if count == max_rules_count]
|
||||
|
||||
print('\n=== Regulatory Statistics ===')
|
||||
print(f'Total supported countries: {total_countries}')
|
||||
print(f'Country(ies) with most rules: {", ".join(max_rules_countries)}')
|
||||
print(f'Maximum number of rules: {max_rules_count}')
|
||||
print('=' * 30 + '\n')
|
||||
|
||||
type_list = list(reg.typical_regulatory.keys())
|
||||
perm_list = list(reg.typical_regulatory.values())
|
||||
|
||||
@@ -93,7 +127,7 @@ def main() -> None:
|
||||
|
||||
with open(output_file, 'w') as cfile:
|
||||
cfile.write('/*\n')
|
||||
cfile.write(' * SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD\n')
|
||||
cfile.write(f' * SPDX-FileCopyrightText: 2025-{copyright_year} Espressif Systems (Shanghai) CO LTD\n')
|
||||
cfile.write(' *\n')
|
||||
cfile.write(' * SPDX-License-Identifier: Apache-2.0\n')
|
||||
cfile.write(' */\n\n')
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
# SPDX-FileCopyrightText: 2008 Johannes Berg <johannes@sipsolutions.net>
|
||||
# SPDX-FileCopyrightText: 2008 Michael Green <Michael.Green@Atheros.com>
|
||||
#
|
||||
# SPDX-FileContributor: 2025 Espressif Systems (Shanghai) CO LTD
|
||||
# SPDX-FileContributor: 2025-2026 Espressif Systems (Shanghai) CO LTD
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
# Copyright (c) 2008, Luis R. Rodriguez <mcgrof@gmail.com>
|
||||
@@ -707,9 +707,25 @@ class DBParser:
|
||||
class Regdomain:
|
||||
def __init__(self) -> None:
|
||||
self.regdomain_countries: dict[bytes, int] = {}
|
||||
self.typical_regulatory: dict[str, list] = {}
|
||||
self.typical_regulatory: dict[str, tuple[Permission, ...]] = {}
|
||||
self.regdomain_countries_2g: dict[bytes, int] = {}
|
||||
self.typical_regulatory_2g: dict[str, list] = {}
|
||||
self.typical_regulatory_2g: dict[str, tuple[Permission, ...]] = {}
|
||||
|
||||
@staticmethod
|
||||
def _permission_cmp_key(permission: Permission) -> tuple[int, int, int, int, int]:
|
||||
"""Return reduced fields aligned with generated C rule granularity."""
|
||||
max_eirp = int(permission.power.max_eirp) if permission.power else 0
|
||||
return (
|
||||
int(permission.freqband.start),
|
||||
int(permission.freqband.end),
|
||||
int(permission.freqband.maxbw),
|
||||
max_eirp,
|
||||
permission.dfs,
|
||||
)
|
||||
|
||||
def _permissions_cmp_key(self, permissions: tuple[Permission, ...]) -> tuple[tuple[int, int, int, int, int], ...]:
|
||||
"""Build a reduced comparison key from a country's permission set."""
|
||||
return tuple(self._permission_cmp_key(permission) for permission in permissions)
|
||||
|
||||
def build_typical_regdomains(self, countries: dict[bytes, Country]) -> None:
|
||||
"""Populate typical regulatory domains based on country permissions."""
|
||||
@@ -731,26 +747,32 @@ class Regdomain:
|
||||
"""Simplify country permissions by building typical regdomains."""
|
||||
self.build_typical_regdomains(countries)
|
||||
perm_list = list(self.typical_regulatory.values())
|
||||
perm_key_to_index = {self._permissions_cmp_key(permissions): idx for idx, permissions in enumerate(perm_list)}
|
||||
|
||||
for cn, country in countries.items():
|
||||
cn_str = cn.decode('utf-8')
|
||||
permissions = country.permissions
|
||||
if permissions not in perm_list:
|
||||
permissions_key = self._permissions_cmp_key(permissions)
|
||||
if permissions_key not in perm_key_to_index:
|
||||
self.typical_regulatory[cn_str] = permissions
|
||||
perm_list.append(permissions)
|
||||
self.regdomain_countries[cn] = perm_list.index(permissions)
|
||||
perm_key_to_index[permissions_key] = len(perm_list) - 1
|
||||
self.regdomain_countries[cn] = perm_key_to_index[permissions_key]
|
||||
|
||||
def simplify_countries_2g(self, countries: dict[bytes, Country]) -> None:
|
||||
"""Simplify country permissions by building typical regdomains."""
|
||||
self.build_typical_regdomains_2g(countries)
|
||||
|
||||
perm_list = list(self.typical_regulatory_2g.values())
|
||||
perm_key_to_index = {self._permissions_cmp_key(permissions): idx for idx, permissions in enumerate(perm_list)}
|
||||
|
||||
for cn, country in countries.items():
|
||||
cn_str = cn.decode('utf-8')
|
||||
permissions = country.permissions_2g
|
||||
permissions_key = self._permissions_cmp_key(permissions)
|
||||
|
||||
if permissions not in perm_list:
|
||||
if permissions_key not in perm_key_to_index:
|
||||
self.typical_regulatory_2g[cn_str] = permissions
|
||||
perm_list.append(permissions)
|
||||
self.regdomain_countries_2g[cn] = perm_list.index(permissions)
|
||||
perm_key_to_index[permissions_key] = len(perm_list) - 1
|
||||
self.regdomain_countries_2g[cn] = perm_key_to_index[permissions_key]
|
||||
|
||||
@@ -1503,6 +1503,10 @@ config SOC_PM_PAU_REGDMA_COMMON_PHY_LINK_ENTRY
|
||||
bool
|
||||
default y
|
||||
|
||||
config SOC_PM_PAU_REGDMA_MODEM_WIFIMAC_WORKAROUND
|
||||
bool
|
||||
default y
|
||||
|
||||
config SOC_PM_PMU_MIN_SLP_SLOW_CLK_CYCLE_FIXED
|
||||
bool
|
||||
default y
|
||||
|
||||
@@ -608,6 +608,8 @@
|
||||
#define SOC_PM_PAU_REGDMA_LINK_CONFIGURABLE (1)
|
||||
#define SOC_PM_PAU_REGDMA_LINK_IDX_WIFIMAC (4) // The range of values for the link index is [0, SOC_PM_PAU_LINK_NUM)
|
||||
#define SOC_PM_PAU_REGDMA_COMMON_PHY_LINK_ENTRY (1)
|
||||
/** Workaround: software-triggered modem PHY retention uses dedicated WiFi MAC REGDMA, not entry link_sel */
|
||||
#define SOC_PM_PAU_REGDMA_MODEM_WIFIMAC_WORKAROUND (1)
|
||||
|
||||
#define SOC_PM_PMU_MIN_SLP_SLOW_CLK_CYCLE_FIXED (1)
|
||||
|
||||
|
||||
@@ -282,7 +282,7 @@ uint16_t esp_wifi_sta_pmf_enabled(void);
|
||||
wifi_cipher_type_t esp_wifi_sta_get_mgmt_group_cipher(void);
|
||||
int esp_wifi_set_igtk_internal(uint8_t if_index, const wifi_wpa_igtk_t *igtk);
|
||||
esp_err_t esp_wifi_internal_issue_disconnect(uint8_t reason_code);
|
||||
bool esp_wifi_skip_supp_pmkcaching(void);
|
||||
bool esp_wifi_use_supp_pmk_cache(void);
|
||||
bool esp_wifi_is_rm_enabled_internal(uint8_t if_index);
|
||||
bool esp_wifi_is_btm_enabled_internal(uint8_t if_index);
|
||||
esp_err_t esp_wifi_register_mgmt_frame_internal(uint32_t type, uint32_t subtype);
|
||||
|
||||
@@ -35,6 +35,12 @@ static esp_err_t wpa3_build_sae_commit(u8 *bssid, size_t *sae_msg_len)
|
||||
const u8 *pw = (const u8 *)esp_wifi_sta_get_prof_password_internal();
|
||||
char sae_pwd_id[SAE_H2E_IDENTIFIER_LEN + 1] = {0};
|
||||
bool valid_pwd_id = false;
|
||||
|
||||
if (wpa_sta_cur_pmksa_matches_akm()) {
|
||||
wpa_printf(MSG_INFO, "wpa3: Skip SAE and use cached PMK instead");
|
||||
*sae_msg_len = 0;
|
||||
return ESP_FAIL;
|
||||
}
|
||||
#ifdef CONFIG_SAE_H2E
|
||||
uint8_t sae_pwe = esp_wifi_get_config_sae_pwe_h2e_internal(WIFI_IF_STA);
|
||||
const u8 *rsnxe = NULL;
|
||||
@@ -107,12 +113,6 @@ static esp_err_t wpa3_build_sae_commit(u8 *bssid, size_t *sae_msg_len)
|
||||
}
|
||||
#endif /* CONFIG_SAE_H2E */
|
||||
|
||||
if (wpa_sta_cur_pmksa_matches_akm()) {
|
||||
wpa_printf(MSG_INFO, "wpa3: Skip SAE and use cached PMK instead");
|
||||
*sae_msg_len = 0;
|
||||
return ESP_FAIL;
|
||||
}
|
||||
|
||||
if (g_sae_commit) {
|
||||
wpabuf_free(g_sae_commit);
|
||||
g_sae_commit = NULL;
|
||||
|
||||
@@ -2646,7 +2646,7 @@ int wpa_set_bss(uint8_t *macddr, uint8_t *bssid, uint8_t pairwise_cipher, uint8_
|
||||
{
|
||||
int res = 0;
|
||||
struct wpa_sm *sm = &gWpaSm;
|
||||
bool use_pmk_cache = !esp_wifi_skip_supp_pmkcaching();
|
||||
bool use_pmk_cache = esp_wifi_use_supp_pmk_cache();
|
||||
uint8_t assoc_ie[128] = {0};
|
||||
uint16_t assoc_ie_len = sizeof(assoc_ie);
|
||||
bool reassoc_same_ess = false;
|
||||
|
||||
@@ -387,9 +387,11 @@ The :ref:`wifi-event-connectionless-module-wake-interval-start` will arise at th
|
||||
|
||||
|
||||
|
||||
{IDF_TARGET_MAX_CONN_STA_NUM:default="15", esp32c2="4", esp32c3="10", esp32c6="10"}
|
||||
{IDF_TARGET_MAX_CONN_STA_NUM:default="15", esp32c2="4"}
|
||||
|
||||
{IDF_TARGET_SUB_MAX_NUM_FROM_KEYS:default="2", esp32c3="7", esp32c6="7"}
|
||||
{IDF_TARGET_SUB_MAX_NUM_FROM_KEYS:default="2", esp32c2="0"}
|
||||
|
||||
{IDF_TARGET_SUPPORT_ENCRYPT_NUM:default="17", esp32c2="4"}
|
||||
|
||||
.. _wifi-configuration:
|
||||
|
||||
@@ -525,56 +527,34 @@ AP Basic Configuration
|
||||
|
||||
API :cpp:func:`esp_wifi_set_config()` can be used to configure the AP. And the configuration will be stored in NVS. The table below describes the fields in detail.
|
||||
|
||||
.. only:: esp32 or esp32s2 or esp32s3 or esp32c3 or esp32c5 or esp32c6
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:widths: 15 55
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:widths: 15 55
|
||||
* - Field
|
||||
- Description
|
||||
* - ssid
|
||||
- SSID of AP; if the ssid[0] is 0xFF and ssid[1] is 0xFF, the AP defaults the SSID to ``ESP_aabbcc``, where “aabbcc” is the last three bytes of the AP MAC.
|
||||
* - password
|
||||
- Password of AP; if the auth mode is ``WIFI_AUTH_OPEN``, this field will be ignored.
|
||||
* - ssid_len
|
||||
- Length of SSID; if ssid_len is 0, check the SSID until there is a termination character. If ssid_len > 32, change it to 32; otherwise, set the SSID length according to ssid_len.
|
||||
* - channel
|
||||
- .. only:: SOC_WIFI_SUPPORT_5G
|
||||
|
||||
* - Field
|
||||
- Description
|
||||
* - ssid
|
||||
- SSID of AP; if the ssid[0] is 0xFF and ssid[1] is 0xFF, the AP defaults the SSID to ``ESP_aabbcc``, where “aabbcc” is the last three bytes of the AP MAC.
|
||||
* - password
|
||||
- Password of AP; if the auth mode is ``WIFI_AUTH_OPEN``, this field will be ignored.
|
||||
* - ssid_len
|
||||
- Length of SSID; if ssid_len is 0, check the SSID until there is a termination character. If ssid_len > 32, change it to 32; otherwise, set the SSID length according to ssid_len.
|
||||
* - channel
|
||||
- Channel of AP; if the channel is out of range, the Wi-Fi driver will return error. So, please make sure the channel is within the required range. For more details, refer to `Wi-Fi Country Code`_.
|
||||
* - authmode
|
||||
- Auth mode of ESP AP; currently, ESP AP does not support AUTH_WEP. If the authmode is an invalid value, AP defaults the value to ``WIFI_AUTH_OPEN``.
|
||||
* - ssid_hidden
|
||||
- If ssid_hidden is 1, AP does not broadcast the SSID; otherwise, it does broadcast the SSID.
|
||||
* - max_connection
|
||||
- The max number of stations allowed to connect in, the default value is 10. ESP Wi-Fi supports up to {IDF_TARGET_MAX_CONN_STA_NUM} (``ESP_WIFI_MAX_CONN_NUM``) Wi-Fi connections. Please note that ESP AP and ESP-NOW share the same encryption hardware keys, so the max_connection parameter will be affected by the :ref:`CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM`. The total number of encryption hardware keys is 17, if :ref:`CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM` <= {IDF_TARGET_SUB_MAX_NUM_FROM_KEYS}, the max_connection can be set up to {IDF_TARGET_MAX_CONN_STA_NUM}, otherwise the max_connection can be set up to (17 - :ref:`CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM`).
|
||||
* - beacon_interval
|
||||
- Beacon interval; the value is 100 ~ 60000 ms, with default value being 100 ms. If the value is out of range, AP defaults it to 100 ms.
|
||||
Channel of AP; set to 0 for auto selection (min channel: typically 1 for 2.4G, 36 for 5G). Other invalid values return ``ESP_ERR_INVALID_ARG``. So, please make sure the channel is within the required range. For more details, refer to `Wi-Fi Country Code`_.
|
||||
|
||||
.. only:: not SOC_WIFI_SUPPORT_5G
|
||||
|
||||
.. only:: esp32c2
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:widths: 15 55
|
||||
|
||||
* - Field
|
||||
- Description
|
||||
* - ssid
|
||||
- SSID of AP; if the ssid[0] is 0xFF and ssid[1] is 0xFF, the AP defaults the SSID to ``ESP_aabbcc``, where “aabbcc” is the last three bytes of the AP MAC.
|
||||
* - password
|
||||
- Password of AP; if the auth mode is ``WIFI_AUTH_OPEN``, this field will be ignored.
|
||||
* - ssid_len
|
||||
- Length of SSID; if ssid_len is 0, check the SSID until there is a termination character. If ssid_len > 32, change it to 32; otherwise, set the SSID length according to ssid_len.
|
||||
* - channel
|
||||
- Channel of AP; if the channel is out of range, the Wi-Fi driver defaults to channel 1. So, please make sure the channel is within the required range. For more details, refer to `Wi-Fi Country Code`_.
|
||||
* - authmode
|
||||
- Auth mode of ESP AP; currently, ESP AP does not support AUTH_WEP. If the authmode is an invalid value, AP defaults the value to ``WIFI_AUTH_OPEN``.
|
||||
* - ssid_hidden
|
||||
- If ssid_hidden is 1, AP does not broadcast the SSID; otherwise, it does broadcast the SSID.
|
||||
* - max_connection
|
||||
- The max number of stations allowed to connect in, the default value is 2. ESP Wi-Fi supports up to {IDF_TARGET_MAX_CONN_STA_NUM} (``ESP_WIFI_MAX_CONN_NUM``) Wi-Fi connections. Please note that ESP AP and ESP-NOW share the same encryption hardware keys, so the max_connection parameter will be affected by the :ref:`CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM`. The total number of encryption hardware keys is {IDF_TARGET_MAX_CONN_STA_NUM}, the max_connection can be set up to ({IDF_TARGET_MAX_CONN_STA_NUM} - :ref:`CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM`).
|
||||
* - beacon_interval
|
||||
- Beacon interval; the value is 100 ~ 60000 ms, with default value being 100 ms. If the value is out of range, AP defaults it to 100 ms.
|
||||
Channel of AP; set to 0 for auto selection (min channel: typically 1 for 2.4G). Other invalid values return ``ESP_ERR_INVALID_ARG``. So, please make sure the channel is within the required range. For more details, refer to `Wi-Fi Country Code`_.
|
||||
* - authmode
|
||||
- Auth mode of ESP AP; currently, ESP AP does not support AUTH_WEP. If the authmode is an invalid value, AP defaults the value to ``WIFI_AUTH_OPEN``.
|
||||
* - ssid_hidden
|
||||
- If ssid_hidden is 1, AP does not broadcast the SSID; otherwise, it does broadcast the SSID.
|
||||
* - max_connection
|
||||
- The max number of stations allowed to connect in. {IDF_TARGET_NAME} supports up to {IDF_TARGET_MAX_CONN_STA_NUM} (``ESP_WIFI_MAX_CONN_NUM``) Wi-Fi connections. Please note that soft-AP and ESP-NOW share the same encryption hardware keys, so the max_connection parameter will be affected by the :ref:`CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM`. The total number of encryption hardware keys is {IDF_TARGET_SUPPORT_ENCRYPT_NUM}, if :ref:`CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM` <= {IDF_TARGET_SUB_MAX_NUM_FROM_KEYS}, the max_connection can be set up to {IDF_TARGET_MAX_CONN_STA_NUM}, otherwise the max_connection can be set up to ({IDF_TARGET_SUPPORT_ENCRYPT_NUM} - :ref:`CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM`).
|
||||
* - beacon_interval
|
||||
- Beacon interval; the value is 100 ~ 60000 ms, with default value being 100 ms. If the value is out of range, AP defaults it to 100 ms.
|
||||
|
||||
|
||||
Wi-Fi Protocol Mode
|
||||
|
||||
@@ -387,9 +387,11 @@ WIFI_EVENT_CONNECTIONLESS_MODULE_WAKE_INTERVAL_START
|
||||
|
||||
|
||||
|
||||
{IDF_TARGET_MAX_CONN_STA_NUM:default="15", esp32c2="4", esp32c3="10", esp32c6="10"}
|
||||
{IDF_TARGET_MAX_CONN_STA_NUM:default="15", esp32c2="4"}
|
||||
|
||||
{IDF_TARGET_SUB_MAX_NUM_FROM_KEYS:default="2", esp32c3="7", esp32c6="7"}
|
||||
{IDF_TARGET_SUB_MAX_NUM_FROM_KEYS:default="2", esp32c2="0"}
|
||||
|
||||
{IDF_TARGET_SUPPORT_ENCRYPT_NUM:default="17", esp32c2="4"}
|
||||
|
||||
.. _wifi-configuration:
|
||||
|
||||
@@ -525,56 +527,34 @@ AP 基本配置
|
||||
|
||||
API :cpp:func:`esp_wifi_set_config()` 可用于配置 AP。配置的参数信息会保存到 NVS 中。下表详细介绍了各个字段。
|
||||
|
||||
.. only:: esp32 or esp32s2 or esp32s3 or esp32c3 or esp32c5 or esp32c6
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:widths: 15 55
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:widths: 15 55
|
||||
* - 字段
|
||||
- 描述
|
||||
* - ssid
|
||||
- 指 AP 的 SSID。如果 ssid[0] 和 ssid[1] 均为 0xFF,AP 默认 SSID 为 ``ESP_aabbcc``,”aabbcc” 是 AP MAC 的最后三个字节。
|
||||
* - password
|
||||
- AP 的密码。如果身份验证模式为 ``WIFI_AUTH_OPEN``,此字段将被忽略。
|
||||
* - ssid_len
|
||||
- SSID 的长度。如果 ssid_len 为 0,则检查 SSID 直至出现终止字符。如果 ssid_len 大于 32,请更改为 32,或者根据 ssid_len 设置 SSID 长度。
|
||||
* - channel
|
||||
- .. only:: SOC_WIFI_SUPPORT_5G
|
||||
|
||||
* - 字段
|
||||
- 描述
|
||||
* - ssid
|
||||
- 指 AP 的 SSID。如果 ssid[0] 和 ssid[1] 均为 0xFF,AP 默认 SSID 为 ``ESP_aabbcc``,”aabbcc” 是 AP MAC 的最后三个字节。
|
||||
* - password
|
||||
- AP 的密码。如果身份验证模式为 ``WIFI_AUTH_OPEN``,此字段将被忽略。
|
||||
* - ssid_len
|
||||
- SSID 的长度。如果 ssid_len 为 0,则检查 SSID 直至出现终止字符。如果 ssid_len 大于 32,请更改为 32,或者根据 ssid_len 设置 SSID 长度。
|
||||
* - channel
|
||||
- AP 的信道。如果信道超出范围,Wi-Fi 驱动程序将返回 error。所以,请确保信道在要求的范围内。有关详细信息,请参阅 `Wi-Fi 国家/地区代码`_。
|
||||
* - authmode
|
||||
- ESP AP 的身份验证模式。目前,ESP AP 不支持 AUTH_WEP。如果 authmode 是一个无效值,AP 默认该值为 ``WIFI_AUTH_OPEN``。
|
||||
* - ssid_hidden
|
||||
- 如果 ssid_hidden 为 1,AP 不广播 SSID。若为其他值,则广播。
|
||||
* - max_connection
|
||||
- 允许连接 station 的最大数目,默认值是 10。ESP Wi-Fi 支持 {IDF_TARGET_MAX_CONN_STA_NUM} (``ESP_WIFI_MAX_CONN_NUM``) 个 Wi-Fi 连接。请注意, ESP AP 和 ESP-NOW 共享同一块加密硬件 keys,因此 max_connection 参数将受到 :ref:`CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM` 的影响。加密硬件 keys 的总数是 17,如果 :ref:`CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM` 小于等于 {IDF_TARGET_SUB_MAX_NUM_FROM_KEYS},那么 max_connection 最大可以设置为 {IDF_TARGET_MAX_CONN_STA_NUM},否则 max_connection 最大可以设置为 (17 - :ref:`CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM`)。
|
||||
* - beacon_interval
|
||||
- beacon 间隔。值为 100 ~ 60000 ms,默认值为 100 ms。如果该值不在上述范围,AP 默认取 100 ms。
|
||||
AP 的信道。设为 0 表示自动选择(最小信道:2.4 GHz 通常为 1,5 GHz 通常为 36)。其它非法值将返回 ``ESP_ERR_INVALID_ARG``。请确保信道在允许范围内。更多说明请参阅 `Wi-Fi 国家/地区代码`_。
|
||||
|
||||
.. only:: not SOC_WIFI_SUPPORT_5G
|
||||
|
||||
.. only:: esp32c2
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:widths: 15 55
|
||||
|
||||
* - 字段
|
||||
- 描述
|
||||
* - ssid
|
||||
- 指 AP 的 SSID。如果 ssid[0] 和 ssid[1] 均为 0xFF,AP 默认 SSID 为 ``ESP_aabbcc``,”aabbcc” 是 AP MAC 的最后三个字节。
|
||||
* - password
|
||||
- AP 的密码。如果身份验证模式为 ``WIFI_AUTH_OPEN``,此字段将被忽略。
|
||||
* - ssid_len
|
||||
- SSID 的长度。如果 ssid_len 为 0,则检查 SSID 直至出现终止字符。如果 ssid_len 大于 32,请更改为 32,或者根据 ssid_len 设置 SSID 长度。
|
||||
* - channel
|
||||
- AP 的信道。如果信道超出范围,Wi-Fi 驱动程序将默认为信道 1。所以,请确保信道在要求的范围内。有关详细信息,请参阅 `Wi-Fi 国家/地区代码`_。
|
||||
* - authmode
|
||||
- ESP AP 的身份验证模式。目前,ESP AP 不支持 AUTH_WEP。如果 authmode 是一个无效值,AP 默认该值为 ``WIFI_AUTH_OPEN``。
|
||||
* - ssid_hidden
|
||||
- 如果 ssid_hidden 为 1,AP 不广播 SSID。若为其他值,则广播。
|
||||
* - max_connection
|
||||
- 允许连接 station 的最大数目,默认值是 2。ESP Wi-Fi 支持 {IDF_TARGET_MAX_CONN_STA_NUM} (``ESP_WIFI_MAX_CONN_NUM``) 个 Wi-Fi 连接。请注意, ESP AP 和 ESP-NOW 共享同一块加密硬件 keys,因此 max_connection 参数将受到 :ref:`CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM` 的影响。加密硬件 keys 的总数是 {IDF_TARGET_MAX_CONN_STA_NUM}, max_connection 最大可以设置为 ({IDF_TARGET_MAX_CONN_STA_NUM} - :ref:`CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM`)。
|
||||
* - beacon_interval
|
||||
- beacon 间隔。值为 100 ~ 60000 ms,默认值为 100 ms。如果该值不在上述范围,AP 默认取 100 ms。
|
||||
AP 的信道。设为 0 表示自动选择(最小信道:2.4 GHz 通常为 1)。其它非法值将返回 ``ESP_ERR_INVALID_ARG``。请确保信道在允许范围内。更多说明请参阅 `Wi-Fi 国家/地区代码`_。
|
||||
* - authmode
|
||||
- ESP AP 的身份验证模式。目前,ESP AP 不支持 AUTH_WEP。如果 authmode 是一个无效值,AP 默认该值为 ``WIFI_AUTH_OPEN``。
|
||||
* - ssid_hidden
|
||||
- 如果 ssid_hidden 为 1,AP 不广播 SSID。若为其他值,则广播。
|
||||
* - max_connection
|
||||
- 允许接入的 station 最大数量。{IDF_TARGET_NAME} 最多支持 {IDF_TARGET_MAX_CONN_STA_NUM}(``ESP_WIFI_MAX_CONN_NUM``) 个 Wi-Fi 连接。请注意,soft-AP 与 ESP-NOW 共享同一套加密硬件 keys,因此 max_connection 会受到 :ref:`CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM` 的影响。加密硬件 keys 总数为 {IDF_TARGET_SUPPORT_ENCRYPT_NUM}:若 :ref:`CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM` <= {IDF_TARGET_SUB_MAX_NUM_FROM_KEYS},则 max_connection 最大可设为 {IDF_TARGET_MAX_CONN_STA_NUM};否则最大可设为 ({IDF_TARGET_SUPPORT_ENCRYPT_NUM} - :ref:`CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM`)。
|
||||
* - beacon_interval
|
||||
- beacon 间隔。值为 100 ~ 60000 ms,默认值为 100 ms。如果该值不在上述范围,AP 默认取 100 ms。
|
||||
|
||||
|
||||
Wi-Fi 协议模式
|
||||
|
||||
@@ -40,6 +40,12 @@ menu "Example AP Wifi Configuration"
|
||||
depends on EXAMPLE_BR_WIFI
|
||||
int "Maximal STA connections"
|
||||
default 4
|
||||
range 1 4 if IDF_TARGET_ESP32C2
|
||||
range 1 15
|
||||
help
|
||||
Max number of the STA connects to AP.
|
||||
Maximum number of STAs allowed to connect to the bridged soft-AP (wifi_config_t.ap.max_connection).
|
||||
Upper bound matches ESP_WIFI_MAX_CONN_NUM in esp_wifi_types_native.h:
|
||||
1-4 on ESP32-C2, 1-15 on other Wi-Fi chips.
|
||||
Soft-AP and ESP-NOW share encryption keys; see Wi-Fi driver documentation
|
||||
if ESP-NOW is enabled.
|
||||
endmenu
|
||||
|
||||
@@ -22,7 +22,13 @@ menu "Example Configuration"
|
||||
config EXAMPLE_MAX_STA_CONN
|
||||
int "Maximum STA connections"
|
||||
default 4
|
||||
range 1 4 if IDF_TARGET_ESP32C2
|
||||
range 1 15
|
||||
help
|
||||
Maximum number of the station that allowed to connect to current Wi-Fi hotspot.
|
||||
Maximum number of STAs allowed to connect to the soft-AP (wifi_config_t.ap.max_connection).
|
||||
Upper bound matches ESP_WIFI_MAX_CONN_NUM in esp_wifi_types_native.h:
|
||||
1-4 on ESP32-C2, 1-15 on other Wi-Fi chips.
|
||||
Soft-AP and ESP-NOW share encryption keys; see Wi-Fi driver documentation
|
||||
if ESP-NOW is enabled.
|
||||
|
||||
endmenu
|
||||
|
||||
@@ -15,8 +15,14 @@ menu "Example Configuration"
|
||||
config ESP_MAX_STA_CONN
|
||||
int "Maximal STA connections"
|
||||
default 4
|
||||
range 1 4 if IDF_TARGET_ESP32C2
|
||||
range 1 15
|
||||
help
|
||||
Max number of the STA connects to AP.
|
||||
Maximum number of STAs allowed to connect to the soft-AP (wifi_config_t.ap.max_connection).
|
||||
Upper bound matches ESP_WIFI_MAX_CONN_NUM in esp_wifi_types_native.h:
|
||||
1-4 on ESP32-C2, 1-15 on other Wi-Fi chips.
|
||||
Soft-AP and ESP-NOW share encryption keys; see Wi-Fi driver documentation
|
||||
if ESP-NOW is enabled.
|
||||
|
||||
config ESP_ENABLE_DHCP_CAPTIVEPORTAL
|
||||
bool "DHCP Captive portal"
|
||||
|
||||
@@ -21,8 +21,14 @@ menu "Example Configuration"
|
||||
config ESP_MAX_STA_CONN
|
||||
int "Maximal STA connections"
|
||||
default 4
|
||||
range 1 4 if IDF_TARGET_ESP32C2
|
||||
range 1 15
|
||||
help
|
||||
Max number of the STA connects to AP.
|
||||
Maximum number of STAs allowed to connect to the soft-AP (wifi_config_t.ap.max_connection).
|
||||
Upper bound matches ESP_WIFI_MAX_CONN_NUM in esp_wifi_types_native.h:
|
||||
1-4 on ESP32-C2, 1-15 on other Wi-Fi chips.
|
||||
Soft-AP and ESP-NOW share encryption keys; see Wi-Fi driver documentation
|
||||
if ESP-NOW is enabled.
|
||||
|
||||
config ESP_GTK_REKEYING_ENABLE
|
||||
bool "Enable GTK Rekeying"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# SPDX-FileCopyrightText: 2021-2025 Espressif Systems (Shanghai) CO LTD
|
||||
# SPDX-FileCopyrightText: 2021-2026 Espressif Systems (Shanghai) CO LTD
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
import logging
|
||||
|
||||
@@ -64,6 +64,19 @@ def test_wifi_power_save_pd_top(dut: Dut) -> None:
|
||||
_run_test(dut)
|
||||
|
||||
|
||||
@pytest.mark.wifi_ap
|
||||
@pytest.mark.parametrize(
|
||||
'config',
|
||||
[
|
||||
'pd_modem',
|
||||
],
|
||||
indirect=True,
|
||||
)
|
||||
@idf_parametrize('target', ['esp32c6', 'esp32c5', 'esp32c61'], indirect=['target'])
|
||||
def test_wifi_power_save_pd_modem(dut: Dut) -> None:
|
||||
_run_test(dut)
|
||||
|
||||
|
||||
@pytest.mark.wifi_ap
|
||||
@pytest.mark.xtal_26mhz
|
||||
@pytest.mark.parametrize(
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
CONFIG_IDF_TARGET="esp32c2"
|
||||
CONFIG_XTAL_FREQ_26=y
|
||||
CONFIG_EXAMPLE_GET_AP_INFO_FROM_STDIN=y
|
||||
CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION=y
|
||||
|
||||
@@ -2,3 +2,4 @@ CONFIG_IDF_TARGET="esp32c2"
|
||||
CONFIG_XTAL_FREQ_26=y
|
||||
CONFIG_EXAMPLE_GET_AP_INFO_FROM_STDIN=y
|
||||
CONFIG_ESP32C2_REV_MIN_200=y
|
||||
CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION=y
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
CONFIG_IDF_TARGET="esp32c3"
|
||||
CONFIG_ESP32C3_REV_MIN_101=y
|
||||
CONFIG_EXAMPLE_GET_AP_INFO_FROM_STDIN=y
|
||||
CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION=y
|
||||
|
||||
4
examples/wifi/power_save/sdkconfig.ci.pd_modem
Normal file
4
examples/wifi/power_save/sdkconfig.ci.pd_modem
Normal file
@@ -0,0 +1,4 @@
|
||||
CONFIG_EXAMPLE_GET_AP_INFO_FROM_STDIN=y
|
||||
CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION=y
|
||||
CONFIG_ESP_PHY_MAC_BB_PD=y
|
||||
CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP=y
|
||||
@@ -2,3 +2,4 @@ CONFIG_EXAMPLE_GET_AP_INFO_FROM_STDIN=y
|
||||
CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP=y
|
||||
CONFIG_ESP_PHY_MAC_BB_PD=y
|
||||
CONFIG_ESP_MODEM_CLOCK_ENABLE_CHECKING=y
|
||||
CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION=y
|
||||
|
||||
@@ -25,8 +25,14 @@ menu "Example Configuration"
|
||||
config ESP_MAX_STA_CONN_AP
|
||||
int "Maximal STA connections"
|
||||
default 4
|
||||
range 1 4 if IDF_TARGET_ESP32C2
|
||||
range 1 15
|
||||
help
|
||||
Max number of the STA connects to AP.
|
||||
Maximum number of STAs allowed to connect to the soft-AP (wifi_config_t.ap.max_connection).
|
||||
Upper bound matches ESP_WIFI_MAX_CONN_NUM in esp_wifi_types_native.h:
|
||||
1-4 on ESP32-C2, 1-15 on other Wi-Fi chips.
|
||||
Soft-AP and ESP-NOW share encryption keys; see Wi-Fi driver documentation
|
||||
if ESP-NOW is enabled.
|
||||
endmenu
|
||||
|
||||
menu "STA Configuration"
|
||||
|
||||
@@ -22,8 +22,14 @@ menu "Example Configuration"
|
||||
config EXAMPLE_MAX_STA_CONN
|
||||
int "Maximal STA connections"
|
||||
default 4
|
||||
range 1 4 if IDF_TARGET_ESP32C2
|
||||
range 1 15
|
||||
help
|
||||
Max number of the STA connects to AP.
|
||||
Maximum number of STAs allowed to connect to the soft-AP (wifi_config_t.ap.max_connection).
|
||||
Upper bound matches ESP_WIFI_MAX_CONN_NUM in esp_wifi_types_native.h:
|
||||
1-4 on ESP32-C2, 1-15 on other Wi-Fi chips.
|
||||
Soft-AP and ESP-NOW share encryption keys; see Wi-Fi driver documentation
|
||||
if ESP-NOW is enabled.
|
||||
|
||||
choice EXAMPLE_WPS_TYPE
|
||||
prompt "WPS mode"
|
||||
@@ -44,7 +50,7 @@ menu "Example Configuration"
|
||||
int "WPS PIN"
|
||||
default 0
|
||||
help
|
||||
WPS PIN to be used for the connection, incase its not give, AP will derive a new one.
|
||||
WPS PIN to be used for the connection, in case its not give, AP will derive a new one.
|
||||
endif
|
||||
|
||||
endmenu
|
||||
|
||||
Reference in New Issue
Block a user