Morse Micro IoT SDK  2.6.4-esp32
mmwlan_regdb.def
1/*
2 *
3 * Copyright 2022-2023 Morse Micro
4 */
30#include "mmwlan.h"
31
33static const struct mmwlan_s1g_channel s1g_channels_AU[] = {
34 /* Ctr Freq (Hz), Duty Cycle (%/100), Omit Control Response, Global Op Class, S1G Op Class, S1G Chan #, Op BW, Max Tx EIRP (dBm), Min Packet Spacing Window (microsec), airtime_min (microsec), airtime_max (microsec) */
35 { 915500000, 10000, false, 68, 22, 27, 1, 30, 0, 0, 0 },
36 { 916500000, 10000, false, 68, 22, 29, 1, 30, 0, 0, 0 },
37 { 917500000, 10000, false, 68, 22, 31, 1, 30, 0, 0, 0 },
38 { 918500000, 10000, false, 68, 22, 33, 1, 30, 0, 0, 0 },
39 { 919500000, 10000, false, 68, 22, 35, 1, 30, 0, 0, 0 },
40 { 920500000, 10000, false, 68, 22, 37, 1, 30, 0, 0, 0 },
41 { 921500000, 10000, false, 68, 22, 39, 1, 30, 0, 0, 0 },
42 { 922500000, 10000, false, 68, 22, 41, 1, 30, 0, 0, 0 },
43 { 923500000, 10000, false, 68, 22, 43, 1, 30, 0, 0, 0 },
44 { 924500000, 10000, false, 68, 22, 45, 1, 30, 0, 0, 0 },
45 { 925500000, 10000, false, 68, 22, 47, 1, 30, 0, 0, 0 },
46 { 926500000, 10000, false, 68, 22, 49, 1, 30, 0, 0, 0 },
47 { 927500000, 10000, false, 68, 22, 51, 1, 30, 0, 0, 0 },
48 { 917000000, 10000, false, 69, 23, 30, 2, 30, 0, 0, 0 },
49 { 919000000, 10000, false, 69, 23, 34, 2, 30, 0, 0, 0 },
50 { 921000000, 10000, false, 69, 23, 38, 2, 30, 0, 0, 0 },
51 { 923000000, 10000, false, 69, 23, 42, 2, 30, 0, 0, 0 },
52 { 925000000, 10000, false, 69, 23, 46, 2, 30, 0, 0, 0 },
53 { 927000000, 10000, false, 69, 23, 50, 2, 30, 0, 0, 0 },
54 { 918000000, 10000, false, 70, 24, 32, 4, 30, 0, 0, 0 },
55 { 922000000, 10000, false, 70, 24, 40, 4, 30, 0, 0, 0 },
56 { 926000000, 10000, false, 70, 24, 48, 4, 30, 0, 0, 0 },
57 { 924000000, 10000, false, 71, 25, 44, 8, 30, 0, 0, 0 },
58};
59
62 .country_code = "AU",
63 .num_channels = (sizeof(s1g_channels_AU)/sizeof(s1g_channels_AU[0])),
65};
66
68static const struct mmwlan_s1g_channel s1g_channels_EU[] = {
69 /* Ctr Freq (Hz), Duty Cycle (%/100), Omit Control Response, Global Op Class, S1G Op Class, S1G Chan #, Op BW, Max Tx EIRP (dBm), Min Packet Spacing Window (microsec), airtime_min (microsec), airtime_max (microsec) */
70 { 863500000, 280, false, 66, 6, 1, 1, 16, 0, 0, 0 },
71 { 864500000, 280, false, 66, 6, 3, 1, 16, 0, 0, 0 },
72 { 865500000, 280, false, 66, 6, 5, 1, 16, 0, 0, 0 },
73 { 866500000, 280, false, 66, 6, 7, 1, 16, 0, 0, 0 },
74 { 867500000, 280, false, 66, 6, 9, 1, 16, 0, 0, 0 },
75};
76
79 .country_code = "EU",
80 .num_channels = (sizeof(s1g_channels_EU)/sizeof(s1g_channels_EU[0])),
82};
83
85static const struct mmwlan_s1g_channel s1g_channels_IN[] = {
86 /* Ctr Freq (Hz), Duty Cycle (%/100), Omit Control Response, Global Op Class, S1G Op Class, S1G Chan #, Op BW, Max Tx EIRP (dBm), Min Packet Spacing Window (microsec), airtime_min (microsec), airtime_max (microsec) */
87 { 865500000, 280, false, 66, 6, 5, 1, 16, 0, 0, 0 },
88 { 866500000, 280, false, 66, 6, 7, 1, 16, 0, 0, 0 },
89 { 867500000, 280, false, 66, 6, 9, 1, 16, 0, 0, 0 },
90};
91
94 .country_code = "IN",
95 .num_channels = (sizeof(s1g_channels_IN)/sizeof(s1g_channels_IN[0])),
97};
98
100static const struct mmwlan_s1g_channel s1g_channels_JP[] = {
101 /* Ctr Freq (Hz), Duty Cycle (%/100), Omit Control Response, Global Op Class, S1G Op Class, S1G Chan #, Op BW, Max Tx EIRP (dBm), Min Packet Spacing Window (microsec), airtime_min (microsec), airtime_max (microsec) */
102 { 921000000, 1000, true, 73, 8, 9, 1, 16, 2000, 2000, 100000 },
103 { 923000000, 1000, true, 73, 8, 13, 1, 16, 2000, 2000, 100000 },
104 { 924000000, 1000, true, 73, 8, 15, 1, 16, 2000, 2000, 100000 },
105 { 925000000, 1000, true, 73, 8, 17, 1, 16, 2000, 2000, 100000 },
106 { 926000000, 1000, true, 73, 8, 19, 1, 16, 2000, 2000, 100000 },
107 { 927000000, 1000, true, 73, 8, 21, 1, 16, 2000, 2000, 100000 },
108 { 923500000, 1000, true, 64, 9, 2, 2, 16, 2000, 2000, 100000 },
109 { 924500000, 1000, true, 64, 10, 4, 2, 16, 2000, 2000, 100000 },
110 { 925500000, 1000, true, 64, 9, 6, 2, 16, 2000, 2000, 100000 },
111 { 926500000, 1000, true, 64, 10, 8, 2, 16, 2000, 2000, 100000 },
112 { 924500000, 1000, true, 65, 11, 36, 4, 16, 2000, 2000, 100000 },
113 { 925500000, 1000, true, 65, 12, 38, 4, 16, 2000, 2000, 100000 },
114};
115
118 .country_code = "JP",
119 .num_channels = (sizeof(s1g_channels_JP)/sizeof(s1g_channels_JP[0])),
121};
122
124static const struct mmwlan_s1g_channel s1g_channels_KR[] = {
125 /* Ctr Freq (Hz), Duty Cycle (%/100), Omit Control Response, Global Op Class, S1G Op Class, S1G Chan #, Op BW, Max Tx EIRP (dBm), Min Packet Spacing Window (microsec), airtime_min (microsec), airtime_max (microsec) */
126 { 918000000, 10000, false, 74, 14, 1, 1, 4, 50000, 0, 4000000 },
127 { 919000000, 10000, false, 74, 14, 3, 1, 4, 50000, 0, 4000000 },
128 { 920000000, 10000, false, 74, 14, 5, 1, 4, 50000, 0, 4000000 },
129 { 921000000, 10000, false, 74, 14, 7, 1, 4, 50000, 0, 4000000 },
130 { 922000000, 10000, false, 74, 14, 9, 1, 10, 50000, 0, 4000000 },
131 { 923000000, 10000, false, 74, 14, 11, 1, 10, 50000, 0, 4000000 },
132 { 918500000, 10000, false, 75, 15, 2, 2, 4, 50000, 0, 4000000 },
133 { 920500000, 10000, false, 75, 15, 6, 2, 4, 50000, 0, 4000000 },
134 { 922500000, 10000, false, 75, 15, 10, 2, 10, 50000, 0, 4000000 },
135 { 921500000, 10000, false, 76, 16, 8, 4, 4, 50000, 0, 4000000 },
136 { 926500000, 10000, false, 74, 14, 18, 1, 17, 264, 0, 220000 }, /* Warning: regulatory requirements may not be met */
137 { 927500000, 10000, false, 74, 14, 20, 1, 17, 264, 0, 220000 }, /* Warning: regulatory requirements may not be met */
138 { 928500000, 10000, false, 74, 14, 22, 1, 17, 264, 0, 220000 }, /* Warning: regulatory requirements may not be met */
139 { 929500000, 10000, false, 74, 14, 24, 1, 17, 264, 0, 220000 }, /* Warning: regulatory requirements may not be met */
140 { 927000000, 10000, false, 75, 15, 19, 2, 20, 264, 0, 220000 }, /* Warning: regulatory requirements may not be met */
141 { 929000000, 10000, false, 75, 15, 23, 2, 20, 264, 0, 220000 }, /* Warning: regulatory requirements may not be met */
142};
143
146 .country_code = "KR",
147 .num_channels = (sizeof(s1g_channels_KR)/sizeof(s1g_channels_KR[0])),
149};
150
152static const struct mmwlan_s1g_channel s1g_channels_NZ[] = {
153 /* Ctr Freq (Hz), Duty Cycle (%/100), Omit Control Response, Global Op Class, S1G Op Class, S1G Chan #, Op BW, Max Tx EIRP (dBm), Min Packet Spacing Window (microsec), airtime_min (microsec), airtime_max (microsec) */
154 { 915500000, 10000, false, 68, 26, 27, 1, 30, 0, 0, 0 },
155 { 916500000, 10000, false, 68, 26, 29, 1, 30, 0, 0, 0 },
156 { 917500000, 10000, false, 68, 26, 31, 1, 30, 0, 0, 0 },
157 { 918500000, 10000, false, 68, 26, 33, 1, 30, 0, 0, 0 },
158 { 919500000, 10000, false, 68, 26, 35, 1, 30, 0, 0, 0 },
159 { 920500000, 10000, false, 68, 26, 37, 1, 36, 0, 0, 0 },
160 { 921500000, 10000, false, 68, 26, 39, 1, 36, 0, 0, 0 },
161 { 922500000, 10000, false, 68, 26, 41, 1, 36, 0, 0, 0 },
162 { 923500000, 10000, false, 68, 26, 43, 1, 36, 0, 0, 0 },
163 { 924500000, 10000, false, 68, 26, 45, 1, 36, 0, 0, 0 },
164 { 925500000, 10000, false, 68, 26, 47, 1, 36, 0, 0, 0 },
165 { 926500000, 10000, false, 68, 26, 49, 1, 36, 0, 0, 0 },
166 { 927500000, 10000, false, 68, 26, 51, 1, 36, 0, 0, 0 },
167 { 917000000, 10000, false, 69, 27, 30, 2, 30, 0, 0, 0 },
168 { 919000000, 10000, false, 69, 27, 34, 2, 30, 0, 0, 0 },
169 { 921000000, 10000, false, 69, 27, 38, 2, 36, 0, 0, 0 },
170 { 923000000, 10000, false, 69, 27, 42, 2, 36, 0, 0, 0 },
171 { 925000000, 10000, false, 69, 27, 46, 2, 36, 0, 0, 0 },
172 { 927000000, 10000, false, 69, 27, 50, 2, 36, 0, 0, 0 },
173 { 918000000, 10000, false, 70, 28, 32, 4, 30, 0, 0, 0 },
174 { 922000000, 10000, false, 70, 28, 40, 4, 36, 0, 0, 0 },
175 { 926000000, 10000, false, 70, 28, 48, 4, 36, 0, 0, 0 },
176 { 924000000, 10000, false, 71, 29, 44, 8, 36, 0, 0, 0 },
177};
178
181 .country_code = "NZ",
182 .num_channels = (sizeof(s1g_channels_NZ)/sizeof(s1g_channels_NZ[0])),
184};
185
187static const struct mmwlan_s1g_channel s1g_channels_SG[] = {
188 /* Ctr Freq (Hz), Duty Cycle (%/100), Omit Control Response, Global Op Class, S1G Op Class, S1G Chan #, Op BW, Max Tx EIRP (dBm), Min Packet Spacing Window (microsec), airtime_min (microsec), airtime_max (microsec) */
189 { 866500000, 277, false, 66, 17, 7, 1, 29, 100000, 0, 1000000 },
190 { 867500000, 277, false, 66, 17, 9, 1, 29, 100000, 0, 1000000 },
191 { 868500000, 277, false, 66, 17, 11, 1, 29, 100000, 0, 1000000 },
192 { 868000000, 277, false, 67, 19, 10, 2, 29, 100000, 0, 1000000 },
193 { 920500000, 10000, false, 68, 18, 37, 1, 22, 0, 0, 0 },
194 { 921500000, 10000, false, 68, 18, 39, 1, 22, 0, 0, 0 },
195 { 922500000, 10000, false, 68, 18, 41, 1, 22, 0, 0, 0 },
196 { 923500000, 10000, false, 68, 18, 43, 1, 22, 0, 0, 0 },
197 { 924500000, 10000, false, 68, 18, 45, 1, 22, 0, 0, 0 },
198 { 921000000, 10000, false, 69, 20, 38, 2, 22, 0, 0, 0 },
199 { 923000000, 10000, false, 69, 20, 42, 2, 22, 0, 0, 0 },
200 { 922000000, 10000, false, 70, 21, 40, 4, 22, 0, 0, 0 },
201};
202
205 .country_code = "SG",
206 .num_channels = (sizeof(s1g_channels_SG)/sizeof(s1g_channels_SG[0])),
208};
209
211static const struct mmwlan_s1g_channel s1g_channels_US[] = {
212 /* Ctr Freq (Hz), Duty Cycle (%/100), Omit Control Response, Global Op Class, S1G Op Class, S1G Chan #, Op BW, Max Tx EIRP (dBm), Min Packet Spacing Window (microsec), airtime_min (microsec), airtime_max (microsec) */
213 { 902500000, 10000, false, 68, 1, 1, 1, 36, 0, 0, 0 }, /* Warning: regulatory requirements may not be met */
214 { 903500000, 10000, false, 68, 1, 3, 1, 36, 0, 0, 0 },
215 { 904500000, 10000, false, 68, 1, 5, 1, 36, 0, 0, 0 },
216 { 905500000, 10000, false, 68, 1, 7, 1, 36, 0, 0, 0 },
217 { 906500000, 10000, false, 68, 1, 9, 1, 36, 0, 0, 0 },
218 { 907500000, 10000, false, 68, 1, 11, 1, 36, 0, 0, 0 },
219 { 908500000, 10000, false, 68, 1, 13, 1, 36, 0, 0, 0 },
220 { 909500000, 10000, false, 68, 1, 15, 1, 36, 0, 0, 0 },
221 { 910500000, 10000, false, 68, 1, 17, 1, 36, 0, 0, 0 },
222 { 911500000, 10000, false, 68, 1, 19, 1, 36, 0, 0, 0 },
223 { 912500000, 10000, false, 68, 1, 21, 1, 36, 0, 0, 0 },
224 { 913500000, 10000, false, 68, 1, 23, 1, 36, 0, 0, 0 },
225 { 914500000, 10000, false, 68, 1, 25, 1, 36, 0, 0, 0 },
226 { 915500000, 10000, false, 68, 1, 27, 1, 36, 0, 0, 0 },
227 { 916500000, 10000, false, 68, 1, 29, 1, 36, 0, 0, 0 },
228 { 917500000, 10000, false, 68, 1, 31, 1, 36, 0, 0, 0 },
229 { 918500000, 10000, false, 68, 1, 33, 1, 36, 0, 0, 0 },
230 { 919500000, 10000, false, 68, 1, 35, 1, 36, 0, 0, 0 },
231 { 920500000, 10000, false, 68, 1, 37, 1, 36, 0, 0, 0 },
232 { 921500000, 10000, false, 68, 1, 39, 1, 36, 0, 0, 0 },
233 { 922500000, 10000, false, 68, 1, 41, 1, 36, 0, 0, 0 },
234 { 923500000, 10000, false, 68, 1, 43, 1, 36, 0, 0, 0 },
235 { 924500000, 10000, false, 68, 1, 45, 1, 36, 0, 0, 0 },
236 { 925500000, 10000, false, 68, 1, 47, 1, 36, 0, 0, 0 },
237 { 926500000, 10000, false, 68, 1, 49, 1, 36, 0, 0, 0 },
238 { 927500000, 10000, false, 68, 1, 51, 1, 36, 0, 0, 0 },
239 { 903000000, 10000, false, 69, 2, 2, 2, 36, 0, 0, 0 }, /* Warning: regulatory requirements may not be met */
240 { 905000000, 10000, false, 69, 2, 6, 2, 36, 0, 0, 0 },
241 { 907000000, 10000, false, 69, 2, 10, 2, 36, 0, 0, 0 },
242 { 909000000, 10000, false, 69, 2, 14, 2, 36, 0, 0, 0 },
243 { 911000000, 10000, false, 69, 2, 18, 2, 36, 0, 0, 0 },
244 { 913000000, 10000, false, 69, 2, 22, 2, 36, 0, 0, 0 },
245 { 915000000, 10000, false, 69, 2, 26, 2, 36, 0, 0, 0 },
246 { 917000000, 10000, false, 69, 2, 30, 2, 36, 0, 0, 0 },
247 { 919000000, 10000, false, 69, 2, 34, 2, 36, 0, 0, 0 },
248 { 921000000, 10000, false, 69, 2, 38, 2, 36, 0, 0, 0 },
249 { 923000000, 10000, false, 69, 2, 42, 2, 36, 0, 0, 0 },
250 { 925000000, 10000, false, 69, 2, 46, 2, 36, 0, 0, 0 },
251 { 927000000, 10000, false, 69, 2, 50, 2, 36, 0, 0, 0 },
252 { 906000000, 10000, false, 70, 3, 8, 4, 36, 0, 0, 0 },
253 { 910000000, 10000, false, 70, 3, 16, 4, 36, 0, 0, 0 },
254 { 914000000, 10000, false, 70, 3, 24, 4, 36, 0, 0, 0 },
255 { 918000000, 10000, false, 70, 3, 32, 4, 36, 0, 0, 0 },
256 { 922000000, 10000, false, 70, 3, 40, 4, 36, 0, 0, 0 },
257 { 926000000, 10000, false, 70, 3, 48, 4, 36, 0, 0, 0 },
258 { 908000000, 10000, false, 71, 4, 12, 8, 36, 0, 0, 0 },
259 { 916000000, 10000, false, 71, 4, 28, 8, 36, 0, 0, 0 },
260 { 924000000, 10000, false, 71, 4, 44, 8, 36, 0, 0, 0 },
261};
262
265 .country_code = "US",
266 .num_channels = (sizeof(s1g_channels_US)/sizeof(s1g_channels_US[0])),
268};
269
281};
282
284static const struct mmwlan_regulatory_db regulatory_db = {
287};
288
296static inline const struct mmwlan_regulatory_db *get_regulatory_db(void)
297{
298 return &regulatory_db;
299}
300
301
static const struct mmwlan_s1g_channel_list s1g_channel_list_EU
Channel list structure for EU.
static const struct mmwlan_s1g_channel_list s1g_channel_list_IN
Channel list structure for India.
static const struct mmwlan_regulatory_db regulatory_db
Regulatory database.
static const struct mmwlan_s1g_channel_list s1g_channel_list_JP
Channel list structure for Japan.
static const struct mmwlan_s1g_channel_list s1g_channel_list_NZ
Channel list structure for New Zealand.
static const struct mmwlan_s1g_channel_list s1g_channel_list_KR
Channel list structure for South Korea.
static const struct mmwlan_s1g_channel_list * regulatory_db_domains[]
Array of all channel list structs used for the regulatory database.
static const struct mmwlan_s1g_channel_list s1g_channel_list_US
Channel list structure for USA.
static const struct mmwlan_s1g_channel s1g_channels_JP[]
List of valid S1G channels for Japan.
static const struct mmwlan_regulatory_db * get_regulatory_db(void)
Get a pointer to regulatory_db.
static const struct mmwlan_s1g_channel s1g_channels_NZ[]
List of valid S1G channels for New Zealand.
static const struct mmwlan_s1g_channel s1g_channels_AU[]
List of valid S1G channels for Australia.
static const struct mmwlan_s1g_channel_list s1g_channel_list_SG
Channel list structure for Singapore.
static const struct mmwlan_s1g_channel s1g_channels_SG[]
List of valid S1G channels for Singapore.
static const struct mmwlan_s1g_channel s1g_channels_US[]
List of valid S1G channels for USA.
static const struct mmwlan_s1g_channel s1g_channels_KR[]
List of valid S1G channels for South Korea.
static const struct mmwlan_s1g_channel_list s1g_channel_list_AU
Channel list structure for Australia.
static const struct mmwlan_s1g_channel s1g_channels_IN[]
List of valid S1G channels for India.
static const struct mmwlan_s1g_channel s1g_channels_EU[]
List of valid S1G channels for EU.
Regulatory database data structure.
Definition: mmwlan.h:241
unsigned num_domains
Number of regulatory domains in the database.
Definition: mmwlan.h:243
const struct mmwlan_s1g_channel_list ** domains
The regulatory domain data.
Definition: mmwlan.h:246
A list of S1G channels supported by a given regulatory domain.
Definition: mmwlan.h:227
uint8_t country_code[3]
Two character country code (null-terminated) used to identify the regulatory domain.
Definition: mmwlan.h:229
const struct mmwlan_s1g_channel * channels
The channel data.
Definition: mmwlan.h:233
Regulatory domain information about an S1G channel.
Definition: mmwlan.h:200