feat(regdomain): update regdomain according to wireless-regdb

This commit is contained in:
yinqingzhao
2026-05-07 15:10:04 +08:00
parent fa2fff2507
commit 34ff741b6e
8 changed files with 552 additions and 370 deletions

View File

@@ -1489,7 +1489,6 @@ typedef struct {
bool dcm; /**< Using dcm rate to send frame */
} wifi_tx_rate_config_t;
#define WIFI_MAX_SUPPORT_COUNTRY_NUM 176 /**< max number of supported countries */
#ifdef CONFIG_SOC_WIFI_SUPPORT_5G
#define WIFI_MAX_REGULATORY_RULE_NUM 7 /**< max number of regulatory rules */
#else

View File

@@ -5,8 +5,6 @@
`esp_wifi_regulatory.c` is generated from `esp_wifi_regulatory.txt` by using the `reg2fw.py` script.
The num of all suppported countries in `esp_wifi_regulatory.txt` is `WIFI_MAX_SUPPORT_COUNTRY_NUM` that is defined in `esp_wifi_types_generic.h`
- Generate `esp_wifi_regulatory.c`
- `cd ~/esp-idf/components/esp_wifi/regulatory`
- `python reg2fw.py`

View File

@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2025-2026 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -25,7 +25,6 @@ typedef enum {
ESP_WIFI_REGULATORY_TYPE_NCC,
ESP_WIFI_REGULATORY_TYPE_FCC,
ESP_WIFI_REGULATORY_TYPE_AF,
ESP_WIFI_REGULATORY_TYPE_AI,
ESP_WIFI_REGULATORY_TYPE_AM,
ESP_WIFI_REGULATORY_TYPE_AS,
ESP_WIFI_REGULATORY_TYPE_AZ,
@@ -35,6 +34,7 @@ typedef enum {
ESP_WIFI_REGULATORY_TYPE_BN,
ESP_WIFI_REGULATORY_TYPE_BO,
ESP_WIFI_REGULATORY_TYPE_BS,
ESP_WIFI_REGULATORY_TYPE_BW,
ESP_WIFI_REGULATORY_TYPE_BZ,
ESP_WIFI_REGULATORY_TYPE_CF,
ESP_WIFI_REGULATORY_TYPE_CR,
@@ -43,13 +43,13 @@ typedef enum {
ESP_WIFI_REGULATORY_TYPE_DZ,
ESP_WIFI_REGULATORY_TYPE_EC,
ESP_WIFI_REGULATORY_TYPE_EG,
ESP_WIFI_REGULATORY_TYPE_FO,
ESP_WIFI_REGULATORY_TYPE_GB,
ESP_WIFI_REGULATORY_TYPE_GD,
ESP_WIFI_REGULATORY_TYPE_GT,
ESP_WIFI_REGULATORY_TYPE_GU,
ESP_WIFI_REGULATORY_TYPE_HR,
ESP_WIFI_REGULATORY_TYPE_ID,
ESP_WIFI_REGULATORY_TYPE_IL,
ESP_WIFI_REGULATORY_TYPE_IR,
ESP_WIFI_REGULATORY_TYPE_JO,
ESP_WIFI_REGULATORY_TYPE_KE,
@@ -73,11 +73,10 @@ typedef enum {
ESP_WIFI_REGULATORY_TYPE_RU,
ESP_WIFI_REGULATORY_TYPE_SG,
ESP_WIFI_REGULATORY_TYPE_SV,
ESP_WIFI_REGULATORY_TYPE_SX,
ESP_WIFI_REGULATORY_TYPE_SY,
ESP_WIFI_REGULATORY_TYPE_TC,
ESP_WIFI_REGULATORY_TYPE_TG,
ESP_WIFI_REGULATORY_TYPE_TR,
ESP_WIFI_REGULATORY_TYPE_TZ,
ESP_WIFI_REGULATORY_TYPE_UA,
ESP_WIFI_REGULATORY_TYPE_VE,
ESP_WIFI_REGULATORY_TYPE_VN,
@@ -87,13 +86,17 @@ typedef enum {
ESP_WIFI_REGULATORY_TYPE_MAX,
} esp_wifi_regulatory_type_t;
const wifi_regdomain_t regdomain_table[WIFI_MAX_SUPPORT_COUNTRY_NUM] = {
/*
* regdomain_table: ISO alpha-2 country codes and their regulatory profile indices.
* Last row is a sentinel (not a real country code).
*/
const wifi_regdomain_t regdomain_table[] = {
{"01", ESP_WIFI_REGULATORY_TYPE_DEFAULT},
{"EU", ESP_WIFI_REGULATORY_TYPE_CE},
{"AD", ESP_WIFI_REGULATORY_TYPE_CE},
{"AE", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"AF", ESP_WIFI_REGULATORY_TYPE_AF},
{"AI", ESP_WIFI_REGULATORY_TYPE_AI},
{"AI", ESP_WIFI_REGULATORY_TYPE_AF},
{"AL", ESP_WIFI_REGULATORY_TYPE_CE},
{"AM", ESP_WIFI_REGULATORY_TYPE_AM},
{"AN", ESP_WIFI_REGULATORY_TYPE_AF},
@@ -117,6 +120,7 @@ const wifi_regdomain_t regdomain_table[WIFI_MAX_SUPPORT_COUNTRY_NUM] = {
{"BR", ESP_WIFI_REGULATORY_TYPE_ANATEL},
{"BS", ESP_WIFI_REGULATORY_TYPE_BS},
{"BT", ESP_WIFI_REGULATORY_TYPE_AF},
{"BW", ESP_WIFI_REGULATORY_TYPE_BW},
{"BY", ESP_WIFI_REGULATORY_TYPE_AF},
{"BZ", ESP_WIFI_REGULATORY_TYPE_BZ},
{"CA", ESP_WIFI_REGULATORY_TYPE_ISED},
@@ -143,14 +147,16 @@ const wifi_regdomain_t regdomain_table[WIFI_MAX_SUPPORT_COUNTRY_NUM] = {
{"ET", ESP_WIFI_REGULATORY_TYPE_AF},
{"FI", ESP_WIFI_REGULATORY_TYPE_CE},
{"FM", ESP_WIFI_REGULATORY_TYPE_AS},
{"FO", ESP_WIFI_REGULATORY_TYPE_FO},
{"FR", ESP_WIFI_REGULATORY_TYPE_CE},
{"GB", ESP_WIFI_REGULATORY_TYPE_GB},
{"GD", ESP_WIFI_REGULATORY_TYPE_GD},
{"GE", ESP_WIFI_REGULATORY_TYPE_AZ},
{"GF", ESP_WIFI_REGULATORY_TYPE_AI},
{"GF", ESP_WIFI_REGULATORY_TYPE_AF},
{"GH", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"GL", ESP_WIFI_REGULATORY_TYPE_AI},
{"GP", ESP_WIFI_REGULATORY_TYPE_AI},
{"GI", ESP_WIFI_REGULATORY_TYPE_FO},
{"GL", ESP_WIFI_REGULATORY_TYPE_AF},
{"GP", ESP_WIFI_REGULATORY_TYPE_AF},
{"GR", ESP_WIFI_REGULATORY_TYPE_CE},
{"GT", ESP_WIFI_REGULATORY_TYPE_GT},
{"GU", ESP_WIFI_REGULATORY_TYPE_GU},
@@ -162,7 +168,8 @@ const wifi_regdomain_t regdomain_table[WIFI_MAX_SUPPORT_COUNTRY_NUM] = {
{"HU", ESP_WIFI_REGULATORY_TYPE_CE},
{"ID", ESP_WIFI_REGULATORY_TYPE_ID},
{"IE", ESP_WIFI_REGULATORY_TYPE_CE},
{"IL", ESP_WIFI_REGULATORY_TYPE_IL},
{"IL", ESP_WIFI_REGULATORY_TYPE_CE},
{"IM", ESP_WIFI_REGULATORY_TYPE_FO},
{"IN", ESP_WIFI_REGULATORY_TYPE_WPC},
{"IR", ESP_WIFI_REGULATORY_TYPE_IR},
{"IS", ESP_WIFI_REGULATORY_TYPE_CE},
@@ -190,13 +197,13 @@ const wifi_regdomain_t regdomain_table[WIFI_MAX_SUPPORT_COUNTRY_NUM] = {
{"MC", ESP_WIFI_REGULATORY_TYPE_CE},
{"MD", ESP_WIFI_REGULATORY_TYPE_CE},
{"ME", ESP_WIFI_REGULATORY_TYPE_CE},
{"MF", ESP_WIFI_REGULATORY_TYPE_AI},
{"MF", ESP_WIFI_REGULATORY_TYPE_AF},
{"MH", ESP_WIFI_REGULATORY_TYPE_AS},
{"MK", ESP_WIFI_REGULATORY_TYPE_CE},
{"MN", ESP_WIFI_REGULATORY_TYPE_BS},
{"MO", ESP_WIFI_REGULATORY_TYPE_MO},
{"MP", ESP_WIFI_REGULATORY_TYPE_AS},
{"MQ", ESP_WIFI_REGULATORY_TYPE_AI},
{"MQ", ESP_WIFI_REGULATORY_TYPE_AF},
{"MR", ESP_WIFI_REGULATORY_TYPE_AF},
{"MT", ESP_WIFI_REGULATORY_TYPE_CE},
{"MU", ESP_WIFI_REGULATORY_TYPE_BS},
@@ -214,18 +221,18 @@ const wifi_regdomain_t regdomain_table[WIFI_MAX_SUPPORT_COUNTRY_NUM] = {
{"OM", ESP_WIFI_REGULATORY_TYPE_OM},
{"PA", ESP_WIFI_REGULATORY_TYPE_PA},
{"PE", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"PF", ESP_WIFI_REGULATORY_TYPE_AI},
{"PF", ESP_WIFI_REGULATORY_TYPE_AF},
{"PG", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"PH", ESP_WIFI_REGULATORY_TYPE_PH},
{"PK", ESP_WIFI_REGULATORY_TYPE_PK},
{"PL", ESP_WIFI_REGULATORY_TYPE_CE},
{"PM", ESP_WIFI_REGULATORY_TYPE_AI},
{"PM", ESP_WIFI_REGULATORY_TYPE_AF},
{"PR", ESP_WIFI_REGULATORY_TYPE_GD},
{"PT", ESP_WIFI_REGULATORY_TYPE_CE},
{"PW", ESP_WIFI_REGULATORY_TYPE_AS},
{"PY", ESP_WIFI_REGULATORY_TYPE_BS},
{"QA", ESP_WIFI_REGULATORY_TYPE_QA},
{"RE", ESP_WIFI_REGULATORY_TYPE_AI},
{"RE", ESP_WIFI_REGULATORY_TYPE_AF},
{"RO", ESP_WIFI_REGULATORY_TYPE_CE},
{"RS", ESP_WIFI_REGULATORY_TYPE_RS},
{"RU", ESP_WIFI_REGULATORY_TYPE_RU},
@@ -235,11 +242,13 @@ const wifi_regdomain_t regdomain_table[WIFI_MAX_SUPPORT_COUNTRY_NUM] = {
{"SG", ESP_WIFI_REGULATORY_TYPE_SG},
{"SI", ESP_WIFI_REGULATORY_TYPE_CE},
{"SK", ESP_WIFI_REGULATORY_TYPE_CE},
{"SM", ESP_WIFI_REGULATORY_TYPE_FO},
{"SN", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"SR", ESP_WIFI_REGULATORY_TYPE_AF},
{"SV", ESP_WIFI_REGULATORY_TYPE_SV},
{"SX", ESP_WIFI_REGULATORY_TYPE_SX},
{"SY", ESP_WIFI_REGULATORY_TYPE_SY},
{"TC", ESP_WIFI_REGULATORY_TYPE_TC},
{"TC", ESP_WIFI_REGULATORY_TYPE_BS},
{"TD", ESP_WIFI_REGULATORY_TYPE_AF},
{"TG", ESP_WIFI_REGULATORY_TYPE_TG},
{"TH", ESP_WIFI_REGULATORY_TYPE_IFETEL},
@@ -247,23 +256,25 @@ const wifi_regdomain_t regdomain_table[WIFI_MAX_SUPPORT_COUNTRY_NUM] = {
{"TR", ESP_WIFI_REGULATORY_TYPE_TR},
{"TT", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"TW", ESP_WIFI_REGULATORY_TYPE_NCC},
{"TZ", ESP_WIFI_REGULATORY_TYPE_TZ},
{"TZ", ESP_WIFI_REGULATORY_TYPE_BW},
{"UA", ESP_WIFI_REGULATORY_TYPE_UA},
{"UG", ESP_WIFI_REGULATORY_TYPE_BS},
{"US", ESP_WIFI_REGULATORY_TYPE_FCC},
{"UY", ESP_WIFI_REGULATORY_TYPE_BB},
{"UZ", ESP_WIFI_REGULATORY_TYPE_MA},
{"VA", ESP_WIFI_REGULATORY_TYPE_FO},
{"VC", ESP_WIFI_REGULATORY_TYPE_AF},
{"VE", ESP_WIFI_REGULATORY_TYPE_VE},
{"VI", ESP_WIFI_REGULATORY_TYPE_AS},
{"VN", ESP_WIFI_REGULATORY_TYPE_VN},
{"VU", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"WF", ESP_WIFI_REGULATORY_TYPE_AI},
{"WF", ESP_WIFI_REGULATORY_TYPE_AF},
{"WS", ESP_WIFI_REGULATORY_TYPE_WS},
{"YE", ESP_WIFI_REGULATORY_TYPE_YE},
{"YT", ESP_WIFI_REGULATORY_TYPE_AI},
{"YT", ESP_WIFI_REGULATORY_TYPE_AF},
{"ZA", ESP_WIFI_REGULATORY_TYPE_ZA},
{"ZW", ESP_WIFI_REGULATORY_TYPE_AF},
{"##", ESP_WIFI_REGULATORY_TYPE_MAX}, /* Sentinel: end of table; not a real country code — do not use as wifi_country_t.cc. */
};
const wifi_regulatory_t regulatory_data[] = {
@@ -315,12 +326,12 @@ const wifi_regulatory_t regulatory_data[] = {
{
6, /* Number of rules */
{
{ 1, 11, 2, 30, 0, 0 }, /* chan:1~11, max_bw:40M, max_power:30(dBm), dfs:0, reserved.*/
{ 1, 13, 2, 36, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:36(dBm), dfs:0, reserved.*/
{ 36, 48, 3, 23, 0, 0 }, /* chan:36~48, max_bw:80M, max_power:23(dBm), dfs:0, reserved.*/
{ 52, 64, 3, 24, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:24(dBm), dfs:1, reserved.*/
{ 100, 116, 3, 24, 1, 0 }, /* chan:100~116, max_bw:80M, max_power:24(dBm), dfs:1, reserved.*/
{ 132, 144, 3, 24, 1, 0 }, /* chan:132~144, max_bw:80M, max_power:24(dBm), dfs:1, reserved.*/
{ 149, 165, 3, 30, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:30(dBm), dfs:0, reserved.*/
{ 52, 64, 3, 26, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:26(dBm), dfs:1, reserved.*/
{ 100, 144, 4, 26, 1, 0 }, /* chan:100~144, max_bw:160M, max_power:26(dBm), dfs:1, reserved.*/
{ 149, 165, 3, 36, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:36(dBm), dfs:0, reserved.*/
{ 173, 177, 2, 27, 0, 0 }, /* chan:173~177, max_bw:40M, max_power:27(dBm), dfs:0, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_SRRC */
@@ -419,7 +430,7 @@ const wifi_regulatory_t regulatory_data[] = {
{ 36, 48, 3, 23, 0, 0 }, /* chan:36~48, max_bw:80M, max_power:23(dBm), dfs:0, reserved.*/
{ 52, 64, 3, 24, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:24(dBm), dfs:1, reserved.*/
{ 100, 144, 4, 24, 1, 0 }, /* chan:100~144, max_bw:160M, max_power:24(dBm), dfs:1, reserved.*/
{ 149, 169, 3, 27, 0, 0 }, /* chan:149~169, max_bw:80M, max_power:27(dBm), dfs:0, reserved.*/
{ 149, 165, 3, 30, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:30(dBm), dfs:0, reserved.*/
{ 173, 177, 2, 27, 0, 0 }, /* chan:173~177, max_bw:40M, max_power:27(dBm), dfs:0, reserved.*/
}
},
@@ -433,16 +444,6 @@ const wifi_regulatory_t regulatory_data[] = {
{ 100, 140, 4, 27, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:27(dBm), dfs:1, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_AI */
{
4, /* Number of rules */
{
{ 1, 13, 2, 20, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/
{ 36, 48, 3, 20, 0, 0 }, /* chan:36~48, max_bw:80M, max_power:20(dBm), dfs:0, reserved.*/
{ 52, 64, 3, 20, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:20(dBm), dfs:1, reserved.*/
{ 100, 140, 4, 27, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:27(dBm), dfs:1, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_AM */
{
3, /* Number of rules */
@@ -530,6 +531,17 @@ const wifi_regulatory_t regulatory_data[] = {
{ 149, 165, 3, 30, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:30(dBm), dfs:0, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_BW */
{
5, /* Number of rules */
{
{ 1, 13, 2, 20, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/
{ 36, 48, 3, 23, 0, 0 }, /* chan:36~48, max_bw:80M, max_power:23(dBm), dfs:0, reserved.*/
{ 52, 64, 3, 20, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:20(dBm), dfs:1, reserved.*/
{ 100, 140, 4, 23, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:23(dBm), dfs:1, reserved.*/
{ 149, 165, 3, 24, 1, 0 }, /* chan:149~165, max_bw:80M, max_power:24(dBm), dfs:1, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_BZ */
{
2, /* Number of rules */
@@ -551,13 +563,14 @@ const wifi_regulatory_t regulatory_data[] = {
},
/* ESP_WIFI_REGULATORY_TYPE_CR */
{
5, /* Number of rules */
6, /* Number of rules */
{
{ 1, 13, 2, 36, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:36(dBm), dfs:0, reserved.*/
{ 36, 48, 1, 30, 0, 0 }, /* chan:36~48, max_bw:20M, max_power:30(dBm), dfs:0, reserved.*/
{ 52, 64, 1, 30, 1, 0 }, /* chan:52~64, max_bw:20M, max_power:30(dBm), dfs:1, reserved.*/
{ 100, 144, 1, 30, 1, 0 }, /* chan:100~144, max_bw:20M, max_power:30(dBm), dfs:1, reserved.*/
{ 149, 165, 1, 36, 0, 0 }, /* chan:149~165, max_bw:20M, max_power:36(dBm), dfs:0, reserved.*/
{ 36, 48, 3, 30, 0, 0 }, /* chan:36~48, max_bw:80M, max_power:30(dBm), dfs:0, reserved.*/
{ 52, 64, 3, 30, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:30(dBm), dfs:1, reserved.*/
{ 100, 144, 4, 30, 1, 0 }, /* chan:100~144, max_bw:160M, max_power:30(dBm), dfs:1, reserved.*/
{ 149, 165, 3, 36, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:36(dBm), dfs:0, reserved.*/
{ 173, 177, 2, 36, 0, 0 }, /* chan:173~177, max_bw:40M, max_power:36(dBm), dfs:0, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_CU */
@@ -610,6 +623,16 @@ const wifi_regulatory_t regulatory_data[] = {
{ 52, 64, 3, 20, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:20(dBm), dfs:1, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_FO */
{
4, /* Number of rules */
{
{ 1, 13, 2, 20, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/
{ 36, 48, 3, 23, 0, 0 }, /* chan:36~48, max_bw:80M, max_power:23(dBm), dfs:0, reserved.*/
{ 52, 64, 3, 20, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:20(dBm), dfs:1, reserved.*/
{ 100, 140, 4, 26, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:26(dBm), dfs:1, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_GB */
{
5, /* Number of rules */
@@ -673,17 +696,6 @@ const wifi_regulatory_t regulatory_data[] = {
{ 149, 161, 3, 23, 0, 0 }, /* chan:149~161, max_bw:80M, max_power:23(dBm), dfs:0, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_IL */
{
5, /* Number of rules */
{
{ 1, 13, 2, 20, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/
{ 36, 48, 3, 23, 0, 0 }, /* chan:36~48, max_bw:80M, max_power:23(dBm), dfs:0, reserved.*/
{ 52, 64, 3, 20, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:20(dBm), dfs:1, reserved.*/
{ 100, 140, 4, 26, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:26(dBm), dfs:1, reserved.*/
{ 149, 173, 3, 13, 0, 0 }, /* chan:149~173, max_bw:80M, max_power:13(dBm), dfs:0, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_IR */
{
4, /* Number of rules */
@@ -815,11 +827,11 @@ const wifi_regulatory_t regulatory_data[] = {
{
5, /* Number of rules */
{
{ 1, 13, 2, 26, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:26(dBm), dfs:0, reserved.*/
{ 1, 14, 2, 26, 0, 0 }, /* chan:1~14, max_bw:40M, max_power:26(dBm), dfs:0, reserved.*/
{ 36, 48, 3, 30, 0, 0 }, /* chan:36~48, max_bw:80M, max_power:30(dBm), dfs:0, reserved.*/
{ 52, 64, 3, 30, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:30(dBm), dfs:1, reserved.*/
{ 100, 128, 4, 30, 1, 0 }, /* chan:100~128, max_bw:160M, max_power:30(dBm), dfs:1, reserved.*/
{ 149, 165, 3, 30, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:30(dBm), dfs:0, reserved.*/
{ 52, 64, 3, 23, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:23(dBm), dfs:1, reserved.*/
{ 100, 128, 4, 23, 1, 0 }, /* chan:100~128, max_bw:160M, max_power:23(dBm), dfs:1, reserved.*/
{ 149, 173, 3, 30, 0, 0 }, /* chan:149~173, max_bw:80M, max_power:30(dBm), dfs:0, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_NA */
@@ -903,7 +915,7 @@ const wifi_regulatory_t regulatory_data[] = {
{
{ 1, 13, 2, 20, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/
{ 36, 64, 4, 20, 0, 0 }, /* chan:36~64, max_bw:160M, max_power:20(dBm), dfs:0, reserved.*/
{ 132, 165, 4, 20, 0, 0 }, /* chan:132~165, max_bw:160M, max_power:20(dBm), dfs:0, reserved.*/
{ 132, 165, 4, 23, 0, 0 }, /* chan:132~165, max_bw:160M, max_power:23(dBm), dfs:0, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_SG */
@@ -927,6 +939,17 @@ const wifi_regulatory_t regulatory_data[] = {
{ 149, 165, 1, 30, 0, 0 }, /* chan:149~165, max_bw:20M, max_power:30(dBm), dfs:0, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_SX */
{
5, /* Number of rules */
{
{ 1, 13, 2, 20, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/
{ 36, 48, 3, 16, 0, 0 }, /* chan:36~48, max_bw:80M, max_power:16(dBm), dfs:0, reserved.*/
{ 52, 64, 3, 21, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:21(dBm), dfs:1, reserved.*/
{ 100, 140, 4, 23, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:23(dBm), dfs:1, reserved.*/
{ 149, 173, 3, 24, 1, 0 }, /* chan:149~173, max_bw:80M, max_power:24(dBm), dfs:1, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_SY */
{
6, /* Number of rules */
@@ -939,17 +962,6 @@ const wifi_regulatory_t regulatory_data[] = {
{ 173, 173, 1, 23, 0, 0 }, /* chan:173~173, max_bw:20M, max_power:23(dBm), dfs:0, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_TC */
{
5, /* Number of rules */
{
{ 1, 13, 2, 20, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/
{ 36, 48, 3, 24, 0, 0 }, /* chan:36~48, max_bw:80M, max_power:24(dBm), dfs:0, reserved.*/
{ 52, 64, 3, 24, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:24(dBm), dfs:1, reserved.*/
{ 100, 144, 4, 24, 1, 0 }, /* chan:100~144, max_bw:160M, max_power:24(dBm), dfs:1, reserved.*/
{ 149, 165, 3, 30, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:30(dBm), dfs:0, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_TG */
{
3, /* Number of rules */
@@ -969,17 +981,6 @@ const wifi_regulatory_t regulatory_data[] = {
{ 100, 140, 4, 27, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:27(dBm), dfs:1, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_TZ */
{
5, /* Number of rules */
{
{ 1, 13, 2, 20, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/
{ 36, 48, 3, 23, 0, 0 }, /* chan:36~48, max_bw:80M, max_power:23(dBm), dfs:0, reserved.*/
{ 52, 64, 3, 20, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:20(dBm), dfs:1, reserved.*/
{ 100, 140, 4, 23, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:23(dBm), dfs:1, reserved.*/
{ 149, 165, 3, 24, 1, 0 }, /* chan:149~165, max_bw:80M, max_power:24(dBm), dfs:1, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_UA */
{
5, /* Number of rules */
@@ -1005,10 +1006,10 @@ const wifi_regulatory_t regulatory_data[] = {
{
5, /* Number of rules */
{
{ 1, 13, 2, 20, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/
{ 36, 48, 3, 17, 0, 0 }, /* chan:36~48, max_bw:80M, max_power:17(dBm), dfs:0, reserved.*/
{ 52, 64, 3, 24, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:24(dBm), dfs:1, reserved.*/
{ 100, 144, 3, 24, 1, 0 }, /* chan:100~144, max_bw:80M, max_power:24(dBm), dfs:1, reserved.*/
{ 1, 13, 2, 23, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:23(dBm), dfs:0, reserved.*/
{ 36, 48, 3, 23, 0, 0 }, /* chan:36~48, max_bw:80M, max_power:23(dBm), dfs:0, reserved.*/
{ 52, 64, 3, 20, 1, 0 }, /* chan:52~64, max_bw:80M, max_power:20(dBm), dfs:1, reserved.*/
{ 100, 140, 4, 26, 1, 0 }, /* chan:100~140, max_bw:160M, max_power:26(dBm), dfs:1, reserved.*/
{ 149, 165, 3, 30, 0, 0 }, /* chan:149~165, max_bw:80M, max_power:30(dBm), dfs:0, reserved.*/
}
},
@@ -1056,194 +1057,204 @@ typedef enum {
ESP_WIFI_REGULATORY_TYPE_RCM,
ESP_WIFI_REGULATORY_TYPE_NCC,
ESP_WIFI_REGULATORY_TYPE_FCC,
ESP_WIFI_REGULATORY_TYPE_CU,
ESP_WIFI_REGULATORY_TYPE_GT,
ESP_WIFI_REGULATORY_TYPE_ID,
ESP_WIFI_REGULATORY_TYPE_KE,
ESP_WIFI_REGULATORY_TYPE_KP,
ESP_WIFI_REGULATORY_TYPE_OM,
ESP_WIFI_REGULATORY_TYPE_MY,
ESP_WIFI_REGULATORY_TYPE_PK,
ESP_WIFI_REGULATORY_TYPE_TG,
ESP_WIFI_REGULATORY_TYPE_MAX,
} esp_wifi_regulatory_type_t;
const wifi_regdomain_t regdomain_table[WIFI_MAX_SUPPORT_COUNTRY_NUM] = {
/*
* regdomain_table: ISO alpha-2 country codes and their regulatory profile indices.
* Last row is a sentinel (not a real country code).
*/
const wifi_regdomain_t regdomain_table[] = {
{"01", ESP_WIFI_REGULATORY_TYPE_DEFAULT},
{"EU", ESP_WIFI_REGULATORY_TYPE_CE},
{"AD", ESP_WIFI_REGULATORY_TYPE_CE},
{"AE", ESP_WIFI_REGULATORY_TYPE_CE},
{"AF", ESP_WIFI_REGULATORY_TYPE_CE},
{"AI", ESP_WIFI_REGULATORY_TYPE_CE},
{"AL", ESP_WIFI_REGULATORY_TYPE_CE},
{"AM", ESP_WIFI_REGULATORY_TYPE_CE},
{"AN", ESP_WIFI_REGULATORY_TYPE_CE},
{"AR", ESP_WIFI_REGULATORY_TYPE_CE},
{"AS", ESP_WIFI_REGULATORY_TYPE_ISED},
{"AT", ESP_WIFI_REGULATORY_TYPE_CE},
{"AU", ESP_WIFI_REGULATORY_TYPE_ACMA},
{"AW", ESP_WIFI_REGULATORY_TYPE_CE},
{"AZ", ESP_WIFI_REGULATORY_TYPE_CE},
{"BA", ESP_WIFI_REGULATORY_TYPE_CE},
{"BB", ESP_WIFI_REGULATORY_TYPE_CE},
{"BD", ESP_WIFI_REGULATORY_TYPE_CE},
{"BE", ESP_WIFI_REGULATORY_TYPE_CE},
{"BF", ESP_WIFI_REGULATORY_TYPE_CE},
{"BG", ESP_WIFI_REGULATORY_TYPE_CE},
{"BH", ESP_WIFI_REGULATORY_TYPE_CE},
{"BL", ESP_WIFI_REGULATORY_TYPE_CE},
{"BM", ESP_WIFI_REGULATORY_TYPE_ISED},
{"BN", ESP_WIFI_REGULATORY_TYPE_CE},
{"BO", ESP_WIFI_REGULATORY_TYPE_CE},
{"BR", ESP_WIFI_REGULATORY_TYPE_ANATEL},
{"BS", ESP_WIFI_REGULATORY_TYPE_CE},
{"BT", ESP_WIFI_REGULATORY_TYPE_CE},
{"BY", ESP_WIFI_REGULATORY_TYPE_CE},
{"BZ", ESP_WIFI_REGULATORY_TYPE_ANATEL},
{"CA", ESP_WIFI_REGULATORY_TYPE_ISED},
{"CF", ESP_WIFI_REGULATORY_TYPE_CE},
{"CH", ESP_WIFI_REGULATORY_TYPE_CE},
{"CI", ESP_WIFI_REGULATORY_TYPE_CE},
{"CL", ESP_WIFI_REGULATORY_TYPE_CE},
{"CN", ESP_WIFI_REGULATORY_TYPE_CE},
{"CO", ESP_WIFI_REGULATORY_TYPE_CE},
{"CR", ESP_WIFI_REGULATORY_TYPE_OFCA},
{"CU", ESP_WIFI_REGULATORY_TYPE_CU},
{"CX", ESP_WIFI_REGULATORY_TYPE_CE},
{"CY", ESP_WIFI_REGULATORY_TYPE_CE},
{"CZ", ESP_WIFI_REGULATORY_TYPE_CE},
{"DE", ESP_WIFI_REGULATORY_TYPE_CE},
{"DK", ESP_WIFI_REGULATORY_TYPE_CE},
{"DM", ESP_WIFI_REGULATORY_TYPE_ISED},
{"DO", ESP_WIFI_REGULATORY_TYPE_ISED},
{"DZ", ESP_WIFI_REGULATORY_TYPE_CE},
{"EC", ESP_WIFI_REGULATORY_TYPE_ANATEL},
{"EE", ESP_WIFI_REGULATORY_TYPE_CE},
{"EG", ESP_WIFI_REGULATORY_TYPE_CE},
{"ES", ESP_WIFI_REGULATORY_TYPE_CE},
{"ET", ESP_WIFI_REGULATORY_TYPE_CE},
{"FI", ESP_WIFI_REGULATORY_TYPE_CE},
{"FM", ESP_WIFI_REGULATORY_TYPE_ISED},
{"FR", ESP_WIFI_REGULATORY_TYPE_CE},
{"GB", ESP_WIFI_REGULATORY_TYPE_CE},
{"GD", ESP_WIFI_REGULATORY_TYPE_ISED},
{"GE", ESP_WIFI_REGULATORY_TYPE_CE},
{"GF", ESP_WIFI_REGULATORY_TYPE_CE},
{"GH", ESP_WIFI_REGULATORY_TYPE_CE},
{"GL", ESP_WIFI_REGULATORY_TYPE_CE},
{"GP", ESP_WIFI_REGULATORY_TYPE_CE},
{"GR", ESP_WIFI_REGULATORY_TYPE_CE},
{"EU", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"AD", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"AE", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"AF", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"AI", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"AL", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"AM", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"AN", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"AR", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"AS", ESP_WIFI_REGULATORY_TYPE_FCC},
{"AT", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"AU", ESP_WIFI_REGULATORY_TYPE_RCM},
{"AW", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"AZ", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"BA", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"BB", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"BD", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"BE", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"BF", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"BG", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"BH", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"BL", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"BM", ESP_WIFI_REGULATORY_TYPE_FCC},
{"BN", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"BO", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"BR", ESP_WIFI_REGULATORY_TYPE_NCC},
{"BS", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"BT", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"BW", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"BY", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"BZ", ESP_WIFI_REGULATORY_TYPE_NCC},
{"CA", ESP_WIFI_REGULATORY_TYPE_RCM},
{"CF", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"CH", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"CI", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"CL", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"CN", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"CO", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"CR", ESP_WIFI_REGULATORY_TYPE_RCM},
{"CU", ESP_WIFI_REGULATORY_TYPE_KCC},
{"CX", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"CY", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"CZ", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"DE", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"DK", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"DM", ESP_WIFI_REGULATORY_TYPE_FCC},
{"DO", ESP_WIFI_REGULATORY_TYPE_FCC},
{"DZ", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"EC", ESP_WIFI_REGULATORY_TYPE_NCC},
{"EE", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"EG", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"ES", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"ET", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"FI", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"FM", ESP_WIFI_REGULATORY_TYPE_FCC},
{"FO", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"FR", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"GB", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"GD", ESP_WIFI_REGULATORY_TYPE_FCC},
{"GE", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"GF", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"GH", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"GI", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"GL", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"GP", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"GR", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"GT", ESP_WIFI_REGULATORY_TYPE_GT},
{"GU", ESP_WIFI_REGULATORY_TYPE_ISED},
{"GY", ESP_WIFI_REGULATORY_TYPE_ANATEL},
{"HK", ESP_WIFI_REGULATORY_TYPE_OFCA},
{"HN", ESP_WIFI_REGULATORY_TYPE_CE},
{"HR", ESP_WIFI_REGULATORY_TYPE_CE},
{"HT", ESP_WIFI_REGULATORY_TYPE_ISED},
{"HU", ESP_WIFI_REGULATORY_TYPE_CE},
{"ID", ESP_WIFI_REGULATORY_TYPE_ID},
{"IE", ESP_WIFI_REGULATORY_TYPE_CE},
{"IL", ESP_WIFI_REGULATORY_TYPE_CE},
{"IN", ESP_WIFI_REGULATORY_TYPE_ANATEL},
{"IR", ESP_WIFI_REGULATORY_TYPE_CE},
{"IS", ESP_WIFI_REGULATORY_TYPE_CE},
{"IT", ESP_WIFI_REGULATORY_TYPE_CE},
{"JM", ESP_WIFI_REGULATORY_TYPE_CE},
{"JO", ESP_WIFI_REGULATORY_TYPE_CE},
{"GU", ESP_WIFI_REGULATORY_TYPE_FCC},
{"GY", ESP_WIFI_REGULATORY_TYPE_NCC},
{"HK", ESP_WIFI_REGULATORY_TYPE_RCM},
{"HN", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"HR", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"HT", ESP_WIFI_REGULATORY_TYPE_FCC},
{"HU", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"ID", ESP_WIFI_REGULATORY_TYPE_GT},
{"IE", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"IL", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"IM", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"IN", ESP_WIFI_REGULATORY_TYPE_NCC},
{"IR", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"IS", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"IT", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"JM", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"JO", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"JP", ESP_WIFI_REGULATORY_TYPE_MIC},
{"KE", ESP_WIFI_REGULATORY_TYPE_KE},
{"KH", ESP_WIFI_REGULATORY_TYPE_CE},
{"KN", ESP_WIFI_REGULATORY_TYPE_CE},
{"KH", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"KN", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"KP", ESP_WIFI_REGULATORY_TYPE_KP},
{"KR", ESP_WIFI_REGULATORY_TYPE_KCC},
{"KW", ESP_WIFI_REGULATORY_TYPE_CE},
{"KY", ESP_WIFI_REGULATORY_TYPE_ANATEL},
{"KZ", ESP_WIFI_REGULATORY_TYPE_CE},
{"LB", ESP_WIFI_REGULATORY_TYPE_CE},
{"LC", ESP_WIFI_REGULATORY_TYPE_CE},
{"LI", ESP_WIFI_REGULATORY_TYPE_CE},
{"LK", ESP_WIFI_REGULATORY_TYPE_CE},
{"LS", ESP_WIFI_REGULATORY_TYPE_CE},
{"LT", ESP_WIFI_REGULATORY_TYPE_CE},
{"LU", ESP_WIFI_REGULATORY_TYPE_CE},
{"LV", ESP_WIFI_REGULATORY_TYPE_CE},
{"MA", ESP_WIFI_REGULATORY_TYPE_CE},
{"MC", ESP_WIFI_REGULATORY_TYPE_CE},
{"MD", ESP_WIFI_REGULATORY_TYPE_CE},
{"ME", ESP_WIFI_REGULATORY_TYPE_CE},
{"MF", ESP_WIFI_REGULATORY_TYPE_CE},
{"MH", ESP_WIFI_REGULATORY_TYPE_ISED},
{"MK", ESP_WIFI_REGULATORY_TYPE_CE},
{"MN", ESP_WIFI_REGULATORY_TYPE_CE},
{"MO", ESP_WIFI_REGULATORY_TYPE_CU},
{"MP", ESP_WIFI_REGULATORY_TYPE_ISED},
{"MQ", ESP_WIFI_REGULATORY_TYPE_CE},
{"MR", ESP_WIFI_REGULATORY_TYPE_CE},
{"MT", ESP_WIFI_REGULATORY_TYPE_CE},
{"MU", ESP_WIFI_REGULATORY_TYPE_CE},
{"MV", ESP_WIFI_REGULATORY_TYPE_CE},
{"MW", ESP_WIFI_REGULATORY_TYPE_CE},
{"MX", ESP_WIFI_REGULATORY_TYPE_CE},
{"MY", ESP_WIFI_REGULATORY_TYPE_GT},
{"NA", ESP_WIFI_REGULATORY_TYPE_CE},
{"NG", ESP_WIFI_REGULATORY_TYPE_CE},
{"NI", ESP_WIFI_REGULATORY_TYPE_ISED},
{"NL", ESP_WIFI_REGULATORY_TYPE_CE},
{"NO", ESP_WIFI_REGULATORY_TYPE_CE},
{"NP", ESP_WIFI_REGULATORY_TYPE_CE},
{"NZ", ESP_WIFI_REGULATORY_TYPE_OFCA},
{"OM", ESP_WIFI_REGULATORY_TYPE_OM},
{"PA", ESP_WIFI_REGULATORY_TYPE_OFCA},
{"PE", ESP_WIFI_REGULATORY_TYPE_CE},
{"PF", ESP_WIFI_REGULATORY_TYPE_CE},
{"PG", ESP_WIFI_REGULATORY_TYPE_CE},
{"PH", ESP_WIFI_REGULATORY_TYPE_CE},
{"KW", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"KY", ESP_WIFI_REGULATORY_TYPE_NCC},
{"KZ", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"LB", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"LC", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"LI", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"LK", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"LS", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"LT", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"LU", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"LV", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"MA", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"MC", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"MD", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"ME", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"MF", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"MH", ESP_WIFI_REGULATORY_TYPE_FCC},
{"MK", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"MN", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"MO", ESP_WIFI_REGULATORY_TYPE_KCC},
{"MP", ESP_WIFI_REGULATORY_TYPE_FCC},
{"MQ", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"MR", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"MT", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"MU", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"MV", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"MW", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"MX", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"MY", ESP_WIFI_REGULATORY_TYPE_MY},
{"NA", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"NG", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"NI", ESP_WIFI_REGULATORY_TYPE_FCC},
{"NL", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"NO", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"NP", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"NZ", ESP_WIFI_REGULATORY_TYPE_RCM},
{"OM", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"PA", ESP_WIFI_REGULATORY_TYPE_RCM},
{"PE", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"PF", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"PG", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"PH", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"PK", ESP_WIFI_REGULATORY_TYPE_PK},
{"PL", ESP_WIFI_REGULATORY_TYPE_CE},
{"PM", ESP_WIFI_REGULATORY_TYPE_CE},
{"PR", ESP_WIFI_REGULATORY_TYPE_ISED},
{"PT", ESP_WIFI_REGULATORY_TYPE_CE},
{"PW", ESP_WIFI_REGULATORY_TYPE_ISED},
{"PY", ESP_WIFI_REGULATORY_TYPE_CE},
{"QA", ESP_WIFI_REGULATORY_TYPE_OM},
{"RE", ESP_WIFI_REGULATORY_TYPE_CE},
{"RO", ESP_WIFI_REGULATORY_TYPE_CE},
{"RS", ESP_WIFI_REGULATORY_TYPE_CE},
{"RU", ESP_WIFI_REGULATORY_TYPE_CE},
{"RW", ESP_WIFI_REGULATORY_TYPE_CE},
{"SA", ESP_WIFI_REGULATORY_TYPE_CE},
{"SE", ESP_WIFI_REGULATORY_TYPE_CE},
{"SG", ESP_WIFI_REGULATORY_TYPE_CU},
{"SI", ESP_WIFI_REGULATORY_TYPE_CE},
{"SK", ESP_WIFI_REGULATORY_TYPE_CE},
{"SN", ESP_WIFI_REGULATORY_TYPE_CE},
{"SR", ESP_WIFI_REGULATORY_TYPE_CE},
{"SV", ESP_WIFI_REGULATORY_TYPE_CE},
{"SY", ESP_WIFI_REGULATORY_TYPE_OM},
{"TC", ESP_WIFI_REGULATORY_TYPE_CE},
{"TD", ESP_WIFI_REGULATORY_TYPE_CE},
{"PL", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"PM", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"PR", ESP_WIFI_REGULATORY_TYPE_FCC},
{"PT", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"PW", ESP_WIFI_REGULATORY_TYPE_FCC},
{"PY", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"QA", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"RE", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"RO", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"RS", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"RU", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"RW", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"SA", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"SE", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"SG", ESP_WIFI_REGULATORY_TYPE_KCC},
{"SI", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"SK", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"SM", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"SN", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"SR", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"SV", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"SX", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"SY", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"TC", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"TD", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"TG", ESP_WIFI_REGULATORY_TYPE_TG},
{"TH", ESP_WIFI_REGULATORY_TYPE_CE},
{"TN", ESP_WIFI_REGULATORY_TYPE_CE},
{"TR", ESP_WIFI_REGULATORY_TYPE_CE},
{"TT", ESP_WIFI_REGULATORY_TYPE_CE},
{"TW", ESP_WIFI_REGULATORY_TYPE_ANATEL},
{"TZ", ESP_WIFI_REGULATORY_TYPE_CE},
{"UA", ESP_WIFI_REGULATORY_TYPE_OM},
{"UG", ESP_WIFI_REGULATORY_TYPE_CE},
{"US", ESP_WIFI_REGULATORY_TYPE_ISED},
{"UY", ESP_WIFI_REGULATORY_TYPE_CE},
{"UZ", ESP_WIFI_REGULATORY_TYPE_CE},
{"VC", ESP_WIFI_REGULATORY_TYPE_CE},
{"VE", ESP_WIFI_REGULATORY_TYPE_ANATEL},
{"VI", ESP_WIFI_REGULATORY_TYPE_ISED},
{"VN", ESP_WIFI_REGULATORY_TYPE_CE},
{"VU", ESP_WIFI_REGULATORY_TYPE_CE},
{"WF", ESP_WIFI_REGULATORY_TYPE_CE},
{"WS", ESP_WIFI_REGULATORY_TYPE_CE},
{"YE", ESP_WIFI_REGULATORY_TYPE_CE},
{"YT", ESP_WIFI_REGULATORY_TYPE_CE},
{"ZA", ESP_WIFI_REGULATORY_TYPE_CE},
{"ZW", ESP_WIFI_REGULATORY_TYPE_CE},
{"TH", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"TN", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"TR", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"TT", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"TW", ESP_WIFI_REGULATORY_TYPE_NCC},
{"TZ", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"UA", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"UG", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"US", ESP_WIFI_REGULATORY_TYPE_FCC},
{"UY", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"UZ", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"VA", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"VC", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"VE", ESP_WIFI_REGULATORY_TYPE_NCC},
{"VI", ESP_WIFI_REGULATORY_TYPE_FCC},
{"VN", ESP_WIFI_REGULATORY_TYPE_KCC},
{"VU", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"WF", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"WS", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"YE", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"YT", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"ZA", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"ZW", ESP_WIFI_REGULATORY_TYPE_IFETEL},
{"##", ESP_WIFI_REGULATORY_TYPE_MAX}, /* Sentinel: end of table; not a real country code — do not use as wifi_country_t.cc. */
};
const wifi_regulatory_t regulatory_data[] = {
@@ -1279,10 +1290,10 @@ const wifi_regulatory_t regulatory_data[] = {
{
1, /* Number of rules */
{
{ 1, 11, 2, 30, 0, 0 }, /* chan:1~11, max_bw:40M, max_power:30(dBm), dfs:0, reserved.*/
{ 1, 13, 2, 36, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:36(dBm), dfs:0, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_CE */
/* ESP_WIFI_REGULATORY_TYPE_SRRC */
{
1, /* Number of rules */
{
@@ -1296,7 +1307,7 @@ const wifi_regulatory_t regulatory_data[] = {
{ 1, 13, 2, 36, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:36(dBm), dfs:0, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_ANATEL */
/* ESP_WIFI_REGULATORY_TYPE_WPC */
{
1, /* Number of rules */
{
@@ -1318,41 +1329,34 @@ const wifi_regulatory_t regulatory_data[] = {
{ 1, 13, 2, 23, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:23(dBm), dfs:0, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_CE */
/* ESP_WIFI_REGULATORY_TYPE_IFETEL */
{
1, /* Number of rules */
{
{ 1, 13, 2, 20, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_OFCA */
/* ESP_WIFI_REGULATORY_TYPE_RCM */
{
1, /* Number of rules */
{
{ 1, 13, 2, 36, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:36(dBm), dfs:0, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_ANATEL */
/* ESP_WIFI_REGULATORY_TYPE_NCC */
{
1, /* Number of rules */
{
{ 1, 13, 2, 30, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:30(dBm), dfs:0, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_ISED */
/* ESP_WIFI_REGULATORY_TYPE_FCC */
{
1, /* Number of rules */
{
{ 1, 11, 2, 30, 0, 0 }, /* chan:1~11, max_bw:40M, max_power:30(dBm), dfs:0, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_CU */
{
1, /* Number of rules */
{
{ 1, 13, 2, 23, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:23(dBm), dfs:0, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_GT */
{
1, /* Number of rules */
@@ -1360,13 +1364,6 @@ const wifi_regulatory_t regulatory_data[] = {
{ 1, 13, 2, 26, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:26(dBm), dfs:0, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_ID */
{
1, /* Number of rules */
{
{ 1, 13, 2, 26, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:26(dBm), dfs:0, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_KE */
{
1, /* Number of rules */
@@ -1381,11 +1378,11 @@ const wifi_regulatory_t regulatory_data[] = {
{ 1, 13, 1, 20, 0, 0 }, /* chan:1~13, max_bw:20M, max_power:20(dBm), dfs:0, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_OM */
/* ESP_WIFI_REGULATORY_TYPE_MY */
{
1, /* Number of rules */
{
{ 1, 13, 2, 20, 0, 0 }, /* chan:1~13, max_bw:40M, max_power:20(dBm), dfs:0, reserved.*/
{ 1, 14, 2, 26, 0, 0 }, /* chan:1~14, max_bw:40M, max_power:26(dBm), dfs:0, reserved.*/
}
},
/* ESP_WIFI_REGULATORY_TYPE_PK */

View File

@@ -2,7 +2,7 @@
# SPDX-FileCopyrightText: 2008 Johannes Berg <johannes@sipsolutions.net>
# SPDX-FileCopyrightText: 2008 Michael Green <Michael.Green@Atheros.com>
#
# SPDX-FileContributor: 2025 Espressif Systems (Shanghai) CO LTD
# SPDX-FileContributor: 2025-2026 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Apache-2.0
#
# Copyright (c) 2008, Luis R. Rodriguez <mcgrof@gmail.com>
@@ -60,6 +60,9 @@ country EU: DFS-ETSI
# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
# Harmonized CEPT countries: https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
# https://docdb.cept.org/implementation/16737
# https://docdb.cept.org/download/4685
country AD: DFS-ETSI
(2400 - 2483.5 @ 40), (100 mW)
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
@@ -67,6 +70,7 @@ country AD: DFS-ETSI
(5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
# short range devices (ETSI EN 300 440-1)
(5725 - 5875 @ 80), (25 mW)
(5945 - 6425 @ 320), (23), NO-OUTDOOR
# 60 GHz band channels 1-4, ref: Etsi En 302 567
(57000 - 66000 @ 2160), (40)
@@ -99,6 +103,9 @@ country AI: DFS-ETSI
# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
# https://docdb.cept.org/implementation/16737
# https://docdb.cept.org/download/4685
country AL: DFS-ETSI
(2400 - 2483.5 @ 40), (100 mW)
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
@@ -106,6 +113,7 @@ country AL: DFS-ETSI
(5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
# short range devices (ETSI EN 300 440-1)
(5725 - 5875 @ 80), (25 mW)
(5945 - 6425 @ 320), (23), NO-OUTDOOR
# Source:
# 2.4 GHz https://www.psrc.am/contents/document/4749
@@ -146,6 +154,9 @@ country AS: DFS-FCC
# Harmonized CEPT countries (February 2021): https://docdb.cept.org/download/25c41779-cd6e/Rec7003e.pdf
# AT: https://www.rtr.at/TKP/was_wir_tun/telekommunikation/spectrum/bands/1997_bmvit-info-052010en.pdf
# AT: acceptance https://www.ris.bka.gv.at/Dokumente/BgblAuth/BGBLA_2014_II_63/BGBLA_2014_II_63.pdfsig
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
# https://docdb.cept.org/implementation/16737
# https://docdb.cept.org/download/4685
country AT: DFS-ETSI
(2400 - 2483.5 @ 40), (100 mW)
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
@@ -160,43 +171,43 @@ country AT: DFS-ETSI
# Source:
# 'Item' in the comments below refers to each numbered rule found at:
# https://www.legislation.gov.au/Details/F2023C00524
# https://www.legislation.gov.au/Details/F2025L01047 within Table 8
# except for 5850-5875 which is found in Table 1.
# Both DFS-ETSI and DFS-FCC are acceptable per AS/NZS 4268 Appendix B.
# The EIRP for DFS bands can be increased by 3dB if TPC is implemented.
# In order to allow 80MHz operation between 5650-5730MHz the upper boundary
# of this more restrictive band has been shifted up by 5MHz from 5725MHz.
country AU: DFS-ETSI
# Item 58
(915 - 920 @ 4), (1000 mW)
(920 - 928 @ 8), (1000 mW)
# Item 1
(915 - 928 @ 8), (1000 mW)
# Item 59
# Item 3 and 7
(2400 - 2483.5 @ 40), (4000 mW)
# Item 61
# Item 10
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW
# Item 62 (200 mW allowed if TPC is used)
# Item 11 (200 mW allowed if TPC is used)
(5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, AUTO-BW, DFS
# Item 63(a) (1000 mW with TPC)
# Item 12(a) (1000 mW with TPC)
(5470 - 5600 @ 80), (500 mW), DFS
# Item 63(b) (1000 mW with TPC)
# Item 12(b) (1000 mW with TPC)
# The end is 5725 but we borrow 5 MHz from the following less restrictive band
# so we can get an 80 MHz channel.
(5650 - 5730 @ 80), (500 mW), DFS
# Item 60
# Item 9
(5730 - 5850 @ 80), (4000 mW), AUTO-BW
# Item 22
# Item 22 of Table 1
(5850 - 5875 @ 20), (25 mW), AUTO-BW
# Item 63AA (25 mW if outdoors)
(5925 - 6425 @ 160), (250 mW), NO-OUTDOOR
# Item 13 (25 mW if outdoors)
(5925 - 6585 @ 320), (250 mW), NO-OUTDOOR
# Item 65
# Item 18
(57000 - 71000 @ 2160), (20000 mW), NO-OUTDOOR
country AW: DFS-ETSI
@@ -216,6 +227,9 @@ country AZ: DFS-ETSI
# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
# https://docdb.cept.org/implementation/16737
# https://docdb.cept.org/download/4685
country BA: DFS-ETSI
(2400 - 2483.5 @ 40), (100 mW)
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
@@ -223,6 +237,7 @@ country BA: DFS-ETSI
(5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
# short range devices (ETSI EN 300 440-1)
(5725 - 5875 @ 80), (25 mW)
(5945 - 6425 @ 320), (23), NO-OUTDOOR
# 60 GHz band channels 1-4, ref: Etsi En 302 567
(57000 - 66000 @ 2160), (40)
@@ -246,6 +261,9 @@ country BD: DFS-JP
# BE: https://www.ibpt.be/public/files/en/21761/B03-02_2.1_EN.pdf
# BE: https://www.ibpt.be/public/files/en/21762/B03-03_2.1_EN.pdf
# BE: https://www.ibpt.be/public/files/en/22165/B01-28_3.1_EN.pdf
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
# https://docdb.cept.org/implementation/16737
# https://docdb.cept.org/download/4685
country BE: DFS-ETSI
(2400 - 2483.5 @ 40), (100 mW)
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
@@ -348,7 +366,7 @@ country BO: DFS-JP
# Source:
# https://www.gov.br/anatel/pt-br/regulado/radiofrequencia/radiacao-restrita
# https://informacoes.anatel.gov.br/legislacao/resolucoes/2017/936-resolucao-680
# https://informacoes.anatel.gov.br/legislacao/atos-de-certificacao-de-produtos/2017/1139-ato-14448
# https://informacoes.anatel.gov.br/legislacao/atos-de-certificacao-de-produtos/2021/1510-ato-1306
country BR: DFS-FCC
(2400 - 2483.5 @ 40), (30)
# The next three ranges have been reduced by 3dB, could be increased
@@ -357,7 +375,7 @@ country BR: DFS-FCC
(5250 - 5350 @ 80), (27), NO-OUTDOOR, DFS, AUTO-BW
(5470 - 5725 @ 160), (27), DFS, AUTO-BW
(5725 - 5850 @ 80), (30), AUTO-BW
(5925 - 7125 @ 320), (12), NO-OUTDOOR, NO-IR
(5925 - 7125 @ 320), (12), NO-OUTDOOR
# EIRP=40dBm (43dBm peak)
(57000 - 71000 @ 2160), (40)
@@ -376,6 +394,15 @@ country BT: DFS-ETSI
(5250 - 5330 @ 80), (20), DFS, AUTO-BW
(5490 - 5710 @ 160), (27), DFS
# Source:
# https://www.bocra.org.bw/sites/default/files/documents/Annexure_3.3.2A_SRDs_Guidelines_Feb_2022.pdf
country BW: DFS-ETSI
(2400 - 2483.5 @ 40), (100 mW)
(5150 - 5250 @ 80), (200 mW), AUTO-BW
(5250 - 5350 @ 80), (20), DFS, AUTO-BW
(5470 - 5725 @ 160), (250 mW), DFS
(5725 - 5850 @ 80), (24), DFS
country BY: DFS-ETSI
(2402 - 2482 @ 40), (20)
(5170 - 5250 @ 80), (20), AUTO-BW
@@ -387,15 +414,20 @@ country BZ: DFS-JP
(5735 - 5835 @ 80), (30)
# Sources:
# https://www.ic.gc.ca/eic/site/smt-gst.nsf/vwapj/rss-247-i2-e.pdf/$file/rss-247-i2-e.pdf
# RSS-247 Issue 4
# https://ised-isde.canada.ca/site/spectrum-management-telecommunications/en/devices-and-equipment/radio-equipment-standards/radio-standards-specifications-rss/rss-247-digital-transmission-systems-dtss-frequency-hopping-systems-fhss-and-licence-exempt-local
# https://www.ic.gc.ca/eic/site/smt-gst.nsf/eng/sf11750.html (6 GHz operation)
country CA: DFS-FCC
(2402 - 2472 @ 40), (30)
(5150 - 5250 @ 80), (23), NO-OUTDOOR, AUTO-BW
(5250 - 5350 @ 80), (24), DFS, AUTO-BW
(5470 - 5600 @ 80), (24), DFS
(5650 - 5730 @ 80), (24), DFS
(5735 - 5835 @ 80), (30)
(2400 - 2483.5 @ 40), (4000 mW)
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW
(5250 - 5350 @ 80), (500 mW), DFS, AUTO-BW
# This range ends at 5725 MHz, but channel 144 extends to 5730 MHz.
# Since 5725 ~ 5730 MHz belongs to the next range which has looser
# requirements, we can extend the range by 5 MHz to make the kernel
# happy and be able to use channel 144.
(5470 - 5730 @ 160), (500 mW), DFS
(5730 - 5850 @ 80), (4000 mW), AUTO-BW
(5850 - 5895 @ 40), (27), AUTO-BW
(5925 - 7125 @ 320), (12), NO-OUTDOOR
# Source:
@@ -417,6 +449,9 @@ country CF: DFS-FCC
# CH: https://www.ofcomnet.ch/api/rir/1010/04
# CH: https://www.ofcomnet.ch/api/rir/1008/12
# CH: https://www.ofcomnet.ch/#/fatTable
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
# https://docdb.cept.org/implementation/16737
# https://docdb.cept.org/download/4685
country CH: DFS-ETSI
(2400 - 2483.5 @ 40), (100 mW)
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
@@ -473,14 +508,17 @@ country CO: DFS-FCC
# Source:
# https://storage.googleapis.com/eleoscompliance1.appspot.com/public/PNAF%20modificaci%C3%B3n%20ALCA87_30_04_2021.pdf
# https://pgrweb.go.cr/scij/Busqueda/Normativa/Normas/nrm_texto_completo.aspx?param1=NRTC&nValor1=1&nValor2=99551&nValor3=144158&strTipM=TC
country CR: DFS-FCC
(2402 - 2482 @ 40), (36)
(5170 - 5250 @ 20), (30)
(5250 - 5330 @ 20), (30), DFS
(5490 - 5730 @ 20), (30), DFS
(5735 - 5835 @ 20), (36)
(5875 - 5925 @ 20), (30)
(5150 - 5250 @ 80), (30), AUTO-BW
(5250 - 5350 @ 80), (30), DFS, AUTO-BW
(5470 - 5730 @ 160), (30), DFS
(5730 - 5850 @ 80), (36), AUTO-BW
(5850 - 5895 @ 40), (36), AUTO-BW
(5895 - 5925 @ 20), (30), AUTO-BW
(5925 - 7125 @ 320), (30), NO-OUTDOOR
(57000 - 71000 @ 2160), (43)
# Source:
# https://www.mincom.gob.cu/es/marco-legal
@@ -643,26 +681,31 @@ country EC: DFS-FCC
# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
# EU decision 2021/1067/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32021D1067&from=EN
# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf
# EE: https://www.ttja.ee/et/ettevottele-organisatsioonile/sideteenused/raadioseadmed/wifi-seade
# EE: https://ttja.ee/eraklient/side-ja-meediateenused/raadioside/wifi-seadmete-kasutus
# EE: https://www.riigiteataja.ee/akt/117052024018?leiaKehtiv (Lisa 6)
# EE: https://www.itu.int/ITU-D/study_groups/SGP_1998-2002/JGRES09/pdf/estonia.pdf
country EE: DFS-ETSI
(863 - 868 @ 1), (25 mW)
(915.8 - 919.4 @ 1), (25 mW)
(2400 - 2483.5 @ 40), (100 mW)
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
(5250 - 5350 @ 80), (100 mW), NO-OUTDOOR, DFS, AUTO-BW, wmmrule=ETSI
(5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
(5470 - 5725 @ 160), (500 mW), DFS, AUTO-BW, wmmrule=ETSI
# short range devices (ETSI EN 300 440-1)
(5725 - 5875 @ 80), (25 mW)
(5725 - 5875 @ 80), (25 mW), AUTO-BW
# 6 GHz band
(5945 - 6425 @ 320), (23), NO-OUTDOOR, wmmrule=ETSI
(5945 - 6425 @ 320), (200 mW), NO-OUTDOOR, wmmrule=ETSI
# 60 GHz band channels 1-4 (ETSI EN 302 567)
(57000 - 66000 @ 2160), (40)
(57000 - 71000 @ 8640), (40)
# https://www.tra.gov.eg/wp-content/uploads/2022/03/EGY-NTRA-March-2022-SRD_English_Final.pdf
# https://www.tra.gov.eg/wp-content/uploads/2024/11/EGY-NTRA-November-2024-SRD_English-1.pdf
country EG: DFS-ETSI
(2402 - 2483.5 @ 40), (20)
(5150 - 5250 @ 80), (23), AUTO-BW, wmmrule=ETSI
(5250 - 5350 @ 80), (20), DFS, AUTO-BW, wmmrule=ETSI
(57000 - 66000 @ 2160), (40)
(2402 - 2483.5 @ 40), (100 mW), NO-OUTDOOR
(5150 - 5250 @ 80), (200 mW), AUTO-BW, NO-OUTDOOR, wmmrule=ETSI
(5250 - 5350 @ 80), (100 mW), DFS, AUTO-BW, NO-OUTDOOR, wmmrule=ETSI
(5925 - 6425 @ 320), (250 mW), NO-OUTDOOR
(57000 - 66000 @ 2160), (40), NO-OUTDOOR
# ES as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
@@ -714,6 +757,13 @@ country FM: DFS-FCC
(5490 - 5730 @ 160), (24), DFS
(5735 - 5835 @ 80), (30)
country FO: DFS-ETSI
(2400 - 2483.5 @ 40), (100 mW)
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW
(5250 - 5350 @ 80), (100 mW), DFS, NO-OUTDOOR, AUTO-BW
(5470 - 5725 @ 160), (500 mW), DFS
(5945 - 6425 @ 320), (23), NO-OUTDOOR
# FR as part of EU/CEPT accepted decisions 2005/513/EC (5GHz RLAN, EN 301 893)
# and 2006/771/EC (amended by 2008/432/EC, Short-Range Devices, EN 300 440)
# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
@@ -748,7 +798,7 @@ country GB: DFS-ETSI
(5470 - 5730 @ 160), (500 mW), DFS, wmmrule=ETSI
# short range devices (ETSI EN 300 440-1)
(5725 - 5850 @ 80), (200 mW), NO-OUTDOOR
(5925 - 6425 @ 160), (250 mW), NO-OUTDOOR, wmmrule=ETSI
(5925 - 6425 @ 320), (250 mW), NO-OUTDOOR, wmmrule=ETSI
# 60 GHz band channels 1-6
(57000 - 71000 @ 2160), (40)
@@ -759,10 +809,15 @@ country GD: DFS-FCC
(5490 - 5730 @ 160), (24), DFS
(5735 - 5835 @ 80), (30)
# Source:
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
# https://docdb.cept.org/implementation/16737
# https://docdb.cept.org/download/4685
country GE: DFS-ETSI
(2402 - 2482 @ 40), (20)
(5170 - 5250 @ 80), (18), AUTO-BW
(5250 - 5330 @ 80), (18), DFS, AUTO-BW
(5945 - 6425 @ 320), (23), NO-OUTDOOR
# 60 GHz band channels 1-4, ref: Etsi En 302 567
(57000 - 66000 @ 2160), (40)
@@ -779,6 +834,13 @@ country GH: DFS-FCC
(5490 - 5730 @ 160), (24), DFS
(5735 - 5835 @ 80), (30)
country GI: DFS-ETSI
(2400 - 2483.5 @ 40), (100 mW)
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW
(5250 - 5350 @ 80), (100 mW), DFS, NO-OUTDOOR, AUTO-BW
(5470 - 5725 @ 160), (500 mW), DFS
(5945 - 6425 @ 320), (23), NO-OUTDOOR
country GL: DFS-ETSI
(2402 - 2482 @ 40), (20)
(5170 - 5250 @ 80), (20), AUTO-BW, wmmrule=ETSI
@@ -847,7 +909,7 @@ country HK: DFS-ETSI
(5250 - 5350 @ 80), (23), DFS, AUTO-BW, NO-OUTDOOR
(5470 - 5730 @ 160), (27), DFS
(5730 - 5850 @ 80), (36)
(5925 - 6425 @ 160), (14)
(5945 - 6425 @ 160), (24), NO-OUTDOOR
# Source:
# https://www.conatel.gob.hn/doc/Regulacion/resoluciones/2023/NR05-23.pdf
@@ -954,6 +1016,13 @@ country IL: DFS-ETSI
(5725 - 5875 @ 80), (25 mW), AUTO-BW
(5945 - 6425 @ 320), (200 mW), NO-OUTDOOR
country IM: DFS-ETSI
(2400 - 2483.5 @ 40), (100 mW)
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW
(5250 - 5350 @ 80), (100 mW), DFS, NO-OUTDOOR, AUTO-BW
(5470 - 5725 @ 160), (500 mW), DFS
(5945 - 6425 @ 320), (23), NO-OUTDOOR
# Source:
# https://dot.gov.in/spectrummanagement/delicensing-24-24835-ghz-band-gsr-45-e-5150-5350-ghz-gsr-46-e-and-5725-5875-ghz
# https://dot.gov.in/spectrummanagement/license-exemption-5-ghz-gsr-1048e-dated-22102018
@@ -963,6 +1032,7 @@ country IN:
(5250 - 5350 @ 80), (24), DFS
(5470 - 5725 @ 160), (24), DFS
(5725 - 5875 @ 80), (30)
(5925 - 6425 @ 320), (24), NO-OUTDOOR
# Source:
# https://asnad.cra.ir/fa/Public/Documents/Details/73af8590-f065-eb11-968f-0050569b0899
@@ -978,7 +1048,9 @@ country IR: DFS-ETSI
# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf
# IS: https://www.pfs.is/library/Skrar/Tidnir-og-taekni/MHZ_21022019.pdf
# CEPT ECC Decision (20)01 for 6GHz: https://docdb.cept.org/download/1448
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
# https://docdb.cept.org/implementation/16737
# https://docdb.cept.org/download/4685
country IS: DFS-ETSI
(2400 - 2483.5 @ 40), (100 mW)
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
@@ -1089,8 +1161,9 @@ country KR: DFS-JP
(5250 - 5350 @ 80), (20), DFS, AUTO-BW
(5470 - 5725 @ 160), (20), DFS
(5725 - 5850 @ 80), (23)
# 6 GHz band
(5925 - 7125 @ 160), (15), NO-OUTDOOR
# 6 GHz band - per MSIT Notice 2026-10
(5925 - 6425 @ 320), (18), NO-OUTDOOR, AUTO-BW
(6425 - 7125 @ 320), (15), NO-OUTDOOR, AUTO-BW
# 60 GHz band channels 1-4
(57000 - 66000 @ 2160), (43)
@@ -1117,11 +1190,12 @@ country KY: DFS-FCC
# http://adilet.zan.kz/rus/docs/V1500010730
# http://adilet.zan.kz/rus/docs/V1500010375
country KZ: DFS-ETSI
(2400 - 2483.5 @ 40), (20)
(5150 - 5250 @ 80), (23), NO-OUTDOOR, AUTO-BW
(2400 - 2483.5 @ 40), (100 mW)
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW
(5250 - 5350 @ 80), (20), NO-OUTDOOR, DFS, AUTO-BW
(5470 - 5725 @ 160), (20), NO-OUTDOOR, DFS
(5725 - 5850 @ 80), (20), NO-OUTDOOR
(5470 - 5725 @ 160), (100 mW), NO-OUTDOOR, DFS
(5725 - 5850 @ 80), (100 mW), NO-OUTDOOR
(5925 - 6425 @ 320), (200 mW), NO-OUTDOOR
(57000 - 66000 @ 2160), (40)
country LB: DFS-FCC
@@ -1149,8 +1223,10 @@ country LC: DFS-ETSI
# LI: https://www.ofcomnet.ch/api/rir/1010/04
# LI: https://www.ofcomnet.ch/api/rir/1008/12
# LI: https://www.ofcomnet.ch/#/fatTable
# CEPT ECC Decision (20)01 for 6GHz: https://docdb.cept.org/download/1448
# LI: https://www.ofcomnet.ch/api/rir/1010/11
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
# https://docdb.cept.org/implementation/16737
# https://docdb.cept.org/download/4685
country LI: DFS-ETSI
(2400 - 2483.5 @ 40), (100 mW)
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
@@ -1248,6 +1324,9 @@ country MA: DFS-ETSI
# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
# https://docdb.cept.org/implementation/16737
# https://docdb.cept.org/download/4685
country MC: DFS-ETSI
(2400 - 2483.5 @ 40), (100 mW)
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
@@ -1255,6 +1334,7 @@ country MC: DFS-ETSI
(5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
# short range devices (ETSI EN 300 440-1)
(5725 - 5875 @ 80), (25 mW)
(5945 - 6425 @ 320), (23), NO-OUTDOOR
# Source:
# http://www.cnfr.md/index.php?pag=sec&id=117&l=en
@@ -1264,6 +1344,9 @@ country MC: DFS-ETSI
# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf
# https://www.legis.md/cautare/downloadpdf/134846
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
# https://docdb.cept.org/implementation/16737
# https://docdb.cept.org/download/4685
country MD: DFS-ETSI
(2400 - 2483.5 @ 40), (100 mW)
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
@@ -1280,6 +1363,9 @@ country MD: DFS-ETSI
# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
# https://docdb.cept.org/implementation/16737
# https://docdb.cept.org/download/4685
country ME: DFS-ETSI
(2400 - 2483.5 @ 40), (100 mW)
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
@@ -1287,6 +1373,7 @@ country ME: DFS-ETSI
(5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
# short range devices (ETSI EN 300 440-1)
(5725 - 5875 @ 80), (25 mW)
(5945 - 6425 @ 320), (23), NO-OUTDOOR
country MF: DFS-ETSI
(2402 - 2482 @ 40), (20)
@@ -1306,6 +1393,9 @@ country MH: DFS-FCC
# EU decision 2005/513/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02005D0513-20070213
# EU decision 2006/771/EC: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02008D0432-20080611
# Harmonized CEPT countries (July 2019): https://www.ecodocdb.dk/download/25c41779-cd6e/Rec7003e.pdf
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
# https://docdb.cept.org/implementation/16737
# https://docdb.cept.org/download/4685
country MK: DFS-ETSI
(2400 - 2483.5 @ 40), (100 mW)
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
@@ -1313,6 +1403,7 @@ country MK: DFS-ETSI
(5470 - 5725 @ 160), (500 mW), DFS, wmmrule=ETSI
# short range devices (ETSI EN 300 440-1)
(5725 - 5875 @ 80), (25 mW)
(5945 - 6425 @ 320), (23), NO-OUTDOOR
# 60 GHz band channels 1-4, ref: Etsi En 302 567
(57000 - 66000 @ 2160), (40)
@@ -1413,14 +1504,16 @@ country MX: DFS-FCC
(5925 - 6425 @ 320), (12), NO-OUTDOOR
# Source:
# https://www.mcmc.gov.my/skmmgovmy/media/General/CA-No-1-of-2022_-signed_19012022.pdf
# https://www.mcmc.gov.my/skmmgovmy/media/General/pdf2/Class-Assignment-No-2-of-2025.pdf
country MY: DFS-FCC
(2402 - 2482 @ 40), (500 mW)
(5170 - 5250 @ 80), (1000 mW), AUTO-BW
(5250 - 5330 @ 80), (1000 mW), DFS, AUTO-BW
(5490 - 5650 @ 160), (1000 mW), DFS
(5735 - 5835 @ 80), (1000 mW)
(5925 - 6425 @ 320), (200 mW), NO-OUTDOOR
(2400 - 2500 @ 40), (500 mW)
(5150 - 5250 @ 80), (1000 mW), AUTO-BW, NO-OUTDOOR
# 5250 - 5350 MHz regulatory limit is 1000 mW, but 200 mW reaches the PSD limit of 10 mW / MHz at 20 MHz channel width
(5250 - 5350 @ 80), (200 mW), DFS, AUTO-BW, NO-OUTDOOR
# 5470 - 5650 MHz regulatory limit is 1000 mW, but 200 mW reaches the PSD limit of 10 mW / MHz at 20 MHz channel width
(5470 - 5650 @ 160), (200 mW), DFS
(5725 - 5875 @ 80), (1000 mW)
(5925 - 6425 @ 320), (250 mW), NO-OUTDOOR
# Source:
# https://www.cran.na/yglilidy/2023/04/GG-8060-dated-3-April-2023.pdf
@@ -1476,6 +1569,9 @@ country NL: DFS-ETSI
# NO: https://eng.nkom.no/technical/temporary-licenses/mobile-videolink/wireless-cameras-mobile-video-links/_attachment/9947
# NO: http://www.lovdata.no/dokument/SF/forskrift/2012-01-19-77
# In addition to EU NO can use 57255795 MHz and 58155850 bands with limit of 4 W EIRP (with DFS and TPC)
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
# https://docdb.cept.org/implementation/16737
# https://docdb.cept.org/download/4685
country NO: DFS-ETSI
(2400 - 2483.5 @ 40), (100 mW)
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
@@ -1633,12 +1729,15 @@ country PW: DFS-FCC
(5490 - 5730 @ 160), (24), DFS
(5735 - 5835 @ 80), (30)
# Source:
# https://www.conatel.gov.py/conatel/wp-content/uploads/2025/05/2025-rd-1035-sistema-acceso-inalambrico-baja-potencia-6ghz-norma-tecnica.pdf
country PY: DFS-FCC
(2402 - 2482 @ 40), (20)
(5170 - 5250 @ 80), (24), AUTO-BW
(5250 - 5330 @ 80), (24), DFS, AUTO-BW
(5490 - 5730 @ 160), (24), DFS
(5735 - 5835 @ 80), (30)
(5925 - 6425 @ 320), (12), NO-OUTDOOR
# Source:
# https://www.cra.gov.qa/-/media/System/D/2/5/8/D258CF18B83A5613B0D590193CB799CB/Class-License-WIFI-6E-Final-English-032022--V3.ashx
@@ -1699,8 +1798,8 @@ country RS: DFS-ETSI
country RU:
(2400 - 2483.5 @ 40), (100mW)
(5150 - 5350 @ 160), (100 mW), NO-OUTDOOR
(5650 - 5850 @ 160), (100 mW), NO-OUTDOOR
(5925 - 6425 @ 160), (100 mW), NO-OUTDOOR
(5650 - 5850 @ 160), (200 mW), NO-OUTDOOR
(5925 - 6425 @ 320), (200 mW), NO-OUTDOOR
# 60 GHz band channels 1-4, ref: Changes to NLA 124_Order №129_22042015.pdf
(57000 - 66000 @ 2160), (40), NO-OUTDOOR
@@ -1804,6 +1903,13 @@ country SK: DFS-ETSI
# 60 GHz band channels 1-4 (ETSI EN 302 567)
(57000 - 66000 @ 2160), (40)
country SM: DFS-ETSI
(2400 - 2483.5 @ 40), (100 mW)
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW
(5250 - 5350 @ 80), (100 mW), DFS, NO-OUTDOOR, AUTO-BW
(5470 - 5725 @ 160), (500 mW), DFS
(5945 - 6425 @ 320), (23), NO-OUTDOOR
# Source:
# Regulation N° 2004-005 ART/DG/DRC/D.Rég
country SN: DFS-FCC
@@ -1828,6 +1934,15 @@ country SV: DFS-FCC
(5735 - 5835 @ 20), (30)
(5925 - 7125 @ 320), (12), NO-OUTDOOR
# Source:
# https://btp.sx/dash/files/Telecommunications/Technical-Requirements/10t98466434723___TGVnYWwgYW5kIGlsbGVnYWwgd2lyZWxlc3MgY29tbXVuaWNhdGlvbiBkZXZpY2Vzb_64.pdf
country SX: DFS-ETSI
(2400 - 2483.5 @ 40), (100 mW)
(5150 - 5250 @ 80), (50 mW), AUTO-BW
(5250 - 5350 @ 80), (21), DFS, AUTO-BW
(5470 - 5725 @ 160), (250 mW), DFS
(5725 - 5875 @ 80), (24), DFS
# Source:
# https://sytpra.gov.sy/public/uploads/files/%D8%A7%D9%84%D8%A7%D8%B7%D8%A7%D8%B1%20%D8%A7%D9%84%D9%82%D8%A7%D9%86%D9%88%D9%86%D9%8A/%D9%84%D9%88%D8%A7%D8%A6%D8%AD%20%D8%AA%D9%86%D8%B8%D9%8A%D9%85%D9%8A%D8%A9/%D9%84%D9%88%D8%A7%D8%A6%D8%AD%20%D8%A7%D9%84%D8%B7%D9%8A%D9%81%20%D8%A7%D9%84%D8%AA%D8%B1%D8%AF%D8%AF%D9%8A%20%D8%A7%D9%84%D8%B1%D8%A7%D8%AF%D9%8A%D9%88%D9%8A/L1.pdf
country SY: DFS-ETSI
@@ -1875,14 +1990,20 @@ country TH: DFS-FCC
(5735 - 5835 @ 80), (30)
(5925 - 6425 @ 320), (250 mW), NO-OUTDOOR
# Source:
# https://www.anf.tn/sites/default/files/2025-01/Arr%C3%AAt%C3%A92024_4611.pdf
country TN: DFS-ETSI
(2402 - 2482 @ 40), (20)
(5170 - 5250 @ 80), (20), AUTO-BW
(5250 - 5330 @ 80), (20), DFS, AUTO-BW
(5925 - 6425 @ 320), (200 mW), NO-OUTDOOR
# Source:
# Technical Criteria for Radio Devices and Systems Excluded from Frequency Allocation, Sept 9, 2022
# https://www.btk.gov.tr/uploads/pages/ftm-teknik-olcutler-ek-5.pdf
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
# https://docdb.cept.org/implementation/16737
# https://docdb.cept.org/download/4685
country TR: DFS-ETSI
(2400 - 2483.5 @ 40), (20)
(5150 - 5250 @ 80), (23), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
@@ -1939,14 +2060,18 @@ country TZ: DFS-ETSI
# 2.4 GHz band channels can be used outdoors when some requirements are met.
# 5 GHz band channels must be used only indoors in some cases. They are neither
# permitted nor denied outdoors in others.
# Harmonized CEPT countries for 6 GHz (ECC Decision (20)01)
# https://docdb.cept.org/implementation/16737
# https://docdb.cept.org/download/4685
country UA: DFS-ETSI
(2400 - 2483.5 @ 40), (100 mW), NO-OUTDOOR
(5150 - 5250 @ 80), (100 mW), NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
(5250 - 5350 @ 80), (100 mW), DFS, NO-OUTDOOR, AUTO-BW, wmmrule=ETSI
(5470 - 5725 @ 160), (100 mW), DFS, NO-OUTDOOR, wmmrule=ETSI
(5725 - 5850 @ 80), (100 mW), NO-OUTDOOR
(5945 - 6425 @ 320), (23), NO-OUTDOOR
# 60 GHz band channels 1-4, ref: Etsi En 302 567
(57000 - 66000 @ 2160), (40 mW), NO-OUTDOOR
(57000 - 66000 @ 2160), (40), NO-OUTDOOR
country UG: DFS-FCC
(2402 - 2482 @ 40), (20)
@@ -1977,14 +2102,10 @@ country US: DFS-FCC
# requirements, we can extend the range by 5 MHz to make the kernel
# happy and be able to use channel 144.
(5470 - 5730 @ 160), (24), DFS
# This range ends at 5850 MHz, but channel 169 extends to 5855 MHz.
# Since 5850 ~ 5855 MHz belongs to the next range which has looser
# requirements, we extend the range by 5 MHz to make the driver
# happy and be able to use channel 169.
(5730 - 5855 @ 80), (27), AUTO-BW
(5730 - 5850 @ 80), (30), AUTO-BW
# https://www.federalregister.gov/documents/2021/05/03/2021-08802/use-of-the-5850-5925-ghz-band
# max. 33 dBm AP @ 20MHz, 36 dBm AP @ 40Mhz+, 6 dB less for clients
(5855 - 5895 @ 40), (27), NO-OUTDOOR, AUTO-BW, NO-IR
(5850 - 5895 @ 40), (27), NO-OUTDOOR, AUTO-BW, NO-IR
# 6g band
# https://www.federalregister.gov/documents/2020/05/26/2020-11236/unlicensed-use-of-the-6ghz-band
(5925 - 7125 @ 320), (12), NO-OUTDOOR, NO-IR
@@ -2006,6 +2127,13 @@ country UZ: DFS-ETSI
(5170 - 5250 @ 80), (20), AUTO-BW
(5250 - 5330 @ 80), (20), DFS, AUTO-BW
country VA: DFS-ETSI
(2400 - 2483.5 @ 40), (100 mW)
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW
(5250 - 5350 @ 80), (100 mW), DFS, NO-OUTDOOR, AUTO-BW
(5470 - 5725 @ 160), (500 mW), DFS
(5945 - 6425 @ 320), (23), NO-OUTDOOR
# Source:
# http://www.ntrc.vc/regulations/Jun_2006_Spectrum_Managment_Regulations.pdf
country VC: DFS-ETSI
@@ -2031,12 +2159,17 @@ country VI: DFS-FCC
(5490 - 5730 @ 160), (24), DFS
(5735 - 5835 @ 80), (30)
# Source:
# https://datafiles.chinhphu.vn/cpp/files/vbpq/2021/10/08-btttt.signed.pdf
# https://mic.gov.vn/van-ban-phap-luat/25099.htm
country VN: DFS-FCC
(2402 - 2482 @ 40), (20)
(5170 - 5250 @ 80), (17)
(5250 - 5330 @ 80), (24), DFS
(5490 - 5730 @ 80), (24), DFS
(5735 - 5835 @ 80), (30)
(2400 - 2483.5 @ 40), (200 mW)
(5150 - 5250 @ 80), (200 mW), NO-OUTDOOR, AUTO-BW
(5250 - 5350 @ 80), (100 mW), DFS, AUTO-BW
(5470 - 5725 @ 160), (500 mW), DFS, AUTO-BW
(5725 - 5850 @ 80), (1000 mW), AUTO-BW
(5925 - 6425 @ 320), (200 mW), NO-OUTDOOR, AUTO-BW
(57000 - 66000 @ 2160), (10000 mW), NO-OUTDOOR
# Source:
# http://www.trr.vu/attachments/category/130/GURL_for_Short-range_Radiocommunication_Devices2.pdf
@@ -2074,7 +2207,7 @@ country ZA: DFS-ETSI
(5170 - 5250 @ 80), (20), AUTO-BW
(5250 - 5330 @ 80), (20), DFS, AUTO-BW
(5490 - 5710 @ 160), (30)
(5925 - 6425 @ 320), (14)
(5925 - 6425 @ 320), (23), NO-OUTDOOR
country ZW: DFS-ETSI
(2402 - 2482 @ 40), (20)

View File

@@ -1,15 +1,18 @@
#!/usr/bin/env python
# SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
# SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Apache-2.0
import os
from typing import List
from datetime import datetime
from typing import TextIO
from reg_parse import DBParser
from reg_parse import Regdomain
# Not a valid ISO 3166-1 alpha-2 code; marks end of regdomain_table for linear scans (matches wifi_regdomain_t.cn[2]).
REGDOMAIN_TABLE_SENTINEL_CC = '##'
def write_regulatory_rules(cfile: TextIO, perms: List, filter_5g: bool = False) -> None:
def write_regulatory_rules(cfile: TextIO, perms: list, filter_5g: bool = False) -> None:
"""Helper function to write regulatory rules to the C file."""
filtered_perms = [perm for perm in perms if not filter_5g or (perm.freqband.start >= 1 and perm.freqband.end <= 14)]
rule_count = len(filtered_perms)
@@ -39,7 +42,7 @@ def write_regulatory_rules(cfile: TextIO, perms: List, filter_5g: bool = False)
def write_regulatory_data(
cfile: TextIO, reg: Regdomain, type_list: List[str], perm_list: List[List], filter_5g: bool
cfile: TextIO, reg: Regdomain, type_list: list[str], perm_list: list[list], filter_5g: bool
) -> None:
"""Helper function to write regulatory data."""
cfile.write('typedef enum {\n')
@@ -48,18 +51,29 @@ def write_regulatory_data(
cfile.write(' ESP_WIFI_REGULATORY_TYPE_MAX,\n')
cfile.write('} esp_wifi_regulatory_type_t;\n\n')
cfile.write('const wifi_regdomain_t regdomain_table[WIFI_MAX_SUPPORT_COUNTRY_NUM] = {\n')
country_map = reg.regdomain_countries if filter_5g else reg.regdomain_countries_2g
cfile.write(
'/*\n'
' * regdomain_table: ISO alpha-2 country codes and their regulatory profile indices.\n'
' * Last row is a sentinel (not a real country code).\n'
' */\n'
)
cfile.write('const wifi_regdomain_t regdomain_table[] = {\n')
for cc, reg_type_index in country_map.items():
reg_type = f'ESP_WIFI_REGULATORY_TYPE_{type_list[reg_type_index]}'
cfile.write(f' {{"{cc.decode("utf-8")}", {reg_type}}},\n')
cfile.write(
' {"' + REGDOMAIN_TABLE_SENTINEL_CC + '", ESP_WIFI_REGULATORY_TYPE_MAX}, '
'/* Sentinel: end of table; not a real country code — '
'do not use as wifi_country_t.cc. */\n'
)
cfile.write('};\n\n')
cfile.write('const wifi_regulatory_t regulatory_data[] = {\n')
for perms in perm_list:
index = perm_list.index(perms)
for index, perms in enumerate(perm_list):
regulatory_type = f'ESP_WIFI_REGULATORY_TYPE_{type_list[index]}'
cfile.write(f' /* {regulatory_type} */\n')
write_regulatory_rules(cfile, perms, not filter_5g)
@@ -75,14 +89,34 @@ def main() -> None:
directory = os.path.dirname(os.path.abspath(__file__))
file_path = os.path.join(directory, filename)
try:
with open(file_path, 'r', encoding='utf-8') as file:
with open(file_path, encoding='utf-8') as file:
regdomains = p.parse(file)
# Get the modification time of the source file to determine copyright year
mtime = os.path.getmtime(file_path)
copyright_year = datetime.fromtimestamp(mtime).year
except FileNotFoundError:
raise Exception(f'File {file_path} not found')
reg.simplify_countries(regdomains)
reg.simplify_countries_2g(regdomains)
total_countries = len(regdomains)
country_rules_count = {}
for country_code, country in regdomains.items():
country_str = country_code.decode('utf-8')
rules_count = len(country.permissions)
country_rules_count[country_str] = rules_count
max_rules_country = max(country_rules_count.items(), key=lambda x: x[1])
max_rules_count = max_rules_country[1]
max_rules_countries = [cc for cc, count in country_rules_count.items() if count == max_rules_count]
print('\n=== Regulatory Statistics ===')
print(f'Total supported countries: {total_countries}')
print(f'Country(ies) with most rules: {", ".join(max_rules_countries)}')
print(f'Maximum number of rules: {max_rules_count}')
print('=' * 30 + '\n')
type_list = list(reg.typical_regulatory.keys())
perm_list = list(reg.typical_regulatory.values())
@@ -93,7 +127,7 @@ def main() -> None:
with open(output_file, 'w') as cfile:
cfile.write('/*\n')
cfile.write(' * SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD\n')
cfile.write(f' * SPDX-FileCopyrightText: 2025-{copyright_year} Espressif Systems (Shanghai) CO LTD\n')
cfile.write(' *\n')
cfile.write(' * SPDX-License-Identifier: Apache-2.0\n')
cfile.write(' */\n\n')

View File

@@ -3,7 +3,7 @@
# SPDX-FileCopyrightText: 2008 Johannes Berg <johannes@sipsolutions.net>
# SPDX-FileCopyrightText: 2008 Michael Green <Michael.Green@Atheros.com>
#
# SPDX-FileContributor: 2025 Espressif Systems (Shanghai) CO LTD
# SPDX-FileContributor: 2025-2026 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Apache-2.0
#
# Copyright (c) 2008, Luis R. Rodriguez <mcgrof@gmail.com>
@@ -707,9 +707,25 @@ class DBParser:
class Regdomain:
def __init__(self) -> None:
self.regdomain_countries: dict[bytes, int] = {}
self.typical_regulatory: dict[str, list] = {}
self.typical_regulatory: dict[str, tuple[Permission, ...]] = {}
self.regdomain_countries_2g: dict[bytes, int] = {}
self.typical_regulatory_2g: dict[str, list] = {}
self.typical_regulatory_2g: dict[str, tuple[Permission, ...]] = {}
@staticmethod
def _permission_cmp_key(permission: Permission) -> tuple[int, int, int, int, int]:
"""Return reduced fields aligned with generated C rule granularity."""
max_eirp = int(permission.power.max_eirp) if permission.power else 0
return (
int(permission.freqband.start),
int(permission.freqband.end),
int(permission.freqband.maxbw),
max_eirp,
permission.dfs,
)
def _permissions_cmp_key(self, permissions: tuple[Permission, ...]) -> tuple[tuple[int, int, int, int, int], ...]:
"""Build a reduced comparison key from a country's permission set."""
return tuple(self._permission_cmp_key(permission) for permission in permissions)
def build_typical_regdomains(self, countries: dict[bytes, Country]) -> None:
"""Populate typical regulatory domains based on country permissions."""
@@ -731,26 +747,32 @@ class Regdomain:
"""Simplify country permissions by building typical regdomains."""
self.build_typical_regdomains(countries)
perm_list = list(self.typical_regulatory.values())
perm_key_to_index = {self._permissions_cmp_key(permissions): idx for idx, permissions in enumerate(perm_list)}
for cn, country in countries.items():
cn_str = cn.decode('utf-8')
permissions = country.permissions
if permissions not in perm_list:
permissions_key = self._permissions_cmp_key(permissions)
if permissions_key not in perm_key_to_index:
self.typical_regulatory[cn_str] = permissions
perm_list.append(permissions)
self.regdomain_countries[cn] = perm_list.index(permissions)
perm_key_to_index[permissions_key] = len(perm_list) - 1
self.regdomain_countries[cn] = perm_key_to_index[permissions_key]
def simplify_countries_2g(self, countries: dict[bytes, Country]) -> None:
"""Simplify country permissions by building typical regdomains."""
self.build_typical_regdomains_2g(countries)
perm_list = list(self.typical_regulatory_2g.values())
perm_key_to_index = {self._permissions_cmp_key(permissions): idx for idx, permissions in enumerate(perm_list)}
for cn, country in countries.items():
cn_str = cn.decode('utf-8')
permissions = country.permissions_2g
permissions_key = self._permissions_cmp_key(permissions)
if permissions not in perm_list:
if permissions_key not in perm_key_to_index:
self.typical_regulatory_2g[cn_str] = permissions
perm_list.append(permissions)
self.regdomain_countries_2g[cn] = perm_list.index(permissions)
perm_key_to_index[permissions_key] = len(perm_list) - 1
self.regdomain_countries_2g[cn] = perm_key_to_index[permissions_key]

View File

@@ -1489,7 +1489,6 @@ typedef struct {
bool dcm; /**< Using dcm rate to send frame */
} wifi_tx_rate_config_t;
#define WIFI_MAX_SUPPORT_COUNTRY_NUM 176 /**< max number of supported countries */
#ifdef CONFIG_SLAVE_SOC_WIFI_SUPPORT_5G
#define WIFI_MAX_REGULATORY_RULE_NUM 7 /**< max number of regulatory rules */
#else