diff --git a/components/esp_wifi/CMakeLists.txt b/components/esp_wifi/CMakeLists.txt index 210185d82f..2cd6ec22e2 100644 --- a/components/esp_wifi/CMakeLists.txt +++ b/components/esp_wifi/CMakeLists.txt @@ -40,6 +40,9 @@ if(CONFIG_ESP_WIFI_ENABLED OR CONFIG_ESP_HOST_WIFI_ENABLED) "src/wifi_default_ap.c" "${idf_target}/esp_adapter.c") + + list(APPEND srcs "regulatory/esp_wifi_regulatory.c") + if(CONFIG_ESP_NETIF_USES_TCPIP_WITH_BSD_API AND CONFIG_LWIP_IPV4) list(APPEND srcs "src/smartconfig_ack.c") diff --git a/components/esp_wifi/include/esp_wifi_types_generic.h b/components/esp_wifi/include/esp_wifi_types_generic.h index bbccde6f09..aed87cb5f2 100644 --- a/components/esp_wifi/include/esp_wifi_types_generic.h +++ b/components/esp_wifi/include/esp_wifi_types_generic.h @@ -1446,6 +1446,35 @@ typedef struct { bool dcm; /**< Using dcm rate to send frame */ } wifi_tx_rate_config_t; +#define WIFI_MAX_SUPPORT_COUNTRY_NUM 175 /**< max number of supported countries */ +#ifdef CONFIG_SOC_WIFI_SUPPORT_5G +#define WIFI_MAX_REGULATORY_RULE_NUM 7 /**< max number of regulatory rules */ +#else +#define WIFI_MAX_REGULATORY_RULE_NUM 2 /**< max number of regulatory rules */ +#endif + +/** Argument structure for regulatory rule */ +typedef struct { + uint8_t start_channel; /**< start channel of regulatory rule */ + uint8_t end_channel; /**< end channel of regulatory rule */ + uint16_t max_bandwidth : 3; /**< max bandwidth(MHz) of regulatory rule, 1:20M, 2:40M, 3:80M, 4:160M */ + uint16_t max_eirp : 6; /**< indicates the maximum Equivalent Isotropically Radiated Power (EIRP), typically measured in dBm */ + uint16_t is_dfs : 1; /**< flag to identify dfs channel */ + uint16_t reserved : 6; /**< reserved */ +} wifi_reg_rule_t; + +/** Argument structure for regdomain */ +typedef struct { + uint8_t n_reg_rules; /**< number of regulatory rules */ + wifi_reg_rule_t reg_rules[WIFI_MAX_REGULATORY_RULE_NUM]; /**< array of regulatory rules*/ +} wifi_regulatory_t; + +/** Argument structure for regdomain */ +typedef struct { + char cn[2]; /**< country code string */ + uint8_t regulatory_type; /**< regulatory type of country */ +} wifi_regdomain_t; + #ifdef __cplusplus } #endif diff --git a/components/esp_wifi/lib b/components/esp_wifi/lib index 444e8af83d..3e289f371e 160000 --- a/components/esp_wifi/lib +++ b/components/esp_wifi/lib @@ -1 +1 @@ -Subproject commit 444e8af83d4d02255be48fc646d6c2a41280c3d1 +Subproject commit 3e289f371e35a2c71f613a6664dfffb841b5543b diff --git a/components/esp_wifi/regulatory/README.md b/components/esp_wifi/regulatory/README.md new file mode 100644 index 0000000000..ebb2f6ac2f --- /dev/null +++ b/components/esp_wifi/regulatory/README.md @@ -0,0 +1,12 @@ +# REGULATORY + +## Introduction +`esp_wifi_regulatory.txt` and `esp_wifi_regulatory.c` defines wireless communication regulations for different countries and regions to ensure that the device operates in compliance with local regulations. + +`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` \ No newline at end of file diff --git a/components/esp_wifi/regulatory/esp_wifi_regulatory.c b/components/esp_wifi/regulatory/esp_wifi_regulatory.c new file mode 100644 index 0000000000..fa6fd3434c --- /dev/null +++ b/components/esp_wifi/regulatory/esp_wifi_regulatory.c @@ -0,0 +1,1402 @@ +/* + * SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include "esp_wifi_types_generic.h" +#include "esp_wifi.h" + +#ifdef CONFIG_SOC_WIFI_SUPPORT_5G +typedef enum { + ESP_WIFI_REGULATORY_TYPE_DEFAULT, + ESP_WIFI_REGULATORY_TYPE_CE, + ESP_WIFI_REGULATORY_TYPE_ACMA, + ESP_WIFI_REGULATORY_TYPE_ANATEL, + ESP_WIFI_REGULATORY_TYPE_ISED, + ESP_WIFI_REGULATORY_TYPE_SRRC, + ESP_WIFI_REGULATORY_TYPE_OFCA, + ESP_WIFI_REGULATORY_TYPE_WPC, + ESP_WIFI_REGULATORY_TYPE_MIC, + ESP_WIFI_REGULATORY_TYPE_KCC, + ESP_WIFI_REGULATORY_TYPE_IFETEL, + ESP_WIFI_REGULATORY_TYPE_RCM, + 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, + ESP_WIFI_REGULATORY_TYPE_BB, + ESP_WIFI_REGULATORY_TYPE_BD, + ESP_WIFI_REGULATORY_TYPE_BH, + ESP_WIFI_REGULATORY_TYPE_BN, + ESP_WIFI_REGULATORY_TYPE_BO, + ESP_WIFI_REGULATORY_TYPE_BS, + ESP_WIFI_REGULATORY_TYPE_BZ, + ESP_WIFI_REGULATORY_TYPE_CF, + ESP_WIFI_REGULATORY_TYPE_CR, + ESP_WIFI_REGULATORY_TYPE_CU, + ESP_WIFI_REGULATORY_TYPE_DM, + ESP_WIFI_REGULATORY_TYPE_DZ, + ESP_WIFI_REGULATORY_TYPE_EC, + ESP_WIFI_REGULATORY_TYPE_EG, + 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, + ESP_WIFI_REGULATORY_TYPE_KN, + ESP_WIFI_REGULATORY_TYPE_KP, + ESP_WIFI_REGULATORY_TYPE_KW, + ESP_WIFI_REGULATORY_TYPE_KY, + ESP_WIFI_REGULATORY_TYPE_KZ, + ESP_WIFI_REGULATORY_TYPE_LK, + ESP_WIFI_REGULATORY_TYPE_MA, + ESP_WIFI_REGULATORY_TYPE_MO, + ESP_WIFI_REGULATORY_TYPE_MV, + ESP_WIFI_REGULATORY_TYPE_MY, + ESP_WIFI_REGULATORY_TYPE_NA, + ESP_WIFI_REGULATORY_TYPE_OM, + ESP_WIFI_REGULATORY_TYPE_PA, + ESP_WIFI_REGULATORY_TYPE_PH, + ESP_WIFI_REGULATORY_TYPE_PK, + ESP_WIFI_REGULATORY_TYPE_QA, + ESP_WIFI_REGULATORY_TYPE_RS, + ESP_WIFI_REGULATORY_TYPE_RU, + ESP_WIFI_REGULATORY_TYPE_SG, + ESP_WIFI_REGULATORY_TYPE_SV, + 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, + ESP_WIFI_REGULATORY_TYPE_WS, + ESP_WIFI_REGULATORY_TYPE_YE, + ESP_WIFI_REGULATORY_TYPE_ZA, + ESP_WIFI_REGULATORY_TYPE_MAX, +} esp_wifi_regulatory_type_t; + +const wifi_regdomain_t regdomain_table[WIFI_MAX_SUPPORT_COUNTRY_NUM] = { + {"01", ESP_WIFI_REGULATORY_TYPE_DEFAULT}, + {"AD", ESP_WIFI_REGULATORY_TYPE_CE}, + {"AE", ESP_WIFI_REGULATORY_TYPE_IFETEL}, + {"AF", ESP_WIFI_REGULATORY_TYPE_AF}, + {"AI", ESP_WIFI_REGULATORY_TYPE_AI}, + {"AL", ESP_WIFI_REGULATORY_TYPE_CE}, + {"AM", ESP_WIFI_REGULATORY_TYPE_AM}, + {"AN", ESP_WIFI_REGULATORY_TYPE_AF}, + {"AR", ESP_WIFI_REGULATORY_TYPE_IFETEL}, + {"AS", ESP_WIFI_REGULATORY_TYPE_AS}, + {"AT", ESP_WIFI_REGULATORY_TYPE_CE}, + {"AU", ESP_WIFI_REGULATORY_TYPE_ACMA}, + {"AW", ESP_WIFI_REGULATORY_TYPE_AF}, + {"AZ", ESP_WIFI_REGULATORY_TYPE_AZ}, + {"BA", ESP_WIFI_REGULATORY_TYPE_CE}, + {"BB", ESP_WIFI_REGULATORY_TYPE_BB}, + {"BD", ESP_WIFI_REGULATORY_TYPE_BD}, + {"BE", ESP_WIFI_REGULATORY_TYPE_CE}, + {"BF", ESP_WIFI_REGULATORY_TYPE_IFETEL}, + {"BG", ESP_WIFI_REGULATORY_TYPE_CE}, + {"BH", ESP_WIFI_REGULATORY_TYPE_BH}, + {"BL", ESP_WIFI_REGULATORY_TYPE_AF}, + {"BM", ESP_WIFI_REGULATORY_TYPE_AS}, + {"BN", ESP_WIFI_REGULATORY_TYPE_BN}, + {"BO", ESP_WIFI_REGULATORY_TYPE_BO}, + {"BR", ESP_WIFI_REGULATORY_TYPE_ANATEL}, + {"BS", ESP_WIFI_REGULATORY_TYPE_BS}, + {"BT", ESP_WIFI_REGULATORY_TYPE_AF}, + {"BY", ESP_WIFI_REGULATORY_TYPE_AF}, + {"BZ", ESP_WIFI_REGULATORY_TYPE_BZ}, + {"CA", ESP_WIFI_REGULATORY_TYPE_ISED}, + {"CF", ESP_WIFI_REGULATORY_TYPE_CF}, + {"CH", ESP_WIFI_REGULATORY_TYPE_CE}, + {"CI", ESP_WIFI_REGULATORY_TYPE_IFETEL}, + {"CL", ESP_WIFI_REGULATORY_TYPE_BN}, + {"CN", ESP_WIFI_REGULATORY_TYPE_SRRC}, + {"CO", ESP_WIFI_REGULATORY_TYPE_IFETEL}, + {"CR", ESP_WIFI_REGULATORY_TYPE_CR}, + {"CU", ESP_WIFI_REGULATORY_TYPE_CU}, + {"CX", ESP_WIFI_REGULATORY_TYPE_BS}, + {"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_DM}, + {"DO", ESP_WIFI_REGULATORY_TYPE_DM}, + {"DZ", ESP_WIFI_REGULATORY_TYPE_DZ}, + {"EC", ESP_WIFI_REGULATORY_TYPE_EC}, + {"EE", ESP_WIFI_REGULATORY_TYPE_CE}, + {"EG", ESP_WIFI_REGULATORY_TYPE_EG}, + {"ES", ESP_WIFI_REGULATORY_TYPE_CE}, + {"ET", ESP_WIFI_REGULATORY_TYPE_AF}, + {"FI", ESP_WIFI_REGULATORY_TYPE_CE}, + {"FM", ESP_WIFI_REGULATORY_TYPE_AS}, + {"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}, + {"GH", ESP_WIFI_REGULATORY_TYPE_IFETEL}, + {"GL", ESP_WIFI_REGULATORY_TYPE_AI}, + {"GP", ESP_WIFI_REGULATORY_TYPE_AI}, + {"GR", ESP_WIFI_REGULATORY_TYPE_CE}, + {"GT", ESP_WIFI_REGULATORY_TYPE_GT}, + {"GU", ESP_WIFI_REGULATORY_TYPE_GU}, + {"GY", ESP_WIFI_REGULATORY_TYPE_NCC}, + {"HK", ESP_WIFI_REGULATORY_TYPE_OFCA}, + {"HN", ESP_WIFI_REGULATORY_TYPE_IFETEL}, + {"HR", ESP_WIFI_REGULATORY_TYPE_HR}, + {"HT", ESP_WIFI_REGULATORY_TYPE_AS}, + {"HU", ESP_WIFI_REGULATORY_TYPE_CE}, + {"ID", ESP_WIFI_REGULATORY_TYPE_ID}, + {"IE", ESP_WIFI_REGULATORY_TYPE_CE}, + {"IL", ESP_WIFI_REGULATORY_TYPE_IL}, + {"IN", ESP_WIFI_REGULATORY_TYPE_WPC}, + {"IR", ESP_WIFI_REGULATORY_TYPE_IR}, + {"IS", ESP_WIFI_REGULATORY_TYPE_CE}, + {"IT", ESP_WIFI_REGULATORY_TYPE_CE}, + {"JM", ESP_WIFI_REGULATORY_TYPE_IFETEL}, + {"JO", ESP_WIFI_REGULATORY_TYPE_JO}, + {"JP", ESP_WIFI_REGULATORY_TYPE_MIC}, + {"KE", ESP_WIFI_REGULATORY_TYPE_KE}, + {"KH", ESP_WIFI_REGULATORY_TYPE_AF}, + {"KN", ESP_WIFI_REGULATORY_TYPE_KN}, + {"KP", ESP_WIFI_REGULATORY_TYPE_KP}, + {"KR", ESP_WIFI_REGULATORY_TYPE_KCC}, + {"KW", ESP_WIFI_REGULATORY_TYPE_KW}, + {"KY", ESP_WIFI_REGULATORY_TYPE_KY}, + {"KZ", ESP_WIFI_REGULATORY_TYPE_KZ}, + {"LB", ESP_WIFI_REGULATORY_TYPE_IFETEL}, + {"LC", ESP_WIFI_REGULATORY_TYPE_KN}, + {"LI", ESP_WIFI_REGULATORY_TYPE_CE}, + {"LK", ESP_WIFI_REGULATORY_TYPE_LK}, + {"LS", ESP_WIFI_REGULATORY_TYPE_AF}, + {"LT", ESP_WIFI_REGULATORY_TYPE_CE}, + {"LU", ESP_WIFI_REGULATORY_TYPE_CE}, + {"LV", ESP_WIFI_REGULATORY_TYPE_CE}, + {"MA", ESP_WIFI_REGULATORY_TYPE_MA}, + {"MC", ESP_WIFI_REGULATORY_TYPE_CE}, + {"MD", ESP_WIFI_REGULATORY_TYPE_CE}, + {"ME", ESP_WIFI_REGULATORY_TYPE_CE}, + {"MF", ESP_WIFI_REGULATORY_TYPE_AI}, + {"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}, + {"MR", ESP_WIFI_REGULATORY_TYPE_AF}, + {"MT", ESP_WIFI_REGULATORY_TYPE_CE}, + {"MU", ESP_WIFI_REGULATORY_TYPE_BS}, + {"MV", ESP_WIFI_REGULATORY_TYPE_MV}, + {"MW", ESP_WIFI_REGULATORY_TYPE_AF}, + {"MX", ESP_WIFI_REGULATORY_TYPE_IFETEL}, + {"MY", ESP_WIFI_REGULATORY_TYPE_MY}, + {"NA", ESP_WIFI_REGULATORY_TYPE_NA}, + {"NG", ESP_WIFI_REGULATORY_TYPE_BO}, + {"NI", ESP_WIFI_REGULATORY_TYPE_AS}, + {"NL", ESP_WIFI_REGULATORY_TYPE_CE}, + {"NO", ESP_WIFI_REGULATORY_TYPE_CE}, + {"NP", ESP_WIFI_REGULATORY_TYPE_BN}, + {"NZ", ESP_WIFI_REGULATORY_TYPE_RCM}, + {"OM", ESP_WIFI_REGULATORY_TYPE_OM}, + {"PA", ESP_WIFI_REGULATORY_TYPE_PA}, + {"PE", ESP_WIFI_REGULATORY_TYPE_IFETEL}, + {"PF", ESP_WIFI_REGULATORY_TYPE_AI}, + {"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}, + {"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}, + {"RO", ESP_WIFI_REGULATORY_TYPE_CE}, + {"RS", ESP_WIFI_REGULATORY_TYPE_RS}, + {"RU", ESP_WIFI_REGULATORY_TYPE_RU}, + {"RW", ESP_WIFI_REGULATORY_TYPE_IFETEL}, + {"SA", ESP_WIFI_REGULATORY_TYPE_AF}, + {"SE", ESP_WIFI_REGULATORY_TYPE_CE}, + {"SG", ESP_WIFI_REGULATORY_TYPE_SG}, + {"SI", ESP_WIFI_REGULATORY_TYPE_CE}, + {"SK", ESP_WIFI_REGULATORY_TYPE_CE}, + {"SN", ESP_WIFI_REGULATORY_TYPE_IFETEL}, + {"SR", ESP_WIFI_REGULATORY_TYPE_AF}, + {"SV", ESP_WIFI_REGULATORY_TYPE_SV}, + {"SY", ESP_WIFI_REGULATORY_TYPE_SY}, + {"TC", ESP_WIFI_REGULATORY_TYPE_TC}, + {"TD", ESP_WIFI_REGULATORY_TYPE_AF}, + {"TG", ESP_WIFI_REGULATORY_TYPE_TG}, + {"TH", ESP_WIFI_REGULATORY_TYPE_IFETEL}, + {"TN", ESP_WIFI_REGULATORY_TYPE_MA}, + {"TR", ESP_WIFI_REGULATORY_TYPE_TR}, + {"TT", ESP_WIFI_REGULATORY_TYPE_IFETEL}, + {"TW", ESP_WIFI_REGULATORY_TYPE_NCC}, + {"TZ", ESP_WIFI_REGULATORY_TYPE_TZ}, + {"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}, + {"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}, + {"WS", ESP_WIFI_REGULATORY_TYPE_WS}, + {"YE", ESP_WIFI_REGULATORY_TYPE_YE}, + {"YT", ESP_WIFI_REGULATORY_TYPE_AI}, + {"ZA", ESP_WIFI_REGULATORY_TYPE_ZA}, + {"ZW", ESP_WIFI_REGULATORY_TYPE_AF}, +}; + +const wifi_regulatory_t regulatory_data[] = { + /* ESP_WIFI_REGULATORY_TYPE_DEFAULT */ + { + 3, /* Number of rules */ + { + { 1, 11, 2, 20, 0, 0 }, /* chan:1~11, 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.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_CE */ + { + 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_ACMA */ + { + 7, /* Number of rules */ + { + { 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, 20, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:20(dBm), dfs:1, reserved.*/ + { 100, 116, 3, 26, 1, 0 }, /* chan:100~116, max_bw:80M, max_power:26(dBm), dfs:1, reserved.*/ + { 132, 144, 3, 26, 1, 0 }, /* chan:132~144, max_bw:80M, 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, 173, 1, 13, 0, 0 }, /* chan:173~173, max_bw:20M, max_power:13(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_ANATEL */ + { + 5, /* Number of rules */ + { + { 1, 13, 2, 30, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:30(dBm), dfs:0, reserved.*/ + { 36, 48, 3, 27, 0, 0 }, /* chan:36~48, max_bw:80M, max_power:27(dBm), dfs:0, reserved.*/ + { 52, 64, 3, 27, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:27(dBm), dfs:1, reserved.*/ + { 100, 140, 4, 27, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:27(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_ISED */ + { + 6, /* Number of rules */ + { + { 1, 11, 2, 30, 0, 0 }, /* chan:1~11, max_bw:40M, max_power:30(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.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_SRRC */ + { + 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.*/ + { 149, 165, 3, 33, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:33(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_OFCA */ + { + 5, /* Number of rules */ + { + { 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, 23, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:23(dBm), dfs:1, reserved.*/ + { 100, 144, 4, 27, 1, 0 }, /* chan:100~144, max_bw:160M, max_power:27(dBm), dfs:1, reserved.*/ + { 149, 165, 3, 36, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:36(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_WPC */ + { + 5, /* Number of rules */ + { + { 1, 13, 2, 30, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:30(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, 24, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:24(dBm), dfs:1, reserved.*/ + { 100, 140, 4, 24, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:24(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_MIC */ + { + 5, /* Number of rules */ + { + { 1, 13, 2, 20, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/ + { 14, 14, 1, 20, 0, 0 }, /* chan:14~14, max_bw:20M, 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, 144, 4, 23, 1, 0 }, /* chan:100~144, max_bw:160M, max_power:23(dBm), dfs:1, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_KCC */ + { + 6, /* Number of rules */ + { + { 1, 13, 2, 23, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:23(dBm), dfs:0, reserved.*/ + { 36, 44, 2, 23, 0, 0 }, /* chan:36~44, max_bw:40M, max_power:23(dBm), dfs:0, reserved.*/ + { 48, 48, 1, 17, 0, 0 }, /* chan:48~48, max_bw:20M, max_power:17(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, 20, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:20(dBm), dfs:1, reserved.*/ + { 149, 165, 3, 23, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:23(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_IFETEL */ + { + 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, 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_RCM */ + { + 5, /* Number of rules */ + { + { 1, 13, 2, 36, 0, 0 }, /* chan:1~13, max_bw:40M, 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, 27, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:27(dBm), dfs:1, reserved.*/ + { 100, 144, 4, 27, 1, 0 }, /* chan:100~144, max_bw:160M, max_power:27(dBm), dfs:1, reserved.*/ + { 149, 173, 3, 36, 0, 0 }, /* chan:149~173, max_bw:80M, max_power:36(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_NCC */ + { + 5, /* Number of rules */ + { + { 1, 13, 2, 30, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:30(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, 23, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:23(dBm), dfs:1, reserved.*/ + { 100, 144, 4, 23, 1, 0 }, /* chan:100~144, max_bw:160M, max_power:23(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_FCC */ + { + 6, /* Number of rules */ + { + { 1, 11, 2, 30, 0, 0 }, /* chan:1~11, max_bw:40M, max_power:30(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, 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.*/ + { 173, 177, 2, 27, 0, 0 }, /* chan:173~177, max_bw:40M, max_power:27(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_AF */ + { + 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_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 */ + { + { 1, 13, 2, 20, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/ + { 36, 64, 4, 17, 1, 0 }, /* chan:36~64, max_bw:160M, max_power:17(dBm), dfs:1, reserved.*/ + { 100, 173, 4, 17, 1, 0 }, /* chan:100~173, max_bw:160M, max_power:17(dBm), dfs:1, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_AS */ + { + 5, /* Number of rules */ + { + { 1, 11, 2, 30, 0, 0 }, /* chan:1~11, max_bw:40M, max_power:30(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_AZ */ + { + 3, /* 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, 18, 0, 0 }, /* chan:36~48, max_bw:80M, max_power:18(dBm), dfs:0, reserved.*/ + { 52, 64, 3, 18, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:18(dBm), dfs:1, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_BB */ + { + 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, 23, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:23(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_BD */ + { + 2, /* Number of rules */ + { + { 1, 13, 2, 20, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/ + { 149, 165, 3, 30, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:30(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_BH */ + { + 4, /* Number of rules */ + { + { 1, 13, 2, 20, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/ + { 36, 64, 3, 23, 1, 0 }, /* chan:36~64, max_bw:80M, max_power:23(dBm), dfs:1, reserved.*/ + { 100, 140, 3, 27, 1, 0 }, /* chan:100~140, max_bw:80M, max_power:27(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_BN */ + { + 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.*/ + { 149, 165, 3, 20, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:20(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_BO */ + { + 3, /* Number of rules */ + { + { 1, 13, 2, 20, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/ + { 52, 64, 3, 30, 1, 0 }, /* chan:52~64, max_bw:80M, 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.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_BS */ + { + 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_BZ */ + { + 2, /* Number of rules */ + { + { 1, 13, 2, 30, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:30(dBm), dfs:0, reserved.*/ + { 149, 165, 3, 30, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:30(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_CF */ + { + 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, 2, 17, 0, 0 }, /* chan:36~48, max_bw:40M, max_power:17(dBm), dfs:0, reserved.*/ + { 52, 64, 2, 24, 1, 0 }, /* chan:52~64, max_bw:40M, max_power:24(dBm), dfs:1, reserved.*/ + { 100, 144, 2, 24, 1, 0 }, /* chan:100~144, max_bw:40M, max_power:24(dBm), dfs:1, reserved.*/ + { 149, 165, 2, 30, 0, 0 }, /* chan:149~165, max_bw:40M, max_power:30(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_CR */ + { + 5, /* 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.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_CU */ + { + 4, /* Number of rules */ + { + { 1, 13, 2, 23, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:23(dBm), dfs:0, reserved.*/ + { 36, 64, 3, 23, 0, 0 }, /* chan:36~64, max_bw:80M, max_power:23(dBm), dfs:0, reserved.*/ + { 100, 140, 3, 23, 0, 0 }, /* chan:100~140, max_bw:80M, max_power:23(dBm), dfs:0, reserved.*/ + { 149, 165, 3, 23, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:23(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_DM */ + { + 4, /* Number of rules */ + { + { 1, 11, 2, 30, 0, 0 }, /* chan:1~11, max_bw:40M, max_power:30(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, 23, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:23(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_DZ */ + { + 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, 23, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:23(dBm), dfs:1, reserved.*/ + { 100, 132, 4, 23, 1, 0 }, /* chan:100~132, max_bw:160M, max_power:23(dBm), dfs:1, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_EC */ + { + 5, /* Number of rules */ + { + { 1, 13, 2, 30, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:30(dBm), dfs:0, reserved.*/ + { 36, 48, 3, 16, 1, 0 }, /* chan:36~48, max_bw:80M, max_power:16(dBm), dfs:1, reserved.*/ + { 52, 64, 3, 20, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:20(dBm), dfs:1, reserved.*/ + { 100, 140, 4, 20, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:20(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_EG */ + { + 3, /* 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.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_GB */ + { + 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, 144, 4, 26, 1, 0 }, /* chan:100~144, max_bw:160M, max_power:26(dBm), dfs:1, reserved.*/ + { 149, 165, 3, 23, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:23(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_GD */ + { + 5, /* Number of rules */ + { + { 1, 11, 2, 30, 0, 0 }, /* chan:1~11, max_bw:40M, max_power:30(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, 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_GT */ + { + 4, /* Number of rules */ + { + { 1, 13, 2, 26, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:26(dBm), dfs:0, reserved.*/ + { 36, 64, 3, 23, 0, 0 }, /* chan:36~64, max_bw:80M, max_power:23(dBm), dfs:0, reserved.*/ + { 100, 140, 4, 23, 0, 0 }, /* chan:100~140, max_bw:160M, max_power:23(dBm), dfs:0, reserved.*/ + { 149, 165, 3, 26, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:26(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_GU */ + { + 5, /* Number of rules */ + { + { 1, 11, 2, 30, 0, 0 }, /* chan:1~11, max_bw:40M, max_power:30(dBm), dfs:0, reserved.*/ + { 36, 48, 1, 17, 0, 0 }, /* chan:36~48, max_bw:20M, max_power:17(dBm), dfs:0, reserved.*/ + { 52, 64, 1, 24, 1, 0 }, /* chan:52~64, max_bw:20M, max_power:24(dBm), dfs:1, reserved.*/ + { 100, 144, 1, 24, 1, 0 }, /* chan:100~144, max_bw:20M, max_power:24(dBm), dfs:1, reserved.*/ + { 149, 165, 1, 30, 0, 0 }, /* chan:149~165, max_bw:20M, max_power:30(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_HR */ + { + 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, 23, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:23(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_ID */ + { + 3, /* Number of rules */ + { + { 1, 13, 2, 26, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:26(dBm), dfs:0, reserved.*/ + { 36, 64, 4, 23, 0, 0 }, /* chan:36~64, max_bw:160M, max_power:23(dBm), dfs:0, reserved.*/ + { 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 */ + { + { 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, 23, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:23(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_JO */ + { + 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, 23, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:23(dBm), dfs:1, reserved.*/ + { 100, 140, 3, 27, 1, 0 }, /* chan:100~140, max_bw:80M, max_power:27(dBm), dfs:1, reserved.*/ + { 149, 173, 3, 23, 0, 0 }, /* chan:149~173, max_bw:80M, max_power:23(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_KE */ + { + 5, /* Number of rules */ + { + { 1, 13, 2, 33, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:33(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, 17, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:17(dBm), dfs:1, reserved.*/ + { 100, 140, 3, 24, 1, 0 }, /* chan:100~140, max_bw:80M, max_power:24(dBm), dfs:1, reserved.*/ + { 149, 173, 2, 24, 1, 0 }, /* chan:149~173, max_bw:40M, max_power:24(dBm), dfs:1, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_KN */ + { + 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, 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, 30, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:30(dBm), dfs:1, reserved.*/ + { 149, 161, 3, 30, 0, 0 }, /* chan:149~161, max_bw:80M, max_power:30(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_KP */ + { + 5, /* Number of rules */ + { + { 1, 13, 1, 20, 0, 0 }, /* chan:1~13, max_bw:20M, max_power:20(dBm), dfs:0, reserved.*/ + { 36, 48, 1, 20, 0, 0 }, /* chan:36~48, max_bw:20M, max_power:20(dBm), dfs:0, reserved.*/ + { 52, 64, 1, 20, 1, 0 }, /* chan:52~64, max_bw:20M, max_power:20(dBm), dfs:1, reserved.*/ + { 100, 124, 1, 30, 1, 0 }, /* chan:100~124, max_bw:20M, max_power:30(dBm), dfs:1, reserved.*/ + { 149, 161, 1, 30, 0, 0 }, /* chan:149~161, max_bw:20M, max_power:30(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_KW */ + { + 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, 17, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:17(dBm), dfs:1, reserved.*/ + { 100, 161, 4, 24, 1, 0 }, /* chan:100~161, max_bw:160M, max_power:24(dBm), dfs:1, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_KY */ + { + 5, /* Number of rules */ + { + { 1, 13, 2, 30, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:30(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, 23, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:23(dBm), dfs:1, reserved.*/ + { 100, 144, 4, 23, 1, 0 }, /* chan:100~144, 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_KZ */ + { + 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, 20, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:20(dBm), dfs:1, reserved.*/ + { 149, 165, 3, 20, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:20(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_LK */ + { + 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, 1, 17, 0, 0 }, /* chan:36~48, max_bw:20M, max_power:17(dBm), dfs:0, reserved.*/ + { 52, 64, 1, 24, 1, 0 }, /* chan:52~64, max_bw:20M, max_power:24(dBm), dfs:1, reserved.*/ + { 100, 144, 1, 24, 1, 0 }, /* chan:100~144, max_bw:20M, max_power:24(dBm), dfs:1, reserved.*/ + { 149, 165, 1, 30, 0, 0 }, /* chan:149~165, max_bw:20M, max_power:30(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_MA */ + { + 3, /* 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.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_MO */ + { + 5, /* Number of rules */ + { + { 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, 23, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:23(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, 30, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:30(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_MV */ + { + 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.*/ + { 149, 165, 3, 20, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:20(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_MY */ + { + 5, /* Number of rules */ + { + { 1, 13, 2, 26, 0, 0 }, /* chan:1~13, 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.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_NA */ + { + 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, 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, 21, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:21(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_OM */ + { + 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, 27, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:27(dBm), dfs:1, reserved.*/ + { 149, 165, 3, 28, 1, 0 }, /* chan:149~165, max_bw:80M, max_power:28(dBm), dfs:1, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_PA */ + { + 5, /* Number of rules */ + { + { 1, 13, 2, 36, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:36(dBm), dfs:0, reserved.*/ + { 36, 48, 3, 36, 0, 0 }, /* chan:36~48, max_bw:80M, max_power:36(dBm), dfs:0, reserved.*/ + { 52, 64, 3, 30, 0, 0 }, /* chan:52~64, max_bw:80M, max_power:30(dBm), dfs:0, reserved.*/ + { 100, 140, 4, 30, 0, 0 }, /* chan:100~140, max_bw:160M, max_power:30(dBm), dfs:0, reserved.*/ + { 149, 165, 3, 36, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:36(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_PH */ + { + 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, 23, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:23(dBm), dfs:1, reserved.*/ + { 100, 140, 4, 24, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:24(dBm), dfs:1, reserved.*/ + { 149, 165, 3, 24, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:24(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_PK */ + { + 1, /* Number of rules */ + { + { 149, 173, 3, 30, 0, 0 }, /* chan:149~173, max_bw:80M, max_power:30(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_QA */ + { + 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, 23, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:23(dBm), dfs:1, reserved.*/ + { 100, 140, 4, 20, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:20(dBm), dfs:1, reserved.*/ + { 149, 173, 3, 20, 1, 0 }, /* chan:149~173, max_bw:80M, max_power:20(dBm), dfs:1, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_RS */ + { + 6, /* 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, 23, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:23(dBm), dfs:1, reserved.*/ + { 100, 140, 4, 27, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:27(dBm), dfs:1, reserved.*/ + { 149, 165, 3, 24, 1, 0 }, /* chan:149~165, max_bw:80M, max_power:24(dBm), dfs:1, reserved.*/ + { 173, 173, 1, 24, 0, 0 }, /* chan:173~173, max_bw:20M, max_power:24(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_RU */ + { + 3, /* Number of rules */ + { + { 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.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_SG */ + { + 5, /* Number of rules */ + { + { 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, 144, 4, 26, 1, 0 }, /* chan:100~144, 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.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_SV */ + { + 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, 1, 17, 0, 0 }, /* chan:36~48, max_bw:20M, max_power:17(dBm), dfs:0, reserved.*/ + { 52, 64, 1, 23, 1, 0 }, /* chan:52~64, max_bw:20M, max_power:23(dBm), dfs:1, reserved.*/ + { 149, 165, 1, 30, 0, 0 }, /* chan:149~165, max_bw:20M, max_power:30(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_SY */ + { + 6, /* 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, 23, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:23(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, 23, 1, 0 }, /* chan:149~165, max_bw:80M, max_power:23(dBm), dfs:1, reserved.*/ + { 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 */ + { + { 1, 13, 2, 20, 1, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:1, reserved.*/ + { 36, 64, 3, 20, 1, 0 }, /* chan:36~64, max_bw:80M, max_power:20(dBm), dfs:1, reserved.*/ + { 100, 165, 4, 27, 1, 0 }, /* chan:100~165, max_bw:160M, max_power:27(dBm), dfs:1, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_TR */ + { + 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, 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 */ + { + { 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, 20, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:20(dBm), dfs:1, reserved.*/ + { 149, 165, 3, 20, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:20(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_VE */ + { + 4, /* Number of rules */ + { + { 1, 13, 2, 30, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:30(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, 23, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:23(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_VN */ + { + 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.*/ + { 149, 165, 3, 30, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:30(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_WS */ + { + 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, 2, 20, 0, 0 }, /* chan:36~48, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/ + { 52, 64, 2, 20, 1, 0 }, /* chan:52~64, max_bw:40M, max_power:20(dBm), dfs:1, reserved.*/ + { 100, 140, 2, 27, 1, 0 }, /* chan:100~140, max_bw:40M, max_power:27(dBm), dfs:1, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_YE */ + { + 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_ZA */ + { + 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, 30, 0, 0 }, /* chan:100~140, max_bw:160M, max_power:30(dBm), dfs:0, reserved.*/ + } + }, +}; +#else +typedef enum { + ESP_WIFI_REGULATORY_TYPE_DEFAULT, + ESP_WIFI_REGULATORY_TYPE_CE, + ESP_WIFI_REGULATORY_TYPE_ACMA, + ESP_WIFI_REGULATORY_TYPE_ANATEL, + ESP_WIFI_REGULATORY_TYPE_ISED, + ESP_WIFI_REGULATORY_TYPE_SRRC, + ESP_WIFI_REGULATORY_TYPE_OFCA, + ESP_WIFI_REGULATORY_TYPE_WPC, + ESP_WIFI_REGULATORY_TYPE_MIC, + ESP_WIFI_REGULATORY_TYPE_KCC, + ESP_WIFI_REGULATORY_TYPE_IFETEL, + 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_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] = { + {"01", ESP_WIFI_REGULATORY_TYPE_DEFAULT}, + {"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}, + {"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}, + {"JP", ESP_WIFI_REGULATORY_TYPE_MIC}, + {"KE", ESP_WIFI_REGULATORY_TYPE_KE}, + {"KH", ESP_WIFI_REGULATORY_TYPE_CE}, + {"KN", ESP_WIFI_REGULATORY_TYPE_CE}, + {"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}, + {"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}, + {"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}, +}; + +const wifi_regulatory_t regulatory_data[] = { + /* ESP_WIFI_REGULATORY_TYPE_DEFAULT */ + { + 1, /* Number of rules */ + { + { 1, 11, 2, 20, 0, 0 }, /* chan:1~11, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_CE */ + { + 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_ACMA */ + { + 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 */ + { + 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 */ + { + 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_CE */ + { + 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 */ + { + 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 */ + { + 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_MIC */ + { + 2, /* Number of rules */ + { + { 1, 13, 2, 20, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/ + { 14, 14, 1, 20, 0, 0 }, /* chan:14~14, max_bw:20M, max_power:20(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_KCC */ + { + 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_CE */ + { + 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 */ + { + 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 */ + { + 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 */ + { + 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 */ + { + { 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 */ + { + { 1, 13, 2, 33, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:33(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_KP */ + { + 1, /* Number of rules */ + { + { 1, 13, 1, 20, 0, 0 }, /* chan:1~13, max_bw:20M, max_power:20(dBm), dfs:0, reserved.*/ + } + }, + /* ESP_WIFI_REGULATORY_TYPE_OM */ + { + 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_PK */ + { + 0, /* Number of rules */ + { + } + }, + /* ESP_WIFI_REGULATORY_TYPE_TG */ + { + 1, /* Number of rules */ + { + { 1, 13, 2, 20, 1, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:1, reserved.*/ + } + }, +}; +#endif // CONFIG_SOC_WIFI_SUPPORT_5G diff --git a/components/esp_wifi/regulatory/esp_wifi_regulatory.txt b/components/esp_wifi/regulatory/esp_wifi_regulatory.txt new file mode 100644 index 0000000000..4454a5c9a8 --- /dev/null +++ b/components/esp_wifi/regulatory/esp_wifi_regulatory.txt @@ -0,0 +1,2068 @@ +# SPDX-FileCopyrightText: 2008 Luis R. Rodriguez +# SPDX-FileCopyrightText: 2008 Johannes Berg +# SPDX-FileCopyrightText: 2008 Michael Green +# +# SPDX-FileContributor: 2025 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: Apache-2.0 +# +# Copyright (c) 2008, Luis R. Rodriguez +# Copyright (c) 2008, Johannes Berg +# Copyright (c) 2008, Michael Green +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. + +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# +# git://git.kernel.org/pub/scm/linux/kernel/git/wens/wireless-regdb.git +# commit 6953f19b96f4bf21b22de5c039e372bb33e2c96b + +wmmrule ETSI: + vo_c: cw_min=3, cw_max=7, aifsn=2, cot=2 + vi_c: cw_min=7, cw_max=15, aifsn=2, cot=4 + be_c: cw_min=15, cw_max=1023, aifsn=3, cot=6 + bk_c: cw_min=15, cw_max=1023, aifsn=7, cot=6 + vo_ap: cw_min=3, cw_max=7, aifsn=1, cot=2 + vi_ap: cw_min=7, cw_max=15, aifsn=1, cot=4 + be_ap: cw_min=15, cw_max=63, aifsn=3, cot=6 + bk_ap: cw_min=15, cw_max=1023, aifsn=7, cot=6 + +# This is the world safe regulatory domain +country 01: + # Channel 1 - 11. + (2402 - 2472 @ 40), (20) + + # Channel 36 - 48 + (5170 - 5250 @ 80), (20), NO-IR, AUTO-BW + # Channel 52 - 64 + (5250 - 5330 @ 80), (20), NO-IR, DFS, AUTO-BW + +# AD as part of 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 +# 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 +country AD: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 60 GHz band channels 1-4, ref: Etsi En 302 567 + (57000 - 66000 @ 2160), (40) + +# Source: +# https://wam.ae/en/details/1395302898209 +country AE: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + (5925 - 6425 @ 320), (250 mW), NO-OUTDOOR + +country AF: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +# Source: +# http://pucanguilla.org/Downloads/January2005-Anguilla%20Table%20of%20Allocations.pdf +country AI: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI + (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI + (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI + +# AL as part of 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 +# 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 +country AL: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + +# Source: +# 2.4 GHz https://www.psrc.am/contents/document/4749 +# 5 GHz https://www.psrc.am/contents/document/11375 +country AM: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5350 @ 160), (17), NO-OUTDOOR, DFS + (5470 - 5875 @ 160), (17), NO-OUTDOOR, DFS + +country AN: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +# Source: +# https://www.boletinoficial.gob.ar/detalleAviso/primera/287126/20230524 +country AR: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + (5925 - 7125 @ 320), (12), NO-OUTDOOR + +country AS: DFS-FCC + (2402 - 2472 @ 40), (30) + (5170 - 5250 @ 80), (24), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +# AT 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 +# 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 (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 +country AT: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 71000 @ 2160), (40) + +# Source: +# 'Item' in the comments below refers to each numbered rule found at: +# https://www.legislation.gov.au/Details/F2023C00524 +# 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 59 + (2400 - 2483.5 @ 40), (4000 mW) + + # Item 61 + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW + + # Item 62 (200 mW allowed if TPC is used) + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, AUTO-BW, DFS + + # Item 63(a) (1000 mW with TPC) + (5470 - 5600 @ 80), (500 mW), DFS + + # Item 63(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 + (5730 - 5850 @ 80), (4000 mW), AUTO-BW + + # Item 22 + (5850 - 5875 @ 20), (25 mW), AUTO-BW + + # Item 63AA (25 mW if outdoors) + (5925 - 6425 @ 160), (250 mW), NO-OUTDOOR + + # Item 65 + (57000 - 71000 @ 2160), (20000 mW), NO-OUTDOOR + +country AW: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +country AZ: 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 + +# BA as part of 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 +# 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 +country BA: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 60 GHz band channels 1-4, ref: Etsi En 302 567 + (57000 - 66000 @ 2160), (40) + +country BB: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (23), AUTO-BW + (5250 - 5330 @ 80), (23), DFS, AUTO-BW + (5735 - 5835 @ 80), (30) + +country BD: DFS-JP + (2402 - 2482 @ 40), (20) + (5735 - 5835 @ 80), (30) + +# BE 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 +# 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 +# BE: https://www.ibpt.be/public/files/en/21760/B03-01_2.1_EN.pdf +# 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 +country BE: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +country BF: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +# Bulgarian rules as defined by the Communications Regulation Commission in the +# following documents: +# +# Rules for carrying out electronic communications through radio equipment using +# radio spectrum, which does not need to be individually assigned (the Rules): +# http://www.crc.bg/files/_bg/Pravila_09_06_2015.pdf +# +# List of radio equipment that uses harmonized within the European Union bands +# and electronic communications terminal equipment (the List): +# http://www.crc.bg/files/_bg/Spisak_2015.pdf +# +# Note: The transmit power limits in the 5250-5350 MHz and 5470-5725 MHz bands +# can be raised by 3 dBm if TPC is enabled. Refer to BDS EN 301 893 for details. +# +# BG 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 +# 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 +# BG: https://crc.bg/files/_en/Electronic_Communications_Revised_EN1.pdf +# BG: acceptance of 2006/771/EC https://crc.bg/files/Pravila_06_12_2018.pdf +# +# Amendment of the rules for free use of radio frequency spectrum +# (Изменение и допълнение на Правилата за свободно използване на радиочестотния спектър) +# https://dv.parliament.bg/DVWeb/showMaterialDV.jsp?idMat=168250 +country BG: DFS-ETSI + # Wideband data transmission systems (WDTS) in the 2.4GHz ISM band, ref: + # I.22 of the List, BDS EN 300 328 + (2400 - 2483.5 @ 40), (100 mW) + # 5 GHz Radio Local Area Networks (RLANs), ref: + # II.H01 of the List, BDS EN 301 893 + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + # II.H01 of the List, I.54 from the List, BDS EN 301 893 + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + # I.43 of the List, BDS EN 300 440-2, BDS EN 300 440-1 + (5725 - 5875 @ 80), (25 mW) + # WiFi 6E + (5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + # II.H03 of the List, BDS EN 302 567-2 + (57000 - 66000 @ 2160), (40) + +# Source: +# https://tra-website-prod-01.s3-me-south-1.amazonaws.com/Media/Documents/Publications/20240227160125242_dudbapc5_5dk.pdf +# (via https://www.tra.org.bh/en/category/apply-for-type-approval) +country BH: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5350 @ 80), (200 mW), DFS, NO-OUTDOOR + (5470 - 5725 @ 80), (27), DFS + (5725 - 5875 @ 80), (24), DFS + (5925 - 6425 @ 320), (200 mW), NO-OUTDOOR + (57000 - 66000 @ 2160), (40), NO-OUTDOOR + +country BL: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +country BM: DFS-FCC + (2402 - 2472 @ 40), (30) + (5170 - 5250 @ 80), (24), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country BN: DFS-JP + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5735 - 5835 @ 80), (20) + +country BO: DFS-JP + (2402 - 2482 @ 40), (20) + (5250 - 5330 @ 80), (30), DFS + (5735 - 5835 @ 80), (30) + +# 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 +country BR: DFS-FCC + (2400 - 2483.5 @ 40), (30) + # The next three ranges have been reduced by 3dB, could be increased + # to 30dBm if TPC is implemented. + (5150 - 5250 @ 80), (27), NO-OUTDOOR, AUTO-BW + (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 + # EIRP=40dBm (43dBm peak) + (57000 - 71000 @ 2160), (40) + +country BS: 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) + +# Source: +# http://www.bicma.gov.bt/paper/publication/nrrpart4.pdf +country BT: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +country BY: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +country BZ: DFS-JP + (2402 - 2482 @ 40), (30) + (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 +# 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) + (5925 - 7125 @ 320), (12), NO-OUTDOOR + +# Source: +# http://www.art-rca.org +country CF: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 40), (17) + (5250 - 5330 @ 40), (24), DFS + (5490 - 5730 @ 40), (24), DFS + (5735 - 5835 @ 40), (30) + + +# CH as part of 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 +# 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 +# CH: https://www.ofcomnet.ch/api/rir/1010/05 +# CH: https://www.ofcomnet.ch/api/rir/1010/04 +# CH: https://www.ofcomnet.ch/api/rir/1008/12 +# CH: https://www.ofcomnet.ch/#/fatTable +country CH: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # https://www.ofcomnet.ch/api/rir/1010/11 + (5945 - 6425 @ 320), (200 mW), NO-OUTDOOR, wmmrule=ETSI + # https://www.ofcomnet.ch/api/rir/1010/07 + (57000 - 71000 @ 2160), (40) + +country CI: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +# Source: +# https://www.bcn.cl/leychile/navegar?idNorma=1109333&idParte=9841504&idVersion=&r_c=6 +country CL: DFS-JP + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5735 - 5835 @ 80), (20) + (5925 - 6425 @ 320), (12), NO-OUTDOOR + +# Source: +# https://wap.miit.gov.cn/zwgk/zcwj/wjfb/tz/art/2021/art_e4ae71252eab42928daf0ea620976e4e.html +# https://wap.miit.gov.cn/cms_files/filemanager/1226211233/attach/20219/d125301b13454551b698ff5afa49ca28.pdf +# https://www.miit.gov.cn/cms_files/filemanager/1226211233/attach/20236/d1dc19424d5a4cfe90d631adeee8dd58.pdf +# Note: The transmit power for 5250-5350MHz bands can be raised by 3dBm when TPC is implemented +country CN: DFS-FCC + (2400 - 2483.5 @ 40), (20) + (5150 - 5250 @ 80), (23), NO-OUTDOOR, AUTO-BW + (5250 - 5350 @ 80), (20), NO-OUTDOOR, DFS, AUTO-BW + (5725 - 5850 @ 80), (33) + # 60 GHz band channels 1,4: 28dBm, channels 2,3: 44dBm + # ref: http://www.miit.gov.cn/n11293472/n11505629/n11506593/n11960250/n11960606/n11960700/n12330791.files/n12330790.pdf + (57240 - 59400 @ 2160), (28) + (59400 - 63720 @ 2160), (44) + (63720 - 65880 @ 2160), (28) + +# Source: +# https://www.ane.gov.co/Sliders/archivos/gesti%C3%B3n%20t%C3%A9cnica/Estudios%20de%20gesti%C3%B3n%20y%20planeaci%C3%B3n/Banda%206%20GHz/Documentos%20decisi%C3%B3n/Resolucion%20000737%20del%2018112022.pdf +country CO: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + (5925 - 7125 @ 320), (12), NO-OUTDOOR + +# Source: +# https://storage.googleapis.com/eleoscompliance1.appspot.com/public/PNAF%20modificaci%C3%B3n%20ALCA87_30_04_2021.pdf +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) + (5925 - 7125 @ 320), (30), NO-OUTDOOR + +# Source: +# https://www.mincom.gob.cu/es/marco-legal +# - Redes Informáticas +# Resolución 98- 2019 Reglamento de Redes Inalámbricas: +# https://www.mincom.gob.cu/sites/default/files/marcoregulatorio/r_98-19_reglamento_redes_inalambricas.pdf +country CU: DFS-FCC + (2400 - 2483.5 @ 40), (200 mW) + (5150 - 5350 @ 80), (200 mW), NO-IR, NO-OUTDOOR + (5470 - 5725 @ 80), (250 mW), NO-IR + (5725 - 5850 @ 80), (200 mW) + +country CX: 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) + + +# CY 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 +# 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 +# CY: http://www.mcw.gov.cy/mcw/dec/dec.nsf/all/292484CFC7013DD4C2256EBA0023D447/$file/Sxedio%20Radiosyxnothtwn%20ths%20Dhmokratias-3-8-2018-E2.2(English%20Unified%20Unofficial).pdf?openelement +country CY: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# CZ 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 +# 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 +# CZ: https://www.ctu.cz/cs/download/vseobecna-opravneni/archiv/vo-r_12-06_2010-09.pdf +# CZ: https://www.ctu.cz/sites/default/files/obsah/ctu/vseobecne-opravneni-c.vo-r/10/12.2017-10/obrazky/vo-r10-122017-10.pdf +country CZ: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# DE 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 +# 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 +# +# Allocation for the 2.4 GHz band (Vfg 10 / 2013, Allgemeinzuteilung von +# Frequenzen für die Nutzung in lokalen Netzwerken; Wireless Local Area +# Networks (WLAN-Funkanwendungen). +# https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Frequenzen/Allgemeinzuteilungen/2013_10_WLAN_2,4GHz_pdf.pdf +# +# Allocation for the 5 GHz band (Vfg. 7 / 2010, Allgemeinzuteilung von +# Frequenzen in den Bereichen 5150 MHz - 5350 MHz und 5470 MHz - 5725 MHz für +# Funkanwendungen zur breitbandigen Datenübertragung, WAS/WLAN („Wireless +# Access Systems including Wireless Local Area Networks“). +# https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Frequenzen/Allgemeinzuteilungen/2010_07_WLAN_5GHz_pdf.pdf +# +# The ETSI EN 300 440-1 standard for short range devices in the 5 GHz band has +# been implemented in Germany: +# https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Frequenzen/Allgemeinzuteilungen/2014_69_SRD_pdf.pdf +# +# Allocation for the 60 GHz band (Allgemeinzuteilung von Frequenzen im +# Bereich 57 GHz - 66 GHz für Funkanwendungen für weitbandige +# Datenübertragungssysteme; „Multiple Gigabit WAS/RLAN Systems (MGWS)“). +# https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Frequenzen/Allgemeinzuteilungen/2011_08_MGWS_pdf.pdf +# +# Allocation for the WiFi 6E Band (Allgemeinzuteilung von Frequenzen im +# Bereich 5945 MHz - 6425 MHz für drahtlose Zugangssysteme, +# einschließlich lokaler Funknetze WAS/WLAN („Wireless Access Systems +# including Wireless Local Area Networks“)) +# https://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Frequenzen/Allgemeinzuteilungen/MobilfunkDectWlanCBFunk/vfg552021WLAN6GHz.pdf +country DE: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # WiFi 6E + (5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# DK 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 +# 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 +# DK: https://ens.dk/sites/ens.dk/files/Tele/frekvensplan_0.pdf +# 5GHz: https://erhvervsstyrelsen.dk/sites/default/files/007_interface-datanet_5-6_ghz.pdf.pdf +# 60GHz: https://erhvervsstyrelsen.dk/sites/default/files/radiograenseflader-63.pdf +country DK: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# Source: +# http://www.ntrcdom.org/index.php?option=com_content&view=category&layout=blog&id=10&Itemid=55 +country DM: DFS-FCC + (2402 - 2472 @ 40), (30) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (23), DFS, AUTO-BW + (5735 - 5835 @ 80), (30) + +# Source: +# https://indotel.gob.do/wp-content/uploads/2022/10/res_082_2022.pdf +country DO: DFS-FCC + (2402 - 2472 @ 40), (30) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (23), DFS, AUTO-BW + (5735 - 5835 @ 80), (30) + (5925 - 7125 @ 320), (15), NO-OUTDOOR + +country DZ: DFS-JP + (2402 - 2482 @ 40), (20) + (5170.000 - 5250.000 @ 80.000), (23.00), AUTO-BW + (5250.000 - 5330.000 @ 80.000), (23.00), DFS, AUTO-BW + (5490.000 - 5670.000 @ 160.000), (23.00), DFS + +# Source: +# https://www.arcotel.gob.ec/wp-content/uploads/2018/04/NORMA-ESPECTRO-DE-USO-LIBRE-Y-ESPECTRO-PARA-USO-DETERMINADO-EN-BANDAS-LIBRES.pdf +country EC: DFS-FCC + (2400 - 2483.5 @ 40), (1000 mW) + (5150 - 5250 @ 80), (50 mW), AUTO-BW, DFS + (5250 - 5350 @ 80), (125 mW), AUTO-BW, DFS + (5470 - 5725 @ 160), (125 mW), DFS + (5725 - 5850 @ 80), (1000 mW) + +# EE 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 +# 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://www.itu.int/ITU-D/study_groups/SGP_1998-2002/JGRES09/pdf/estonia.pdf +country EE: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# https://www.tra.gov.eg/wp-content/uploads/2022/03/EGY-NTRA-March-2022-SRD_English_Final.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) + +# 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) +# 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 +# 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 +# ES: https://avancedigital.mineco.gob.es/espectro/Paginas/cnaf.aspx +country ES: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # WiFi 6E + (5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +country ET: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +# FI 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 +# 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 +country FI: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +country FM: DFS-FCC + (2402 - 2472 @ 40), (30) + (5170 - 5250 @ 80), (24), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +# 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 +# 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 +# FR: https://www.anfr.fr/fileadmin/mediatheque/documents/tnrbf/TNRBF_2021-12-14.pdf +country FR: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # WiFi 6E low power indoor + (5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-6 (ETSI EN 302 567 v2.2.1) + (57000 - 71000 @ 2160), (40) + +# GB 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 +# 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 +# GB: https://www.ofcom.org.uk/__data/assets/pdf_file/0019/136009/Ofcom-Information-Sheet-5-GHz-RLANs.pdf +# GB: https://www.ofcom.org.uk/__data/assets/pdf_file/0028/84970/ir-2030.pdf +# GB: https://www.ofcom.org.uk/__data/assets/pdf_file/0013/126121/Statement_Implementing-Ofcoms-decision-on-the-57-71GHz-band.pdf +country GB: DFS-ETSI + (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 - 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 + # 60 GHz band channels 1-6 + (57000 - 71000 @ 2160), (40) + +country GD: DFS-FCC + (2402 - 2472 @ 40), (30) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country GE: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (18), AUTO-BW + (5250 - 5330 @ 80), (18), DFS, AUTO-BW + # 60 GHz band channels 1-4, ref: Etsi En 302 567 + (57000 - 66000 @ 2160), (40) + +country GF: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI + (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI + (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI + +country GH: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country GL: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI + (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI + (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI + +country GP: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI + (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI + (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI + +# GR 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 +# 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 +# GR: https://www.eett.gr/opencms/export/sites/default/EETT_EN/Electronic_Communications/Radio_Communications/TelecommunicationEquipment/Radio_equipment_interface_requirement_2012.pdf +# GR: https://www.eett.gr/opencms/export/sites/default/EETT_EN/Electronic_Communications/Radio_Communications/TelecommunicationEquipment/Radio_equipment_interface_requirement_107.pdf +country GR: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# Source: +# https://sit.gob.gt/download/9685/tabla-nacional-de-atribucion-de-frecuencias/01WRXSS3QHSADNOSHDZ5HIWXE4TFFW3YIU/4.%20Tabla%20Nacional%20Atribuci%C3%B3n%20Frecuencias%20(Pies%20de%20P%C3%A1gina) +country GT: + (2400 - 2483.5 @ 40), (500 mW) + (5150 - 5350 @ 80), (200 mW), NO-OUTDOOR + (5470 - 5725 @ 160), (250 mW), NO-OUTDOOR + (5725 - 5850 @ 80), (500 mW), NO-OUTDOOR + (5925 - 6425 @ 320), (200 mW), NO-OUTDOOR, AUTO-BW + (6425 - 6525 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW + (6525 - 6875 @ 320), (150 mW), NO-OUTDOOR, AUTO-BW + (6875 - 7125 @ 160), (150 mW), NO-OUTDOOR, AUTO-BW + (57000 - 66000 @ 2160), (20 mW), NO-OUTDOOR + +country GU: DFS-FCC + (2402 - 2472 @ 40), (30) + (5170 - 5250 @ 20), (17) + (5250 - 5330 @ 20), (24), DFS + (5490 - 5730 @ 20), (24), DFS + (5735 - 5835 @ 20), (30) + +country GY: + (2402 - 2482 @ 40), (30) + (5170 - 5250 @ 80), (23), AUTO-BW + (5250 - 5330 @ 80), (23), DFS, AUTO-BW + (5490 - 5730 @ 160), (23), DFS + (5735 - 5835 @ 80), (30) + +# Source: +# https://www.ofca.gov.hk/filemanager/ofca/en/content_401/hkca1039.pdf (2.4 GHz and 5 GHz) +# https://www.ofca.gov.hk/filemanager/ofca/en/content_401/hkca1081.pdf (6 GHz) +country HK: DFS-ETSI + (2400 - 2483.5 @ 40), (36) + (5150 - 5250 @ 80), (23), AUTO-BW, NO-OUTDOOR + (5250 - 5350 @ 80), (23), DFS, AUTO-BW, NO-OUTDOOR + (5470 - 5730 @ 160), (27), DFS + (5730 - 5850 @ 80), (36) + (5925 - 6425 @ 160), (14) + +# Source: +# https://www.conatel.gob.hn/doc/Regulacion/resoluciones/2023/NR05-23.pdf +country HN: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + (5925 - 6425 @ 320), (12), NO-OUTDOOR, NO-IR + (57240 - 71000 @ 2160), (40) + +country HR: DFS-ETSI +# HR 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 +# 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 +# HR: http://tablice.hakom.hr:8080/vis?lang=en +# 6E: https://www.hakom.hr/UserDocsImages/op%C4%87e%20dozvole%20prosinac%202009.g/Opca_dozvola_236.pdf + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), AUTO-BW, wmmrule=ETSI + (5250 - 5350 @ 80), (200 mW), DFS, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # WiFi 6E + (5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +country HT: DFS-FCC + (2402 - 2472 @ 40), (30) + (5170 - 5250 @ 80), (24), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +# HU 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 +# 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 +# HU: http://stir.nmhh.hu/?oldal=dokumentumGeneralo&root_rendeletelem_id=3&hatalyos=1 +# HU: http://english.nmhh.hu/cikk/297/Eljarasi_tajekoztato_a_24_GHzes_es_az_5_GHzes_savban_mukodo_berendezesek_engedelyezeserol +# HU: http://nmhh.hu/dokumentum/319/kis_hatotavolsagu_eszkozok_srdk.pdf +country HU: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# Source: +# https://jdih.kominfo.go.id/produk_hukum/view/id/676/t/peraturan+menteri+komunikasi+dan+informatika+nomor+1+tahun+2019+tanggal+24+april+2019 +# https://jdih.komdigi.go.id/produk_hukum/view/id/949/t/peraturan+menteri+komunikasi+dan+digital+nomor+2+tahun+2025 +country ID: + (2400 - 2483.5 @ 40), (500 mW), NO-OUTDOOR + (5150 - 5350 @ 160), (200 mW), NO-OUTDOOR + (5725 - 5825 @ 80), (200 mW), NO-OUTDOOR + (5925 - 6425 @ 320), (200 mW), NO-OUTDOOR + (57000 - 64000 @ 2160), (10000 mW), NO-OUTDOOR + +# IE 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 +# 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 +# IE: https://www.comreg.ie/publication-download/interface-requirements-for-radio-services-in-ireland +# IE: https://www.comreg.ie/publication-download/permitted-short-range-devices-ireland +country IE: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# IL: Wireless Telegraph Regulations (type approval) (2021) +# IL: published on 29 March 2021 in KOVETS HATAKANOT No. 9301. +# IL: https://www.gov.il/he/departments/legalInfo/telegraph_law +# IL: official document (pdf): https://rfa.justice.gov.il/SearchPredefinedApi/Documents/IdngyMn~ojdQSrkxuAqfZqiM8c1foi3TSZQhp7OMszo= +# IL: also available as unofficial word doc: https://www.nevo.co.il/Handlers/LawOpenDoc.ashx?id=199708 +# https://www.nevo.co.il/law_html/law01/502_483.htm#Seif9 +country IL: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW + (5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW + # Table B List of conditions, row 63, indoor short range device without TPC (ETSI EN 301 893) + (5470 - 5725 @ 160), (500 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI + # Table B List of conditions, row 68a + (5725 - 5875 @ 80), (25 mW), AUTO-BW + (5945 - 6425 @ 320), (200 mW), 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 +country IN: + (2402 - 2482 @ 40), (30) + (5150 - 5250 @ 80), (30) + (5250 - 5350 @ 80), (24), DFS + (5470 - 5725 @ 160), (24), DFS + (5725 - 5875 @ 80), (30) + +# Source: +# https://asnad.cra.ir/fa/Public/Documents/Details/73af8590-f065-eb11-968f-0050569b0899 +country IR: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW) + (5250 - 5350 @ 80), (200 mW), DFS, NO-OUTDOOR + (5470 - 5725 @ 160), (27), DFS, NO-INDOOR + +# IS as part of 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 +# 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 +country IS: DFS-ETSI + (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 + # 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 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# IT 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 +# 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 +country IT: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +country JM: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +# Source: +# https://trc.gov.jo/EchoBusV3.0/SystemAssets/PDF/RSMD/cb9f9a83-43a6-4e66-8432-6e02ecaf465b_RLAN%20Arabic%20%20Final%20-%20clean%20with%2057-71%20GHz.pdf +# ETSI EN 301 893: https://www.etsi.org/deliver/etsi_en/301800_301899/301893/02.01.01_60/en_301893v020101p.pdf +country JO: DFS-ETSI + (2400 - 2483.5 @ 40), (20) + (5150 - 5250 @ 80), (23), AUTO-BW + (5250 - 5350 @ 80), (23), DFS, AUTO-BW + (5470 - 5725 @ 80), (27), DFS, NO-OUTDOOR + (5725 - 5875 @ 80), (23), NO-OUTDOOR + (5925 - 6425 @ 320), (23), NO-OUTDOOR + (57000 - 71000 @ 2160), (40) + +# Source: +# https://www.soumu.go.jp/main_content/000635492.pdf +# https://www.soumu.go.jp/main_content/000833682.pdf +# https://www.soumu.go.jp/main_content/000919158.pdf +country JP: DFS-JP + (2402 - 2482 @ 40), (20) + (2474 - 2494 @ 20), (20), NO-OFDM + (4910 - 4990 @ 40), (23) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5730 @ 160), (23), DFS + (5925 - 6425 @ 320), (200 mW), NO-OUTDOOR + # 60 GHz band channels 2-4 at 10mW, + # ref: http://www.arib.or.jp/english/html/overview/doc/1-STD-T74v1_1.pdf + (57000 - 66000 @ 2160), (10 mW) + +# Source: +# https://www.ca.go.ke/sites/default/files/2023-06/Guidelines-on-the-Use-of-Radiofrequency-Spectrum-by-Short-Range-Devices-2022.pdf +# ETSI EN 301 893: https://www.etsi.org/deliver/etsi_en/301800_301899/301893/02.01.01_60/en_301893v020101p.pdf +# ETSI EN 302 502: https://www.etsi.org/deliver/etsi_en/302500_302599/302502/02.01.01_60/en_302502v020101p.pdf +country KE: DFS-ETSI + (2400 - 2483.5 @ 40), (2000 mW) + (5150 - 5250 @ 80), (17), AUTO-BW + (5250 - 5350 @ 80), (17), DFS, AUTO-BW + (5470 - 5725 @ 80), (24), DFS + (5725 - 5875 @ 40), (24), DFS + (5925 - 6425 @ 320), (23), NO-OUTDOOR + +country KH: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +# Source +# http://ntrc.kn/?page_id=7 +country KN: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (30), DFS + (5735 - 5815 @ 80), (30) + +country KP: DFS-JP + (2402 - 2482 @ 20), (20) + (5170 - 5250 @ 20), (20) + (5250 - 5330 @ 20), (20), DFS + (5490 - 5630 @ 20), (30), DFS + (5735 - 5815 @ 20), (30) + +# Source: +# https://www.law.go.kr/LSW//admRulLsInfoP.do?chrClsCd=&admRulSeq=2100000205195 +# https://www.law.go.kr/LSW//admRulLsInfoP.do?chrClsCd=&admRulSeq=2100000205187 +# https://www.law.go.kr/LSW//admRulLsInfoP.do?chrClsCd=&admRulSeq=2100000206568 +country KR: DFS-JP + (2400 - 2483.5 @ 40), (23) + (5150 - 5230 @ 40), (23), AUTO-BW + # max. PSD 2.5 mW/MHz in 5230-5250 MHz frequency range + (5230 - 5250 @ 20), (17), AUTO-BW + (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 + # 60 GHz band channels 1-4 + (57000 - 66000 @ 2160), (43) + +# Source: +# https://citra.gov.kw/sites/ar/Lists/CITRALaws/Attachments/14/%D8%A7%D9%84%D9%84%D8%A7%D8%A6%D8%AD%D8%A9%20%D8%A7%D9%84%D8%AA%D9%86%D8%B8%D9%8A%D9%85%D9%8A%D8%A9%20%D9%84%D8%AE%D8%AF%D9%85%D8%A9%20%D8%A7%D9%84%D9%88%D8%A7%D9%8A%20%D9%81%D8%A7%D9%8A.pdf +country KW: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5170 - 5250 @ 80), (200 mW), AUTO-BW + (5250 - 5350 @ 80), (17), DFS, AUTO-BW + (5470 - 5825 @ 160), (24), DFS + (5925 - 6425 @ 320), (200 mW), NO-OUTDOOR + +# Source: https://www.ofreg.ky/viewPDF/documents/2024-11-19-16-28-50-OfReg-WiFi-Permitted-Parameters-V2.pdf +country KY: DFS-FCC + (2400 - 2483.5 @ 40), (1000 mW) + (5150 - 5250 @ 80), (250 mW), AUTO-BW + (5250 - 5350 @ 80), (250 mW), DFS, AUTO-BW + (5470 - 5730 @ 160), (250 mW), DFS + (5725 - 5875 @ 80), (1000 mW) + (5925 - 6425 @ 320), (12), NO-OUTDOOR + (57000 - 71000 @ 2160), (40) + +# Source: +# 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 + (5250 - 5350 @ 80), (20), NO-OUTDOOR, DFS, AUTO-BW + (5470 - 5725 @ 160), (20), NO-OUTDOOR, DFS + (5725 - 5850 @ 80), (20), NO-OUTDOOR + (57000 - 66000 @ 2160), (40) + +country LB: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +# Source: +# http://www.ntrc.org.lc/operational_structures.htm +country LC: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (30), DFS + (5735 - 5815 @ 80), (30) + +# LI as part of 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 +# 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 +# LI: https://www.ofcomnet.ch/api/rir/1010/05 +# 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 +country LI: DFS-ETSI + (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 + # 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 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +country LK: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 20), (17) + (5250 - 5330 @ 20), (24), DFS + (5490 - 5730 @ 20), (24), DFS + (5735 - 5835 @ 20), (30) + +# Source: +# http://lca.org.ls/images/documents/lesotho_national_frequency_allocation_plan.pdf +country LS: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +# LT 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 +# 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 +# LT: https://www.rrt.lt/en/radio-spectrum/frequency-management/ or direct link: +# LT: https://www.e-tar.lt/portal/lt/legalAct/6e718fd037a011e69101aaab2992cbcd/dGRioCBBHb +country LT: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# LU 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 +# 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 +# LU: https://assets.ilr.lu/frequences/Documents/ILRLU-1723895916-183.pdf#search=en%20300%20440 +country LU: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# LV 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 +# 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 +# LV: http://likumi.lv/doc.php?id=198903 +country LV: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# Source: +# https://www.anrt.ma/sites/default/files/decision_a2fp_-vf-_mod_07.05.2021.pdf?csrt=14818568393101165775 +country MA: 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 + +# MC as part of 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 +# 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 +country MC: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + +# Source: +# http://www.cnfr.md/index.php?pag=sec&id=117&l=en +# MD as part of 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 +# 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 +country MD: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + (5945 - 6425 @ 320), (23), NO-OUTDOOR + +# Source: +# http://www.cept.org/files/1050/Tools%20and%20Services/EFIS%20-%20ECO%20Frequency%20Information%20System/National%20frequency%20tables/Montenegro%20NAFT%20-%202010.pdf +# ME as part of 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 +# 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 +country ME: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + +country MF: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI + (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI + (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI + +country MH: DFS-FCC + (2402 - 2472 @ 40), (30) + (5170 - 5250 @ 80), (24), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +# MK as part of 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 +# 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 +country MK: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 60 GHz band channels 1-4, ref: Etsi En 302 567 + (57000 - 66000 @ 2160), (40) + +# Communications Regulatory Commission- CRC released Amendment to Resolution No. 37 of 2020 +# https://www.crc.gov.mn/storage/PDF/2022/2022-togtool1.pdf +country MN: 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), (100mW) + +# Source: +# https://bo.io.gov.mo/bo/i/2024/16/despce.asp#64 +country MO: DFS-FCC + (2400 - 2483.5 @ 40), (200 mW) + (5150 - 5250 @ 80), (200 mW), AUTO-BW + (5250 - 5350 @ 80), (200 mW), DFS, AUTO-BW + (5470 - 5730 @ 160), (1000 mW), DFS + (5725 - 5850 @ 80), (1000 mW) + (5925 - 6425 @ 320), (250 mW), NO-OUTDOOR + (57000 - 66000 @ 2160), (10000 mW) + +country MP: DFS-FCC + (2402 - 2472 @ 40), (30) + (5170 - 5250 @ 80), (24), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country MQ: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI + (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI + (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI + +# Source: +# http://www.are.mr/pdfs/telec_freq_TNAbf_2010.pdf +country MR: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +# MT 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 +# 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 +# MT: https://www.mca.org.mt/sites/default/files/NFP_edition%206-1.pdf +country MT: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# Source: +# https://www.icta.mu/documents/2022/08/wifi6e_decision_0822.pdf +country MU: 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) + (5945 - 6425 @ 320), (23), NO-OUTDOOR + +# Source: +# http://www.cam.gov.mv/docs/tech_standards/TAM-TS-100-2004-WLAN.pdf +country MV: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), AUTO-BW + (5250 - 5350 @ 80), (100 mW), DFS, AUTO-BW + (5725 - 5850 @ 80), (100 mW) + +country MW: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +# Source: +# https://www.ift.org.mx/sites/default/files/comunicacion-y-medios/comunicados-ift/comunicado13ift_1.pdf +# https://www.dof.gob.mx/nota_detalle.php?codigo=5681829&fecha=07/03/2023#gsc.tab=0 +country MX: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), 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.mcmc.gov.my/skmmgovmy/media/General/CA-No-1-of-2022_-signed_19012022.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 + +# Source: +# https://www.cran.na/yglilidy/2023/04/GG-8060-dated-3-April-2023.pdf +country NA: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (20), AUTO-BW, NO-OUTDOOR + (5250 - 5350 @ 80), (20), DFS, AUTO-BW, NO-OUTDOOR + (5470 - 5725 @ 160), (21), DFS + (5725 - 5875 @ 80), (24), DFS + (5925 - 6425 @ 320), (23), NO-OUTDOOR + (57000 - 66000 @ 2160), (40), NO-OUTDOOR + +country NG: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5250 - 5330 @ 80), (30), DFS + (5735 - 5835 @ 80), (30) + +country NI: DFS-FCC + (2402 - 2472 @ 40), (30) + (5170 - 5250 @ 80), (24), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +# NL 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 +# 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 +# NL: http://wetten.overheid.nl/BWBR0036378/2015-03-05 +# Updated 14 december 2021 to allow the lower part of the 6GHz spectrum for WiFi 6E +# mobile short distance equipment, broadband transmission equipment, license free, from day after publication +# NL announcement: https://zoek.officielebekendmakingen.nl/stcrt-2021-49492.pdf +# NL law: https://wetten.overheid.nl/BWBR0036378/2021-12-15 +country NL: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # WiFi 6E + (5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# NO as part of 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 +# 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 +# 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) +country NO: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # WiFi 6E + (5945 - 6425 @ 320), (200 mW), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 71000 @ 2160), (40) + +country NP: DFS-JP + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5735 - 5835 @ 80), (20) + +# Source: +# https://gazette.govt.nz/notice/id/2022-go3100 +country NZ: DFS-ETSI + (2400 - 2483.5 @ 40), (36) + (5150 - 5250 @ 80), (30), AUTO-BW + (5250 - 5350 @ 80), (27), DFS, AUTO-BW + (5470 - 5730 @ 160), (27), DFS + (5725 - 5875 @ 80), (36) + (5925 - 6425 @ 320), (24), NO-OUTDOOR + (57000 - 71000 @ 2160), (40) + +country OM: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW), NO-OUTDOOR + (5170 - 5250 @ 80), (200 mW), AUTO-BW + (5250 - 5350 @ 80), (20), DFS, AUTO-BW + (5470 - 5725 @ 160), (27), DFS + (5725 - 5850 @ 80), (28), DFS, NO-INDOOR + (5925 - 6425 @ 320), (200 mW), NO-OUTDOOR + (57000 - 66000 @ 2160), (40), NO-OUTDOOR + +# Source: +# http://www.asep.gob.pa/images/telecomunicaciones/Anexos/PNAF-dic2015.pdf +country PA: DFS-FCC + (2400 - 2483.5 @ 40), (36) + (5150 - 5250 @ 80), (36), AUTO-BW + (5250 - 5350 @ 80), (30), AUTO-BW + (5470 - 5725 @ 160), (30) + (5725 - 5850 @ 80), (36) + (57000 - 64000 @ 2160), (43) + +# Source: +# https://cdn.www.gob.pe/uploads/document/file/1861732/Resoluci%C3%B3n%20Ministerial%20nro%20373-2021-MTC/01.pdf +country PE: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + (5925 - 7125 @ 320), (12), NO-OUTDOOR + +country PF: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI + (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI + (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI + +country PG: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +# NTC MC 09-09-2003 https://ntc.gov.ph/wp-content/uploads/2015/10/LawsRulesRegulations/MemoCirculars/MC2003/MC-09-09-2003.pdf +# NTC MC 03-05-2007 https://ntc.gov.ph/wp-content/uploads/2015/10/LawsRulesRegulations/MemoCirculars/MC2007/MC-03-05-2007.pdf +# NTC MC 03-08-2013 https://region7.ntc.gov.ph/images/LawsRulesAndRegulations/MC/WDN/MC_03-08-2013.pdf +# NTC MC 01-01-2016 https://ntc.gov.ph/wp-content/uploads/2016/MC/Explanatory-MC-No-01-01-2016.pdf +# NTC MC 002-07-2024 https://ntc.gov.ph/wp-content/uploads/2024/MEMORANDUM%20CIRCULAR/NTC%20MC%20No.%20002-07-2024.pdf +# 2400 - 2483.5 MHz: NTC MC 09-09-2003, Section 3.1; NTC MC 03-08-2013, Section 3.1; NTC MC 03-05-2007, Section 2 +# 5150 - 5350 MHz: NTC MC 09-09-2003, Section 3.1; NTC MC 03-08-2013, Section 3.1; NTC MC 03-05-2007, Section 2 +# 5470 - 5850 MHz: NTC MC 09-09-2003, Section 3.1; NTC MC 03-08-2013, Section 3.1 NTC MC 03-05-2007, Section 2 +# 5925 - 6425 MHz: NTC MC 002-07-2024, Section 1; NTC MC 03-05-2007, Section 2 +# 57000 - 66000 MHz: NTC MC 01-01-2016, Section 1 + +country PH: DFS-FCC + (2400 - 2483.5 @ 40), (20) + (5150 - 5250 @ 80), (23), AUTO-BW + (5250 - 5350 @ 80), (23), DFS, AUTO-BW + (5470 - 5725 @ 160), (24), DFS + (5725 - 5850 @ 80), (24) + (5925 - 6425 @ 320), (250 mW), NO-OUTDOOR + (57000 - 66000 @ 2160), (24) + +country PK: + # https://fab.gov.pk/type-approval/ + # https://pta.gov.pk/media/Pakistan_Table_of_Frequency_Allocations.pdf + # https://www.pta.gov.pk/assets/media/iot_srd_regulatory_framework_01-06-2022.pdf + # https://www.pta.gov.pk/assets/media/2024-09-23-WLAN-Framework-Final-05-09-2024.pdf + (2400 - 2500 @ 40), (30) + (5725 - 5875 @ 80), (30) + (5945 - 6425 @ 320), (23), NO-OUTDOOR + +# PL 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 +# 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 +country PL: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +country PM: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI + (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI + (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI + +country PR: DFS-FCC + (2402 - 2472 @ 40), (30) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +# PT 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 +# 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 +# PT: https://www.anacom.pt/render.jsp?categoryId=336334 +country PT: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +country PW: DFS-FCC + (2402 - 2472 @ 40), (30) + (5170 - 5250 @ 80), (24), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +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) + +# Source: +# https://www.cra.gov.qa/-/media/System/D/2/5/8/D258CF18B83A5613B0D590193CB799CB/Class-License-WIFI-6E-Final-English-032022--V3.ashx +country QA: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW), NO-OUTDOOR + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW + (5250 - 5350 @ 80), (200 mW), NO-OUTDOOR, DFS, AUTO-BW + (5470 - 5725 @ 160), (100 mW), NO-OUTDOOR, DFS + (5725 - 5875 @ 80), (100 mW), NO-OUTDOOR, DFS + (5925 - 6425 @ 320), (23), NO-OUTDOOR + (57000 - 66000 @ 2160), (40), NO-OUTDOOR + +country RE: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI + (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI + (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI + +# RO 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 +# 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 +# RO: http://www.ancom.org.ro/en/uploads/links_files/ordin_262_2006.pdf +country RO: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# Source: +# http://www.ratel.rs/upload/documents/Plan_namene/Plan_namene-sl_glasnik.pdf +# RS as part of 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 +# 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.ratel.rs/uploads/documents/empire_plugin/Uredba%20o%20utvrdjivanju%20Plana%20namene%20radiofrekvencijskih%20opsega.pdf +country RS: DFS-ETSI + (2400 - 2483.5 @ 40), (20) + (5150 - 5250 @ 80), (23), AUTO-BW + (5250 - 5350 @ 80), (23), DFS, AUTO-BW + (5470 - 5725 @ 160), (27), DFS + (5725 - 5850 @ 80), (24), DFS, AUTO-BW + (5850 - 5875 @ 20), (24), AUTO-BW + (5925 - 6425 @ 320), (23), NO-OUTDOOR + # 60 GHz band channels 1-4, ref: Etsi En 302 567 + (57000 - 66000 @ 2160), (40) + +# Source: https://docs.cntd.ru/document/1300597464?section=text +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 + # 60 GHz band channels 1-4, ref: Changes to NLA 124_Order №129_22042015.pdf + (57000 - 66000 @ 2160), (40), NO-OUTDOOR + +country RW: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +# Source: https://www.citc.gov.sa/en/RulesandSystems/RegulatoryDocuments/OtherRegulatoryDocuments/Documents/PL-PM-002-E-WiFi%20Regulations.pdf +country SA: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + (5925 - 7125 @ 320), (250 mW), NO-OUTDOOR + +# SE 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 +# 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 +# SE: https://pts.se/globalassets/startpage/dokument/legala-dokument/foreskrifter/radio/beslutade_ptsfs-2018-3-undantagsforeskrifter.pdf +country SE: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# https://www.imda.gov.sg/-/media/imda/files/regulation-licensing-and-consultations/ict-standards/telecommunication-standards/radio-comms/imdatssrd.pdf +# IMDA TS SRD, Issue 1 Revision 3, Sep 2023, subsequently "IMDA TS SRD" +# 2400 - 2483.5 MHz: IMDA TS SRD, Table 1 Sub-band 32e +# 5150 - 5350 MHz: IMDA TS SRD, Table 1 Sub-band 33a +# 5470 - 5725 MHz: IMDA TS SRD, Table 1 Sub-band 34 +# 5725 - 5850 MHz: IMDA TS SRD, Table 1 Sub-band 35 +# 5945 - 6425 MHz: IMDA TS SRD, Table 1 Sub-band 45b +# 57000 - 66000 MHz: IMDA TS SRD, Table 1 Sub-band 40 +# Note: 500mW for 5470-5725MHz bands per FCC Part 15 Section 15.407 (2) 5.47-5.725 GHz as referenced by IMDA TS SRD +# AU and BG regulatory domains use the same interpretation of cited FCC and ETSI standards +# Note: The transmit power for 5250-5350MHz bands can be raised (by 3dBm) to 200mW when TPC is implemented: IMDA TS SRD, Table 1 Sub-band 33a +# Note: The transmit power for 5470-5725MHz bands can be raised (by 3dBm) to 1000mW when TPC is implemented: IMDA TS SRD Table 1 Sub-band 34 + +country SG: DFS-FCC + (2400 - 2483.5 @ 40), (200 mW) + (5150 - 5250 @ 80), (200 mW), AUTO-BW + (5250 - 5350 @ 80), (100 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 + (5725 - 5850 @ 80), (1000 mW) + (5945 - 6425 @ 320), (250 mW), NO-OUTDOOR + (57000 - 66000 @ 2160), (10000 mW) + +# SI 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 +# 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 +# SI: https://www.akos-rs.si/bwa +country SI: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# SK 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 +# 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 +# SK: https://www.teleoff.gov.sk/data/files/25911.pdf +# SK: https://www.teleoff.gov.sk/data/files/41072.pdf +# SK: https://www.teleoff.gov.sk/data/files/49125_vpr-01_2018-rusi-vpr-10_2014a21_2012-nespecifik-srd_021018.pdf +country SK: DFS-ETSI + (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 + # short range devices (ETSI EN 300 440-1) + (5725 - 5875 @ 80), (25 mW) + # 6 GHz band + (5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4 (ETSI EN 302 567) + (57000 - 66000 @ 2160), (40) + +# Source: +# Regulation N° 2004-005 ART/DG/DRC/D.Rég +country SN: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country SR: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +# Source: +# https://www.siget.gob.sv/actualizacion-de-cuadro-nacional-de-atribucion-de-frecuencias-t-0408-2023/ +country SV: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 20), (17) + (5250 - 5330 @ 20), (23), DFS + (5735 - 5835 @ 20), (30) + (5925 - 7125 @ 320), (12), NO-OUTDOOR + +# 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 + (2400 - 2483.5 @ 40), (100 mW), NO-OUTDOOR + (5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW + (5250 - 5350 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, DFS + (5470 - 5725 @ 160), (200 mW), NO-OUTDOOR, DFS + (5725 - 5850 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, DFS + (5850 - 5875 @ 20), (200 mW), NO-OUTDOOR, AUTO-BW + (57000 - 66000 @ 2160), (40), NO-OUTDOOR + +# Source: +# http://www.telecommission.tc/Spectrum-plan20110324-101210.html +country TC: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (24), AUTO-BW, wmmrule=ETSI + (5250 - 5330 @ 80), (24), DFS, AUTO-BW, wmmrule=ETSI + (5490 - 5730 @ 160), (24), DFS, wmmrule=ETSI + (5735 - 5835 @ 80), (30) + +country TD: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +# Source: +# https://arcep.tg/wp-content/uploads/2022/12/Decision-226-22-Determinant-les-categories-et-conditions-techniques-dexploitation-des-appareils-de-faible-puissance-et-de-faible-portee.pdf +country TG: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW), DFS + (5150 - 5350 @ 80), (20), DFS + (5470 - 5850 @ 160), (27), DFS + (5925 - 6425 @ 320), (23), DFS, NO-OUTDOOR + (57000 - 66000 @2160), (40), DFS + +# Source: +# https://ratchakitcha.soc.go.th/documents/140D100S0000000004000.pdf +# https://ratchakitcha.soc.go.th/documents/140D100S0000000004200.pdf +# https://ratchakitcha.soc.go.th/documents/140D100S0000000004300.pdf +country TH: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + (5925 - 6425 @ 320), (250 mW), NO-OUTDOOR + +country TN: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + +# 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 +country TR: DFS-ETSI + (2400 - 2483.5 @ 40), (20) + (5150 - 5250 @ 80), (23), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5250 - 5330 @ 80), (20), DFS, NO-OUTDOOR, AUTO-BW, wmmrule=ETSI + (5470 - 5725 @ 160), (27), DFS, wmmrule=ETSI + (5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI + # 60 GHz band channels 1-4, ref: Etsi En 302 567 + (57000 - 66000 @ 2160), (40) + +country TT: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +# Source: +# Table of Frequency Allocations of Republic of China (Taiwan) / Feb 2017: +# https://www.motc.gov.tw/websitedowndoc?file=post/201702221012200.doc& \ +# filedisplay=Table%2Bof%2Bradio%2Bfrequency%2Ballocation.doc +# LP0002 Low-power Radio-frequency Devices Technical Regulations / 6 Feb 2024: +# https://www.ncc.gov.tw/chinese/files/24020/538_49880_240206_3.pdf +country TW: DFS-FCC + # 2.4g band, LP0002 section 4.10.1 + (2400 - 2483.5 @ 40), (30) + # 5g U-NII band, LP0002 section 5.7 + # 5.15 ~ 5.25 GHz: 30 dBm for master mode, 23 dBm for clients + (5150 - 5250 @ 80), (23), AUTO-BW + (5250 - 5350 @ 80), (23), 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), (23), DFS + (5725 - 5850 @ 80), (30) + # 6g band, LP0002 section 5.13.1.1, EIRP=23dBm + (5945 - 6425 @ 320), (23), NO-OUTDOOR + # 60g band, LP0002 section 4.13.1.1 (1)(A), EIRP=40dBm(43dBm peak) + (57000 - 66000 @ 2160), (40) + +# Source: +# https://www.tcra.go.tz/download/sw-1719952895-Minimum%20Technical%20Specifications%20for%20Short%20Range%20Devices%20(SRD),%20June%202024.pdf +country TZ: DFS-ETSI + (2400 - 2483.5 @ 40), (100 mW) + (5150 - 5250 @ 80), (200 mW), AUTO-BW, NO-OUTDOOR + (5250 - 5350 @ 80), (20), DFS, AUTO-BW, NO-OUTDOOR + (5470 - 5725 @ 160), (250 mW), DFS + (5725 - 5850 @ 80), (24), DFS + (5945 - 6425 @ 320), (23), NO-OUTDOOR + +# Source: https://zakon.rada.gov.ua/laws/show/z0201-15#n48 +# Although it is allowed to use up to 250 mW for some 5 GHz frequency ranges, +# all of them are limited to 100 mW for IEEE 802.11n and IEEE 802.11ac. +# 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. +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 + # 60 GHz band channels 1-4, ref: Etsi En 302 567 + (57000 - 66000 @ 2160), (40 mW), NO-OUTDOOR + +country UG: 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) + +# https://www.ecfr.gov/cgi-bin/text-idx?SID=eed706a2c49fd9271106c3228b0615f3&mc=true&node=pt47.1.15&rgn=div5 +# Title 47 Part 15 - Radio Frequency Devices, April 2, 2020 +# Channels 12 and 13 are not forbidden, but are not normally used with full +# power in order to avoid any potential interference in the adjacent restricted +# frequency band, 2,483.5–2,500 MHz which is subject to strict emission limits +# set out in 47 CFR § 15.205. TODO: reenable and specify a safe TX power here. +country US: DFS-FCC + # S1G Channel 1-3 + (902 - 904 @ 2), (30) + # S1G Channel 5-35 + (904 - 920 @ 16), (30) + # S1G Channel 37-51 + (920 - 928 @ 8), (30) + (2400 - 2472 @ 40), (30) + # 5.15 ~ 5.25 GHz: 30 dBm for master mode, 23 dBm for clients + (5150 - 5250 @ 80), (23), AUTO-BW + (5250 - 5350 @ 80), (24), 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), (24), DFS + (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 + (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 + # 60g band + # reference: section IV-D https://docs.fcc.gov/public/attachments/FCC-16-89A1.pdf + # channels 1-6 EIRP=40dBm(43dBm peak) + (57240 - 71000 @ 2160), (40) + +country UY: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (23), AUTO-BW + (5250 - 5330 @ 80), (23), DFS, AUTO-BW + (5735 - 5835 @ 80), (30) + +# Source: +# http://cemc.uz/article/1976/ +country UZ: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + +# Source: +# http://www.ntrc.vc/regulations/Jun_2006_Spectrum_Managment_Regulations.pdf +country VC: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS + +# Source: +# Official Gazette (Gaceta Oficial) concerning Unlicensed transmitter use +# (10 June 2013) +# http://www.conatel.gob.ve/ +country VE: DFS-FCC + (2402 - 2482 @ 40), (30) + (5170 - 5250 @ 80), (23), AUTO-BW + (5250 - 5330 @ 80), (23), DFS, AUTO-BW + (5735 - 5835 @ 80), (30) + +country VI: DFS-FCC + (2402 - 2472 @ 40), (30) + (5170 - 5250 @ 80), (24), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +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) + +# Source: +# http://www.trr.vu/attachments/category/130/GURL_for_Short-range_Radiocommunication_Devices2.pdf +country VU: DFS-FCC + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (17), AUTO-BW + (5250 - 5330 @ 80), (24), DFS, AUTO-BW + (5490 - 5730 @ 160), (24), DFS + (5735 - 5835 @ 80), (30) + +country WF: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI + (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI + (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI + +country WS: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 40), (20) + (5250 - 5330 @ 40), (20), DFS + (5490 - 5710 @ 40), (27), DFS + +country YE: + (2402 - 2482 @ 40), (20) + +country YT: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI + (5250 - 5330 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI + (5490 - 5710 @ 160), (27), DFS, wmmrule=ETSI + +# Source: https://www.gov.za/sites/default/files/gcis_document/202305/48643gon1822.pdf +country ZA: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (30) + (5925 - 6425 @ 320), (14) + +country ZW: DFS-ETSI + (2402 - 2482 @ 40), (20) + (5170 - 5250 @ 80), (20), AUTO-BW + (5250 - 5330 @ 80), (20), DFS, AUTO-BW + (5490 - 5710 @ 160), (27), DFS diff --git a/components/esp_wifi/regulatory/reg2fw.py b/components/esp_wifi/regulatory/reg2fw.py new file mode 100755 index 0000000000..1a3eecf94b --- /dev/null +++ b/components/esp_wifi/regulatory/reg2fw.py @@ -0,0 +1,116 @@ +#!/usr/bin/env python +# SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: Apache-2.0 +import os +from typing import List +from typing import TextIO + +from reg_parse import DBParser +from reg_parse import Regdomain + + +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) + + cfile.write(' {\n') + cfile.write(f' {rule_count}, /* Number of rules */\n') + cfile.write(' {\n') + + for perm in filtered_perms: + cfile.write( + ' {{ {start_chan}, {end_chan}, {max_bandwidth}, {max_eirp}, {is_dfs}, {reserved} }}, ' + '/* chan:{start_chan}~{end_chan}, ' + 'max_bw:{bandwidth_comment}, max_power:{max_eirp}(dBm), ' + 'dfs:{is_dfs}, reserved.*/\n'.format( + start_chan=int(perm.freqband.start), + end_chan=int(perm.freqband.end), + max_bandwidth=int(perm.freqband.maxbw), + max_eirp=int(perm.power.max_eirp), + is_dfs=perm.dfs, + reserved=0, + bandwidth_comment={1: '20M', 2: '40M', 3: '80M', 4: '160M'}.get(int(perm.freqband.maxbw), 'Unknown'), + ) + ) + + cfile.write(' }\n') + cfile.write(' },\n') + + +def write_regulatory_data( + 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') + for reg_type in type_list: + cfile.write(f' ESP_WIFI_REGULATORY_TYPE_{reg_type},\n') + 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 + 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('};\n\n') + cfile.write('const wifi_regulatory_t regulatory_data[] = {\n') + + for perms in perm_list: + index = perm_list.index(perms) + regulatory_type = f'ESP_WIFI_REGULATORY_TYPE_{type_list[index]}' + cfile.write(f' /* {regulatory_type} */\n') + write_regulatory_rules(cfile, perms, not filter_5g) + + cfile.write('};\n') + + +def main() -> None: + p = DBParser() + reg = Regdomain() + + filename = 'esp_wifi_regulatory.txt' + 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: + regdomains = p.parse(file) + except FileNotFoundError: + raise Exception(f'File {file_path} not found') + + reg.simplify_countries(regdomains) + reg.simplify_countries_2g(regdomains) + + type_list = list(reg.typical_regulatory.keys()) + perm_list = list(reg.typical_regulatory.values()) + + type_list_2g = list(reg.typical_regulatory_2g.keys()) + perm_list_2g = list(reg.typical_regulatory_2g.values()) + + output_file = 'esp_wifi_regulatory.c' + + with open(output_file, 'w') as cfile: + cfile.write('/*\n') + cfile.write(' * SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD\n') + cfile.write(' *\n') + cfile.write(' * SPDX-License-Identifier: Apache-2.0\n') + cfile.write(' */\n\n') + cfile.write('#include \n') + cfile.write('#include "esp_wifi_types_generic.h"\n') + cfile.write('#include "esp_wifi.h"\n\n') + + # Write for 5G support + cfile.write('#ifdef CONFIG_SOC_WIFI_SUPPORT_5G\n') + write_regulatory_data(cfile, reg, type_list, perm_list, filter_5g=True) + cfile.write('#else\n') + # Write for 2G only + write_regulatory_data(cfile, reg, type_list_2g, perm_list_2g, filter_5g=False) + cfile.write('#endif // CONFIG_SOC_WIFI_SUPPORT_5G\n') + + print(f'{output_file} generated successfully.') + + +if __name__ == '__main__': + main() diff --git a/components/esp_wifi/regulatory/reg_parse.py b/components/esp_wifi/regulatory/reg_parse.py new file mode 100755 index 0000000000..984990d283 --- /dev/null +++ b/components/esp_wifi/regulatory/reg_parse.py @@ -0,0 +1,760 @@ +#!/usr/bin/env python3 +# SPDX-FileCopyrightText: 2008 Luis R. Rodriguez +# SPDX-FileCopyrightText: 2008 Johannes Berg +# SPDX-FileCopyrightText: 2008 Michael Green +# +# SPDX-FileContributor: 2025 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: Apache-2.0 +# +# Copyright (c) 2008, Luis R. Rodriguez +# Copyright (c) 2008, Johannes Berg +# Copyright (c) 2008, Michael Green +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. + +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +import math +import sys +from collections import OrderedDict +from collections import defaultdict +from functools import total_ordering +from math import ceil +from typing import Callable +from typing import Dict +from typing import List +from typing import Optional +from typing import TextIO +from typing import Tuple + +flag_definitions: Dict[str, int] = { + 'NO-OFDM': 1 << 0, + 'NO-CCK': 1 << 1, + 'NO-INDOOR': 1 << 2, + 'NO-OUTDOOR': 1 << 3, + 'DFS': 1 << 4, + 'PTP-ONLY': 1 << 5, + 'PTMP-ONLY': 1 << 6, + 'NO-IR': 1 << 7, + # hole at bit 8 + # hole at bit 9. FIXME: Where is NO-HT40 defined? + 'NO-HT40': 1 << 10, + 'AUTO-BW': 1 << 11, +} + +dfs_regions: Dict[str, int] = { + 'DFS-FCC': 1, + 'DFS-ETSI': 2, + 'DFS-JP': 3, +} + +typical_regdomain: Dict[str, List[str]] = { + 'DEFAULT': ['01'], + 'CE': [ + 'AT', + 'BE', + 'BG', + 'CH', + 'CY', + 'CZ', + 'DE', + 'DK', + 'EE', + 'ES', + 'FI', + 'FR', + 'GR', + 'HU', + 'IE', + 'IS', + 'IT', + 'LI', + 'LT', + 'LU', + 'LV', + 'MT', + 'NL', + 'NO', + 'PL', + 'PT', + 'RO', + 'SE', + 'SI', + 'SK', + ], + 'ACMA': ['AU'], + 'ANATEL': ['BR'], + 'ISED': ['CA'], + 'SRRC': ['CN'], + 'OFCA': ['HK'], + 'WPC': ['IN'], + 'MIC': ['JP'], + 'KCC': ['KR'], + 'IFETEL': ['MX'], + 'RCM': ['NZ'], + 'NCC': ['TW'], + 'FCC': ['US'], +} + + +@total_ordering +class WmmRule(object): + def __init__(self, vo_c: int, vi_c: int, be_c: int, bk_c: int, vo_ap: int, vi_ap: int, be_ap: int, bk_ap: int): + self.vo_c = vo_c + self.vi_c = vi_c + self.be_c = be_c + self.bk_c = bk_c + self.vo_ap = vo_ap + self.vi_ap = vi_ap + self.be_ap = be_ap + self.bk_ap = bk_ap + + def _as_tuple(self) -> Tuple[int, int, int, int, int, int, int, int]: + return (self.vo_c, self.vi_c, self.be_c, self.bk_c, self.vo_ap, self.vi_ap, self.be_ap, self.bk_ap) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, WmmRule): + return False + return self._as_tuple() == other._as_tuple() + + def __ne__(self, other: object) -> bool: + return not (self == other) + + def __lt__(self, other: object) -> bool: + if not isinstance(other, WmmRule): + return False + return self._as_tuple() < other._as_tuple() + + def __hash__(self) -> int: + return hash(self._as_tuple()) + + +class FreqBand(object): + def __init__(self, start: float, end: float, bw: float, comments: Optional[List[str]] = None): + self.start = start + self.end = end + self.maxbw = bw + self.comments = comments or [] + + def _as_tuple(self) -> Tuple[float, float, float]: + return (self.start, self.end, self.maxbw) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, FreqBand): + return False + return self._as_tuple() == other._as_tuple() + + def __ne__(self, other: object) -> bool: + return not (self == other) + + def __lt__(self, other: object) -> bool: + if not isinstance(other, FreqBand): + return False + return self._as_tuple() < other._as_tuple() + + def __hash__(self) -> int: + return hash(self._as_tuple()) + + def __str__(self) -> str: + return '' % (self.start, self.end, self.maxbw) + + +@total_ordering +class PowerRestriction(object): + def __init__(self, max_ant_gain: float, max_eirp: float, comments: Optional[List[str]] = None): + self.max_ant_gain = max_ant_gain + self.max_eirp = max_eirp + self.comments = comments or [] + + def _as_tuple(self) -> Tuple[float, float]: + return (self.max_ant_gain, self.max_eirp) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, PowerRestriction): + return False + return self._as_tuple() == other._as_tuple() + + def __ne__(self, other: object) -> bool: + return not (self == other) + + def __lt__(self, other: object) -> bool: + if not isinstance(other, PowerRestriction): + return False + return self._as_tuple() < other._as_tuple() + + def __hash__(self) -> int: + return hash(self._as_tuple()) + + def __str__(self) -> str: + return '' + + +class DFSRegionError(Exception): + def __init__(self, dfs_region: str): + self.dfs_region = dfs_region + + +class FlagError(Exception): + def __init__(self, flag: str): + self.flag = flag + + +@total_ordering +class Permission(object): + def __init__(self, freqband: FreqBand, power: PowerRestriction, flags: List[str], wmmrule: Optional[WmmRule]): + assert isinstance(freqband, FreqBand) + assert isinstance(power, PowerRestriction) or power is None + assert isinstance(wmmrule, WmmRule) or wmmrule is None + self.freqband = freqband + self.power = power + self.wmmrule = wmmrule + self.flags = 0 + self.dfs = 0 + for flag in flags: + if flag not in flag_definitions: + raise FlagError(flag) + self.flags |= flag_definitions[flag] + self.textflags = flags + if self.flags & (1 << 4): + self.dfs = 1 + + def _as_tuple(self) -> Tuple[FreqBand, PowerRestriction, int, Optional[WmmRule]]: + return (self.freqband, self.power, self.flags, self.wmmrule) + + def __eq__(self, other: object) -> bool: + if not isinstance(other, Permission): + return False + return self._as_tuple() == other._as_tuple() + + def __ne__(self, other: object) -> bool: + return not (self == other) + + def __lt__(self, other: object) -> bool: + if not isinstance(other, Permission): + return False + return self._as_tuple() < other._as_tuple() + + def __hash__(self) -> int: + return hash(self._as_tuple()) + + def __str__(self) -> str: + return str(self.freqband) + str(self.power) + str(self.wmmrule) + + +class Country(object): + def __init__( + self, + dfs_region: str, + permissions: Optional[List[Permission]] = None, + permissions_2g: Optional[List[Permission]] = None, + comments: Optional[List[str]] = None, + ): + self._permissions = permissions or [] + self._permissions_2g = permissions_2g or [] + self.comments = comments or [] + self.dfs_region = 0 + + if dfs_region: + if dfs_region not in dfs_regions: + raise DFSRegionError(dfs_region) + self.dfs_region = dfs_regions[dfs_region] + + def add(self, perm: Permission) -> None: + assert isinstance(perm, Permission) + self._permissions.append(perm) + self._permissions.sort() + + def add_2g(self, perm: Permission) -> None: + assert isinstance(perm, Permission) + self._permissions_2g.append(perm) + self._permissions_2g.sort() + + def __contains__(self, perm: Permission) -> bool: + assert isinstance(perm, Permission) + return perm in self._permissions + + def __str__(self) -> str: + r = ['(%s, %s)' % (str(permission.freqband), str(permission.power)) for permission in self._permissions] + return '' % (', '.join(r)) + + def _get_permissions_tuple(self) -> Tuple[Permission, ...]: + return tuple(self._permissions) + + def _get_permissions_2g_tuple(self) -> Tuple[Permission, ...]: + return tuple(self._permissions_2g) + + permissions = property(_get_permissions_tuple) + permissions_2g = property(_get_permissions_2g_tuple) + + +class MySyntaxError(Exception): + pass + + +class DBParser(object): + def __init__(self, warn: Optional[Callable[[str], None]] = None) -> None: + self._warn_callout = warn or sys.stderr.write + self._lineno: int = 0 + self._comments: List[str] = [] + self._banddup: Dict[str, str] = {} + self._bandrev: Dict[FreqBand, str] = {} + self._bands: Dict[str, FreqBand] = {} + self._bandline: Dict[str, int] = {} + self._powerdup: Dict[str, str] = {} + self._powerrev: Dict[PowerRestriction, str] = {} + self._power: Dict[str, PowerRestriction] = {} + self._powerline: Dict[str, int] = {} + self._wmm_rules: Dict[str, OrderedDict] = defaultdict(lambda: OrderedDict()) + self._countries: Dict[bytes, Country] = {} + self._bands_used: Dict[str, bool] = {} + self._power_used: Dict[str, bool] = {} + self._current_countries: Optional[Dict[bytes, Country]] = None + self._current_regions: Optional[Dict[str, int]] = None + self._channel_list: List[int] = [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 36, + 40, + 44, + 48, + 52, + 56, + 60, + 64, + 100, + 104, + 108, + 112, + 116, + 120, + 124, + 128, + 132, + 136, + 140, + 144, + 149, + 153, + 157, + 161, + 165, + 169, + 173, + 177, + ] + + def _syntax_error(self, txt: Optional[str] = None) -> None: + txt = txt and ' (%s)' % txt or '' + raise MySyntaxError('Syntax error in line %d%s' % (self._lineno, txt)) + + def _warn(self, txt: str) -> None: + self._warn_callout('Warning (line %d): %s\n' % (self._lineno, txt)) + + def channel_to_freq(self, channel: int) -> int: + if channel == 14: + return 2484 + elif channel < 14: + return 2407 + channel * 5 + elif channel >= 182 and channel <= 196: + return 4000 + channel * 5 + else: + return 5000 + channel * 5 + + def find_channel(self, start_freq: float, end_freq: float) -> Tuple: + start_channel = 0 + end_channel = 0 + for channel in self._channel_list: + channel_center_freq = self.channel_to_freq(channel) + if ( + (channel_center_freq >= start_freq and channel_center_freq <= end_freq) + and (channel_center_freq - 10 >= start_freq and channel_center_freq - 10 <= end_freq) + and (channel_center_freq + 10 >= start_freq and channel_center_freq + 10 <= end_freq) + ): + if start_channel == 0: + start_channel = channel + end_channel = channel + return (start_channel, end_channel) + + def convert_maxbandwidth(self, bw: float) -> int: + maxbw: int = 0 + if bw == 20: + maxbw = 1 + elif bw == 40: + maxbw = 2 + elif bw == 80: + maxbw = 3 + elif bw == 160: + maxbw = 4 + else: + maxbw = -1 + return maxbw + + def _parse_band_def(self, bname: str, banddef: str, dupwarn: bool = True) -> None: + try: + freqs, bw_str = banddef.split('@') + bw = float(bw_str) + except ValueError: + bw = 20.0 + + try: + start_str, end_str = freqs.split('-') + start = float(start_str) + end = float(end_str) + if start <= 0: + self._syntax_error('Invalid start freq (%d)' % start) + if end <= 0: + self._syntax_error('Invalid end freq (%d)' % end) + if start > end: + self._syntax_error('Inverted freq range (%d - %d)' % (start, end)) + if start == end: + self._syntax_error('Start and end freqs are equal (%d)' % start) + except ValueError: + self._syntax_error('band must have frequency range') + + b = FreqBand(start, end, bw, comments=self._comments) + self._comments = [] + self._banddup[bname] = bname + if b in self._bandrev: + if dupwarn: + self._warn('Duplicate band definition ("%s" and "%s")' % (bname, self._bandrev[b])) + self._banddup[bname] = self._bandrev[b] + self._bands[bname] = b + self._bandrev[b] = bname + self._bandline[bname] = self._lineno + + def _parse_band(self, line: str) -> None: + try: + bname, line = line.split(':', 1) + if not bname: + self._syntax_error("'band' keyword must be followed by name") + except ValueError: + self._syntax_error('band name must be followed by colon') + + if bname in flag_definitions: + self._syntax_error('Invalid band name') + + self._parse_band_def(bname, line) + + def _parse_power(self, line: str) -> None: + try: + pname, line = line.split(':', 1) + if not pname: + self._syntax_error("'power' keyword must be followed by name") + except ValueError: + self._syntax_error('power name must be followed by colon') + + if pname in flag_definitions: + self._syntax_error('Invalid power name') + + self._parse_power_def(pname, line) + + def _parse_power_def(self, pname: str, line: str, dupwarn: bool = True) -> None: + try: + max_eirp = line + if max_eirp == 'N/A': + max_eirp = '0' + max_ant_gain = float(0) + + def conv_pwr(pwr: str) -> float: + if pwr.endswith('mW'): + pwr_float = float(pwr[:-2]) + return 10.0 * math.log10(pwr_float) + else: + return float(pwr) + + max_eirp_float = conv_pwr(max_eirp) + except ValueError: + self._syntax_error('invalid power data') + + p = PowerRestriction(max_ant_gain, max_eirp_float, comments=self._comments) + self._comments = [] + self._powerdup[pname] = pname + if p in self._powerrev: + if dupwarn: + self._warn('Duplicate power definition ("%s" and "%s")' % (pname, self._powerrev[p])) + self._powerdup[pname] = self._powerrev[p] + self._power[pname] = p + self._powerrev[p] = pname + self._powerline[pname] = self._lineno + + def _parse_wmmrule(self, line: str) -> None: + regions = line[:-1].strip() + if not regions: + self._syntax_error("'wmmrule' keyword must be followed by region") + + regions_list = regions.split(',') + + self._current_regions = {} + for region in regions_list: + if region in self._wmm_rules: + self._warn('region %s was added already to wmm rules' % region) + self._current_regions[region] = 1 + self._comments = [] + + def _validate_input(self, cw_min: int, cw_max: int, aifsn: int, cot: int) -> None: + if cw_min < 1: + self._syntax_error('Invalid cw_min value (%d)' % cw_min) + if cw_max < 1: + self._syntax_error('Invalid cw_max value (%d)' % cw_max) + if cw_min > cw_max: + self._syntax_error('Inverted contention window (%d - %d)' % (cw_min, cw_max)) + if not (bin(cw_min + 1).count('1') == 1 and cw_min < 2**15): + self._syntax_error('Invalid cw_min value should be power of 2 - 1 (%d)' % cw_min) + if not (bin(cw_max + 1).count('1') == 1 and cw_max < 2**15): + self._syntax_error('Invalid cw_max value should be power of 2 - 1 (%d)' % cw_max) + if aifsn < 1: + self._syntax_error('Invalid aifsn value (%d)' % aifsn) + if cot < 0: + self._syntax_error('Invalid cot value (%d)' % cot) + + def _validate_size(self, var: int, bytcnt: float) -> bool: + return bytcnt < ceil(len(bin(var)[2:]) / 8.0) + + def _parse_wmmrule_item(self, line: str) -> None: + bytcnt = (2.0, 2.0, 1.0, 2.0) + try: + ac, cval = line.split(':') + if not ac: + self._syntax_error('wmm item must have ac prefix') + except ValueError: + self._syntax_error('access category must be followed by colon') + p = tuple([int(v.split('=', 1)[1]) for v in cval.split(',')]) + self._validate_input(*p) + for v, b in zip(p, bytcnt): + if self._validate_size(v, b): + self._syntax_error('unexpected input size expect %d got %d' % (b, v)) + + if self._current_regions is not None: + for r in self._current_regions: + self._wmm_rules[r][ac] = p + + def _parse_country(self, line: str) -> None: + try: + cname, cvals = line.split(':', 1) + dfs_region = cvals.strip() + if not cname: + self._syntax_error("'country' keyword must be followed by name") + except ValueError: + self._syntax_error('country name must be followed by colon') + + cnames = cname.split(',') + + self._current_countries = {} + for cname in cnames: + if len(cname) != 2: + self._warn("country '%s' not alpha2" % cname) + cname_bytes = cname.encode('ascii') + if cname_bytes not in self._countries: + self._countries[cname_bytes] = Country(dfs_region, comments=self._comments) + self._current_countries[cname_bytes] = self._countries[cname_bytes] + self._comments = [] + + def _parse_country_item(self, line: str) -> None: + if line[0] == '(': + try: + band, line = line[1:].split('),', 1) + bname = 'UNNAMED %d' % self._lineno + self._parse_band_def(bname, band, dupwarn=False) + except Exception: + self._syntax_error('Badly parenthesised band definition') + else: + try: + bname, line = line.split(',', 1) + if not bname: + self._syntax_error('country definition must have band') + if not line: + self._syntax_error('country definition must have power') + except ValueError: + self._syntax_error('country definition must have band and power') + + if line[0] == '(': + items = line.split('),', 1) + if len(items) == 1: + pname = items[0] + line = '' + if not pname[-1] == ')': + self._syntax_error('Badly parenthesised power definition') + pname = pname[:-1] + flags = [] + else: + pname = items[0] + flags = items[1].split(',') + power = pname[1:] + pname = 'UNNAMED %d' % self._lineno + self._parse_power_def(pname, power, dupwarn=False) + else: + line_list = line.split(',') + pname = line_list[0] + flags = line_list[1:] + w = None + if flags and 'wmmrule' in flags[-1]: + try: + region = flags.pop().split('=', 1)[1] + if region not in self._wmm_rules.keys(): + self._syntax_error('No wmm rule for %s' % region) + except IndexError: + self._syntax_error('flags is empty list or no region was found') + w = WmmRule(*self._wmm_rules[region].values()) + + if bname not in self._bands: + self._syntax_error('band does not exist') + if pname not in self._power: + self._syntax_error('power does not exist') + self._bands_used[bname] = True + self._power_used[pname] = True + bname = self._banddup[bname] + pname = self._powerdup[pname] + b = self._bands[bname] + p = self._power[pname] + if (b.start >= 2400 and b.end <= 2494) or (b.start >= 5150 and b.end <= 5895): + try: + channel_tuple = self.find_channel(b.start, b.end) + b.start = channel_tuple[0] + b.end = channel_tuple[1] + b.maxbw = self.convert_maxbandwidth(b.maxbw) + perm = Permission(b, p, flags, w) + except FlagError as e: + self._syntax_error("Invalid flag '%s'" % e.flag) + if self._current_countries is not None: + for cname, c in self._current_countries.items(): + if perm in c: + self._warn('Rule "%s, %s" added to "%s" twice' % (bname, pname, cname.decode('ascii'))) + else: + c.add(perm) + if perm.freqband.end <= 14: + c.add_2g(perm) + else: + self._warn('No current countries defined') + + def parse(self, f: TextIO) -> Dict[bytes, Country]: + for line in f: + self._lineno += 1 + line = line.strip() + if line[0:1] == '#': + self._comments.append(line[1:].strip()) + line = line.replace(' ', '').replace('\t', '') + if not line: + self._current_regions = None + self._comments = [] + line = line.split('#')[0] + if not line: + continue + if line[0:4] == 'band': + self._parse_band(line[4:]) + self._current_countries = None + self._current_regions = None + self._comments = [] + elif line[0:5] == 'power': + self._parse_power(line[5:]) + self._current_countries = None + self._current_regions = None + self._comments = [] + elif line[0:7] == 'country': + self._parse_country(line[7:]) + self._comments = [] + self._current_regions = None + elif self._current_countries is not None: + self._current_regions = None + self._parse_country_item(line) + self._comments = [] + elif line[0:7] == 'wmmrule': + self._parse_wmmrule(line[7:]) + self._current_countries = None + self._comments = [] + elif self._current_regions is not None: + self._parse_wmmrule_item(line) + self._current_countries = None + self._comments = [] + else: + self._syntax_error('Expected band, power or country definition') + + countries = self._countries + bands = {} + for k, v in self._bands.items(): + if k in self._bands_used: + bands[self._banddup[k]] = v + continue + if self._banddup[k] == k: + self._lineno = self._bandline[k] + self._warn('Unused band definition "%s"' % k) + power = {} + for k, j in self._power.items(): + if k in self._power_used: + power[self._powerdup[k]] = j + continue + if self._powerdup[k] == k: + self._lineno = self._powerline[k] + self._warn('Unused power definition "%s"' % k) + return countries + + +class Regdomain(object): + def __init__(self) -> None: + self.regdomain_countries: Dict[bytes, int] = {} + self.typical_regulatory: Dict[str, List] = {} + self.regdomain_countries_2g: Dict[bytes, int] = {} + self.typical_regulatory_2g: Dict[str, List] = {} + + def build_typical_regdomains(self, countries: Dict[bytes, Country]) -> None: + """Populate typical regulatory domains based on country permissions.""" + for cn, country in countries.items(): + cn_str = cn.decode('utf-8') + for reg_type in typical_regdomain: + if cn_str in typical_regdomain[reg_type]: + self.typical_regulatory.setdefault(reg_type, country.permissions) + + def build_typical_regdomains_2g(self, countries: Dict[bytes, Country]) -> None: + """Populate typical regulatory domains based on country permissions.""" + for cn, country in countries.items(): + cn_str = cn.decode('utf-8') + for reg_type in typical_regdomain: + if cn_str in typical_regdomain[reg_type]: + self.typical_regulatory_2g.setdefault(reg_type, country.permissions_2g) + + def simplify_countries(self, countries: Dict[bytes, Country]) -> None: + """Simplify country permissions by building typical regdomains.""" + self.build_typical_regdomains(countries) + perm_list = list(self.typical_regulatory.values()) + + for cn, country in countries.items(): + cn_str = cn.decode('utf-8') + permissions = country.permissions + if permissions not in perm_list: + self.typical_regulatory[cn_str] = permissions + perm_list.append(permissions) + self.regdomain_countries[cn] = perm_list.index(permissions) + + 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()) + + for cn, country in countries.items(): + cn_str = cn.decode('utf-8') + permissions = country.permissions_2g + + if permissions not in perm_list: + self.typical_regulatory_2g[cn_str] = permissions + perm_list.append(permissions) + self.regdomain_countries_2g[cn] = perm_list.index(permissions) diff --git a/tools/ci/executable-list.txt b/tools/ci/executable-list.txt index 4a3aebc4df..b185a767ae 100644 --- a/tools/ci/executable-list.txt +++ b/tools/ci/executable-list.txt @@ -2,6 +2,8 @@ components/app_update/otatool.py components/efuse/efuse_table_gen.py components/efuse/test_efuse_host/efuse_tests.py components/esp_coex/test_md5/test_md5.sh +components/esp_wifi/regulatory/reg2fw.py +components/esp_wifi/regulatory/reg_parse.py components/esp_wifi/test_md5/test_md5.sh components/espcoredump/espcoredump.py components/fatfs/fatfsgen.py