222 {
224
225
226
227
228
229
230
231
232
233 const UartWaveFit fit5 = fitUartWave(timing, 5, max_baud_rate);
234 const UartWaveFit fit4 = fitUartWave(timing, 4, max_baud_rate);
235
237 UartWaveFit fit = {};
238 constexpr u32 kHysteresisNs = 50;
239
240
241
242
243
244 constexpr u32 kMaxSymbolErrorNs = 150;
245 if (fit5.ok && fit4.ok) {
246 const bool fit5_classifiable = fit5.max_err_ns <= kMaxSymbolErrorNs;
247 const bool fit4_classifiable = fit4.max_err_ns <= kMaxSymbolErrorNs;
248 if (fit5_classifiable != fit4_classifiable) {
249
250
251
252
253
254 P = fit5_classifiable ? 5 : 4;
255 fit = fit5_classifiable ? fit5 : fit4;
256 } else if (fit4.total_err_ns + kHysteresisNs < fit5.total_err_ns) {
258 fit = fit4;
259 } else {
261 fit = fit5;
262 }
263 } else if (fit5.ok) {
265 fit = fit5;
266 } else if (fit4.ok) {
268 fit = fit4;
269 } else {
271 }
272
278
280}
u8 buildUartByte(u8 pulses_a, u8 pulses_b, u8 pulses_per_bit=5) FL_NO_EXCEPT
Build a UART data byte from two LED bit pulse counts.
FASTLED_FORCE_INLINE fl::u8 P(fl::u8 x)
expected< T, E > result
Alias for expected (Rust-style naming)
Wave lookup table for UART LED encoding (waveN family)