Auto updated submodule references [05-02-2025]
[betaflight.git] / src / main / target / serial_post.h
blobdc7c812c3224041f7d1c8dc04e701f3eac57f7f2
1 /*
2 * This file is part of Betaflight.
4 * Betaflight is free software. You can redistribute this software
5 * and/or modify this software under the terms of the GNU General
6 * Public License as published by the Free Software Foundation,
7 * either version 3 of the License, or (at your option) any later
8 * version.
10 * Betaflight is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14 * See the GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public
17 * License along with this software.
19 * If not, see <http://www.gnu.org/licenses/>.
23 This file is automatically generated by src/utils/gen-serial.py script from src/utils/templates/serial_post.h jinja2 template.
24 Do not modify this file directly, your changes will be eventually lost.
25 See template file for aditional documentation.
27 To generate this file again, run
28 > python ./src/utils/gen-serial-j2.py > ./src/main/target/serial_post.h
29 in Betaflight topmost directory.
31 This include will provide following defines:
32 SERIAL_<type><n>_USED 0/1 - always defined, value depends on target configuration
33 SERIAL_<type>_MASK - bitmask of used ports or given type. <port>0 or <port>1 is BIT(0), based on port first_index
34 SERIAL_<type>_COUNT - number of enabled ports of given type
35 SERIAL_<type>_MAX - <index of highest used port> + 1, 0 when no port is enabled
37 All <type><n>_(RX|TX)_PINS are normalized too:
38 - if port is enabled, both will be defined (possibly as NONE)
39 - if port is not enable, both will be undefined, possibly with warning
40 - pass -DWARN_UNUSED_SERIAL_PORT to compiler to check pin defined without corresponding port being enabled.
42 Generated on 2024-12-20
44 Configuration used:
45 { 'LPUART': {'depends': {'UART'}, 'ids': [1]},
46 'SOFTSERIAL': { 'force_continuous': True,
47 'ids': [1, 2],
48 'use_enables_all': True},
49 'UART': { 'first_index': True,
50 'ids': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
51 'inverter': True},
52 'VCP': {'no_pins': True, 'singleton': True}}
55 #include "common/utils.h" // BIT, LOG2
57 /**** UART *****/
59 // normalize SERIAL_UART_FIRST_INDEX
60 #ifndef SERIAL_UART_FIRST_INDEX
61 #define SERIAL_UART_FIRST_INDEX 1
62 #endif
64 #if SERIAL_UART_FIRST_INDEX == 0
65 #if defined(USE_UART0)
66 # define SERIAL_UART0_USED 1
67 #else
68 # define SERIAL_UART0_USED 0
69 #endif
70 #else // USE_UART0 is not allowed
71 # if defined(USE_UART0)
72 # error "USE_UART0 is defined, but SERIAL_UART does not allow index 0"
73 # else
74 # define SERIAL_UART0_USED 0
75 # endif
76 #endif
77 #if defined(USE_UART1)
78 # define SERIAL_UART1_USED 1
79 #else
80 # define SERIAL_UART1_USED 0
81 #endif
82 #if defined(USE_UART2)
83 # define SERIAL_UART2_USED 1
84 #else
85 # define SERIAL_UART2_USED 0
86 #endif
87 #if defined(USE_UART3)
88 # define SERIAL_UART3_USED 1
89 #else
90 # define SERIAL_UART3_USED 0
91 #endif
92 #if defined(USE_UART4)
93 # define SERIAL_UART4_USED 1
94 #else
95 # define SERIAL_UART4_USED 0
96 #endif
97 #if defined(USE_UART5)
98 # define SERIAL_UART5_USED 1
99 #else
100 # define SERIAL_UART5_USED 0
101 #endif
102 #if defined(USE_UART6)
103 # define SERIAL_UART6_USED 1
104 #else
105 # define SERIAL_UART6_USED 0
106 #endif
107 #if defined(USE_UART7)
108 # define SERIAL_UART7_USED 1
109 #else
110 # define SERIAL_UART7_USED 0
111 #endif
112 #if defined(USE_UART8)
113 # define SERIAL_UART8_USED 1
114 #else
115 # define SERIAL_UART8_USED 0
116 #endif
117 #if defined(USE_UART9)
118 # define SERIAL_UART9_USED 1
119 #else
120 # define SERIAL_UART9_USED 0
121 #endif
122 #if defined(USE_UART10)
123 # define SERIAL_UART10_USED 1
124 #else
125 # define SERIAL_UART10_USED 0
126 #endif
128 #define SERIAL_UART_MASK ((SERIAL_UART0_USED * BIT(0)) | (SERIAL_UART1_USED * BIT(1 - SERIAL_UART_FIRST_INDEX)) | (SERIAL_UART2_USED * BIT(2 - SERIAL_UART_FIRST_INDEX)) | (SERIAL_UART3_USED * BIT(3 - SERIAL_UART_FIRST_INDEX)) | (SERIAL_UART4_USED * BIT(4 - SERIAL_UART_FIRST_INDEX)) | (SERIAL_UART5_USED * BIT(5 - SERIAL_UART_FIRST_INDEX)) | (SERIAL_UART6_USED * BIT(6 - SERIAL_UART_FIRST_INDEX)) | (SERIAL_UART7_USED * BIT(7 - SERIAL_UART_FIRST_INDEX)) | (SERIAL_UART8_USED * BIT(8 - SERIAL_UART_FIRST_INDEX)) | (SERIAL_UART9_USED * BIT(9 - SERIAL_UART_FIRST_INDEX)) | (SERIAL_UART10_USED * BIT(10 - SERIAL_UART_FIRST_INDEX)))
129 #define SERIAL_UART_COUNT (SERIAL_UART0_USED + SERIAL_UART1_USED + SERIAL_UART2_USED + SERIAL_UART3_USED + SERIAL_UART4_USED + SERIAL_UART5_USED + SERIAL_UART6_USED + SERIAL_UART7_USED + SERIAL_UART8_USED + SERIAL_UART9_USED + SERIAL_UART10_USED)
130 // 0 if no port is defined
131 #define SERIAL_UART_MAX (SERIAL_UART_MASK ? LOG2(SERIAL_UART_MASK) + 1 : 0)
132 // enable USE_INVERTED first, before normalization
133 #if !defined(USE_INVERTER) && (INVERTER_PIN_UART0 || INVERTER_PIN_UART1 || INVERTER_PIN_UART2 || INVERTER_PIN_UART3 || INVERTER_PIN_UART4 || INVERTER_PIN_UART5 || INVERTER_PIN_UART6 || INVERTER_PIN_UART7 || INVERTER_PIN_UART8 || INVERTER_PIN_UART9 || INVERTER_PIN_UART10)
134 # define USE_INVERTER
135 #endif
137 // Normalize UART TX/RX/INVERTER
138 #if SERIAL_UART0_USED && !defined(UART0_RX_PIN)
139 # define UART0_RX_PIN NONE
140 #endif
141 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART0_USED && defined(UART0_RX_PIN)
142 # warning "UART0_RX_PIN is defined but UART0 is not enabled"
143 #endif
144 #if !SERIAL_UART0_USED && defined(UART0_RX_PIN)
145 # undef UART0_RX_PIN
146 #endif
147 #if SERIAL_UART0_USED && !defined(UART0_TX_PIN)
148 # define UART0_TX_PIN NONE
149 #endif
150 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART0_USED && defined(UART0_TX_PIN)
151 # warning "UART0_TX_PIN is defined but UART0 is not enabled"
152 #endif
153 #if !SERIAL_UART0_USED && defined(UART0_TX_PIN)
154 # undef UART0_TX_PIN
155 #endif
156 #if SERIAL_UART0_USED && !defined(INVERTER_PIN_UART0)
157 # define INVERTER_PIN_UART0 NONE
158 #endif
159 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART0_USED && defined(INVERTER_PIN_UART0)
160 # warning "INVERTER_PIN_UART0 is defined but UART0 is not enabled"
161 #endif
162 #if !SERIAL_UART0_USED && defined(INVERTER_PIN_UART0)
163 # undef INVERTER_PIN_UART0
164 #endif
165 #if SERIAL_UART1_USED && !defined(UART1_RX_PIN)
166 # define UART1_RX_PIN NONE
167 #endif
168 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART1_USED && defined(UART1_RX_PIN)
169 # warning "UART1_RX_PIN is defined but UART1 is not enabled"
170 #endif
171 #if !SERIAL_UART1_USED && defined(UART1_RX_PIN)
172 # undef UART1_RX_PIN
173 #endif
174 #if SERIAL_UART1_USED && !defined(UART1_TX_PIN)
175 # define UART1_TX_PIN NONE
176 #endif
177 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART1_USED && defined(UART1_TX_PIN)
178 # warning "UART1_TX_PIN is defined but UART1 is not enabled"
179 #endif
180 #if !SERIAL_UART1_USED && defined(UART1_TX_PIN)
181 # undef UART1_TX_PIN
182 #endif
183 #if SERIAL_UART1_USED && !defined(INVERTER_PIN_UART1)
184 # define INVERTER_PIN_UART1 NONE
185 #endif
186 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART1_USED && defined(INVERTER_PIN_UART1)
187 # warning "INVERTER_PIN_UART1 is defined but UART1 is not enabled"
188 #endif
189 #if !SERIAL_UART1_USED && defined(INVERTER_PIN_UART1)
190 # undef INVERTER_PIN_UART1
191 #endif
192 #if SERIAL_UART2_USED && !defined(UART2_RX_PIN)
193 # define UART2_RX_PIN NONE
194 #endif
195 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART2_USED && defined(UART2_RX_PIN)
196 # warning "UART2_RX_PIN is defined but UART2 is not enabled"
197 #endif
198 #if !SERIAL_UART2_USED && defined(UART2_RX_PIN)
199 # undef UART2_RX_PIN
200 #endif
201 #if SERIAL_UART2_USED && !defined(UART2_TX_PIN)
202 # define UART2_TX_PIN NONE
203 #endif
204 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART2_USED && defined(UART2_TX_PIN)
205 # warning "UART2_TX_PIN is defined but UART2 is not enabled"
206 #endif
207 #if !SERIAL_UART2_USED && defined(UART2_TX_PIN)
208 # undef UART2_TX_PIN
209 #endif
210 #if SERIAL_UART2_USED && !defined(INVERTER_PIN_UART2)
211 # define INVERTER_PIN_UART2 NONE
212 #endif
213 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART2_USED && defined(INVERTER_PIN_UART2)
214 # warning "INVERTER_PIN_UART2 is defined but UART2 is not enabled"
215 #endif
216 #if !SERIAL_UART2_USED && defined(INVERTER_PIN_UART2)
217 # undef INVERTER_PIN_UART2
218 #endif
219 #if SERIAL_UART3_USED && !defined(UART3_RX_PIN)
220 # define UART3_RX_PIN NONE
221 #endif
222 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART3_USED && defined(UART3_RX_PIN)
223 # warning "UART3_RX_PIN is defined but UART3 is not enabled"
224 #endif
225 #if !SERIAL_UART3_USED && defined(UART3_RX_PIN)
226 # undef UART3_RX_PIN
227 #endif
228 #if SERIAL_UART3_USED && !defined(UART3_TX_PIN)
229 # define UART3_TX_PIN NONE
230 #endif
231 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART3_USED && defined(UART3_TX_PIN)
232 # warning "UART3_TX_PIN is defined but UART3 is not enabled"
233 #endif
234 #if !SERIAL_UART3_USED && defined(UART3_TX_PIN)
235 # undef UART3_TX_PIN
236 #endif
237 #if SERIAL_UART3_USED && !defined(INVERTER_PIN_UART3)
238 # define INVERTER_PIN_UART3 NONE
239 #endif
240 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART3_USED && defined(INVERTER_PIN_UART3)
241 # warning "INVERTER_PIN_UART3 is defined but UART3 is not enabled"
242 #endif
243 #if !SERIAL_UART3_USED && defined(INVERTER_PIN_UART3)
244 # undef INVERTER_PIN_UART3
245 #endif
246 #if SERIAL_UART4_USED && !defined(UART4_RX_PIN)
247 # define UART4_RX_PIN NONE
248 #endif
249 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART4_USED && defined(UART4_RX_PIN)
250 # warning "UART4_RX_PIN is defined but UART4 is not enabled"
251 #endif
252 #if !SERIAL_UART4_USED && defined(UART4_RX_PIN)
253 # undef UART4_RX_PIN
254 #endif
255 #if SERIAL_UART4_USED && !defined(UART4_TX_PIN)
256 # define UART4_TX_PIN NONE
257 #endif
258 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART4_USED && defined(UART4_TX_PIN)
259 # warning "UART4_TX_PIN is defined but UART4 is not enabled"
260 #endif
261 #if !SERIAL_UART4_USED && defined(UART4_TX_PIN)
262 # undef UART4_TX_PIN
263 #endif
264 #if SERIAL_UART4_USED && !defined(INVERTER_PIN_UART4)
265 # define INVERTER_PIN_UART4 NONE
266 #endif
267 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART4_USED && defined(INVERTER_PIN_UART4)
268 # warning "INVERTER_PIN_UART4 is defined but UART4 is not enabled"
269 #endif
270 #if !SERIAL_UART4_USED && defined(INVERTER_PIN_UART4)
271 # undef INVERTER_PIN_UART4
272 #endif
273 #if SERIAL_UART5_USED && !defined(UART5_RX_PIN)
274 # define UART5_RX_PIN NONE
275 #endif
276 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART5_USED && defined(UART5_RX_PIN)
277 # warning "UART5_RX_PIN is defined but UART5 is not enabled"
278 #endif
279 #if !SERIAL_UART5_USED && defined(UART5_RX_PIN)
280 # undef UART5_RX_PIN
281 #endif
282 #if SERIAL_UART5_USED && !defined(UART5_TX_PIN)
283 # define UART5_TX_PIN NONE
284 #endif
285 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART5_USED && defined(UART5_TX_PIN)
286 # warning "UART5_TX_PIN is defined but UART5 is not enabled"
287 #endif
288 #if !SERIAL_UART5_USED && defined(UART5_TX_PIN)
289 # undef UART5_TX_PIN
290 #endif
291 #if SERIAL_UART5_USED && !defined(INVERTER_PIN_UART5)
292 # define INVERTER_PIN_UART5 NONE
293 #endif
294 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART5_USED && defined(INVERTER_PIN_UART5)
295 # warning "INVERTER_PIN_UART5 is defined but UART5 is not enabled"
296 #endif
297 #if !SERIAL_UART5_USED && defined(INVERTER_PIN_UART5)
298 # undef INVERTER_PIN_UART5
299 #endif
300 #if SERIAL_UART6_USED && !defined(UART6_RX_PIN)
301 # define UART6_RX_PIN NONE
302 #endif
303 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART6_USED && defined(UART6_RX_PIN)
304 # warning "UART6_RX_PIN is defined but UART6 is not enabled"
305 #endif
306 #if !SERIAL_UART6_USED && defined(UART6_RX_PIN)
307 # undef UART6_RX_PIN
308 #endif
309 #if SERIAL_UART6_USED && !defined(UART6_TX_PIN)
310 # define UART6_TX_PIN NONE
311 #endif
312 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART6_USED && defined(UART6_TX_PIN)
313 # warning "UART6_TX_PIN is defined but UART6 is not enabled"
314 #endif
315 #if !SERIAL_UART6_USED && defined(UART6_TX_PIN)
316 # undef UART6_TX_PIN
317 #endif
318 #if SERIAL_UART6_USED && !defined(INVERTER_PIN_UART6)
319 # define INVERTER_PIN_UART6 NONE
320 #endif
321 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART6_USED && defined(INVERTER_PIN_UART6)
322 # warning "INVERTER_PIN_UART6 is defined but UART6 is not enabled"
323 #endif
324 #if !SERIAL_UART6_USED && defined(INVERTER_PIN_UART6)
325 # undef INVERTER_PIN_UART6
326 #endif
327 #if SERIAL_UART7_USED && !defined(UART7_RX_PIN)
328 # define UART7_RX_PIN NONE
329 #endif
330 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART7_USED && defined(UART7_RX_PIN)
331 # warning "UART7_RX_PIN is defined but UART7 is not enabled"
332 #endif
333 #if !SERIAL_UART7_USED && defined(UART7_RX_PIN)
334 # undef UART7_RX_PIN
335 #endif
336 #if SERIAL_UART7_USED && !defined(UART7_TX_PIN)
337 # define UART7_TX_PIN NONE
338 #endif
339 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART7_USED && defined(UART7_TX_PIN)
340 # warning "UART7_TX_PIN is defined but UART7 is not enabled"
341 #endif
342 #if !SERIAL_UART7_USED && defined(UART7_TX_PIN)
343 # undef UART7_TX_PIN
344 #endif
345 #if SERIAL_UART7_USED && !defined(INVERTER_PIN_UART7)
346 # define INVERTER_PIN_UART7 NONE
347 #endif
348 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART7_USED && defined(INVERTER_PIN_UART7)
349 # warning "INVERTER_PIN_UART7 is defined but UART7 is not enabled"
350 #endif
351 #if !SERIAL_UART7_USED && defined(INVERTER_PIN_UART7)
352 # undef INVERTER_PIN_UART7
353 #endif
354 #if SERIAL_UART8_USED && !defined(UART8_RX_PIN)
355 # define UART8_RX_PIN NONE
356 #endif
357 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART8_USED && defined(UART8_RX_PIN)
358 # warning "UART8_RX_PIN is defined but UART8 is not enabled"
359 #endif
360 #if !SERIAL_UART8_USED && defined(UART8_RX_PIN)
361 # undef UART8_RX_PIN
362 #endif
363 #if SERIAL_UART8_USED && !defined(UART8_TX_PIN)
364 # define UART8_TX_PIN NONE
365 #endif
366 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART8_USED && defined(UART8_TX_PIN)
367 # warning "UART8_TX_PIN is defined but UART8 is not enabled"
368 #endif
369 #if !SERIAL_UART8_USED && defined(UART8_TX_PIN)
370 # undef UART8_TX_PIN
371 #endif
372 #if SERIAL_UART8_USED && !defined(INVERTER_PIN_UART8)
373 # define INVERTER_PIN_UART8 NONE
374 #endif
375 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART8_USED && defined(INVERTER_PIN_UART8)
376 # warning "INVERTER_PIN_UART8 is defined but UART8 is not enabled"
377 #endif
378 #if !SERIAL_UART8_USED && defined(INVERTER_PIN_UART8)
379 # undef INVERTER_PIN_UART8
380 #endif
381 #if SERIAL_UART9_USED && !defined(UART9_RX_PIN)
382 # define UART9_RX_PIN NONE
383 #endif
384 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART9_USED && defined(UART9_RX_PIN)
385 # warning "UART9_RX_PIN is defined but UART9 is not enabled"
386 #endif
387 #if !SERIAL_UART9_USED && defined(UART9_RX_PIN)
388 # undef UART9_RX_PIN
389 #endif
390 #if SERIAL_UART9_USED && !defined(UART9_TX_PIN)
391 # define UART9_TX_PIN NONE
392 #endif
393 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART9_USED && defined(UART9_TX_PIN)
394 # warning "UART9_TX_PIN is defined but UART9 is not enabled"
395 #endif
396 #if !SERIAL_UART9_USED && defined(UART9_TX_PIN)
397 # undef UART9_TX_PIN
398 #endif
399 #if SERIAL_UART9_USED && !defined(INVERTER_PIN_UART9)
400 # define INVERTER_PIN_UART9 NONE
401 #endif
402 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART9_USED && defined(INVERTER_PIN_UART9)
403 # warning "INVERTER_PIN_UART9 is defined but UART9 is not enabled"
404 #endif
405 #if !SERIAL_UART9_USED && defined(INVERTER_PIN_UART9)
406 # undef INVERTER_PIN_UART9
407 #endif
408 #if SERIAL_UART10_USED && !defined(UART10_RX_PIN)
409 # define UART10_RX_PIN NONE
410 #endif
411 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART10_USED && defined(UART10_RX_PIN)
412 # warning "UART10_RX_PIN is defined but UART10 is not enabled"
413 #endif
414 #if !SERIAL_UART10_USED && defined(UART10_RX_PIN)
415 # undef UART10_RX_PIN
416 #endif
417 #if SERIAL_UART10_USED && !defined(UART10_TX_PIN)
418 # define UART10_TX_PIN NONE
419 #endif
420 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART10_USED && defined(UART10_TX_PIN)
421 # warning "UART10_TX_PIN is defined but UART10 is not enabled"
422 #endif
423 #if !SERIAL_UART10_USED && defined(UART10_TX_PIN)
424 # undef UART10_TX_PIN
425 #endif
426 #if SERIAL_UART10_USED && !defined(INVERTER_PIN_UART10)
427 # define INVERTER_PIN_UART10 NONE
428 #endif
429 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_UART10_USED && defined(INVERTER_PIN_UART10)
430 # warning "INVERTER_PIN_UART10 is defined but UART10 is not enabled"
431 #endif
432 #if !SERIAL_UART10_USED && defined(INVERTER_PIN_UART10)
433 # undef INVERTER_PIN_UART10
434 #endif
436 /**** LPUART *****/
438 #if defined(USE_LPUART1)
439 # define SERIAL_LPUART1_USED 1
440 #else
441 # define SERIAL_LPUART1_USED 0
442 #endif
444 #define SERIAL_LPUART_MASK ((SERIAL_LPUART1_USED * BIT(1 - 1)))
445 #define SERIAL_LPUART_COUNT (SERIAL_LPUART1_USED)
446 // 0 if no port is defined
447 #define SERIAL_LPUART_MAX (SERIAL_LPUART_MASK ? LOG2(SERIAL_LPUART_MASK) + 1 : 0)
449 // Normalize LPUART TX/RX
450 #if SERIAL_LPUART1_USED && !defined(LPUART1_RX_PIN)
451 # define LPUART1_RX_PIN NONE
452 #endif
453 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_LPUART1_USED && defined(LPUART1_RX_PIN)
454 # warning "LPUART1_RX_PIN is defined but LPUART1 is not enabled"
455 #endif
456 #if !SERIAL_LPUART1_USED && defined(LPUART1_RX_PIN)
457 # undef LPUART1_RX_PIN
458 #endif
459 #if SERIAL_LPUART1_USED && !defined(LPUART1_TX_PIN)
460 # define LPUART1_TX_PIN NONE
461 #endif
462 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_LPUART1_USED && defined(LPUART1_TX_PIN)
463 # warning "LPUART1_TX_PIN is defined but LPUART1 is not enabled"
464 #endif
465 #if !SERIAL_LPUART1_USED && defined(LPUART1_TX_PIN)
466 # undef LPUART1_TX_PIN
467 #endif
469 /**** SOFTSERIAL *****/
471 #if defined(USE_SOFTSERIAL)
472 // USE_SOFTSERIAL enables all SOFTSERIAL ports
473 # if !defined(USE_SOFTSERIAL1)
474 # define USE_SOFTSERIAL1
475 # endif
476 # if !defined(USE_SOFTSERIAL2)
477 # define USE_SOFTSERIAL2
478 # endif
479 #endif
481 #if defined(USE_SOFTSERIAL1)
482 # define SERIAL_SOFTSERIAL1_USED 1
483 #else
484 # define SERIAL_SOFTSERIAL1_USED 0
485 #endif
486 #if defined(USE_SOFTSERIAL2)
487 # define SERIAL_SOFTSERIAL2_USED 1
488 #else
489 # define SERIAL_SOFTSERIAL2_USED 0
490 #endif
492 #define SERIAL_SOFTSERIAL_MASK ((SERIAL_SOFTSERIAL1_USED * BIT(1 - 1)) | (SERIAL_SOFTSERIAL2_USED * BIT(2 - 1)))
493 #define SERIAL_SOFTSERIAL_COUNT (SERIAL_SOFTSERIAL1_USED + SERIAL_SOFTSERIAL2_USED)
494 // 0 if no port is defined
495 #define SERIAL_SOFTSERIAL_MAX (SERIAL_SOFTSERIAL_MASK ? LOG2(SERIAL_SOFTSERIAL_MASK) + 1 : 0)
497 #if SERIAL_SOFTSERIAL_COUNT != SERIAL_SOFTSERIAL_MAX
498 # error SOFTSERIAL ports must start with SOFTSERIAL1 and be continuous
499 #endif
501 // Normalize SOFTSERIAL TX/RX
502 #if SERIAL_SOFTSERIAL1_USED && !defined(SOFTSERIAL1_RX_PIN)
503 # define SOFTSERIAL1_RX_PIN NONE
504 #endif
505 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_SOFTSERIAL1_USED && defined(SOFTSERIAL1_RX_PIN)
506 # warning "SOFTSERIAL1_RX_PIN is defined but SOFTSERIAL1 is not enabled"
507 #endif
508 #if !SERIAL_SOFTSERIAL1_USED && defined(SOFTSERIAL1_RX_PIN)
509 # undef SOFTSERIAL1_RX_PIN
510 #endif
511 #if SERIAL_SOFTSERIAL1_USED && !defined(SOFTSERIAL1_TX_PIN)
512 # define SOFTSERIAL1_TX_PIN NONE
513 #endif
514 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_SOFTSERIAL1_USED && defined(SOFTSERIAL1_TX_PIN)
515 # warning "SOFTSERIAL1_TX_PIN is defined but SOFTSERIAL1 is not enabled"
516 #endif
517 #if !SERIAL_SOFTSERIAL1_USED && defined(SOFTSERIAL1_TX_PIN)
518 # undef SOFTSERIAL1_TX_PIN
519 #endif
520 #if SERIAL_SOFTSERIAL2_USED && !defined(SOFTSERIAL2_RX_PIN)
521 # define SOFTSERIAL2_RX_PIN NONE
522 #endif
523 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_SOFTSERIAL2_USED && defined(SOFTSERIAL2_RX_PIN)
524 # warning "SOFTSERIAL2_RX_PIN is defined but SOFTSERIAL2 is not enabled"
525 #endif
526 #if !SERIAL_SOFTSERIAL2_USED && defined(SOFTSERIAL2_RX_PIN)
527 # undef SOFTSERIAL2_RX_PIN
528 #endif
529 #if SERIAL_SOFTSERIAL2_USED && !defined(SOFTSERIAL2_TX_PIN)
530 # define SOFTSERIAL2_TX_PIN NONE
531 #endif
532 #if defined(WARN_UNUSED_SERIAL_PORT) && !SERIAL_SOFTSERIAL2_USED && defined(SOFTSERIAL2_TX_PIN)
533 # warning "SOFTSERIAL2_TX_PIN is defined but SOFTSERIAL2 is not enabled"
534 #endif
535 #if !SERIAL_SOFTSERIAL2_USED && defined(SOFTSERIAL2_TX_PIN)
536 # undef SOFTSERIAL2_TX_PIN
537 #endif
539 /**** VCP *****/
541 #if defined(USE_VCP)
542 # define SERIAL_VCP_USED 1
543 #else
544 # define SERIAL_VCP_USED 0
545 #endif
547 // for consistency, set one bit if port is enabled
548 #define SERIAL_VCP_MASK (SERIAL_VCP_USED * BIT(0))
549 #define SERIAL_VCP_COUNT (SERIAL_VCP_USED)
550 // 0 if no port is defined
551 #define SERIAL_VCP_MAX (SERIAL_VCP_MASK ? LOG2(SERIAL_VCP_MASK) + 1 : 0)
553 // normalize USE_x after all ports are enumerated (x_COUNT of dependencies must be available)
554 #if !defined(USE_UART) && (SERIAL_UART_COUNT || SERIAL_LPUART_COUNT)
555 # define USE_UART
556 #endif
557 #if !defined(USE_LPUART) && (SERIAL_LPUART_COUNT)
558 # define USE_LPUART
559 #endif
560 #if !defined(USE_SOFTSERIAL) && (SERIAL_SOFTSERIAL_COUNT)
561 # define USE_SOFTSERIAL
562 #endif
563 #if !defined(USE_VCP) && (SERIAL_VCP_COUNT)
564 # define USE_VCP
565 #endif