FastLED 3.9.15
Loading...
Searching...
No Matches
fl Namespace Reference

Detailed Description

Base definition for an LED controller.

Platform-agnostic integer types.

Service function to check timer flag and flush all async loggers.

Implements a simple red square effect for 2D LED grids.

Pretty much the methods that every LED controller object will make available. If you want to pass LED controllers around to methods, make them references to this type, keeps your code saner. However, most people won't be seeing/using these objects directly at all.

Note
That the methods for eventual checking of background writing of data (I'm looking at you, Teensy 3.0 DMA controller!) are not yet implemented.
Deprecated
This function is now optional - async loggers are automatically serviced by fl::task system when using fl::delay() Call this from your main loop() if using enableBackgroundFlush() This function is lightweight - returns immediately if no flush needed

Version and configuration FastLED configuration and platform definitions Compiler and language features Memory and type utilities Basic color types (CRGB, HSV) Pixel types and color ordering Pixel utilities Base LED controller classes Platform-specific definitions and initialization Timing utilities Math utilities from lib8tion Bit manipulation Memory utilities Hardware pin definitions Color utilities and palettes

Trace System

The trace system provides source location information and call stack tracking for debugging.

Components:

Stack Trace Usage:

void criticalFunction() {
FL_SCOPED_TRACE; // Automatically uses function name
// Function body - trace automatically pushed/popped
if (error) {
FL_TRACE_DUMP(); // Print call stack for debugging
}
}
// For custom trace names:
void helper() {
FL_SCOPED_TRACE_NAMED("custom_trace_name");
// ...
}
#define FL_SCOPED_TRACE
Definition trace.h:128
#define FL_SCOPED_TRACE_NAMED(name)
Definition trace.h:127
#define FL_TRACE_DUMP()
Definition trace.h:129

Configuration:

  • FASTLED_DEBUG_STACK_TRACE - Enable stack tracing (default: disabled)
  • Stack depth limit: 32 entries (configurable via FL_STACK_TRACE_MAX_DEPTH)

Usage Example

// IWYU pragma: begin_keep
#include <fl/task/task.h>
// IWYU pragma: end_keep
void setup() {
// Create a recurring task that runs every 100ms
.then([]() {
// Task logic here
})
.catch_([](const fl::task::Error& e) {
// Error handling here
});
// Add task to scheduler
}
void loop() {
// Execute ready tasks
// Yield for other operations
}
void setup()
void loop()
Handle & then(function< void()> on_then) FL_NOEXCEPT
Definition task.cpp.hpp:276
static Scheduler & instance()
int add_task(Handle t)
Internal FastLED header for implementation files.
Handle every_ms(int interval_ms)
Definition task.cpp.hpp:320
void run(fl::u32 microseconds, ExecFlags flags)
Run selected task subsystems.
Error type for promises.
Definition promise.h:39
#define FL_TRACE
A macro to capture the current source file, line number, and time.
Definition trace.h:102

Coroutine (OS-Level Task Management)

This file also provides a LOW-LEVEL OS/RTOS task wrapper for hardware drivers and platform-specific threading needs. This is separate from the high-level task scheduler above.

Coroutine Usage Example

#include "fl/task/task.h"
void myTaskFunction() {
while (true) {
// Task work...
if (shouldShutdown) {
fl::task::exit_current(); // Self-delete
// UNREACHABLE on ESP32
}
}
}
// Create and start OS-level task (RAII - auto-cleanup on destruction)
.func = myTaskFunction,
.name = "MyTask"
});
// Task is automatically cleaned up when 't' goes out of scope
// Or manually: t.stop();
Handle coroutine(const CoroutineConfig &config)
Definition task.cpp.hpp:364
void exit_current()
Definition task.cpp.hpp:369

Coroutine with Async/Await (ESP32 only)

On ESP32 platforms, coroutines can use fl::task::await() to efficiently block on promises without busy-waiting. This provides zero-CPU-overhead asynchronous operations perfect for network requests, timers, or sensor readings.

#include "fl/task/task.h"
// Create a coroutine that performs sequential async operations
.func = []() {
// Fetch data from an API (zero CPU usage while waiting)
auto result = fl::task::await(fl::fetch_get("http://api.example.com/data"));
if (result.ok()) {
fl::string data = result.value().text();
// Process the data
process_data(data);
} else {
FL_WARN("Fetch failed: " << result.error().message);
}
// Task completes and automatically cleans up
},
.name = "AsyncWorker"
});
Task executor — runs registered task runners and manages the run loop.
#define FL_WARN(X)
Definition log.h:276
PromiseResult< T > await(Promise< T > p)
Await promise completion in a coroutine (Trampoline to platform implementation)
Definition executor.h:305
expected< T, E > result
Alias for expected (Rust-style naming)
Definition result.h:31

Platform support:**

Namespaces

namespace  alpha_detail
 
namespace  anonymous_namespace{allocator.cpp.hpp}
 
namespace  anonymous_namespace{base64.cpp.hpp}
 
namespace  anonymous_namespace{blur.cpp.hpp}
 
namespace  anonymous_namespace{channel.cpp.hpp}
 
namespace  anonymous_namespace{chasing_spirals.cpp.hpp}
 
namespace  anonymous_namespace{chrono.cpp.hpp}
 
namespace  anonymous_namespace{colorutils.cpp.hpp}
 
namespace  anonymous_namespace{corkscrew.cpp.hpp}
 
namespace  anonymous_namespace{five_bit_hd_gamma.cpp.hpp}
 
namespace  anonymous_namespace{gradient.cpp.hpp}
 
namespace  anonymous_namespace{h264.cpp.hpp}
 
namespace  anonymous_namespace{http_parser.cpp.hpp}
 
namespace  anonymous_namespace{ieee754_string.cpp.hpp}
 
namespace  anonymous_namespace{istream.cpp.hpp}
 
namespace  anonymous_namespace{json.cpp.hpp}
 
namespace  anonymous_namespace{line_simplification.cpp.hpp}
 
namespace  anonymous_namespace{memory_resource.cpp.hpp}
 
namespace  anonymous_namespace{mp4_parser.cpp.hpp}
 
namespace  anonymous_namespace{noise_woryley.cpp.hpp}
 
namespace  anonymous_namespace{perlin_particle_punch.cpp.hpp}
 
namespace  anonymous_namespace{pins.cpp.hpp}
 
namespace  anonymous_namespace{pir.cpp.hpp}
 
namespace  anonymous_namespace{random.cpp.hpp}
 
namespace  anonymous_namespace{rgbw.cpp.hpp}
 
namespace  anonymous_namespace{rgbww.cpp.hpp}
 
namespace  anonymous_namespace{tile2x2.cpp.hpp}
 
namespace  anonymous_namespace{wave.cpp.hpp}
 
namespace  anonymous_namespace{xypath.cpp.hpp}
 
namespace  asio
 
namespace  asset_detail
 
namespace  audio
 
namespace  ceil_detail
 
namespace  channels
 
namespace  chrono
 
namespace  colorimetric_detail
 
namespace  detail
 Compile-time linker keep-alive hook for a single fl::Bus.
 
namespace  fl
 
namespace  floor_detail
 
namespace  format_detail
 
namespace  gfx
 
namespace  int_cast_detail
 
namespace  io
 
namespace  ios
 
namespace  isr
 
namespace  json2
 
namespace  make_unsigned_detail
 
namespace  map_range_detail
 
namespace  math
 
namespace  net
 
namespace  platforms
 
namespace  printf_detail
 
namespace  pwm_state
 
namespace  q16
 
namespace  q31
 
namespace  simd
 
namespace  spi
 
namespace  sqrt_detail
 
namespace  task
 
namespace  test
 
namespace  third_party
 
namespace  this_thread
 this_thread namespace for thread-specific operations
 
namespace  ttf
 
namespace  ucs7604
 UCS7604 runtime brightness control namespace.
 
namespace  validation
 
namespace  video
 
namespace  wave_detail
 
namespace  wled
 
namespace  xypath_detail
 

Classes

struct  add_pointer
 
struct  add_pointer< T & >
 
struct  add_pointer< T && >
 
struct  add_rvalue_reference
 
struct  add_rvalue_reference< T & >
 
class  aligned_ptr
 
struct  alignment_of
 
struct  allocation_result
 
class  allocator
 
class  allocator_inlined
 
class  allocator_psram
 
class  allocator_realloc
 
class  allocator_slab
 
struct  allocator_traits
 
struct  alpha16
 Unsigned 16-bit alpha / brightness — UNORM16. More...
 
struct  alpha8
 Unsigned 8-bit alpha / brightness — UNORM8. More...
 
class  AlphaTrimmedMean
 
class  Animartrix
 
struct  AnimartrixAnimInfo
 
struct  AnimartrixEntry
 
class  ArchimedeanSpiralPath
 
class  array
 A fixed-size array implementation similar to std::array. More...
 
class  array< T, 0 >
 
class  asset_ref
 Opaque handle to a sketch-local asset. More...
 
class  AsyncLogger
 ISR-safe async logger wrapper (zero heap allocation) Uses embedded AsyncLogQueue instead of heap-allocated pointer Registers itself automatically in ActiveLoggerRegistry on first access. More...
 
class  AsyncLogQueue
 High-performance SPSC async log queue. More...
 
class  AtomicFake
 
class  AttackDecayFilter
 
class  AudioBatch
 
struct  AudioFrame
 Lightweight snapshot of pre-computed audio analysis for one audio sample. More...
 
struct  AutoResearchConfig
 Configuration for driver-agnostic autoresearch testing Contains all input parameters needed for autoresearch (excludes output parameters) More...
 
class  back_insert_iterator
 Back insert iterator - an output iterator that inserts elements at the end of a container. More...
 
class  basic_string
 Concrete type-erased string class. More...
 
struct  bidirectional_iterator_tag
 
class  Big_Caleido
 
class  Big_Caleido_FP
 
class  BilateralFilter
 
struct  BindResult
 Wraps the result of binding to a method by name. More...
 
struct  BindResult< R(Args...)>
 
class  BiquadFilter
 
class  bitset_dynamic
 A dynamic bitset implementation that can be resized at runtime. More...
 
class  bitset_fixed
 
class  bitset_inlined
 
union  bitswap_type
 Union containing a full 8 bytes to swap the bit orientation on. More...
 
struct  bitswap_type.__unnamed0__
 
class  Blend2d
 
struct  Blend2dParams
 
struct  BoolConversionVisitor
 
struct  BusSupports
 Capability check: does bus B accept chipset family Chipset? More...
 
struct  BusTraits
 Primary template — intentionally undefined. More...
 
class  Button
 
class  ButtonLowLevel
 
class  Caleido1
 
class  Caleido1_FP
 
class  Caleido2
 
class  Caleido2_FP
 
class  Caleido3
 
class  Caleido3_FP
 
struct  callable_traits
 
struct  callable_traits< R(*)(Args...)>
 
struct  callable_traits< R(Args...)>
 
struct  callable_traits< R(C::*)(Args...) const >
 
struct  callable_traits< R(C::*)(Args...)>
 
struct  callable_traits< T, typename enable_if< is_member_function_pointer< decltype(&T::operator())>::value >::type >
 
class  Canvas
 Generic canvas for any pixel type (e.g. More...
 
class  CanvasRGB
 Convenience alias for CRGB canvas — use fl::CanvasRGB for no-template syntax. More...
 
class  CascadedEMA
 
class  CatmullRomParams
 
class  CatmullRomPath
 Catmull–Rom spline through arbitrary points. More...
 
class  Center_Field
 
class  Center_Field_FP
 
class  Channel
 LED channel for parallel output, pretty much a CPixelLEDController but with timing and pin information. More...
 
struct  ChannelConfig
 Configuration for a single LED channel. More...
 
struct  ChannelConfigOf
 Strongly-typed channel configuration with compile-time chipset family. More...
 
class  ChannelData
 Transmission data for a single LED channel. More...
 
struct  ChannelEvents
 Singleton event router for Channel lifecycle events. More...
 
class  ChannelManager
 Unified channel manager with priority-based driver selection. More...
 
struct  ChannelOptions
 Optional channel configuration parameters All fields have sensible defaults and can be overridden as needed. More...
 
class  Chasing_Spirals_Float
 
class  Chasing_Spirals_Q31
 
class  Chasing_Spirals_Q31_SIMD
 
struct  ChasingSpiralPixelLUT
 
struct  ChipsetTiming
 Generic chipset timing entry Provides T1, T2, T3 timing parameters in nanoseconds for any LED protocol. More...
 
struct  ChipsetTiming4Phase
 4-phase RX timing thresholds for chipset detection More...
 
struct  ChipsetTimingConfig
 Runtime bit-period timing for a clockless chipset. More...
 
struct  choose_by_rank
 
struct  choose_by_signedness
 
struct  choose_by_size
 
class  CirclePath
 
class  circular_buffer
 
class  circular_buffer_core
 
class  CLEDController
 
struct  ClocklessChipset
 Clockless chipset configuration (single data pin) More...
 
struct  common_type
 
struct  common_type_impl
 
struct  common_type_impl< double, float >
 
struct  common_type_impl< double, long double >
 
struct  common_type_impl< double, T, typename enable_if<(is_integral< T >::value||is_floating_point< T >::value) &&!is_same< T, double >::value >::type >
 
struct  common_type_impl< float, double >
 
struct  common_type_impl< float, long double >
 
struct  common_type_impl< float, T, typename enable_if<(is_integral< T >::value||is_floating_point< T >::value) &&!is_same< T, float >::value >::type >
 
struct  common_type_impl< i8, u8, void >
 
struct  common_type_impl< long double, double >
 
struct  common_type_impl< long double, float >
 
struct  common_type_impl< T, double, typename enable_if<(is_integral< T >::value||is_floating_point< T >::value) &&!is_same< T, double >::value >::type >
 
struct  common_type_impl< T, float, typename enable_if<(is_integral< T >::value||is_floating_point< T >::value) &&!is_same< T, float >::value >::type >
 
struct  common_type_impl< T, T >
 
struct  common_type_impl< T, U, typename enable_if< is_integral< T >::value &&is_integral< U >::value &&!is_same< T, U >::value &&!((is_same< T, i8 >::value &&is_same< U, u8 >::value)||(is_same< T, u8 >::value &&is_same< U, i8 >::value))>::type >
 
struct  common_type_impl< u8, i8, void >
 
class  Complex_Kaleido
 
class  Complex_Kaleido_2
 
class  Complex_Kaleido_2_FP
 
class  Complex_Kaleido_3
 
class  Complex_Kaleido_3_FP
 
class  Complex_Kaleido_4
 
class  Complex_Kaleido_4_FP
 
class  Complex_Kaleido_5
 
class  Complex_Kaleido_5_FP
 
class  Complex_Kaleido_6
 
class  Complex_Kaleido_6_FP
 
class  Complex_Kaleido_FP
 
struct  conditional
 
struct  conditional< false, T, F >
 
struct  ConnectionConfig
 
struct  ConstCharPtrWrapper
 
struct  ConstSpanWrapper
 
struct  contains_type
 
struct  contains_type< T >
 
struct  contains_type< T, U, Rest... >
 
struct  Context
 
struct  CopyToOutputIteratorVisitor
 
struct  CopyToVisitor
 
class  Corkscrew
 
struct  CRGB
 Representation of an 8-bit RGB pixel (Red, Green, Blue) More...
 
union  CRGB.__unnamed0__
 
struct  CRGB.__unnamed0__.__unnamed0__
 
union  CRGB.__unnamed0__.__unnamed0__.__unnamed0__
 
union  CRGB.__unnamed0__.__unnamed0__.__unnamed1__
 
union  CRGB.__unnamed0__.__unnamed0__.__unnamed2__
 
struct  CRGB16
 
struct  CRGBA5
 
struct  CustomTimingTraits
 Helper to create timing traits from individual timing values Useful for creating custom timing configurations at compile-time. More...
 
class  Cylon
 An animation that moves a single LED back and forth (Larson Scanner effect) More...
 
class  DCBlocker
 
struct  dec_t
 
struct  decay
 
struct  default_delete
 
struct  default_delete< T[]>
 
struct  default_value_visitor
 
struct  DefaultBus
 Per-platform default bus for a given chipset family. More...
 
class  DemoReel100
 
class  deque
 
class  DigitalMultiWrite16
 Pre-computed nibble LUT for fast 16-pin digital writes. More...
 
class  DigitalMultiWrite8
 Pre-computed nibble LUT for fast 8-pin digital writes. More...
 
class  DigitalPin
 
class  DigitalPinImpl
 
struct  DiodeProfile
 
class  Distance_Experiment
 
class  Distance_Experiment_FP
 
struct  DrawContext
 
struct  DrawItem
 
struct  DriverFailureInfo
 Driver failure tracking with detailed error information. More...
 
struct  DriverInfo
 Driver state information for channel manager. More...
 
struct  DriverTestResult
 Driver test result tracking (moved from ValidationTest.h) More...
 
struct  EdgeRange
 Edge range specification for getRawEdgeTimes() debugging. More...
 
struct  EdgeTime
 Universal edge timing representation (platform-agnostic) More...
 
struct  Empty
 
struct  enable_if
 
struct  enable_if< true, T >
 
struct  endl_t
 
struct  Engine
 
class  EngineEvents
 
struct  EqLevels
 Snapshot of 16-bin normalized spectrum. More...
 
struct  EqualTo
 
struct  ErrorInfo
 Error information for expected type. More...
 
class  expected
 expected type for operations that can fail (C++23-style) More...
 
class  expected< void, E >
 Specialization for void (no value to return) More...
 
class  ExponentialSmoother
 
struct  FastHash
 
struct  FastHash< vec2< T > >
 
class  FastLEDAdapter
 Real FastLED implementation adapter. More...
 
struct  FILE_impl
 
class  filebuf
 
class  FileSystem
 
class  Fire2012
 
class  fixed_point
 
class  fixed_point_base
 
struct  fixed_point_impl
 
struct  fixed_point_impl< 0, 32, Sign::SIGNED >
 
struct  fixed_point_impl< 0, 32, Sign::UNSIGNED >
 
struct  fixed_point_impl< 12, 4, Sign::SIGNED >
 
struct  fixed_point_impl< 12, 4, Sign::UNSIGNED >
 
struct  fixed_point_impl< 16, 16, Sign::SIGNED >
 
struct  fixed_point_impl< 16, 16, Sign::UNSIGNED >
 
struct  fixed_point_impl< 24, 8, Sign::SIGNED >
 
struct  fixed_point_impl< 24, 8, Sign::UNSIGNED >
 
struct  fixed_point_impl< 4, 12, Sign::SIGNED >
 
struct  fixed_point_impl< 4, 12, Sign::UNSIGNED >
 
struct  fixed_point_impl< 8, 24, Sign::SIGNED >
 
struct  fixed_point_impl< 8, 24, Sign::UNSIGNED >
 
struct  fixed_point_impl< 8, 8, Sign::SIGNED >
 
struct  fixed_point_impl< 8, 8, Sign::UNSIGNED >
 
struct  fixed_point_traits
 
class  FixedVector
 
class  flat_map
 
class  flat_set
 
struct  float_conversion_visitor
 
struct  float_conversion_visitor< double >
 
class  FlowField
 Abstract base class for 2D flow field effects. More...
 
class  FlowFieldFloat
 Float-precision flow field implementation. More...
 
class  FlowFieldFP
 Pure fixed-point (s16x16) flow field implementation for maximum speed. More...
 
struct  FlowFieldFPState
 SoA (Structure-of-Arrays) state for FlowFieldFP. More...
 
struct  FlowFieldParams
 Configuration parameters for FlowField. More...
 
class  Fluffy_Blobs
 
class  Fluffy_Blobs_FP
 
class  Font
 
class  FontImpl
 
struct  FontMetrics
 
class  FontRenderer
 
struct  forward_iterator_tag
 
class  Frame
 
class  FsImpl
 
class  fstream
 
class  function
 
struct  function_traits
 
struct  function_traits< fl::function< R(Args...)> >
 
struct  function_traits< R(*)(Args...)>
 
struct  function_traits< R(Args...)>
 
class  Fx
 
class  Fx1d
 
class  Fx2d
 
class  Fx2dTo1d
 Fx2dTo1d samples a 2D effect into a 1D LED strip using a ScreenMap. More...
 
class  FxCompositor
 
class  FxEngine
 Manages and renders multiple visual effects (Fx) for LED strips. More...
 
class  FxLayer
 
class  Gamma8
 
class  Gamma8Impl
 
struct  GammaEval
 
struct  GammaEval16
 
struct  Gap
 Struct representing gap parameters for corkscrew mapping. More...
 
class  GaussianFilter
 
class  GielisCurveParams
 
class  GielisCurvePath
 
class  Gif
 
struct  GifConfig
 
struct  GifInfo
 
struct  GlyphBitmap
 
struct  GlyphMetrics
 
class  Gradient
 
class  GradientInlined
 
struct  greater
 Binary function object that returns whether the first argument is greater than the second. More...
 
struct  greater< void >
 Specialization of greater for void, allowing for transparent comparisons. More...
 
class  Grid
 
class  H264
 
struct  H264Config
 
struct  H264Info
 
class  HampelFilter
 
struct  has_data_and_size
 
class  has_data_method
 
struct  has_encoder
 
struct  has_member_swap
 
class  has_size_method
 
struct  Hash
 
struct  Hash< audio::fft::Args >
 
struct  Hash< bool >
 
struct  Hash< double >
 
struct  Hash< fl::shared_ptr< T > >
 
struct  Hash< fl::string >
 
struct  Hash< fl::string_view >
 
struct  Hash< fl::u8 >
 
struct  Hash< float >
 
struct  Hash< i16 >
 
struct  Hash< i32 >
 
struct  Hash< i8 >
 
struct  Hash< T * >
 
struct  Hash< u16 >
 
struct  Hash< u32 >
 
struct  Hash< vec2< T > >
 
class  HashMapLru
 
class  HashSet
 
struct  HeapInfo
 Heap memory information. More...
 
class  HeartPath
 
struct  hex_t
 
class  Hot_Blob
 
class  Hot_Blob_FP
 
struct  HSV16
 
struct  hsv8
 Representation of an HSV pixel (hue, saturation, value (aka brightness)). More...
 
union  hsv8.__unnamed0__
 
struct  hsv8.__unnamed0__.__unnamed0__
 
union  hsv8.__unnamed0__.__unnamed0__.__unnamed0__
 
union  hsv8.__unnamed0__.__unnamed0__.__unnamed1__
 
union  hsv8.__unnamed0__.__unnamed0__.__unnamed2__
 
class  HttpConnection
 
struct  HttpRequest
 
class  HttpRequestParser
 
struct  HttpResponse
 
class  HttpResponseParser
 
class  IAnimartrix2Viz
 
class  IButtonInput
 
class  IChannel
 Polymorphic identification base for any channel in the system. More...
 
class  IChannelDriver
 Minimal interface for LED channel transmission drivers. More...
 
class  IDecoder
 
struct  identity
 
class  IdTracker
 Thread-safe ID tracker that maps void* pointers to unique integer IDs. More...
 
union  IEEE754binary32_t
 typedef for IEEE754 "binary32" float type internals More...
 
struct  IEEE754binary32_t.__unnamed0__
 
struct  IEEE754binary32_t.__unnamed1__
 
struct  IEEE754binary32_t.__unnamed2__
 
class  IFastLED
 Pure virtual interface for FastLED operations. More...
 
class  ifstream
 
struct  index_sequence
 
struct  input_iterator_tag
 
struct  int_conversion_visitor
 
struct  int_conversion_visitor< i64 >
 
struct  integer_promotion_impl
 
struct  integral_constant
 
struct  is_arithmetic
 
struct  is_arithmetic< const T >
 
struct  is_arithmetic< T & >
 
struct  is_arithmetic< volatile T >
 
struct  is_array
 
struct  is_array< T[]>
 
struct  is_array< T[N]>
 
struct  is_base_of
 
struct  is_base_of_v_helper
 
struct  is_bitcast_compatible
 
struct  is_bitcast_compatible< const T >
 
struct  is_bitcast_compatible< T * >
 
struct  is_char_type
 
struct  is_char_type< char >
 
struct  is_char_type< const T >
 
struct  is_char_type< signed char >
 
struct  is_char_type< T & >
 
struct  is_char_type< unsigned char >
 
struct  is_char_type< volatile T >
 
struct  is_const
 
struct  is_const< const T >
 
struct  is_enum
 
struct  is_fixed_point
 
struct  is_fixed_point< const T >
 
struct  is_fixed_point< const volatile T >
 
struct  is_fixed_point< fixed_point< I, F, S > >
 
struct  is_fixed_point< T & >
 
struct  is_fixed_point< volatile T >
 
struct  is_floating_point
 
struct  is_floating_point< const T >
 
struct  is_floating_point< double >
 
struct  is_floating_point< float >
 
struct  is_floating_point< long double >
 
struct  is_floating_point< T & >
 
struct  is_floating_point< volatile T >
 
struct  is_fp_promotable
 
struct  is_fp_promotable< fixed_point< FromInt, FromFrac, FromSign >, fixed_point< ToInt, ToFrac, ToSign > >
 
struct  is_function
 
struct  is_function< Ret(Args...) const >
 
struct  is_function< Ret(Args...) const volatile >
 
struct  is_function< Ret(Args...) volatile >
 
struct  is_function< Ret(Args...)>
 
struct  is_integral
 
struct  is_integral< bool >
 
struct  is_integral< char >
 
struct  is_integral< const T >
 
struct  is_integral< int >
 
struct  is_integral< long >
 
struct  is_integral< long long >
 
struct  is_integral< short >
 
struct  is_integral< signed char >
 
struct  is_integral< T & >
 
struct  is_integral< unsigned char >
 
struct  is_integral< unsigned int >
 
struct  is_integral< unsigned long >
 
struct  is_integral< unsigned long long >
 
struct  is_integral< unsigned short >
 
struct  is_integral< volatile T >
 
struct  is_lvalue_reference
 
struct  is_lvalue_reference< T & >
 
struct  is_member_function_pointer
 
struct  is_member_function_pointer< Ret(C::*)(A...) const >
 
struct  is_member_function_pointer< Ret(C::*)(A...)>
 
struct  is_multi_byte_integer
 
struct  is_pod
 
struct  is_pod< bool >
 
struct  is_pod< char >
 
struct  is_pod< double >
 
struct  is_pod< float >
 
struct  is_pod< int >
 
struct  is_pod< long >
 
struct  is_pod< long double >
 
struct  is_pod< long long >
 
struct  is_pod< short >
 
struct  is_pod< signed char >
 
struct  is_pod< unsigned char >
 
struct  is_pod< unsigned int >
 
struct  is_pod< unsigned long >
 
struct  is_pod< unsigned long long >
 
struct  is_pod< unsigned short >
 
struct  is_pod_v_helper
 
struct  is_pointer
 
struct  is_pointer< T * >
 
struct  is_pointer< T *const >
 
struct  is_pointer< T *const volatile >
 
struct  is_pointer< T *volatile >
 
struct  is_reference
 
struct  is_response_send
 
struct  is_response_send< const ResponseSend & >
 
struct  is_response_send< ResponseSend & >
 
struct  is_response_send< ResponseSend && >
 
struct  is_response_send< ResponseSend >
 
struct  is_rvalue_reference
 
struct  is_rvalue_reference< T && >
 
struct  is_same
 
struct  is_same< T, T >
 
struct  is_same_v_helper
 
struct  is_signed
 
struct  is_signed< char >
 
struct  is_signed< const T >
 
struct  is_signed< const volatile T >
 
struct  is_signed< double >
 
struct  is_signed< float >
 
struct  is_signed< int >
 
struct  is_signed< long >
 
struct  is_signed< long double >
 
struct  is_signed< long long >
 
struct  is_signed< short >
 
struct  is_signed< signed char >
 
struct  is_signed< volatile T >
 
struct  is_trivially_copyable
 
struct  is_trivially_copyable_v_helper
 
struct  is_void
 
struct  is_void< void >
 
class  istream
 
class  istream_real
 
struct  iterator_traits
 Iterator traits - provides standard typedefs for any iterator type Specializations provided for raw pointers Generic version - tries to extract nested typedefs, provides defaults if missing. More...
 
struct  iterator_traits< const T * >
 Specialization for const raw pointers. More...
 
struct  iterator_traits< T * >
 Specialization for raw pointers. More...
 
class  Jpeg
 
struct  JpegConfig
 
class  JpegDecoder
 
struct  JpegInfo
 
class  json
 
struct  json_value
 
class  JsonArgConverter
 
class  JsonArgConverter< R(Args...)>
 
union  just8bits
 Structure representing 8 bits of access. More...
 
struct  just8bits.__unnamed0__
 
class  KalmanFilter
 
class  Lava1
 
class  Lava1_FP
 
class  LeakyIntegrator
 
struct  LEDError
 LED error information for a single run. More...
 
class  Leds
 
class  LedsXY
 
struct  less
 Binary function object that returns whether the first argument is less than the second. More...
 
struct  less< void >
 Specialization of less for void, allowing for transparent comparisons. More...
 
struct  line_xy
 
class  LinePath
 
class  LinePathParams
 
class  LineSimplifier
 
class  LineSimplifierExact
 
class  list
 A doubly-linked list container. More...
 
struct  LnkMetadata
 Metadata extracted from a .lnk asset link file. More...
 
class  Luminova
 
struct  LuminovaParams
 
class  LUT
 
struct  make_index_sequence_impl
 
struct  make_index_sequence_impl< 0, Is... >
 
struct  make_unsigned
 
struct  make_unsigned< T, typename enable_if< is_integral< T >::value &&!is_same< typename remove_cv< T >::type, bool >::value >::type >
 
class  MapRedBlackTree
 
struct  Matrix3x3f
 
class  MatrixSlice
 
struct  max_align
 
struct  max_align< T, Rest... >
 
struct  max_align<>
 
struct  max_align_selector
 
struct  max_align_selector< false >
 
struct  max_size
 
struct  max_size< T, Rest... >
 
struct  max_size<>
 
class  MedianFilter
 
class  memory_resource
 Polymorphic memory resource base class (PMR-style). More...
 
struct  MethodInfo
 Method information. More...
 
struct  modulators
 
class  Module_Experiment1
 
class  Module_Experiment10
 
class  Module_Experiment10_FP
 
class  Module_Experiment1_FP
 
class  Module_Experiment2
 
class  Module_Experiment2_FP
 
class  Module_Experiment3
 
class  Module_Experiment3_FP
 
class  Module_Experiment4
 
class  Module_Experiment4_FP
 
class  Module_Experiment5
 
class  Module_Experiment5_FP
 
class  Module_Experiment6
 
class  Module_Experiment6_FP
 
class  Module_Experiment7
 
class  Module_Experiment7_FP
 
class  Module_Experiment8
 
class  Module_Experiment8_FP
 
class  Module_Experiment9
 
class  Module_Experiment9_FP
 
class  MovingAverage
 
class  Mp3
 
class  Mp3Decoder
 
struct  Mp3Info
 
struct  Mp4TrackInfo
 
class  Mpeg1
 
class  Mpeg1FileHandle
 
struct  Mpeg1Info
 
struct  MultiChannelConfig
 
class  MultiMap
 
class  MultiMapTree
 
struct  MultiRunConfig
 Multi-run test configuration. More...
 
class  MultiSet
 
class  MultiSetTree
 
struct  NamedTimingConfig
 Chipset timing configuration with name for testing. More...
 
class  NoiseBias1D
 Per-position attack/decay bias for one axis. More...
 
class  NoiseBias2D
 Two-axis attack/decay bias for 2D effects (per-column X + per-row Y). More...
 
class  NoisePalette
 
class  NoiseWave
 
class  not_null
 
class  NullDecoder
 
class  NullFileHandle
 
class  NullFileSystem
 
struct  nullopt_t
 
struct  numeric_limits
 
struct  numeric_limits< bool >
 
struct  numeric_limits< char >
 
struct  numeric_limits< double >
 
struct  numeric_limits< float >
 
struct  numeric_limits< int >
 
struct  numeric_limits< long >
 
struct  numeric_limits< long long >
 
struct  numeric_limits< short >
 
struct  numeric_limits< signed char >
 
struct  numeric_limits< unsigned char >
 
struct  numeric_limits< unsigned int >
 
struct  numeric_limits< unsigned long >
 
struct  numeric_limits< unsigned long long >
 
struct  numeric_limits< unsigned short >
 
struct  NumericExtractVisitor
 
class  ObjectFLED
 
struct  oct_t
 
class  ofstream
 
class  OneEuroFilter
 
class  Optional
 
class  Optional< T && >
 
struct  oscillators
 
class  ostream
 
struct  output_iterator_tag
 
class  Pacifica
 
struct  pair
 
struct  pair_element
 
struct  pair_element< 0, T1, T2 >
 
struct  pair_element< 1, T1, T2 >
 
struct  pair_xy
 
class  Parametric_Water
 
class  Parametric_Water_FP
 
struct  ParamInfo
 Method parameter information. More...
 
struct  parse_result
 
class  Particles1d
 Power-based particle system for 1D LED strips creating organic light effects. More...
 
struct  PercussionState
 Snapshot of percussion detection state. More...
 
struct  perlin_i16_optimized
 
struct  perlin_q16
 
struct  perlin_s16x16
 
struct  perlin_s16x16_simd
 
struct  perlin_s8x8
 
class  PerlinParticlePunch
 
class  PhyllotaxisParams
 
class  PhyllotaxisPath
 
struct  PinInfo
 Pin number with its resolved port ID. More...
 
struct  Pins16
 POD struct holding 16 pin numbers for bulk pin writes. More...
 
struct  Pins8
 POD struct holding 8 pin numbers for bulk pin writes. More...
 
class  Pir
 
class  PirLowLevel
 
struct  PixelControllerVtable
 
class  PixelIterator
 
class  PixelIteratorAny
 Adapter class that creates a PixelIterator from any color order. More...
 
class  PointPath
 
class  Polar_Waves
 
class  Polar_Waves_FP
 
class  Potentiometer
 
class  PotentiometerLowLevel
 
class  Pride2015
 
class  priority_queue_stable
 Stable priority queue that maintains FIFO ordering for equal-priority elements. More...
 
class  PriorityQueue
 
struct  ProgmemLUT
 
struct  ProgmemLUT16
 
struct  ProgressiveConfig
 
class  PSRamAllocator
 
struct  PSRamDeleter
 
class  qfx
 Template class for representing fractional ints. More...
 
class  queue
 A first-in, first-out (FIFO) queue container adapter. More...
 
struct  random_access_iterator_tag
 
struct  ratio
 Compile-time rational arithmetic. More...
 
struct  rect
 
class  RectangularDrawBuffer
 
class  RedBlackTree
 
class  RedSquare
 
class  Remote
 JSON-RPC server with scheduling support. More...
 
struct  remove_const
 
struct  remove_const< const T >
 
struct  remove_cv
 
struct  remove_cv< const T >
 
struct  remove_cv< const volatile T >
 
struct  remove_cv< volatile T >
 
struct  remove_extent
 
struct  remove_extent< T[]>
 
struct  remove_extent< T[N]>
 
struct  remove_pointer
 
struct  remove_pointer< T * >
 
struct  remove_pointer< T *const >
 
struct  remove_pointer< T *const volatile >
 
struct  remove_pointer< T *volatile >
 
struct  remove_reference
 
struct  remove_reference< T & >
 
struct  remove_reference< T && >
 
struct  render_parameters
 
struct  render_parameters_fp
 
struct  ResetInfo
 Detailed reset information bundling the normalized cause with a platform-specific subcause id and the raw cause-register value. More...
 
struct  response_aware_signature
 Type trait to detect if a function signature has ResponseSend& as first parameter. More...
 
struct  response_aware_signature< R(*)(ResponseSend &, Args...)>
 
struct  response_aware_signature< R(ResponseSend &, Args...)>
 
class  ResponseSend
 Helper class for sending responses in async/streaming RPC methods. More...
 
class  reverse_iterator
 Reverse iterator adapter - reverses the direction of a bidirectional iterator. More...
 
struct  rgb
 
class  RGB_Blobs
 
class  RGB_Blobs2
 
class  RGB_Blobs2_FP
 
class  RGB_Blobs3
 
class  RGB_Blobs3_FP
 
class  RGB_Blobs4
 
class  RGB_Blobs4_FP
 
class  RGB_Blobs5
 
class  RGB_Blobs5_FP
 
class  RGB_Blobs_FP
 
struct  Rgbw
 
struct  RgbwDefault
 
struct  RgbwInvalid
 
struct  RGBWPixel
 Simple RGBW pixel struct for encoder input. More...
 
struct  Rgbww
 Per-strip RGBWW configuration. More...
 
struct  RgbwwDefault
 Default RGBWW configuration: colorimetric mode at warm=2700K / cool=6500K, default profile, end-aligned warm-then-cool W byte placement. More...
 
struct  RgbwWhiteIsOff
 
struct  RgbwwInvalid
 Sentinel: disables RGBWW (variant should hold fl::Empty instead, but this is kept for symmetry with RgbwInvalid). More...
 
struct  RGBWWPixel
 Simple 5-channel pixel struct: red, green, blue, warm-white, cool-white. More...
 
class  Rings
 
class  Rings_FP
 
class  RosePath
 
class  RosePathParams
 
class  Rotating_Blob
 
class  Rotating_Blob_FP
 
class  Rpc
 
struct  rpc_storage_type
 
struct  rpc_storage_type< char * >
 
struct  rpc_storage_type< const char * >
 
struct  rpc_storage_type< fl::span< const double > >
 
struct  rpc_storage_type< fl::span< const fl::string > >
 
struct  rpc_storage_type< fl::span< const float > >
 
struct  rpc_storage_type< fl::span< const int > >
 
struct  rpc_storage_type< fl::span< const T > >
 
class  RpcHandle
 
class  RpcHandle< R(Args...)>
 
struct  RpcResult
 Result metadata for executed RPC calls. More...
 
struct  RunResult
 Single run result with error tracking. More...
 
class  RxChannel
 
struct  RxChannelConfig
 
struct  RxConfig
 Configuration for RX device initialization. More...
 
class  RxDevice
 Common interface for RX devices. More...
 
class  s0x32
 
struct  s0x32x4
 4-wide s0x32 vector (normalized values [-1, 1]) Backed by 128-bit SIMD register (4× i32 in Q31 format) More...
 
class  s12x4
 
class  s16x16
 
struct  s16x16x4
 4-wide s16x16 vector (general fixed-point) Backed by 128-bit SIMD register (4× i32 in Q16 format) More...
 
class  s24x8
 
class  s4x12
 
class  s8x24
 
class  s8x8
 
class  SavitzkyGolayFilter
 
class  Scaledemo1
 
class  Scaledemo1_FP
 
class  ScaleUp
 Effect wrapper that upscales delegate effects using bilinear interpolation. More...
 
class  scope_exit
 RAII guard that executes a callable when destroyed. More...
 
class  ScopedLogDisable
 RAII class to temporarily disable all logging output. More...
 
class  ScopedTrace
 RAII guard for automatic call stack tracking. More...
 
class  ScopedWatchdog
 RAII watchdog guard for the canonical loop()-top use case. More...
 
class  ScreenMap
 
struct  SerializerVisitor
 
class  SerialPort
 Arduino-compatible Serial class for cross-platform serial I/O. More...
 
struct  SerialReader
 Serial adapter using fl:: input functions (fl::available, fl::read) More...
 
struct  SerialWriter
 Serial adapter using fl:: output functions (fl::println) More...
 
class  Server
 JSON-RPC server with callback-based I/O. More...
 
class  set
 
class  SetRedBlackTree
 
class  shared_ptr
 
struct  SinCos32
 
struct  SingleTestConfig
 Single test configuration - fully stateless. More...
 
struct  SingleTestResult
 Single test result - comprehensive pass/fail information. More...
 
class  Singleton
 
class  SingletonShared
 
class  SingletonThreadLocal
 
struct  SizeVisitor
 
class  SlabAllocator
 
class  Slow_Fade
 
class  Slow_Fade_FP
 
struct  SmallMapEqualTo
 
class  SortedHeapVector
 
class  span
 
class  span< T, dynamic_extent >
 
class  SpectralVariance
 
class  Spi
 SPI Device - RAII wrapper for multi-lane SPI. More...
 
class  SpiChannelEngineAdapter
 Adapter that wraps HW SPI controllers for ChannelManager. More...
 
struct  SpiChipsetConfig
 SPI chipset configuration (data + clock pins) More...
 
struct  SpiConfig
 Configuration for SPI device (supports 1-8 lanes) More...
 
struct  SpiEncoder
 SPI encoder configuration for LED protocols. More...
 
class  SpiralMatrix1
 
class  SpiralMatrix10
 
class  SpiralMatrix10_FP
 
class  SpiralMatrix1_FP
 
class  SpiralMatrix2
 
class  SpiralMatrix2_FP
 
class  SpiralMatrix3
 
class  SpiralMatrix3_FP
 
class  SpiralMatrix4
 
class  SpiralMatrix4_FP
 
class  SpiralMatrix5
 
class  SpiralMatrix5_FP
 
class  SpiralMatrix6
 
class  SpiralMatrix6_FP
 
class  SpiralMatrix8
 
class  SpiralMatrix8_FP
 
class  SpiralMatrix9
 
class  SpiralMatrix9_FP
 
class  Spiralus
 
class  Spiralus2
 
class  Spiralus2_FP
 
class  Spiralus_FP
 
class  SPITransposer
 Unified stateless bit-interleaving transposer for multi-lane SPI parallel LED transmission. More...
 
class  sstream
 
class  sstream_noop
 
struct  static_assert_failure
 
struct  static_assert_failure< true >
 
class  StbVorbisDecoder
 
class  string
 
class  string_n
 
class  string_view
 
struct  StringConversionVisitor
 
struct  StringFastLess
 
class  StringHolder
 
class  StringInterner
 
struct  sub4
 Structure representing 32 bits of access. More...
 
struct  swap_impl
 
struct  swap_impl< T, false >
 
struct  swap_impl< T, true >
 
struct  TestContext
 Test context for detailed error reporting Aggregates all test configuration parameters for error messages. More...
 
class  ThreadLocalFake
 
class  Tile2x2_u8
 
class  Tile2x2_u8_wrap
 
class  TimeAlpha
 
class  TimeClampedTransition
 
class  TimeFunction
 
class  Timeout
 Generic timeout timer with rollover-safe arithmetic. More...
 
class  TimeRamp
 
class  TimeWarp
 
struct  TIMING_DP1903_400KHZ
 DP1903 controller @ 400 kHz Four-phase: TH0=800ns, TH1=2400ns, TL0=2400ns, TL1=800ns. More...
 
struct  TIMING_DP1903_800KHZ
 DP1903 controller @ 800 kHz Four-phase: TH0=400ns, TH1=1400ns, TL0=1400ns, TL1=400ns. More...
 
struct  TIMING_GE8822_800KHZ
 GE8822 RGB controller @ 800 kHz Four-phase: TH0=350ns, TH1=1010ns, TL0=1010ns, TL1=350ns. More...
 
struct  TIMING_GW6205_400KHZ
 GW6205 controller @ 400 kHz Four-phase: TH0=800ns, TH1=1600ns, TL0=1600ns, TL1=800ns. More...
 
struct  TIMING_GW6205_800KHZ
 GW6205 controller @ 800 kHz (fast variant) Four-phase: TH0=400ns, TH1=800ns, TL0=800ns, TL1=400ns. More...
 
struct  TIMING_LPD1886_1250KHZ
 LPD1886 RGB controller @ 1250 kHz Four-phase: TH0=200ns, TH1=600ns, TL0=600ns, TL1=200ns. More...
 
struct  TIMING_PL9823
 PL9823 RGB controller @ 800 kHz Four-phase: TH0=350ns, TH1=1360ns, TL0=1360ns, TL1=350ns. More...
 
struct  TIMING_SK6812
 SK6812 RGBW controller @ 800 kHz Four-phase: TH0=300ns, TH1=900ns, TL0=900ns, TL1=300ns. More...
 
struct  TIMING_SK6822
 SK6822 RGB controller @ 800 kHz Four-phase: TH0=375ns, TH1=1375ns, TL0=1375ns, TL1=375ns. More...
 
struct  TIMING_SM16703
 SM16703 RGB controller @ 800 kHz Four-phase: TH0=300ns, TH1=900ns, TL0=900ns, TL1=300ns. More...
 
struct  TIMING_SM16824E
 SM16824E RGB controller (high-speed variant) Four-phase: TH0=300ns, TH1=1200ns, TL0=1000ns, TL1=100ns. More...
 
struct  TIMING_TM1803_400KHZ
 TM1803 controller @ 400 kHz Four-phase: TH0=700ns, TH1=1800ns, TL0=1800ns, TL1=700ns. More...
 
struct  TIMING_TM1809_800KHZ
 TM1809 RGB controller @ 800 kHz Four-phase: TH0=350ns, TH1=700ns, TL0=800ns, TL1=450ns. More...
 
struct  TIMING_TM1814
 TM1814 RGBW controller @ 800 kHz Four-phase: TH0=360ns, TH1=960ns, TL0=940ns, TL1=340ns. More...
 
struct  TIMING_TM1829_1600KHZ
 TM1829 RGB controller @ 1600 kHz (high-speed variant) Four-phase: TH0=100ns, TH1=400ns, TL0=500ns, TL1=200ns. More...
 
struct  TIMING_TM1829_800KHZ
 TM1829 RGB controller @ 800 kHz Four-phase: TH0=340ns, TH1=680ns, TL0=890ns, TL1=550ns. More...
 
struct  TIMING_UCS1903_400KHZ
 UCS1903 controller @ 400 kHz Four-phase: TH0=500ns, TH1=2000ns, TL0=2000ns, TL1=500ns. More...
 
struct  TIMING_UCS1903B_800KHZ
 UCS1903B controller @ 800 kHz Four-phase: TH0=400ns, TH1=850ns, TL0=900ns, TL1=450ns. More...
 
struct  TIMING_UCS1904_800KHZ
 UCS1904 controller @ 800 kHz Four-phase: TH0=400ns, TH1=800ns, TL0=850ns, TL1=450ns. More...
 
struct  TIMING_UCS1912
 UCS1912 controller @ 800 kHz Four-phase: TH0=250ns, TH1=1250ns, TL0=1350ns, TL1=350ns. More...
 
struct  TIMING_UCS2903
 UCS2903 controller @ 800 kHz Four-phase: TH0=250ns, TH1=1000ns, TL0=1000ns, TL1=250ns. More...
 
struct  TIMING_UCS7604_1600KHZ
 UCS7604 RGBW controller @ 1600 kHz (16-bit color depth, high-speed) Four-phase: TH0=200ns, TH1=400ns, TL0=425ns, TL1=225ns. More...
 
struct  TIMING_UCS7604_800KHZ
 UCS7604 RGBW controller @ 800 kHz (16-bit color depth) Four-phase: TH0=400ns, TH1=800ns, TL0=850ns, TL1=450ns. More...
 
struct  TIMING_UCS7604_8BIT_800KHZ
 UCS7604 RGBW controller @ 800 kHz (8-bit color depth) Same wire timing as 16-bit 800KHz, but uses 8-bit encoding mode. More...
 
struct  TIMING_WS2811_400KHZ
 WS2811 @ 400kHz (standard mode, datasheet specification) More...
 
struct  TIMING_WS2811_800KHZ_LEGACY
 WS2811 @ 800kHz (fast mode, half the timing of 400kHz mode) More...
 
struct  TIMING_WS2812_800KHZ
 WS2812 RGB controller @ 800 kHz (most common, overclockable) Four-phase: TH0=250ns, TH1=875ns, TL0=1000ns, TL1=375ns. More...
 
struct  TIMING_WS2812_800KHZ_LEGACY
 WS2812 RGB controller @ 800 kHz legacy variant Four-phase: TH0=320ns, TH1=640ns, TL0=960ns, TL1=640ns. More...
 
struct  TIMING_WS2812B_MINI_V3
 WS2812B-Mini-V3 / WS2812B-V5 RGB controller @ 800 kHz Four-phase: TH0=225ns, TH1=580ns, TL0=1000ns, TL1=645ns These newer variants share identical timing specifications with tighter tolerances. More...
 
struct  TIMING_WS2813
 WS2813 RGB controller (same timing as WS2812) Four-phase: TH0=320ns, TH1=640ns, TL0=960ns, TL1=640ns. More...
 
struct  TIMING_WS2815
 WS2815 RGB controller @ 400 kHz Four-phase: TH0=250ns, TH1=1340ns, TL0=1640ns, TL1=550ns. More...
 
struct  TimingTraits
 Compile-time trait to extract timing values from timing types. More...
 
struct  TraceEntry
 A single stack trace entry with location information. More...
 
struct  TraceStorage
 Internal storage for the trace system Encapsulates call stack and depth tracking per-thread. More...
 
struct  Transform16
 
struct  TransformFloat
 
class  TransformFloatImpl
 
class  Transition
 
class  TriangularFilter
 
struct  tuple
 
struct  tuple< Head, Tail... >
 
struct  tuple<>
 
struct  tuple_element
 
struct  tuple_element< 0, pair< T1, T2 > >
 
struct  tuple_element< 0, tuple< Head, Tail... > >
 
struct  tuple_element< 1, pair< T1, T2 > >
 
struct  tuple_element< I, tuple< Head, Tail... > >
 
struct  tuple_size
 
struct  tuple_size< pair< T1, T2 > >
 
struct  tuple_size< tuple< Ts... > >
 
class  TwinkleFox
 
struct  type_rank
 
struct  type_rank< bool >
 
struct  type_rank< char >
 
struct  type_rank< double >
 
struct  type_rank< float >
 
struct  type_rank< int >
 
struct  type_rank< long >
 
struct  type_rank< long double >
 
struct  type_rank< long long >
 
struct  type_rank< short >
 
struct  type_rank< signed char >
 
struct  type_rank< unsigned char >
 
struct  type_rank< unsigned int >
 
struct  type_rank< unsigned long >
 
struct  type_rank< unsigned long long >
 
struct  type_rank< unsigned short >
 
class  TypeConversionResult
 
class  TypedChannel
 Templated channel facade. More...
 
class  TypedRpcBinding
 
class  TypedRpcBinding< R(Args...)>
 
class  TypedRpcBinding< void(Args...)>
 
class  u0x32
 
class  u12x4
 
class  u16x16
 
class  u24x8
 
class  u4x12
 
class  u8x24
 
class  u8x8
 
class  UCS7604ControllerT
 UCS7604 controller extending CPixelLEDController. More...
 
struct  UCS7604CurrentControl
 UCS7604 current control structure with 4-bit fields for each channel. More...
 
class  UIAudio
 
class  UIAudioImpl
 
class  UIButton
 
class  UIButtonImpl
 
class  UICheckbox
 
class  UICheckboxImpl
 
class  UIDescription
 
class  UIDescriptionImpl
 
class  UIDropdown
 
class  UIDropdownImpl
 
class  UIElement
 
class  UIGroup
 
class  UIGroupImpl
 
class  UIHelp
 
class  UIHelpImpl
 
class  UINumberField
 
class  UINumberFieldImpl
 
class  UISlider
 
class  UISliderImpl
 
class  UITitle
 
class  UITitleImpl
 
struct  underlying_type
 
class  unique_ptr
 
class  unique_ptr< T[], Deleter >
 
class  unordered_map
 
class  unordered_map_small
 
class  unordered_set
 
class  unsorted_map_fixed
 
class  url
 
struct  vec2
 
struct  vec3
 
class  vector
 
class  vector_basic
 Type-erased vector base class. More...
 
struct  vector_element_ops
 Function pointer table for type-specific element operations. More...
 
class  vector_psram
 
class  VectorN
 
class  VectorSet
 
class  VectorSetFixed
 
struct  VibeLevels
 Snapshot of self-normalizing MilkDrop-style vibe levels. More...
 
class  Video
 
class  VideoFxWrapper
 
struct  VoidSuccess
 Dummy type for void expected success state. More...
 
class  Vorbis
 
class  VorbisDecoder
 
class  VorbisDecoderImpl
 
struct  VorbisFrame
 
struct  VorbisInfo
 
class  Watchdog
 Unified cross-platform watchdog interface. More...
 
struct  WatchdogCrashReport
 Decoded crash report (Tier 2). More...
 
class  Water
 
class  Water_FP
 
struct  Wave3Byte
 Type-safe container for 3-byte wave pulse pattern (wave3 encoding) More...
 
struct  Wave8Bit
 Type-safe container for packed 8-bit wave pulse pattern. More...
 
class  WaveCrgbGradientMap
 Wave-to-color mapper using gradient/palette coloring. More...
 
class  WaveCrgbMap
 Abstract base class for mapping wave simulation values to LED colors. More...
 
class  WaveCrgbMapDefault
 Default wave-to-color mapper producing grayscale output. More...
 
class  WaveFx
 2D wave simulation effect with supersampling and gradient coloring More...
 
struct  WaveFxArgs
 Configuration parameters for WaveFx effect. More...
 
class  Waves
 
class  Waves_FP
 
class  WaveSimulation1D
 
class  WaveSimulation1D_Real
 
class  WaveSimulation2D
 
class  WaveSimulation2D_Real
 
class  weak_ptr
 
class  WeakPtr
 
class  WeightedMovingAverage
 
class  WLED
 WLED-specific Remote RPC extension. More...
 
class  WLEDClient
 WLED Client for controlling LEDs through FastLED interface. More...
 
struct  WLEDSegment
 WLED segment configuration. More...
 
struct  WriteResult
 Result of a write operation. More...
 
class  XMap
 
struct  XYDrawComposited
 
struct  XYDrawGradient
 
class  XYMap
 
class  XYPath
 
class  XYPathFunction
 
class  XYPathGenerator
 
class  XYPathParams
 
class  XYPathRenderer
 
class  XYRasterSparse_RGB8
 
class  XYRasterU8Sparse
 
class  Yves
 
class  Yves_FP
 
class  Zoom
 
class  Zoom2
 
class  Zoom2_FP
 
class  Zoom_FP
 

Typedefs

typedef u16 accum124
 no direct ANSI counterpart. 12 bits int, 4 bits fraction
 
typedef u16 accum124
 no direct ANSI counterpart. 12 bits int, 4 bits fraction
 
typedef u32 accum1616
 ANSI: signed _Accum. 16 bits int, 16 bits fraction.
 
typedef u32 accum1616
 ANSI: signed _Accum. 16 bits int, 16 bits fraction.
 
typedef u16 accum88
 ANSI: unsigned short _Accum. 8 bits int, 8 bits fraction.
 
typedef u16 accum88
 ANSI: unsigned short _Accum. 8 bits int, 8 bits fraction.
 
template<typename T>
using add_pointer_t = typename add_pointer<T>::type
 
typedef void(* advanceDataFunction) (void *pixel_controller)
 
template<typename T, fl::size N>
using allocator_inlined_psram = allocator_inlined<T, N, fl::allocator_psram<T>>
 
template<typename T, fl::size N>
using allocator_inlined_slab = allocator_inlined<T, N, fl::allocator_slab<T>>
 
template<typename T, fl::size N, fl::size SLAB_SIZE = 8>
using allocator_inlined_slab_psram = allocator_inlined<T, N, fl::allocator_slab<T, SLAB_SIZE>>
 
using AnimartrixVizFactory = IAnimartrix2Viz* (*)()
 
template<typename T>
using atomic = AtomicFake<T>
 
using atomic_bool = atomic<bool>
 
using atomic_i32 = atomic<fl::i32>
 
using atomic_int = atomic<int>
 
using atomic_u32 = atomic<fl::u32>
 
using atomic_uint = atomic<unsigned int>
 
using AudioFrameCallback = fl::function<void(const audio::Sample&)>
 
using binary_semaphore = fl::platforms::binary_semaphore
 Binary semaphore abstraction for FastLED.
 
template<bool B>
using bool_constant = integral_constant<bool, B>
 
using centi = ratio<1, 100>
 1/100
 
using ChipsetVariant = fl::variant<ClocklessChipset, SpiChipsetConfig>
 
template<typename T, typename U>
using common_type_t = typename common_type<T, U>::type
 
template<bool B, typename T, typename F>
using conditional_t = typename conditional<B, T, F>::type
 
template<ptrdiff_t LeastMaxValue = 1>
using counting_semaphore = fl::platforms::counting_semaphore<LeastMaxValue>
 Counting semaphore abstraction for FastLED.
 
using CRGB = fl::CRGB
 
using deca = ratio<10, 1>
 10/1
 
template<typename T>
using decay_t = typename decay<T>::type
 
using deci = ratio<1, 10>
 1/10
 
template<typename T>
using DefaultLess = less<T>
 
typedef deque< double > deque_double
 
typedef deque< float > deque_float
 
typedef deque< int > deque_int
 
template<bool Condition, typename T = void>
using enable_if_t = typename enable_if<Condition, T>::type
 
template<typename T>
using equal_to = EqualTo<T>
 
using false_type = integral_constant<bool, false>
 
using FILE = FILE_impl
 
using filebuf_ptr = fl::shared_ptr<filebuf>
 
template<typename Key, size N>
using FixedSet = VectorSetFixed<Key, N>
 
template<typename Key, typename T, typename Compare = fl::less<Key>>
using fl_map = map<Key, T, Compare>
 
using fl_random = math::random
 
using FontPtr = fl::shared_ptr<Font>
 
typedef u16 fract16
 ANSI: unsigned _Fract.
 
typedef u16 fract16
 ANSI: unsigned _Fract.
 
typedef u32 fract32
 ANSI: unsigned long _Fract. 32 bits int, 32 bits fraction.
 
typedef u32 fract32
 ANSI: unsigned long _Fract. 32 bits int, 32 bits fraction.
 
typedef u8 fract8
 Fixed-Point Fractional Types.
 
typedef u8 fract8
 Fixed-Point Fractional Types.
 
using FrameTracker = video::FrameTracker
 
typedef ProgmemLUT< GammaEval< gamma< u8x24 >(2.2f)>, 256 > Gamma22LUT
 
typedef ProgmemLUT16< GammaEval16< gamma< u8x24 >(2.2f)>, 256 > Gamma22LUT16
 
typedef ProgmemLUT< GammaEval< gamma< u8x24 >(2.8f)>, 256 > Gamma28LUT
 
typedef ProgmemLUT16< GammaEval16< gamma< u8x24 >(2.8f)>, 256 > Gamma28LUT16
 
using GammaKey = fl::ufixed_point<4, 12>
 
template<u32 G>
using GammaTable16_256 = ProgmemLUT16<GammaEval16<G>, 256>
 
template<u32 G>
using GammaTable256 = ProgmemLUT<GammaEval<G>, 256>
 
typedef void(* getHdScaleFunction) (void *pixel_controller, u8 *c0, u8 *c1, u8 *c2, u8 *brightness)
 
using giga = ratio<1000000000, 1>
 1,000,000,000/1
 
typedef u8(* globalBrightness) (void *pixel_controller)
 
typedef bool(* hasFunction) (void *pixel_controller, int n)
 
template<typename Key, typename T, typename Hash = Hash<Key>, typename KeyEqual = equal_to<Key>>
using hash_map = unordered_map<Key, T, Hash, KeyEqual>
 
using hecto = ratio<100, 1>
 100/1
 
using http_request = asio::http::Request
 
using http_response = asio::http::Response
 
using HttpRequestPtr = fl::shared_ptr<HttpRequest>
 
using HttpRequestPtrConst = fl::shared_ptr<const HttpRequest>
 
using HttpResponsePtr = fl::shared_ptr<HttpResponse>
 
using HttpResponsePtrConst = fl::shared_ptr<const HttpResponse>
 
using HttpServer = asio::http::Server
 
typedef fl::i64 i64
 
typedef signed char i8
 
template<typename T, fl::size INLINED_SIZE>
using InlinedVector = VectorN<T, INLINED_SIZE>
 
typedef fl::i16 int16_t
 
typedef fl::i32 int32_t
 
typedef signed char int8_t
 
typedef fl::iptr intptr_t
 
template<typename Base, typename Derived>
using is_derived = enable_if_t<is_base_of<Base, Derived>::value>
 
using JpegDecoderPtr = fl::shared_ptr<JpegDecoder>
 
using json_array = fl::vector<fl::shared_ptr<json_value>>
 
using json_object = fl::flat_map<fl::string, fl::shared_ptr<json_value>, fl::StringFastLess>
 
using kilo = ratio<1000, 1>
 1,000/1
 
using LineCap = gfx::LineCap
 Line cap style.
 
typedef void(* loadAndScaleRGBFunction) (void *pixel_controller, u8 *r_out, u8 *g_out, u8 *b_out)
 
typedef void(* loadAndScaleRGBWFunction) (void *pixel_controller, Rgbw rgbw, u8 *b0_out, u8 *b1_out, u8 *b2_out, u8 *b3_out)
 
typedef void(* loadAndScaleRGBWWFunction) (void *pixel_controller, Rgbww rgbww, u8 *b0_out, u8 *b1_out, u8 *b2_out, u8 *b3_out, u8 *b4_out)
 
typedef void(* loadRGBScaleAndBrightnessFunction) (void *pixel_controller, u8 *c0, u8 *c1, u8 *c2, u8 *brightness)
 
typedef LUT< u16 > LUT16
 
typedef LUT< vec2< u16 > > LUTXY16
 
using LUTXYFLOAT = LUT<vec2f>
 
using LUTXYFLOATPtr = shared_ptr<LUTXYFLOAT>
 
typedef LUT< vec3fLUTXYZFLOAT
 
template<fl::size N>
using make_index_sequence = typename make_index_sequence_impl<N>::type
 
template<typename Key, typename T, typename Compare = fl::less<Key>>
using map = MapRedBlackTree<Key, T, Compare, fl::allocator_slab<char>>
 
typedef max_align_selector<(sizeof(longdouble)>sizeof(double))>::type max_align_t
 
using mega = ratio<1000000, 1>
 1,000,000/1
 
using memorybuf = detail::memorybuf
 
using micro = ratio<1, 1000000>
 1/1,000,000
 
using milli = ratio<1, 1000>
 1/1,000
 
using Mp3DecoderPtr = fl::shared_ptr<Mp3Decoder>
 
using Mpeg1Config = third_party::Mpeg1Config
 
template<typename Key, typename T, typename Compare = fl::less<Key>>
using multi_map = MultiMapTree<Key, T, Compare, fl::allocator_slab<char>>
 
template<typename Key, typename Compare = fl::less<Key>>
using multi_set = MultiSetTree<Key, Compare, fl::allocator_slab<char>>
 
using mutex = fl::platforms::mutex
 
using nano = ratio<1, 1000000000>
 1/1,000,000,000
 
using NetworkDetector = ::fl::net::NetworkDetector
 
using NotNullStringHolderPtr = fl::not_null<StringHolderPtr>
 
typedef decltype(nullptr) nullptr_t
 
template<typename T>
using optional = Optional<T>
 
using PaddingGenerator = fl::function<void(fl::span<const u8> src, fl::span<u8> dst)>
 Padding generator function type.
 
template<typename T1, typename T2>
using Pair = pair<T1, T2>
 
using pair_xy_float = vec2<float>
 
using pair_xyz_float = vec3<float>
 
using PixelStream = video::PixelStream
 
using PixelStreamPtr = video::PixelStreamPtr
 
typedef fl::ptrdiff ptrdiff_t
 
typedef qfx< u16, 12, 4 > q124
 A 12.4 integer (12 bits integer, 4 bits fraction)
 
typedef qfx< u8, 4, 4 > q44
 A 4.4 integer (4 bits integer, 4 bits fraction)
 
typedef qfx< u8, 6, 2 > q62
 A 6.2 integer (6 bits integer, 2 bits fraction)
 
typedef qfx< u16, 8, 8 > q88
 A 8.8 integer (8 bits integer, 8 bits fraction)
 
typedef int(* qsort_compare_fn) (const void *, const void *)
 
template<typename R1, typename R2>
using ratio_divide
 Divide two ratios at compile time.
 
template<typename R1, typename R2>
using ratio_multiply
 Multiply two ratios at compile time.
 
using recursive_mutex = fl::platforms::recursive_mutex
 
template<typename T>
using remove_cv_t = typename remove_cv<T>::type
 
template<typename T>
using remove_pointer_t = typename remove_pointer<T>::type
 
template<typename T>
using remove_reference_t = typename remove_reference<T>::type
 
template<typename T, typename E = ResultError>
using result = expected<T, E>
 Alias for expected (Rust-style naming)
 
typedef void(* rgb_2_rgbw_function) (u16 w_color_temperature, u8 r, u8 g, u8 b, u8 r_scale, u8 g_scale, u8 b_scale, u8 *out_r, u8 *out_g, u8 *out_b, u8 *out_w)
 
typedef void(* rgb_2_rgbww_function) (const Rgbww &cfg, fl::u8 r, fl::u8 g, fl::u8 b, fl::u8 r_scale, fl::u8 g_scale, fl::u8 b_scale, fl::u8 *out_r, fl::u8 *out_g, fl::u8 *out_b, fl::u8 *out_ww, fl::u8 *out_wc)
 
using RpcFactory = Rpc
 
template<class Sig>
using RpcFn = fl::function<Sig>
 
typedef i32 saccum114
 no direct ANSI counterpart. 1 bit int, 14 bits fraction
 
typedef i32 saccum114
 no direct ANSI counterpart. 1 bit int, 14 bits fraction
 
typedef i32 saccum1516
 ANSI: signed _Accum. 15 bits int, 16 bits fraction.
 
typedef i32 saccum1516
 ANSI: signed _Accum. 15 bits int, 16 bits fraction.
 
typedef i16 saccum78
 ANSI: signed short _Accum. 7 bits int, 8 bits fraction.
 
typedef i16 saccum78
 ANSI: signed short _Accum. 7 bits int, 8 bits fraction.
 
template<typename T, typename Deleter = default_delete<T>>
using scoped_ptr = unique_ptr<T, Deleter>
 
template<typename T, fl::size N>
using set_inlined = fl::set<T, fl::allocator_inlined_slab<T, N>>
 
template<int IntBits, int FracBits>
using sfixed_integer = fixed_point<IntBits, FracBits, Sign::SIGNED>
 
template<int IntBits, int FracBits>
using sfixed_point = sfixed_integer<IntBits, FracBits>
 
typedef i16 sfract15
 ANSI: signed _Fract.
 
typedef i16 sfract15
 ANSI: signed _Fract.
 
typedef i32 sfract31
 ANSI: signed long _Fract. 31 bits int, 1 bit fraction.
 
typedef i32 sfract31
 ANSI: signed long _Fract. 31 bits int, 1 bit fraction.
 
typedef i8 sfract7
 ANSI: signed short _Fract.
 
typedef i8 sfract7
 ANSI: signed short _Fract.
 
typedef fl::size size_t
 
typedef int(* sizeFunction) (void *pixel_controller)
 
template<typename T = void>
using SpiResult = spi::Result<T>
 
using SpiTransaction = spi::Transaction
 
typedef void(* stepDitheringFunction) (void *pixel_controller)
 
using string_large = string_n<256>
 
using string_small = string_n<32>
 
using StringHolderPtr = fl::shared_ptr<fl::StringHolder>
 
using thread = fl::platforms::thread
 Thread abstraction for FastLED.
 
using thread_id = fl::platforms::thread_id
 Thread ID type.
 
template<typename T>
using ThreadLocal = ThreadLocalFake<T>
 
using TIMING_WS2812B_V5 = TIMING_WS2812B_MINI_V3
 Convenience alias - WS2812B-V5 uses identical timing to Mini-V3.
 
using TracePoint = fl::tuple<const char*, int, fl::u32>
 A structure to hold source trace information.
 
using true_type = integral_constant<bool, true>
 
typedef fl::u64 u64
 
typedef unsigned char u8
 
template<int DATA_PIN, EOrder RGB_ORDER, template< int, typename, EOrder > class CLOCKLESS_CONTROLLER>
using UCS7604Controller16bit1600T = UCS7604ControllerT<DATA_PIN, RGB_ORDER, fl::UCS7604Mode::UCS7604_MODE_16BIT_1600KHZ, fl::TIMING_UCS7604_1600KHZ, CLOCKLESS_CONTROLLER>
 
template<int DATA_PIN, EOrder RGB_ORDER, template< int, typename, EOrder > class CLOCKLESS_CONTROLLER>
using UCS7604Controller16bitT = UCS7604ControllerT<DATA_PIN, RGB_ORDER, fl::UCS7604Mode::UCS7604_MODE_16BIT_800KHZ, fl::TIMING_UCS7604_800KHZ, CLOCKLESS_CONTROLLER>
 
template<int DATA_PIN, EOrder RGB_ORDER, template< int, typename, EOrder > class CLOCKLESS_CONTROLLER>
using UCS7604Controller8bitT = UCS7604ControllerT<DATA_PIN, RGB_ORDER, fl::UCS7604Mode::UCS7604_MODE_8BIT_800KHZ, fl::TIMING_UCS7604_800KHZ, CLOCKLESS_CONTROLLER>
 
template<int IntBits, int FracBits>
using ufixed_integer = fixed_point<IntBits, FracBits, Sign::UNSIGNED>
 
template<int IntBits, int FracBits>
using ufixed_point = ufixed_integer<IntBits, FracBits>
 
typedef unsigned int uint
 
typedef fl::u16 uint16_t
 
typedef fl::u32 uint32_t
 
typedef unsigned char uint8_t
 
typedef fl::uptr uintptr_t
 
template<typename T>
using underlying_type_t = typename underlying_type<T>::type
 
using Url = url
 
using vec2f = vec2<float>
 
using vec2i16 = vec2<i16>
 
using vec2u8 = vec2<fl::u8>
 
using vec3f = vec3<float>
 
template<typename T, fl::size INLINED_SIZE>
using vector_fixed = FixedVector<T, INLINED_SIZE>
 
template<typename T, fl::size INLINED_SIZE = 64>
using vector_inlined = VectorN<T, INLINED_SIZE>
 
using VideoImpl = video::VideoImpl
 
using VideoImplPtr = fl::shared_ptr<VideoImpl>
 
using WatchdogTimeoutCallback = void(*)(void* user_data)
 ISR-safe C function pointer callback for onTimeout().
 
using WS2812ChipsetTiming = TIMING_WS2812_800KHZ
 Convenience alias for WS2812 timing (commonly used name)
 
typedef u16(* XFunction) (u16 x, u16 length)
 
typedef u16(* XYFunction) (u16 x, u16 y, u16 width, u16 height)
 
using XYMapCallback = fl::u16 (*)(fl::u16 x, fl::u16 y, void *userData)
 
using XYMapPtr = shared_ptr<XYMap>
 
using XYRaster = XYRasterU8Sparse
 
using XYRasterSparse_CRGB = XYRasterSparse_RGB8
 

Enumerations

enum  { kRGBWDefaultColorTemp = 6000 }
 
enum  { kRGBWWDefaultWarmCct = 2700 , kRGBWWDefaultCoolCct = 6500 }
 Default warm / cool reference CCTs for built-in profiles. More...
 
enum class  AdcRange {
  Default = 0 , Range0_1V1 , Range0_1V5 , Range0_2V2 ,
  Range0_3V3 , Range0_5V , External
}
 ADC voltage range configuration. More...
 
enum class  AnimartrixAnim {
  RGB_BLOBS5 = 0 , RGB_BLOBS4 , RGB_BLOBS3 , RGB_BLOBS2 ,
  RGB_BLOBS , POLAR_WAVES , SLOW_FADE , ZOOM2 ,
  ZOOM , HOT_BLOB , SPIRALUS2 , SPIRALUS ,
  YVES , SCALEDEMO1 , LAVA1 , CALEIDO3 ,
  CALEIDO2 , CALEIDO1 , DISTANCE_EXPERIMENT , CENTER_FIELD ,
  WAVES , CHASING_SPIRALS , ROTATING_BLOB , RINGS ,
  COMPLEX_KALEIDO , COMPLEX_KALEIDO_2 , COMPLEX_KALEIDO_3 , COMPLEX_KALEIDO_4 ,
  COMPLEX_KALEIDO_5 , COMPLEX_KALEIDO_6 , WATER , PARAMETRIC_WATER ,
  MODULE_EXPERIMENT1 , MODULE_EXPERIMENT2 , MODULE_EXPERIMENT3 , MODULE_EXPERIMENT4 ,
  MODULE_EXPERIMENT5 , MODULE_EXPERIMENT6 , MODULE_EXPERIMENT7 , MODULE_EXPERIMENT8 ,
  MODULE_EXPERIMENT9 , MODULE_EXPERIMENT10 , MODULE_EXPERIMENT_SM1 , MODULE_EXPERIMENT_SM2 ,
  MODULE_EXPERIMENT_SM3 , MODULE_EXPERIMENT_SM4 , MODULE_EXPERIMENT_SM5 , MODULE_EXPERIMENT_SM6 ,
  MODULE_EXPERIMENT_SM8 , MODULE_EXPERIMENT_SM9 , MODULE_EXPERIMENT_SM10 , FLUFFY_BLOBS ,
  NUM_ANIMATIONS
}
 
enum class  BindError { NotFound , SignatureMismatch }
 
enum class  BumpShape : u8 { HalfSine , Gaussian }
 Shape function for NoiseBias triggers. More...
 
enum class  Bus : fl::u8 {
  AUTO = 0 , RMT , PARLIO , SPI ,
  I2S , I2S_SPI , LCD_RGB , LCD_SPI ,
  LCD_CLOCKLESS , UART , FLEX_IO , OBJECT_FLED ,
  LPUART , BIT_BANG , STUB
}
 Driver identifier for compile-time bus selection. More...
 
enum class  ButtonStrategy { kHighLowFloating , kPullUp , kPullDown }
 
enum class  ClocklessEncoder : u8 { CLOCKLESS_ENCODER_WS2812 = 0 , CLOCKLESS_ENCODER_UCS7604_8BIT , CLOCKLESS_ENCODER_UCS7604_16BIT , CLOCKLESS_ENCODER_UCS7604_16BIT_1600 }
 Identifies which encoder to use for clockless chipsets in the Channel API. More...
 
enum class  ConnectionState {
  DISCONNECTED , CONNECTING , CONNECTED , RECONNECTING ,
  CLOSED
}
 
enum class  DecodeError : u8 { OK = 0 , HIGH_ERROR_RATE , BUFFER_OVERFLOW , INVALID_ARGUMENT }
 Error codes for RX decoder operations. More...
 
enum class  DecodeResult {
  Success , NeedsMoreData , EndOfStream , Error ,
  UnsupportedFormat
}
 
enum class  DrawMode { DRAW_MODE_OVERWRITE , DRAW_MODE_BLEND , DRAW_MODE_BLEND_BY_MAX_BRIGHTNESS }
 
enum class  EaseType {
  EASE_NONE , EASE_IN_QUAD , EASE_OUT_QUAD , EASE_IN_OUT_QUAD ,
  EASE_IN_CUBIC , EASE_OUT_CUBIC , EASE_IN_OUT_CUBIC , EASE_IN_SINE ,
  EASE_OUT_SINE , EASE_IN_OUT_SINE
}
 
enum class  EOrder {
  RGB =0012 , RBG =0021 , GRB =0102 , GBR =0120 ,
  BRG =0201 , BGR =0210
}
 RGB color channel orderings, used when instantiating controllers to determine what order the controller should send data out in. More...
 
enum class  EOrderW {
  W3 = 0x3 , W2 = 0x2 , W1 = 0x1 , W0 = 0x0 ,
  WDefault = W3
}
 
enum class  EOrderWW : fl::u8 {
  WwWcEnd = 0x34 , WcWwEnd = 0x43 , WwWcStart = 0x01 , WcWwStart = 0x10 ,
  WWDefault = WwWcEnd
}
 White-byte ordering for 5-channel RGBWW output. More...
 
enum class  FiveBitGammaCorrectionMode { kFiveBitGammaCorrectionMode_Null = 0 , kFiveBitGammaCorrectionMode_BitShift = 1 }
 
enum class  fmtflags { dec = 0 , hex = 1 , oct = 2 }
 
enum  HSVHue {
  HUE_RED = 0 , HUE_ORANGE = 32 , HUE_YELLOW = 64 , HUE_GREEN = 96 ,
  HUE_AQUA = 128 , HUE_BLUE = 160 , HUE_PURPLE = 192 , HUE_PINK = 224
}
 Pre-defined hue values for hsv8 objects. More...
 
enum class  InputGamut : u8 {
  Native = 0 , Rec709 , Rec2020 , DciP3D65 ,
  DciP3D60
}
 
enum class  LaplacianStencil : u8 { FivePoint = 0 , NinePointIsotropic = 1 }
 
enum class  LogCategory : fl::u8 {
  PARLIO_ISR = 0 , PARLIO_MAIN = 1 , RMT_ISR = 2 , RMT_MAIN = 3 ,
  SPI_ISR = 4 , SPI_MAIN = 5 , AUDIO_ISR = 6 , AUDIO_MAIN = 7 ,
  INTERRUPT_ISR = 8 , INTERRUPT_MAIN = 9 , MAX_CATEGORIES = 10
}
 Logger category identifiers for registry-based access Each category has separate ISR and main thread loggers (SPSC requirement) More...
 
enum class  LogLevel : u8 {
  FL_LOG_LEVEL_NONE = 0 , FL_LOG_LEVEL_ERROR = 1 , FL_LOG_LEVEL_WARN = 2 , FL_LOG_LEVEL_INFO = 3 ,
  FL_LOG_LEVEL_DEBUG = 4
}
 Log level constants - higher values include more output Prefixed with FL_ to avoid macro collisions (e.g. More...
 
enum  memory_order {
  memory_order_relaxed , memory_order_acquire , memory_order_release , memory_order_acq_rel ,
  memory_order_seq_cst
}
 
enum class  PinMode { Input = 0 , Output , InputPullup , InputPulldown }
 Pin mode configuration. More...
 
enum class  PinValue { Low = 0 , High = 1 }
 Digital pin value. More...
 
enum class  PixelFormat { RGB565 , RGB888 , RGBA8888 , YUV420 }
 
enum class  RampPhase { Inactive , Rising , Plateau , Falling }
 
enum class  RemoteClearFlags : u8 {
  None = 0 , Results = 1 << 0 , Scheduled = 1 << 1 , Functions = 1 << 2 ,
  All = Results | Scheduled | Functions
}
 Flags for clearing Remote state (can be OR'd together) More...
 
enum class  ResetCause : fl::u8 {
  UNKNOWN = 0 , POWER_ON , BROWNOUT , EXTERNAL_PIN ,
  WATCHDOG , SOFTWARE , LOCKUP , DEBUGGER ,
  PANIC
}
 Cause of the previous boot. Call once early in setup(). More...
 
enum class  ResultError : u8 {
  OK , UNKNOWN , INVALID_ARGUMENT , OUT_OF_RANGE ,
  NOT_INITIALIZED , ALREADY_INITIALIZED , ALLOCATION_FAILED , TIMEOUT ,
  BUSY , NOT_SUPPORTED , IO_ERROR
}
 Generic error codes for expected type. More...
 
enum class  RGBW_MODE {
  kRGBWInvalid , kRGBWNullWhitePixel , kRGBWExactColors , kRGBWBoostedWhite ,
  kRGBWMaxBrightness , kRGBWColorimetric , kRGBWColorimetricBoosted , kRGBWUserFunction
}
 
enum class  RgbwLutInterp : u8 { Bilinear = 0 , Hermite = 1 }
 
enum class  RGBWW_MODE : fl::u8 { kRGBWWInvalid , kRGBWWColorimetric , kRGBWWColorimetricBoosted , kRGBWWUserFunction }
 RGB -> RGBWW conversion modes (issue #2558, Phase 3 of #2545). More...
 
enum class  RpcMode { SYNC , ASYNC , ASYNC_STREAM }
 
enum class  RxBackend : u8 {
  PLATFORM_DEFAULT = 0 , RMT = 1 , ISR = 2 , FLEXPWM = 3 ,
  FLEXIO = 4 , LPC_SCT_CAPTURE = 5
}
 
enum class  RxDeviceType : u8 {
  PLATFORM_DEFAULT = 0 , ISR = 1 , RMT = 2 , FLEXPWM = 3 ,
  FLEXIO = 4 , LPC_SCT_CAPTURE = 5
}
 RX device type enumeration. More...
 
enum class  RxWaitResult : u8 { SUCCESS = 0 , TIMEOUT = 1 , BUFFER_OVERFLOW = 2 }
 Result codes for RX wait() operations. More...
 
enum class  SampleMode { SAMPLE_NEAREST , SAMPLE_BILINEAR }
 Interpolation mode for sampling a 2D grid. More...
 
enum class  seek_dir { beg = 0 , cur = 1 , end = 2 }
 
enum class  Sign { SIGNED , UNSIGNED }
 
enum class  spi_output_mode_t : u8 { SPI_AUTO = 0 , SPI_HW , SPI_BITBANG , SPI_ISR }
 SPI output mode for multi-lane devices. More...
 
enum class  SpiChipset {
  LPD6803 , LPD8806 , WS2801 , WS2803 ,
  SM16716 , P9813 , APA102 , SK9822 ,
  SK9822HD , DOTSTAR , DOTSTARHD , APA102HD ,
  HD107 , HD107HD , HD108
}
 LED chipsets with SPI interface (clocked protocols) Modern type-safe enum class - prefer this for new code. More...
 
enum class  SpiParallelMode : u8 { AUTO = 0 , ISR_ASYNC , BITBANG_BLOCKING }
 Parallel device execution modes. More...
 
enum class  SuperSample { SUPER_SAMPLE_NONE = 1 , SUPER_SAMPLE_2X = 2 , SUPER_SAMPLE_4X = 4 , SUPER_SAMPLE_8X = 8 }
 
enum  TGradientDirectionCode { FORWARD_HUES , BACKWARD_HUES , SHORTEST_HUES , LONGEST_HUES }
 Hue direction for calculating fill gradients. More...
 
enum class  U8EasingFunction { WAVE_U8_MODE_LINEAR , WAVE_U8_MODE_SQRT }
 
enum class  UCS7604Mode { UCS7604_MODE_8BIT_800KHZ = 0x03 , UCS7604_MODE_16BIT_800KHZ = 0x8B , UCS7604_MODE_16BIT_1600KHZ = 0x9B }
 UCS7604 protocol configuration modes. More...
 

Functions

FL_OPTIMIZE_FUNCTION constexpr u32 _isqrt32_start (u32 x, u32 bit) FL_NOEXCEPT
 
FL_OPTIMIZE_FUNCTION constexpr u16 _isqrt32_step (u32 x, u32 result, u32 bit) FL_NOEXCEPT
 
FL_OPTIMIZE_FUNCTION constexpr u64 _isqrt64_start (u64 x, u64 bit) FL_NOEXCEPT
 
FL_OPTIMIZE_FUNCTION constexpr u32 _isqrt64_step (u64 x, u64 result, u64 bit) FL_NOEXCEPT
 
int abs (int x)
 
template<typename T>
constexprabs (T value) FL_NOEXCEPT
 
template<typename T>
constexpr enable_if< is_fixed_point< T >::value, T >::type abs (T x) FL_NOEXCEPT
 
double acos (double value) FL_NOEXCEPT
 
template<typename T>
enable_if< is_integral< T >::value, float >::type acos (T value) FL_NOEXCEPT
 
template<typename T>
enable_if< is_fixed_point< T >::value, T >::type acos (T x) FL_NOEXCEPT
 
double acos_impl_double (double value)
 
float acos_impl_float (float value)
 
float acosf (float value) FL_NOEXCEPT
 
float add (float &a, float &b)
 
FASTLED_FORCE_INLINE fl::i32 add_fp (fl::i32 a, fl::i32 b)
 
void * aligned_alloc (fl::size_t alignment, fl::size_t size)
 
void aligned_free (void *ptr)
 
template<typename T, typename A, typename... Args>
shared_ptr< T > allocate_shared (const A &alloc, Args &&... args)
 
bool almost_equal (double a, double b) FL_NOEXCEPT
 
bool almost_equal (float a, float b) FL_NOEXCEPT
 
template<typename T, typename U>
constexpr bool almost_equal (T a, T b, U tolerance) FL_NOEXCEPT
 
u16 analogRead (int pin)
 Read analog value from pin.
 
void analogWrite (int pin, u16 val)
 Write analog value to pin (PWM)
 
void analogWrite16 (int pin, u16 val)
 Alias for setPwm16 - Set PWM duty cycle with 16-bit resolution.
 
static void append_u64_decimal (fl::string &out, fl::u64 value) FL_NOEXCEPT
 
CRGB applyGamma_video (const CRGB &orig, float gamma)
 
CRGB applyGamma_video (const CRGB &orig, float gammaR, float gammaG, float gammaB)
 
fl::u8 applyGamma_video (fl::u8 brightness, float gamma)
 
template<typename T, fl::size Extent>
span< const fl::u8,(Extent==dynamic_extent) ? dynamic_extent :(Extent *sizeof(T))> as_bytes (const span< T, Extent > &s) FL_NOEXCEPT
 
template<typename T, fl::size Extent>
span< fl::u8,(Extent==dynamic_extent) ? dynamic_extent :(Extent *sizeof(T))> as_writable_bytes (span< T, Extent > &s) FL_NOEXCEPT
 
double asin (double value) FL_NOEXCEPT
 
template<typename T>
enable_if< is_integral< T >::value, float >::type asin (T value) FL_NOEXCEPT
 
template<typename T>
enable_if< is_fixed_point< T >::value, T >::type asin (T x) FL_NOEXCEPT
 
double asin_impl_double (double value)
 
float asin_impl_float (float value)
 
float asinf (float value) FL_NOEXCEPT
 
constexpr asset_ref asset (const char *path) FL_NOEXCEPT
 Construct an asset handle from a relative sketch path at runtime.
 
template<fl::size_t N, typename T>
const T * assume_aligned (const T *ptr) FL_NOEXCEPT
 
template<fl::size_t N, typename T>
T * assume_aligned (T *ptr) FL_NOEXCEPT
 
void async_log_service ()
 
double atan (double value) FL_NOEXCEPT
 
template<typename T>
enable_if< is_integral< T >::value, float >::type atan (T value) FL_NOEXCEPT
 
template<typename T>
enable_if< is_fixed_point< T >::value, T >::type atan (T x) FL_NOEXCEPT
 
double atan2 (double y, double x) FL_NOEXCEPT
 
template<typename T>
enable_if< is_fixed_point< T >::value, T >::type atan2 (T y, T x) FL_NOEXCEPT
 
template<typename T>
enable_if< is_integral< T >::value, float >::type atan2 (T y, T x) FL_NOEXCEPT
 
double atan2_impl_double (double y, double x)
 
float atan2_impl_float (float y, float x)
 
float atan2f (float y, float x) FL_NOEXCEPT
 
double atan_impl_double (double value)
 
float atan_impl_float (float value)
 
float atanf (float value) FL_NOEXCEPT
 
int atoi (const char *str)
 
long atol (const char *str)
 
int available ()
 
template<typename Container>
back_insert_iterator< Container > back_inserter (Container &c) FL_NOEXCEPT
 Helper function to create a back_insert_iterator.
 
fl::vector< fl::u8base64_decode (const fl::string &encoded)
 
fl::string base64_encode (fl::span< const fl::u8 > data)
 
LIB8STATIC u16 beat16 (accum88 beats_per_minute, u32 timebase=0) FL_NOEXCEPT
 Generates a 16-bit "sawtooth" wave at a given BPM.
 
LIB8STATIC u8 beat8 (accum88 beats_per_minute, u32 timebase=0) FL_NOEXCEPT
 Generates an 8-bit "sawtooth" wave at a given BPM.
 
LIB8STATIC u16 beat88 (accum88 beats_per_minute_88, u32 timebase=0) FL_NOEXCEPT
 Generates a 16-bit "sawtooth" wave at a given BPM, with BPM specified in Q8.8 fixed-point format.
 
LIB8STATIC u16 beatsin16 (accum88 beats_per_minute, u16 lowest=0, u16 highest=65535, u32 timebase=0, u16 phase_offset=0) FL_NOEXCEPT
 Generates a 16-bit sine wave at a given BPM that oscillates within a given range.
 
LIB8STATIC u8 beatsin8 (accum88 beats_per_minute, u8 lowest=0, u8 highest=255, u32 timebase=0, u8 phase_offset=0) FL_NOEXCEPT
 Generates an 8-bit sine wave at a given BPM that oscillates within a given range.
 
LIB8STATIC u16 beatsin88 (accum88 beats_per_minute_88, u16 lowest=0, u16 highest=65535, u32 timebase=0, u16 phase_offset=0) FL_NOEXCEPT
 Generates a 16-bit sine wave at a given BPM that oscillates within a given range.
 
template<typename Container>
constexpr auto begin (const Container &c) -> decltype(c.begin())
 
template<typename Container>
constexpr auto begin (Container &c) -> decltype(c.begin())
 
template<typename T, fl::size N>
constexpr T * begin (T(&array)[N]) FL_NOEXCEPT
 
u8 bilinearInterpolate (u8 v00, u8 v10, u8 v01, u8 v11, u16 dx, u16 dy)
 
u8 bilinearInterpolatePowerOf2 (u8 v00, u8 v10, u8 v01, u8 v11, u8 dx, u8 dy)
 
template<typename To, typename From>
To bit_cast (const From &from) FL_NOEXCEPT
 
template<typename To>
const To * bit_cast_ptr (const void *storage) FL_NOEXCEPT
 
template<typename To>
To * bit_cast_ptr (void *storage) FL_NOEXCEPT
 
CHSV blend (const CHSV &p1, const CHSV &p2, fract8 amountOfP2, TGradientDirectionCode directionCode)
 
CHSVblend (const CHSV *src1, const CHSV *src2, CHSV *dest, fl::u16 count, fract8 amountOfsrc2, TGradientDirectionCode directionCode)
 
CRGB blend (const CRGB &p1, const CRGB &p2, fract8 amountOfP2)
 
CRGBblend (const CRGB *src1, const CRGB *src2, CRGB *dest, fl::u16 count, fract8 amountOfsrc2)
 
void blur1d (CRGB *leds, u16 numLeds, fract8 blur_amount) FL_NOEXCEPT
 
void blur1d (fl::span< CRGB > leds, fract8 blur_amount) FL_NOEXCEPT
 
void blur2d (CRGB *leds, u8 width, u8 height, fract8 blur_amount, const XYMap &xymap) FL_NOEXCEPT
 
void blur2d (fl::span< CRGB > leds, u8 width, u8 height, fract8 blur_amount, const XYMap &xymap) FL_NOEXCEPT
 
void blur2d (gfx::Canvas< CRGB > &canvas, alpha8 blur_amount) FL_NOEXCEPT
 
void blurColumns (CRGB *leds, u8 width, u8 height, fract8 blur_amount, const XYMap &xymap) FL_NOEXCEPT
 
void blurColumns (fl::span< CRGB > leds, u8 width, u8 height, fract8 blur_amount, const XYMap &xymap) FL_NOEXCEPT
 
void blurColumns (gfx::Canvas< CRGB > &canvas, alpha8 blur_amount) FL_NOEXCEPT
 
FL_DISABLE_WARNING_POP void blurRows (CRGB *leds, u8 width, u8 height, fract8 blur_amount, const XYMap &xymap) FL_NOEXCEPT
 
void blurRows (fl::span< CRGB > leds, u8 width, u8 height, fract8 blur_amount, const XYMap &xymap) FL_NOEXCEPT
 
void blurRows (gfx::Canvas< CRGB > &canvas, alpha8 blur_amount) FL_NOEXCEPT
 
LIB8STATIC u16 bseconds16 () FL_NOEXCEPT
 Returns the current time-since-boot in "binary seconds", which are actually 1024/1000 of a second long.
 
template<typename OutputIterator>
void buildUCS7604Preamble (OutputIterator out, UCS7604Mode mode, u8 r_current, u8 g_current, u8 b_current, u8 w_current)
 Build UCS7604 preamble (15 bytes)
 
FL_OPTIMIZE_FUNCTION Wave3BitExpansionLut buildWave3ExpansionLUT (const ChipsetTiming &timing)
 Build a Wave3BitExpansionLut from chipset timing data.
 
Wave8ByteExpansionLut buildWave8ByteExpansionLUT (const Wave8BitExpansionLut &nibble)
 Build a byte-indexed expansion LUT (#2526) from the nibble LUT.
 
FL_OPTIMIZE_FUNCTION Wave8BitExpansionLut buildWave8ExpansionLUT (const ChipsetTiming &timing)
 Build a Wave8BitExpansionLut from chipset timing data.
 
template<fl::Bus B>
void busKeepAlive () FL_NOEXCEPT
 
const char * busName (Bus b) FL_NOEXCEPT
 Canonical driver-name string for a Bus value.
 
void calculate_oscillators (oscillators &timings, modulators &move, fl::u32 current_time, float speed_factor)
 
FASTLED_FORCE_INLINE u32 calculate_transpose_buffer_size (u16 num_leds, u8 bytes_per_led) FL_NOEXCEPT
 Calculate output buffer size needed for transposed data.
 
constexpr fl::u16 calculateCorkscrewHeight (float totalTurns, fl::u16 numLeds)
 
constexpr fl::u16 calculateCorkscrewWidth (float totalTurns, fl::u16 numLeds)
 
void * calloc (size_t nmemb, size_t size)
 
FL_OPTIMIZE_FUNCTION bool canUseWave3 (const ChipsetTiming &timing)
 Check if a chipset timing is eligible for wave3 encoding.
 
double ceil (double value) FL_NOEXCEPT
 
template<typename T>
enable_if< is_integral< T >::value, float >::type ceil (T value) FL_NOEXCEPT
 
template<typename T>
enable_if< ceil_detail::has_static_ceil< T >::value, decltype(T::ceil(declval< T >()))>::type ceil (T value) FL_NOEXCEPT
 
template<typename T>
constexpr enable_if< is_fixed_point< T >::value, T >::type ceil (T x) FL_NOEXCEPT
 
constexpr int ceil_constexpr (float value) FL_NOEXCEPT
 
double ceil_impl_double (double value)
 
float ceil_impl_float (float value)
 
float ceilf (float value) FL_NOEXCEPT
 
ChannelManagerchannelManager () FL_NOEXCEPT
 Get the global ChannelManager singleton instance.
 
static int charToDigit (char c)
 
istream_realcin_real ()
 
template<typename T>
FL_DISABLE_WARNING_POP FASTLED_FORCE_INLINEclamp (T value, T lo, T hi) FL_NOEXCEPT
 
template<typename T>
constexpr enable_if< is_fixed_point< T >::value, T >::type clamp (T x, T lo, T hi) FL_NOEXCEPT
 
template<typename Container>
void clear (Container &container)
 
template<int N>
void clear (CRGB(&arr)[N])
 
template<typename T>
void clear (Grid< T > &grid)
 
void clear (Leds &leds)
 
template<fl::size W, fl::size H>
void clear (LedsXY< W, H > &leds)
 
void clear_errno ()
 
void clearerr (FILE *file)
 Clear file error indicators.
 
u16 cled_contoller_size () FL_NOEXCEPT
 Get the size of the CLEDController object for introspection.
 
float colorburn (float &a, float &b)
 
FASTLED_FORCE_INLINE fl::i32 colorburn_fp (fl::i32 a, fl::i32 b)
 
float colordodge (float &a, float &b)
 
FASTLED_FORCE_INLINE fl::i32 colordodge_fp (fl::i32 a, fl::i32 b)
 
CHSV ColorFromPalette (const CHSVPalette16 &pal, fl::u8 index, fl::u8 brightness, TBlendType blendType)
 
CHSV ColorFromPalette (const CHSVPalette256 &pal, fl::u8 index, fl::u8 brightness, TBlendType)
 
CHSV ColorFromPalette (const CHSVPalette32 &pal, fl::u8 index, fl::u8 brightness, TBlendType blendType)
 
CRGB ColorFromPalette (const CRGBPalette16 &pal, fl::u8 index, fl::u8 brightness, TBlendType blendType)
 
CRGB ColorFromPalette (const CRGBPalette256 &pal, fl::u8 index, fl::u8 brightness, TBlendType)
 
CRGB ColorFromPalette (const CRGBPalette32 &pal, fl::u8 index, fl::u8 brightness, TBlendType blendType)
 
CRGB ColorFromPalette (const TProgmemRGBPalette16 &pal, fl::u8 index, fl::u8 brightness, TBlendType blendType)
 
CRGB ColorFromPalette (const TProgmemRGBPalette32 &pal, fl::u8 index, fl::u8 brightness, TBlendType blendType)
 
CRGB ColorFromPaletteExtended (const CRGBPalette16 &pal, fl::u16 index, fl::u8 brightness, TBlendType blendType)
 
CRGB ColorFromPaletteExtended (const CRGBPalette256 &pal, fl::u16 index, fl::u8 brightness, TBlendType blendType)
 
CRGB ColorFromPaletteExtended (const CRGBPalette32 &pal, fl::u16 index, fl::u8 brightness, TBlendType blendType)
 
CRGB ColorFromPaletteExtended (const TProgmemRGBPalette16 &pal, fl::u16 index, fl::u8 brightness, TBlendType blendType)
 
CRGB ColorFromPaletteExtended (const TProgmemRGBPalette32 &pal, fl::u16 index, fl::u8 brightness, TBlendType blendType)
 
CRGB16 ColorFromPaletteHD (const CRGBPalette16 &pal, fl::u16 index, fl::u8x8 brightness, TBlendType blendType)
 
CRGB16 ColorFromPaletteHD (const CRGBPalette256 &pal, fl::u16 index, fl::u8x8 brightness, TBlendType blendType)
 
CRGB16 ColorFromPaletteHD (const CRGBPalette32 &pal, fl::u16 index, fl::u8x8 brightness, TBlendType blendType)
 
CRGB16 ColorFromPaletteHD (const TProgmemRGBPalette16 &pal, fl::u16 index, fl::u8x8 brightness, TBlendType blendType)
 
CRGB16 ColorFromPaletteHD (const TProgmemRGBPalette32 &pal, fl::u16 index, fl::u8x8 brightness, TBlendType blendType)
 
void configureAsyncLogService (u32 interval_ms=16, fl::size messages_per_tick=5) FL_NOEXCEPT
 Configure async logger automatic servicing task.
 
template<typename T, typename Y>
shared_ptr< T > const_pointer_cast (const shared_ptr< Y > &other) FL_NOEXCEPT
 
void convert_fastled_timings_to_timedeltas (u16 t1_in, u16 t2_in, u16 t3_in, u16 *out_t0h, u16 *out_t0l, u16 *out_t1h, u16 *out_t1l) FL_NOEXCEPT
 
double cos (double value) FL_NOEXCEPT
 
template<typename T>
enable_if< is_fixed_point< T >::value, T >::type cos (T angle) FL_NOEXCEPT
 
template<typename T>
enable_if< is_integral< T >::value, float >::type cos (T value) FL_NOEXCEPT
 
FASTLED_FORCE_INLINE i16 cos16lut (u16 angle) FL_NOEXCEPT
 
FASTLED_FORCE_INLINE i32 cos32 (u32 angle) FL_NOEXCEPT
 
double cos_impl_double (double value)
 
float cos_impl_float (float value)
 
float cosf (float value) FL_NOEXCEPT
 
fl::shared_ptr< IFastLEDcreateFastLEDController (u8 controllerIndex=0)
 Create a FastLED controller adapter.
 
fl::function< fl::optional< fl::json >()> createSerialRequestSource (const char *prefix="")
 Create a JSON-RPC RequestSource that reads from fl:: serial input.
 
fl::function< void(const fl::json &)> createSerialResponseSink (const char *prefix="REMOTE: ")
 Create a JSON-RPC ResponseSink that writes to fl:: serial output.
 
fl::pair< fl::function< fl::optional< fl::json >()>, fl::function< void(const fl::json &)> > createSerialTransport (const char *responsePrefix="REMOTE: ", const char *requestPrefix="")
 Create RequestSource and ResponseSink pair for serial I/O.
 
template<typename T>
add_rvalue_reference< T >::type declval () FL_NOEXCEPT
 
constexpr int default_bus_priority (Bus b) FL_NOEXCEPT
 Default priority assigned to a Bus when registered with the manager.
 
memory_resourcedefault_memory_resource () FL_NOEXCEPT
 Get the default memory resource (wraps fl::Malloc / fl::Free / fl::realloc).
 
math::randomdefault_random () FL_NOEXCEPT
 Global default random number generator instance.
 
template<typename T>
constexprdegrees (T rad) FL_NOEXCEPT
 
template<int Dummy = 0>
void delay (u32 ms, bool run_async=true) FL_NOEXCEPT
 Public delay wrapper that keeps bare Arduino delay() preferred after using fl::delay; while still allowing explicit fl::delay() calls.
 
template<cycle_t CYCLES>
void delaycycles () FL_NOEXCEPT
 Forward declaration of delaycycles template.
 
template<>
FASTLED_FORCE_INLINE void delaycycles< 0 > () FL_NOEXCEPT
 
template<>
void delaycycles< 1 > () FL_NOEXCEPT
 
template<>
void delaycycles< 10 > () FL_NOEXCEPT
 
template<>
void delaycycles< 11 > () FL_NOEXCEPT
 
template<>
void delaycycles< 12 > () FL_NOEXCEPT
 
template<>
void delaycycles< 13 > () FL_NOEXCEPT
 
template<>
void delaycycles< 14 > () FL_NOEXCEPT
 
template<>
void delaycycles< 15 > () FL_NOEXCEPT
 
template<>
void delaycycles< 16 > () FL_NOEXCEPT
 
template<>
void delaycycles< 17 > () FL_NOEXCEPT
 
template<>
void delaycycles< 18 > () FL_NOEXCEPT
 
template<>
void delaycycles< 19 > () FL_NOEXCEPT
 
template<>
void delaycycles< 2 > () FL_NOEXCEPT
 
template<>
void delaycycles< 20 > () FL_NOEXCEPT
 
template<>
void delaycycles< 21 > () FL_NOEXCEPT
 
template<>
void delaycycles< 22 > () FL_NOEXCEPT
 
template<>
void delaycycles< 23 > () FL_NOEXCEPT
 
template<>
void delaycycles< 24 > () FL_NOEXCEPT
 
template<>
void delaycycles< 25 > () FL_NOEXCEPT
 
template<>
void delaycycles< 26 > () FL_NOEXCEPT
 
template<>
void delaycycles< 27 > () FL_NOEXCEPT
 
template<>
void delaycycles< 28 > () FL_NOEXCEPT
 
template<>
void delaycycles< 29 > () FL_NOEXCEPT
 
template<>
void delaycycles< 3 > () FL_NOEXCEPT
 
template<>
void delaycycles< 30 > () FL_NOEXCEPT
 
template<>
void delaycycles< 31 > () FL_NOEXCEPT
 
template<>
void delaycycles< 32 > () FL_NOEXCEPT
 
template<>
void delaycycles< 33 > () FL_NOEXCEPT
 
template<>
void delaycycles< 34 > () FL_NOEXCEPT
 
template<>
void delaycycles< 35 > () FL_NOEXCEPT
 
template<>
void delaycycles< 36 > () FL_NOEXCEPT
 
template<>
void delaycycles< 37 > () FL_NOEXCEPT
 
template<>
void delaycycles< 38 > () FL_NOEXCEPT
 
template<>
void delaycycles< 39 > () FL_NOEXCEPT
 
template<>
void delaycycles< 4 > () FL_NOEXCEPT
 
template<>
void delaycycles< 40 > () FL_NOEXCEPT
 
template<>
void delaycycles< 41 > () FL_NOEXCEPT
 
template<>
void delaycycles< 42 > () FL_NOEXCEPT
 
template<>
void delaycycles< 43 > () FL_NOEXCEPT
 
template<>
void delaycycles< 44 > () FL_NOEXCEPT
 
template<>
void delaycycles< 45 > () FL_NOEXCEPT
 
template<>
void delaycycles< 46 > () FL_NOEXCEPT
 
template<>
void delaycycles< 47 > () FL_NOEXCEPT
 
template<>
void delaycycles< 48 > () FL_NOEXCEPT
 
template<>
void delaycycles< 49 > () FL_NOEXCEPT
 
template<>
void delaycycles< 5 > () FL_NOEXCEPT
 
template<>
void delaycycles< 50 > () FL_NOEXCEPT
 
template<>
void delaycycles< 6 > () FL_NOEXCEPT
 
template<>
void delaycycles< 7 > () FL_NOEXCEPT
 
template<>
void delaycycles< 8 > () FL_NOEXCEPT
 
template<>
void delaycycles< 9 > () FL_NOEXCEPT
 
template<>
FASTLED_FORCE_INLINE void delaycycles<-1 > () FL_NOEXCEPT
 
template<>
FASTLED_FORCE_INLINE void delaycycles<-10 > () FL_NOEXCEPT
 
template<>
FASTLED_FORCE_INLINE void delaycycles<-2 > () FL_NOEXCEPT
 
template<>
FASTLED_FORCE_INLINE void delaycycles<-3 > () FL_NOEXCEPT
 
template<>
FASTLED_FORCE_INLINE void delaycycles<-4 > () FL_NOEXCEPT
 
template<>
FASTLED_FORCE_INLINE void delaycycles<-5 > () FL_NOEXCEPT
 
template<>
FASTLED_FORCE_INLINE void delaycycles<-6 > () FL_NOEXCEPT
 
template<>
FASTLED_FORCE_INLINE void delaycycles<-7 > () FL_NOEXCEPT
 
template<>
FASTLED_FORCE_INLINE void delaycycles<-8 > () FL_NOEXCEPT
 
template<>
FASTLED_FORCE_INLINE void delaycycles<-9 > () FL_NOEXCEPT
 
template<cycle_t CYCLES>
void delaycycles_min1 () FL_NOEXCEPT
 A variant of delaycycles that will always delay at least one cycle.
 
void delayMicroseconds (u32 us) FL_NOEXCEPT
 Delay for a given number of microseconds.
 
void delayMillis (u32 ms) FL_NOEXCEPT
 Delay for a given number of milliseconds (legacy - no async pumping)
 
void delayMs (u32 ms, bool run_async=true) FL_NOEXCEPT
 Shorter alias for delay with optional async task pumping.
 
template<fl::u32 NS>
FASTLED_FORCE_INLINE void delayNanoseconds () FL_NOEXCEPT
 Delay for a compile-time constant number of nanoseconds.
 
void delayNanoseconds (fl::u32 ns) FL_NOEXCEPT
 Delay for a runtime number of nanoseconds.
 
void delayNanoseconds (fl::u32 ns, fl::u32 hz) FL_NOEXCEPT
 Delay for a runtime number of nanoseconds with explicit clock frequency.
 
template<u32 NS>
void delayNs () FL_NOEXCEPT
 Shorter alias for delayNanoseconds (template version)
 
void delayNs (u32 ns) FL_NOEXCEPT
 Shorter alias for delayNanoseconds (runtime version)
 
void delayNs (u32 ns, u32 hz) FL_NOEXCEPT
 Shorter alias for delayNanoseconds with explicit clock frequency.
 
void delayUs (u32 us) FL_NOEXCEPT
 Shorter alias for delayMicroseconds.
 
void digitalMultiWrite16 (const Pins16 &pins, fl::span< const u16 > pin_data)
 Convenience free function — creates a temporary DigitalMultiWrite16, initializes it, and writes.
 
void digitalMultiWrite8 (const Pins8 &pins, fl::span< const u8 > pin_data)
 Convenience free function — creates a temporary DigitalMultiWrite8, initializes it, and writes.
 
PinValue digitalRead (int pin)
 Read digital value from pin.
 
void digitalWrite (int pin, PinValue val)
 Write digital value to pin.
 
void disable_rgbw_colorimetric_lut () FL_NOEXCEPT
 
LIB8STATIC u16 div1024_32_16 (u32 in32) FL_NOEXCEPT
 Helper routine to divide a 32-bit value by 1024, returning only the low 16 bits.
 
void downscale (const CRGB *src, const XYMap &srcXY, CRGB *dst, const XYMap &dstXY)
 
void downscaleArbitrary (const CRGB *src, const XYMap &srcXY, CRGB *dst, const XYMap &dstXY)
 
void downscaleHalf (const CRGB *src, const XYMap &srcXY, CRGB *dst, const XYMap &dstXY)
 
void downscaleHalf (const CRGB *src, fl::u16 srcWidth, fl::u16 srcHeight, CRGB *dst)
 
void drawSquare (void *, uint16_t, uint16_t, int, int, uint32_t, uint32_t)
 
void ease16 (EaseType type, u16 *src, u16 *dst, u16 count) FL_NOEXCEPT
 
u16 ease16 (EaseType type, u16 i) FL_NOEXCEPT
 
void ease8 (EaseType type, u8 *src, u8 *dst, u8 count) FL_NOEXCEPT
 
u8 ease8 (EaseType type, u8 i) FL_NOEXCEPT
 
u16 easeInCubic16 (u16 i) FL_NOEXCEPT
 16-bit cubic ease-in function Takes an input value 0-65535 and returns an eased value 0-65535
 
u8 easeInCubic8 (u8 i) FL_NOEXCEPT
 8-bit cubic ease-in function Takes an input value 0-255 and returns an eased value 0-255 More pronounced acceleration than quadratic
 
u16 easeInOutCubic16 (u16 i) FL_NOEXCEPT
 16-bit cubic ease-in/ease-out function Takes an input value 0-65535 and returns an eased value 0-65535
 
u8 easeInOutCubic8 (u8 i) FL_NOEXCEPT
 8-bit cubic ease-in/ease-out function Takes an input value 0-255 and returns an eased value 0-255 More pronounced easing curve than quadratic
 
u16 easeInOutQuad16 (u16 i) FL_NOEXCEPT
 16-bit quadratic ease-in/ease-out function Takes an input value 0-65535 and returns an eased value 0-65535
 
u8 easeInOutQuad8 (u8 i) FL_NOEXCEPT
 8-bit quadratic ease-in/ease-out function Takes an input value 0-255 and returns an eased value 0-255 The curve starts slow, accelerates in the middle, then slows down again
 
u16 easeInOutSine16 (u16 i) FL_NOEXCEPT
 16-bit sine ease-in/ease-out function Takes an input value 0-65535 and returns an eased value 0-65535
 
u8 easeInOutSine8 (u8 i) FL_NOEXCEPT
 8-bit sine ease-in/ease-out function Takes an input value 0-255 and returns an eased value 0-255 Smooth sinusoidal acceleration and deceleration
 
u16 easeInQuad16 (u16 i) FL_NOEXCEPT
 16-bit quadratic ease-in function Takes an input value 0-65535 and returns an eased value 0-65535
 
u8 easeInQuad8 (u8 i) FL_NOEXCEPT
 8-bit quadratic ease-in function Takes an input value 0-255 and returns an eased value 0-255 The curve starts slow and accelerates (ease-in only)
 
u16 easeInSine16 (u16 i) FL_NOEXCEPT
 16-bit sine ease-in function Takes an input value 0-65535 and returns an eased value 0-65535
 
u8 easeInSine8 (u8 i) FL_NOEXCEPT
 8-bit sine ease-in function Takes an input value 0-255 and returns an eased value 0-255 Smooth sinusoidal acceleration
 
u16 easeOutCubic16 (u16 i) FL_NOEXCEPT
 16-bit cubic ease-out function Takes an input value 0-65535 and returns an eased value 0-65535
 
u8 easeOutCubic8 (u8 i) FL_NOEXCEPT
 8-bit cubic ease-out function Takes an input value 0-255 and returns an eased value 0-255 More pronounced deceleration than quadratic
 
u16 easeOutQuad16 (u16 i) FL_NOEXCEPT
 16-bit quadratic ease-out function Takes an input value 0-65535 and returns an eased value 0-65535
 
u8 easeOutQuad8 (u8 i) FL_NOEXCEPT
 8-bit quadratic ease-out function Takes an input value 0-255 and returns an eased value 0-255 The curve starts fast and decelerates (ease-out only)
 
u16 easeOutSine16 (u16 i) FL_NOEXCEPT
 16-bit sine ease-out function Takes an input value 0-65535 and returns an eased value 0-65535
 
u8 easeOutSine8 (u8 i) FL_NOEXCEPT
 8-bit sine ease-out function Takes an input value 0-255 and returns an eased value 0-255 Smooth sinusoidal deceleration
 
bool enable_rgbw_colorimetric_lut (int) FL_NOEXCEPT
 
bool enable_rgbw_colorimetric_lut (int, RgbwLutInterp) FL_NOEXCEPT
 
void enableAllDrivers () FL_NOEXCEPT
 Register every channel driver available on this platform with ChannelManager, restoring 3.10.3-style runtime driver selection.
 
template<Bus... Buses>
void enableDrivers () FL_NOEXCEPT
 Register the named drivers with ChannelManager for runtime selection.
 
template<typename InputIterator, typename OutputIterator>
void encodeAPA102 (InputIterator first, InputIterator last, OutputIterator out, u8 global_brightness=31) FL_NOEXCEPT
 Encode pixel data in APA102 format with global brightness.
 
template<typename InputIterator, typename OutputIterator>
FL_NO_INLINE_IF_AVR FL_OPTIMIZE_O2 void encodeAPA102_AutoBrightness (InputIterator first, InputIterator last, OutputIterator out) FL_NOEXCEPT
 Encode pixel data in APA102 format (auto-detected brightness from first pixel)
 
template<typename InputIterator, typename BrightnessIterator, typename OutputIterator>
void encodeAPA102_HD (InputIterator first, InputIterator last, BrightnessIterator brightness_first, OutputIterator out) FL_NOEXCEPT
 Encode pixel data in APA102 format with per-LED brightness.
 
template<typename InputIterator, typename OutputIterator>
void encodeHD108 (InputIterator first, InputIterator last, OutputIterator out, u8 global_brightness=255) FL_NOEXCEPT
 Encode pixel data in HD108 format with global brightness.
 
template<typename InputIterator, typename BrightnessIterator, typename OutputIterator>
void encodeHD108_HD (InputIterator first, InputIterator last, BrightnessIterator brightness_first, OutputIterator out) FL_NOEXCEPT
 Encode pixel data in HD108 format with per-LED brightness.
 
template<typename InputIterator, typename OutputIterator>
void encodeLPD6803 (InputIterator first, InputIterator last, OutputIterator out) FL_NOEXCEPT
 Encode pixel data in LPD6803 format.
 
template<typename InputIterator, typename OutputIterator>
void encodeLPD8806 (InputIterator first, InputIterator last, OutputIterator out) FL_NOEXCEPT
 Encode pixel data in LPD8806 format.
 
template<typename InputIterator, typename OutputIterator>
void encodeP9813 (InputIterator first, InputIterator last, OutputIterator out) FL_NOEXCEPT
 Encode pixel data in P9813 format.
 
template<typename TIMING>
constexpr ClocklessEncoder encoder_for () FL_NOEXCEPT
 Extract the encoder selector from a compile-time TIMING type.
 
template<typename InputIterator, typename OutputIterator>
void encodeSK9822 (InputIterator first, InputIterator last, OutputIterator out, u8 global_brightness=31) FL_NOEXCEPT
 Encode pixel data in SK9822 format with global brightness.
 
template<typename InputIterator, typename OutputIterator>
FL_NO_INLINE_IF_AVR void encodeSK9822_AutoBrightness (InputIterator first, InputIterator last, OutputIterator out) FL_NOEXCEPT
 Encode pixel data in SK9822 format (auto-detected brightness from first pixel)
 
template<typename InputIterator, typename BrightnessIterator, typename OutputIterator>
void encodeSK9822_HD (InputIterator first, InputIterator last, BrightnessIterator brightness_first, OutputIterator out) FL_NOEXCEPT
 Encode pixel data in SK9822 format with per-LED brightness.
 
template<typename InputIterator, typename OutputIterator>
void encodeSM16716 (InputIterator first, InputIterator last, OutputIterator out) FL_NOEXCEPT
 Encode pixel data in SM16716 format.
 
template<typename OutputIterator>
void encodeUCS7604 (PixelIterator &pixel_iter, size_t num_leds, OutputIterator out, UCS7604Mode mode, const UCS7604CurrentControl &current, bool is_rgbw, const Gamma8 *gamma=nullptr)
 Encode complete UCS7604 frame (preamble + padding + pixel data)
 
template<typename InputIterator, typename OutputIterator>
void encodeUCS7604_16bit_RGB (InputIterator first, InputIterator last, OutputIterator out, const Gamma8 &gamma)
 Encode RGB pixels in UCS7604 16-bit format with gamma correction.
 
template<typename InputIterator, typename OutputIterator>
void encodeUCS7604_16bit_RGBW (InputIterator first, InputIterator last, OutputIterator out, const Gamma8 &gamma)
 Encode RGBW pixels in UCS7604 16-bit format with gamma correction.
 
template<typename InputIterator, typename OutputIterator>
void encodeUCS7604_8bit_RGB (InputIterator first, InputIterator last, OutputIterator out)
 Encode RGB pixels in UCS7604 8-bit format.
 
template<typename InputIterator, typename OutputIterator>
void encodeUCS7604_8bit_RGBW (InputIterator first, InputIterator last, OutputIterator out)
 Encode RGBW pixels in UCS7604 8-bit format.
 
template<typename InputIterator, typename OutputIterator>
void encodeWS2801 (InputIterator first, InputIterator last, OutputIterator out) FL_NOEXCEPT
 Encode pixel data in WS2801/WS2803 format.
 
template<typename InputIterator, typename OutputIterator>
void encodeWS2803 (InputIterator first, InputIterator last, OutputIterator out) FL_NOEXCEPT
 Encode pixel data in WS2803 format (alias for WS2801)
 
template<typename InputIterator, typename OutputIterator>
void encodeWS2812 (InputIterator first, InputIterator last, OutputIterator out, const Rgbw &rgbw) FL_NOEXCEPT
 Encode pixel data in WS2812 format (automatic RGB/RGBW selection)
 
template<typename InputIterator, typename OutputIterator>
void encodeWS2812_RGB (InputIterator first, InputIterator last, OutputIterator out) FL_NOEXCEPT
 Encode 3-byte pixel data in WS2812 format.
 
template<typename InputIterator, typename OutputIterator>
void encodeWS2812_RGBW (InputIterator first, InputIterator last, OutputIterator out) FL_NOEXCEPT
 Encode 4-byte pixel data in WS2812 format.
 
template<typename InputIterator, typename OutputIterator>
void encodeWS2812_RGBWW (InputIterator first, InputIterator last, OutputIterator out) FL_NOEXCEPT
 Encode 5-byte pixel data in WS2812 format (issue #2558, RGBWW).
 
template<typename InputIterator, typename OutputIterator>
void encodeWS2816 (InputIterator first, InputIterator last, OutputIterator out)
 Encode 16-bit RGB pixel data into dual 8-bit RGB format for WS2816.
 
template<typename Container>
constexpr auto end (const Container &c) -> decltype(c.end())
 
template<typename Container>
constexpr auto end (Container &c) -> decltype(c.end())
 
template<typename T, fl::size N>
constexpr T * end (T(&array)[N]) FL_NOEXCEPT
 
template<typename Iterator1, typename Iterator2>
bool equal (Iterator1 first1, Iterator1 last1, Iterator2 first2) FL_NOEXCEPT
 
template<typename Iterator1, typename Iterator2, typename BinaryPredicate>
bool equal (Iterator1 first1, Iterator1 last1, Iterator2 first2, BinaryPredicate pred) FL_NOEXCEPT
 
template<typename Iterator1, typename Iterator2>
bool equal (Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2) FL_NOEXCEPT
 
template<typename Iterator1, typename Iterator2, typename BinaryPredicate>
bool equal (Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2, BinaryPredicate pred) FL_NOEXCEPT
 
template<typename Container1, typename Container2>
bool equal_container (const Container1 &c1, const Container2 &c2) FL_NOEXCEPT
 
template<typename Container1, typename Container2, typename BinaryPredicate>
bool equal_container (const Container1 &c1, const Container2 &c2, BinaryPredicate pred) FL_NOEXCEPT
 
void exit (int code)
 No-op exit function for embedded systems In embedded environments, calling exit is typically not meaningful, so this is a placeholder that does nothing.
 
double exp (double value) FL_NOEXCEPT
 
template<typename T>
enable_if< is_integral< T >::value, float >::type exp (T value) FL_NOEXCEPT
 
template<typename T>
enable_if< is_fixed_point< T >::value, T >::type exp (T x) FL_NOEXCEPT
 
double exp_impl_double (double value)
 
float exp_impl_float (float value)
 
float expf (float value) FL_NOEXCEPT
 
template<typename T>
enable_if< is_fixed_point< T >::value, T >::type expfp (T x) FL_NOEXCEPT
 
fl::vector< fl::u8extractH264NalUnits (fl::span< const fl::u8 > data, const Mp4TrackInfo &track, fl::string *error)
 
double fabs (double value) FL_NOEXCEPT
 
template<typename T>
enable_if< is_integral< T >::value, float >::type fabs (T value) FL_NOEXCEPT
 
double fabs_impl_double (double value)
 
float fabs_impl_float (float value)
 
float fabsf (float value) FL_NOEXCEPT
 
FASTLED_FORCE_INLINE float fade (float t)
 
void fade_raw (CRGB *leds, fl::u16 num_leds, fl::u8 fadeBy)
 
void fade_video (CRGB *leds, fl::u16 num_leds, fl::u8 fadeBy)
 
void fadeLightBy (CRGB *leds, fl::u16 num_leds, fl::u8 fadeBy)
 
void fadeToBlackBy (CRGB *leds, fl::u16 num_leds, fl::u8 fadeBy)
 
void fadeToColorBy (void *, uint16_t, uint32_t, uint8_t)
 
void fadeUsingColor (CRGB *leds, fl::u16 numLeds, const CRGB &colormask)
 
static u32 fast_hash32 (u32 x) FL_NOEXCEPT
 
static u32 fast_hash64 (u64 x) FL_NOEXCEPT
 
float fast_logf_approx (float x) FL_NOEXCEPT
 
 FASTLED_DEPRECATED ("Use blur2d(..., const XYMap& xymap) instead") FL_NOEXCEPT inline void blur2d(CRGB *leds
 
const char * fastled_file_offset (const char *file)
 
 FASTLED_SHARED_PTR (Animartrix)
 
 FASTLED_SHARED_PTR (ArchimedeanSpiralPath)
 
 FASTLED_SHARED_PTR (Blend2d)
 
 FASTLED_SHARED_PTR (CatmullRomParams)
 
 FASTLED_SHARED_PTR (CatmullRomPath)
 
 FASTLED_SHARED_PTR (Channel)
 
 FASTLED_SHARED_PTR (ChannelData)
 
 FASTLED_SHARED_PTR (CirclePath)
 
 FASTLED_SHARED_PTR (Cylon)
 
 FASTLED_SHARED_PTR (DemoReel100)
 
 FASTLED_SHARED_PTR (DigitalPinImpl)
 
 FASTLED_SHARED_PTR (FileSystem)
 
 FASTLED_SHARED_PTR (Fire2012)
 Simple one-dimensional fire animation function.
 
 FASTLED_SHARED_PTR (FlowField)
 
 FASTLED_SHARED_PTR (FlowFieldFloat)
 
 FASTLED_SHARED_PTR (FlowFieldFP)
 
 FASTLED_SHARED_PTR (Frame)
 
 FASTLED_SHARED_PTR (FsImpl)
 
 FASTLED_SHARED_PTR (Fx)
 
 FASTLED_SHARED_PTR (Fx2d)
 
 FASTLED_SHARED_PTR (Fx2dTo1d)
 
 FASTLED_SHARED_PTR (FxLayer)
 
 FASTLED_SHARED_PTR (GielisCurvePath)
 
 FASTLED_SHARED_PTR (HeartPath)
 
 FASTLED_SHARED_PTR (IDecoder)
 
 FASTLED_SHARED_PTR (LinePath)
 
 FASTLED_SHARED_PTR (LinePathParams)
 
 FASTLED_SHARED_PTR (Luminova)
 
 FASTLED_SHARED_PTR (Mp3Decoder)
 
 FASTLED_SHARED_PTR (NoisePalette)
 
 FASTLED_SHARED_PTR (NoiseWave)
 
 FASTLED_SHARED_PTR (Pacifica)
 
 FASTLED_SHARED_PTR (Particles1d)
 
 FASTLED_SHARED_PTR (PerlinParticlePunch)
 
 FASTLED_SHARED_PTR (PhyllotaxisPath)
 
 FASTLED_SHARED_PTR (PointPath)
 
 FASTLED_SHARED_PTR (Pride2015)
 
 FASTLED_SHARED_PTR (RedSquare)
 
 FASTLED_SHARED_PTR (RosePath)
 
 FASTLED_SHARED_PTR (RosePathParams)
 
 FASTLED_SHARED_PTR (RxChannel)
 
 FASTLED_SHARED_PTR (ScaleUp)
 
 FASTLED_SHARED_PTR (TimeFunction)
 
 FASTLED_SHARED_PTR (TimeWarp)
 
 FASTLED_SHARED_PTR (TransformFloatImpl)
 
 FASTLED_SHARED_PTR (TwinkleFox)
 
 FASTLED_SHARED_PTR (VideoFxWrapper)
 
 FASTLED_SHARED_PTR (VorbisDecoder)
 
 FASTLED_SHARED_PTR (WaveCrgbGradientMap)
 
 FASTLED_SHARED_PTR (WaveCrgbMap)
 
 FASTLED_SHARED_PTR (WaveCrgbMapDefault)
 
 FASTLED_SHARED_PTR (WaveFx)
 
 FASTLED_SHARED_PTR (XYPath)
 
 FASTLED_SHARED_PTR (XYPathFunction)
 
 FASTLED_SHARED_PTR (XYPathGenerator)
 
 FASTLED_SHARED_PTR (XYPathRenderer)
 
 FASTLED_SHARED_PTR_NO_FWD (LUT16)
 
 FASTLED_SHARED_PTR_NO_FWD (LUTXY16)
 
 FASTLED_SHARED_PTR_NO_FWD (LUTXYFLOAT)
 
 FASTLED_SHARED_PTR_NO_FWD (LUTXYZFLOAT)
 
 FASTLED_SHARED_PTR_NO_FWD (memorybuf)
 
 FASTLED_SHARED_PTR_STRUCT (ChannelConfig)
 
int fclose (FILE *file)
 Close a file.
 
int feof (FILE *file)
 Check for end-of-file.
 
int ferror (FILE *file)
 Check for file error.
 
int fflush (FILE *file)
 Flush file buffers.
 
template<typename Iterator, typename T>
void fill (Iterator first, Iterator last, const T &value) FL_NOEXCEPT
 
template<typename T>
void fill_gradient (T *targetArray, u16 numLeds, const CHSV &c1, const CHSV &c2, const CHSV &c3, const CHSV &c4, TGradientDirectionCode directionCode=SHORTEST_HUES) FL_NOEXCEPT
 Fill a range of LEDs with a smooth HSV gradient between four HSV colors.
 
template<typename T>
void fill_gradient (T *targetArray, u16 numLeds, const CHSV &c1, const CHSV &c2, const CHSV &c3, TGradientDirectionCode directionCode=SHORTEST_HUES) FL_NOEXCEPT
 Fill a range of LEDs with a smooth HSV gradient between three HSV colors.
 
template<typename T>
void fill_gradient (T *targetArray, u16 numLeds, const CHSV &c1, const CHSV &c2, TGradientDirectionCode directionCode=SHORTEST_HUES) FL_NOEXCEPT
 Fill a range of LEDs with a smooth HSV gradient between two HSV colors.
 
template<typename T>
void fill_gradient (T *targetArray, u16 startpos, CHSV startcolor, u16 endpos, CHSV endcolor, TGradientDirectionCode directionCode=SHORTEST_HUES) FL_NOEXCEPT
 Fill a range of LEDs with a smooth HSV gradient between two HSV colors.
 
void fill_gradient_RGB (CRGB *leds, u16 numLeds, const CRGB &c1, const CRGB &c2) FL_NOEXCEPT
 Fill a range of LEDs with a smooth RGB gradient between two RGB colors.
 
void fill_gradient_RGB (CRGB *leds, u16 numLeds, const CRGB &c1, const CRGB &c2, const CRGB &c3) FL_NOEXCEPT
 Fill a range of LEDs with a smooth RGB gradient between three RGB colors.
 
void fill_gradient_RGB (CRGB *leds, u16 numLeds, const CRGB &c1, const CRGB &c2, const CRGB &c3, const CRGB &c4) FL_NOEXCEPT
 Fill a range of LEDs with a smooth RGB gradient between four RGB colors.
 
void fill_gradient_RGB (CRGB *leds, u16 startpos, CRGB startcolor, u16 endpos, CRGB endcolor) FL_NOEXCEPT
 Fill a range of LEDs with a smooth RGB gradient between two RGB colors.
 
void fill_gradient_RGB (fl::span< CRGB > leds, const CRGB &c1, const CRGB &c2) FL_NOEXCEPT
 Fill a range of LEDs with a smooth RGB gradient between two RGB colors.
 
void fill_gradient_RGB (fl::span< CRGB > leds, const CRGB &c1, const CRGB &c2, const CRGB &c3) FL_NOEXCEPT
 Fill a range of LEDs with a smooth RGB gradient between two RGB colors.
 
void fill_gradient_RGB (fl::span< CRGB > leds, const CRGB &c1, const CRGB &c2, const CRGB &c3, const CRGB &c4) FL_NOEXCEPT
 Fill a range of LEDs with a smooth RGB gradient between two RGB colors.
 
void fill_rainbow (CHSV *targetArray, int numToFill, fl::u8 initialhue, fl::u8 deltahue=5) FL_NOEXCEPT
 Fill a range of LEDs with a rainbow of colors.
 
void fill_rainbow (CRGB *targetArray, int numToFill, fl::u8 initialhue, fl::u8 deltahue=5) FL_NOEXCEPT
 Fill a range of LEDs with a rainbow of colors.
 
void fill_rainbow (fl::span< CRGB > leds, fl::u8 initialhue, fl::u8 deltahue=5) FL_NOEXCEPT
 Fill a range of LEDs with a rainbow of colors.
 
void fill_rainbow_circular (CHSV *targetArray, int numToFill, fl::u8 initialhue, bool reversed=false) FL_NOEXCEPT
 Fill a range of LEDs with a rainbow of colors, so that the hues are continuous between the end of the strip and the beginning.
 
void fill_rainbow_circular (CRGB *targetArray, int numToFill, fl::u8 initialhue, bool reversed=false) FL_NOEXCEPT
 Fill a range of LEDs with a rainbow of colors, so that the hues are continuous between the end of the strip and the beginning.
 
void fill_rainbow_circular (fl::span< CRGB > leds, fl::u8 initialhue, bool reversed=false) FL_NOEXCEPT
 Fill a range of LEDs with a rainbow of colors, so that the hues are continuous between the end of the strip and the beginning.
 
void fill_solid (CHSV *targetArray, int numToFill, const CHSV &color) FL_NOEXCEPT
 Fill a range of LEDs with a solid color.
 
void fill_solid (CRGB *targetArray, int numToFill, const CRGB &color) FL_NOEXCEPT
 Fill a range of LEDs with a solid color.
 
void fill_solid (fl::span< CRGB > leds, const CRGB &color) FL_NOEXCEPT
 Fill a range of LEDs with a solid color.
 
template<typename Iterator, typename T>
Iterator find (Iterator first, Iterator last, const T &value) FL_NOEXCEPT
 
template<typename Iterator, typename UnaryPredicate>
Iterator find_if (Iterator first, Iterator last, UnaryPredicate pred) FL_NOEXCEPT
 
template<typename Iterator, typename UnaryPredicate>
Iterator find_if_not (Iterator first, Iterator last, UnaryPredicate pred) FL_NOEXCEPT
 
FL_OPTIMIZE_FUNCTION void five_bit_hd_gamma_bitshift (fl::span< const CRGB > colors, CRGB colors_scale, u8 global_brightness, fl::span< CRGB > out_colors, fl::span< u8 > out_power_5bit)
 
FL_OPTIMIZE_FUNCTION void five_bit_hd_gamma_bitshift (fl::span< const CRGB > colors, CRGB colors_scale, u8 global_brightness, fl::span< CRGBA5 > out)
 
template<typename... Types>
class FL_ALIGN_AS_T (max_align< Types... >::value) variant
 
 FL_ALIGN_PROGMEM (64) const u16 GAMMA_2_8_LUT[256]
 
struct FL_ALIGNAS (16) SinCos32_simd
 Combined sin+cos result for 4 angles (raw SIMD primitives)
 
struct FL_ALIGNAS (4) Wave3BitExpansionLut
 Lookup table for nibble-to-waveform expansion in wave3 format (32 bytes)
 
 FL_ALIGNAS (64) static const fl
 
struct FL_ALIGNAS (8) Wave8Byte
 Container for 8 packed wave symbols (8 bytes total)
 
template<typename T, fl::size N>
struct FL_ALIGNAS (alignof(T) > alignof(fl::uptr) ? alignof(T) :alignof(fl::uptr)) InlinedMemoryBlock
 
FL_DISABLE_WARNING_PUSH FL_DISABLE_WARNING (cast-align) void FL_OPTIMIZE_FUNCTION FL_IRAM transpose8x1_noinline(unsigned char *A
 
FL_DISABLE_WARNING_PUSH FL_DISABLE_WARNING (float-equal) FL_DISABLE_WARNING(double-promotion) FL_DISABLE_WARNING_FLOAT_CONVERSION FL_DISABLE_WARNING_SIGN_CONVERSION FL_DISABLE_WARNING_IMPLICIT_INT_CONVERSION FL_DISABLE_WARNING_FLOAT_CONVERSION namespace map_range_detail
 
FL_DISABLE_WARNING_PUSH FL_DISABLE_WARNING (sign-compare) FL_DISABLE_WARNING_FLOAT_CONVERSION FL_DISABLE_WARNING_SIGN_CONVERSION FL_DISABLE_WARNING_IMPLICIT_INT_CONVERSION template< typename T
 
 FL_STATIC_ASSERT (static_cast< fl::u8 >(Bus::STUB)==14, "Bus changed: add the new value to busName() in this file")
 
static bool float_bits_magnitude_exceeds_2_24 (u32 bits) FL_NOEXCEPT
 
double floor (double value) FL_NOEXCEPT
 
template<typename T>
enable_if< is_integral< T >::value, float >::type floor (T value) FL_NOEXCEPT
 
template<typename T>
enable_if< floor_detail::has_static_floor< T >::value, decltype(T::floor(declval< T >()))>::type floor (T value) FL_NOEXCEPT
 
template<typename T>
constexpr enable_if< is_fixed_point< T >::value, T >::type floor (T x) FL_NOEXCEPT
 
double floor_impl_double (double value)
 
float floor_impl_float (float value)
 
float floorf (float value) FL_NOEXCEPT
 
bool flush (u32 timeoutMs)
 
template<typename T>
enable_if<!is_integral< T >::value, T >::type fmod (T x, T y) FL_NOEXCEPT
 
template<typename T>
enable_if< is_integral< T >::value, float >::type fmod (T x, T y) FL_NOEXCEPT
 
template<>
double fmod< double > (double x, double y) FL_NOEXCEPT
 
double fmod_impl_double (double x, double y)
 
float fmod_impl_float (float x, float y)
 
float fmodf (float x, float y) FL_NOEXCEPT
 
FILEfopen (const char *path, const char *mode)
 Open a file.
 
fl::string format (const char *fmt)
 Format with no arguments.
 
template<typename... Args>
fl::string format (const char *fmt, const Args &... args)
 Format with variadic arguments.
 
fl::string formatJsonResponse (const fl::json &response, const char *prefix="")
 Serialize JSON response to a string.
 
template<typename T>
constexpr T && forward (typename remove_reference< T >::type &&t) FL_NOEXCEPT
 
template<typename T>
constexpr T && forward (typename remove_reference< T >::type &t) FL_NOEXCEPT
 
template<typename T>
constexpr enable_if< is_fixed_point< T >::value, T >::type fract (T x) FL_NOEXCEPT
 
fl::size_t fread (void *buffer, fl::size_t size, fl::size_t count, FILE *file)
 Read from file.
 
void Free (void *ptr)
 
void free (void *ptr)
 
int fseek (FILE *file, long offset, int origin)
 Set file position.
 
long ftell (FILE *file)
 Get current file position.
 
void ftoa (float value, char *buffer, int precision=2) FL_NOEXCEPT
 Convert floating point number to string buffer.
 
fl::size_t fwrite (const void *data, fl::size_t size, fl::size_t count, FILE *file)
 Write to file.
 
template<typename Fixed>
constexpr u32 gamma (float g) FL_NOEXCEPT
 
u16 gamma_2_8 (u8 value)
 
template<fl::size I, typename T1, typename T2>
const pair_element< I, T1, T2 >::type & get (const pair< T1, T2 > &p) FL_NOEXCEPT
 
template<typename T, typename T1, typename T2>
const T & get (const pair< T1, T2 > &p) FL_NOEXCEPT
 
template<size_t I, typename Head, typename... Tail>
enable_if< I==0, constHead & >::type get (const tuple< Head, Tail... > &t) FL_NOEXCEPT
 
template<size_t I, typename Head, typename... Tail>
enable_if< I!=0, consttypenametuple_element< I, tuple< Head, Tail... > >::type & >::type get (const tuple< Head, Tail... > &t) FL_NOEXCEPT
 
template<fl::size I, typename T1, typename T2>
pair_element< I, T1, T2 >::type && get (pair< T1, T2 > &&p) FL_NOEXCEPT
 
template<typename T, typename T1, typename T2>
T && get (pair< T1, T2 > &&p) FL_NOEXCEPT
 
template<fl::size I, typename T1, typename T2>
pair_element< I, T1, T2 >::type & get (pair< T1, T2 > &p) FL_NOEXCEPT
 
template<typename T, typename T1, typename T2>
T & get (pair< T1, T2 > &p) FL_NOEXCEPT
 
template<size_t I, typename Head, typename... Tail>
enable_if< I==0, Head && >::type get (tuple< Head, Tail... > &&t) FL_NOEXCEPT
 
template<size_t I, typename Head, typename... Tail>
enable_if< I!=0, typenametuple_element< I, tuple< Head, Tail... > >::type && >::type get (tuple< Head, Tail... > &&t) FL_NOEXCEPT
 
template<size_t I, typename Head, typename... Tail>
enable_if< I==0, Head & >::type get (tuple< Head, Tail... > &t) FL_NOEXCEPT
 
template<size_t I, typename Head, typename... Tail>
enable_if< I!=0, typenametuple_element< I, tuple< Head, Tail... > >::type & >::type get (tuple< Head, Tail... > &t) FL_NOEXCEPT
 
template<fl::size N, typename InfoProvider>
AsyncLoggerget_async_logger_by_index ()
 Template-based logger accessor with auto-registration and enablement check.
 
AsyncLoggerget_audio_async_logger_isr ()
 
AsyncLoggerget_audio_async_logger_main ()
 
constexpr u32 get_bit_period_ns (const ChipsetTiming &timing) FL_NOEXCEPT
 Get total bit period (T1 + T2 + T3) in nanoseconds.
 
json_objectget_empty_json_obj ()
 
int get_errno ()
 
AsyncLoggerget_flexio_async_logger_isr ()
 
AsyncLoggerget_flexio_async_logger_main ()
 
AsyncLoggerget_interrupt_async_logger_isr ()
 
AsyncLoggerget_interrupt_async_logger_main ()
 
json_valueget_null_json_value ()
 
AsyncLoggerget_objectfled_async_logger_isr ()
 
AsyncLoggerget_objectfled_async_logger_main ()
 
AsyncLoggerget_parlio_async_logger_isr ()
 
AsyncLoggerget_parlio_async_logger_main ()
 
void get_ready (unsigned long &a, unsigned long &b)
 
const DiodeProfileget_rgbw_colorimetric_profile () FL_NOEXCEPT
 
const colorimetric_detail::RgbcctProfileget_rgbww_colorimetric_profile () FL_NOEXCEPT
 
AsyncLoggerget_rmt_async_logger_isr ()
 
AsyncLoggerget_rmt_async_logger_main ()
 
AsyncLoggerget_spi_async_logger_isr ()
 
AsyncLoggerget_spi_async_logger_main ()
 
const ChipsetTimingget_timing_by_name (const char *name) FL_NOEXCEPT
 Get timing by name (for dynamic lookup if needed)
 
constexpr u32 get_timing_t1 (const ChipsetTiming &timing) FL_NOEXCEPT
 Extract T1 (high time for bit 0) from timing constant.
 
constexpr u32 get_timing_t2 (const ChipsetTiming &timing) FL_NOEXCEPT
 Extract T2 (additional high time for bit 1) from timing constant.
 
constexpr u32 get_timing_t3 (const ChipsetTiming &timing) FL_NOEXCEPT
 Extract T3 (low tail duration) from timing constant.
 
int getAnimartrixCount ()
 
AnimartrixAnimInfo getAnimartrixInfo (int index)
 
fl::string getAnimartrixName (int animation)
 
fl::u8 getBytesPerPixel (PixelFormat format)
 
int getDataPinFromChipset (const ChipsetVariant &chipset)
 
const char * getenv (const char *name)
 
HeapInfo getFreeHeap ()
 Query available heap memory.
 
u8 getLogLevel () FL_NOEXCEPT
 Get the current global log level.
 
u32 getPwmFrequency (int pin)
 Query the configured PWM frequency for a pin.
 
IChannelDrivergetStubChannelEngine ()
 Get stub channel driver for testing or unsupported platforms.
 
ChipsetTimingConfig getTimingFromChipset (const ChipsetVariant &chipset)
 
static TraceStoragegetTraceStorage () FL_NOEXCEPT
 
StringInternerglobal_interner ()
 
static fl::mutexglobal_interner_mutex ()
 
FASTLED_FORCE_INLINE float grad (int hash, float x, float y, float z)
 
static u32 hash_pair (u32 a, u32 b, u32 seed=0) FL_NOEXCEPT
 
u32 hash_string_view (string_view sv) FL_NOEXCEPT
 
void hd108BrightnessHeader (u8 brightness_8bit, u8 *f0_out, u8 *f1_out) FL_NOEXCEPT
 Generate HD108 per-channel gain header bytes.
 
u16 hd108GammaCorrect (u8 value) FL_NOEXCEPT
 Convert 8-bit color to HD108 16-bit gamma-corrected value (gamma 2.8)
 
CRGB HeatColor (fl::u8 temperature)
 
LIB8STATIC u8 hours8 () FL_NOEXCEPT
 Return the current hours since boot in an 8-bit value.
 
static CRGB HSV16toRGB (const HSV16 &hsv)
 
double hypot (double x, double y) FL_NOEXCEPT
 
template<typename T>
enable_if< is_integral< T >::value, float >::type hypot (T x, T y) FL_NOEXCEPT
 
double hypot_impl_double (double x, double y)
 
float hypot_impl_float (float x, float y)
 
float hypotf (float x, float y) FL_NOEXCEPT
 
fl::string ieee754_format_decimal (u32 bits, int precision=6) FL_NOEXCEPT
 Format IEEE 754 single-precision bits as decimal text.
 
u32 ieee754_parse_decimal (const char *s, fl::size len, fl::size *consumed=nullptr) FL_NOEXCEPT
 Parse a decimal floating-point number into IEEE 754 single-precision bits.
 
void init (Context &ctx, int w, int h)
 
template<typename T>
T * int_to_ptr (uptr value) FL_NOEXCEPT
 
fl::string intern (const char *str)
 
fl::string intern (const fl::span< const char > &sp)
 
fl::string intern (const fl::string &str)
 
fl::string intern (const string_view &sv)
 
void interrupt_disable ()
 Disable global interrupts (platform-specific).
 
void interrupt_enable ()
 Enable global interrupts (platform-specific).
 
template<typename F, typename... Args>
auto invoke (F &&f, Args &&... args) FL_NOEXCEPT -> enable_if_t<!is_member_function_pointer< typename remove_reference< F >::type >::value &&!detail::is_member_data_pointer< typename remove_reference< F >::type >::value, decltype(fl::forward< F >(f)(fl::forward< Args >(args)...))>
 
template<typename F, typename T1>
auto invoke (F &&f, T1 &&t1) FL_NOEXCEPT -> enable_if_t< detail::is_member_data_pointer< typename remove_reference< F >::type >::value &&!detail::use_pointer_syntax< T1 >::value, decltype(fl::forward< T1 >(t1).*f)>
 
template<typename F, typename T1, typename... Args>
auto invoke (F &&f, T1 &&t1, Args &&... args) FL_NOEXCEPT -> enable_if_t< is_member_function_pointer< typename remove_reference< F >::type >::value &&!detail::use_pointer_syntax< T1 >::value, decltype((fl::forward< T1 >(t1).*f)(fl::forward< Args >(args)...))>
 
bool isdigit (char c) FL_NOEXCEPT
 Check if character is a decimal digit (0-9)
 
static bool isDigitInBase (char c, int base)
 
FL_OPTIMIZE_FUNCTION constexpr u16 isqrt32 (u32 x) FL_NOEXCEPT
 
FL_OPTIMIZE_FUNCTION constexpr u32 isqrt64 (u64 x) FL_NOEXCEPT
 
bool isspace (char c) FL_NOEXCEPT
 Check if character is whitespace (space, tab, newline, carriage return)
 
int itoa (i32 value, char *buffer, int radix) FL_NOEXCEPT
 Convert signed 32-bit integer to string buffer in given radix.
 
int itoa64 (i64 value, char *buffer, int radix) FL_NOEXCEPT
 Convert signed 64-bit integer to string buffer in given radix.
 
fl::vector< float > jsonArrayToFloatVector (const fl::json &jsonArray)
 
double ldexp (double value, int exp) FL_NOEXCEPT
 
template<typename T>
enable_if< is_integral< T >::value, float >::type ldexp (T value, int exp) FL_NOEXCEPT
 
double ldexp_impl_double (double value, int exp)
 
float ldexp_impl_float (float value, int exp)
 
float ldexpf (float value, int exp) FL_NOEXCEPT
 
FASTLED_FORCE_INLINE float lerp (float t, float a, float b)
 
template<typename T>
constexpr enable_if< is_fixed_point< T >::value, T >::type lerp (T a, T b, T t) FL_NOEXCEPT
 
template<typename Iterator1, typename Iterator2>
bool lexicographical_compare (Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2) FL_NOEXCEPT
 
template<typename Iterator1, typename Iterator2, typename Compare>
bool lexicographical_compare (Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2, Compare comp) FL_NOEXCEPT
 
FramePtr loadJpegFromSD (int cs_pin, const char *filepath, const JpegConfig &config=JpegConfig(), fl::string *error_message=nullptr)
 
double log (double value) FL_NOEXCEPT
 
template<typename T>
enable_if< is_integral< T >::value, float >::type log (T value) FL_NOEXCEPT
 
double log10 (double value) FL_NOEXCEPT
 
template<typename T>
enable_if< is_integral< T >::value, float >::type log10 (T value) FL_NOEXCEPT
 
double log10_impl_double (double value)
 
float log10_impl_float (float value)
 
float log10f (float value) FL_NOEXCEPT
 
double log2 (double value) FL_NOEXCEPT
 
template<typename T>
enable_if< is_integral< T >::value, float >::type log2 (T value) FL_NOEXCEPT
 
float log2f (float value) FL_NOEXCEPT
 
double log_impl_double (double value)
 
float log_impl_float (float value)
 
float logf (float value) FL_NOEXCEPT
 
void logFrame (unsigned long &c)
 
void logOutput (unsigned long &b)
 
template<typename Iterator, typename T>
Iterator lower_bound (Iterator first, Iterator last, const T &value) FL_NOEXCEPT
 
template<typename Iterator, typename T, typename Compare>
Iterator lower_bound (Iterator first, Iterator last, const T &value, Compare comp) FL_NOEXCEPT
 
u16 lpd6803EncodeRGB (u8 r, u8 g, u8 b) FL_NOEXCEPT
 Convert RGB to LPD6803 16-bit format (1bbbbbgggggrrrrr)
 
u8 lpd8806Encode (u8 value) FL_NOEXCEPT
 Apply LPD8806 encoding to a single color byte.
 
long lround (double value) FL_NOEXCEPT
 
template<typename T>
enable_if< is_integral< T >::value, long >::type lround (T value) FL_NOEXCEPT
 
long lround_impl_double (double value)
 
long lround_impl_float (float value)
 
long lroundf (float value) FL_NOEXCEPT
 
fl::u8 lsrX4 (fl::u8 dividend)
 Helper function to divide a number by 16, aka four logical shift right (LSR)'s.
 
ChipsetTiming4Phase make4PhaseTiming (const ChipsetTiming &timing_3phase, u32 tolerance_ns=150) FL_NOEXCEPT
 Create 4-phase RX timing from 3-phase chipset timing with tolerance.
 
template<typename T>
optional< T > make_optional (const T &value) FL_NOEXCEPT
 
template<typename T>
optional< T > make_optional (T &&value) FL_NOEXCEPT
 
template<typename T1, typename T2>
pair< typename fl::decay< T1 >::type, typename fl::decay< T2 >::type > make_pair (T1 &&t, T2 &&u) FL_NOEXCEPT
 
template<typename EF>
scope_exit< decay_t< EF > > make_scope_exit (EF &&f)
 Factory for C++11/14 (no CTAD).
 
FsImplPtr make_sdcard_filesystem (int cs_pin)
 
template<typename T, typename... Args>
shared_ptr< T > make_shared (Args &&... args)
 
template<typename T>
shared_ptr< T > make_shared_array (size_t n)
 
template<typename T>
shared_ptr< T > make_shared_no_tracking (T &obj) FL_NOEXCEPT
 
template<typename T, typename... Args>
fl::shared_ptr< T > make_shared_ptr (Args &&... args) FL_NOEXCEPT
 
template<typename T, typename Deleter, typename... Args>
shared_ptr< T > make_shared_with_deleter (Deleter d, Args &&... args)
 
template<typename... Ts>
tuple< typename fl::decay< Ts >::type... > make_tuple (Ts &&... args) FL_NOEXCEPT
 
template<typename T, typename... Args>
fl::enable_if<!fl::is_array< T >::value, unique_ptr< T > >::type make_unique (Args &&... args) FL_NOEXCEPT
 
template<typename T>
fl::enable_if< fl::is_array< T >::value, unique_ptr< T > >::type make_unique (fl::size_t size) FL_NOEXCEPT
 
template<typename TIMING>
constexpr ClocklessChipset makeClockless (int pin) FL_NOEXCEPT
 Build a ClocklessChipset from a compile-time TIMING trait.
 
pair< detail::ScaledPixelIteratorBrightness, detail::ScaledPixelIteratorBrightnessmakeScaledBrightnessRange (PixelIterator *pixels) FL_NOEXCEPT
 Create brightness input iterator range from PixelIterator.
 
pair< detail::ScaledPixelIteratorRGB, detail::ScaledPixelIteratorRGBmakeScaledPixelRangeRGB (PixelIterator *pixels) FL_NOEXCEPT
 Create RGB input iterator range from PixelIterator.
 
pair< detail::ScaledPixelIteratorRGB16, detail::ScaledPixelIteratorRGB16makeScaledPixelRangeRGB16 (PixelIterator *pixels) FL_NOEXCEPT
 Create 16-bit RGB input iterator range from PixelIterator.
 
pair< detail::ScaledPixelIteratorRGBW, detail::ScaledPixelIteratorRGBWmakeScaledPixelRangeRGBW (PixelIterator *pixels) FL_NOEXCEPT
 Create RGBW input iterator range from PixelIterator.
 
pair< detail::ScaledPixelIteratorRGBWW, detail::ScaledPixelIteratorRGBWWmakeScaledPixelRangeRGBWW (PixelIterator *pixels) FL_NOEXCEPT
 Create RGBWW input iterator range from PixelIterator (issue #2558)
 
template<typename CHIPSET>
constexpr ChipsetTimingConfig makeTimingConfig () FL_NOEXCEPT
 Convert compile-time CHIPSET type to runtime timing config.
 
template<typename T>
static IAnimartrix2VizmakeViz ()
 
void * Malloc (fl::size size)
 
void * malloc (size_t size)
 
u32 map16_to_32 (u16 x) FL_NOEXCEPT
 
u8 map16_to_8 (u16 x) FL_NOEXCEPT
 
u16 map32_to_16 (u32 x) FL_NOEXCEPT
 
u8 map32_to_8 (u32 x) FL_NOEXCEPT
 
u16 map8_to_16 (u8 x) FL_NOEXCEPT
 
u32 map8_to_32 (u8 x) FL_NOEXCEPT
 
FASTLED_FORCE_INLINE float map_float (float x, float in_min, float in_max, float out_min, float out_max)
 
template<typename T, typename U>
FASTLED_FORCE_INLINEmap_range (T value, T in_min, T in_max, U out_min, U out_max) FL_NOEXCEPT
 
template<typename T, typename U>
FASTLED_FORCE_INLINEmap_range_clamped (T value, T in_min, T in_max, U out_min, U out_max) FL_NOEXCEPT
 
u8 mapBrightness8to5 (u8 brightness_8bit) FL_NOEXCEPT
 Map 8-bit brightness to 5-bit (0-31)
 
template<typename T, typename U>
constexpr common_type_t< T, U > max (T a, U b) FL_NOEXCEPT
 
template<typename Iterator>
Iterator max_element (Iterator first, Iterator last) FL_NOEXCEPT
 
template<typename Iterator, typename Compare>
Iterator max_element (Iterator first, Iterator last, Compare comp) FL_NOEXCEPT
 
const void * memchr (const void *s, int c, size_t n) FL_NOEXCEPT
 
void * memchr (void *s, int c, size_t n) FL_NOEXCEPT
 
int memcmp (const void *s1, const void *s2, size_t n) FL_NOEXCEPT
 
void * memcopy (void *dest, const void *src, size_t n) FL_NOEXCEPT
 
void * memcpy (void *dest, const void *src, size_t n) FL_NOEXCEPT
 
void * memmove (void *dest, const void *src, size_t n) FL_NOEXCEPT
 
void * memset (void *s, int c, size_t n) FL_NOEXCEPT
 
fl::u32 micros () FL_NOEXCEPT
 Universal microsecond timer - returns microseconds since system startup.
 
fl::u32 millis () FL_NOEXCEPT
 Universal millisecond timer - returns milliseconds since system startup.
 
fl::u64 millis64 () FL_NOEXCEPT
 64-bit millisecond timer - returns milliseconds since system startup without wraparound
 
void millis64_reset ()
 
FL_DISABLE_WARNING_PUSH U constexpr common_type_t< T, U > min (T a, U b) FL_NOEXCEPT
 
template<typename Iterator>
Iterator min_element (Iterator first, Iterator last) FL_NOEXCEPT
 
template<typename Iterator, typename Compare>
Iterator min_element (Iterator first, Iterator last, Compare comp) FL_NOEXCEPT
 
LIB8STATIC u16 minutes16 () FL_NOEXCEPT
 Return the current minutes since boot in a 16-bit value.
 
template<typename T>
constexpr enable_if< is_fixed_point< T >::value, T >::type mod (T a, T b) FL_NOEXCEPT
 
template<typename T>
constexpr remove_reference< T >::type && move (T &&t) FL_NOEXCEPT
 
float multiply (float &a, float &b)
 
FASTLED_FORCE_INLINE fl::i32 multiply_fp (fl::i32 a, fl::i32 b)
 
static u32 MurmurHash3_x86_32 (const void *key, fl::size len, u32 seed=0)
 
CRGBnapplyGamma_video (CRGB &rgb, float gamma)
 
CRGBnapplyGamma_video (CRGB &rgb, float gammaR, float gammaG, float gammaB)
 
void napplyGamma_video (CRGB *rgbarray, fl::u16 count, float gamma)
 
void napplyGamma_video (CRGB *rgbarray, fl::u16 count, float gammaR, float gammaG, float gammaB)
 
CHSVnblend (CHSV &existing, const CHSV &overlay, fract8 amountOfOverlay, TGradientDirectionCode directionCode)
 
void nblend (CHSV *existing, const CHSV *overlay, fl::u16 count, fract8 amountOfOverlay, TGradientDirectionCode directionCode)
 
CRGBnblend (CRGB &existing, const CRGB &overlay, fract8 amountOfOverlay)
 
void nblend (CRGB *existing, const CRGB *overlay, fl::u16 count, fract8 amountOfOverlay)
 
void nblendPaletteTowardPalette (CRGBPalette16 &current, CRGBPalette16 &target, fl::u8 maxChanges)
 
CRGB noiseCylinderCRGB (float angle, float height, u32 time, float radius=1.0f)
 Generate CRGB noise for a cylinder pattern.
 
HSV16 noiseCylinderHSV16 (float angle, float height, u32 time, float radius)
 Cylinder noise functions - sample three z-slices for independent component evolution.
 
CHSV noiseCylinderHSV8 (float angle, float height, u32 time, float radius=1.0f)
 Generate HSV8 (8-bit) noise for a cylinder pattern.
 
CRGB noiseRingCRGB (float angle, u32 time, float radius=1.0f)
 Generate CRGB noise for a ring pattern.
 
HSV16 noiseRingHSV16 (float angle, u32 time, float radius)
 Ring noise functions - sample three z-slices for independent component evolution.
 
CHSV noiseRingHSV8 (float angle, u32 time, float radius=1.0f)
 Generate HSV8 (8-bit) noise for a ring pattern.
 
CRGB noiseSphereCRGB (float angle, float phi, u32 time, float radius=1.0f)
 Generate CRGB noise for a sphere pattern.
 
HSV16 noiseSphereHSV16 (float angle, float phi, u32 time, float radius)
 Sphere noise functions - sample three z-slices for independent component evolution.
 
CHSV noiseSphereHSV8 (float angle, float phi, u32 time, float radius=1.0f)
 Generate HSV8 (8-bit) noise for a sphere pattern.
 
void nscale8 (CRGB *leds, fl::u16 num_leds, fl::u8 scale)
 
void nscale8_video (CRGB *leds, fl::u16 num_leds, fl::u8 scale)
 
bool operator! (RemoteClearFlags flags)
 
template<typename T, fl::size N>
bool operator!= (const array< T, N > &lhs, const array< T, N > &rhs) FL_NOEXCEPT
 
FASTLED_FORCE_INLINE bool operator!= (const CRGB &lhs, const CRGB &rhs) FL_NOEXCEPT
 Check if two CRGB objects do not have the same color data.
 
template<typename Key, typename Value, typename Less>
bool operator!= (const flat_map< Key, Value, Less > &lhs, const flat_map< Key, Value, Less > &rhs) FL_NOEXCEPT
 
template<typename Key, typename Less>
bool operator!= (const flat_set< Key, Less > &lhs, const flat_set< Key, Less > &rhs)
 
template<typename T1, typename T2, typename U1, typename U2>
bool operator!= (const pair< T1, T2 > &lhs, const pair< U1, U2 > &rhs) FL_NOEXCEPT
 
template<typename T, typename Container>
bool operator!= (const queue< T, Container > &lhs, const queue< T, Container > &rhs)
 Non-member inequality comparison for queues.
 
template<typename T, typename Y>
bool operator!= (const shared_ptr< T > &lhs, const shared_ptr< Y > &rhs) FL_NOEXCEPT
 
template<typename T>
bool operator!= (const shared_ptr< T > &lhs, fl::nullptr_t) FL_NOEXCEPT
 
template<typename T, typename Deleter>
bool operator!= (const unique_ptr< T, Deleter > &ptr, fl::nullptr_t) FL_NOEXCEPT
 
template<typename T1, typename Deleter1, typename T2, typename Deleter2>
bool operator!= (const unique_ptr< T1, Deleter1 > &lhs, const unique_ptr< T2, Deleter2 > &rhs) FL_NOEXCEPT
 
template<typename T>
bool operator!= (fl::nullptr_t, const shared_ptr< T > &rhs) FL_NOEXCEPT
 
template<typename T, typename Deleter>
bool operator!= (fl::nullptr_t, const unique_ptr< T, Deleter > &ptr) FL_NOEXCEPT
 
bool operator!= (string_view lhs, string_view rhs) FL_NOEXCEPT
 
template<typename T, typename U>
constexpr bool operator!= (T lhs, const not_null< U > &rhs) FL_NOEXCEPT
 
FASTLED_FORCE_INLINE CRGB operator% (const CRGB &p1, u8 d) FL_NOEXCEPT
 Scale using CRGB::nscale8_video()
 
FASTLED_FORCE_INLINE CRGB operator& (const CRGB &p1, const CRGB &p2) FL_NOEXCEPT
 Combine two CRGB objects, taking the smallest value of each channel.
 
RemoteClearFlags operator& (RemoteClearFlags a, RemoteClearFlags b)
 
FASTLED_FORCE_INLINE CRGB operator* (const CRGB &p1, u8 d) FL_NOEXCEPT
 Multiply each of the channels by a constant, saturating each channel at 0xFF.
 
template<class T, int F, int I>
static i16 operator* (i16 v, qfx< T, F, I > &q) FL_NOEXCEPT
 
template<class T, int F, int I>
static i32 operator* (i32 v, qfx< T, F, I > &q) FL_NOEXCEPT
 
constexpr FASTLED_FORCE_INLINE s16x16 operator* (s16x16 a, s0x32 b)
 
template<class T, int F, int I>
static u16 operator* (u16 v, qfx< T, F, I > &q) FL_NOEXCEPT
 
template<class T, int F, int I>
static u32 operator* (u32 v, qfx< T, F, I > &q) FL_NOEXCEPT
 
string operator+ (const char *lhs, const string &rhs) FL_NOEXCEPT
 
template<typename T>
fl::enable_if<!fl::is_arithmetic< T >::value, string >::type operator+ (const char *lhs, const T &rhs) FL_NOEXCEPT
 
FASTLED_FORCE_INLINE CRGB operator+ (const CRGB &p1, const CRGB &p2) FL_NOEXCEPT
 Add one CRGB to another, saturating at 0xFF for each channel.
 
string operator+ (const string &lhs, const char *rhs) FL_NOEXCEPT
 
string operator+ (const string &lhs, const string &rhs) FL_NOEXCEPT
 
template<typename T>
string operator+ (const string &lhs, const T &rhs) FL_NOEXCEPT
 
template<typename T>
fl::enable_if<!fl::is_arithmetic< T >::value, string >::type operator+ (const T &lhs, const char *rhs) FL_NOEXCEPT
 
template<typename T>
string operator+ (const T &lhs, const string &rhs) FL_NOEXCEPT
 
FASTLED_FORCE_INLINE CRGB operator- (const CRGB &p1, const CRGB &p2) FL_NOEXCEPT
 Subtract one CRGB from another, saturating at 0x00 for each channel.
 
FASTLED_FORCE_INLINE CRGB operator/ (const CRGB &p1, u8 d) FL_NOEXCEPT
 Divide each of the channels by a constant.
 
template<typename T, fl::size N>
bool operator< (const array< T, N > &lhs, const array< T, N > &rhs) FL_NOEXCEPT
 
FASTLED_FORCE_INLINE bool operator< (const CRGB &lhs, const CRGB &rhs) FL_NOEXCEPT
 Check if the sum of the color channels in one CRGB object is less than another.
 
template<typename Key, typename Value, typename Less>
bool operator< (const flat_map< Key, Value, Less > &lhs, const flat_map< Key, Value, Less > &rhs) FL_NOEXCEPT
 
template<typename Key, typename Less>
bool operator< (const flat_set< Key, Less > &lhs, const flat_set< Key, Less > &rhs)
 
template<typename T1, typename T2, typename U1, typename U2>
bool operator< (const pair< T1, T2 > &lhs, const pair< U1, U2 > &rhs) FL_NOEXCEPT
 
template<typename T, typename Container>
bool operator< (const queue< T, Container > &lhs, const queue< T, Container > &rhs)
 Non-member less-than comparison for queues.
 
template<typename T, typename Y>
bool operator< (const shared_ptr< T > &lhs, const shared_ptr< Y > &rhs) FL_NOEXCEPT
 
bool operator< (string_view lhs, string_view rhs) FL_NOEXCEPT
 
ostreamoperator<< (ostream &os, const dec_t &)
 
ostreamoperator<< (ostream &os, const endl_t &) FL_NOEXCEPT
 
ostreamoperator<< (ostream &os, const hex_t &)
 
ostreamoperator<< (ostream &os, const oct_t &)
 
sstreamoperator<< (sstream &ss, const dec_t &)
 
sstreamoperator<< (sstream &ss, const hex_t &)
 
sstreamoperator<< (sstream &ss, const oct_t &)
 
template<typename T, fl::size N>
bool operator<= (const array< T, N > &lhs, const array< T, N > &rhs) FL_NOEXCEPT
 
FASTLED_FORCE_INLINE bool operator<= (const CRGB &lhs, const CRGB &rhs) FL_NOEXCEPT
 Check if the sum of the color channels in one CRGB object is less than or equal to another.
 
template<typename Key, typename Value, typename Less>
bool operator<= (const flat_map< Key, Value, Less > &lhs, const flat_map< Key, Value, Less > &rhs) FL_NOEXCEPT
 
template<typename Key, typename Less>
bool operator<= (const flat_set< Key, Less > &lhs, const flat_set< Key, Less > &rhs)
 
template<typename T1, typename T2, typename U1, typename U2>
bool operator<= (const pair< T1, T2 > &lhs, const pair< U1, U2 > &rhs) FL_NOEXCEPT
 
template<typename T, typename Container>
bool operator<= (const queue< T, Container > &lhs, const queue< T, Container > &rhs)
 Non-member less-than-or-equal comparison for queues.
 
template<typename T, typename Y>
bool operator<= (const shared_ptr< T > &lhs, const shared_ptr< Y > &rhs) FL_NOEXCEPT
 
bool operator<= (string_view lhs, string_view rhs) FL_NOEXCEPT
 
template<typename T, fl::size N>
bool operator== (const array< T, N > &lhs, const array< T, N > &rhs) FL_NOEXCEPT
 
FASTLED_FORCE_INLINE bool operator== (const CRGB &lhs, const CRGB &rhs) FL_NOEXCEPT
 Check if two CRGB objects have the same color data.
 
template<typename Key, typename Value, typename Less>
bool operator== (const flat_map< Key, Value, Less > &lhs, const flat_map< Key, Value, Less > &rhs) FL_NOEXCEPT
 
template<typename Key, typename Less>
bool operator== (const flat_set< Key, Less > &lhs, const flat_set< Key, Less > &rhs)
 
template<typename T1, typename T2, typename U1, typename U2>
bool operator== (const pair< T1, T2 > &lhs, const pair< U1, U2 > &rhs) FL_NOEXCEPT
 
template<typename T, typename Container>
bool operator== (const queue< T, Container > &lhs, const queue< T, Container > &rhs)
 Non-member equality comparison for queues.
 
template<typename T, typename Y>
bool operator== (const shared_ptr< T > &lhs, const shared_ptr< Y > &rhs) FL_NOEXCEPT
 
template<typename T>
bool operator== (const shared_ptr< T > &lhs, fl::nullptr_t) FL_NOEXCEPT
 
template<typename T, typename Deleter>
bool operator== (const unique_ptr< T, Deleter > &ptr, fl::nullptr_t) FL_NOEXCEPT
 
template<typename T1, typename Deleter1, typename T2, typename Deleter2>
bool operator== (const unique_ptr< T1, Deleter1 > &lhs, const unique_ptr< T2, Deleter2 > &rhs) FL_NOEXCEPT
 
template<typename T>
bool operator== (fl::nullptr_t, const shared_ptr< T > &rhs) FL_NOEXCEPT
 
template<typename T, typename Deleter>
bool operator== (fl::nullptr_t, const unique_ptr< T, Deleter > &ptr) FL_NOEXCEPT
 
bool operator== (string_view lhs, string_view rhs) FL_NOEXCEPT
 
template<typename T, typename U>
constexpr bool operator== (T lhs, const not_null< U > &rhs) FL_NOEXCEPT
 
template<typename T, fl::size N>
bool operator> (const array< T, N > &lhs, const array< T, N > &rhs) FL_NOEXCEPT
 
FASTLED_FORCE_INLINE bool operator> (const CRGB &lhs, const CRGB &rhs) FL_NOEXCEPT
 Check if the sum of the color channels in one CRGB object is greater than another.
 
template<typename Key, typename Value, typename Less>
bool operator> (const flat_map< Key, Value, Less > &lhs, const flat_map< Key, Value, Less > &rhs) FL_NOEXCEPT
 
template<typename Key, typename Less>
bool operator> (const flat_set< Key, Less > &lhs, const flat_set< Key, Less > &rhs)
 
template<typename T1, typename T2, typename U1, typename U2>
bool operator> (const pair< T1, T2 > &lhs, const pair< U1, U2 > &rhs) FL_NOEXCEPT
 
template<typename T, typename Container>
bool operator> (const queue< T, Container > &lhs, const queue< T, Container > &rhs)
 Non-member greater-than comparison for queues.
 
template<typename T, typename Y>
bool operator> (const shared_ptr< T > &lhs, const shared_ptr< Y > &rhs) FL_NOEXCEPT
 
bool operator> (string_view lhs, string_view rhs) FL_NOEXCEPT
 
template<typename T, fl::size N>
bool operator>= (const array< T, N > &lhs, const array< T, N > &rhs) FL_NOEXCEPT
 
FASTLED_FORCE_INLINE bool operator>= (const CRGB &lhs, const CRGB &rhs) FL_NOEXCEPT
 Check if the sum of the color channels in one CRGB object is greater than or equal to another.
 
template<typename Key, typename Value, typename Less>
bool operator>= (const flat_map< Key, Value, Less > &lhs, const flat_map< Key, Value, Less > &rhs) FL_NOEXCEPT
 
template<typename Key, typename Less>
bool operator>= (const flat_set< Key, Less > &lhs, const flat_set< Key, Less > &rhs)
 
template<typename T1, typename T2, typename U1, typename U2>
bool operator>= (const pair< T1, T2 > &lhs, const pair< U1, U2 > &rhs) FL_NOEXCEPT
 
template<typename T, typename Container>
bool operator>= (const queue< T, Container > &lhs, const queue< T, Container > &rhs)
 Non-member greater-than-or-equal comparison for queues.
 
template<typename T, typename Y>
bool operator>= (const shared_ptr< T > &lhs, const shared_ptr< Y > &rhs) FL_NOEXCEPT
 
bool operator>= (string_view lhs, string_view rhs) FL_NOEXCEPT
 
FASTLED_FORCE_INLINE CRGB operator| (const CRGB &p1, const CRGB &p2) FL_NOEXCEPT
 Combine two CRGB objects, taking the largest value of each channel.
 
RemoteClearFlags operator| (RemoteClearFlags a, RemoteClearFlags b)
 
FASTLED_FORCE_INLINE fl::u8 P (fl::u8 x)
 
u8 p9813FlagByte (u8 r, u8 g, u8 b) FL_NOEXCEPT
 Generate P9813 flag byte from RGB components.
 
pair< CRGB, CRGBpackWS2816Pixel (u16 s0, u16 s1, u16 s2)
 Pack a single 16-bit RGB pixel into two 8-bit CRGB pixels for WS2816.
 
url parse_lnk (fl::string_view content) FL_NOEXCEPT
 Parse the contents of a .lnk file into a fl::url.
 
LnkMetadata parse_lnk_with_metadata (fl::string_view content) FL_NOEXCEPT
 Parse a .lnk file into URL + metadata (forward-compat).
 
float parseFloat (const char *str, fl::size len) FL_NOEXCEPT
 Parse a floating point number from a character buffer.
 
int parseInt (const char *str) FL_NOEXCEPT
 Parse an integer from a null-terminated string.
 
int parseInt (const char *str, fl::size len) FL_NOEXCEPT
 Parse an integer from a character buffer.
 
Mp4TrackInfo parseMp4 (fl::span< const fl::u8 > data, fl::string *error)
 
static bool parseV2SegmentArray (const fl::json &segmentsArr, fl::flat_map< string, ScreenMap > *segmentMaps, string *err) FL_NOEXCEPT
 
int peek ()
 
void pinMap (fl::span< PinInfo > pins)
 Resolve port IDs for an array of PinInfo in-place.
 
void pinMode (int pin, PinMode mode)
 Set pin mode (input, output, pull-up, pull-down)
 
int pinToPort (int pin)
 Map a runtime pin number to an integer port ID using FastPin<N>::port().
 
FASTLED_FORCE_INLINE float pnoise (float x, float y, float z)
 
template<typename Iterator>
void pop_heap (Iterator first, Iterator last)
 
template<typename Iterator, typename Compare>
void pop_heap (Iterator first, Iterator last, Compare comp)
 
double pow (double base, double exponent) FL_NOEXCEPT
 
template<typename T>
enable_if< is_fixed_point< T >::value, T >::type pow (T base, T exp) FL_NOEXCEPT
 
template<typename T>
enable_if< is_integral< T >::value, float >::type pow (T base, T exponent) FL_NOEXCEPT
 
double pow_impl_double (double base, double exponent)
 
float pow_impl_float (float base, float exponent)
 
float powf (float base, float exponent) FL_NOEXCEPT
 
template<typename T>
enable_if< is_fixed_point< T >::value, T >::type powfp (T base, T exp) FL_NOEXCEPT
 
void print (const char *str)
 
template<typename... Args>
void printf (const char *format, const Args &... args) FL_NOEXCEPT
 Printf-like formatting function that prints directly to the platform output.
 
void println (const char *str) FL_NOEXCEPT
 
memory_resourcepsram_memory_resource () FL_NOEXCEPT
 Get the PSRAM memory resource (wraps PSRamAllocate / PSRamDeallocate).
 
void * PSRamAllocate (fl::size size, bool zero)
 
void PSRamDeallocate (void *ptr)
 
template<typename T>
uptr ptr_to_int (T *ptr) FL_NOEXCEPT
 
template<typename Iterator>
void push_heap (Iterator first, Iterator last)
 
template<typename Iterator, typename Compare>
void push_heap (Iterator first, Iterator last, Compare comp)
 
int pwmEnd (int pin)
 Release PWM channel and stop output on a pin.
 
void qsort (void *base, size_t nmemb, size_t size, qsort_compare_fn compar)
 
static void qsort_insertion_sort (char *base, size_t nmemb, size_t size, qsort_compare_fn compar)
 
static size_t qsort_partition (char *base, size_t nmemb, size_t size, qsort_compare_fn compar)
 
template<typename T>
constexprradians (T deg) FL_NOEXCEPT
 
FASTLED_FORCE_INLINE fl::u32 radiansToA24_fp (fl::i32 angle_s16x16_raw)
 
u32 rand ()
 
int read ()
 
FASTLED_FORCE_INLINE i32 read_sin32_lut (const i32 *addr) FL_NOEXCEPT
 
fl::optional< fl::stringreadLine (char delimiter, char skipChar, fl::optional< u32 > timeoutMs)
 
template<typename SerialIn>
fl::optional< fl::stringreadSerialLine (SerialIn &serial, char delimiter='\n', fl::optional< u32 > timeoutMs=fl::nullopt)
 Read a line from a serial-like input source (blocking with optional timeout)
 
fl::optional< fl::stringreadSerialLine (SerialReader &serial, char delimiter='\n', fl::optional< u32 > timeoutMs=fl::nullopt)
 Optimized readSerialLine for fl:: serial input.
 
template<typename SerialIn>
fl::optional< fl::stringreadSerialStringUntil (SerialIn &serial, char delimiter, char skipChar, fl::optional< u32 > timeoutMs)
 
bool readStringUntil (sstream &out, char delimiter, char skipChar, fl::optional< u32 > timeoutMs)
 
void * realloc (void *ptr, size_t new_size)
 
void register_asset (fl::string_view path, const fl::url &u) FL_NOEXCEPT
 Public helper: plug an asset mapping at runtime.
 
template<typename To, typename From>
To reinterpret_cast_ (const From &from) FL_NOEXCEPT
 
template<typename T, typename Y>
shared_ptr< T > reinterpret_pointer_cast (const shared_ptr< Y > &other) FL_NOEXCEPT
 
template<typename Iterator, typename T>
Iterator remove (Iterator first, Iterator last, const T &value) FL_NOEXCEPT
 
template<typename Iterator, typename UnaryPredicate>
Iterator remove_if (Iterator first, Iterator last, UnaryPredicate pred) FL_NOEXCEPT
 
void render_polar_lookup_table (float cx, float cy, fl::vector< fl::vector< float > > &polar_theta, fl::vector< fl::vector< float > > &distance, int num_x, int num_y)
 
FASTLED_FORCE_INLINE float render_value (render_parameters &animation)
 
FASTLED_FORCE_INLINE fl::i32 render_value_fp (const render_parameters_fp &p, const fl::i32 *fade_lut, const fl::u8 *perm)
 
FASTLED_FORCE_INLINE fl::i32 render_value_fp_from_float (const render_parameters &anim, const fl::i32 *fade_lut, const fl::u8 *perm)
 
template<typename Iterator, typename T>
void replace (Iterator first, Iterator last, const T &old_value, const T &new_value) FL_NOEXCEPT
 
template<typename Iterator, typename UnaryPredicate, typename T>
void replace_if (Iterator first, Iterator last, UnaryPredicate pred, const T &new_value) FL_NOEXCEPT
 
FASTLED_FORCE_INLINE u16 rescaleNoiseValue16 (u16 raw_value)
 Rescale raw inoise16() output to full 16-bit range [0, 65535] Curries in the global NOISE16_EXTENT_MIN/MAX extents for clean, reusable rescaling.
 
fl::string_view resetCauseName (ResetCause c) FL_NOEXCEPT
 Return a static-lifetime name for c — zero-cost, no allocation.
 
fl::url resolve_asset (const asset_ref &a) FL_NOEXCEPT
 Resolve an asset handle to a URL (or local file path) at runtime.
 
template<typename Iterator>
void reverse (Iterator first, Iterator last) FL_NOEXCEPT
 
void rgb565ToRgb888 (fl::u16 rgb565, fl::u8 &r, fl::u8 &g, fl::u8 &b)
 
fl::u16 rgb888ToRgb565 (fl::u8 r, fl::u8 g, fl::u8 b)
 
FASTLED_FORCE_INLINE void rgb_2_rgbw (RGBW_MODE mode, u16 w_color_temperature, u8 r, u8 g, u8 b, u8 r_scale, u8 g_scale, u8 b_scale, u8 *out_r, u8 *out_g, u8 *out_b, u8 *out_w) FL_NOEXCEPT
 Converts RGB to RGBW using one of the functions.
 
template<RGBW_MODE MODE>
FASTLED_FORCE_INLINE void rgb_2_rgbw (u16 w_color_temperature, u8 r, u8 g, u8 b, u8 r_scale, u8 g_scale, u8 b_scale, u8 *out_r, u8 *out_g, u8 *out_b, u8 *out_w) FL_NOEXCEPT
 
void rgb_2_rgbw_colorimetric (u16 w_color_temperature, u8 r, u8 g, u8 b, u8 r_scale, u8 g_scale, u8 b_scale, u8 *out_r, u8 *out_g, u8 *out_b, u8 *out_w) FL_NOEXCEPT
 
void rgb_2_rgbw_colorimetric_boosted (u16 w_color_temperature, u8 r, u8 g, u8 b, u8 r_scale, u8 g_scale, u8 b_scale, u8 *out_r, u8 *out_g, u8 *out_b, u8 *out_w) FL_NOEXCEPT
 
void rgb_2_rgbw_exact (u16 w_color_temperature, u8 r, u8 g, u8 b, u8 r_scale, u8 g_scale, u8 b_scale, u8 *out_r, u8 *out_g, u8 *out_b, u8 *out_w) FL_NOEXCEPT
 Converts RGB to RGBW using a color transfer method from saturated color channels to white.
 
void rgb_2_rgbw_max_brightness (u16 w_color_temperature, u8 r, u8 g, u8 b, u8 r_scale, u8 g_scale, u8 b_scale, u8 *out_r, u8 *out_g, u8 *out_b, u8 *out_w) FL_NOEXCEPT
 The minimum brigthness of the RGB channels is used to set the W channel.
 
void rgb_2_rgbw_null_white_pixel (u16 w_color_temperature, u8 r, u8 g, u8 b, u8 r_scale, u8 g_scale, u8 b_scale, u8 *out_r, u8 *out_g, u8 *out_b, u8 *out_w) FL_NOEXCEPT
 Converts RGB to RGBW with the W channel set to black, always.
 
void rgb_2_rgbw_user_function (u16 w_color_temperature, u8 r, u8 g, u8 b, u8 r_scale, u8 g_scale, u8 b_scale, u8 *out_r, u8 *out_g, u8 *out_b, u8 *out_w)
 
void rgb_2_rgbw_white_boosted (u16 w_color_temperature, u8 r, u8 g, u8 b, u8 r_scale, u8 g_scale, u8 b_scale, u8 *out_r, u8 *out_g, u8 *out_b, u8 *out_w) FL_NOEXCEPT
 Converts RGB to RGBW with a boosted white channel.
 
FASTLED_FORCE_INLINE void rgb_2_rgbww (const Rgbww &cfg, fl::u8 r, fl::u8 g, fl::u8 b, fl::u8 r_scale, fl::u8 g_scale, fl::u8 b_scale, fl::u8 *out_r, fl::u8 *out_g, fl::u8 *out_b, fl::u8 *out_ww, fl::u8 *out_wc) FL_NOEXCEPT
 
void rgb_2_rgbww_colorimetric (const Rgbww &cfg, fl::u8 r, fl::u8 g, fl::u8 b, fl::u8 r_scale, fl::u8 g_scale, fl::u8 b_scale, fl::u8 *out_r, fl::u8 *out_g, fl::u8 *out_b, fl::u8 *out_ww, fl::u8 *out_wc) FL_NOEXCEPT
 Colorimetric strict sub-gamut solver for RGBWW (gist sec 5 + sec 11-12, using solve_rgbcct from rgbw_colorimetric.h).
 
void rgb_2_rgbww_colorimetric_boosted (const Rgbww &cfg, fl::u8 r, fl::u8 g, fl::u8 b, fl::u8 r_scale, fl::u8 g_scale, fl::u8 b_scale, fl::u8 *out_r, fl::u8 *out_g, fl::u8 *out_b, fl::u8 *out_ww, fl::u8 *out_wc) FL_NOEXCEPT
 Colorimetric white-overdrive solver for RGBWW (wx_lp_legacy + RGBCCT layered blend).
 
void rgb_2_rgbww_user_function (const Rgbww &cfg, fl::u8 r, fl::u8 g, fl::u8 b, fl::u8 r_scale, fl::u8 g_scale, fl::u8 b_scale, fl::u8 *out_r, fl::u8 *out_g, fl::u8 *out_b, fl::u8 *out_ww, fl::u8 *out_wc) FL_NOEXCEPT
 User-installable RGB->RGBWW function.
 
FASTLED_FORCE_INLINE rgb rgb_sanity_check (rgb &pixel)
 
FASTLED_FORCE_INLINE void rgb_sanity_check_fp (fl::i32 &r, fl::i32 &g, fl::i32 &b)
 
static HSV16 RGBtoHSV16 (const CRGB &rgb)
 
bool rgbw_colorimetric_lut_enabled () FL_NOEXCEPT
 
constexpr unsigned long rgbw_colorimetric_lut_memory_bytes (int grid_n, RgbwLutInterp interp) FL_NOEXCEPT
 
void rgbw_partial_reorder (EOrderW w_placement, u8 b0, u8 b1, u8 b2, u8 w, u8 *out_b0, u8 *out_b1, u8 *out_b2, u8 *out_b3)
 
void rgbww_partial_reorder (EOrderWW ww_placement, fl::u8 b0, fl::u8 b1, fl::u8 b2, fl::u8 ww, fl::u8 wc, fl::u8 *out_b0, fl::u8 *out_b1, fl::u8 *out_b2, fl::u8 *out_b3, fl::u8 *out_b4) FL_NOEXCEPT
 Dispatch RGB->RGBWW for a given mode.
 
template<typename T>
enable_if<!is_integral< T >::value, T >::type round (T value) FL_NOEXCEPT
 
template<typename T>
enable_if< is_integral< T >::value, float >::type round (T value) FL_NOEXCEPT
 
template<>
double round< double > (double value) FL_NOEXCEPT
 
double round_impl_double (double value)
 
float round_impl_float (float value)
 
float roundf (float value) FL_NOEXCEPT
 
template<typename T>
constexpr enable_if< is_fixed_point< T >::value, T >::type rsqrt (T x) FL_NOEXCEPT
 
void run_default_oscillators (oscillators &timings, modulators &move, fl::u32 current_time, float speed_factor, float master_speed=0.005)
 
SingleTestResult runSingleValidationTest (const SingleTestConfig &config)
 Run a single stateless validation test.
 
template<>
fl::shared_ptr< RxDeviceRxDevice::create< RxDeviceType::FLEXIO > (int pin) FL_NOEXCEPT
 
template<>
fl::shared_ptr< RxDeviceRxDevice::create< RxDeviceType::FLEXPWM > (int pin) FL_NOEXCEPT
 
template<>
fl::shared_ptr< RxDeviceRxDevice::create< RxDeviceType::FLEXPWM > (int pin) FL_NOEXCEPT
 
template<>
fl::shared_ptr< RxDeviceRxDevice::create< RxDeviceType::ISR > (int pin) FL_NOEXCEPT
 
template<>
fl::shared_ptr< RxDeviceRxDevice::create< RxDeviceType::ISR > (int pin) FL_NOEXCEPT
 
template<>
fl::shared_ptr< RxDeviceRxDevice::create< RxDeviceType::LPC_SCT_CAPTURE > (int pin) FL_NOEXCEPT
 
template<>
fl::shared_ptr< RxDeviceRxDevice::create< RxDeviceType::LPC_SCT_CAPTURE > (int pin) FL_NOEXCEPT
 
template<>
fl::shared_ptr< RxDeviceRxDevice::create< RxDeviceType::PLATFORM_DEFAULT > (int pin) FL_NOEXCEPT
 
template<>
fl::shared_ptr< RxDeviceRxDevice::create< RxDeviceType::PLATFORM_DEFAULT > (int pin) FL_NOEXCEPT
 
template<>
fl::shared_ptr< RxDeviceRxDevice::create< RxDeviceType::RMT > (int pin) FL_NOEXCEPT
 
template<>
fl::shared_ptr< RxDeviceRxDevice::create< RxDeviceType::RMT > (int pin) FL_NOEXCEPT
 
CRGB sample (const CRGB *grid, const XYMap &xyMap, float x, float y, SampleMode mode=SampleMode::SAMPLE_BILINEAR)
 Sample a pixel from a 2D CRGB grid at floating-point coordinates.
 
CRGB sampleBilinear (const CRGB *grid, const XYMap &xyMap, float x, float y)
 Bilinear interpolation sample from a 2D CRGB grid.
 
CRGB sampleNearest (const CRGB *grid, const XYMap &xyMap, float x, float y)
 Nearest-neighbor sample from a 2D CRGB grid.
 
static u16 scale8_to_16_accurate (u8 x)
 
float screen (float &a, float &b)
 
FASTLED_FORCE_INLINE fl::i32 screen_fp (fl::i32 a, fl::i32 b)
 
LIB8STATIC u16 seconds16 () FL_NOEXCEPT
 Return the current seconds since boot in a 16-bit value.
 
void serial_begin (u32 baudRate)
 
bool serial_ready ()
 
fl::string serializeValue (const json_value &value)
 
void set_errno (int value)
 
void set_input_gamut (DiodeProfile *profile, InputGamut g) FL_NOEXCEPT
 
void set_input_gamut (DiodeProfile *profile, InputGamut g, const float white_xy[2]) FL_NOEXCEPT
 
void set_rgb_2_rgbw_function (rgb_2_rgbw_function func)
 
void set_rgb_2_rgbww_function (rgb_2_rgbww_function func) FL_NOEXCEPT
 
void set_rgbw_colorimetric_profile (const DiodeProfile *profile) FL_NOEXCEPT
 
void set_rgbww_colorimetric_profile (const colorimetric_detail::RgbcctProfile *profile) FL_NOEXCEPT
 
void setAdcRange (AdcRange range)
 Set ADC voltage range.
 
void setLogLevel (u8 level) FL_NOEXCEPT
 Set the global log level.
 
void SetPSRamAllocator (void *(*alloc)(fl::size), void(*free)(void *))
 
void setPwm16 (int pin, u16 val)
 Set PWM duty cycle with 16-bit resolution.
 
int setPwmFrequency (int pin, u32 frequency_hz)
 Set PWM frequency for a pin.
 
void setTime (Context &ctx, fl::u32 t)
 
template<typename Iterator>
void shuffle (Iterator first, Iterator last) FL_NOEXCEPT
 
template<typename Iterator>
void shuffle (Iterator first, Iterator last, math::random &rng) FL_NOEXCEPT
 
template<typename Iterator, typename RandomGenerator>
void shuffle (Iterator first, Iterator last, RandomGenerator &g) FL_NOEXCEPT
 
template<typename Iterator, typename Compare>
void sift_down (Iterator first, Iterator last, Iterator start, Compare comp)
 
template<typename T>
constexpr enable_if< is_fixed_point< T >::value, int >::type sign (T x) FL_NOEXCEPT
 
double sin (double value) FL_NOEXCEPT
 
template<typename T>
enable_if< is_fixed_point< T >::value, T >::type sin (T angle) FL_NOEXCEPT
 
template<typename T>
enable_if< is_integral< T >::value, float >::type sin (T value) FL_NOEXCEPT
 
FASTLED_FORCE_INLINE i16 sin16lut (u16 angle) FL_NOEXCEPT
 
FASTLED_FORCE_INLINE i32 sin32 (u32 angle) FL_NOEXCEPT
 
FASTLED_FORCE_INLINE i32 sin32_interp (u8 qi, u8 qi_next, i32 dmask, u32 t, u8 offset=0) FL_NOEXCEPT
 
double sin_impl_double (double value)
 
float sin_impl_float (float value)
 
template<typename T>
enable_if< is_integral< T >::value >::type sincos (T angle, float &out_sin, float &out_cos) FL_NOEXCEPT
 
template<typename T>
enable_if< is_fixed_point< T >::value, void >::type sincos (T angle, T &out_sin, T &out_cos) FL_NOEXCEPT
 
template<typename T>
enable_if< is_floating_point< T >::value >::type sincos (T angle, T &out_sin, T &out_cos) FL_NOEXCEPT
 
FASTLED_FORCE_INLINE SinCos32 sincos32 (u32 angle) FL_NOEXCEPT
 
FASTLED_FORCE_INLINE SinCos32_simd sincos32_simd (simd::simd_u32x4 angles) FL_NOEXCEPT
 Process 4 angles simultaneously, returning vectorized sin/cos values SIMD-optimized: vectorized angle decomposition, vector LUT loads with 4x4 transpose (AoS→SoA), and vectorized quadratic interpolation.
 
float sinf (float value) FL_NOEXCEPT
 
i32 smap16_to_32 (i16 x) FL_NOEXCEPT
 Use int_scale<int16_t, int32_t>() instead.
 
i8 smap16_to_8 (i16 x) FL_NOEXCEPT
 Use int_scale<int16_t, int8_t>() instead.
 
i16 smap32_to_16 (i32 x) FL_NOEXCEPT
 Use int_scale<int32_t, int16_t>() instead.
 
i8 smap32_to_8 (i32 x) FL_NOEXCEPT
 Use int_scale<int32_t, int8_t>() instead.
 
i16 smap8_to_16 (i8 x) FL_NOEXCEPT
 Use int_scale<int8_t, int16_t>() instead.
 
i32 smap8_to_32 (i8 x) FL_NOEXCEPT
 Use int_scale<int8_t, int32_t>() instead.
 
template<typename T>
enable_if< is_fixed_point< T >::value, T >::type smoothstep (T edge0, T edge1, T x) FL_NOEXCEPT
 
template<typename... Args>
int snprintf (char *buffer, fl::size size, const char *format, const Args &... args) FL_NOEXCEPT
 Snprintf-like formatting function that writes to a buffer.
 
template<typename Iterator>
void sort (Iterator first, Iterator last) FL_NOEXCEPT
 
template<typename Iterator, typename Compare>
void sort (Iterator first, Iterator last, Compare comp) FL_NOEXCEPT
 
template<typename Iterator>
void sort_small (Iterator first, Iterator last) FL_NOEXCEPT
 
template<typename Iterator, typename Compare>
void sort_small (Iterator first, Iterator last, Compare comp) FL_NOEXCEPT
 
Tile2x2_u8 splat (vec2f xy)
 "Splat" as in "splat pixel rendering" takes a pixel value in float x,y coordinates and "splats" it into a 2x2 tile of pixel values.
 
template<fl::size N, typename... Args>
int sprintf (char(&buffer)[N], const char *format, const Args &... args) FL_NOEXCEPT
 Sprintf-like formatting function that writes to a buffer.
 
double sqrt (double value) FL_NOEXCEPT
 
float sqrt (float value) FL_NOEXCEPT
 
template<typename T>
enable_if< is_integral< T >::value, float >::type sqrt (T value) FL_NOEXCEPT
 
template<typename T>
enable_if< sqrt_detail::has_static_sqrt< T >::value, decltype(T::sqrt(declval< T >()))>::type sqrt (T value) FL_NOEXCEPT
 
template<typename T>
constexpr enable_if< is_fixed_point< T >::value, T >::type sqrt (T x) FL_NOEXCEPT
 
double sqrt_impl_double (double value)
 
float sqrt_impl_float (float value)
 
float sqrtf (float value) FL_NOEXCEPT
 
template<typename Iterator>
void stable_sort (Iterator first, Iterator last) FL_NOEXCEPT
 
template<typename Iterator, typename Compare>
void stable_sort (Iterator first, Iterator last, Compare comp) FL_NOEXCEPT
 
template<typename T, typename Y>
shared_ptr< T > static_pointer_cast (const shared_ptr< Y > &other) FL_NOEXCEPT
 
template<typename T>
constexpr enable_if< is_fixed_point< T >::value, T >::type step (T edge, T x) FL_NOEXCEPT
 
char * strcat (char *dest, const char *src) FL_NOEXCEPT
 
char * strchr (char *s, int c) FL_NOEXCEPT
 
const char * strchr (const char *s, int c) FL_NOEXCEPT
 
int strcmp (const char *s1, const char *s2) FL_NOEXCEPT
 
char * strcpy (char *dest, const char *src) FL_NOEXCEPT
 
size_t strcspn (const char *s1, const char *s2) FL_NOEXCEPT
 
char * strerror (int errnum) FL_NOEXCEPT
 
static int string_compare (const string &a, const string &b) FL_NOEXCEPT
 
size_t strlen (const char *s) FL_NOEXCEPT
 
char * strncat (char *dest, const char *src, size_t n) FL_NOEXCEPT
 
int strncmp (const char *s1, const char *s2, size_t n) FL_NOEXCEPT
 
char * strncpy (char *dest, const char *src, size_t n) FL_NOEXCEPT
 
char * strpbrk (char *s1, const char *s2) FL_NOEXCEPT
 
const char * strpbrk (const char *s1, const char *s2) FL_NOEXCEPT
 
char * strrchr (char *s, int c) FL_NOEXCEPT
 
const char * strrchr (const char *s, int c) FL_NOEXCEPT
 
size_t strspn (const char *s1, const char *s2) FL_NOEXCEPT
 
const char * strstr (const char *haystack, const char *needle) FL_NOEXCEPT
 
double strtod (const char *str, char **endptr)
 
char * strtok (char *s1, const char *s2) FL_NOEXCEPT
 
long strtol (const char *str, char **endptr, int base)
 
unsigned long strtoul (const char *str, char **endptr, int base)
 
float subtract (float &a, float &b)
 
FASTLED_FORCE_INLINE fl::i32 subtract_fp (fl::i32 a, fl::i32 b)
 
template<typename T, fl::size N>
void swap (array< T, N > &lhs, array< T, N > &rhs) FL_NOEXCEPT
 
template<typename Key, typename Value, typename Less>
void swap (flat_map< Key, Value, Less > &lhs, flat_map< Key, Value, Less > &rhs) FL_NOEXCEPT
 
template<typename Key, typename Less>
void swap (flat_set< Key, Less > &lhs, flat_set< Key, Less > &rhs) FL_NOEXCEPT
 
template<typename T>
void swap (list< T > &lhs, list< T > &rhs)
 
template<typename T1, typename T2>
void swap (pair< T1, T2 > &lhs, pair< T1, T2 > &rhs) FL_NOEXCEPT
 
template<typename T, typename Container>
void swap (queue< T, Container > &lhs, queue< T, Container > &rhs)
 Swap two queues.
 
template<typename T>
void swap (shared_ptr< T > &lhs, shared_ptr< T > &rhs) FL_NOEXCEPT
 
template<typename T>
void swap (T &a, T &b) FL_NOEXCEPT
 
template<typename T, typename Deleter>
void swap (unique_ptr< T, Deleter > &lhs, unique_ptr< T, Deleter > &rhs) FL_NOEXCEPT
 
template<typename Key, typename Value, typename Equal>
void swap (unordered_map_small< Key, Value, Equal > &lhs, unordered_map_small< Key, Value, Equal > &rhs) FL_NOEXCEPT
 
template<typename T>
void swap (weak_ptr< T > &lhs, weak_ptr< T > &rhs) FL_NOEXCEPT
 
template<typename T>
void swap_by_copy (T &a, T &b) FL_NOEXCEPT
 
static void sys_yield ()
 
double tan (double value) FL_NOEXCEPT
 
template<typename T>
enable_if< is_integral< T >::value, float >::type tan (T value) FL_NOEXCEPT
 
double tan_impl_double (double value)
 
float tan_impl_float (float value)
 
float tanf (float value) FL_NOEXCEPT
 
fl::u64 time () FL_NOEXCEPT
 Alias for millis64() - returns 64-bit millisecond time.
 
u16 time_alpha16 (u32 now, u32 start, u32 end) FL_NOEXCEPT
 
u8 time_alpha8 (u32 now, u32 start, u32 end) FL_NOEXCEPT
 
float time_alphaf (u32 now, u32 start, u32 end) FL_NOEXCEPT
 
template<fl::size N, typename T>
array< T, N > to_array (fl::span< const T, fl::size(-1)> s) FL_NOEXCEPT
 
template<typename T, fl::size N>
array< T, N > to_array (fl::span< const T, N > s) FL_NOEXCEPT
 
template<typename T>
fl::string to_hex (T value, bool uppercase=false, bool pad_to_width=false) FL_NOEXCEPT
 Convert an integer value to hexadecimal string representation.
 
template<typename TIMING>
constexpr ChipsetTiming to_runtime_timing () FL_NOEXCEPT
 Convert enum-based timing type to runtime ChipsetTiming struct.
 
string to_string (float value, int precision) FL_NOEXCEPT
 
template<typename T>
string to_string (T value) FL_NOEXCEPT
 
static u8 to_uint8 (float f)
 
char tolower (char c) FL_NOEXCEPT
 Convert character to lowercase.
 
const char * toString (RxBackend backend) FL_NOEXCEPT
 
const char * toString (RxDeviceType type) FL_NOEXCEPT
 Convert RxDeviceType to human-readable string.
 
char toupper (char c) FL_NOEXCEPT
 Convert character to uppercase.
 
template<int m, int n>
FASTLED_FORCE_INLINE void transpose8 (unsigned char *A, unsigned char *B) FL_NOEXCEPT
 Templated 8x8 bit transpose with custom stride.
 
FASTLED_FORCE_INLINE void transpose8x1 (unsigned char *A, unsigned char *B) FL_NOEXCEPT
 Simplified 8x1 bit transpose (inline version)
 
FASTLED_FORCE_INLINE void transpose8x1_MSB (unsigned char *A, unsigned char *B) FL_NOEXCEPT
 Simplified 8x1 bit transpose with MSB-first output.
 
void transpose8x1_noinline (unsigned char *A, unsigned char *B) FL_NOEXCEPT
 Simplified 8x1 bit transpose (non-inline version)
 
void transpose_16lane_inline (const u8 *const lanes[16], u8 *output, size_t num_bytes) FL_NOEXCEPT
 Low-level bit-interleaving primitive for 16 lanes (ISR-safe)
 
void transpose_2lane_inline (const u8 *lane0_byte, const u8 *lane1_byte, u8 *output, size_t num_bytes) FL_NOEXCEPT
 Low-level bit-interleaving primitive for 2 lanes (ISR-safe)
 
FASTLED_FORCE_INLINE void transpose_2strips (const u8 *const input[2], u8 *output, u16 num_leds, u8 bytes_per_led) FL_NOEXCEPT
 Transpose 2 LED strips into parallel bit format.
 
void transpose_4lane_inline (const u8 *const lanes[4], u8 *output, size_t num_bytes) FL_NOEXCEPT
 Low-level bit-interleaving primitive for 4 lanes (ISR-safe)
 
FASTLED_FORCE_INLINE void transpose_4strips (const u8 *const input[4], u8 *output, u16 num_leds, u8 bytes_per_led) FL_NOEXCEPT
 Transpose 4 LED strips into parallel bit format.
 
void transpose_8lane_inline (const u8 *const lanes[8], u8 *output, size_t num_bytes) FL_NOEXCEPT
 Low-level bit-interleaving primitive for 8 lanes (ISR-safe)
 
FASTLED_FORCE_INLINE void transpose_8strips (const u8 *const input[8], u8 *output, u16 num_leds, u8 bytes_per_led) FL_NOEXCEPT
 Transpose 8 LED strips into parallel bit format.
 
template<typename TSource>
void transpose_generic_inline (const TSource *const lanes[], size_t num_lanes, u8 *output, size_t num_items) FL_NOEXCEPT
 Generic bit-interleaving primitive for N lanes with M-bit source data (ISR-safe)
 
bool transpose_strips (u8 num_strips, const u8 *const *input, u8 *output, u16 num_leds, u8 bytes_per_led) FL_NOEXCEPT
 Helper to transpose N strips with automatic dispatch.
 
FASTLED_FORCE_INLINE FL_IRAM size_t transpose_wave8byte_parlio (const u8 *FL_RESTRICT_PARAM laneWaveforms, size_t data_width, u8 *FL_RESTRICT_PARAM outputBuffer) FL_NOEXCEPT
 
template<size_t DATA_WIDTH>
FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION size_t transpose_wave8byte_parlio_template (const u8 *FL_RESTRICT_PARAM laneWaveforms, u8 *FL_RESTRICT_PARAM outputBuffer) FL_NOEXCEPT
 Template specialization of transpose for compile-time data_width (optimization)
 
template<typename GridVisitor>
void traverseGridSegment (const vec2f &start, const vec2f &end, GridVisitor &visitor)
 Traverse a grid segment by selecting the cells that are crossed.
 
template<typename GridVisitor>
void traverseGridSegment16 (const vec2f &start, const vec2f &end, GridVisitor &visitor)
 Traverse a grid segment using fixed-point 8.8 arithmetic.
 
template<typename GridVisitor>
void traverseGridSegment32 (const vec2f &start, const vec2f &end, GridVisitor &visitor)
 
template<typename GridVisitor>
void traverseGridSegmentFloat (const vec2f &start, const vec2f &end, GridVisitor &visitor)
 Traverse a grid segment using floating point arithmetic.
 
void upscale (const CRGB *input, CRGB *output, u16 inputWidth, u16 inputHeight, const fl::XYMap &xyMap)
 
void upscaleArbitrary (const CRGB *input, CRGB *output, u16 inputWidth, u16 inputHeight, const fl::XYMap &xyMap)
 Performs bilinear interpolation for upscaling an image.
 
void upscaleArbitraryFloat (const CRGB *input, CRGB *output, u16 inputWidth, u16 inputHeight, const XYMap &xyMap)
 
void upscaleFloat (const CRGB *input, CRGB *output, u8 inputWidth, u8 inputHeight, const XYMap &xyMap)
 
u8 upscaleFloat (u8 v00, u8 v10, u8 v01, u8 v11, float dx, float dy)
 
void UpscalePalette (const class CHSVPalette16 &srcpal16, class CHSVPalette256 &destpal256)
 
void UpscalePalette (const class CHSVPalette16 &srcpal16, class CHSVPalette32 &destpal32)
 
void UpscalePalette (const class CHSVPalette32 &srcpal32, class CHSVPalette256 &destpal256)
 
void UpscalePalette (const class CRGBPalette16 &srcpal16, class CRGBPalette256 &destpal256)
 
void UpscalePalette (const class CRGBPalette16 &srcpal16, class CRGBPalette32 &destpal32)
 
void UpscalePalette (const class CRGBPalette32 &srcpal32, class CRGBPalette256 &destpal256)
 
void upscalePowerOf2 (const CRGB *input, CRGB *output, u8 inputWidth, u8 inputHeight, const fl::XYMap &xyMap)
 Performs bilinear interpolation for upscaling an image.
 
void upscaleRectangular (const CRGB *input, CRGB *output, u16 inputWidth, u16 inputHeight, u16 outputWidth, u16 outputHeight)
 Optimized upscale for rectangular/line-by-line XY maps.
 
void upscaleRectangularPowerOf2 (const CRGB *input, CRGB *output, u8 inputWidth, u8 inputHeight, u8 outputWidth, u8 outputHeight)
 Optimized upscale for rectangular/line-by-line XY maps (power-of-2 version).
 
int utoa32 (u32 value, char *buffer, int radix) FL_NOEXCEPT
 Convert unsigned 32-bit integer to string buffer in given radix.
 
int utoa64 (u64 value, char *buffer, int radix) FL_NOEXCEPT
 Convert unsigned 64-bit integer to string buffer in given radix.
 
template<typename T>
const vector_element_opsvector_element_ops_for () FL_NOEXCEPT
 Generate a static ops table for type T.
 
FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void wave3 (u8 lane, const Wave3BitExpansionLut &lut, u8(&FL_RESTRICT_PARAM output)[sizeof(Wave3Byte)])
 Convert byte to 3 wave3 bytes using nibble LUT.
 
FL_OPTIMIZE_FUNCTION u32 wave3ClockFrequencyHz (const ChipsetTiming &timing)
 Calculate the clock frequency for wave3 encoding.
 
FL_OPTIMIZE_FUNCTION FL_IRAM void wave3Transpose_16 (const u8(&FL_RESTRICT_PARAM lanes)[16], const Wave3BitExpansionLut &lut, u8(&FL_RESTRICT_PARAM output)[16 *sizeof(Wave3Byte)])
 
FL_OPTIMIZE_FUNCTION FL_IRAM void wave3Transpose_2 (const u8(&FL_RESTRICT_PARAM lanes)[2], const Wave3BitExpansionLut &lut, u8(&FL_RESTRICT_PARAM output)[2 *sizeof(Wave3Byte)])
 
FL_OPTIMIZE_FUNCTION FL_IRAM void wave3Transpose_4 (const u8(&FL_RESTRICT_PARAM lanes)[4], const Wave3BitExpansionLut &lut, u8(&FL_RESTRICT_PARAM output)[4 *sizeof(Wave3Byte)])
 
FL_OPTIMIZE_FUNCTION FL_IRAM void wave3Transpose_8 (const u8(&FL_RESTRICT_PARAM lanes)[8], const Wave3BitExpansionLut &lut, u8(&FL_RESTRICT_PARAM output)[8 *sizeof(Wave3Byte)])
 
FL_OPTIMIZE_FUNCTION void wave3Untranspose_16 (const u8(&FL_RESTRICT_PARAM transposed)[16 *sizeof(Wave3Byte)], u8(&FL_RESTRICT_PARAM output)[16 *sizeof(Wave3Byte)])
 
FL_OPTIMIZE_FUNCTION void wave3Untranspose_2 (const u8(&FL_RESTRICT_PARAM transposed)[2 *sizeof(Wave3Byte)], u8(&FL_RESTRICT_PARAM output)[2 *sizeof(Wave3Byte)])
 
FL_OPTIMIZE_FUNCTION void wave3Untranspose_4 (const u8(&FL_RESTRICT_PARAM transposed)[4 *sizeof(Wave3Byte)], u8(&FL_RESTRICT_PARAM output)[4 *sizeof(Wave3Byte)])
 
FL_OPTIMIZE_FUNCTION void wave3Untranspose_8 (const u8(&FL_RESTRICT_PARAM transposed)[8 *sizeof(Wave3Byte)], u8(&FL_RESTRICT_PARAM output)[8 *sizeof(Wave3Byte)])
 
FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void wave8 (u8 lane, const Wave8BitExpansionLut &lut, u8(&FL_RESTRICT_PARAM output)[sizeof(Wave8Byte)])
 Convert byte to 8 Wave8Bit structures using nibble LUT.
 
FL_OPTIMIZE_FUNCTION FL_IRAM void wave8Transpose_16 (const u8(&FL_RESTRICT_PARAM lanes)[16], const Wave8BitExpansionLut &lut, u8(&FL_RESTRICT_PARAM output)[16 *sizeof(Wave8Byte)])
 
FL_OPTIMIZE_FUNCTION FL_IRAM void wave8Transpose_16 (const u8(&FL_RESTRICT_PARAM lanes)[16], const Wave8ByteExpansionLut &lut, u8(&FL_RESTRICT_PARAM output)[16 *sizeof(Wave8Byte)])
 
FL_OPTIMIZE_FUNCTION FL_IRAM void wave8Transpose_16_bf1 (const u8(&FL_RESTRICT_PARAM lanes)[16], const Wave8ByteExpansionLut &lut, u8(&FL_RESTRICT_PARAM output)[16 *sizeof(Wave8Byte)])
 BF1: chipset-aware direct encode for 16-lane Wave8 (#2548 deep-dive).
 
FL_OPTIMIZE_FUNCTION FL_IRAM void wave8Transpose_16x2_pipe2 (const u8(&FL_RESTRICT_PARAM lanes_a)[16], const u8(&FL_RESTRICT_PARAM lanes_b)[16], const Wave8ByteExpansionLut &lut, u8(&FL_RESTRICT_PARAM output_a)[16 *sizeof(Wave8Byte)], u8(&FL_RESTRICT_PARAM output_b)[16 *sizeof(Wave8Byte)])
 Pipe2: transpose 16-lane × 2-byte-positions (#2548).
 
FL_OPTIMIZE_FUNCTION FL_IRAM void wave8Transpose_16x4_bf1_pipe4 (const u8(&FL_RESTRICT_PARAM lanes_a)[16], const u8(&FL_RESTRICT_PARAM lanes_b)[16], const u8(&FL_RESTRICT_PARAM lanes_c)[16], const u8(&FL_RESTRICT_PARAM lanes_d)[16], const Wave8ByteExpansionLut &lut, u8(&FL_RESTRICT_PARAM output_a)[16 *sizeof(Wave8Byte)], u8(&FL_RESTRICT_PARAM output_b)[16 *sizeof(Wave8Byte)], u8(&FL_RESTRICT_PARAM output_c)[16 *sizeof(Wave8Byte)], u8(&FL_RESTRICT_PARAM output_d)[16 *sizeof(Wave8Byte)])
 BF1 + pipe4: 4-position-pipelined direct encode (#2548 deep-dive).
 
FL_OPTIMIZE_FUNCTION FL_IRAM void wave8Transpose_16x4_pipe4 (const u8(&FL_RESTRICT_PARAM lanes_a)[16], const u8(&FL_RESTRICT_PARAM lanes_b)[16], const u8(&FL_RESTRICT_PARAM lanes_c)[16], const u8(&FL_RESTRICT_PARAM lanes_d)[16], const Wave8ByteExpansionLut &lut, u8(&FL_RESTRICT_PARAM output_a)[16 *sizeof(Wave8Byte)], u8(&FL_RESTRICT_PARAM output_b)[16 *sizeof(Wave8Byte)], u8(&FL_RESTRICT_PARAM output_c)[16 *sizeof(Wave8Byte)], u8(&FL_RESTRICT_PARAM output_d)[16 *sizeof(Wave8Byte)])
 Pipe4: transpose 16-lane × 4-byte-positions (#2548).
 
FL_OPTIMIZE_FUNCTION FL_IRAM void wave8Transpose_2 (const u8(&FL_RESTRICT_PARAM lanes)[2], const Wave8BitExpansionLut &lut, u8(&FL_RESTRICT_PARAM output)[2 *sizeof(Wave8Byte)])
 
FL_OPTIMIZE_FUNCTION FL_IRAM void wave8Transpose_2 (const u8(&FL_RESTRICT_PARAM lanes)[2], const Wave8ByteExpansionLut &lut, u8(&FL_RESTRICT_PARAM output)[2 *sizeof(Wave8Byte)])
 
FL_OPTIMIZE_FUNCTION FL_IRAM void wave8Transpose_2_bf1 (const u8(&FL_RESTRICT_PARAM lanes)[2], const Wave8ByteExpansionLut &lut, u8(&FL_RESTRICT_PARAM output)[2 *sizeof(Wave8Byte)])
 BF1 for 2-lane Wave8 (#2548 deep-dive followup).
 
FL_OPTIMIZE_FUNCTION FL_IRAM void wave8Transpose_4 (const u8(&FL_RESTRICT_PARAM lanes)[4], const Wave8BitExpansionLut &lut, u8(&FL_RESTRICT_PARAM output)[4 *sizeof(Wave8Byte)])
 
FL_OPTIMIZE_FUNCTION FL_IRAM void wave8Transpose_4 (const u8(&FL_RESTRICT_PARAM lanes)[4], const Wave8ByteExpansionLut &lut, u8(&FL_RESTRICT_PARAM output)[4 *sizeof(Wave8Byte)])
 
FL_OPTIMIZE_FUNCTION FL_IRAM void wave8Transpose_4_bf1 (const u8(&FL_RESTRICT_PARAM lanes)[4], const Wave8ByteExpansionLut &lut, u8(&FL_RESTRICT_PARAM output)[4 *sizeof(Wave8Byte)])
 BF1 for 4-lane Wave8 (#2548 deep-dive followup).
 
FL_OPTIMIZE_FUNCTION FL_IRAM void wave8Transpose_8 (const u8(&FL_RESTRICT_PARAM lanes)[8], const Wave8BitExpansionLut &lut, u8(&FL_RESTRICT_PARAM output)[8 *sizeof(Wave8Byte)])
 
FL_OPTIMIZE_FUNCTION FL_IRAM void wave8Transpose_8 (const u8(&FL_RESTRICT_PARAM lanes)[8], const Wave8ByteExpansionLut &lut, u8(&FL_RESTRICT_PARAM output)[8 *sizeof(Wave8Byte)])
 
FL_OPTIMIZE_FUNCTION FL_IRAM void wave8Transpose_8_bf1 (const u8(&FL_RESTRICT_PARAM lanes)[8], const Wave8ByteExpansionLut &lut, u8(&FL_RESTRICT_PARAM output)[8 *sizeof(Wave8Byte)])
 BF1 for 8-lane Wave8 (#2548 deep-dive followup).
 
FL_OPTIMIZE_FUNCTION void wave8Untranspose_16 (const u8(&FL_RESTRICT_PARAM transposed)[16 *sizeof(Wave8Byte)], u8(&FL_RESTRICT_PARAM output)[16 *sizeof(Wave8Byte)])
 
FL_OPTIMIZE_FUNCTION void wave8Untranspose_2 (const u8(&FL_RESTRICT_PARAM transposed)[2 *sizeof(Wave8Byte)], u8(&FL_RESTRICT_PARAM output)[2 *sizeof(Wave8Byte)])
 
FL_OPTIMIZE_FUNCTION void wave8Untranspose_4 (const u8(&FL_RESTRICT_PARAM transposed)[4 *sizeof(Wave8Byte)], u8(&FL_RESTRICT_PARAM output)[4 *sizeof(Wave8Byte)])
 
FL_OPTIMIZE_FUNCTION void wave8Untranspose_8 (const u8(&FL_RESTRICT_PARAM transposed)[8 *sizeof(Wave8Byte)], u8(&FL_RESTRICT_PARAM output)[8 *sizeof(Wave8Byte)])
 
i32 worley_noise_2d_q15 (i32 x, i32 y)
 
size_t write_bytes (const u8 *buffer, size_t size)
 
template<typename SerialOut>
void writeSerialLine (SerialOut &serial, const fl::string &str)
 Write a string with newline to a serial-like output.
 
FASTLED_FORCE_INLINE u16 x_linear (u16 x, u16 length)
 
FASTLED_FORCE_INLINE u16 x_reverse (u16 x, u16 length)
 
fl::u16 XY (fl::u16 x, fl::u16 y)
 
FASTLED_FORCE_INLINE u16 xy_line_by_line (u16 x, u16 y, u16 width, u16 height) FL_NOEXCEPT
 
FASTLED_FORCE_INLINE u16 xy_serpentine (u16 x, u16 y, u16 width, u16 height) FL_NOEXCEPT
 
u16 xyMapCallbackAdapter (u16 x, u16 y, void *userData)
 
void yield ()
 Yield to the platform scheduler.
 
LIB8STATIC u8 squarewave8 (u8 in, u8 pulsewidth=128) FL_NOEXCEPT
 Square wave generator.
 

Variables

const TProgmemRGBPalette16ActivePaletteList []
 
template<typename Allocator>
constexpr bool allocator_traits< Allocator >::has_allocate_at_least_v
 
template<typename Allocator>
constexpr bool allocator_traits< Allocator >::has_reallocate_v
 
static const AnimartrixEntry ANIMATION_TABLE []
 
FL_DISABLE_WARNING_PUSH unsigned char * B
 
const TProgmemRGBPalette16 BlueWhite_p
 
u8 u8 fract8 blur_amount
 
constexpr size_t BYTES_PER_PIXEL_RGB = 3
 Number of bytes per RGB pixel (order-agnostic)
 
constexpr size_t BYTES_PER_PIXEL_RGBW = 4
 Number of bytes per RGBW pixel (order-agnostic)
 
constexpr size_t BYTES_PER_PIXEL_RGBWW = 5
 Number of bytes per RGBWW pixel (order-agnostic, issue #2558).
 
FL_DISABLE_WARNING_GLOBAL_CONSTRUCTORS istream cin
 
static const unsigned char console_font_4x6 []
 
static const unsigned char console_font_5x12 []
 
static const unsigned char console_font_5x8 []
 
static const unsigned char console_font_6x8 []
 
static const unsigned char console_font_7x9 []
 
ostream cout
 
const dec_t dec
 
constexpr fl::size dynamic_extent = fl::size(-1)
 
const endl_t endl
 
const TProgmemRGBPalette16 FairyLight_p
 
SerialPort fl_serial
 
static constexpr i32 FP_255 = 255 * FP_ONE
 
static constexpr i32 FP_ONE = s16x16::SCALE
 
volatile size_t g_json_max_stack_depth
 
volatile size_t g_json_stack_base
 
const u16 GAMMA_2_8_LUT [256]
 
static u8 gLogLevel = static_cast<u8>(LogLevel::FL_LOG_LEVEL_DEBUG)
 
u8 u8 height
 
const hex_t hex
 
const TProgmemRGBPalette16 Holly_p
 
const TProgmemRGBPalette16 Ice_p
 
const DiodeProfile kRgbwDefaultProfile
 
const colorimetric_detail::RgbcctProfile kRgbwwDefaultProfile
 
constexpr size_t MAX_SPI_LANES = 32
 Maximum number of SPI lanes supported (hardware: 1-8, software: up to 32)
 
constexpr u16 NOISE16_EXTENT_MAX = 59500
 
constexpr u16 NOISE16_EXTENT_MIN = 9000
 Observed min/max extents for inoise16() output.
 
constexpr nullopt_t nullopt {}
 
constexpr int numeric_limits< char >::digits
 
constexpr int numeric_limits< char >::digits10
 
constexpr bool numeric_limits< char >::is_signed
 
constexpr int numeric_limits< double >::max_digits10
 
constexpr int numeric_limits< double >::max_exponent
 
constexpr int numeric_limits< double >::max_exponent10
 
constexpr int numeric_limits< double >::min_exponent
 
constexpr int numeric_limits< double >::min_exponent10
 
constexpr int numeric_limits< float >::max_digits10
 
constexpr int numeric_limits< float >::max_exponent
 
constexpr int numeric_limits< float >::max_exponent10
 
constexpr int numeric_limits< float >::min_exponent
 
constexpr int numeric_limits< float >::min_exponent10
 
constexpr int numeric_limits< int >::digits
 
constexpr int numeric_limits< int >::digits10
 
constexpr int numeric_limits< long >::digits
 
constexpr int numeric_limits< long >::digits10
 
constexpr int numeric_limits< longlong >::digits
 
constexpr int numeric_limits< longlong >::digits10
 
constexpr int numeric_limits< short >::digits
 
constexpr int numeric_limits< short >::digits10
 
constexpr int numeric_limits< signedchar >::digits
 
constexpr int numeric_limits< signedchar >::digits10
 
constexpr int numeric_limits< unsignedchar >::digits
 
constexpr int numeric_limits< unsignedchar >::digits10
 
constexpr int numeric_limits< unsignedint >::digits
 
constexpr int numeric_limits< unsignedint >::digits10
 
constexpr int numeric_limits< unsignedlong >::digits
 
constexpr int numeric_limits< unsignedlong >::digits10
 
constexpr int numeric_limits< unsignedlonglong >::digits
 
constexpr int numeric_limits< unsignedlonglong >::digits10
 
constexpr int numeric_limits< unsignedshort >::digits
 
constexpr int numeric_limits< unsignedshort >::digits10
 
const oct_t oct
 
template<typename Fn, fl::size N>
const detail::LutArray< u8, N > ProgmemLUT< Fn, N >::kData
 
const TProgmemRGBPalette16 RedGreenWhite_p
 
const TProgmemRGBPalette16 RedWhite_p
 
const TProgmemRGBPalette16 RetroC9_p
 
const fl::u8 rgb565_5to8_table [32]
 
const fl::u8 rgb565_6to8_table [64]
 
const i32 sinCosPairedLut []
 
const TProgmemRGBPalette16 Snow_p
 
 t = (x ^ (x >> 7)) & 0x00AA00AA
 
constexpr int type_rank< bool >::value
 
constexpr int type_rank< char >::value
 
constexpr int type_rank< double >::value
 
constexpr int type_rank< float >::value
 
constexpr int type_rank< int >::value
 
constexpr int type_rank< long >::value
 
constexpr int type_rank< longdouble >::value
 
constexpr int type_rank< longlong >::value
 
constexpr int type_rank< short >::value
 
constexpr int type_rank< signedchar >::value
 
template<typename T>
constexpr int type_rank< T >::value
 
constexpr int type_rank< unsignedchar >::value
 
constexpr int type_rank< unsignedint >::value
 
constexpr int type_rank< unsignedlong >::value
 
constexpr int type_rank< unsignedlonglong >::value
 
constexpr int type_rank< unsignedshort >::value
 
u8 width
 
 x = *(u32*)(A+4)
 
 y = *(u32*)(A)
 
Class Members
typedef T * type T *

◆ fl::add_pointer< T & >

struct fl::add_pointer< T & >
+ Inheritance diagram for fl::add_pointer< T & >:
+ Collaboration diagram for fl::add_pointer< T & >:
Class Members
typedef T * type
typedef T * type T *

◆ fl::add_pointer< T && >

struct fl::add_pointer< T && >
+ Inheritance diagram for fl::add_pointer< T && >:
+ Collaboration diagram for fl::add_pointer< T && >:
Class Members
typedef T * type
typedef T * type T *

◆ fl::add_rvalue_reference

struct fl::add_rvalue_reference
+ Inheritance diagram for fl::add_rvalue_reference< T >:
Class Members
typedef T && type T&&

◆ fl::add_rvalue_reference< T & >

struct fl::add_rvalue_reference< T & >
+ Inheritance diagram for fl::add_rvalue_reference< T & >:
+ Collaboration diagram for fl::add_rvalue_reference< T & >:
Class Members
typedef T && type
typedef T & type T&

◆ fl::allocation_result

struct fl::allocation_result
Class Members
SizeType count
Pointer ptr

◆ fl::AnimartrixAnimInfo

struct fl::AnimartrixAnimInfo
Class Members
int id
const char * name

◆ fl::AnimartrixEntry

struct fl::AnimartrixEntry
+ Collaboration diagram for fl::AnimartrixEntry:
Class Members
AnimartrixAnim anim
AnimartrixVizFactory factory
const char * name

◆ fl::AudioFrame

struct fl::AudioFrame
Class Members
float bass = 0.0f Bass energy (0.0-1.0, normalized)
bool beat = false True if a beat was detected this sample.
float mid = 0.0f Mid energy (0.0-1.0, normalized)
u32 timestamp = 0 When this audio sample was captured (ms)
float treble = 0.0f Treble energy (0.0-1.0, normalized)
float volume = 0.0f Overall volume (0.0-1.0, normalized RMS)

◆ fl::BindResult

struct fl::BindResult
+ Inheritance diagram for fl::BindResult< Sig >:

◆ fl::bitset_fixed

class fl::bitset_fixed
+ Inheritance diagram for fl::bitset_fixed< N >:

◆ fl::bitset_inlined

class fl::bitset_inlined

◆ fl::bitswap_type

union fl::bitswap_type
Class Members
struct bitswap_type.__unnamed0__ __unnamed__
u8 bytes[8] eight 8-bit values to load for swapping
u32 word[2] two 32-bit values to load for swapping

◆ fl::bitswap_type.__unnamed0__

struct fl::bitswap_type.__unnamed0__
Class Members
sub4 a 32-bit access struct for bit swapping, upper four bytes
sub4 b 32-bit access struct for bit swapping, lower four bytes

◆ fl::Blend2dParams

struct fl::Blend2dParams
Class Members
u8 blur_amount = 0
u8 blur_passes = 1

◆ fl::BusTraits

struct fl::BusTraits

◆ fl::callable_traits

struct fl::callable_traits
+ Inheritance diagram for fl::callable_traits< T, typename >:

◆ fl::ChasingSpiralPixelLUT

struct fl::ChasingSpiralPixelLUT
+ Collaboration diagram for fl::ChasingSpiralPixelLUT:
Class Members
s16x16 base_angle
s16x16 dist_scaled
u16 pixel_idx
s16x16 rf3
s16x16 rf_half
s16x16 rf_quarter

◆ fl::ChipsetTiming

struct fl::ChipsetTiming
Class Members
const char * name Human-readable chipset name.
u32 RESET Reset/latch time (microseconds)
u32 T1 High time for bit 0 (nanoseconds)
u32 T2 Additional high time for bit 1 (nanoseconds)
u32 T3 Low tail duration (nanoseconds)

◆ fl::ChipsetTiming4Phase

struct fl::ChipsetTiming4Phase
Class Members
u32 gap_tolerance_ns = 0 Maximum gap duration to tolerate (0 = no gap tolerance, treat as error)

Pulses longer than reset_min_us but shorter than gap_tolerance_ns are skipped during decoding without triggering errors. Useful for PARLIO ~20us DMA gaps between frames.

u32 reset_min_us Reset pulse minimum duration (e.g., 50us)
u32 t0h_max_ns Bit 0 high time maximum (e.g., 550ns)
u32 t0h_min_ns Bit 0 high time minimum (e.g., 250ns)
u32 t0l_max_ns Bit 0 low time maximum (e.g., 1000ns)
u32 t0l_min_ns Bit 0 low time minimum (e.g., 700ns)
u32 t1h_max_ns Bit 1 high time maximum (e.g., 950ns)
u32 t1h_min_ns Bit 1 high time minimum (e.g., 650ns)
u32 t1l_max_ns Bit 1 low time maximum (e.g., 600ns)
u32 t1l_min_ns Bit 1 low time minimum (e.g., 300ns)

◆ fl::choose_by_rank

struct fl::choose_by_rank
Class Members
typedef typename value > value), T, typename value > value), U, void >::type >::type type

◆ fl::choose_by_size

struct fl::choose_by_size
Class Members
typedef typename conditional<(sizeof(T) > sizeof(U)), T, typename conditional<(sizeof(U) > sizeof(T)), U, void >::type >::type type

◆ fl::common_type

struct fl::common_type
Class Members
typedef typename type type typename common_type_impl<T, U>::type

◆ fl::common_type_impl

struct fl::common_type_impl
+ Inheritance diagram for fl::common_type_impl< T, U, typename >:
Class Members
typedef T type T

◆ fl::common_type_impl< double, float >

struct fl::common_type_impl< double, float >
+ Inheritance diagram for fl::common_type_impl< double, float >:
+ Collaboration diagram for fl::common_type_impl< double, float >:
Class Members
typedef double type
typedef double type double

◆ fl::common_type_impl< double, long double >

struct fl::common_type_impl< double, long double >
+ Inheritance diagram for fl::common_type_impl< double, long double >:
+ Collaboration diagram for fl::common_type_impl< double, long double >:
Class Members
typedef double type
typedef long double type long double

◆ fl::common_type_impl< double, T, typename enable_if<(is_integral< T >::value||is_floating_point< T >::value) &&!is_same< T, double >::value >::type >

struct fl::common_type_impl< double, T, typename enable_if<(is_integral< T >::value||is_floating_point< T >::value) &&!is_same< T, double >::value >::type >
+ Inheritance diagram for fl::common_type_impl< double, T, typename enable_if<(is_integral< T >::value||is_floating_point< T >::value) &&!is_same< T, double >::value >::type >:
+ Collaboration diagram for fl::common_type_impl< double, T, typename enable_if<(is_integral< T >::value||is_floating_point< T >::value) &&!is_same< T, double >::value >::type >:
Class Members
typedef double type
typedef double type double

◆ fl::common_type_impl< float, double >

struct fl::common_type_impl< float, double >
+ Inheritance diagram for fl::common_type_impl< float, double >:
+ Collaboration diagram for fl::common_type_impl< float, double >:
Class Members
typedef float type
typedef double type double

◆ fl::common_type_impl< float, long double >

struct fl::common_type_impl< float, long double >
+ Inheritance diagram for fl::common_type_impl< float, long double >:
+ Collaboration diagram for fl::common_type_impl< float, long double >:
Class Members
typedef float type
typedef long double type long double

◆ fl::common_type_impl< float, T, typename enable_if<(is_integral< T >::value||is_floating_point< T >::value) &&!is_same< T, float >::value >::type >

struct fl::common_type_impl< float, T, typename enable_if<(is_integral< T >::value||is_floating_point< T >::value) &&!is_same< T, float >::value >::type >
+ Inheritance diagram for fl::common_type_impl< float, T, typename enable_if<(is_integral< T >::value||is_floating_point< T >::value) &&!is_same< T, float >::value >::type >:
+ Collaboration diagram for fl::common_type_impl< float, T, typename enable_if<(is_integral< T >::value||is_floating_point< T >::value) &&!is_same< T, float >::value >::type >:
Class Members
typedef float type
typedef float type float

◆ fl::common_type_impl< i8, u8, void >

struct fl::common_type_impl< i8, u8, void >
+ Inheritance diagram for fl::common_type_impl< i8, u8, void >:
+ Collaboration diagram for fl::common_type_impl< i8, u8, void >:
Class Members
typedef i8 type

◆ fl::common_type_impl< long double, double >

struct fl::common_type_impl< long double, double >
+ Inheritance diagram for fl::common_type_impl< long double, double >:
+ Collaboration diagram for fl::common_type_impl< long double, double >:
Class Members
typedef long double type
typedef long double type long double

◆ fl::common_type_impl< long double, float >

struct fl::common_type_impl< long double, float >
+ Inheritance diagram for fl::common_type_impl< long double, float >:
+ Collaboration diagram for fl::common_type_impl< long double, float >:
Class Members
typedef long double type
typedef long double type long double

◆ fl::common_type_impl< T, double, typename enable_if<(is_integral< T >::value||is_floating_point< T >::value) &&!is_same< T, double >::value >::type >

struct fl::common_type_impl< T, double, typename enable_if<(is_integral< T >::value||is_floating_point< T >::value) &&!is_same< T, double >::value >::type >
+ Inheritance diagram for fl::common_type_impl< T, double, typename enable_if<(is_integral< T >::value||is_floating_point< T >::value) &&!is_same< T, double >::value >::type >:
+ Collaboration diagram for fl::common_type_impl< T, double, typename enable_if<(is_integral< T >::value||is_floating_point< T >::value) &&!is_same< T, double >::value >::type >:
Class Members
typedef T type
typedef double type double

◆ fl::common_type_impl< T, float, typename enable_if<(is_integral< T >::value||is_floating_point< T >::value) &&!is_same< T, float >::value >::type >

struct fl::common_type_impl< T, float, typename enable_if<(is_integral< T >::value||is_floating_point< T >::value) &&!is_same< T, float >::value >::type >
+ Inheritance diagram for fl::common_type_impl< T, float, typename enable_if<(is_integral< T >::value||is_floating_point< T >::value) &&!is_same< T, float >::value >::type >:
+ Collaboration diagram for fl::common_type_impl< T, float, typename enable_if<(is_integral< T >::value||is_floating_point< T >::value) &&!is_same< T, float >::value >::type >:
Class Members
typedef T type
typedef float type float

◆ fl::common_type_impl< T, T >

struct fl::common_type_impl< T, T >
+ Inheritance diagram for fl::common_type_impl< T, T >:
+ Collaboration diagram for fl::common_type_impl< T, T >:
Class Members
typedef T type
typedef T type T

◆ fl::common_type_impl< T, U, typename enable_if< is_integral< T >::value &&is_integral< U >::value &&!is_same< T, U >::value &&!((is_same< T, i8 >::value &&is_same< U, u8 >::value)||(is_same< T, u8 >::value &&is_same< U, i8 >::value))>::type >

struct fl::common_type_impl< T, U, typename enable_if< is_integral< T >::value &&is_integral< U >::value &&!is_same< T, U >::value &&!((is_same< T, i8 >::value &&is_same< U, u8 >::value)||(is_same< T, u8 >::value &&is_same< U, i8 >::value))>::type >
+ Inheritance diagram for fl::common_type_impl< T, U, typename enable_if< is_integral< T >::value &&is_integral< U >::value &&!is_same< T, U >::value &&!((is_same< T, i8 >::value &&is_same< U, u8 >::value)||(is_same< T, u8 >::value &&is_same< U, i8 >::value))>::type >:
+ Collaboration diagram for fl::common_type_impl< T, U, typename enable_if< is_integral< T >::value &&is_integral< U >::value &&!is_same< T, U >::value &&!((is_same< T, i8 >::value &&is_same< U, u8 >::value)||(is_same< T, u8 >::value &&is_same< U, i8 >::value))>::type >:
Class Members
typedef T type
typedef typename type type typename integer_promotion_impl<T, U>::type

◆ fl::common_type_impl< u8, i8, void >

struct fl::common_type_impl< u8, i8, void >
+ Inheritance diagram for fl::common_type_impl< u8, i8, void >:
+ Collaboration diagram for fl::common_type_impl< u8, i8, void >:
Class Members
typedef u8 type

◆ fl::conditional

struct fl::conditional
+ Inheritance diagram for fl::conditional< B, T, F >:
Class Members
typedef T type T

◆ fl::conditional< false, T, F >

struct fl::conditional< false, T, F >
+ Inheritance diagram for fl::conditional< false, T, F >:
+ Collaboration diagram for fl::conditional< false, T, F >:
Class Members
typedef T type
typedef F type F

◆ fl::ConnectionConfig

struct fl::ConnectionConfig
Class Members
u32 connectionTimeoutMs = 60000
u32 heartbeatIntervalMs = 30000
u32 maxReconnectAttempts = 0
u32 reconnectBackoffMultiplier = 2
u32 reconnectInitialDelayMs = 1000
u32 reconnectMaxDelayMs = 30000

◆ fl::contains_type

struct fl::contains_type
+ Inheritance diagram for fl::contains_type< T, Types >:

◆ fl::CRGB.__unnamed0__

union fl::CRGB.__unnamed0__
Class Members
struct CRGB.__unnamed0__.__unnamed0__ __unnamed__
u8 raw[3] Access the red, green, and blue data as an array.

Where:

  • raw[0] is the red value
  • raw[1] is the green value
  • raw[2] is the blue value

◆ fl::CRGB.__unnamed0__.__unnamed0__

struct fl::CRGB.__unnamed0__.__unnamed0__
Class Members
union CRGB.__unnamed0__.__unnamed0__.__unnamed2__ __unnamed__
union CRGB.__unnamed0__.__unnamed0__.__unnamed0__ __unnamed__
union CRGB.__unnamed0__.__unnamed0__.__unnamed1__ __unnamed__

◆ fl::CRGB.__unnamed0__.__unnamed0__.__unnamed0__

union fl::CRGB.__unnamed0__.__unnamed0__.__unnamed0__
Class Members
u8 r Red channel value.
u8 red

◆ fl::CRGB.__unnamed0__.__unnamed0__.__unnamed1__

union fl::CRGB.__unnamed0__.__unnamed0__.__unnamed1__
Class Members
u8 g Green channel value.
u8 green

◆ fl::CRGB.__unnamed0__.__unnamed0__.__unnamed2__

union fl::CRGB.__unnamed0__.__unnamed0__.__unnamed2__
Class Members
u8 b Blue channel value.
u8 blue

◆ fl::CRGBA5

struct fl::CRGBA5
+ Collaboration diagram for fl::CRGBA5:
Class Members
u8 brightness_5bit
CRGB color

◆ fl::dec_t

struct fl::dec_t

◆ fl::DefaultBus

struct fl::DefaultBus

◆ fl::DiodeProfile

struct fl::DiodeProfile
Class Members
float input_xy_b[2]
float input_xy_g[2]
float input_xy_r[2]
float input_xy_w[2]
float lum_b
float lum_g
float lum_r
float lum_w
int nominal_cct
float xy_b[2]
float xy_g[2]
float xy_r[2]
float xy_w[2]

◆ fl::DriverInfo

struct fl::DriverInfo
+ Collaboration diagram for fl::DriverInfo:
Class Members
bool enabled Whether driver is currently enabled.
string name Driver name (empty for unnamed drivers)
int priority Driver priority (higher = preferred)

◆ fl::Empty

struct fl::Empty

◆ fl::enable_if

struct fl::enable_if
+ Inheritance diagram for fl::enable_if< Condition, T >:

◆ fl::enable_if< true, T >

struct fl::enable_if< true, T >
+ Inheritance diagram for fl::enable_if< true, T >:
+ Collaboration diagram for fl::enable_if< true, T >:
Class Members
typedef T type T

◆ fl::endl_t

struct fl::endl_t

◆ fl::FILE_impl

struct fl::FILE_impl
Class Members
int dummy

◆ fl::fixed_point_impl

struct fl::fixed_point_impl
+ Inheritance diagram for fl::fixed_point_impl< IntBits, FracBits, S >:

◆ fl::fixed_point_impl< 0, 32, Sign::SIGNED >

struct fl::fixed_point_impl< 0, 32, Sign::SIGNED >
+ Inheritance diagram for fl::fixed_point_impl< 0, 32, Sign::SIGNED >:
+ Collaboration diagram for fl::fixed_point_impl< 0, 32, Sign::SIGNED >:
Class Members
typedef s0x32 type s0x32

◆ fl::fixed_point_impl< 0, 32, Sign::UNSIGNED >

struct fl::fixed_point_impl< 0, 32, Sign::UNSIGNED >
+ Inheritance diagram for fl::fixed_point_impl< 0, 32, Sign::UNSIGNED >:
+ Collaboration diagram for fl::fixed_point_impl< 0, 32, Sign::UNSIGNED >:
Class Members
typedef u0x32 type u0x32

◆ fl::fixed_point_impl< 12, 4, Sign::SIGNED >

struct fl::fixed_point_impl< 12, 4, Sign::SIGNED >
+ Inheritance diagram for fl::fixed_point_impl< 12, 4, Sign::SIGNED >:
+ Collaboration diagram for fl::fixed_point_impl< 12, 4, Sign::SIGNED >:
Class Members
typedef s12x4 type s12x4

◆ fl::fixed_point_impl< 12, 4, Sign::UNSIGNED >

struct fl::fixed_point_impl< 12, 4, Sign::UNSIGNED >
+ Inheritance diagram for fl::fixed_point_impl< 12, 4, Sign::UNSIGNED >:
+ Collaboration diagram for fl::fixed_point_impl< 12, 4, Sign::UNSIGNED >:
Class Members
typedef u12x4 type u12x4

◆ fl::fixed_point_impl< 16, 16, Sign::SIGNED >

struct fl::fixed_point_impl< 16, 16, Sign::SIGNED >
+ Inheritance diagram for fl::fixed_point_impl< 16, 16, Sign::SIGNED >:
+ Collaboration diagram for fl::fixed_point_impl< 16, 16, Sign::SIGNED >:
Class Members
typedef s16x16 type s16x16

◆ fl::fixed_point_impl< 16, 16, Sign::UNSIGNED >

struct fl::fixed_point_impl< 16, 16, Sign::UNSIGNED >
+ Inheritance diagram for fl::fixed_point_impl< 16, 16, Sign::UNSIGNED >:
+ Collaboration diagram for fl::fixed_point_impl< 16, 16, Sign::UNSIGNED >:
Class Members
typedef u16x16 type u16x16

◆ fl::fixed_point_impl< 24, 8, Sign::SIGNED >

struct fl::fixed_point_impl< 24, 8, Sign::SIGNED >
+ Inheritance diagram for fl::fixed_point_impl< 24, 8, Sign::SIGNED >:
+ Collaboration diagram for fl::fixed_point_impl< 24, 8, Sign::SIGNED >:
Class Members
typedef s24x8 type s24x8

◆ fl::fixed_point_impl< 24, 8, Sign::UNSIGNED >

struct fl::fixed_point_impl< 24, 8, Sign::UNSIGNED >
+ Inheritance diagram for fl::fixed_point_impl< 24, 8, Sign::UNSIGNED >:
+ Collaboration diagram for fl::fixed_point_impl< 24, 8, Sign::UNSIGNED >:
Class Members
typedef u24x8 type u24x8

◆ fl::fixed_point_impl< 4, 12, Sign::SIGNED >

struct fl::fixed_point_impl< 4, 12, Sign::SIGNED >
+ Inheritance diagram for fl::fixed_point_impl< 4, 12, Sign::SIGNED >:
+ Collaboration diagram for fl::fixed_point_impl< 4, 12, Sign::SIGNED >:
Class Members
typedef s4x12 type s4x12

◆ fl::fixed_point_impl< 4, 12, Sign::UNSIGNED >

struct fl::fixed_point_impl< 4, 12, Sign::UNSIGNED >
+ Inheritance diagram for fl::fixed_point_impl< 4, 12, Sign::UNSIGNED >:
+ Collaboration diagram for fl::fixed_point_impl< 4, 12, Sign::UNSIGNED >:
Class Members
typedef u4x12 type u4x12

◆ fl::fixed_point_impl< 8, 24, Sign::SIGNED >

struct fl::fixed_point_impl< 8, 24, Sign::SIGNED >
+ Inheritance diagram for fl::fixed_point_impl< 8, 24, Sign::SIGNED >:
+ Collaboration diagram for fl::fixed_point_impl< 8, 24, Sign::SIGNED >:
Class Members
typedef s8x24 type s8x24

◆ fl::fixed_point_impl< 8, 24, Sign::UNSIGNED >

struct fl::fixed_point_impl< 8, 24, Sign::UNSIGNED >
+ Inheritance diagram for fl::fixed_point_impl< 8, 24, Sign::UNSIGNED >:
+ Collaboration diagram for fl::fixed_point_impl< 8, 24, Sign::UNSIGNED >:
Class Members
typedef u8x24 type u8x24

◆ fl::fixed_point_impl< 8, 8, Sign::SIGNED >

struct fl::fixed_point_impl< 8, 8, Sign::SIGNED >
+ Inheritance diagram for fl::fixed_point_impl< 8, 8, Sign::SIGNED >:
+ Collaboration diagram for fl::fixed_point_impl< 8, 8, Sign::SIGNED >:
Class Members
typedef s8x8 type s8x8

◆ fl::fixed_point_impl< 8, 8, Sign::UNSIGNED >

struct fl::fixed_point_impl< 8, 8, Sign::UNSIGNED >
+ Inheritance diagram for fl::fixed_point_impl< 8, 8, Sign::UNSIGNED >:
+ Collaboration diagram for fl::fixed_point_impl< 8, 8, Sign::UNSIGNED >:
Class Members
typedef u8x8 type u8x8

◆ fl::FlowFieldParams

struct fl::FlowFieldParams
Class Members
float color_shift = 0.04f Color shift speed.
int dot_count = 3 Number of orbital dots.
int emitter_mode = 0 0=Lissajous, 1=Dots, 2=Both
float endpoint_speed = 0.80f Lissajous endpoint speed.
float flow_amp_x = 1.0f Flow amplitude X.
float flow_amp_y = 1.0f Flow amplitude Y.
float flow_shift = 1.8f Pixel shift amount.
float flow_speed_x = 0.10f Noise scroll speed X.
float flow_speed_y = 0.10f Noise scroll speed Y.
float noise_freq_x = 0.33f Noise frequency X.
float noise_freq_y = 0.32f Noise frequency Y.
float persistence = 0.86f Trail half-life in seconds.
bool reverse_x_profile = true Reverse X profile (matches Python)
bool show_flow_vectors = false Draw flow profiles as overlay.

◆ fl::FontMetrics

struct fl::FontMetrics
Class Members
i32 ascent
i32 descent
i32 lineGap
i32 x0
i32 x1
i32 y0
i32 y1

◆ fl::function

class fl::function
+ Inheritance diagram for fl::function< T >:

◆ fl::function_traits

struct fl::function_traits
+ Inheritance diagram for fl::function_traits< T >:

◆ fl::GlyphMetrics

struct fl::GlyphMetrics
Class Members
i32 advanceWidth
bool isEmpty
i32 leftSideBearing
i32 x0
i32 x1
i32 y0
i32 y1

◆ fl::H264Config

struct fl::H264Config
Class Members
u16 maxHeight = 1080
u16 maxWidth = 1920

◆ fl::HashSet

class fl::HashSet

◆ fl::hex_t

struct fl::hex_t

◆ fl::HttpRequest

struct fl::HttpRequest
+ Collaboration diagram for fl::HttpRequest:
Class Members
vector< u8 > body
flat_map< string, string, StringFastLess > headers
string method
string uri
string version

◆ fl::HttpResponse

struct fl::HttpResponse
+ Collaboration diagram for fl::HttpResponse:
Class Members
vector< u8 > body
flat_map< string, string, StringFastLess > headers
string reasonPhrase
int statusCode = 0
string version

◆ fl::identity

struct fl::identity
Class Members
typedef T type T

◆ fl::iterator_traits

struct fl::iterator_traits
+ Inheritance diagram for fl::iterator_traits< Iterator, typename >:
Class Members
typedef difference_type difference_type
typedef forward_iterator_tag iterator_category
typedef pointer pointer
typedef reference reference
typedef value_type value_type

◆ fl::iterator_traits< const T * >

struct fl::iterator_traits< const T * >
+ Inheritance diagram for fl::iterator_traits< const T * >:
+ Collaboration diagram for fl::iterator_traits< const T * >:
Class Members
typedef const T *::difference_type difference_type
typedef ptrdiff_t difference_type
typedef forward_iterator_tag iterator_category
typedef random_access_iterator_tag iterator_category
typedef const T *::pointer pointer
typedef const T * pointer
typedef const T *::reference reference
typedef const T & reference
typedef const T *::value_type value_type
typedef T value_type

◆ fl::iterator_traits< T * >

struct fl::iterator_traits< T * >
+ Inheritance diagram for fl::iterator_traits< T * >:
+ Collaboration diagram for fl::iterator_traits< T * >:
Class Members
typedef T *::difference_type difference_type
typedef ptrdiff_t difference_type
typedef forward_iterator_tag iterator_category
typedef random_access_iterator_tag iterator_category
typedef T *::pointer pointer
typedef T * pointer
typedef T *::reference reference
typedef T & reference
typedef T *::value_type value_type
typedef T value_type

◆ fl::JsonArgConverter

class fl::JsonArgConverter
+ Inheritance diagram for fl::JsonArgConverter< Signature >:

◆ fl::just8bits

union fl::just8bits
Class Members
struct just8bits.__unnamed0__ __unnamed__
u8 raw the entire byte

◆ fl::just8bits.__unnamed0__

struct fl::just8bits.__unnamed0__
Class Members
u32 a0:1 bit 0 (0x01)
u32 a1:1 bit 1 (0x02)
u32 a2:1 bit 2 (0x04)
u32 a3:1 bit 3 (0x08)
u32 a4:1 bit 4 (0x10)
u32 a5:1 bit 5 (0x20)
u32 a6:1 bit 6 (0x40)
u32 a7:1 bit 7 (0x80)

◆ fl::LuminovaParams

struct fl::LuminovaParams
Class Members
u8 blur_amount = 24
u8 fade_amount = 18
int max_particles = 256
u8 point_gain = 128

◆ fl::make_index_sequence_impl

struct fl::make_index_sequence_impl
+ Inheritance diagram for fl::make_index_sequence_impl< N, Is >:

◆ fl::make_index_sequence_impl< 0, Is... >

struct fl::make_index_sequence_impl< 0, Is... >
+ Inheritance diagram for fl::make_index_sequence_impl< 0, Is... >:
+ Collaboration diagram for fl::make_index_sequence_impl< 0, Is... >:
Class Members
typedef index_sequence< Is... > type index_sequence<Is...>

◆ fl::max_align

struct fl::max_align
+ Inheritance diagram for fl::max_align< Types >:

◆ fl::max_align_selector

struct fl::max_align_selector
+ Inheritance diagram for fl::max_align_selector< UseLD >:
Class Members
typedef max_align_with_ld type

◆ fl::max_align_selector< false >

struct fl::max_align_selector< false >
+ Inheritance diagram for fl::max_align_selector< false >:
+ Collaboration diagram for fl::max_align_selector< false >:
Class Members
typedef max_align_with_ld type
typedef max_align_without_ld type

◆ fl::max_size

struct fl::max_size
+ Inheritance diagram for fl::max_size< Types >:

◆ fl::MethodInfo

struct fl::MethodInfo
+ Collaboration diagram for fl::MethodInfo:
Class Members
string description
string name
vector< ParamInfo > params
string returnType
vector< string > tags

◆ fl::modulators

struct fl::modulators
Class Members
float directional[num_oscillators] = {}
float linear[num_oscillators] = {}
float noise_angle[num_oscillators] = {}
float radial[num_oscillators] = {}

◆ fl::Mp4TrackInfo

struct fl::Mp4TrackInfo
+ Collaboration diagram for fl::Mp4TrackInfo:
Class Members
u16 height = 0
bool isValid = false
u8 lengthSizeMinusOne = 0
u8 level = 0
vector< vector< u8 > > pps
u8 profile = 0
vector< vector< u8 > > sps
u16 width = 0

◆ fl::MultiMap

class fl::MultiMap

◆ fl::MultiSet

class fl::MultiSet

◆ fl::nullopt_t

struct fl::nullopt_t

◆ fl::oct_t

struct fl::oct_t

◆ fl::oscillators

struct fl::oscillators
Class Members
float master_speed = 0.0f
float offset[num_oscillators] = {}
float ratio[num_oscillators] = {}

◆ fl::output_iterator_tag

struct fl::output_iterator_tag

◆ fl::pair_element

struct fl::pair_element
+ Inheritance diagram for fl::pair_element< I, T1, T2 >:

◆ fl::pair_element< 0, T1, T2 >

struct fl::pair_element< 0, T1, T2 >
+ Inheritance diagram for fl::pair_element< 0, T1, T2 >:
+ Collaboration diagram for fl::pair_element< 0, T1, T2 >:
Class Members
typedef T1 type T1

◆ fl::pair_element< 1, T1, T2 >

struct fl::pair_element< 1, T1, T2 >
+ Inheritance diagram for fl::pair_element< 1, T1, T2 >:
+ Collaboration diagram for fl::pair_element< 1, T1, T2 >:
Class Members
typedef T2 type T2

◆ fl::ParamInfo

struct fl::ParamInfo
+ Collaboration diagram for fl::ParamInfo:
Class Members
string name
string type

◆ fl::PercussionState

struct fl::PercussionState
Class Members
bool hihat = false
bool kick = false
bool snare = false
bool tom = false

◆ fl::PinInfo

struct fl::PinInfo
Class Members
int pin = -1
int port = -1

◆ fl::Pins16

struct fl::Pins16
Class Members
int pins[16]

◆ fl::Pins8

struct fl::Pins8
Class Members
int pins[8]

◆ fl::remove_const

struct fl::remove_const
+ Inheritance diagram for fl::remove_const< T >:
Class Members
typedef T type T

◆ fl::remove_const< const T >

struct fl::remove_const< const T >
+ Inheritance diagram for fl::remove_const< const T >:
+ Collaboration diagram for fl::remove_const< const T >:
Class Members
typedef T type
typedef T type T

◆ fl::remove_cv

struct fl::remove_cv
+ Inheritance diagram for fl::remove_cv< T >:
Class Members
typedef T type T

◆ fl::remove_cv< const T >

struct fl::remove_cv< const T >
+ Inheritance diagram for fl::remove_cv< const T >:
+ Collaboration diagram for fl::remove_cv< const T >:
Class Members
typedef T type
typedef T type T

◆ fl::remove_cv< const volatile T >

struct fl::remove_cv< const volatile T >
+ Inheritance diagram for fl::remove_cv< const volatile T >:
+ Collaboration diagram for fl::remove_cv< const volatile T >:
Class Members
typedef const volatile T type
typedef T type T

◆ fl::remove_cv< volatile T >

struct fl::remove_cv< volatile T >
+ Inheritance diagram for fl::remove_cv< volatile T >:
+ Collaboration diagram for fl::remove_cv< volatile T >:
Class Members
typedef T type
typedef T type T

◆ fl::remove_extent

struct fl::remove_extent
+ Inheritance diagram for fl::remove_extent< T >:
Class Members
typedef T type T

◆ fl::remove_extent< T[]>

struct fl::remove_extent< T[]>
+ Inheritance diagram for fl::remove_extent< T[]>:
+ Collaboration diagram for fl::remove_extent< T[]>:
Class Members
typedef T type
typedef T type T

◆ fl::remove_extent< T[N]>

struct fl::remove_extent< T[N]>
+ Inheritance diagram for fl::remove_extent< T[N]>:
+ Collaboration diagram for fl::remove_extent< T[N]>:
Class Members
typedef T type
typedef T type T

◆ fl::remove_pointer

struct fl::remove_pointer
+ Inheritance diagram for fl::remove_pointer< T >:
Class Members
typedef T type T

◆ fl::remove_pointer< T * >

struct fl::remove_pointer< T * >
+ Inheritance diagram for fl::remove_pointer< T * >:
+ Collaboration diagram for fl::remove_pointer< T * >:
Class Members
typedef T type
typedef T type T

◆ fl::remove_pointer< T *const >

struct fl::remove_pointer< T *const >
+ Inheritance diagram for fl::remove_pointer< T *const >:
+ Collaboration diagram for fl::remove_pointer< T *const >:
Class Members
typedef T type
typedef T type T

◆ fl::remove_pointer< T *const volatile >

struct fl::remove_pointer< T *const volatile >
+ Inheritance diagram for fl::remove_pointer< T *const volatile >:
+ Collaboration diagram for fl::remove_pointer< T *const volatile >:
Class Members
typedef T type
typedef T type T

◆ fl::remove_pointer< T *volatile >

struct fl::remove_pointer< T *volatile >
+ Inheritance diagram for fl::remove_pointer< T *volatile >:
+ Collaboration diagram for fl::remove_pointer< T *volatile >:
Class Members
typedef T type
typedef T type T

◆ fl::remove_reference

struct fl::remove_reference
+ Inheritance diagram for fl::remove_reference< T >:
Class Members
typedef T type T

◆ fl::remove_reference< T & >

struct fl::remove_reference< T & >
+ Inheritance diagram for fl::remove_reference< T & >:
+ Collaboration diagram for fl::remove_reference< T & >:
Class Members
typedef T type
typedef T type T

◆ fl::remove_reference< T && >

struct fl::remove_reference< T && >
+ Inheritance diagram for fl::remove_reference< T && >:
+ Collaboration diagram for fl::remove_reference< T && >:
Class Members
typedef T type
typedef T type T

◆ fl::render_parameters

struct fl::render_parameters
Class Members
float angle = 0.0f
float center_x = (999 / 2) - 0.5
float center_y = (999 / 2) - 0.5
float dist = 0.0f
float high_limit = 1
float low_limit = 0
float offset_x = 0.0f
float offset_y = 0.0f
float offset_z = 0.0f
float scale_x = 0.1
float scale_y = 0.1
float scale_z = 0.1
float z = 0.0f

◆ fl::render_parameters_fp

struct fl::render_parameters_fp
Class Members
i32 angle_raw
i32 center_x_raw
i32 center_y_raw
i32 dist_raw
i32 high_limit_raw
i32 low_limit_raw
i32 offset_x_raw
i32 offset_y_raw
i32 offset_z_raw
i32 scale_x_raw
i32 scale_y_raw
i32 scale_z_raw
i32 z_raw

◆ fl::rgb

struct fl::rgb
Class Members
float blue = 0.0f
float green = 0.0f
float red = 0.0f

◆ fl::rpc_storage_type

struct fl::rpc_storage_type
+ Inheritance diagram for fl::rpc_storage_type< T >:
Class Members
typedef typename type >::type type typename fl::remove_cv<typename fl::remove_reference<T>::type>::type

◆ fl::rpc_storage_type< char * >

struct fl::rpc_storage_type< char * >
+ Inheritance diagram for fl::rpc_storage_type< char * >:
+ Collaboration diagram for fl::rpc_storage_type< char * >:
Class Members
typedef typename type >::type type
typedef ConstCharPtrWrapper type ConstCharPtrWrapper

◆ fl::rpc_storage_type< const char * >

struct fl::rpc_storage_type< const char * >
+ Inheritance diagram for fl::rpc_storage_type< const char * >:
+ Collaboration diagram for fl::rpc_storage_type< const char * >:
Class Members
typedef typename type >::type type
typedef ConstCharPtrWrapper type ConstCharPtrWrapper

◆ fl::rpc_storage_type< fl::span< const double > >

struct fl::rpc_storage_type< fl::span< const double > >
+ Inheritance diagram for fl::rpc_storage_type< fl::span< const double > >:
+ Collaboration diagram for fl::rpc_storage_type< fl::span< const double > >:
Class Members
typedef typename remove_cv< typename remove_reference< span< const double > >::type >::type type
typedef ConstSpanWrapper< double > type fl::ConstSpanWrapper<double>

◆ fl::rpc_storage_type< fl::span< const fl::string > >

struct fl::rpc_storage_type< fl::span< const fl::string > >
+ Inheritance diagram for fl::rpc_storage_type< fl::span< const fl::string > >:
+ Collaboration diagram for fl::rpc_storage_type< fl::span< const fl::string > >:
Class Members
typedef typename remove_cv< typename remove_reference< span< const string > >::type >::type type
typedef ConstSpanWrapper< string > type fl::ConstSpanWrapper<fl::string>

◆ fl::rpc_storage_type< fl::span< const float > >

struct fl::rpc_storage_type< fl::span< const float > >
+ Inheritance diagram for fl::rpc_storage_type< fl::span< const float > >:
+ Collaboration diagram for fl::rpc_storage_type< fl::span< const float > >:
Class Members
typedef typename remove_cv< typename remove_reference< span< const float > >::type >::type type
typedef ConstSpanWrapper< float > type fl::ConstSpanWrapper<float>

◆ fl::rpc_storage_type< fl::span< const int > >

struct fl::rpc_storage_type< fl::span< const int > >
+ Inheritance diagram for fl::rpc_storage_type< fl::span< const int > >:
+ Collaboration diagram for fl::rpc_storage_type< fl::span< const int > >:
Class Members
typedef typename remove_cv< typename remove_reference< span< const int > >::type >::type type
typedef ConstSpanWrapper< int > type fl::ConstSpanWrapper<int>

◆ fl::rpc_storage_type< fl::span< const T > >

struct fl::rpc_storage_type< fl::span< const T > >
+ Inheritance diagram for fl::rpc_storage_type< fl::span< const T > >:
+ Collaboration diagram for fl::rpc_storage_type< fl::span< const T > >:
Class Members
typedef typename type >::type type
typedef ConstSpanWrapper< T > type fl::ConstSpanWrapper<T>

◆ fl::RpcHandle

class fl::RpcHandle
+ Inheritance diagram for fl::RpcHandle< Sig >:

◆ fl::SinCos32

struct fl::SinCos32
Class Members
i32 cos_val
i32 sin_val

◆ fl::static_assert_failure

struct fl::static_assert_failure
+ Inheritance diagram for fl::static_assert_failure< bool >:

◆ fl::static_assert_failure< true >

struct fl::static_assert_failure< true >
+ Inheritance diagram for fl::static_assert_failure< true >:
+ Collaboration diagram for fl::static_assert_failure< true >:

◆ fl::sub4

struct fl::sub4
Class Members
u32 a0:1 byte 'a', bit 0
u32 a1:1 byte 'a', bit 1
u32 a2:1 byte 'a', bit 2
u32 a3:1 byte 'a', bit 3
u32 a4:1 byte 'a', bit 4
u32 a5:1 byte 'a', bit 5
u32 a6:1 byte 'a', bit 6
u32 a7:1 byte 'a', bit 7
u32 b0:1 byte 'b', bit 0
u32 b1:1 byte 'b', bit 1
u32 b2:1 byte 'b', bit 2
u32 b3:1 byte 'b', bit 3
u32 b4:1 byte 'b', bit 4
u32 b5:1 byte 'b', bit 5
u32 b6:1 byte 'b', bit 6
u32 b7:1 byte 'b', bit 7
u32 c0:1 byte 'c', bit 0
u32 c1:1 byte 'c', bit 1
u32 c2:1 byte 'c', bit 2
u32 c3:1 byte 'c', bit 3
u32 c4:1 byte 'c', bit 4
u32 c5:1 byte 'c', bit 5
u32 c6:1 byte 'c', bit 6
u32 c7:1 byte 'c', bit 7
u32 d0:1 byte 'd', bit 0
u32 d1:1 byte 'd', bit 1
u32 d2:1 byte 'd', bit 2
u32 d3:1 byte 'd', bit 3
u32 d4:1 byte 'd', bit 4
u32 d5:1 byte 'd', bit 5
u32 d6:1 byte 'd', bit 6
u32 d7:1 byte 'd', bit 7

◆ fl::swap_impl

struct fl::swap_impl
+ Inheritance diagram for fl::swap_impl< T, bool >:

◆ fl::TestContext

struct fl::TestContext
Class Members
int base_strip_size Base strip size (10 or 300 LEDs)
const char * driver_name Driver name (e.g., "RMT", "SPI", "PARLIO")
int lane_count Total number of lanes (1-16)
int lane_index Current lane index (0-15)
int num_leds Number of LEDs in this lane.
const char * pattern_name Pattern name (e.g., "Pattern A (R=0xF0...)")
int pin_number TX pin number for this lane.
const char * rx_type_name RX device type name (e.g., "RMT", "ISR")
const char * timing_name Timing name (e.g., "WS2812B-V5")

◆ fl::TraceStorage

struct fl::TraceStorage
+ Collaboration diagram for fl::TraceStorage:
Class Members
FixedVector< TraceEntry, FL_STACK_TRACE_MAX_DEPTH > callStack
size stackDepth = 0

◆ fl::tuple

struct fl::tuple
+ Inheritance diagram for fl::tuple< Ts >:

◆ fl::tuple_element

struct fl::tuple_element
+ Inheritance diagram for fl::tuple_element< I, T >:

◆ fl::tuple_element< 0, pair< T1, T2 > >

struct fl::tuple_element< 0, pair< T1, T2 > >
+ Inheritance diagram for fl::tuple_element< 0, pair< T1, T2 > >:
+ Collaboration diagram for fl::tuple_element< 0, pair< T1, T2 > >:
Class Members
typedef T1 type T1

◆ fl::tuple_element< 0, tuple< Head, Tail... > >

struct fl::tuple_element< 0, tuple< Head, Tail... > >
+ Inheritance diagram for fl::tuple_element< 0, tuple< Head, Tail... > >:
+ Collaboration diagram for fl::tuple_element< 0, tuple< Head, Tail... > >:
Class Members
typedef Head type Head

◆ fl::tuple_element< 1, pair< T1, T2 > >

struct fl::tuple_element< 1, pair< T1, T2 > >
+ Inheritance diagram for fl::tuple_element< 1, pair< T1, T2 > >:
+ Collaboration diagram for fl::tuple_element< 1, pair< T1, T2 > >:
Class Members
typedef T2 type T2

◆ fl::tuple_size

struct fl::tuple_size
+ Inheritance diagram for fl::tuple_size< T >:

◆ fl::TypedRpcBinding

class fl::TypedRpcBinding
+ Inheritance diagram for fl::TypedRpcBinding< Signature >:

◆ fl::underlying_type

struct fl::underlying_type
Class Members
typedef int type int

◆ fl::vector_element_ops

struct fl::vector_element_ops
Class Members
void(*)(void *dst, const void *src) copy_construct
void(*)(void *ptr) default_construct
void(*)(void *ptr) destroy
void(*)(void *first, fl::size count) destroy_n Destroy count elements starting at first.
void(*)(void *dst, void *src) move_construct
void(*)(void *a, void *b) swap_elements
void(*)(void *dst, void *src, fl::size count) uninitialized_move_n Move-construct count elements from src to dst (non-overlapping, dst uninitialized).

◆ fl::VibeLevels

struct fl::VibeLevels
Class Members
float bass = 1.0f
bool bassSpike = false
float mid = 1.0f
bool midSpike = false
float treb = 1.0f
bool trebSpike = false
float vol = 1.0f

◆ fl::VoidSuccess

struct fl::VoidSuccess

◆ fl::VorbisFrame

struct fl::VorbisFrame
Class Members
i32 channels
const float * pcm
i32 sampleRate
i32 samples

◆ fl::WatchdogCrashReport

struct fl::WatchdogCrashReport
Class Members
u32 fault_address
u32 fault_status
const char * fault_type
u32 lr
u32 pc
u32 psr
bool valid

◆ fl::Wave3Byte

struct fl::Wave3Byte
Class Members
u8 data[3]

◆ fl::Wave8Bit

struct fl::Wave8Bit
Class Members
u8 data

◆ fl::WeakPtr

class fl::WeakPtr

◆ fl::WLEDSegment

struct fl::WLEDSegment
+ Collaboration diagram for fl::WLEDSegment:
Class Members
u8 mBri = 255
u8 mC1 = 128
u8 mC2 = 128
u8 mC3 = 16
u16 mCct = 0
vector< vector< u8 > > mColors
u8 mFx = 0
u8 mGrp = 1
u8 mId = 0
vector< vector< u8 > > mIndividualLeds
u8 mIx = 128
u16 mLen = 0
u8 mM12 = 0
bool mMi = false
string mName
bool mO1 = false
bool mO2 = false
bool mO3 = false
u16 mOf = 0
bool mOn = true
u8 mPal = 0
bool mRev = false
bool mRpt = false
bool mSel = false
u8 mSi = 0
u8 mSpc = 0
u16 mStart = 0
u16 mStop = 0
u8 mSx = 128

Typedef Documentation

◆ accum124 [1/2]

typedef u16 fl::accum124

no direct ANSI counterpart. 12 bits int, 4 bits fraction

Definition at line 185 of file stdint.h.

◆ accum124 [2/2]

typedef u16 fl::fl::accum124

no direct ANSI counterpart. 12 bits int, 4 bits fraction

Definition at line 186 of file s16x16x4.h.

◆ accum1616 [1/2]

typedef u32 fl::accum1616

ANSI: signed _Accum. 16 bits int, 16 bits fraction.

Definition at line 183 of file stdint.h.

◆ accum1616 [2/2]

typedef u32 fl::fl::accum1616

ANSI: signed _Accum. 16 bits int, 16 bits fraction.

Definition at line 184 of file s16x16x4.h.

◆ accum88 [1/2]

typedef u16 fl::accum88

ANSI: unsigned short _Accum. 8 bits int, 8 bits fraction.

Definition at line 181 of file stdint.h.

◆ accum88 [2/2]

typedef u16 fl::fl::accum88

ANSI: unsigned short _Accum. 8 bits int, 8 bits fraction.

Definition at line 182 of file s16x16x4.h.

◆ add_pointer_t

template<typename T>
using fl::add_pointer_t = typename add_pointer<T>::type

Definition at line 180 of file type_traits.h.

◆ advanceDataFunction

typedef void(* fl::advanceDataFunction) (void *pixel_controller)

Definition at line 107 of file pixel_iterator.h.

◆ allocator_inlined_psram

template<typename T, fl::size N>
using fl::allocator_inlined_psram = allocator_inlined<T, N, fl::allocator_psram<T>>

Definition at line 1044 of file allocator.h.

◆ allocator_inlined_slab

template<typename T, fl::size N>
using fl::allocator_inlined_slab = allocator_inlined<T, N, fl::allocator_slab<T>>

Definition at line 1051 of file allocator.h.

◆ allocator_inlined_slab_psram

template<typename T, fl::size N, fl::size SLAB_SIZE = 8>
using fl::allocator_inlined_slab_psram = allocator_inlined<T, N, fl::allocator_slab<T, SLAB_SIZE>>

Definition at line 1048 of file allocator.h.

◆ AnimartrixVizFactory

using fl::AnimartrixVizFactory = IAnimartrix2Viz* (*)()

Definition at line 89 of file animartrix.hpp.

◆ atomic

template<typename T>
using fl::atomic = AtomicFake<T>

Definition at line 26 of file atomic.h.

◆ atomic_bool

using fl::atomic_bool = atomic<bool>

Definition at line 29 of file atomic.h.

◆ atomic_i32

using fl::atomic_i32 = atomic<fl::i32>

Definition at line 33 of file atomic.h.

◆ atomic_int

using fl::atomic_int = atomic<int>

Definition at line 30 of file atomic.h.

◆ atomic_u32

using fl::atomic_u32 = atomic<fl::u32>

Definition at line 32 of file atomic.h.

◆ atomic_uint

using fl::atomic_uint = atomic<unsigned int>

Definition at line 31 of file atomic.h.

◆ AudioFrameCallback

using fl::AudioFrameCallback = fl::function<void(const audio::Sample&)>

Definition at line 28 of file idecoder.h.

◆ binary_semaphore

using fl::binary_semaphore = fl::platforms::binary_semaphore

Binary semaphore abstraction for FastLED.

A counting semaphore with a maximum value of 1. Commonly used for signaling. // IWYU pragma: keep Usage:

fl::binary_semaphore sem(0); // Initial count 0
sem.release(); // Signal
sem.acquire(); // Wait for signal
fl::platforms::binary_semaphore binary_semaphore
Binary semaphore abstraction for FastLED.
Definition semaphore.h:40

Definition at line 40 of file semaphore.h.

◆ bool_constant

template<bool B>
using fl::bool_constant = integral_constant<bool, B>

Definition at line 32 of file type_traits.h.

◆ centi

using fl::centi = ratio<1, 100>

1/100

Definition at line 54 of file ratio.h.

◆ ChipsetVariant

using fl::ChipsetVariant = fl::variant<ClocklessChipset, SpiChipsetConfig>
Examples
/home/runner/work/FastLED/FastLED/src/fl/channels/config.h.

Definition at line 153 of file config.h.

◆ common_type_t

template<typename T, typename U>
using fl::common_type_t = typename common_type<T, U>::type

Definition at line 818 of file type_traits.h.

◆ conditional_t

template<bool B, typename T, typename F>
using fl::conditional_t = typename conditional<B, T, F>::type

Definition at line 115 of file type_traits.h.

◆ counting_semaphore

template<ptrdiff_t LeastMaxValue = 1>
using fl::counting_semaphore = fl::platforms::counting_semaphore<LeastMaxValue>

Counting semaphore abstraction for FastLED.

This is a platform-independent counting semaphore wrapper that delegates to:

Usage:

fl::counting_semaphore<10> sem(5); // Max value 10, initial count 5
sem.acquire(); // Decrement count (blocks if count == 0 on multithreaded platforms)
sem.release(); // Increment count
fl::platforms::counting_semaphore< LeastMaxValue > counting_semaphore
Counting semaphore abstraction for FastLED.
Definition semaphore.h:28

Definition at line 28 of file semaphore.h.

◆ CRGB

using fl::CRGB = fl::CRGB
Examples
Blur2d.ino, and Pacifica.ino.

Definition at line 15 of file video.h.

◆ deca

using fl::deca = ratio<10, 1>

10/1

Definition at line 56 of file ratio.h.

◆ decay_t

template<typename T>
using fl::decay_t = typename decay<T>::type

Definition at line 322 of file type_traits.h.

◆ deci

using fl::deci = ratio<1, 10>

1/10

Definition at line 55 of file ratio.h.

◆ DefaultLess

template<typename T>
using fl::DefaultLess = less<T>

Definition at line 98 of file utility.h.

◆ deque_double

typedef deque<double> fl::deque_double

Definition at line 782 of file deque.h.

◆ deque_float

typedef deque<float> fl::deque_float

Definition at line 781 of file deque.h.

◆ deque_int

typedef deque<int> fl::deque_int

Definition at line 780 of file deque.h.

◆ enable_if_t

template<bool Condition, typename T = void>
using fl::enable_if_t = typename enable_if<Condition, T>::type

Definition at line 66 of file type_traits.h.

◆ equal_to

template<typename T>
using fl::equal_to = EqualTo<T>

Definition at line 1128 of file unordered_map.h.

◆ false_type

using fl::false_type = integral_constant<bool, false>

Definition at line 28 of file type_traits.h.

◆ FILE

using fl::FILE = FILE_impl

Definition at line 32 of file file_io.h.

◆ filebuf_ptr

typedef fl::shared_ptr< filebuf > fl::filebuf_ptr = fl::shared_ptr<filebuf>

Definition at line 15 of file idecoder.h.

◆ FixedSet

template<typename Key, size N>
using fl::FixedSet = VectorSetFixed<Key, N>

Definition at line 25 of file set.h.

◆ fl_map

template<typename Key, typename T, typename Compare = fl::less<Key>>
using fl::fl_map = map<Key, T, Compare>

Definition at line 287 of file map.h.

◆ fl_random

using fl::fl_random = math::random

Definition at line 108 of file random.h.

◆ FontPtr

using fl::FontPtr = fl::shared_ptr<Font>

Definition at line 129 of file truetype.h.

◆ fract16 [1/2]

typedef u16 fl::fract16

ANSI: unsigned _Fract.

Range is 0 to 0.99998474121 in steps of 0.00001525878. Should be interpreted as unsigned 65536ths.

Definition at line 170 of file stdint.h.

◆ fract16 [2/2]

typedef u16 fl::fl::fract16

ANSI: unsigned _Fract.

Range is 0 to 0.99998474121 in steps of 0.00001525878. Should be interpreted as unsigned 65536ths.

Definition at line 171 of file s16x16x4.h.

◆ fract32 [1/2]

typedef u32 fl::fract32

ANSI: unsigned long _Fract. 32 bits int, 32 bits fraction.

Definition at line 174 of file stdint.h.

◆ fract32 [2/2]

typedef u32 fl::fl::fract32

ANSI: unsigned long _Fract. 32 bits int, 32 bits fraction.

Definition at line 175 of file s16x16x4.h.

◆ fract8 [1/2]

typedef u8 fl::fract8

Fixed-Point Fractional Types.

Types for storing fractional data.

Example: if a fract8 has the value "64", that should be interpreted as 64/256ths, or one-quarter.

accumXY types should be interpreted as X bits of integer, and Y bits of fraction. E.g., accum88 has 8 bits of int, 8 bits of fraction ANSI: unsigned short _Fract. Range is 0 to 0.99609375 in steps of 0.00390625. Should be interpreted as unsigned 256ths.

Definition at line 160 of file stdint.h.

◆ fract8 [2/2]

typedef u8 fl::fl::fract8

Fixed-Point Fractional Types.

Types for storing fractional data.

Example: if a fract8 has the value "64", that should be interpreted as 64/256ths, or one-quarter.

accumXY types should be interpreted as X bits of integer, and Y bits of fraction. E.g., accum88 has 8 bits of int, 8 bits of fraction ANSI: unsigned short _Fract. Range is 0 to 0.99609375 in steps of 0.00390625. Should be interpreted as unsigned 256ths.

Definition at line 161 of file s16x16x4.h.

◆ FrameTracker

using fl::FrameTracker = video::FrameTracker

Definition at line 35 of file frame_tracker.h.

◆ Gamma22LUT

typedef ProgmemLUT<GammaEval<gamma<u8x24>(2.2f)>, 256> fl::Gamma22LUT

Definition at line 298 of file gamma_lut.h.

◆ Gamma22LUT16

typedef ProgmemLUT16<GammaEval16<gamma<u8x24>(2.2f)>, 256> fl::Gamma22LUT16

Definition at line 303 of file gamma_lut.h.

◆ Gamma28LUT

typedef ProgmemLUT<GammaEval<gamma<u8x24>(2.8f)>, 256> fl::Gamma28LUT

Definition at line 299 of file gamma_lut.h.

◆ Gamma28LUT16

typedef ProgmemLUT16<GammaEval16<gamma<u8x24>(2.8f)>, 256> fl::Gamma28LUT16

Definition at line 304 of file gamma_lut.h.

◆ GammaKey

using fl::GammaKey = fl::ufixed_point<4, 12>

Definition at line 351 of file ease.cpp.hpp.

◆ GammaTable16_256

template<u32 G>
using fl::GammaTable16_256 = ProgmemLUT16<GammaEval16<G>, 256>

Definition at line 292 of file gamma_lut.h.

◆ GammaTable256

template<u32 G>
using fl::GammaTable256 = ProgmemLUT<GammaEval<G>, 256>

Definition at line 46 of file gamma_lut.h.

◆ getHdScaleFunction

typedef void(* fl::getHdScaleFunction) (void *pixel_controller, u8 *c0, u8 *c1, u8 *c2, u8 *brightness)

Definition at line 112 of file pixel_iterator.h.

◆ giga

using fl::giga = ratio<1000000000, 1>

1,000,000,000/1

Definition at line 60 of file ratio.h.

◆ globalBrightness

typedef u8(* fl::globalBrightness) (void *pixel_controller)

Definition at line 110 of file pixel_iterator.h.

◆ hasFunction

typedef bool(* fl::hasFunction) (void *pixel_controller, int n)

Definition at line 109 of file pixel_iterator.h.

◆ hash_map

template<typename Key, typename T, typename Hash = Hash<Key>, typename KeyEqual = equal_to<Key>>
using fl::hash_map = unordered_map<Key, T, Hash, KeyEqual>

Definition at line 1133 of file unordered_map.h.

◆ hecto

using fl::hecto = ratio<100, 1>

100/1

Definition at line 57 of file ratio.h.

◆ http_request

using fl::http_request = asio::http::Request

Definition at line 280 of file server.h.

◆ http_response

using fl::http_response = asio::http::Response

Definition at line 281 of file server.h.

◆ HttpRequestPtr

using fl::HttpRequestPtr = fl::shared_ptr<HttpRequest>

Definition at line 35 of file http_parser.h.

◆ HttpRequestPtrConst

using fl::HttpRequestPtrConst = fl::shared_ptr<const HttpRequest>

Definition at line 37 of file http_parser.h.

◆ HttpResponsePtr

using fl::HttpResponsePtr = fl::shared_ptr<HttpResponse>

Definition at line 36 of file http_parser.h.

◆ HttpResponsePtrConst

using fl::HttpResponsePtrConst = fl::shared_ptr<const HttpResponse>

Definition at line 38 of file http_parser.h.

◆ HttpServer

using fl::HttpServer = asio::http::Server

Definition at line 279 of file server.h.

◆ i64

typedef fl::i64 fl::i64

Definition at line 222 of file s16x16x4.h.

◆ i8

typedef signed char fl::i8

Definition at line 130 of file stdint.h.

◆ InlinedVector

template<typename T, fl::size INLINED_SIZE>
using fl::InlinedVector = VectorN<T, INLINED_SIZE>

Definition at line 21 of file span.h.

◆ int16_t

typedef fl::i16 fl::int16_t

Definition at line 215 of file s16x16x4.h.

◆ int32_t

typedef fl::i32 fl::int32_t

Definition at line 220 of file s16x16x4.h.

◆ int8_t

typedef signed char fl::int8_t

Definition at line 210 of file s16x16x4.h.

◆ intptr_t

typedef fl::iptr fl::intptr_t

Definition at line 225 of file s16x16x4.h.

◆ is_derived

template<typename Base, typename Derived>
using fl::is_derived = enable_if_t<is_base_of<Base, Derived>::value>

Definition at line 834 of file type_traits.h.

◆ JpegDecoderPtr

using fl::JpegDecoderPtr = fl::shared_ptr<JpegDecoder>

Definition at line 11 of file jpeg.h.

◆ json_array

using fl::json_array = fl::vector<fl::shared_ptr<json_value>>

Definition at line 33 of file types.h.

◆ json_object

using fl::json_object = fl::flat_map<fl::string, fl::shared_ptr<json_value>, fl::StringFastLess>

Definition at line 34 of file types.h.

◆ kilo

using fl::kilo = ratio<1000, 1>

1,000/1

Definition at line 58 of file ratio.h.

◆ LineCap

using fl::LineCap = gfx::LineCap

Line cap style.

Definition at line 46 of file gfx.h.

◆ loadAndScaleRGBFunction

typedef void(* fl::loadAndScaleRGBFunction) (void *pixel_controller, u8 *r_out, u8 *g_out, u8 *b_out)

Definition at line 103 of file pixel_iterator.h.

◆ loadAndScaleRGBWFunction

typedef void(* fl::loadAndScaleRGBWFunction) (void *pixel_controller, Rgbw rgbw, u8 *b0_out, u8 *b1_out, u8 *b2_out, u8 *b3_out)

Definition at line 101 of file pixel_iterator.h.

◆ loadAndScaleRGBWWFunction

typedef void(* fl::loadAndScaleRGBWWFunction) (void *pixel_controller, Rgbww rgbww, u8 *b0_out, u8 *b1_out, u8 *b2_out, u8 *b3_out, u8 *b4_out)

Definition at line 102 of file pixel_iterator.h.

◆ loadRGBScaleAndBrightnessFunction

typedef void(* fl::loadRGBScaleAndBrightnessFunction) (void *pixel_controller, u8 *c0, u8 *c1, u8 *c2, u8 *brightness)

Definition at line 111 of file pixel_iterator.h.

◆ LUT16

typedef LUT<u16> fl::LUT16

Definition at line 24 of file lut.h.

◆ LUTXY16

typedef LUT<vec2<u16> > fl::LUTXY16

Definition at line 25 of file lut.h.

◆ LUTXYFLOAT

typedef LUT< vec2f > fl::LUTXYFLOAT = LUT<vec2f>

Definition at line 26 of file lut.h.

◆ LUTXYFLOATPtr

using fl::LUTXYFLOATPtr = shared_ptr<LUTXYFLOAT>

Definition at line 32 of file screenmap.h.

◆ LUTXYZFLOAT

typedef LUT<vec3f> fl::LUTXYZFLOAT

Definition at line 27 of file lut.h.

◆ make_index_sequence

template<fl::size N>
using fl::make_index_sequence = typename make_index_sequence_impl<N>::type

Definition at line 1168 of file type_traits.h.

◆ map

template<typename Key, typename T, typename Compare = fl::less<Key>>
using fl::map = MapRedBlackTree<Key, T, Compare, fl::allocator_slab<char>>
Examples
/home/runner/work/FastLED/FastLED/src/fl/channels/config.h.

Definition at line 283 of file map.h.

◆ max_align_t

typedef max_align_selector<(sizeof(longdouble)>sizeof(double))>::type fl::max_align_t

Definition at line 55 of file cstddef.h.

◆ mega

using fl::mega = ratio<1000000, 1>

1,000,000/1

Definition at line 59 of file ratio.h.

◆ memorybuf

using fl::memorybuf = detail::memorybuf

Definition at line 93 of file memory_file_handle.h.

◆ micro

using fl::micro = ratio<1, 1000000>

1/1,000,000

Definition at line 52 of file ratio.h.

◆ milli

using fl::milli = ratio<1, 1000>

1/1,000

Definition at line 53 of file ratio.h.

◆ Mp3DecoderPtr

using fl::Mp3DecoderPtr = fl::shared_ptr<Mp3Decoder>

Definition at line 19 of file file_system.h.

◆ Mpeg1Config

using fl::Mpeg1Config = third_party::Mpeg1Config

Definition at line 29 of file mpeg1.h.

◆ multi_map

template<typename Key, typename T, typename Compare = fl::less<Key>>
using fl::multi_map = MultiMapTree<Key, T, Compare, fl::allocator_slab<char>>

Definition at line 514 of file multi_map.h.

◆ multi_set

template<typename Key, typename Compare = fl::less<Key>>
using fl::multi_set = MultiSetTree<Key, Compare, fl::allocator_slab<char>>

Definition at line 401 of file multi_set.h.

◆ mutex

using fl::mutex = fl::platforms::mutex

Definition at line 20 of file mutex.h.

◆ nano

using fl::nano = ratio<1, 1000000000>

1/1,000,000,000

Definition at line 51 of file ratio.h.

◆ NetworkDetector

using fl::NetworkDetector = ::fl::net::NetworkDetector

Definition at line 87 of file network_detector.h.

◆ NotNullStringHolderPtr

typedef fl::not_null< StringHolderPtr > fl::NotNullStringHolderPtr = fl::not_null<StringHolderPtr>

Definition at line 35 of file basic_string.h.

◆ nullptr_t

typedef decltype(nullptr) fl::nullptr_t

Definition at line 12 of file cstddef.h.

◆ optional

template<typename T>
using fl::optional = Optional<T>

Definition at line 16 of file optional.h.

◆ PaddingGenerator

using fl::PaddingGenerator = fl::function<void(fl::span<const u8> src, fl::span<u8> dst)>

Padding generator function type.

Called by writeWithPadding() to write source data with padding to destination buffer. The function receives the original encoded data (src) and writes to the destination (dst) with any necessary padding applied (e.g., inserting zero bytes after a preamble for block alignment).

Default behavior (if no generator set): Left-pad with zeros, then memcopy data. Layout: [PADDING (zeros)][LED DATA] - padding bytes transmit to non-existent pixels first.

Parameters
srcSource encoded data (read-only)
dstDestination buffer to write to (dst.size() >= src.size())

Definition at line 31 of file data.h.

◆ Pair

template<typename T1, typename T2>
using fl::Pair = pair<T1, T2>

Definition at line 207 of file pair.h.

◆ pair_xy_float

using fl::pair_xy_float = vec2<float>

Definition at line 360 of file geometry.h.

◆ pair_xyz_float

using fl::pair_xyz_float = vec3<float>

Definition at line 356 of file geometry.h.

◆ PixelStream

using fl::PixelStream = video::PixelStream

Definition at line 78 of file pixel_stream.h.

◆ PixelStreamPtr

using fl::PixelStreamPtr = video::PixelStreamPtr

Definition at line 79 of file pixel_stream.h.

◆ ptrdiff_t

typedef long fl::ptrdiff_t

Definition at line 226 of file s16x16x4.h.

◆ q124

typedef qfx<u16, 12,4> fl::q124

A 12.4 integer (12 bits integer, 4 bits fraction)

Definition at line 51 of file qfx.h.

◆ q44

typedef qfx<u8, 4,4> fl::q44

A 4.4 integer (4 bits integer, 4 bits fraction)

Definition at line 45 of file qfx.h.

◆ q62

typedef qfx<u8, 6,2> fl::q62

A 6.2 integer (6 bits integer, 2 bits fraction)

Definition at line 47 of file qfx.h.

◆ q88

typedef qfx<u16, 8,8> fl::q88

A 8.8 integer (8 bits integer, 8 bits fraction)

Definition at line 49 of file qfx.h.

◆ qsort_compare_fn

typedef int(* fl::qsort_compare_fn) (const void *, const void *)

Definition at line 47 of file cstdlib.h.

◆ ratio_divide

template<typename R1, typename R2>
using fl::ratio_divide
Initial value:
R1::num * R2::den,
R1::den * R2::num
>
Compile-time rational arithmetic.
Definition ratio.h:21

Divide two ratios at compile time.

Template Parameters
R1First ratio
R2Second ratio

Computes R1 / R2 = (R1::num * R2::den) / (R1::den * R2::num)

Definition at line 34 of file ratio.h.

◆ ratio_multiply

template<typename R1, typename R2>
using fl::ratio_multiply
Initial value:
R1::num * R2::num,
R1::den * R2::den
>

Multiply two ratios at compile time.

Template Parameters
R1First ratio
R2Second ratio

Computes R1 * R2 = (R1::num * R2::num) / (R1::den * R2::den)

Definition at line 45 of file ratio.h.

◆ recursive_mutex

using fl::recursive_mutex = fl::platforms::recursive_mutex

Definition at line 21 of file mutex.h.

◆ remove_cv_t

template<typename T>
using fl::remove_cv_t = typename remove_cv<T>::type

Definition at line 263 of file type_traits.h.

◆ remove_pointer_t

template<typename T>
using fl::remove_pointer_t = typename remove_pointer<T>::type

Definition at line 307 of file type_traits.h.

◆ remove_reference_t

template<typename T>
using fl::remove_reference_t = typename remove_reference<T>::type

Definition at line 24 of file move.h.

◆ result

template<typename T, typename E = ResultError>
using fl::result = expected<T, E>

Alias for expected (Rust-style naming)

Provides familiar result naming while using fl::expected implementation

Definition at line 31 of file result.h.

◆ rgb_2_rgbw_function

typedef void(* fl::rgb_2_rgbw_function) (u16 w_color_temperature, u8 r, u8 g, u8 b, u8 r_scale, u8 g_scale, u8 b_scale, u8 *out_r, u8 *out_g, u8 *out_b, u8 *out_w)

Definition at line 231 of file rgbw.h.

◆ rgb_2_rgbww_function

typedef void(* fl::rgb_2_rgbww_function) (const Rgbww &cfg, fl::u8 r, fl::u8 g, fl::u8 b, fl::u8 r_scale, fl::u8 g_scale, fl::u8 b_scale, fl::u8 *out_r, fl::u8 *out_g, fl::u8 *out_b, fl::u8 *out_ww, fl::u8 *out_wc)

Definition at line 110 of file rgbww.h.

◆ RpcFactory

using fl::RpcFactory = Rpc

Definition at line 392 of file rpc.h.

◆ RpcFn

template<class Sig>
using fl::RpcFn = fl::function<Sig>

Definition at line 14 of file rpc_handle.h.

◆ saccum114 [1/2]

typedef i32 fl::saccum114

no direct ANSI counterpart. 1 bit int, 14 bits fraction

Definition at line 186 of file stdint.h.

◆ saccum114 [2/2]

typedef i32 fl::fl::saccum114

no direct ANSI counterpart. 1 bit int, 14 bits fraction

Definition at line 187 of file s16x16x4.h.

◆ saccum1516 [1/2]

typedef i32 fl::saccum1516

ANSI: signed _Accum. 15 bits int, 16 bits fraction.

Definition at line 184 of file stdint.h.

◆ saccum1516 [2/2]

typedef i32 fl::fl::saccum1516

ANSI: signed _Accum. 15 bits int, 16 bits fraction.

Definition at line 185 of file s16x16x4.h.

◆ saccum78 [1/2]

typedef i16 fl::saccum78

ANSI: signed short _Accum. 7 bits int, 8 bits fraction.

Definition at line 182 of file stdint.h.

◆ saccum78 [2/2]

typedef i16 fl::fl::saccum78

ANSI: signed short _Accum. 7 bits int, 8 bits fraction.

Definition at line 183 of file s16x16x4.h.

◆ scoped_ptr

template<typename T, typename Deleter = default_delete<T>>
using fl::scoped_ptr = unique_ptr<T, Deleter>

Definition at line 11 of file scoped_ptr.h.

◆ set_inlined

template<typename T, fl::size N>
using fl::set_inlined = fl::set<T, fl::allocator_inlined_slab<T, N>>

Definition at line 522 of file set.h.

◆ sfixed_integer

template<int IntBits, int FracBits>
using fl::sfixed_integer = fixed_point<IntBits, FracBits, Sign::SIGNED>

Definition at line 450 of file fixed_point.h.

◆ sfixed_point

template<int IntBits, int FracBits>
using fl::sfixed_point = sfixed_integer<IntBits, FracBits>

Definition at line 457 of file fixed_point.h.

◆ sfract15 [1/2]

typedef i16 fl::sfract15

ANSI: signed _Fract.

Range is -0.99996948242 to 0.99996948242 in steps of 0.00003051757. Should be interpreted as signed 32768ths.

Definition at line 179 of file stdint.h.

◆ sfract15 [2/2]

typedef i16 fl::fl::sfract15

ANSI: signed _Fract.

Range is -0.99996948242 to 0.99996948242 in steps of 0.00003051757. Should be interpreted as signed 32768ths.

Definition at line 180 of file s16x16x4.h.

◆ sfract31 [1/2]

typedef i32 fl::sfract31

ANSI: signed long _Fract. 31 bits int, 1 bit fraction.

Definition at line 172 of file stdint.h.

◆ sfract31 [2/2]

typedef i32 fl::fl::sfract31

ANSI: signed long _Fract. 31 bits int, 1 bit fraction.

Definition at line 173 of file s16x16x4.h.

◆ sfract7 [1/2]

typedef i8 fl::sfract7

ANSI: signed short _Fract.

Range is -0.9921875 to 0.9921875 in steps of 0.0078125. Should be interpreted as signed 128ths.

Definition at line 165 of file stdint.h.

◆ sfract7 [2/2]

typedef i8 fl::fl::sfract7

ANSI: signed short _Fract.

Range is -0.9921875 to 0.9921875 in steps of 0.0078125. Should be interpreted as signed 128ths.

Definition at line 166 of file s16x16x4.h.

◆ size_t

typedef __SIZE_TYPE__ fl::size_t

Definition at line 223 of file s16x16x4.h.

◆ sizeFunction

typedef int(* fl::sizeFunction) (void *pixel_controller)

Definition at line 108 of file pixel_iterator.h.

◆ SpiResult

template<typename T = void>
using fl::SpiResult = spi::Result<T>

Definition at line 154 of file spi.h.

◆ SpiTransaction

using fl::SpiTransaction = spi::Transaction

Definition at line 151 of file spi.h.

◆ stepDitheringFunction

typedef void(* fl::stepDitheringFunction) (void *pixel_controller)

Definition at line 106 of file pixel_iterator.h.

◆ string_large

using fl::string_large = string_n<256>

Definition at line 181 of file string.h.

◆ string_small

using fl::string_small = string_n<32>

Definition at line 180 of file string.h.

◆ StringHolderPtr

typedef fl::shared_ptr< fl::StringHolder > fl::StringHolderPtr = fl::shared_ptr<fl::StringHolder>

Definition at line 34 of file basic_string.h.

◆ thread

using fl::thread = fl::platforms::thread

Thread abstraction for FastLED.

This is a platform-independent thread wrapper that delegates to:

Usage:

fl::thread t([]() {
// Thread work here
});
t.join();
static uint32_t t
Definition Luminova.h:55
fl::platforms::thread thread
Thread abstraction for FastLED.
Definition thread.h:31

Definition at line 31 of file thread.h.

◆ thread_id

using fl::thread_id = fl::platforms::thread_id

Thread ID type.

Definition at line 34 of file thread.h.

◆ ThreadLocal

template<typename T>
using fl::ThreadLocal = ThreadLocalFake<T>

Definition at line 28 of file thread_local.h.

◆ TIMING_WS2812B_V5

using fl::TIMING_WS2812B_V5 = TIMING_WS2812B_MINI_V3

Convenience alias - WS2812B-V5 uses identical timing to Mini-V3.

Definition at line 172 of file led_timing.h.

◆ TracePoint

using fl::TracePoint = fl::tuple<const char*, int, fl::u32>

A structure to hold source trace information.

Contains the file name, line number, and the time at which the trace was captured.

Definition at line 51 of file trace.h.

◆ true_type

using fl::true_type = integral_constant<bool, true>

Definition at line 27 of file type_traits.h.

◆ u64

typedef fl::u64 fl::u64

Definition at line 221 of file s16x16x4.h.

◆ u8

typedef unsigned char fl::u8

Definition at line 131 of file stdint.h.

◆ UCS7604Controller16bit1600T

template<int DATA_PIN, EOrder RGB_ORDER, template< int, typename, EOrder > class CLOCKLESS_CONTROLLER>
using fl::UCS7604Controller16bit1600T = UCS7604ControllerT<DATA_PIN, RGB_ORDER, fl::UCS7604Mode::UCS7604_MODE_16BIT_1600KHZ, fl::TIMING_UCS7604_1600KHZ, CLOCKLESS_CONTROLLER>

Definition at line 194 of file ucs7604.h.

◆ UCS7604Controller16bitT

template<int DATA_PIN, EOrder RGB_ORDER, template< int, typename, EOrder > class CLOCKLESS_CONTROLLER>
using fl::UCS7604Controller16bitT = UCS7604ControllerT<DATA_PIN, RGB_ORDER, fl::UCS7604Mode::UCS7604_MODE_16BIT_800KHZ, fl::TIMING_UCS7604_800KHZ, CLOCKLESS_CONTROLLER>

Definition at line 191 of file ucs7604.h.

◆ UCS7604Controller8bitT

template<int DATA_PIN, EOrder RGB_ORDER, template< int, typename, EOrder > class CLOCKLESS_CONTROLLER>
using fl::UCS7604Controller8bitT = UCS7604ControllerT<DATA_PIN, RGB_ORDER, fl::UCS7604Mode::UCS7604_MODE_8BIT_800KHZ, fl::TIMING_UCS7604_800KHZ, CLOCKLESS_CONTROLLER>

Definition at line 188 of file ucs7604.h.

◆ ufixed_integer

template<int IntBits, int FracBits>
using fl::ufixed_integer = fixed_point<IntBits, FracBits, Sign::UNSIGNED>

Definition at line 453 of file fixed_point.h.

◆ ufixed_point

template<int IntBits, int FracBits>
using fl::ufixed_point = ufixed_integer<IntBits, FracBits>

Definition at line 460 of file fixed_point.h.

◆ uint

typedef unsigned int fl::uint

Definition at line 132 of file stdint.h.

◆ uint16_t

typedef fl::u16 fl::uint16_t

Definition at line 214 of file s16x16x4.h.

◆ uint32_t

typedef fl::u32 fl::uint32_t

Definition at line 219 of file s16x16x4.h.

◆ uint8_t

typedef unsigned char fl::uint8_t

Definition at line 209 of file s16x16x4.h.

◆ uintptr_t

typedef fl::uptr fl::uintptr_t

Definition at line 224 of file s16x16x4.h.

◆ underlying_type_t

template<typename T>
using fl::underlying_type_t = typename underlying_type<T>::type

Definition at line 1008 of file type_traits.h.

◆ Url

using fl::Url = url

Definition at line 246 of file url.h.

◆ vec2f

typedef vec2< float > fl::vec2f = vec2<float>

Definition at line 333 of file geometry.h.

◆ vec2i16

using fl::vec2i16 = vec2<i16>

Definition at line 335 of file geometry.h.

◆ vec2u8

using fl::vec2u8 = vec2<fl::u8>

Definition at line 334 of file geometry.h.

◆ vec3f

using fl::vec3f = vec3<float>

Definition at line 185 of file geometry.h.

◆ vector_fixed

template<typename T, fl::size INLINED_SIZE>
using fl::vector_fixed = FixedVector<T, INLINED_SIZE>

Definition at line 1130 of file vector.h.

◆ vector_inlined

template<typename T, fl::size INLINED_SIZE = 64>
using fl::vector_inlined = VectorN<T, INLINED_SIZE>

Definition at line 1133 of file vector.h.

◆ VideoImpl

using fl::VideoImpl = video::VideoImpl

Definition at line 27 of file video.h.

◆ VideoImplPtr

typedef video::VideoImplPtr fl::VideoImplPtr = fl::shared_ptr<VideoImpl>

Definition at line 28 of file video.h.

◆ WatchdogTimeoutCallback

using fl::WatchdogTimeoutCallback = void(*)(void* user_data)

ISR-safe C function pointer callback for onTimeout().

Definition at line 107 of file watchdog.h.

◆ WS2812ChipsetTiming

using fl::WS2812ChipsetTiming = TIMING_WS2812_800KHZ

Convenience alias for WS2812 timing (commonly used name)

Definition at line 137 of file led_timing.h.

◆ XFunction

typedef u16(* fl::XFunction) (u16 x, u16 length)

Definition at line 20 of file xmap.h.

◆ XYFunction

typedef u16(* fl::XYFunction) (u16 x, u16 y, u16 width, u16 height)

Definition at line 32 of file xymap.h.

◆ XYMapCallback

using fl::XYMapCallback = fl::u16 (*)(fl::u16 x, fl::u16 y, void *userData)

Definition at line 20 of file context.h.

◆ XYMapPtr

using fl::XYMapPtr = shared_ptr<XYMap>

Definition at line 33 of file screenmap.h.

◆ XYRaster

using fl::XYRaster = XYRasterU8Sparse

Definition at line 8 of file raster.h.

◆ XYRasterSparse_CRGB

using fl::XYRasterSparse_CRGB = XYRasterSparse_RGB8

Definition at line 392 of file raster_sparse.h.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
kRGBWDefaultColorTemp 

Definition at line 169 of file rgbw.h.

169 {
171};
@ kRGBWDefaultColorTemp
Definition rgbw.h:170

◆ anonymous enum

anonymous enum

Default warm / cool reference CCTs for built-in profiles.

Enumerator
kRGBWWDefaultWarmCct 
kRGBWWDefaultCoolCct 

Definition at line 53 of file rgbww.h.

53 {
56};
@ kRGBWWDefaultWarmCct
Definition rgbww.h:54
@ kRGBWWDefaultCoolCct
Definition rgbww.h:55

◆ AdcRange

enum class fl::AdcRange
strong

ADC voltage range configuration.

Note
Different platforms implement this differently (reference voltage vs attenuation)
Not all ranges are available on all platforms (no-op for unsupported values)
Enumerator
Default 

Platform default (5V on AVR Uno, 3.3V on ESP32 w/ 11dB, etc.)

Range0_1V1 

0-1.1V range (INTERNAL on AVR, 0dB on ESP32)

Range0_1V5 

0-1.5V range (2.5dB on ESP32)

Range0_2V2 

0-2.2V range (6dB on ESP32)

Range0_3V3 

0-3.3V range (11dB on ESP32, VDDANA on 3.3V SAMD)

Range0_5V 

0-5V range (DEFAULT on 5V AVR boards)

External 

External reference voltage on AREF pin (AVR/SAMD only)

Definition at line 57 of file pin.h.

57 {
58 Default = 0,
63 Range0_5V,
65};
@ Range0_2V2
0-2.2V range (6dB on ESP32)
Definition pin.h:61
@ Range0_1V5
0-1.5V range (2.5dB on ESP32)
Definition pin.h:60
@ Default
Platform default (5V on AVR Uno, 3.3V on ESP32 w/ 11dB, etc.)
Definition pin.h:58
@ Range0_5V
0-5V range (DEFAULT on 5V AVR boards)
Definition pin.h:63
@ Range0_3V3
0-3.3V range (11dB on ESP32, VDDANA on 3.3V SAMD)
Definition pin.h:62
@ External
External reference voltage on AREF pin (AVR/SAMD only)
Definition pin.h:64
@ Range0_1V1
0-1.1V range (INTERNAL on AVR, 0dB on ESP32)
Definition pin.h:59

◆ AnimartrixAnim

enum class fl::AnimartrixAnim
strong
Enumerator
RGB_BLOBS5 
RGB_BLOBS4 
RGB_BLOBS3 
RGB_BLOBS2 
RGB_BLOBS 
POLAR_WAVES 
SLOW_FADE 
ZOOM2 
ZOOM 
HOT_BLOB 
SPIRALUS2 
SPIRALUS 
YVES 
SCALEDEMO1 
LAVA1 
CALEIDO3 
CALEIDO2 
CALEIDO1 
DISTANCE_EXPERIMENT 
CENTER_FIELD 
WAVES 
CHASING_SPIRALS 
ROTATING_BLOB 
RINGS 
COMPLEX_KALEIDO 
COMPLEX_KALEIDO_2 
COMPLEX_KALEIDO_3 
COMPLEX_KALEIDO_4 
COMPLEX_KALEIDO_5 
COMPLEX_KALEIDO_6 
WATER 
PARAMETRIC_WATER 
MODULE_EXPERIMENT1 
MODULE_EXPERIMENT2 
MODULE_EXPERIMENT3 
MODULE_EXPERIMENT4 
MODULE_EXPERIMENT5 
MODULE_EXPERIMENT6 
MODULE_EXPERIMENT7 
MODULE_EXPERIMENT8 
MODULE_EXPERIMENT9 
MODULE_EXPERIMENT10 
MODULE_EXPERIMENT_SM1 
MODULE_EXPERIMENT_SM2 
MODULE_EXPERIMENT_SM3 
MODULE_EXPERIMENT_SM4 
MODULE_EXPERIMENT_SM5 
MODULE_EXPERIMENT_SM6 
MODULE_EXPERIMENT_SM8 
MODULE_EXPERIMENT_SM9 
MODULE_EXPERIMENT_SM10 
FLUFFY_BLOBS 
NUM_ANIMATIONS 

Definition at line 32 of file animartrix.hpp.

32 {
33 RGB_BLOBS5 = 0,
40 ZOOM2,
41 ZOOM,
45 YVES,
47 LAVA1,
53 WAVES,
56 RINGS,
63 WATER,
86};

◆ BindError

enum class fl::BindError
strong
Enumerator
NotFound 
SignatureMismatch 

Definition at line 100 of file rpc.h.

100 {
101 NotFound, // No method registered with that name
102 SignatureMismatch // Method exists but signature doesn't match
103};
@ SignatureMismatch
Definition rpc.h:102

◆ BumpShape

enum class fl::BumpShape : u8
strong

Shape function for NoiseBias triggers.

Enumerator
HalfSine 

sin(pi * t), smooth bell, zero at edges

Gaussian 

exp(-0.5 * ((t-0.5)/sigma)^2), tighter peak

Definition at line 23 of file flowfield.h.

23 : u8 {
24 HalfSine,
26};
unsigned char u8
Definition stdint.h:131
@ HalfSine
sin(pi * t), smooth bell, zero at edges
Definition flowfield.h:24
@ Gaussian
exp(-0.5 * ((t-0.5)/sigma)^2), tighter peak
Definition flowfield.h:25

◆ Bus

enum class fl::Bus : fl::u8
strong

Driver identifier for compile-time bus selection.

The values are deliberately named after the underlying peripheral so a single identifier (Bus::RMT, Bus::PARLIO, etc.) flows through both the template-binding API surface and the runtime registry overrides.

Enumerator
AUTO 

Sentinel: defer to DefaultBus<Chipset>::value.

RMT 

ESP32 RMT peripheral (all ESP32 variants).

PARLIO 

ESP32-P4/C6/H2/C5 parallel I/O peripheral.

SPI 

Generic SPI clockless driver.

I2S 

ESP32-S3 LCD_CAM via legacy I80 bus (clockless).

I2S_SPI 

Original ESP32 native I2S parallel SPI (true SPI chipsets).

LCD_RGB 

ESP32-P4 LCD RGB peripheral (parallel clockless).

LCD_SPI 

ESP32-S3 LCD_CAM SPI driver (true SPI chipsets).

LCD_CLOCKLESS 

ESP32-S3 LCD_CAM clockless driver (replaces misnamed I2S).

UART 

ESP32 UART driver via wave8 framing.

FLEX_IO 

Teensy 4.x FlexIO2 driver.

OBJECT_FLED 

Teensy 4.x ObjectFLED driver.

LPUART 

Teensy 4.x iMXRT1062 LPUART (inverted-TX + eDMA) clockless driver.

BIT_BANG 

Portable bit-bang fallback driver.

STUB 

Native/host/test stub driver.

Definition at line 60 of file bus.h.

60 : fl::u8 {
61 AUTO = 0,
62 RMT,
63 PARLIO,
64 SPI,
65 I2S,
66 I2S_SPI,
67 LCD_RGB,
68 LCD_SPI,
70 UART,
71 FLEX_IO,
73 LPUART,
74 BIT_BANG,
75 STUB,
76};
unsigned char u8
Definition stdint.h:131
@ LPUART
Teensy 4.x iMXRT1062 LPUART (inverted-TX + eDMA) clockless driver.
Definition bus.h:73
@ FLEX_IO
Teensy 4.x FlexIO2 driver.
Definition bus.h:71
@ I2S_SPI
Original ESP32 native I2S parallel SPI (true SPI chipsets).
Definition bus.h:66
@ SPI
Generic SPI clockless driver.
Definition bus.h:64
@ PARLIO
ESP32-P4/C6/H2/C5 parallel I/O peripheral.
Definition bus.h:63
@ OBJECT_FLED
Teensy 4.x ObjectFLED driver.
Definition bus.h:72
@ LCD_RGB
ESP32-P4 LCD RGB peripheral (parallel clockless).
Definition bus.h:67
@ LCD_CLOCKLESS
ESP32-S3 LCD_CAM clockless driver (replaces misnamed I2S).
Definition bus.h:69
@ I2S
ESP32-S3 LCD_CAM via legacy I80 bus (clockless).
Definition bus.h:65
@ BIT_BANG
Portable bit-bang fallback driver.
Definition bus.h:74
@ LCD_SPI
ESP32-S3 LCD_CAM SPI driver (true SPI chipsets).
Definition bus.h:68
@ RMT
ESP32 RMT peripheral (all ESP32 variants).
Definition bus.h:62
@ UART
ESP32 UART driver via wave8 framing.
Definition bus.h:70
@ STUB
Native/host/test stub driver.
Definition bus.h:75

◆ ButtonStrategy

enum class fl::ButtonStrategy
strong
Enumerator
kHighLowFloating 
kPullUp 
kPullDown 

Definition at line 14 of file button.h.

14 {
15 // High-low floating detection strategy: Sets pin to high, checks if high,
16 // sets pin to low, checks if low. If both are true, pin is floating and
17 // button is not pressed. Useful for detecting buttons without pull resistors.
19
20 // Active-low button strategy: Uses internal pull-up resistor.
21 // Button connects pin to ground when pressed. Reading LOW = pressed.
22 kPullUp,
23
24 // Active-high button strategy: Uses internal pull-down resistor.
25 // Button connects pin to VCC when pressed. Reading HIGH = pressed.
27};

◆ ClocklessEncoder

enum class fl::ClocklessEncoder : u8
strong

Identifies which encoder to use for clockless chipsets in the Channel API.

Enumerator
CLOCKLESS_ENCODER_WS2812 

Default, no preamble (WS2812 and compatible)

CLOCKLESS_ENCODER_UCS7604_8BIT 

UCS7604 8-bit 800KHz.

CLOCKLESS_ENCODER_UCS7604_16BIT 

UCS7604 16-bit 800KHz.

CLOCKLESS_ENCODER_UCS7604_16BIT_1600 

UCS7604 16-bit 1600KHz.

Examples
/home/runner/work/FastLED/FastLED/src/fl/channels/config.h.

Definition at line 21 of file clockless_encoder.h.

21 : u8 {
26};
@ CLOCKLESS_ENCODER_UCS7604_8BIT
UCS7604 8-bit 800KHz.
@ CLOCKLESS_ENCODER_UCS7604_16BIT
UCS7604 16-bit 800KHz.
@ CLOCKLESS_ENCODER_UCS7604_16BIT_1600
UCS7604 16-bit 1600KHz.
@ CLOCKLESS_ENCODER_WS2812
Default, no preamble (WS2812 and compatible)

◆ ConnectionState

enum class fl::ConnectionState
strong
Enumerator
DISCONNECTED 
CONNECTING 
CONNECTED 
RECONNECTING 
CLOSED 

Definition at line 9 of file connection.h.

9 {
10 DISCONNECTED, // Not connected, idle
11 CONNECTING, // Connection attempt in progress
12 CONNECTED, // Connected and active
13 RECONNECTING, // Reconnection attempt after failure
14 CLOSED // Connection permanently closed (user requested)
15};

◆ DecodeError

enum class fl::DecodeError : u8
strong

Error codes for RX decoder operations.

Enumerator
OK 

No error (not typically used)

HIGH_ERROR_RATE 

Symbol decode error rate too high (>10%)

BUFFER_OVERFLOW 

Output buffer overflow.

INVALID_ARGUMENT 

Invalid input arguments.

Definition at line 68 of file rx.h.

68 : u8 {
69 OK = 0,
73};
@ HIGH_ERROR_RATE
Symbol decode error rate too high (>10%)
Definition rx.h:70
@ BUFFER_OVERFLOW
Output buffer overflow.
Definition rx.h:71
@ OK
No error (not typically used)
Definition rx.h:69
@ INVALID_ARGUMENT
Invalid input arguments.
Definition rx.h:72

◆ DecodeResult

enum class fl::DecodeResult
strong
Enumerator
Success 
NeedsMoreData 
EndOfStream 
Error 
UnsupportedFormat 

Definition at line 18 of file idecoder.h.

◆ DrawMode

enum class fl::DrawMode
strong
Enumerator
DRAW_MODE_OVERWRITE 
DRAW_MODE_BLEND 
DRAW_MODE_BLEND_BY_MAX_BRIGHTNESS 

Definition at line 5 of file draw_mode.h.

◆ EaseType

enum class fl::EaseType
strong
Enumerator
EASE_NONE 
EASE_IN_QUAD 
EASE_OUT_QUAD 
EASE_IN_OUT_QUAD 
EASE_IN_CUBIC 
EASE_OUT_CUBIC 
EASE_IN_OUT_CUBIC 
EASE_IN_SINE 
EASE_OUT_SINE 
EASE_IN_OUT_SINE 

Definition at line 27 of file ease.h.

27 {
38};
@ EASE_IN_OUT_CUBIC
Definition ease.h:34
@ EASE_OUT_QUAD
Definition ease.h:30
@ EASE_IN_QUAD
Definition ease.h:29
@ EASE_NONE
Definition ease.h:28
@ EASE_IN_OUT_QUAD
Definition ease.h:31
@ EASE_IN_CUBIC
Definition ease.h:32
@ EASE_IN_SINE
Definition ease.h:35
@ EASE_OUT_CUBIC
Definition ease.h:33
@ EASE_IN_OUT_SINE
Definition ease.h:37
@ EASE_OUT_SINE
Definition ease.h:36

◆ EOrder

enum class fl::EOrder
strong

RGB color channel orderings, used when instantiating controllers to determine what order the controller should send data out in.

The default ordering is RGB. Within this enum, the red channel is 0, the green channel is 1, and the blue chanel is 2.

Enumerator
RGB 

Red, Green, Blue (0012)

RBG 

Red, Blue, Green (0021)

GRB 

Green, Red, Blue (0102)

GBR 

Green, Blue, Red (0120)

BRG 

Blue, Red, Green (0201)

BGR 

Blue, Green, Red (0210)

Definition at line 13 of file eorder.h.

13 {
14 RGB=0012,
15 RBG=0021,
16 GRB=0102,
17 GBR=0120,
18 BRG=0201,
19 BGR=0210
20};
constexpr EOrder BGR
Definition eorder.h:22
constexpr EOrder RBG
Definition eorder.h:18
constexpr EOrder BRG
Definition eorder.h:21
constexpr EOrder GRB
Definition eorder.h:19
constexpr EOrder RGB
Definition eorder.h:17
constexpr EOrder GBR
Definition eorder.h:20

◆ EOrderW

enum class fl::EOrderW
strong
Enumerator
W3 

White is fourth.

W2 

White is third.

W1 

White is second.

W0 

White is first.

WDefault 

Definition at line 23 of file eorder.h.

23 {
24 W3 = 0x3,
25 W2 = 0x2,
26 W1 = 0x1,
27 W0 = 0x0,
28 WDefault = W3
29};
constexpr EOrderW W3
Definition eorder.h:24
constexpr EOrderW W2
Definition eorder.h:25
constexpr EOrderW W0
Definition eorder.h:27
constexpr EOrderW W1
Definition eorder.h:26
constexpr EOrderW WDefault
Definition eorder.h:28

◆ EOrderWW

enum class fl::EOrderWW : fl::u8
strong

White-byte ordering for 5-channel RGBWW output.

Two white bytes consume two of the five wire slots; RGB fills the remaining three in EOrder order. WwWcEnd (warm then cool, both at end) matches typical SK6812-RGBWW data sheets.

Enumerator
WwWcEnd 

RGB followed by warm-W, cool-W.

WcWwEnd 

RGB followed by cool-W, warm-W.

WwWcStart 

warm-W, cool-W, then RGB

WcWwStart 

cool-W, warm-W, then RGB

WWDefault 

Definition at line 27 of file rgbww.h.

27 : fl::u8 {
28 WwWcEnd = 0x34,
29 WcWwEnd = 0x43,
30 WwWcStart = 0x01,
31 WcWwStart = 0x10,
33};
@ WcWwEnd
RGB followed by cool-W, warm-W.
Definition rgbww.h:29
@ WwWcEnd
RGB followed by warm-W, cool-W.
Definition rgbww.h:28
@ WcWwStart
cool-W, warm-W, then RGB
Definition rgbww.h:31
@ WwWcStart
warm-W, cool-W, then RGB
Definition rgbww.h:30
@ WWDefault
Definition rgbww.h:32

◆ FiveBitGammaCorrectionMode

enum class fl::FiveBitGammaCorrectionMode
strong
Enumerator
kFiveBitGammaCorrectionMode_Null 
kFiveBitGammaCorrectionMode_BitShift 

Definition at line 19 of file five_bit_hd_gamma.h.

◆ fmtflags

enum class fl::fmtflags
strong
Enumerator
dec 
hex 
oct 

Definition at line 13 of file ios.h.

13 {
14 dec = 0, // decimal base
15 hex = 1, // hexadecimal base
16 oct = 2 // octal base
17};
const dec_t dec
Definition ios.cpp.hpp:7
const hex_t hex
Definition ios.cpp.hpp:6
const oct_t oct
Definition ios.cpp.hpp:8

◆ HSVHue

enum fl::HSVHue

Pre-defined hue values for hsv8 objects.

Enumerator
HUE_RED 

Red (0°)

HUE_ORANGE 

Orange (45°)

HUE_YELLOW 

Yellow (90°)

HUE_GREEN 

Green (135°)

HUE_AQUA 

Aqua (180°)

HUE_BLUE 

Blue (225°)

HUE_PURPLE 

Purple (270°)

HUE_PINK 

Pink (315°)

Definition at line 97 of file hsv.h.

97 {
98 HUE_RED = 0,
99 HUE_ORANGE = 32,
100 HUE_YELLOW = 64,
101 HUE_GREEN = 96,
102 HUE_AQUA = 128,
103 HUE_BLUE = 160,
104 HUE_PURPLE = 192,
105 HUE_PINK = 224
106} HSVHue;
HSVHue
Pre-defined hue values for hsv8 objects.
Definition hsv.h:97
@ HUE_BLUE
Blue (225°)
Definition hsv.h:103
@ HUE_RED
Red (0°)
Definition hsv.h:98
@ HUE_AQUA
Aqua (180°)
Definition hsv.h:102
@ HUE_PINK
Pink (315°)
Definition hsv.h:105
@ HUE_GREEN
Green (135°)
Definition hsv.h:101
@ HUE_YELLOW
Yellow (90°)
Definition hsv.h:100
@ HUE_ORANGE
Orange (45°)
Definition hsv.h:99
@ HUE_PURPLE
Purple (270°)
Definition hsv.h:104

◆ InputGamut

enum class fl::InputGamut : u8
strong
Enumerator
Native 
Rec709 
Rec2020 
DciP3D65 
DciP3D60 

Definition at line 77 of file rgbw.h.

77 : u8 {
78 Native = 0, // Input primaries == this profile's LED primaries + D65 white
79 Rec709, // sRGB / Rec.709 primaries + D65 white
80 Rec2020, // Rec.2020 (UHDTV) primaries + D65 white
81 DciP3D65, // DCI-P3 D65 — consumer display variant (e.g. Apple)
82 DciP3D60, // DCI-P3 D60 — ACES / cinema mastering variant
83};

◆ LaplacianStencil

enum class fl::LaplacianStencil : u8
strong
Enumerator
FivePoint 
NinePointIsotropic 

Definition at line 130 of file wave_simulation_real.h.

◆ LogCategory

enum class fl::LogCategory : fl::u8
strong

Logger category identifiers for registry-based access Each category has separate ISR and main thread loggers (SPSC requirement)

Enumerator
PARLIO_ISR 
PARLIO_MAIN 
RMT_ISR 
RMT_MAIN 
SPI_ISR 
SPI_MAIN 
AUDIO_ISR 
AUDIO_MAIN 
INTERRUPT_ISR 
INTERRUPT_MAIN 
MAX_CATEGORIES 

Definition at line 55 of file async_logger.h.

55 : fl::u8 {
56 PARLIO_ISR = 0,
57 PARLIO_MAIN = 1,
58 RMT_ISR = 2,
59 RMT_MAIN = 3,
60 SPI_ISR = 4,
61 SPI_MAIN = 5,
62 AUDIO_ISR = 6,
63 AUDIO_MAIN = 7,
64 INTERRUPT_ISR = 8,
66 // Add new categories here (max 16 total)
68};
@ SPI_ISR
Use ISR-based software (Async)
Definition config.h:29

◆ LogLevel

enum class fl::LogLevel : u8
strong

Log level constants - higher values include more output Prefixed with FL_ to avoid macro collisions (e.g.

NimBLE-Arduino's #define LOG_LEVEL_NONE).

Enumerator
FL_LOG_LEVEL_NONE 

No logging (completely silent)

FL_LOG_LEVEL_ERROR 

Only errors.

FL_LOG_LEVEL_WARN 

Errors and warnings.

FL_LOG_LEVEL_INFO 

Errors, warnings, and info.

FL_LOG_LEVEL_DEBUG 

All logging including debug (default)

Definition at line 23 of file cstdio.h.

23 : u8 {
29};
@ FL_LOG_LEVEL_INFO
Errors, warnings, and info.
Definition cstdio.h:27
@ FL_LOG_LEVEL_DEBUG
All logging including debug (default)
Definition cstdio.h:28
@ FL_LOG_LEVEL_WARN
Errors and warnings.
Definition cstdio.h:26
@ FL_LOG_LEVEL_NONE
No logging (completely silent)
Definition cstdio.h:24
@ FL_LOG_LEVEL_ERROR
Only errors.
Definition cstdio.h:25

◆ memory_order

enum fl::memory_order
Enumerator
memory_order_relaxed 
memory_order_acquire 
memory_order_release 
memory_order_acq_rel 
memory_order_seq_cst 

Definition at line 39 of file atomic.h.

39 { // ok plain enum
45};
@ memory_order_relaxed
Definition atomic.h:40
@ memory_order_acquire
Definition atomic.h:41
@ memory_order_seq_cst
Definition atomic.h:44
@ memory_order_release
Definition atomic.h:42
@ memory_order_acq_rel
Definition atomic.h:43

◆ PinMode

enum class fl::PinMode
strong

Pin mode configuration.

Enumerator
Input 

Digital input (high impedance)

Output 

Digital output (push-pull)

InputPullup 

Digital input with internal pull-up resistor.

InputPulldown 

Digital input with internal pull-down resistor.

Definition at line 41 of file pin.h.

41 {
42 Input = 0,
43 Output,
46};
@ Output
Digital output (push-pull)
Definition pin.h:43
@ Input
Digital input (high impedance)
Definition pin.h:42
@ InputPullup
Digital input with internal pull-up resistor.
Definition pin.h:44
@ InputPulldown
Digital input with internal pull-down resistor.
Definition pin.h:45

◆ PinValue

enum class fl::PinValue
strong

Digital pin value.

Enumerator
Low 

Logic low (0V / GND)

High 

Logic high (3.3V / 5V, platform-dependent)

Definition at line 49 of file pin.h.

49 {
50 Low = 0,
51 High = 1
52};
@ Low
Logic low (0V / GND)
Definition pin.h:50
@ High
Logic high (3.3V / 5V, platform-dependent)
Definition pin.h:51

◆ PixelFormat

enum class fl::PixelFormat
strong
Enumerator
RGB565 
RGB888 
RGBA8888 
YUV420 

Definition at line 7 of file pixel.h.

7 {
8 RGB565, // 16-bit RGB: RRRRR GGGGGG BBBBB
9 RGB888, // 24-bit RGB: RRRRRRRR GGGGGGGG BBBBBBBB
10 RGBA8888, // 32-bit RGBA: RRRRRRRR GGGGGGGG BBBBBBBB AAAAAAAA
11 YUV420 // YUV 4:2:0 format (mainly for internal use)
12};

◆ RampPhase

enum class fl::RampPhase
strong
Enumerator
Inactive 
Rising 
Plateau 
Falling 

Definition at line 12 of file time_alpha.h.

12 {
13 Inactive, // Not started or finished
14 Rising, // Ramping up from 0 to 255
15 Plateau, // Holding at 255
16 Falling // Ramping down from 255 to 0
17};

◆ RemoteClearFlags

enum class fl::RemoteClearFlags : u8
strong

Flags for clearing Remote state (can be OR'd together)

Enumerator
None 
Results 

Clear results from executed functions.

Scheduled 

Clear scheduled calls.

Functions 

Clear registered functions.

All 

Clear everything.

Definition at line 32 of file types.h.

32 : u8 {
33 None = 0,
34 Results = 1 << 0,
35 Scheduled = 1 << 1,
36 Functions = 1 << 2,
38};
@ None
Raw magnitudes (no scaling)
Definition equalizer.h:18
@ Scheduled
Clear scheduled calls.
Definition types.h:35
@ All
Clear everything.
Definition types.h:37
@ Functions
Clear registered functions.
Definition types.h:36
@ Results
Clear results from executed functions.
Definition types.h:34

◆ ResetCause

enum class fl::ResetCause : fl::u8
strong

Cause of the previous boot. Call once early in setup().

Enumerator
UNKNOWN 
POWER_ON 
BROWNOUT 
EXTERNAL_PIN 
WATCHDOG 
SOFTWARE 
LOCKUP 
DEBUGGER 
PANIC 

Definition at line 43 of file watchdog.h.

◆ ResultError

enum class fl::ResultError : u8
strong

Generic error codes for expected type.

Default error type when no specific error enum is needed

Enumerator
OK 

No error (not typically used)

UNKNOWN 

Unknown or unspecified error.

INVALID_ARGUMENT 

Invalid argument provided.

OUT_OF_RANGE 

Value out of valid range.

NOT_INITIALIZED 

Object not initialized.

ALREADY_INITIALIZED 

Object already initialized.

ALLOCATION_FAILED 

Memory allocation failed.

TIMEOUT 

Operation timed out.

BUSY 

Resource is busy.

NOT_SUPPORTED 

Operation not supported.

IO_ERROR 

Input/output error.

Definition at line 47 of file expected.h.

47 : u8 {
48 OK,
49 UNKNOWN,
55 TIMEOUT,
56 BUSY,
59};
@ NOT_INITIALIZED
Object not initialized.
Definition expected.h:52
@ ALREADY_INITIALIZED
Object already initialized.
Definition expected.h:53
@ IO_ERROR
Input/output error.
Definition expected.h:58
@ NOT_SUPPORTED
Operation not supported.
Definition expected.h:57
@ OUT_OF_RANGE
Value out of valid range.
Definition expected.h:51
@ BUSY
Resource is busy.
Definition expected.h:56
@ ALLOCATION_FAILED
Memory allocation failed.
Definition expected.h:54
@ TIMEOUT
Operation timed out.
Definition rx.h:153

◆ RGBW_MODE

enum class fl::RGBW_MODE
strong
Enumerator
kRGBWInvalid 
kRGBWNullWhitePixel 
kRGBWExactColors 
kRGBWBoostedWhite 
kRGBWMaxBrightness 
kRGBWColorimetric 
kRGBWColorimetricBoosted 
kRGBWUserFunction 

Definition at line 14 of file rgbw.h.

14 {
20 // Chromaticity-aware modes (issue #2545). Off by default at compile time:
21 // require `#define FASTLED_RGBW_COLORIMETRIC 1` to enable the real math
22 // path. Without the define, selecting either mode emits FL_WARN_ONCE and
23 // falls back to kRGBWExactColors.
26 // IMPORTANT: kRGBWUserFunction MUST remain the last enumerator. New modes
27 // are added immediately above this line so the user-function ordinal does
28 // not shift and the dispatch table can rely on it being the maximum value.
30};
constexpr RGBW_MODE kRGBWUserFunction
Definition rgbw.h:27
constexpr RGBW_MODE kRGBWMaxBrightness
Definition rgbw.h:23
constexpr RGBW_MODE kRGBWExactColors
Definition rgbw.h:21
constexpr RGBW_MODE kRGBWBoostedWhite
Definition rgbw.h:22
constexpr RGBW_MODE kRGBWNullWhitePixel
Definition rgbw.h:20
constexpr RGBW_MODE kRGBWColorimetricBoosted
Definition rgbw.h:25
constexpr RGBW_MODE kRGBWColorimetric
Definition rgbw.h:24
constexpr RGBW_MODE kRGBWInvalid
Definition rgbw.h:19

◆ RgbwLutInterp

enum class fl::RgbwLutInterp : u8
strong
Enumerator
Bilinear 
Hermite 

Definition at line 121 of file rgbw.h.

121 : u8 {
122 Bilinear = 0,
123 Hermite = 1,
124};

◆ RGBWW_MODE

enum class fl::RGBWW_MODE : fl::u8
strong

RGB -> RGBWW conversion modes (issue #2558, Phase 3 of #2545).

All modes are colorimetric — there is no min(RGB)-style analog that generalizes to two whites. The real solver runs whenever FASTLED_RGBW_COLORIMETRIC=1 (the same flag that gates the 4-channel colorimetric path); otherwise dispatch emits FL_WARN_ONCE and outputs zeros. No separate FASTLED_RGBWW flag exists — gc-sections drops unused RGBWW symbols for sketches that never configure a channel with mWhiteCfg = Rgbww{...}.

Enumerator
kRGBWWInvalid 
kRGBWWColorimetric 
kRGBWWColorimetricBoosted 
kRGBWWUserFunction 

Definition at line 42 of file rgbww.h.

42 : fl::u8 {
46 // IMPORTANT: kRGBWWUserFunction MUST remain the last enumerator. New
47 // modes are added immediately above this line so the user-function
48 // ordinal stays as the dispatch max value.
50};
@ kRGBWWUserFunction
Definition rgbww.h:49
@ kRGBWWColorimetric
Definition rgbww.h:44
@ kRGBWWInvalid
Definition rgbww.h:43
@ kRGBWWColorimetricBoosted
Definition rgbww.h:45

◆ RpcMode

enum class fl::RpcMode
strong
Enumerator
SYNC 
ASYNC 
ASYNC_STREAM 

Definition at line 9 of file rpc_mode.h.

9 {
10 SYNC, // Synchronous: Returns result immediately (default)
11 ASYNC, // Asynchronous: Sends ACK immediately, result comes later
12 ASYNC_STREAM // Asynchronous Streaming: ACK + multiple updates + final result
13};

◆ RxBackend

enum class fl::RxBackend : u8
strong
Enumerator
PLATFORM_DEFAULT 

Use the recommended backend for the active platform (RMT on ESP32; FlexPWM on Teensy 4.x with FLEXIO as an opt-in alternative — see FastLED#2764; LPC_SCT_CAPTURE on LPC845; native RX on stub/host builds).

RMT 

ESP32-only RMT capture backend.

ISR 

Platform-neutral interrupt-driven edge capture backend when available.

FLEXPWM 

Teensy 4.x-only FlexPWM capture backend.

FLEXIO 

Teensy 4.x-only FlexIO capture backend (FLEXIO1 — FLEXIO2 is owned by the WS2812 TX driver). Hardware-verified by flexioRxBenchmark (1/10/100 kHz square wave) and flexioObjectFledTest (5-pattern ObjectFLED loopback). See FastLED#2764.

LPC_SCT_CAPTURE 

LPC8xx SCT input-capture + DMA edge backend (LPC845 et al). Capture path is a skeleton until follow-up bench validation lands — see FastLED#3015. Decoder + injectEdges() are fully functional and host-tested today.

Definition at line 8 of file types.h.

8 : u8 {
10 RMT = 1,
11 ISR = 2,
12 FLEXPWM = 3,
13 FLEXIO = 4,
15};
@ LPC_SCT_CAPTURE
SCT input-capture + DMA receiver (LPC8xx). Skeleton + decoder land in #3015; bench-verified register-...
Definition rx.h:169
@ FLEXPWM
FlexPWM input-capture receiver (Teensy 4.x)
Definition rx.h:167
@ FLEXIO
FlexIO shifter-based receiver (Teensy 4.x, FLEXIO1; see FastLED#2764)
Definition rx.h:168
@ PLATFORM_DEFAULT
Platform default (RMT on ESP32, FLEXPWM on Teensy 4.x; FLEXIO available as opt-in on Teensy 4 — see F...
Definition rx.h:164
@ ISR
GPIO ISR-based receiver (ESP32)
Definition rx.h:165

◆ RxDeviceType

enum class fl::RxDeviceType : u8
strong

RX device type enumeration.

Defines available RX device implementations. Used with template-based factory pattern for compile-time device selection.

Enumerator
PLATFORM_DEFAULT 

Platform default (RMT on ESP32, FLEXPWM on Teensy 4.x; FLEXIO available as opt-in on Teensy 4 — see FastLED#2764; LPC_SCT_CAPTURE on LPC845)

ISR 

GPIO ISR-based receiver (ESP32)

RMT 

RMT-based receiver (ESP32)

FLEXPWM 

FlexPWM input-capture receiver (Teensy 4.x)

FLEXIO 

FlexIO shifter-based receiver (Teensy 4.x, FLEXIO1; see FastLED#2764)

LPC_SCT_CAPTURE 

SCT input-capture + DMA receiver (LPC8xx). Skeleton + decoder land in #3015; bench-verified register-level capture is a follow-up.

Definition at line 163 of file rx.h.

163 : u8 {
164 PLATFORM_DEFAULT = 0,
165 ISR = 1,
166 RMT = 2,
167 FLEXPWM = 3,
168 FLEXIO = 4,
169 LPC_SCT_CAPTURE = 5
170};

◆ RxWaitResult

enum class fl::RxWaitResult : u8
strong

Result codes for RX wait() operations.

Enumerator
SUCCESS 

Operation completed successfully.

TIMEOUT 

Operation timed out.

BUFFER_OVERFLOW 

Buffer overflow.

Definition at line 151 of file rx.h.

151 : u8 {
152 SUCCESS = 0,
153 TIMEOUT = 1,
154 BUFFER_OVERFLOW = 2
155};

◆ SampleMode

enum class fl::SampleMode
strong

Interpolation mode for sampling a 2D grid.

Enumerator
SAMPLE_NEAREST 

Nearest neighbor (fast, pixelated)

SAMPLE_BILINEAR 

Bilinear interpolation (smooth)

Definition at line 13 of file sample.h.

13 {
16};
@ SAMPLE_BILINEAR
Bilinear interpolation (smooth)
Definition sample.h:15
@ SAMPLE_NEAREST
Nearest neighbor (fast, pixelated)
Definition sample.h:14

◆ seek_dir

enum class fl::seek_dir
strong
Enumerator
beg 
cur 
end 

Definition at line 19 of file file_handle.h.

19 {
20 beg = 0, // Beginning of file
21 cur = 1, // Current position
22 end = 2 // End of file
23};
constexpr T * end(T(&array)[N]) FL_NOEXCEPT

◆ Sign

enum class fl::Sign
strong
Enumerator
SIGNED 
UNSIGNED 

Definition at line 58 of file fixed_point.h.

58 {
59 SIGNED,
61};

◆ spi_output_mode_t

enum class fl::spi_output_mode_t : u8
strong

SPI output mode for multi-lane devices.

Enumerator
SPI_AUTO 

Auto-selects best backend (DMA/bit-bang/ISR)

SPI_HW 

Use DMA-capable hardware (Async or Sync), supports 1/2/4/8 lanes depending on platform.

SPI_BITBANG 

Use bit-bang software (Blocking)

SPI_ISR 

Use ISR-based software (Async)

Definition at line 25 of file config.h.

25 : u8 {
26 SPI_AUTO = 0,
27 SPI_HW,
29 SPI_ISR,
30};
@ SPI_HW
Use DMA-capable hardware (Async or Sync), supports 1/2/4/8 lanes depending on platform.
Definition config.h:27
@ SPI_AUTO
Auto-selects best backend (DMA/bit-bang/ISR)
Definition config.h:26
@ SPI_BITBANG
Use bit-bang software (Blocking)
Definition config.h:28

◆ SpiChipset

enum class fl::SpiChipset
strong

LED chipsets with SPI interface (clocked protocols) Modern type-safe enum class - prefer this for new code.

Enumerator
LPD6803 

LPD6803 LED chipset.

LPD8806 

LPD8806 LED chipset.

WS2801 

WS2801 LED chipset.

WS2803 

WS2803 LED chipset.

SM16716 

SM16716 LED chipset.

P9813 

P9813 LED chipset.

APA102 

APA102 LED chipset.

SK9822 

SK9822 LED chipset.

SK9822HD 

SK9822 LED chipset with 5-bit gamma correction.

DOTSTAR 

APA102 LED chipset alias.

DOTSTARHD 

APA102HD LED chipset alias.

APA102HD 

APA102 LED chipset with 5-bit gamma correction.

HD107 

Same as APA102, but in turbo 40-mhz mode.

HD107HD 

Same as APA102HD, but in turbo 40-mhz mode.

HD108 

16-bit variant of HD107, always gamma corrected. No SD (standard definition) option available - all HD108s use gamma correction, and a non-gamma corrected version is not planned.

Definition at line 13 of file spi_chipsets.h.

13 {
14 LPD6803,
15 LPD8806,
16 WS2801,
17 WS2803,
18 SM16716,
19 P9813,
20 APA102,
21 SK9822,
22 SK9822HD,
23 DOTSTAR,
24 DOTSTARHD,
25 APA102HD,
26 HD107,
27 HD107HD,
28 HD108,
29};
@ APA102HD
APA102 LED chipset with 5-bit gamma correction.
Definition FastLED.h:267
@ P9813
P9813 LED chipset.
Definition FastLED.h:261
@ SK9822HD
SK9822 LED chipset with 5-bit gamma correction.
Definition FastLED.h:264
@ SK9822
SK9822 LED chipset.
Definition FastLED.h:263
@ WS2803
WS2803 LED chipset.
Definition FastLED.h:259
@ HD107
Same as APA102, but in turbo 40-mhz mode.
Definition FastLED.h:268
@ WS2801
WS2801 LED chipset.
Definition FastLED.h:258
@ DOTSTAR
APA102 LED chipset alias.
Definition FastLED.h:265
@ APA102
APA102 LED chipset.
Definition FastLED.h:262
@ LPD8806
LPD8806 LED chipset.
Definition FastLED.h:257
@ HD107HD
Same as APA102HD, but in turbo 40-mhz mode.
Definition FastLED.h:269
@ LPD6803
LPD6803 LED chipset.
Definition FastLED.h:256
@ DOTSTARHD
APA102HD LED chipset alias.
Definition FastLED.h:266
@ SM16716
SM16716 LED chipset.
Definition FastLED.h:260
@ HD108
16-bit variant of HD107, always gamma corrected. No SD (standard definition) option available - all H...
Definition FastLED.h:270

◆ SpiParallelMode

enum class fl::SpiParallelMode : u8
strong

Parallel device execution modes.

Enumerator
AUTO 

Auto-select best mode (default: ISR)

ISR_ASYNC 

ISR-driven async mode.

BITBANG_BLOCKING 

Bit-bang blocking mode.

Definition at line 33 of file config.h.

33 : u8 {
34 AUTO = 0,
35 ISR_ASYNC,
37};
@ BITBANG_BLOCKING
Bit-bang blocking mode.
Definition config.h:36
@ ISR_ASYNC
ISR-driven async mode.
Definition config.h:35

◆ SuperSample

enum class fl::SuperSample
strong
Enumerator
SUPER_SAMPLE_NONE 
SUPER_SAMPLE_2X 
SUPER_SAMPLE_4X 
SUPER_SAMPLE_8X 

Definition at line 4 of file supersample.h.

4 {
5 SUPER_SAMPLE_NONE = 1, // 1x supersampling (no supersampling)
6 SUPER_SAMPLE_2X = 2, // 2x supersampling
7 SUPER_SAMPLE_4X = 4, // 4x supersampling
8 SUPER_SAMPLE_8X = 8 // 8x supersampling
9};

◆ TGradientDirectionCode

enum fl::TGradientDirectionCode

Hue direction for calculating fill gradients.

Since "hue" is a value around a color wheel, there are always two directions to sweep from one hue to another.

Enumerator
FORWARD_HUES 

Hue always goes clockwise around the color wheel.

BACKWARD_HUES 

Hue always goes counter-clockwise around the color wheel.

SHORTEST_HUES 

Hue goes whichever way is shortest.

LONGEST_HUES 

Hue goes whichever way is longest.

Definition at line 34 of file colorutils_misc.h.

34 {
TGradientDirectionCode
Hue direction for calculating fill gradients.
@ SHORTEST_HUES
Hue goes whichever way is shortest.
@ LONGEST_HUES
Hue goes whichever way is longest.
@ FORWARD_HUES
Hue always goes clockwise around the color wheel.
@ BACKWARD_HUES
Hue always goes counter-clockwise around the color wheel.

◆ U8EasingFunction

enum class fl::U8EasingFunction
strong
Enumerator
WAVE_U8_MODE_LINEAR 
WAVE_U8_MODE_SQRT 

Definition at line 26 of file wave_simulation.h.

◆ UCS7604Mode

enum class fl::UCS7604Mode
strong

UCS7604 protocol configuration modes.

Enumerator
UCS7604_MODE_8BIT_800KHZ 
UCS7604_MODE_16BIT_800KHZ 
UCS7604_MODE_16BIT_1600KHZ 

Definition at line 28 of file ucs7604.h.

28 {
31 UCS7604_MODE_16BIT_1600KHZ = 0x9B // not implemented because of timing difference.
32};
@ UCS7604_MODE_8BIT_800KHZ
Definition ucs7604.h:29
@ UCS7604_MODE_16BIT_1600KHZ
Definition ucs7604.h:31
@ UCS7604_MODE_16BIT_800KHZ
Definition ucs7604.h:30

Function Documentation

◆ _isqrt32_start()

FL_OPTIMIZE_FUNCTION constexpr u32 fl::_isqrt32_start ( u32 x,
u32 bit )
inlineconstexpr

Definition at line 41 of file isqrt.h.

41 {
42 return (bit == 0 || bit <= x) ? bit : _isqrt32_start(x, bit >> 2);
43}
FL_OPTIMIZE_FUNCTION constexpr u32 _isqrt32_start(u32 x, u32 bit) FL_NOEXCEPT
Definition isqrt.h:41

References _isqrt32_start(), FL_NOEXCEPT, FL_OPTIMIZE_FUNCTION, and x.

Referenced by _isqrt32_start(), and isqrt32().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ _isqrt32_step()

FL_OPTIMIZE_FUNCTION constexpr u16 fl::_isqrt32_step ( u32 x,
u32 result,
u32 bit )
inlineconstexpr

Definition at line 45 of file isqrt.h.

45 {
46 return bit == 0
47 ? static_cast<u16>(result)
48 : (x >= result + bit)
49 ? _isqrt32_step(x - (result + bit), (result >> 1) + bit, bit >> 2)
50 : _isqrt32_step(x, result >> 1, bit >> 2);
51}
FL_OPTIMIZE_FUNCTION constexpr u16 _isqrt32_step(u32 x, u32 result, u32 bit) FL_NOEXCEPT
Definition isqrt.h:45

References _isqrt32_step(), FL_NOEXCEPT, FL_OPTIMIZE_FUNCTION, and x.

Referenced by _isqrt32_step(), and isqrt32().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ _isqrt64_start()

FL_OPTIMIZE_FUNCTION constexpr u64 fl::_isqrt64_start ( u64 x,
u64 bit )
inlineconstexpr

Definition at line 29 of file isqrt.h.

29 {
30 return (bit == 0 || bit <= x) ? bit : _isqrt64_start(x, bit >> 2);
31}
FL_OPTIMIZE_FUNCTION constexpr u64 _isqrt64_start(u64 x, u64 bit) FL_NOEXCEPT
Definition isqrt.h:29

References _isqrt64_start(), FL_NOEXCEPT, FL_OPTIMIZE_FUNCTION, and x.

Referenced by _isqrt64_start(), and isqrt64().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ _isqrt64_step()

FL_OPTIMIZE_FUNCTION constexpr u32 fl::_isqrt64_step ( u64 x,
u64 result,
u64 bit )
inlineconstexpr

Definition at line 33 of file isqrt.h.

33 {
34 return bit == 0
35 ? static_cast<u32>(result)
36 : (x >= result + bit)
37 ? _isqrt64_step(x - (result + bit), (result >> 1) + bit, bit >> 2)
38 : _isqrt64_step(x, result >> 1, bit >> 2);
39}
FL_OPTIMIZE_FUNCTION constexpr u32 _isqrt64_step(u64 x, u64 result, u64 bit) FL_NOEXCEPT
Definition isqrt.h:33

References _isqrt64_step(), FL_NOEXCEPT, FL_OPTIMIZE_FUNCTION, and x.

Referenced by _isqrt64_step(), and isqrt64().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ abs() [1/3]

int fl::abs ( int x)

Definition at line 34 of file malloc.cpp.hpp.

34 {
35 return ::abs(x);
36 }

References x.

◆ abs() [2/3]

template<typename T>
T fl::abs ( T value)
inlineconstexpr

Definition at line 61 of file math.h.

61 {
62 return value < 0 ? -value : value;
63}
constexpr int type_rank< T >::value

References FL_NOEXCEPT, and type_rank< T >::value.

◆ abs() [3/3]

template<typename T>
enable_if< is_fixed_point< T >::value, T >::type fl::abs ( T x)
inlineconstexpr

Definition at line 525 of file fixed_point.h.

525{ return T::abs(x); }

References FL_NOEXCEPT, and x.

Referenced by almost_equal(), almost_equal(), almost_equal(), fl::audio::detector::MusicalBeat::calculateBeatConfidence(), fl::audio::detector::Vocal::calculateRawConfidence(), fl::audio::detector::DropDetector::calculateSpectralNovelty(), fl::XYPath::calculateSteps(), fl::audio::detector::Percussion::computeConfidences(), fl::audio::detector::Vocal::computePCMTimeDomainFeatures(), fl::audio::detector::Downbeat::detectDownbeat(), fl::third_party::vorbis::draw_line(), fl::gfx::detail::drawLineCore(), fl::audio::detector::Mood::getCategory(), MaxFadeTracker::operator()(), fl::third_party::plm_video_decode_motion_vector(), fl::third_party::vorbis::predict_point(), fl::audio::AutoGain::process(), fl::WaveSimulation2D::seti16(), fl::audio::detector::Pitch::shouldReportPitchChange(), fl::audio::detector::Note::shouldTriggerNoteChange(), CPixelView< CRGB >::size(), traverseGridSegment(), traverseGridSegment16(), traverseGridSegment32(), traverseGridSegmentFloat(), fl::audio::detector::TempoAnalyzer::update(), fl::detail::HampelFilterImpl< T, N >::update(), fl::detail::OneEuroFilterImpl< T >::update(), fl::audio::detector::TempoAnalyzer::updateHypotheses(), fl::audio::AutoGain::updatePIController(), and fl::audio::detector::Beat::updateTempo().

+ Here is the caller graph for this function:

◆ acos() [1/3]

double fl::acos ( double value)
inline

Definition at line 379 of file math.h.

379{ return acos_impl_double(value); }
double acos_impl_double(double value)
Definition math.cpp.hpp:579

References acos_impl_double(), FL_NOEXCEPT, and type_rank< T >::value.

+ Here is the call graph for this function:

◆ acos() [2/3]

template<typename T>
enable_if< is_integral< T >::value, float >::type fl::acos ( T value)
inline

Definition at line 381 of file math.h.

381{ return acos_impl_float(static_cast<float>(value)); }
float acos_impl_float(float value)
Definition math.cpp.hpp:570

References acos_impl_float(), FL_NOEXCEPT, and type_rank< T >::value.

+ Here is the call graph for this function:

◆ acos() [3/3]

template<typename T>
enable_if< is_fixed_point< T >::value, T >::type fl::acos ( T x)
inline

Definition at line 609 of file fixed_point.h.

609{ return T::acos(x); }

References FL_NOEXCEPT, and x.

◆ acos_impl_double()

double fl::acos_impl_double ( double value)

Definition at line 579 of file math.cpp.hpp.

579 {
580#if FL_MATH_USE_LIBM
581 return ::acos(value);
582#else
583 const double kPiHalf = 1.57079632679489661923;
584 return kPiHalf - asin_impl_double(value);
585#endif
586}
double asin_impl_double(double value)
Definition math.cpp.hpp:557

References asin_impl_double(), and type_rank< T >::value.

Referenced by acos().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ acos_impl_float()

float fl::acos_impl_float ( float value)

Definition at line 570 of file math.cpp.hpp.

570 {
571#if FL_MATH_USE_LIBM
572 return ::acosf(value);
573#else
574 const float kPiHalf = 1.57079632679489661923f;
575 return kPiHalf - asin_impl_float(value);
576#endif
577}
float asin_impl_float(float value)
Definition math.cpp.hpp:544

References asin_impl_float(), and type_rank< T >::value.

Referenced by acos(), and acosf().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ acosf()

float fl::acosf ( float value)
inline

Definition at line 378 of file math.h.

378{ return acos_impl_float(value); }

References acos_impl_float(), FL_NOEXCEPT, and type_rank< T >::value.

+ Here is the call graph for this function:

◆ add()

float fl::add ( float & a,
float & b )
inline

Definition at line 153 of file engine_core.h.

153{ return a + b; }

Referenced by fl::Engine::add().

+ Here is the caller graph for this function:

◆ add_fp()

FASTLED_FORCE_INLINE fl::i32 fl::add_fp ( fl::i32 a,
fl::i32 b )

Definition at line 161 of file render_value_fp.h.

161 {
162 return a + b;
163}

References FASTLED_FORCE_INLINE.

Referenced by fl::SpiralMatrix4_FP::draw().

+ Here is the caller graph for this function:

◆ aligned_alloc()

void * fl::aligned_alloc ( fl::size_t alignment,
fl::size_t size )

Definition at line 21 of file cstdlib.cpp.hpp.

21 {
22#if defined(FL_IS_AVR) || defined(FL_IS_ESP8266) || defined(FL_IS_ARM) || defined(FL_IS_APOLLO3)
23 // Many bare-metal toolchains (newlib-nano on STM32, nRF52, SAMD, RP2040,
24 // Teensy, etc.) ship an aligned_alloc that internally calls
25 // posix_memalign, which doesn't exist on bare-metal and causes an
26 // "undefined reference to `posix_memalign'" link error.
27 // Fall back to plain malloc — sufficient for the alignments FastLED
28 // actually requests on these constrained targets.
29 (void)alignment;
30 return ::malloc(size);
31#elif defined(FL_IS_WIN)
32 return ::_aligned_malloc(size, alignment);
33#elif defined(FL_IS_ESP32) && !ESP_IDF_VERSION_4_OR_HIGHER
34 // ESP-IDF 3.x toolchain (GCC 5.2 / newlib) does not provide
35 // ::aligned_alloc. Fall back to plain malloc.
36 (void)alignment;
37 return ::malloc(size);
38#else
39 fl::size_t aligned_size = (size + alignment - 1) & ~(alignment - 1);
40 return ::aligned_alloc(alignment, aligned_size);
41#endif
42}
__SIZE_TYPE__ size_t
Definition s16x16x4.h:16

◆ aligned_free()

void fl::aligned_free ( void * ptr)

Definition at line 44 of file cstdlib.cpp.hpp.

44 {
45#if defined(FL_IS_AVR) || defined(FL_IS_ESP8266) || defined(FL_IS_ARM) || defined(FL_IS_APOLLO3)
46 ::free(ptr);
47#elif defined(FL_IS_WIN)
48 ::_aligned_free(ptr);
49#else
50 ::free(ptr);
51#endif
52}
void free(void *ptr)

References free().

+ Here is the call graph for this function:

◆ allocate_shared()

template<typename T, typename A, typename... Args>
shared_ptr< T > fl::allocate_shared ( const A & alloc,
Args &&... args )

Definition at line 449 of file shared_ptr.h.

449 {
450 // For now, just delegate to make_shared
451 // Full allocator support would require more complex control block management
453}
constexpr T && forward(typename remove_reference< T >::type &t) FL_NOEXCEPT
Definition s16x16x4.h:234
shared_ptr< T > make_shared(Args &&... args) FL_NOEXCEPT
Definition shared_ptr.h:414
corkscrew_args args
Definition old.h:149

◆ almost_equal() [1/3]

bool fl::almost_equal ( double a,
double b )
inline

Definition at line 98 of file math.h.

98 {
99 return fl::abs(a - b) < FL_EPSILON_F;
100}
#define FL_EPSILON_F
Definition math.h:38
constexpr enable_if< is_fixed_point< T >::value, T >::type abs(T x) FL_NOEXCEPT

References abs(), FL_EPSILON_F, and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ almost_equal() [2/3]

bool fl::almost_equal ( float a,
float b )
inline

Definition at line 94 of file math.h.

94 {
95 return fl::abs(a - b) < FL_EPSILON_F;
96}

References abs(), FL_EPSILON_F, and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ almost_equal() [3/3]

template<typename T, typename U>
bool fl::almost_equal ( T a,
T b,
U tolerance )
inlineconstexpr

Definition at line 90 of file math.h.

90 {
91 return fl::abs(a - b) < tolerance;
92}

References abs(), and FL_NOEXCEPT.

Referenced by fl::Corkscrew::at_splat_extrapolate(), FL_DISABLE_WARNING(), fl::istream_real::operator>>(), fl::istream_real::operator>>(), and fl::UISlider::value_normalized().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ analogRead()

u16 fl::analogRead ( int pin)

Read analog value from pin.

Parameters
pinPin number (platform-specific numbering)
Returns
Analog value (0-1023 for 10-bit ADC, 0-4095 for 12-bit ADC)

Definition at line 59 of file pin.cpp.hpp.

59 {
60 return platforms::analogRead(pin);
61}

Referenced by fl::PotentiometerLowLevel::read().

+ Here is the caller graph for this function:

◆ analogWrite()

void fl::analogWrite ( int pin,
u16 val )

Write analog value to pin (PWM)

Parameters
pinPin number (platform-specific numbering)
valPWM duty cycle (0-255 typical, platform-specific maximum)

Definition at line 227 of file pin.cpp.hpp.

227 {
229
231 // Route to ISR duty cycle update (scale 8-bit val to duty)
232 u8 duty = (val > 255) ? 255 : static_cast<u8>(val);
234 ch->duty_cycle = duty;
235 ch->high_ticks = (static_cast<u32>(ch->period_ticks) * duty) / 256;
236 return;
237 }
238
239 if (ch && ch->backend == pwm_state::PwmBackend::Native) {
240 // Native backend — forward to platform (frequency already configured)
241 platforms::analogWrite(pin, val);
242 return;
243 }
244
245 // No setPwmFrequency called — forward to platform as before
246 platforms::analogWrite(pin, val);
247}
RAII helper for critical sections (interrupt disable/enable) Automatically disables interrupts on con...
PwmPinState * findByPin(int pin)
Definition pin.cpp.hpp:141

References fl::pwm_state::PwmPinState::backend, fl::pwm_state::PwmPinState::duty_cycle, fl::pwm_state::findByPin(), fl::pwm_state::PwmPinState::high_ticks, fl::pwm_state::IsrSoftware, fl::pwm_state::Native, and fl::pwm_state::PwmPinState::period_ticks.

Referenced by initPanels(), setPanelHigh(), and setPanelLow().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ analogWrite16()

void fl::analogWrite16 ( int pin,
u16 val )
inline

Alias for setPwm16 - Set PWM duty cycle with 16-bit resolution.

Parameters
pinPin number (platform-specific numbering)
valPWM duty cycle (0-65535, platform-specific maximum)

Definition at line 104 of file pin.h.

104 {
105 setPwm16(pin, val);
106}
void setPwm16(int pin, u16 val)
Set PWM duty cycle with 16-bit resolution.
Definition pin.cpp.hpp:249

References setPwm16().

+ Here is the call graph for this function:

◆ append_u64_decimal()

static void fl::append_u64_decimal ( fl::string & out,
fl::u64 value )
static

Definition at line 431 of file ieee754_string.cpp.hpp.

431 {
432 char buf[24];
433 const int n = fl::utoa64(value, buf, 10);
434 for (int i = 0; i < n; ++i) {
435 out += fl::string(1, buf[i]);
436 }
437}
int utoa64(u64 value, char *sp, int radix)
Convert unsigned 64-bit integer to string buffer in given radix.

References FL_NOEXCEPT, type_rank< T >::value, and utoa64().

Referenced by ieee754_format_decimal().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ applyGamma_video() [1/3]

CRGB fl::applyGamma_video ( const CRGB & orig,
float gamma )

Definition at line 1312 of file colorutils.cpp.hpp.

1312 {
1313 CRGB adj;
1314 adj.r = applyGamma_video(orig.r, gamma);
1315 adj.g = applyGamma_video(orig.g, gamma);
1316 adj.b = applyGamma_video(orig.b, gamma);
1317 return adj;
1318}
fl::u8 applyGamma_video(fl::u8 brightness, float gamma)
constexpr u32 gamma(float g) FL_NOEXCEPT
Definition gamma_lut.h:36
Representation of an 8-bit RGB pixel (Red, Green, Blue)
Definition crgb.h:38

References applyGamma_video(), and gamma().

+ Here is the call graph for this function:

◆ applyGamma_video() [2/3]

CRGB fl::applyGamma_video ( const CRGB & orig,
float gammaR,
float gammaG,
float gammaB )

Definition at line 1320 of file colorutils.cpp.hpp.

1321 {
1322 CRGB adj;
1323 adj.r = applyGamma_video(orig.r, gammaR);
1324 adj.g = applyGamma_video(orig.g, gammaG);
1325 adj.b = applyGamma_video(orig.b, gammaB);
1326 return adj;
1327}

References applyGamma_video().

+ Here is the call graph for this function:

◆ applyGamma_video() [3/3]

fl::u8 fl::applyGamma_video ( fl::u8 brightness,
float gamma )

Definition at line 1290 of file colorutils.cpp.hpp.

1290 {
1291 // Fixed-point path (s16x16) avoids pulling `__ieee754_pow` (libm,
1292 // ~2.7 KB) into release builds — see #2886 / #2910. Matches the
1293 // gamma8 LUT generator's approach in src/fl/math/ease.cpp.hpp.
1294 if (brightness == 0) {
1295 return 0;
1296 }
1297 constexpr fl::s16x16 inv_255_fp(1.0f / 255.0f);
1298 const fl::s16x16 gamma_fp(gamma);
1299 const fl::s16x16 x = static_cast<i32>(brightness) * inv_255_fp; // [0, 1]
1300 const fl::s16x16 r = fl::s16x16::pow(x, gamma_fp); // (0, 1]
1301 // Scale to u8 [0, 255] with round-half-up:
1302 // result = ((u32)raw * 255 + 0x8000) >> 16
1303 const fl::u32 scaled =
1304 (static_cast<fl::u32>(r.raw()) * 255u + 0x8000u) >> 16;
1305 fl::u8 result = static_cast<fl::u8>(scaled > 255u ? 255u : scaled);
1306 if (result == 0) {
1307 result = 1; // never gamma-adjust a positive number down to zero
1308 }
1309 return result;
1310}
fl::UISlider brightness("Brightness", BRIGHTNESS, 0, 255)
int x
Definition simple.h:92
constexpr i32 raw() const FL_NOEXCEPT
Definition s16x16.h:60
static FASTLED_FORCE_INLINE s16x16 pow(s16x16 base, s16x16 exp) FL_NOEXCEPT
Definition s16x16.h:235

References brightness, gamma(), fl::s16x16::pow(), fl::s16x16::raw(), and x.

Referenced by applyGamma_video(), applyGamma_video(), FL_DISABLE_WARNING(), napplyGamma_video(), napplyGamma_video(), napplyGamma_video(), and napplyGamma_video().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ as_bytes()

template<typename T, fl::size Extent>
span< const fl::u8,(Extent==dynamic_extent) ? dynamic_extent :(Extent *sizeof(T))> fl::as_bytes ( const span< T, Extent > & s)

Definition at line 553 of file span.h.

553 {
554 if (Extent == dynamic_extent) {
557 s.size_bytes()
558 );
559 } else {
560 return span<const fl::u8, Extent * sizeof(T)>(
562 );
563 }
564}
const T * data() const FL_NOEXCEPT
Definition span.h:461
constexpr fl::size size_bytes() const FL_NOEXCEPT
Definition span.h:459
constexpr fl::size dynamic_extent
Definition span.h:26
To bit_cast(const From &from) FL_NOEXCEPT
Definition bit_cast.h:48

References as_bytes(), bit_cast(), dynamic_extent, and FL_NOEXCEPT.

Referenced by as_bytes().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ as_writable_bytes()

template<typename T, fl::size Extent>
span< fl::u8,(Extent==dynamic_extent) ? dynamic_extent :(Extent *sizeof(T))> fl::as_writable_bytes ( span< T, Extent > & s)

Definition at line 569 of file span.h.

569 {
570 if (Extent == dynamic_extent) {
573 s.size_bytes()
574 );
575 } else {
576 return span<fl::u8, Extent * sizeof(T)>(
578 );
579 }
580}

References as_writable_bytes(), bit_cast(), dynamic_extent, and FL_NOEXCEPT.

Referenced by as_writable_bytes().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ asin() [1/3]

double fl::asin ( double value)
inline

Definition at line 373 of file math.h.

373{ return asin_impl_double(value); }

References asin_impl_double(), FL_NOEXCEPT, and type_rank< T >::value.

+ Here is the call graph for this function:

◆ asin() [2/3]

template<typename T>
enable_if< is_integral< T >::value, float >::type fl::asin ( T value)
inline

Definition at line 375 of file math.h.

375{ return asin_impl_float(static_cast<float>(value)); }

References asin_impl_float(), FL_NOEXCEPT, and type_rank< T >::value.

+ Here is the call graph for this function:

◆ asin() [3/3]

template<typename T>
enable_if< is_fixed_point< T >::value, T >::type fl::asin ( T x)
inline

Definition at line 604 of file fixed_point.h.

604{ return T::asin(x); }

References FL_NOEXCEPT, and x.

◆ asin_impl_double()

double fl::asin_impl_double ( double value)

Definition at line 557 of file math.cpp.hpp.

557 {
558#if FL_MATH_USE_LIBM
559 return ::asin(value);
560#else
561 const double kPiHalf = 1.57079632679489661923;
562 if (value >= 1.0) return kPiHalf;
563 if (value <= -1.0) return -kPiHalf;
564 const double denom = detail::sqrt_newton_<double>(1.0 - value * value);
565 if (denom == 0.0) return value > 0.0 ? kPiHalf : -kPiHalf;
566 return detail::atan_full_<double>(value / denom);
567#endif
568}
F atan_full_(F u) FL_NOEXCEPT
Definition math.cpp.hpp:467
F sqrt_newton_(F value) FL_NOEXCEPT
Definition math.cpp.hpp:151

References fl::detail::atan_full_(), fl::detail::sqrt_newton_(), and type_rank< T >::value.

Referenced by acos_impl_double(), and asin().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ asin_impl_float()

float fl::asin_impl_float ( float value)

Definition at line 544 of file math.cpp.hpp.

544 {
545#if FL_MATH_USE_LIBM
546 return ::asinf(value);
547#else
548 const float kPiHalf = 1.57079632679489661923f;
549 if (value >= 1.0f) return kPiHalf;
550 if (value <= -1.0f) return -kPiHalf;
551 const float denom = detail::sqrt_newton_<float>(1.0f - value * value);
552 if (denom == 0.0f) return value > 0.0f ? kPiHalf : -kPiHalf;
553 return detail::atan_full_<float>(value / denom);
554#endif
555}

References fl::detail::atan_full_(), fl::detail::sqrt_newton_(), and type_rank< T >::value.

Referenced by acos_impl_float(), asin(), and asinf().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ asinf()

float fl::asinf ( float value)
inline

Definition at line 372 of file math.h.

372{ return asin_impl_float(value); }

References asin_impl_float(), FL_NOEXCEPT, and type_rank< T >::value.

+ Here is the call graph for this function:

◆ asset()

asset_ref fl::asset ( const char * path)
constexpr

Construct an asset handle from a relative sketch path at runtime.

For compile-time rejection of .. paths, use the FL_ASSET() macro instead — it wraps this function with FL_STATIC_ASSERT.

This overload accepts any const char* (including runtime-computed pointers) and, for safety, returns an empty handle if the path contains a .. segment. Runtime resolution also refuses to walk past data/, so this is defense-in-depth rather than the primary gate.

Definition at line 128 of file asset.h.

128 {
130 ? asset_ref()
131 : asset_ref(path, asset_detail::clen(path));
132}
Opaque handle to a sketch-local asset.
Definition asset.h:84
constexpr bool path_has_parent_segment(const char *p) FL_NOEXCEPT
Compile-time check: returns true if the string contains a ".." segment.
Definition asset.h:73

References fl::asset_detail::clen(), FL_NOEXCEPT, and fl::asset_detail::path_has_parent_segment().

Referenced by fl::UIAudio::UIAudio().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ assume_aligned() [1/2]

template<fl::size_t N, typename T>
const T * fl::assume_aligned ( const T * ptr)
inline

Definition at line 142 of file align.h.

142 {
143#if defined(FL_IS_AVR)
144 return ptr;
145#elif defined(FL_IS_CLANG) || defined(FL_IS_GCC)
146 return static_cast<const T *>(__builtin_assume_aligned(ptr, N));
147#elif defined(FL_IS_WIN_MSVC)
148 __assume(((const char *)ptr - (const char *)0) % N == 0);
149 return ptr;
150#else
151 return ptr;
152#endif
153}

References FL_NOEXCEPT.

◆ assume_aligned() [2/2]

template<fl::size_t N, typename T>
T * fl::assume_aligned ( T * ptr)
inline

Definition at line 126 of file align.h.

126 {
127#if defined(FL_IS_AVR)
128 return ptr;
129#elif defined(FL_IS_CLANG) || defined(FL_IS_GCC)
130 return static_cast<T *>(__builtin_assume_aligned(ptr, N));
131#elif defined(FL_IS_WIN_MSVC)
132 // MSVC: __assume tells the optimizer the pointer is N-byte aligned.
133 // No __builtin_assume_aligned equivalent exists on MSVC.
134 __assume(((char *)ptr - (char *)0) % N == 0);
135 return ptr;
136#else
137 return ptr;
138#endif
139}

References FL_NOEXCEPT.

Referenced by fl::aligned_ptr< T, N >::aligned_ptr(), and fl::aligned_ptr< T, N >::get().

+ Here is the caller graph for this function:

◆ async_log_service()

void fl::async_log_service ( )

Definition at line 203 of file async_logger.cpp.hpp.

203 {
204 // Get background flush state
206
207 // Quick check - return immediately if no flush needed
208 if (!state.mNeedsFlush) {
209 return;
210 }
211
212 // Clear flag
213 state.mNeedsFlush = false;
214
215 // Flush all instantiated async loggers (uses ActiveLoggerRegistry)
216 // Only flushes loggers that have been accessed via template functions
217 fl::size n = state.mMessagesPerTick;
218 detail::ActiveLoggerRegistry::instance().forEach([n](AsyncLogger& logger) {
219 logger.flushN(n);
220 });
221}
TestState state
static T & instance() FL_NOEXCEPT
Definition singleton.h:41
static ActiveLoggerRegistry & instance()

References fl::AsyncLogger::flushN(), fl::detail::ActiveLoggerRegistry::forEach(), fl::detail::ActiveLoggerRegistry::instance(), fl::Singleton< T, N >::instance(), and state.

+ Here is the call graph for this function:

◆ atan() [1/3]

double fl::atan ( double value)
inline

Definition at line 385 of file math.h.

385{ return atan_impl_double(value); }
double atan_impl_double(double value)
Definition math.cpp.hpp:536

References atan_impl_double(), FL_NOEXCEPT, and type_rank< T >::value.

+ Here is the call graph for this function:

◆ atan() [2/3]

template<typename T>
enable_if< is_integral< T >::value, float >::type fl::atan ( T value)
inline

Definition at line 387 of file math.h.

387{ return atan_impl_float(static_cast<float>(value)); }
float atan_impl_float(float value)
Definition math.cpp.hpp:528

References atan_impl_float(), FL_NOEXCEPT, and type_rank< T >::value.

+ Here is the call graph for this function:

◆ atan() [3/3]

template<typename T>
enable_if< is_fixed_point< T >::value, T >::type fl::atan ( T x)
inline

Definition at line 594 of file fixed_point.h.

594{ return T::atan(x); }

References FL_NOEXCEPT, and x.

◆ atan2() [1/3]

double fl::atan2 ( double y,
double x )
inline

Definition at line 391 of file math.h.

391{ return atan2_impl_double(y, x); }
double atan2_impl_double(double y, double x)
Definition math.cpp.hpp:504

References atan2_impl_double(), FL_NOEXCEPT, x, and y.

+ Here is the call graph for this function:

◆ atan2() [2/3]

template<typename T>
enable_if< is_fixed_point< T >::value, T >::type fl::atan2 ( T y,
T x )
inline

Definition at line 599 of file fixed_point.h.

599{ return T::atan2(y, x); }

References FL_NOEXCEPT, x, and y.

◆ atan2() [3/3]

template<typename T>
enable_if< is_integral< T >::value, float >::type fl::atan2 ( T y,
T x )
inline

Definition at line 393 of file math.h.

393{ return atan2_impl_float(static_cast<float>(y), static_cast<float>(x)); }
float atan2_impl_float(float y, float x)
Definition math.cpp.hpp:496

References atan2_impl_float(), FL_NOEXCEPT, x, and y.

+ Here is the call graph for this function:

◆ atan2_impl_double()

double fl::atan2_impl_double ( double y,
double x )

Definition at line 504 of file math.cpp.hpp.

504 {
505#if FL_MATH_USE_LIBM
506 return ::atan2(y, x);
507#else
509#endif
510}
F atan2_full_(F y, F x) FL_NOEXCEPT
Definition math.cpp.hpp:479

References fl::detail::atan2_full_(), x, and y.

Referenced by atan2().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ atan2_impl_float()

float fl::atan2_impl_float ( float y,
float x )

Definition at line 496 of file math.cpp.hpp.

496 {
497#if FL_MATH_USE_LIBM
498 return ::atan2f(y, x);
499#else
501#endif
502}

References fl::detail::atan2_full_(), x, and y.

Referenced by atan2(), and atan2f().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ atan2f()

float fl::atan2f ( float y,
float x )
inline

Definition at line 390 of file math.h.

390{ return atan2_impl_float(y, x); }

References atan2_impl_float(), FL_NOEXCEPT, x, and y.

Referenced by render_polar_lookup_table().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ atan_impl_double()

double fl::atan_impl_double ( double value)

Definition at line 536 of file math.cpp.hpp.

536 {
537#if FL_MATH_USE_LIBM
538 return ::atan(value);
539#else
541#endif
542}

References fl::detail::atan_full_(), and type_rank< T >::value.

Referenced by atan().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ atan_impl_float()

float fl::atan_impl_float ( float value)

Definition at line 528 of file math.cpp.hpp.

528 {
529#if FL_MATH_USE_LIBM
530 return ::atanf(value);
531#else
533#endif
534}

References fl::detail::atan_full_(), and type_rank< T >::value.

Referenced by atan(), and atanf().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ atanf()

float fl::atanf ( float value)
inline

Definition at line 384 of file math.h.

384{ return atan_impl_float(value); }

References atan_impl_float(), FL_NOEXCEPT, and type_rank< T >::value.

+ Here is the call graph for this function:

◆ atoi()

int fl::atoi ( const char * str)

Definition at line 230 of file cstdlib.cpp.hpp.

230 {
231 return static_cast<int>(strtol(str, nullptr, 10));
232}
long strtol(const char *str, char **endptr, int base)

References strtol().

+ Here is the call graph for this function:

◆ atol()

long fl::atol ( const char * str)

Definition at line 234 of file cstdlib.cpp.hpp.

234 {
235 return strtol(str, nullptr, 10);
236}

References strtol().

+ Here is the call graph for this function:

◆ available()

int fl::available ( )

Definition at line 111 of file cstdio.cpp.hpp.

111 {
112#ifdef FASTLED_TESTING
113 // Check for injected handler first
114 if (get_available_handler()) {
115 return get_available_handler()();
116 }
117#endif
118
119 // Delegate to platform implementation
120 return platforms::available();
121}

Referenced by fl::SerialPort::available(), fl::SerialReader::available(), fl::third_party::vorbis::compute_codewords(), createSerialRequestSource(), fl::istream_real::eof(), fl::net::http::ChunkedReader::feed(), fl::istream_real::get(), fl::istream_real::getline(), fl::third_party::gif__jump_data(), fl::third_party::nsgif__decode_complex(), fl::istream_real::operator>>(), fl::istream_real::peek(), fl::istream_real::readLine(), fl::istream_real::readToken(), and fl::istream_real::skipWhitespace().

+ Here is the caller graph for this function:

◆ back_inserter()

template<typename Container>
back_insert_iterator< Container > fl::back_inserter ( Container & c)

Helper function to create a back_insert_iterator.

This function template creates a back_insert_iterator for the given container, providing a more concise syntax than explicitly constructing the iterator.

Parameters
cReference to the container to insert into (must have push_back() method)
Returns
A back_insert_iterator that will insert elements into the container

Example:

auto it = fl::back_inserter(vec);
*it = 42; // vec now contains [42]
back_insert_iterator< Container > back_inserter(Container &c) FL_NOEXCEPT
Helper function to create a back_insert_iterator.
Definition iterator.h:139
Examples
/home/runner/work/FastLED/FastLED/src/fl/chipsets/encoders/output_sink.h.

Definition at line 139 of file iterator.h.

139 {
141}
Back insert iterator - an output iterator that inserts elements at the end of a container.
Definition iterator.h:75

References FL_NOEXCEPT.

Referenced by fl::json::as_impl(), buildExpectedUCS7604(), fl::UCS7604ControllerT< DATA_PIN, RGB_ORDER, fl::UCS7604Mode::UCS7604_MODE_8BIT_800KHZ, fl::TIMING_UCS7604_800KHZ, CLOCKLESS_CONTROLLER >::showPixels(), fl::PixelIterator::writeAPA102(), fl::PixelIterator::writeHD108(), fl::PixelIterator::writeLPD6803(), fl::PixelIterator::writeLPD8806(), fl::PixelIterator::writeP9813(), fl::PixelIterator::writeSK9822(), fl::PixelIterator::writeSM16716(), fl::anonymous_namespace{channel.cpp.hpp}::writeUCS7604(), fl::PixelIterator::writeWS2801(), fl::PixelIterator::writeWS2803(), and fl::PixelIterator::writeWS2812().

+ Here is the caller graph for this function:

◆ base64_decode()

fl::vector< fl::u8 > fl::base64_decode ( const fl::string & encoded)

Definition at line 62 of file base64.cpp.hpp.

62 {
64 if (encoded.empty()) return out;
65
66 fl::size len = encoded.size();
67
68 // Validate length is multiple of 4
69 if (len % 4 != 0) return out;
70
71 fl::size out_len = (len / 4) * 3;
72 if (len >= 1 && encoded[len - 1] == '=') out_len--;
73 if (len >= 2 && encoded[len - 2] == '=') out_len--;
74 out.reserve(out_len);
75
76 for (fl::size i = 0; i < len; i += 4) {
77 int a = base64_char_index(encoded[i]);
78 int b = base64_char_index(encoded[i + 1]);
79 int c = (encoded[i + 2] == '=') ? 0 : base64_char_index(encoded[i + 2]);
80 int d = (encoded[i + 3] == '=') ? 0 : base64_char_index(encoded[i + 3]);
81
82 if (a < 0 || b < 0 || c < 0 || d < 0) {
83 return fl::vector<fl::u8>(); // invalid character
84 }
85
86 fl::u32 triple = (fl::u32(a) << 18) | (fl::u32(b) << 12) |
87 (fl::u32(c) << 6) | fl::u32(d);
88
89 out.push_back((triple >> 16) & 0xFF);
90 if (encoded[i + 2] != '=') {
91 out.push_back((triple >> 8) & 0xFF);
92 }
93 if (encoded[i + 3] != '=') {
94 out.push_back(triple & 0xFF);
95 }
96 }
97
98 return out;
99}
bool empty() const FL_NOEXCEPT
fl::size size() const FL_NOEXCEPT
void reserve(fl::size n) FL_NOEXCEPT
Definition vector.h:591
void push_back(const T &value) FL_NOEXCEPT
Definition vector.h:624

References fl::basic_string::empty(), fl::vector< T >::push_back(), fl::vector< T >::reserve(), and fl::basic_string::size().

Referenced by fl::detail::JsonToType< fl::vector< fl::u8 >, void >::convert().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ base64_encode()

fl::string fl::base64_encode ( fl::span< const fl::u8 > data)

Definition at line 22 of file base64.cpp.hpp.

22 {
23 fl::string out;
24 if (data.empty()) return out;
25
26 fl::size encoded_len = 4 * ((data.size() + 2) / 3);
27 out.reserve(encoded_len);
28
29 fl::size i = 0;
30 fl::size len = data.size();
31
32 while (i + 2 < len) {
33 fl::u32 triple = (fl::u32(data[i]) << 16) |
34 (fl::u32(data[i + 1]) << 8) |
35 fl::u32(data[i + 2]);
36 out += kBase64Chars[(triple >> 18) & 0x3F];
37 out += kBase64Chars[(triple >> 12) & 0x3F];
38 out += kBase64Chars[(triple >> 6) & 0x3F];
39 out += kBase64Chars[triple & 0x3F];
40 i += 3;
41 }
42
43 // Handle remaining bytes
44 if (i < len) {
45 fl::u32 triple = fl::u32(data[i]) << 16;
46 if (i + 1 < len) {
47 triple |= fl::u32(data[i + 1]) << 8;
48 }
49 out += kBase64Chars[(triple >> 18) & 0x3F];
50 out += kBase64Chars[(triple >> 12) & 0x3F];
51 if (i + 1 < len) {
52 out += kBase64Chars[(triple >> 6) & 0x3F];
53 } else {
54 out += '=';
55 }
56 out += '=';
57 }
58
59 return out;
60}
void reserve(fl::size newCapacity) FL_NOEXCEPT
constexpr bool empty() const FL_NOEXCEPT
Definition span.h:510
constexpr fl::size size() const FL_NOEXCEPT
Definition span.h:458

References fl::span< T, Extent >::empty(), fl::basic_string::reserve(), and fl::span< T, Extent >::size().

Referenced by fl::detail::TypeToJson< fl::vector< fl::u8 > >::convert().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ beat16()

LIB8STATIC u16 fl::beat16 ( accum88 beats_per_minute,
u32 timebase = 0 )

Generates a 16-bit "sawtooth" wave at a given BPM.

Parameters
beats_per_minutethe frequency of the wave, in decimal
timebasethe time offset of the wave from the millis() timer

Definition at line 41 of file beat.h.

41 {
42 // Convert simple 8-bit BPM's to full Q8.8 accum88's if needed
43 if (beats_per_minute < 256)
44 beats_per_minute <<= 8;
45 return beat88(beats_per_minute, timebase);
46}
LIB8STATIC u16 beat88(accum88 beats_per_minute_88, u32 timebase=0) FL_NOEXCEPT
Generates a 16-bit "sawtooth" wave at a given BPM, with BPM specified in Q8.8 fixed-point format.
Definition beat.h:26

References beat88(), FL_NOEXCEPT, and LIB8STATIC.

Referenced by beat8(), beatsin16(), and fl::Pacifica::draw().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ beat8()

LIB8STATIC u8 fl::beat8 ( accum88 beats_per_minute,
u32 timebase = 0 )

Generates an 8-bit "sawtooth" wave at a given BPM.

Parameters
beats_per_minutethe frequency of the wave, in decimal
timebasethe time offset of the wave from the millis() timer

Definition at line 51 of file beat.h.

51 {
52 return beat16(beats_per_minute, timebase) >> 8;
53}
LIB8STATIC u16 beat16(accum88 beats_per_minute, u32 timebase=0) FL_NOEXCEPT
Generates a 16-bit "sawtooth" wave at a given BPM.
Definition beat.h:41

References beat16(), FL_NOEXCEPT, and LIB8STATIC.

Referenced by beatsin8(), and fl::Pacifica::pacifica_add_whitecaps().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ beat88()

LIB8STATIC u16 fl::beat88 ( accum88 beats_per_minute_88,
u32 timebase = 0 )

Generates a 16-bit "sawtooth" wave at a given BPM, with BPM specified in Q8.8 fixed-point format.

Parameters
beats_per_minute_88the frequency of the wave, in Q8.8 format
timebasethe time offset of the wave from the millis() timer
Warning
The BPM parameter MUST be provided in Q8.8 format! E.g. for 120 BPM it would be 120*256 = 30720. If you just want to specify "120", use beat16() or beat8().

Definition at line 26 of file beat.h.

26 {
27 // BPM is 'beats per minute', or 'beats per 60000ms'.
28 // To avoid using the (slower) division operator, we
29 // want to convert 'beats per 60000ms' to 'beats per 65536ms',
30 // and then use a simple, fast bit-shift to divide by 65536.
31 //
32 // The ratio 65536:60000 is 279.620266667:256; we'll call it 280:256.
33 // The conversion is accurate to about 0.05%, more or less,
34 // e.g. if you ask for "120 BPM", you'll get about "119.93".
35 return (((fl::millis()) - timebase) * beats_per_minute_88 * 280) >> 16;
36}
fl::u32 millis()
Universal millisecond timer - returns milliseconds since system startup.

References FL_NOEXCEPT, LIB8STATIC, and millis().

Referenced by beat16(), and beatsin88().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ beatsin16()

LIB8STATIC u16 fl::beatsin16 ( accum88 beats_per_minute,
u16 lowest = 0,
u16 highest = 65535,
u32 timebase = 0,
u16 phase_offset = 0 )

Generates a 16-bit sine wave at a given BPM that oscillates within a given range.

Parameters
beats_per_minutethe frequency of the wave, in decimal
lowestthe lowest output value of the sine wave
highestthe highest output value of the sine wave
timebasethe time offset of the wave from the millis() timer
phase_offsetphase offset of the wave from the current position

Definition at line 84 of file beat.h.

86 {
87 u16 beat = beat16(beats_per_minute, timebase);
88 u16 beatsin = (sin16(beat + phase_offset) + 32768);
89 u16 rangewidth = highest - lowest;
90 u16 scaledbeat = scale16(beatsin, rangewidth);
91 u16 result = lowest + scaledbeat;
92 if (result > highest) {
93 result = highest;
94 }
95 return result;
96}

References beat16(), FL_NOEXCEPT, and LIB8STATIC.

Referenced by fl::Pacifica::draw(), fl::DemoReel100::juggle(), and fl::DemoReel100::sinelon().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ beatsin8()

LIB8STATIC u8 fl::beatsin8 ( accum88 beats_per_minute,
u8 lowest = 0,
u8 highest = 255,
u32 timebase = 0,
u8 phase_offset = 0 )

Generates an 8-bit sine wave at a given BPM that oscillates within a given range.

Parameters
beats_per_minutethe frequency of the wave, in decimal
lowestthe lowest output value of the sine wave
highestthe highest output value of the sine wave
timebasethe time offset of the wave from the millis() timer
phase_offsetphase offset of the wave from the current position

Definition at line 105 of file beat.h.

107 {
108 u8 beat = beat8(beats_per_minute, timebase);
109 u8 beatsin = sin8(beat + phase_offset);
110 u8 rangewidth = highest - lowest;
111 u8 scaledbeat = scale8(beatsin, rangewidth);
112 u8 result = lowest + scaledbeat;
113 if (result > highest) {
114 result = highest;
115 }
116 return result;
117}
LIB8STATIC u8 beat8(accum88 beats_per_minute, u32 timebase=0) FL_NOEXCEPT
Generates an 8-bit "sawtooth" wave at a given BPM.
Definition beat.h:51

References beat8(), FL_NOEXCEPT, and LIB8STATIC.

Referenced by fl::DemoReel100::bpm(), fl::Pacifica::draw(), and fl::Pacifica::pacifica_add_whitecaps().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ beatsin88()

LIB8STATIC u16 fl::beatsin88 ( accum88 beats_per_minute_88,
u16 lowest = 0,
u16 highest = 65535,
u32 timebase = 0,
u16 phase_offset = 0 )

Generates a 16-bit sine wave at a given BPM that oscillates within a given range.

Parameters
beats_per_minute_88the frequency of the wave, in Q8.8 format
lowestthe lowest output value of the sine wave
highestthe highest output value of the sine wave
timebasethe time offset of the wave from the millis() timer
phase_offsetphase offset of the wave from the current position
Warning
The BPM parameter MUST be provided in Q8.8 format!

Definition at line 63 of file beat.h.

65 {
66 u16 beat = beat88(beats_per_minute_88, timebase);
67 u16 beatsin = (sin16(beat + phase_offset) + 32768);
68 u16 rangewidth = highest - lowest;
69 u16 scaledbeat = scale16(beatsin, rangewidth);
70 u16 result = lowest + scaledbeat;
71 if (result > highest) {
72 result = highest;
73 }
74 return result;
75}

References beat88(), FL_NOEXCEPT, and LIB8STATIC.

Referenced by fl::Pacifica::draw(), and fl::Pride2015::draw().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ begin() [1/3]

template<typename Container>
auto fl::begin ( const Container & c) -> decltype(c.begin())
constexpr

Definition at line 28 of file range_access.h.

28 {
29 return c.begin();
30}

◆ begin() [2/3]

template<typename Container>
auto fl::begin ( Container & c) -> decltype(c.begin())
constexpr

Definition at line 22 of file range_access.h.

22 {
23 return c.begin();
24}

◆ begin() [3/3]

template<typename T, fl::size N>
T * fl::begin ( T(&) array[N])
constexpr

Definition at line 10 of file range_access.h.

10 {
11 return array;
12}
A fixed-size array implementation similar to std::array.
Definition array.h:27

References FL_NOEXCEPT.

Referenced by fl::FontImpl::FontImpl(), fl::MultiChannelConfig::MultiChannelConfig(), fl::UIDropdownImpl::UIDropdownImpl(), fl::audio::SampleImpl::assign(), FL_ALIGNAS(), and fl::test::detail::getTypeName().

+ Here is the caller graph for this function:

◆ bilinearInterpolate()

u8 fl::bilinearInterpolate ( u8 v00,
u8 v10,
u8 v01,
u8 v11,
u16 dx,
u16 dy )

Definition at line 150 of file upscale.cpp.hpp.

151 {
152 u16 dx_inv = 256 - dx;
153 u16 dy_inv = 256 - dy;
154
155 u32 w00 = (u32)dx_inv * dy_inv;
156 u32 w10 = (u32)dx * dy_inv;
157 u32 w01 = (u32)dx_inv * dy;
158 u32 w11 = (u32)dx * dy;
159
160 u32 sum = v00 * w00 + v10 * w10 + v01 * w01 + v11 * w11;
161
162 // Normalize the result by dividing by 65536 (shift right by 16 bits),
163 // with rounding
164 u8 result = (u8)((sum + 32768) >> 16);
165
166 return result;
167}

Referenced by upscaleArbitrary(), and upscaleRectangular().

+ Here is the caller graph for this function:

◆ bilinearInterpolatePowerOf2()

u8 fl::bilinearInterpolatePowerOf2 ( u8 v00,
u8 v10,
u8 v01,
u8 v11,
u8 dx,
u8 dy )

Definition at line 221 of file upscale.cpp.hpp.

222 {
223 u16 dx_inv = 256 - dx; // 0 to 256
224 u16 dy_inv = 256 - dy; // 0 to 256
225
226 // Scale down weights to fit into u16
227 u16 w00 = (dx_inv * dy_inv) >> 8; // Max value 256
228 u16 w10 = (dx * dy_inv) >> 8;
229 u16 w01 = (dx_inv * dy) >> 8;
230 u16 w11 = (dx * dy) >> 8;
231
232 // Sum of weights should be approximately 256
233 u16 weight_sum = w00 + w10 + w01 + w11;
234
235 // Compute the weighted sum of pixel values
236 u16 sum = v00 * w00 + v10 * w10 + v01 * w01 + v11 * w11;
237
238 // Normalize the result
239 u8 result = (sum + (weight_sum >> 1)) / weight_sum;
240
241 return result;
242}

Referenced by upscalePowerOf2(), and upscaleRectangularPowerOf2().

+ Here is the caller graph for this function:

◆ bit_cast()

template<typename To, typename From>
To fl::bit_cast ( const From & from)

Definition at line 48 of file bit_cast.h.

48 {
49 FL_STATIC_ASSERT(sizeof(To) == sizeof(From), "bit_cast: types must have the same size");
50 FL_STATIC_ASSERT(is_bitcast_compatible<To>::value, "bit_cast: destination type must be bitcast compatible");
51 FL_STATIC_ASSERT(is_bitcast_compatible<From>::value, "bit_cast: source type must be bitcast compatible");
52
53 To to;
54 fl::memcpy(&to, &from, sizeof(To));
55 return to;
56}
void * memcpy(void *dest, const void *src, size_t n) FL_NOEXCEPT
#define FL_STATIC_ASSERT(...)
static constexpr bool value
Definition bit_cast.h:26

References FL_NOEXCEPT, FL_STATIC_ASSERT, memcpy(), and fl::is_bitcast_compatible< T >::value.

Referenced by fl::SerializerVisitor::accept(), fl::SerializerVisitor::accept(), as_bytes(), as_writable_bytes(), bit_cast_ptr(), bit_cast_ptr(), fl::anonymous_namespace{json.cpp.hpp}::classify_array(), fl::Frame::convertPixelsToRgb(), fl::third_party::Mp3HelixDecoder::decodeFrame(), FL_ALIGNAS(), FL_DISABLE_WARNING(), fl::VectorN< T, INLINED_SIZE >::inline_memory(), int_to_ptr(), fl::isr::memset_zero_word(), fl::anonymous_namespace{json.cpp.hpp}::JsonBuilder::on_token(), fl::Hash< float >::operator()(), fl::unordered_map< Key, T, Hash, KeyEqual, INLINED_COUNT >::const_iterator::operator*(), fl::unordered_map< Key, T, Hash, KeyEqual, INLINED_COUNT >::iterator::operator*(), fl::anonymous_namespace{json.cpp.hpp}::JsonBuilder::parse_float_array(), ptr_to_int(), reinterpret_cast_(), reinterpret_pointer_cast(), and fl::UCS7604ControllerT< DATA_PIN, RGB_ORDER, fl::UCS7604Mode::UCS7604_MODE_8BIT_800KHZ, fl::TIMING_UCS7604_800KHZ, CLOCKLESS_CONTROLLER >::showPixels().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ bit_cast_ptr() [1/2]

template<typename To>
const To * fl::bit_cast_ptr ( const void * storage)

Definition at line 65 of file bit_cast.h.

65 {
66 return bit_cast<const To*>(storage);
67}

References bit_cast(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ bit_cast_ptr() [2/2]

template<typename To>
To * fl::bit_cast_ptr ( void * storage)

Definition at line 60 of file bit_cast.h.

60 {
61 return bit_cast<To*>(storage);
62}

References bit_cast(), and FL_NOEXCEPT.

Referenced by fl::PSRamAllocator< T >::Alloc(), fl::SlabAllocator< T, SLAB_SIZE >::deallocate(), fl::SlabAllocator< T, SLAB_SIZE >::deallocateToSlab(), FL_ALIGN_AS_T(), fl::allocator_inlined< U, N, typename BaseAllocator::template rebind< U >::other >::get_inlined_ptr(), fl::allocator_inlined< U, N, typename BaseAllocator::template rebind< U >::other >::get_inlined_ptr(), RGBWEmulatedController< CONTROLLER, RGB_ORDER >::showPixels(), wave8(), fl::detail::wave8_convert_byte_to_wave8byte(), fl::detail::wave8_expand_byte(), fl::basic_string::write(), and fl::basic_string::write().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ blend() [1/4]

CHSV fl::blend ( const CHSV & p1,
const CHSV & p2,
fract8 amountOfP2,
TGradientDirectionCode directionCode )

Definition at line 135 of file colorutils.cpp.hpp.

136 {
137 CHSV nu(p1);
138 nblend(nu, p2, amountOfP2, directionCode);
139 return nu;
140}
fl::hsv8 CHSV
Definition chsv.h:11
CRGB & nblend(CRGB &existing, const CRGB &overlay, fract8 amountOfOverlay)

References nblend().

+ Here is the call graph for this function:

◆ blend() [2/4]

CHSV * fl::blend ( const CHSV * src1,
const CHSV * src2,
CHSV * dest,
fl::u16 count,
fract8 amountOfsrc2,
TGradientDirectionCode directionCode )

Definition at line 142 of file colorutils.cpp.hpp.

143 {
144 for (fl::u16 i = 0; i < count; ++i) {
145 dest[i] = blend(src1[i], src2[i], amountOfsrc2, directionCode);
146 }
147 return dest;
148}
CRGB blend(const CRGB &p1, const CRGB &p2, fract8 amountOfP2)

References blend().

+ Here is the call graph for this function:

◆ blend() [3/4]

CRGB fl::blend ( const CRGB & p1,
const CRGB & p2,
fract8 amountOfP2 )

Definition at line 63 of file colorutils.cpp.hpp.

63 {
64 CRGB nu(p1);
65 nblend(nu, p2, amountOfP2);
66 return nu;
67}

References nblend().

Referenced by blend(), blend(), ColorFromPalette(), ColorFromPalette(), ColorFromPalette(), ColorFromPalette(), ColorFromPalette(), ColorFromPalette(), ColorFromPaletteExtended(), ColorFromPaletteExtended(), ColorFromPaletteExtended(), ColorFromPaletteExtended(), ColorFromPaletteExtended(), fl::TwinkleFox::drawTwinkleFox(), FL_DISABLE_WARNING(), fl::LUT< u16 >::interp16(), fl::LUT< u16 >::interp8(), fl::PerlinParticlePunch::renderMeteor(), and fl::PerlinParticlePunch::spawnDebrisFromMeteor().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ blend() [4/4]

CRGB * fl::blend ( const CRGB * src1,
const CRGB * src2,
CRGB * dest,
fl::u16 count,
fract8 amountOfsrc2 )

Definition at line 69 of file colorutils.cpp.hpp.

70 {
71 for (fl::u16 i = 0; i < count; ++i) {
72 dest[i] = blend(src1[i], src2[i], amountOfsrc2);
73 }
74 return dest;
75}

References blend().

+ Here is the call graph for this function:

◆ blur1d() [1/2]

void fl::blur1d ( CRGB * leds,
u16 numLeds,
fract8 blur_amount )
inline

Definition at line 178 of file blur.h.

178 {
179 gfx::blur1d(leds, numLeds, blur_amount);
180}
fl::CRGB leds[NUM_LEDS]
void blur1d(fl::span< CRGB > leds, fract8 blur_amount)
One-dimensional blur filter (span version).
Definition blur.cpp.hpp:69
u8 u8 fract8 blur_amount
Definition blur.h:186

References fl::gfx::blur1d(), blur_amount, FL_NOEXCEPT, and leds.

+ Here is the call graph for this function:

◆ blur1d() [2/2]

void fl::blur1d ( fl::span< CRGB > leds,
fract8 blur_amount )
inline

Definition at line 150 of file blur.h.

150 {
152}

References fl::gfx::blur1d(), blur_amount, FL_NOEXCEPT, and leds.

Referenced by fl::Particles1d::draw().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ blur2d() [1/3]

void fl::blur2d ( CRGB * leds,
u8 width,
u8 height,
fract8 blur_amount,
const XYMap & xymap )
inline

Definition at line 181 of file blur.h.

182 {
184}
XYMap xymap
void blur2d(fl::span< CRGB > leds, fl::u8 width, fl::u8 height, fract8 blur_amount, const XYMap &xymap)
Two-dimensional blur filter (span version).
Definition blur.cpp.hpp:87
u8 u8 height
Definition blur.h:186
u8 width
Definition blur.h:186

References fl::gfx::blur2d(), blur_amount, FL_NOEXCEPT, height, leds, width, and xymap.

+ Here is the call graph for this function:

◆ blur2d() [2/3]

void fl::blur2d ( fl::span< CRGB > leds,
u8 width,
u8 height,
fract8 blur_amount,
const XYMap & xymap )
inline

Definition at line 153 of file blur.h.

154 {
156}

References fl::gfx::blur2d(), blur_amount, FL_NOEXCEPT, height, leds, width, and xymap.

Referenced by fl::Blend2d::draw(), and fl::Luminova::draw().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ blur2d() [3/3]

void fl::blur2d ( gfx::Canvas< CRGB > & canvas,
alpha8 blur_amount )
inline

Definition at line 167 of file blur.h.

167 {
168 gfx::blur2d(canvas, blur_amount);
169}

References fl::gfx::blur2d(), blur_amount, and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ blurColumns() [1/3]

void fl::blurColumns ( CRGB * leds,
u8 width,
u8 height,
fract8 blur_amount,
const XYMap & xymap )
inline

Definition at line 196 of file blur.h.

197 {
199}
void blurColumns(fl::span< CRGB > leds, fl::u8 width, fl::u8 height, fract8 blur_amount, const XYMap &xyMap)
Perform a blur1d() on every column of a rectangular matrix (span version).
Definition blur.cpp.hpp:172

References blur_amount, fl::gfx::blurColumns(), FL_NOEXCEPT, height, leds, width, and xymap.

+ Here is the call graph for this function:

◆ blurColumns() [2/3]

void fl::blurColumns ( fl::span< CRGB > leds,
u8 width,
u8 height,
fract8 blur_amount,
const XYMap & xymap )
inline

Definition at line 161 of file blur.h.

References blur_amount, fl::gfx::blurColumns(), FL_NOEXCEPT, height, leds, width, and xymap.

+ Here is the call graph for this function:

◆ blurColumns() [3/3]

void fl::blurColumns ( gfx::Canvas< CRGB > & canvas,
alpha8 blur_amount )
inline

Definition at line 173 of file blur.h.

173 {
175}

References blur_amount, fl::gfx::blurColumns(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ blurRows() [1/3]

FL_DISABLE_WARNING_POP void fl::blurRows ( CRGB * leds,
u8 width,
u8 height,
fract8 blur_amount,
const XYMap & xymap )
inline

Definition at line 192 of file blur.h.

193 {
195}
void blurRows(fl::span< CRGB > leds, fl::u8 width, fl::u8 height, fract8 blur_amount, const XYMap &xyMap)
Perform a blur1d() on every row of a rectangular matrix (span version).
Definition blur.cpp.hpp:133

References blur_amount, fl::gfx::blurRows(), FL_NOEXCEPT, height, leds, width, and xymap.

+ Here is the call graph for this function:

◆ blurRows() [2/3]

void fl::blurRows ( fl::span< CRGB > leds,
u8 width,
u8 height,
fract8 blur_amount,
const XYMap & xymap )
inline

Definition at line 157 of file blur.h.

References blur_amount, fl::gfx::blurRows(), FL_NOEXCEPT, height, leds, width, and xymap.

+ Here is the call graph for this function:

◆ blurRows() [3/3]

void fl::blurRows ( gfx::Canvas< CRGB > & canvas,
alpha8 blur_amount )
inline

Definition at line 170 of file blur.h.

170 {
171 gfx::blurRows(canvas, blur_amount);
172}

References blur_amount, fl::gfx::blurRows(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ bseconds16()

LIB8STATIC u16 fl::bseconds16 ( )

Returns the current time-since-boot in "binary seconds", which are actually 1024/1000 of a second long.

Definition at line 66 of file time_functions.h.

66 {
67 u32 ms = fl::millis();
68 u16 s16;
69 s16 = div1024_32_16(ms);
70 return s16;
71}
LIB8STATIC u16 div1024_32_16(u32 in32) FL_NOEXCEPT
Helper routine to divide a 32-bit value by 1024, returning only the low 16 bits.

References div1024_32_16(), FL_NOEXCEPT, LIB8STATIC, and millis().

+ Here is the call graph for this function:

◆ buildUCS7604Preamble()

template<typename OutputIterator>
void fl::buildUCS7604Preamble ( OutputIterator out,
UCS7604Mode mode,
u8 r_current,
u8 g_current,
u8 b_current,
u8 w_current )

Build UCS7604 preamble (15 bytes)

Template Parameters
OutputIteratorOutput iterator accepting uint8_t
Parameters
outOutput iterator for preamble bytes
modeUCS7604 protocol mode (8-bit/16-bit)
r_currentRed channel current control (0x0-0xF, wire order)
g_currentGreen channel current control (0x0-0xF, wire order)
b_currentBlue channel current control (0x0-0xF, wire order)
w_currentWhite channel current control (0x0-0xF, wire order)
Note
Current control values should already be reordered to match wire protocol (RGB)
KNOWN LIMITATION: The UCS7604 protocol spec requires a ~20µs "W-code low" delay between the 8-byte verification code and the 7-byte configuration block. Our clockless controller sends all 15 bytes as a continuous bit-encoded stream without this gap. If this causes issues on some hardware, the transmission would need to be split into two separate clockless sends with a manual low-hold between them. See: https://github.com/clinder/Arduino-Teensy-UCS7604

Definition at line 69 of file ucs7604.h.

71 {
72 // Sync pattern (6 bytes)
73 *out++ = 0xFF;
74 *out++ = 0xFF;
75 *out++ = 0xFF;
76 *out++ = 0xFF;
77 *out++ = 0xFF;
78 *out++ = 0xFF;
79
80 // Header (2 bytes)
81 *out++ = 0x00;
82 *out++ = 0x03;
83
84 // Mode byte
85 *out++ = static_cast<u8>(mode);
86
87 // Current control (4 bytes, 4-bit each, wire order RGBW)
88 *out++ = r_current & 0x0F;
89 *out++ = g_current & 0x0F;
90 *out++ = b_current & 0x0F;
91 *out++ = w_current & 0x0F;
92
93 // Reserved (2 bytes)
94 *out++ = 0x00;
95 *out++ = 0x00;
96}

Referenced by encodeUCS7604().

+ Here is the caller graph for this function:

◆ buildWave3ExpansionLUT()

FL_OPTIMIZE_FUNCTION Wave3BitExpansionLut fl::buildWave3ExpansionLUT ( const ChipsetTiming & timing)

Build a Wave3BitExpansionLut from chipset timing data.

Converts three-phase LED timing (T1, T2, T3) into a nibble lookup table for 3-tick-per-bit waveform expansion. Each nibble maps to 12 bits.

Parameters
timingChipsetTiming struct containing T1, T2, T3 in nanoseconds
Returns
Populated Wave3BitExpansionLut lookup table (32 bytes)

Definition at line 69 of file wave3.cpp.hpp.

69 {
70 Wave3BitExpansionLut lut;
71
72 const u32 period = timing.T1 + timing.T2 + timing.T3;
73
74 // T0H = T1, T1H = T1 + T2
75 const float t0h_norm = static_cast<float>(timing.T1) / period;
76 const float t1h_norm = static_cast<float>(timing.T1 + timing.T2) / period;
77
78 // Round to nearest integer tick count out of 3
79 u32 ticks_bit0 = static_cast<u32>(t0h_norm * 3.0f + 0.5f);
80 u32 ticks_bit1 = static_cast<u32>(t1h_norm * 3.0f + 0.5f);
81
82 // Clamp to valid range [0, 3]
83 if (ticks_bit0 > 3) ticks_bit0 = 3;
84 if (ticks_bit1 > 3) ticks_bit1 = 3;
85
86 // Generate 3-bit patterns for bit 0 and bit 1
87 // Pattern has ticks_bitN high bits followed by (3 - ticks_bitN) low bits
88 // MSB first within the 3-bit field
89 u8 pattern_bit0 = 0;
90 u8 pattern_bit1 = 0;
91
92 for (u32 i = 0; i < ticks_bit0; i++) {
93 pattern_bit0 |= (0x4 >> i); // Set bits from MSB: 0x4=100, 0x6=110, 0x7=111
94 }
95 for (u32 i = 0; i < ticks_bit1; i++) {
96 pattern_bit1 |= (0x4 >> i);
97 }
98
99 // Build LUT for all 16 nibbles
100 // Each nibble maps to 12 bits (4 LED bits × 3 ticks each)
101 for (u8 nibble = 0; nibble < 16; nibble++) {
102 u16 pattern = 0;
103 // Process bits MSB first (bit 3, 2, 1, 0)
104 for (int bit_pos = 3; bit_pos >= 0; bit_pos--) {
105 bool bit_set = (nibble >> bit_pos) & 1;
106 u8 tick_pattern = bit_set ? pattern_bit1 : pattern_bit0;
107 pattern = (pattern << 3) | (tick_pattern & 0x7);
108 }
109 lut.lut[nibble] = pattern;
110 }
111
112 return lut;
113}
u32 T2
Additional high time for bit 1 (nanoseconds)
Definition led_timing.h:88
u32 T3
Low tail duration (nanoseconds)
Definition led_timing.h:89
u32 T1
High time for bit 0 (nanoseconds)
Definition led_timing.h:87

References fl::ChipsetTiming::T1, fl::ChipsetTiming::T2, and fl::ChipsetTiming::T3.

◆ buildWave8ByteExpansionLUT()

Wave8ByteExpansionLut fl::buildWave8ByteExpansionLUT ( const Wave8BitExpansionLut & nibble)

Build a byte-indexed expansion LUT (#2526) from the nibble LUT.

Entry b is the concatenation of the high-nibble expansion (symbols[0..3]) and the low-nibble expansion (symbols[4..7]) — bit-identical to what wave8_convert_byte_to_wave8byte() produces. Not for ISR use.

Definition at line 313 of file wave8.cpp.hpp.

313 {
314 Wave8ByteExpansionLut out;
315 for (int b = 0; b < 256; ++b) {
316 const Wave8Bit *hi = nibble.lut[(b >> 4) & 0xF];
317 const Wave8Bit *lo = nibble.lut[b & 0xF];
318 for (int i = 0; i < 4; ++i) {
319 out.lut[b].symbols[i] = hi[i];
320 out.lut[b].symbols[i + 4] = lo[i];
321 }
322 }
323 return out;
324}
Type-safe container for packed 8-bit wave pulse pattern.
Definition wave8.h:22

◆ buildWave8ExpansionLUT()

FL_OPTIMIZE_FUNCTION Wave8BitExpansionLut fl::buildWave8ExpansionLUT ( const ChipsetTiming & timing)

Build a Wave8BitExpansionLut from chipset timing data.

Converts three-phase LED timing (T1, T2, T3) into a nibble lookup table for 8-pulse-per-bit waveform expansion. The timing is normalized to a period of 1.0 and mapped to 8 pulses per bit (packed into 1 byte).

Never call this from ISR handlers. This is something that should be called before entering ISR context.

Parameters
timingChipsetTiming struct containing T1, T2, T3 in nanoseconds
Returns
Populated Wave8BitExpansionLut lookup table (64 bytes)

Definition at line 250 of file wave8.cpp.hpp.

250 {
251 Wave8BitExpansionLut lut;
252
253 // Step 1: Calculate absolute times from ChipsetTiming format
254 // ChipsetTiming.T1 = T0H (high time for bit 0)
255 // ChipsetTiming.T2 = T1H - T0H (ADDITIONAL high time for bit 1)
256 // ChipsetTiming.T3 = T0L (low tail duration)
257 const u32 t0h = timing.T1; // T0H: bit 0 goes LOW here
258 const u32 t1h = timing.T1 + timing.T2; // T1H: bit 1 goes LOW here
259 const u32 period = timing.T1 + timing.T2 + timing.T3; // Total period
260
261 // Step 2: Normalize absolute times
262 const float t0h_norm = static_cast<float>(t0h) / period;
263 const float t1h_norm = static_cast<float>(t1h) / period;
264
265 // Step 3: Convert to pulse counts (fixed 8 pulses per bit)
266 // pulses_bit0: number of HIGH pulses for bit 0 (before it goes LOW at t0h)
267 // pulses_bit1: number of HIGH pulses for bit 1 (before it goes LOW at t1h)
268 u32 pulses_bit0 =
269 static_cast<u32>(t0h_norm * 8.0f + 0.5f); // round
270 u32 pulses_bit1 =
271 static_cast<u32>(t1h_norm * 8.0f + 0.5f); // round
272
273 // Clamp to valid range [0, 8]
274 if (pulses_bit0 > 8)
275 pulses_bit0 = 8;
276 if (pulses_bit1 > 8)
277 pulses_bit1 = 8;
278
279 // Step 4: Generate bit0 and bit1 waveforms (1 byte each, packed format)
280 // Each bit represents one pulse (MSB = first pulse)
281 u8 bit0_waveform = 0;
282 u8 bit1_waveform = 0;
283
284 // Bit 0: Set MSB bits for HIGH pulses
285 for (u32 i = 0; i < pulses_bit0; i++) {
286 bit0_waveform |= (0x80 >> i); // Set bit from MSB
287 }
288
289 // Bit 1: Set MSB bits for HIGH pulses
290 for (u32 i = 0; i < pulses_bit1; i++) {
291 bit1_waveform |= (0x80 >> i); // Set bit from MSB
292 }
293
294 // Step 5: Build LUT for all 16 nibbles
295 for (u8 nibble = 0; nibble < 16; nibble++) {
296 // For each nibble, generate 4 Wave8Bit (one per bit, MSB first)
297 for (int bit_pos = 3; bit_pos >= 0; bit_pos--) {
298 // Extract bit (MSB first: bit 3, 2, 1, 0)
299 const bool bit_set = (nibble >> bit_pos) & 1;
300 const u8 waveform = bit_set ? bit1_waveform : bit0_waveform;
301
302 // Store packed waveform to LUT entry
303 lut.lut[nibble][3 - bit_pos].data = waveform;
304 }
305 }
306
307 return lut;
308}

References fl::ChipsetTiming::T1, fl::ChipsetTiming::T2, and fl::ChipsetTiming::T3.

◆ busKeepAlive()

template<fl::Bus B>
void fl::busKeepAlive ( )
inline

Definition at line 117 of file bus_traits.h.

117 {
119}
static void odr_use() FL_NOEXCEPT
Definition bus_traits.h:98

References FL_NOEXCEPT, and fl::detail::BusKeepAliveImpl< B >::odr_use().

+ Here is the call graph for this function:

◆ busName()

const char * fl::busName ( Bus b)
inline

Canonical driver-name string for a Bus value.

Each Bus::X corresponds to exactly one concrete IChannelDriver. That driver's getName() returns a stable string that ChannelManager uses as the lookup key (findDriverByName / getDriverByName). Channels read ChannelOptions::mBus (#2459) and the dispatch layer derives the lookup string via busName(mBus) — typo-prone string literals never appear at the call site.

Returns "AUTO" for Bus::AUTO — diagnostic/log paths get a stable human-readable label. mBus == Bus::AUTO means "no Bus pin; let the manager pick by priority", so this name never reaches the manager's lookup.

Spelling is normalized to match the C++ enumerator name exactly (including underscores in FLEX_IO, OBJECT_FLED, BIT_BANG). Driver getName() implementations return the same string, so callers never need a reverse mapping or special-case handling.

Lifetime. Every returned pointer is to a string literal, so it has static storage duration — safe to feed to fl::string::from_literal().

Definition at line 167 of file bus.h.

167 {
168 switch (b) {
169 case Bus::AUTO: return "AUTO";
170 case Bus::RMT: return "RMT";
171 case Bus::PARLIO: return "PARLIO";
172 case Bus::SPI: return "SPI";
173 case Bus::I2S: return "I2S";
174 case Bus::I2S_SPI: return "I2S_SPI";
175 case Bus::LCD_RGB: return "LCD_RGB";
176 case Bus::LCD_SPI: return "LCD_SPI";
177 case Bus::LCD_CLOCKLESS: return "LCD_CLOCKLESS";
178 case Bus::UART: return "UART";
179 case Bus::FLEX_IO: return "FLEX_IO";
180 case Bus::OBJECT_FLED: return "OBJECT_FLED";
181 case Bus::LPUART: return "LPUART";
182 case Bus::BIT_BANG: return "BIT_BANG";
183 case Bus::STUB: return "STUB";
184 }
185 return ""; // unreachable — silences -Wreturn-type on toolchains that miss the exhaustive switch
186}
@ AUTO
Sentinel: defer to DefaultBus<Chipset>::value.
Definition bus.h:61

References AUTO, BIT_BANG, FL_NOEXCEPT, FLEX_IO, I2S, I2S_SPI, LCD_CLOCKLESS, LCD_RGB, LCD_SPI, LPUART, OBJECT_FLED, PARLIO, RMT, SPI, STUB, and UART.

Referenced by fl::Channel::resolveDynamicDriver(), and fl::ChannelManager::setExclusiveDriver().

+ Here is the caller graph for this function:

◆ calculate_oscillators()

void fl::calculate_oscillators ( oscillators & timings,
modulators & move,
fl::u32 current_time,
float speed_factor )
inline

Definition at line 46 of file engine_core.h.

47 {
48 double runtime = current_time * timings.master_speed * speed_factor;
49
50 for (int i = 0; i < num_oscillators; i++) {
51 move.linear[i] = (runtime + timings.offset[i]) * timings.ratio[i];
52 move.radial[i] = fl::fmodf(move.linear[i], 2.0f * static_cast<float>(PI));
53 move.directional[i] = FL_SIN_F(move.radial[i]);
54 move.noise_angle[i] = PI * (1 + pnoise(move.linear[i], 0, 0));
55 }
56}
#define PI
#define num_oscillators
Definition core_types.h:9
#define FL_SIN_F(x)
Definition engine_core.h:17
constexpr remove_reference< T >::type && move(T &&t) FL_NOEXCEPT
Definition move.h:28
float fmodf(float x, float y) FL_NOEXCEPT
Definition math.h:336
FASTLED_FORCE_INLINE float pnoise(float x, float y, float z)
float offset[num_oscillators]
Definition core_types.h:32
float ratio[num_oscillators]
Definition core_types.h:33

References FL_SIN_F, fmodf(), fl::oscillators::master_speed, move(), num_oscillators, fl::oscillators::offset, PI, pnoise(), and fl::oscillators::ratio.

Referenced by fl::Engine::calculate_oscillators(), and run_default_oscillators().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ calculate_transpose_buffer_size()

FASTLED_FORCE_INLINE u32 fl::calculate_transpose_buffer_size ( u16 num_leds,
u8 bytes_per_led )

Calculate output buffer size needed for transposed data.

All strip counts (2, 4, 8) use the same output format: bytes_per_led * 8 bytes per LED.

Parameters
num_ledsMaximum number of LEDs across all strips
bytes_per_ledNumber of bytes per LED (3 for RGB, 4 for RGBW, etc.)
Returns
Required output buffer size in bytes
Examples
/home/runner/work/FastLED/FastLED/src/fl/math/transposition.h.

Definition at line 800 of file transposition.h.

800 {
801 return num_leds * bytes_per_led * 8;
802}

References FASTLED_FORCE_INLINE, and FL_NOEXCEPT.

◆ calculateCorkscrewHeight()

fl::u16 fl::calculateCorkscrewHeight ( float totalTurns,
fl::u16 numLeds )
constexpr

Definition at line 55 of file corkscrew.h.

55 {
56 return (calculateCorkscrewWidth(totalTurns, numLeds) * static_cast<int>(ceil_constexpr(totalTurns)) > numLeds) ?
57 static_cast<fl::u16>(ceil_constexpr(static_cast<float>(numLeds) / static_cast<float>(calculateCorkscrewWidth(totalTurns, numLeds)))) :
58 static_cast<fl::u16>(ceil_constexpr(totalTurns));
59}
constexpr int ceil_constexpr(float value) FL_NOEXCEPT
Definition math.h:287
constexpr fl::u16 calculateCorkscrewWidth(float totalTurns, fl::u16 numLeds)
Definition corkscrew.h:51
Base definition for an LED controller.
Definition crgb.hpp:179

References calculateCorkscrewWidth(), and ceil_constexpr().

+ Here is the call graph for this function:

◆ calculateCorkscrewWidth()

fl::u16 fl::calculateCorkscrewWidth ( float totalTurns,
fl::u16 numLeds )
constexpr

Definition at line 51 of file corkscrew.h.

51 {
52 return static_cast<fl::u16>(ceil_constexpr(static_cast<float>(numLeds) / totalTurns));
53}

References ceil_constexpr().

Referenced by calculateCorkscrewHeight().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ calloc()

void * fl::calloc ( size_t nmemb,
size_t size )

Definition at line 17 of file malloc.cpp.hpp.

17 {
18 size_t total_size = nmemb * size;
19 void* ptr = malloc(total_size);
20 if (ptr != nullptr) {
21 memset(ptr, 0, total_size);
22 }
23 return ptr;
24 }
void * memset(void *s, int c, size_t n) FL_NOEXCEPT
void * malloc(size_t size)
Definition malloc.cpp.hpp:9

References malloc(), and memset().

Referenced by _generate_kernel().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ canUseWave3()

FL_OPTIMIZE_FUNCTION bool fl::canUseWave3 ( const ChipsetTiming & timing)

Check if a chipset timing is eligible for wave3 encoding.

Wave3 requires that normalized T0H and T1H round to exactly 1 and 2 ticks (or 2 and 1) out of 3, and both are in [1,2].

Parameters
timingChipsetTiming struct with T1, T2, T3 in nanoseconds
Returns
true if wave3 encoding is possible for this chipset

Definition at line 25 of file wave3.cpp.hpp.

25 {
26 const u32 period = timing.T1 + timing.T2 + timing.T3;
27 if (period == 0) {
28 return false;
29 }
30
31 // T0H = T1, T1H = T1 + T2
32 const float t0h_norm = static_cast<float>(timing.T1) / period;
33 const float t1h_norm = static_cast<float>(timing.T1 + timing.T2) / period;
34
35 // Round to nearest integer tick count out of 3
36 u32 ticks_bit0 = static_cast<u32>(t0h_norm * 3.0f + 0.5f);
37 u32 ticks_bit1 = static_cast<u32>(t1h_norm * 3.0f + 0.5f);
38
39 // Both must be in [1, 2] (need at least 1 high tick and 1 low tick)
40 if (ticks_bit0 < 1 || ticks_bit0 > 2) return false;
41 if (ticks_bit1 < 1 || ticks_bit1 > 2) return false;
42
43 // Must be different (one is 1-tick, other is 2-tick)
44 if (ticks_bit0 == ticks_bit1) return false;
45
46 return true;
47}

References fl::ChipsetTiming::T1, fl::ChipsetTiming::T2, and fl::ChipsetTiming::T3.

Referenced by capture().

+ Here is the caller graph for this function:

◆ ceil() [1/4]

double fl::ceil ( double value)
inline

Definition at line 311 of file math.h.

311{ return ceil_impl_double(value); }
double ceil_impl_double(double value)
Definition math.cpp.hpp:70

References ceil_impl_double(), FL_NOEXCEPT, and type_rank< T >::value.

+ Here is the call graph for this function:

◆ ceil() [2/4]

template<typename T>
enable_if< is_integral< T >::value, float >::type fl::ceil ( T value)
inline

Definition at line 313 of file math.h.

313{ return ceil_impl_float(static_cast<float>(value)); }
float ceil_impl_float(float value)
Definition math.cpp.hpp:61

References ceil_impl_float(), FL_NOEXCEPT, and type_rank< T >::value.

+ Here is the call graph for this function:

◆ ceil() [3/4]

template<typename T>
enable_if< ceil_detail::has_static_ceil< T >::value, decltype(T::ceil(declval< T >()))>::type fl::ceil ( T value)
inline

Definition at line 495 of file math.h.

495 {
496 return T::ceil(value);
497}

References FL_NOEXCEPT, and type_rank< T >::value.

◆ ceil() [4/4]

template<typename T>
enable_if< is_fixed_point< T >::value, T >::type fl::ceil ( T x)
inlineconstexpr

Definition at line 508 of file fixed_point.h.

508{ return T::ceil(x); }

References FL_NOEXCEPT, and x.

Referenced by fl::anonymous_namespace{corkscrew.cpp.hpp}::calculateDimensions(), Painter::PaintVuNotes(), Painter::PaintVuSpaceInvaders(), and fl::Luminova::plotSoftDot().

+ Here is the caller graph for this function:

◆ ceil_constexpr()

int fl::ceil_constexpr ( float value)
constexpr

Definition at line 287 of file math.h.

287 {
288 return static_cast<int>((value > static_cast<float>(static_cast<int>(value)))
289 ? static_cast<int>(value) + 1
290 : static_cast<int>(value));
291}

References FL_NOEXCEPT, and type_rank< T >::value.

Referenced by calculateCorkscrewHeight(), and calculateCorkscrewWidth().

+ Here is the caller graph for this function:

◆ ceil_impl_double()

double fl::ceil_impl_double ( double value)

Definition at line 70 of file math.cpp.hpp.

70 {
71 if (value <= 0.0) {
72 return static_cast<double>(static_cast<long long>(value));
73 }
74 long long i = static_cast<long long>(value);
75 return static_cast<double>(i + (value != static_cast<double>(i) ? 1 : 0));
76}

References type_rank< T >::value.

Referenced by ceil(), and fmod_impl_double().

+ Here is the caller graph for this function:

◆ ceil_impl_float()

float fl::ceil_impl_float ( float value)

Definition at line 61 of file math.cpp.hpp.

61 {
62 if (value <= 0.0f) {
63 return static_cast<float>(static_cast<int>(value));
64 }
65 int i = static_cast<int>(value);
66 return static_cast<float>(i + (value != static_cast<float>(i) ? 1 : 0));
67}

References type_rank< T >::value.

Referenced by ceil(), ceilf(), and fmod_impl_float().

+ Here is the caller graph for this function:

◆ ceilf()

float fl::ceilf ( float value)
inline

Definition at line 310 of file math.h.

310{ return ceil_impl_float(value); }

References ceil_impl_float(), FL_NOEXCEPT, and type_rank< T >::value.

Referenced by fl::Corkscrew::at_splat_extrapolate(), fl::audio::FrequencyBinMapper::calculateBinMappings(), fl::FlowFieldFloat::drawDot(), plotSoftDot(), and fl::NoiseBias1D::trigger().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ channelManager()

ChannelManager & fl::channelManager ( )

Get the global ChannelManager singleton instance.

Returns
Reference to the singleton ChannelManager
Note
Available on all platforms (has 0 drivers on non-ESP32)

Definition at line 575 of file manager.cpp.hpp.

575 {
577}
static ChannelManager & instance() FL_NOEXCEPT
Get the global singleton instance.

References fl::ChannelManager::instance().

Referenced by CFastLED::add(), CFastLED::clear(), CFastLED::getDriverCount(), CFastLED::getDriverInfos(), CFastLED::isDriverEnabled(), fl::ChannelManager::operator=(), fl::validation::printEngineValidation(), CFastLED::setExclusiveDriver(), CFastLED::setExclusiveDriver(), fl::validation::validateExpectedEngines(), CFastLED::wait(), and CFastLED::wait().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ charToDigit()

static int fl::charToDigit ( char c)
static

Definition at line 72 of file cstdlib.cpp.hpp.

72 {
73 if (c >= '0' && c <= '9') {
74 return c - '0';
75 }
76 if (c >= 'a' && c <= 'z') {
77 return c - 'a' + 10;
78 }
79 if (c >= 'A' && c <= 'Z') {
80 return c - 'A' + 10;
81 }
82 return 0;
83}

Referenced by strtol(), and strtoul().

+ Here is the caller graph for this function:

◆ cin_real()

istream_real & fl::cin_real ( )

Definition at line 129 of file istream.cpp.hpp.

129 {
130 // Local static instance - only constructed when first called
131 // This allows the linker to eliminate it if never referenced
132 static istream_real instance;
133 return instance;
134}

◆ clamp() [1/2]

template<typename T>
FL_DISABLE_WARNING_POP FASTLED_FORCE_INLINE T fl::clamp ( T value,
T lo,
T hi )

Definition at line 81 of file math.h.

81 {
82 if (value < lo) return lo;
83 if (value > hi) return hi;
84 return value;
85}

References FASTLED_FORCE_INLINE, FL_NOEXCEPT, and type_rank< T >::value.

◆ clamp() [2/2]

template<typename T>
enable_if< is_fixed_point< T >::value, T >::type fl::clamp ( T x,
T lo,
T hi )
inlineconstexpr
Examples
Audio.ino, ElPanelReactive.ino, and Sailboat.ino.

Definition at line 542 of file fixed_point.h.

542{ return T::clamp(x, lo, hi); }

References FL_NOEXCEPT, and x.

Referenced by fl::WaveSimulation1D_Real::WaveSimulation1D_Real(), fl::WaveSimulation2D_Real::WaveSimulation2D_Real(), fl::audio::detector::Backbeat::calculateMultibandAccent(), fl::audio::detector::Backbeat::calculatePatternConfidence(), fl::audio::detector::Note::calculatePitchBend(), fl::audio::detector::Vocal::calculateRawConfidence(), fl::XYPath::calculateSteps(), fl::audio::detector::Note::calculateVelocity(), fl::audio::detector::Percussion::computeConfidences(), fl::gfx::coordToU8(), fl::gfx::coordToU8< fl::s16x16 >(), fl::gfx::coordToU8< int >(), fl::audio::detector::Backbeat::detectBackbeat(), fl::audio::detector::Downbeat::detectDownbeat(), drawRadialSpectrum(), drawSpectrumBars(), drawWaveform(), fl::wave_detail::float_to_fixed(), fl::MatrixSlice< T >::getLocalCoord(), fl::Particles1d::Particle::getPower(), loop(), map_range_clamped(), fl::XYMap::mapToIndex(), fl::Luminova::plotSoftDot(), fl::colorimetric_detail::rgbcct_eta_for_cct(), fl::WaveSimulation1D::setf(), fl::WaveSimulation2D::setf(), fl::iterator<, u8 >::setLoadFactor(), fl::WaveSimulation1D_Real::setSpeed(), fl::WaveSimulation2D_Real::setSpeed(), setup(), showGenerative(), fl::NoiseBias1D::trigger(), fl::WaveSimulation1D_Real::update(), fl::WaveSimulation2D_Real::update(), and updateAutoGain().

+ Here is the caller graph for this function:

◆ clear() [1/5]

template<typename Container>
void fl::clear ( Container & container)
inline

Definition at line 32 of file clear.h.

32 {
33 container.clear();
34}

◆ clear() [2/5]

template<int N>
void fl::clear ( CRGB(&) arr[N])
inline

Definition at line 12 of file clear.h.

12 {
13 for (int i = 0; i < N; ++i) {
14 arr[i] = CRGB::Black;
15 }
16}
@ Black
<div style='background:#000000;width:4em;height:4em;'></div>
Definition crgb.h:510

References fl::CRGB::Black.

Referenced by fl::string::assign(), clearLeds(), loop(), and fl::string::operator=().

+ Here is the caller graph for this function:

◆ clear() [3/5]

template<typename T>
void fl::clear ( Grid< T > & grid)
inline

Definition at line 26 of file clear.h.

26 {
27 grid.clear();
28}
void clear()
Definition grid.h:32

References fl::Grid< T >::clear().

+ Here is the call graph for this function:

◆ clear() [4/5]

void fl::clear ( Leds & leds)
inline

Definition at line 18 of file clear.h.

18{ leds.fill(CRGB::Black); }

References fl::CRGB::Black, and leds.

◆ clear() [5/5]

template<fl::size W, fl::size H>
void fl::clear ( LedsXY< W, H > & leds)
inline

Definition at line 21 of file clear.h.

21 {
22 leds.fill(CRGB::Black);
23}

References fl::CRGB::Black, and leds.

◆ clear_errno()

void fl::clear_errno ( )
inline

Definition at line 27 of file cerrno.h.

27 {
28 errno = 0;
29}

◆ clearerr()

void fl::clearerr ( FILE * file)
inline

Clear file error indicators.

Parameters
fileFile handle

Definition at line 298 of file file_io.h.

298 {
299}

Referenced by fl::detail::posix_filebuf::clearErrorState().

+ Here is the caller graph for this function:

◆ cled_contoller_size()

fl::u16 fl::cled_contoller_size ( )

Get the size of the CLEDController object for introspection.

Definition at line 8 of file fastled_internal.cpp.hpp.

8 {
9 return sizeof(CLEDController);
10}

References FL_NOEXCEPT.

◆ colorburn()

float fl::colorburn ( float & a,
float & b )
inline

Definition at line 161 of file engine_core.h.

161 {
162 return (1 - ((1 - a / 255.f) / (b / 255.f))) * 255.f;
163}

Referenced by fl::Engine::colorburn().

+ Here is the caller graph for this function:

◆ colorburn_fp()

FASTLED_FORCE_INLINE fl::i32 fl::colorburn_fp ( fl::i32 a,
fl::i32 b )

Definition at line 151 of file render_value_fp.h.

151 {
152 if (b <= 0) return 0;
153 fl::i32 result = 255 - ((255 - a) * 255) / b;
154 return result < 0 ? 0 : result;
155}

References FASTLED_FORCE_INLINE.

◆ colordodge()

float fl::colordodge ( float & a,
float & b )
inline

Definition at line 159 of file engine_core.h.

159{ return (a / (255.f - b)) * 255.f; }

Referenced by fl::Engine::colordodge().

+ Here is the caller graph for this function:

◆ colordodge_fp()

FASTLED_FORCE_INLINE fl::i32 fl::colordodge_fp ( fl::i32 a,
fl::i32 b )

Definition at line 145 of file render_value_fp.h.

145 {
146 if (b >= 255) return 255;
147 fl::i32 result = (a * 255) / (255 - b);
148 return result > 255 ? 255 : result;
149}

References FASTLED_FORCE_INLINE.

Referenced by fl::SpiralMatrix4_FP::draw().

+ Here is the caller graph for this function:

◆ ColorFromPalette() [1/8]

CHSV fl::ColorFromPalette ( const CHSVPalette16 & pal,
fl::u8 index,
fl::u8 brightness,
TBlendType blendType )

Definition at line 991 of file colorutils.cpp.hpp.

992 {
993 if (blendType == LINEARBLEND_NOWRAP) {
994 index = map8(index, 0, 239); // Blend range is affected by lo4 blend of
995 // values, remap to avoid wrapping
996 }
997
998 // hi4 = index >> 4;
999 fl::u8 hi4 = lsrX4(index);
1000 fl::u8 lo4 = index & 0x0F;
1001
1002 // CRGB rgb1 = pal[ hi4];
1003 const CHSV *entry = &(pal[0]) + hi4;
1004
1005 fl::u8 hue1 = entry->hue;
1006 fl::u8 sat1 = entry->sat;
1007 fl::u8 val1 = entry->val;
1008
1009 fl::u8 blend = lo4 && (blendType != NOBLEND);
1010
1011 if (blend) {
1012
1013 if (hi4 == 15) {
1014 entry = &(pal[0]);
1015 } else {
1016 ++entry;
1017 }
1018
1019 fl::u8 f2 = lo4 << 4;
1020 fl::u8 f1 = 255 - f2;
1021
1022 fl::u8 hue2 = entry->hue;
1023 fl::u8 sat2 = entry->sat;
1024 fl::u8 val2 = entry->val;
1025
1026 // Now some special casing for blending to or from
1027 // either black or white. Black and white don't have
1028 // proper 'hue' of their own, so when ramping from
1029 // something else to/from black/white, we set the 'hue'
1030 // of the black/white color to be the same as the hue
1031 // of the other color, so that you get the expected
1032 // brightness or saturation ramp, with hue staying
1033 // constant:
1034
1035 // If we are starting from white (sat=0)
1036 // or black (val=0), adopt the target hue.
1037 if (sat1 == 0 || val1 == 0) {
1038 hue1 = hue2;
1039 }
1040
1041 // If we are ending at white (sat=0)
1042 // or black (val=0), adopt the starting hue.
1043 if (sat2 == 0 || val2 == 0) {
1044 hue2 = hue1;
1045 }
1046
1047 sat1 = scale8_LEAVING_R1_DIRTY(sat1, f1);
1048 val1 = scale8_LEAVING_R1_DIRTY(val1, f1);
1049
1050 sat2 = scale8_LEAVING_R1_DIRTY(sat2, f2);
1051 val2 = scale8_LEAVING_R1_DIRTY(val2, f2);
1052
1053 // cleanup_R1();
1054
1055 // These sums can't overflow, so no qadd8 needed.
1056 sat1 += sat2;
1057 val1 += val2;
1058
1059 fl::u8 deltaHue = (fl::u8)(hue2 - hue1);
1060 if (deltaHue & 0x80) {
1061 // go backwards
1062 hue1 -= scale8(256 - deltaHue, f2);
1063 } else {
1064 // go forwards
1065 hue1 += scale8(deltaHue, f2);
1066 }
1067
1068 cleanup_R1();
1069 }
1070
1071 if (brightness != 255) {
1072 val1 = scale8_video(val1, brightness);
1073 }
1074
1075 return CHSV(hue1, sat1, val1);
1076}
CRGB blend(const CRGB &p1, const CRGB &p2, fract8 amountOfP2)
LIB8STATIC fl::u8 map8(fl::u8 in, fl::u8 rangeStart, fl::u8 rangeEnd)
Map from one full-range 8-bit value into a narrower range of 8-bit values, possibly a range of hues.
Definition lib8tion.h:467
unsigned char u8
Definition s16x16x4.h:132
fl::u8 lsrX4(fl::u8 dividend)
Helper function to divide a number by 16, aka four logical shift right (LSR)'s.

References blend(), brightness, lsrX4(), and map8().

+ Here is the call graph for this function:

◆ ColorFromPalette() [2/8]

CHSV fl::ColorFromPalette ( const CHSVPalette256 & pal,
fl::u8 index,
fl::u8 brightness,
TBlendType  )

Definition at line 1171 of file colorutils.cpp.hpp.

1172 {
1173 CHSV hsv = *(&(pal[0]) + index);
1174
1175 if (brightness != 255) {
1176 hsv.value = scale8_video(hsv.value, brightness);
1177 }
1178
1179 return hsv;
1180}

References brightness.

◆ ColorFromPalette() [3/8]

CHSV fl::ColorFromPalette ( const CHSVPalette32 & pal,
fl::u8 index,
fl::u8 brightness,
TBlendType blendType )

Definition at line 1078 of file colorutils.cpp.hpp.

1079 {
1080 if (blendType == LINEARBLEND_NOWRAP) {
1081 index = map8(index, 0, 247); // Blend range is affected by lo3 blend of
1082 // values, remap to avoid wrapping
1083 }
1084
1085 fl::u8 hi5 = index;
1086#if defined(FL_IS_AVR)
1087 hi5 /= 2;
1088 hi5 /= 2;
1089 hi5 /= 2;
1090#else
1091 hi5 >>= 3;
1092#endif
1093 fl::u8 lo3 = index & 0x07;
1094
1095 fl::u8 hi5XsizeofCHSV = hi5 * sizeof(CHSV);
1096 const CHSV *entry = (CHSV *)((fl::u8 *)(&(pal[0])) + hi5XsizeofCHSV);
1097
1098 fl::u8 hue1 = entry->hue;
1099 fl::u8 sat1 = entry->sat;
1100 fl::u8 val1 = entry->val;
1101
1102 fl::u8 blend = lo3 && (blendType != NOBLEND);
1103
1104 if (blend) {
1105
1106 if (hi5 == 31) {
1107 entry = &(pal[0]);
1108 } else {
1109 ++entry;
1110 }
1111
1112 fl::u8 f2 = lo3 << 5;
1113 fl::u8 f1 = 255 - f2;
1114
1115 fl::u8 hue2 = entry->hue;
1116 fl::u8 sat2 = entry->sat;
1117 fl::u8 val2 = entry->val;
1118
1119 // Now some special casing for blending to or from
1120 // either black or white. Black and white don't have
1121 // proper 'hue' of their own, so when ramping from
1122 // something else to/from black/white, we set the 'hue'
1123 // of the black/white color to be the same as the hue
1124 // of the other color, so that you get the expected
1125 // brightness or saturation ramp, with hue staying
1126 // constant:
1127
1128 // If we are starting from white (sat=0)
1129 // or black (val=0), adopt the target hue.
1130 if (sat1 == 0 || val1 == 0) {
1131 hue1 = hue2;
1132 }
1133
1134 // If we are ending at white (sat=0)
1135 // or black (val=0), adopt the starting hue.
1136 if (sat2 == 0 || val2 == 0) {
1137 hue2 = hue1;
1138 }
1139
1140 sat1 = scale8_LEAVING_R1_DIRTY(sat1, f1);
1141 val1 = scale8_LEAVING_R1_DIRTY(val1, f1);
1142
1143 sat2 = scale8_LEAVING_R1_DIRTY(sat2, f2);
1144 val2 = scale8_LEAVING_R1_DIRTY(val2, f2);
1145
1146 // cleanup_R1();
1147
1148 // These sums can't overflow, so no qadd8 needed.
1149 sat1 += sat2;
1150 val1 += val2;
1151
1152 fl::u8 deltaHue = (fl::u8)(hue2 - hue1);
1153 if (deltaHue & 0x80) {
1154 // go backwards
1155 hue1 -= scale8(256 - deltaHue, f2);
1156 } else {
1157 // go forwards
1158 hue1 += scale8(deltaHue, f2);
1159 }
1160
1161 cleanup_R1();
1162 }
1163
1164 if (brightness != 255) {
1165 val1 = scale8_video(val1, brightness);
1166 }
1167
1168 return CHSV(hue1, sat1, val1);
1169}

References blend(), brightness, and map8().

+ Here is the call graph for this function:

◆ ColorFromPalette() [4/8]

CRGB fl::ColorFromPalette ( const CRGBPalette16 & pal,
fl::u8 index,
fl::u8 brightness,
TBlendType blendType )

Definition at line 395 of file colorutils.cpp.hpp.

396 {
397 if (blendType == LINEARBLEND_NOWRAP) {
398 index = map8(index, 0, 239); // Blend range is affected by lo4 blend of
399 // values, remap to avoid wrapping
400 }
401
402 // hi4 = index >> 4;
403 fl::u8 hi4 = lsrX4(index);
404 fl::u8 lo4 = index & 0x0F;
405
406 // const CRGB* entry = &(pal[0]) + hi4;
407 // since hi4 is always 0..15, hi4 * sizeof(CRGB) can be a single-byte value,
408 // instead of the two byte 'int' that avr-gcc defaults to.
409 // So, we multiply hi4 X sizeof(CRGB), giving hi4XsizeofCRGB;
410 fl::u8 hi4XsizeofCRGB = hi4 * sizeof(CRGB);
411 // We then add that to a base array pointer.
412 const CRGB *entry = (CRGB *)((fl::u8 *)(&(pal[0])) + hi4XsizeofCRGB);
413
414 fl::u8 blend = lo4 && (blendType != NOBLEND);
415
416 fl::u8 red1 = entry->red;
417 fl::u8 green1 = entry->green;
418 fl::u8 blue1 = entry->blue;
419
420 if (blend) {
421
422 if (hi4 == 15) {
423 entry = &(pal[0]);
424 } else {
425 ++entry;
426 }
427
428 fl::u8 f2 = lo4 << 4;
429 fl::u8 f1 = 255 - f2;
430
431 // rgb1.nscale8(f1);
432 fl::u8 red2 = entry->red;
433 red1 = scale8_LEAVING_R1_DIRTY(red1, f1);
434 red2 = scale8_LEAVING_R1_DIRTY(red2, f2);
435 red1 += red2;
436
437 fl::u8 green2 = entry->green;
438 green1 = scale8_LEAVING_R1_DIRTY(green1, f1);
439 green2 = scale8_LEAVING_R1_DIRTY(green2, f2);
440 green1 += green2;
441
442 fl::u8 blue2 = entry->blue;
443 blue1 = scale8_LEAVING_R1_DIRTY(blue1, f1);
444 blue2 = scale8_LEAVING_R1_DIRTY(blue2, f2);
445 blue1 += blue2;
446
447 cleanup_R1();
448 }
449
450 if (brightness != 255) {
451 if (brightness) {
452 ++brightness; // adjust for rounding
453 // Now, since brightness is nonzero, we don't need the full
454 // scale8_video logic; we can just to scale8 and then add one
455 // (unless scale8 fixed) to all nonzero inputs.
456 if (red1) {
457 red1 = scale8_LEAVING_R1_DIRTY(red1, brightness);
458#if !(FASTLED_SCALE8_FIXED == 1)
459 ++red1;
460#endif
461 }
462 if (green1) {
463 green1 = scale8_LEAVING_R1_DIRTY(green1, brightness);
464#if !(FASTLED_SCALE8_FIXED == 1)
465 ++green1;
466#endif
467 }
468 if (blue1) {
469 blue1 = scale8_LEAVING_R1_DIRTY(blue1, brightness);
470#if !(FASTLED_SCALE8_FIXED == 1)
471 ++blue1;
472#endif
473 }
474 cleanup_R1();
475 } else {
476 red1 = 0;
477 green1 = 0;
478 blue1 = 0;
479 }
480 }
481
482 return CRGB(red1, green1, blue1);
483}
fl::CRGB CRGB
Definition crgb.h:25
fl::CRGB CRGB
Definition video.h:15

References blend(), brightness, lsrX4(), and map8().

Referenced by fl::DemoReel100::bpm(), fl::TwinkleFox::computeOneTwinkle(), fl::Fire2012::draw(), FL_DISABLE_WARNING(), fl::NoisePalette::mapNoiseToLEDsUsingPalette(), fl::PerlinParticlePunch::noiseCircleDraw(), fl::Pacifica::pacifica_one_layer(), fl::PerlinParticlePunch::renderAmbient(), and fl::detail::UpscalePaletteInterpolated().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ColorFromPalette() [5/8]

CRGB fl::ColorFromPalette ( const CRGBPalette256 & pal,
fl::u8 index,
fl::u8 brightness,
TBlendType  )

Definition at line 917 of file colorutils.cpp.hpp.

918 {
919 const CRGB *entry = &(pal[0]) + index;
920
921 fl::u8 red = entry->red;
922 fl::u8 green = entry->green;
923 fl::u8 blue = entry->blue;
924
925 if (brightness != 255) {
926 ++brightness; // adjust for rounding
927 red = scale8_video_LEAVING_R1_DIRTY(red, brightness);
928 green = scale8_video_LEAVING_R1_DIRTY(green, brightness);
929 blue = scale8_video_LEAVING_R1_DIRTY(blue, brightness);
930 cleanup_R1();
931 }
932
933 return CRGB(red, green, blue);
934}

References brightness.

◆ ColorFromPalette() [6/8]

CRGB fl::ColorFromPalette ( const CRGBPalette32 & pal,
fl::u8 index,
fl::u8 brightness,
TBlendType blendType )

Definition at line 733 of file colorutils.cpp.hpp.

734 {
735 if (blendType == LINEARBLEND_NOWRAP) {
736 index = map8(index, 0, 247); // Blend range is affected by lo3 blend of
737 // values, remap to avoid wrapping
738 }
739
740 fl::u8 hi5 = index;
741#if defined(FL_IS_AVR)
742 hi5 /= 2;
743 hi5 /= 2;
744 hi5 /= 2;
745#else
746 hi5 >>= 3;
747#endif
748 fl::u8 lo3 = index & 0x07;
749
750 // const CRGB* entry = &(pal[0]) + hi5;
751 // since hi5 is always 0..31, hi4 * sizeof(CRGB) can be a single-byte value,
752 // instead of the two byte 'int' that avr-gcc defaults to.
753 // So, we multiply hi5 X sizeof(CRGB), giving hi5XsizeofCRGB;
754 fl::u8 hi5XsizeofCRGB = hi5 * sizeof(CRGB);
755 // We then add that to a base array pointer.
756 const CRGB *entry = (CRGB *)((fl::u8 *)(&(pal[0])) + hi5XsizeofCRGB);
757
758 fl::u8 red1 = entry->red;
759 fl::u8 green1 = entry->green;
760 fl::u8 blue1 = entry->blue;
761
762 fl::u8 blend = lo3 && (blendType != NOBLEND);
763
764 if (blend) {
765
766 if (hi5 == 31) {
767 entry = &(pal[0]);
768 } else {
769 ++entry;
770 }
771
772 fl::u8 f2 = lo3 << 5;
773 fl::u8 f1 = 255 - f2;
774
775 fl::u8 red2 = entry->red;
776 red1 = scale8_LEAVING_R1_DIRTY(red1, f1);
777 red2 = scale8_LEAVING_R1_DIRTY(red2, f2);
778 red1 += red2;
779
780 fl::u8 green2 = entry->green;
781 green1 = scale8_LEAVING_R1_DIRTY(green1, f1);
782 green2 = scale8_LEAVING_R1_DIRTY(green2, f2);
783 green1 += green2;
784
785 fl::u8 blue2 = entry->blue;
786 blue1 = scale8_LEAVING_R1_DIRTY(blue1, f1);
787 blue2 = scale8_LEAVING_R1_DIRTY(blue2, f2);
788 blue1 += blue2;
789
790 cleanup_R1();
791 }
792
793 if (brightness != 255) {
794 if (brightness) {
795 ++brightness; // adjust for rounding
796 // Now, since brightness is nonzero, we don't need the full
797 // scale8_video logic; we can just to scale8 and then add one
798 // (unless scale8 fixed) to all nonzero inputs.
799 if (red1) {
800 red1 = scale8_LEAVING_R1_DIRTY(red1, brightness);
801#if !(FASTLED_SCALE8_FIXED == 1)
802 ++red1;
803#endif
804 }
805 if (green1) {
806 green1 = scale8_LEAVING_R1_DIRTY(green1, brightness);
807#if !(FASTLED_SCALE8_FIXED == 1)
808 ++green1;
809#endif
810 }
811 if (blue1) {
812 blue1 = scale8_LEAVING_R1_DIRTY(blue1, brightness);
813#if !(FASTLED_SCALE8_FIXED == 1)
814 ++blue1;
815#endif
816 }
817 cleanup_R1();
818 } else {
819 red1 = 0;
820 green1 = 0;
821 blue1 = 0;
822 }
823 }
824
825 return CRGB(red1, green1, blue1);
826}

References blend(), brightness, and map8().

+ Here is the call graph for this function:

◆ ColorFromPalette() [7/8]

CRGB fl::ColorFromPalette ( const TProgmemRGBPalette16 & pal,
fl::u8 index,
fl::u8 brightness,
TBlendType blendType )

Definition at line 650 of file colorutils.cpp.hpp.

651 {
652 if (blendType == LINEARBLEND_NOWRAP) {
653 index = map8(index, 0, 239); // Blend range is affected by lo4 blend of
654 // values, remap to avoid wrapping
655 }
656
657 // hi4 = index >> 4;
658 fl::u8 hi4 = lsrX4(index);
659 fl::u8 lo4 = index & 0x0F;
660
661 CRGB entry(FL_PGM_READ_DWORD_NEAR(&(pal[0]) + hi4));
662
663 fl::u8 red1 = entry.red;
664 fl::u8 green1 = entry.green;
665 fl::u8 blue1 = entry.blue;
666
667 fl::u8 blend = lo4 && (blendType != NOBLEND);
668
669 if (blend) {
670
671 if (hi4 == 15) {
672 entry = FL_PGM_READ_DWORD_NEAR(&(pal[0]));
673 } else {
674 entry = FL_PGM_READ_DWORD_NEAR(&(pal[1]) + hi4);
675 }
676
677 fl::u8 f2 = lo4 << 4;
678 fl::u8 f1 = 255 - f2;
679
680 fl::u8 red2 = entry.red;
681 red1 = scale8_LEAVING_R1_DIRTY(red1, f1);
682 red2 = scale8_LEAVING_R1_DIRTY(red2, f2);
683 red1 += red2;
684
685 fl::u8 green2 = entry.green;
686 green1 = scale8_LEAVING_R1_DIRTY(green1, f1);
687 green2 = scale8_LEAVING_R1_DIRTY(green2, f2);
688 green1 += green2;
689
690 fl::u8 blue2 = entry.blue;
691 blue1 = scale8_LEAVING_R1_DIRTY(blue1, f1);
692 blue2 = scale8_LEAVING_R1_DIRTY(blue2, f2);
693 blue1 += blue2;
694
695 cleanup_R1();
696 }
697
698 if (brightness != 255) {
699 if (brightness) {
700 ++brightness; // adjust for rounding
701 // Now, since brightness is nonzero, we don't need the full
702 // scale8_video logic; we can just to scale8 and then add one
703 // (unless scale8 fixed) to all nonzero inputs.
704 if (red1) {
705 red1 = scale8_LEAVING_R1_DIRTY(red1, brightness);
706#if !(FASTLED_SCALE8_FIXED == 1)
707 ++red1;
708#endif
709 }
710 if (green1) {
711 green1 = scale8_LEAVING_R1_DIRTY(green1, brightness);
712#if !(FASTLED_SCALE8_FIXED == 1)
713 ++green1;
714#endif
715 }
716 if (blue1) {
717 blue1 = scale8_LEAVING_R1_DIRTY(blue1, brightness);
718#if !(FASTLED_SCALE8_FIXED == 1)
719 ++blue1;
720#endif
721 }
722 cleanup_R1();
723 } else {
724 red1 = 0;
725 green1 = 0;
726 blue1 = 0;
727 }
728 }
729
730 return CRGB(red1, green1, blue1);
731}
#define FL_PGM_READ_DWORD_NEAR(x)
Read a double word (32-bit) from PROGMEM memory.

References blend(), brightness, FL_PGM_READ_DWORD_NEAR, lsrX4(), and map8().

+ Here is the call graph for this function:

◆ ColorFromPalette() [8/8]

CRGB fl::ColorFromPalette ( const TProgmemRGBPalette32 & pal,
fl::u8 index,
fl::u8 brightness,
TBlendType blendType )

Definition at line 828 of file colorutils.cpp.hpp.

829 {
830 if (blendType == LINEARBLEND_NOWRAP) {
831 index = map8(index, 0, 247); // Blend range is affected by lo3 blend of
832 // values, remap to avoid wrapping
833 }
834
835 fl::u8 hi5 = index;
836#if defined(FL_IS_AVR)
837 hi5 /= 2;
838 hi5 /= 2;
839 hi5 /= 2;
840#else
841 hi5 >>= 3;
842#endif
843 fl::u8 lo3 = index & 0x07;
844
845 CRGB entry(FL_PGM_READ_DWORD_NEAR(&(pal[0]) + hi5));
846
847 fl::u8 red1 = entry.red;
848 fl::u8 green1 = entry.green;
849 fl::u8 blue1 = entry.blue;
850
851 fl::u8 blend = lo3 && (blendType != NOBLEND);
852
853 if (blend) {
854
855 if (hi5 == 31) {
856 entry = FL_PGM_READ_DWORD_NEAR(&(pal[0]));
857 } else {
858 entry = FL_PGM_READ_DWORD_NEAR(&(pal[1]) + hi5);
859 }
860
861 fl::u8 f2 = lo3 << 5;
862 fl::u8 f1 = 255 - f2;
863
864 fl::u8 red2 = entry.red;
865 red1 = scale8_LEAVING_R1_DIRTY(red1, f1);
866 red2 = scale8_LEAVING_R1_DIRTY(red2, f2);
867 red1 += red2;
868
869 fl::u8 green2 = entry.green;
870 green1 = scale8_LEAVING_R1_DIRTY(green1, f1);
871 green2 = scale8_LEAVING_R1_DIRTY(green2, f2);
872 green1 += green2;
873
874 fl::u8 blue2 = entry.blue;
875 blue1 = scale8_LEAVING_R1_DIRTY(blue1, f1);
876 blue2 = scale8_LEAVING_R1_DIRTY(blue2, f2);
877 blue1 += blue2;
878
879 cleanup_R1();
880 }
881
882 if (brightness != 255) {
883 if (brightness) {
884 ++brightness; // adjust for rounding
885 // Now, since brightness is nonzero, we don't need the full
886 // scale8_video logic; we can just to scale8 and then add one
887 // (unless scale8 fixed) to all nonzero inputs.
888 if (red1) {
889 red1 = scale8_LEAVING_R1_DIRTY(red1, brightness);
890#if !(FASTLED_SCALE8_FIXED == 1)
891 ++red1;
892#endif
893 }
894 if (green1) {
895 green1 = scale8_LEAVING_R1_DIRTY(green1, brightness);
896#if !(FASTLED_SCALE8_FIXED == 1)
897 ++green1;
898#endif
899 }
900 if (blue1) {
901 blue1 = scale8_LEAVING_R1_DIRTY(blue1, brightness);
902#if !(FASTLED_SCALE8_FIXED == 1)
903 ++blue1;
904#endif
905 }
906 cleanup_R1();
907 } else {
908 red1 = 0;
909 green1 = 0;
910 blue1 = 0;
911 }
912 }
913
914 return CRGB(red1, green1, blue1);
915}

References blend(), brightness, FL_PGM_READ_DWORD_NEAR, and map8().

+ Here is the call graph for this function:

◆ ColorFromPaletteExtended() [1/5]

CRGB fl::ColorFromPaletteExtended ( const CRGBPalette16 & pal,
fl::u16 index,
fl::u8 brightness,
TBlendType blendType )

Definition at line 485 of file colorutils.cpp.hpp.

486 {
487 // Extract the four most significant bits of the index as a palette index.
488 fl::u8 index_4bit = index >> 12;
489 // Calculate the 8-bit offset from the palette index.
490 fl::u8 offset = (fl::u8)(index >> 4);
491 // Get the palette entry from the 4-bit index
492 const CRGB *entry = &(pal[0]) + index_4bit;
493 fl::u8 red1 = entry->red;
494 fl::u8 green1 = entry->green;
495 fl::u8 blue1 = entry->blue;
496
497 fl::u8 blend = offset && (blendType != NOBLEND);
498 if (blend) {
499 if (index_4bit == 15) {
500 entry = &(pal[0]);
501 } else {
502 entry++;
503 }
504
505 // Calculate the scaling factor and scaled values for the lower palette
506 // value.
507 fl::u8 f1 = 255 - offset;
508 red1 = scale8_LEAVING_R1_DIRTY(red1, f1);
509 green1 = scale8_LEAVING_R1_DIRTY(green1, f1);
510 blue1 = scale8_LEAVING_R1_DIRTY(blue1, f1);
511
512 // Calculate the scaled values for the neighbouring palette value.
513 fl::u8 red2 = entry->red;
514 fl::u8 green2 = entry->green;
515 fl::u8 blue2 = entry->blue;
516 red2 = scale8_LEAVING_R1_DIRTY(red2, offset);
517 green2 = scale8_LEAVING_R1_DIRTY(green2, offset);
518 blue2 = scale8_LEAVING_R1_DIRTY(blue2, offset);
519 cleanup_R1();
520
521 // These sums can't overflow, so no qadd8 needed.
522 red1 += red2;
523 green1 += green2;
524 blue1 += blue2;
525 }
526 if (brightness != 255) {
527 // nscale8x3_video(red1, green1, blue1, brightness);
528 nscale8x3(red1, green1, blue1, brightness);
529 }
530 return CRGB(red1, green1, blue1);
531}
fl::UISlider offset("Offset", 0.0f, 0.0f, 1.0f, 0.01f)

References blend(), brightness, and offset().

+ Here is the call graph for this function:

◆ ColorFromPaletteExtended() [2/5]

CRGB fl::ColorFromPaletteExtended ( const CRGBPalette256 & pal,
fl::u16 index,
fl::u8 brightness,
TBlendType blendType )

Definition at line 936 of file colorutils.cpp.hpp.

937 {
938 // Extract the eight most significant bits of the index as a palette index.
939 fl::u8 index_8bit = index >> 8;
940 // Calculate the 8-bit offset from the palette index.
941 fl::u8 offset = index & 0xff;
942 // Get the palette entry from the 8-bit index
943 const CRGB *entry = &(pal[0]) + index_8bit;
944 fl::u8 red1 = entry->red;
945 fl::u8 green1 = entry->green;
946 fl::u8 blue1 = entry->blue;
947
948 fl::u8 blend = offset && (blendType != NOBLEND);
949 if (blend) {
950 if (index_8bit == 255) {
951 entry = &(pal[0]);
952 } else {
953 entry++;
954 }
955
956 // Calculate the scaling factor and scaled values for the lower palette
957 // value.
958 fl::u8 f1 = 255 - offset;
959 red1 = scale8_LEAVING_R1_DIRTY(red1, f1);
960 green1 = scale8_LEAVING_R1_DIRTY(green1, f1);
961 blue1 = scale8_LEAVING_R1_DIRTY(blue1, f1);
962
963 // Calculate the scaled values for the neighbouring palette value.
964 fl::u8 red2 = entry->red;
965 fl::u8 green2 = entry->green;
966 fl::u8 blue2 = entry->blue;
967 red2 = scale8_LEAVING_R1_DIRTY(red2, offset);
968 green2 = scale8_LEAVING_R1_DIRTY(green2, offset);
969 blue2 = scale8_LEAVING_R1_DIRTY(blue2, offset);
970 cleanup_R1();
971
972 // These sums can't overflow, so no qadd8 needed.
973 red1 += red2;
974 green1 += green2;
975 blue1 += blue2;
976 }
977 if (brightness != 255) {
978 // nscale8x3_video(red1, green1, blue1, brightness);
979 nscale8x3(red1, green1, blue1, brightness);
980 }
981 return CRGB(red1, green1, blue1);
982}

References blend(), brightness, and offset().

+ Here is the call graph for this function:

◆ ColorFromPaletteExtended() [3/5]

CRGB fl::ColorFromPaletteExtended ( const CRGBPalette32 & pal,
fl::u16 index,
fl::u8 brightness,
TBlendType blendType )

Definition at line 340 of file colorutils.cpp.hpp.

341 {
342 // Extract the five most significant bits of the index as a palette index.
343 fl::u8 index_5bit = (index >> 11);
344 // Calculate the 8-bit offset from the palette index.
345 fl::u8 offset = (fl::u8)(index >> 3);
346 // Get the palette entry from the 5-bit index
347 const CRGB *entry = &(pal[0]) + index_5bit;
348 fl::u8 red1 = entry->red;
349 fl::u8 green1 = entry->green;
350 fl::u8 blue1 = entry->blue;
351
352 fl::u8 blend = offset && (blendType != NOBLEND);
353 if (blend) {
354 if (index_5bit == 31) {
355 entry = &(pal[0]);
356 } else {
357 entry++;
358 }
359
360 // Calculate the scaling factor and scaled values for the lower palette
361 // value.
362 fl::u8 f1 = 255 - offset;
363 red1 = scale8_LEAVING_R1_DIRTY(red1, f1);
364 green1 = scale8_LEAVING_R1_DIRTY(green1, f1);
365 blue1 = scale8_LEAVING_R1_DIRTY(blue1, f1);
366
367 // Calculate the scaled values for the neighbouring palette value.
368 fl::u8 red2 = entry->red;
369 fl::u8 green2 = entry->green;
370 fl::u8 blue2 = entry->blue;
371 red2 = scale8_LEAVING_R1_DIRTY(red2, offset);
372 green2 = scale8_LEAVING_R1_DIRTY(green2, offset);
373 blue2 = scale8_LEAVING_R1_DIRTY(blue2, offset);
374 cleanup_R1();
375
376 // These sums can't overflow, so no qadd8 needed.
377 red1 += red2;
378 green1 += green2;
379 blue1 += blue2;
380 }
381 if (brightness != 255) {
382 // nscale8x3_video(red1, green1, blue1, brightness);
383 nscale8x3(red1, green1, blue1, brightness);
384 }
385 return CRGB(red1, green1, blue1);
386}

References blend(), brightness, and offset().

Referenced by FL_DISABLE_WARNING().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ColorFromPaletteExtended() [4/5]

CRGB fl::ColorFromPaletteExtended ( const TProgmemRGBPalette16 & pal,
fl::u16 index,
fl::u8 brightness,
TBlendType blendType )

Definition at line 540 of file colorutils.cpp.hpp.

541 {
542 // Extract the four most significant bits of the index as a palette index.
543 fl::u8 index_4bit = index >> 12;
544 // Calculate the 8-bit offset from the palette index.
545 fl::u8 offset = (fl::u8)(index >> 4);
546 // Get the palette entry from the 4-bit index
547 CRGB entry(FL_PGM_READ_DWORD_NEAR(&(pal[0]) + index_4bit));
548 fl::u8 red1 = entry.red;
549 fl::u8 green1 = entry.green;
550 fl::u8 blue1 = entry.blue;
551
552 fl::u8 blend = offset && (blendType != NOBLEND);
553 if (blend) {
554 if (index_4bit == 15) {
555 entry = FL_PGM_READ_DWORD_NEAR(&(pal[0]));
556 } else {
557 entry = FL_PGM_READ_DWORD_NEAR(&(pal[1]) + index_4bit);
558 }
559
560 // Calculate the scaling factor and scaled values for the lower palette
561 // value.
562 fl::u8 f1 = 255 - offset;
563 red1 = scale8_LEAVING_R1_DIRTY(red1, f1);
564 green1 = scale8_LEAVING_R1_DIRTY(green1, f1);
565 blue1 = scale8_LEAVING_R1_DIRTY(blue1, f1);
566
567 // Calculate the scaled values for the neighbouring palette value.
568 fl::u8 red2 = entry.red;
569 fl::u8 green2 = entry.green;
570 fl::u8 blue2 = entry.blue;
571 red2 = scale8_LEAVING_R1_DIRTY(red2, offset);
572 green2 = scale8_LEAVING_R1_DIRTY(green2, offset);
573 blue2 = scale8_LEAVING_R1_DIRTY(blue2, offset);
574 cleanup_R1();
575
576 // These sums can't overflow, so no qadd8 needed.
577 red1 += red2;
578 green1 += green2;
579 blue1 += blue2;
580 }
581 if (brightness != 255) {
582 // nscale8x3_video(red1, green1, blue1, brightness);
583 nscale8x3(red1, green1, blue1, brightness);
584 }
585 return CRGB(red1, green1, blue1);
586}

References blend(), brightness, FL_PGM_READ_DWORD_NEAR, and offset().

+ Here is the call graph for this function:

◆ ColorFromPaletteExtended() [5/5]

CRGB fl::ColorFromPaletteExtended ( const TProgmemRGBPalette32 & pal,
fl::u16 index,
fl::u8 brightness,
TBlendType blendType )

Definition at line 595 of file colorutils.cpp.hpp.

596 {
597 // Extract the five most significant bits of the index as a palette index.
598 fl::u8 index_5bit = (index >> 11);
599 // Calculate the 8-bit offset from the palette index.
600 fl::u8 offset = (fl::u8)(index >> 3);
601 // Get the palette entry from the 5-bit index
602 CRGB entry(FL_PGM_READ_DWORD_NEAR(&(pal[0]) + index_5bit));
603 fl::u8 red1 = entry.red;
604 fl::u8 green1 = entry.green;
605 fl::u8 blue1 = entry.blue;
606
607 fl::u8 blend = offset && (blendType != NOBLEND);
608 if (blend) {
609 if (index_5bit == 31) {
610 entry = FL_PGM_READ_DWORD_NEAR(&(pal[0]));
611 } else {
612 entry = FL_PGM_READ_DWORD_NEAR(&(pal[1]) + index_5bit);
613 }
614
615 // Calculate the scaling factor and scaled values for the lower palette
616 // value.
617 fl::u8 f1 = 255 - offset;
618 red1 = scale8_LEAVING_R1_DIRTY(red1, f1);
619 green1 = scale8_LEAVING_R1_DIRTY(green1, f1);
620 blue1 = scale8_LEAVING_R1_DIRTY(blue1, f1);
621
622 // Calculate the scaled values for the neighbouring palette value.
623 fl::u8 red2 = entry.red;
624 fl::u8 green2 = entry.green;
625 fl::u8 blue2 = entry.blue;
626 red2 = scale8_LEAVING_R1_DIRTY(red2, offset);
627 green2 = scale8_LEAVING_R1_DIRTY(green2, offset);
628 blue2 = scale8_LEAVING_R1_DIRTY(blue2, offset);
629 cleanup_R1();
630
631 // These sums can't overflow, so no qadd8 needed.
632 red1 += red2;
633 green1 += green2;
634 blue1 += blue2;
635 }
636 if (brightness != 255) {
637 // nscale8x3_video(red1, green1, blue1, brightness);
638 nscale8x3(red1, green1, blue1, brightness);
639 }
640 return CRGB(red1, green1, blue1);
641}

References blend(), brightness, FL_PGM_READ_DWORD_NEAR, and offset().

+ Here is the call graph for this function:

◆ ColorFromPaletteHD() [1/5]

CRGB16 fl::ColorFromPaletteHD ( const CRGBPalette16 & pal,
fl::u16 index,
fl::u8x8 brightness,
TBlendType blendType )

Definition at line 533 of file colorutils.cpp.hpp.

534 {
535 return ColorFromPaletteHDImpl<4>(
536 RuntimeRGBPaletteReader<16>{fl::span<const CRGB, 16>(&pal.entries[0], 16)},
537 index, brightness, blendType);
538}

References brightness.

◆ ColorFromPaletteHD() [2/5]

CRGB16 fl::ColorFromPaletteHD ( const CRGBPalette256 & pal,
fl::u16 index,
fl::u8x8 brightness,
TBlendType blendType )

Definition at line 984 of file colorutils.cpp.hpp.

985 {
986 return ColorFromPaletteHDImpl<8>(
987 RuntimeRGBPaletteReader<256>{fl::span<const CRGB, 256>(&pal.entries[0], 256)},
988 index, brightness, blendType);
989}

References brightness.

◆ ColorFromPaletteHD() [3/5]

CRGB16 fl::ColorFromPaletteHD ( const CRGBPalette32 & pal,
fl::u16 index,
fl::u8x8 brightness,
TBlendType blendType )

Definition at line 388 of file colorutils.cpp.hpp.

389 {
390 return ColorFromPaletteHDImpl<5>(
391 RuntimeRGBPaletteReader<32>{fl::span<const CRGB, 32>(&pal.entries[0], 32)},
392 index, brightness, blendType);
393}

References brightness.

Referenced by FL_DISABLE_WARNING().

+ Here is the caller graph for this function:

◆ ColorFromPaletteHD() [4/5]

CRGB16 fl::ColorFromPaletteHD ( const TProgmemRGBPalette16 & pal,
fl::u16 index,
fl::u8x8 brightness,
TBlendType blendType )

Definition at line 588 of file colorutils.cpp.hpp.

589 {
590 return ColorFromPaletteHDImpl<4>(
591 ProgmemRGBPaletteReader<16>{fl::span<const fl::u32, 16>(&pal[0], 16)},
592 index, brightness, blendType);
593}

References brightness.

◆ ColorFromPaletteHD() [5/5]

CRGB16 fl::ColorFromPaletteHD ( const TProgmemRGBPalette32 & pal,
fl::u16 index,
fl::u8x8 brightness,
TBlendType blendType )

Definition at line 643 of file colorutils.cpp.hpp.

644 {
645 return ColorFromPaletteHDImpl<5>(
646 ProgmemRGBPaletteReader<32>{fl::span<const fl::u32, 32>(&pal[0], 32)},
647 index, brightness, blendType);
648}

References brightness.

◆ configureAsyncLogService()

void fl::configureAsyncLogService ( u32 interval_ms = 16,
fl::size messages_per_tick = 5 )

Configure async logger automatic servicing task.

Parameters
interval_msService interval in milliseconds (default 16ms = 60fps)
messages_per_tickMessages to flush per service call (default 5)
Note
Can be called at any time to dynamically adjust servicing rate
If not called, defaults are used (16ms interval, 5 messages/tick)

Example:

void setup() {
// Configure before accessing any loggers
fl::configureAsyncLogService(50, 10); // 50ms interval, 10 msgs/tick
FL_LOG_PARLIO_ASYNC_MAIN("Setup complete");
}
void loop() {
fl::delay(10); // Loggers serviced automatically!
}
#define FL_LOG_PARLIO_ASYNC_MAIN(X)
Definition log.h:652
void delay(u32 ms, bool run_async=true) FL_NOEXCEPT
Public delay wrapper that keeps bare Arduino delay() preferred after using fl::delay; while still all...
Definition delay.h:98
void configureAsyncLogService(u32 interval_ms, fl::size messages_per_tick)
Configure async logger automatic servicing task.

Definition at line 276 of file async_logger.cpp.hpp.

276 {
279}
void setMessagesPerTick(fl::size messages_per_tick)
Configure number of messages to flush per service call.
void setInterval(u32 interval_ms)
Change the service interval (default 16ms)
static AsyncLoggerServiceTask & instance()

References fl::detail::AsyncLoggerServiceTask::instance(), fl::detail::AsyncLoggerServiceTask::setInterval(), and fl::detail::AsyncLoggerServiceTask::setMessagesPerTick().

+ Here is the call graph for this function:

◆ const_pointer_cast()

template<typename T, typename Y>
shared_ptr< T > fl::const_pointer_cast ( const shared_ptr< Y > & other)

Definition at line 519 of file shared_ptr.h.

519 {
520 return shared_ptr<T>(other, const_cast<T*>(other.get()));
521}
T * get() const FL_NOEXCEPT
Definition shared_ptr.h:334

References FL_NOEXCEPT.

◆ convert_fastled_timings_to_timedeltas()

void fl::convert_fastled_timings_to_timedeltas ( u16 t1_in,
u16 t2_in,
u16 t3_in,
u16 * out_t0h,
u16 * out_t0l,
u16 * out_t1h,
u16 * out_t1l )
inline

Definition at line 74 of file timing_traits.h.

77 {
78 *out_t0h = t1_in;
79 *out_t0l = t2_in + t3_in;
80 *out_t1h = t1_in + t2_in;
81 *out_t1l = t3_in;
82}

References FL_NOEXCEPT.

◆ cos() [1/3]

double fl::cos ( double value)
inline

Definition at line 359 of file math.h.

359{ return cos_impl_double(value); }
double cos_impl_double(double value)
Definition math.cpp.hpp:280

References cos_impl_double(), FL_NOEXCEPT, and type_rank< T >::value.

+ Here is the call graph for this function:

◆ cos() [2/3]

template<typename T>
enable_if< is_fixed_point< T >::value, T >::type fl::cos ( T angle)
inline

Definition at line 582 of file fixed_point.h.

582{ return T::cos(angle); }

References FL_NOEXCEPT.

Referenced by fl::ScreenMap::Circle(), fillFrameBufferNoise(), makeCorkScrew(), makeRingScreenMap(), and makeScreenMap().

+ Here is the caller graph for this function:

◆ cos() [3/3]

template<typename T>
enable_if< is_integral< T >::value, float >::type fl::cos ( T value)
inline

Definition at line 361 of file math.h.

361{ return cos_impl_float(static_cast<float>(value)); }
float cos_impl_float(float value)
Definition math.cpp.hpp:272

References cos_impl_float(), FL_NOEXCEPT, and type_rank< T >::value.

+ Here is the call graph for this function:

◆ cos16lut()

FASTLED_FORCE_INLINE i16 fl::cos16lut ( u16 angle)

Definition at line 128 of file sin32.h.

128 {
129 u32 angle32 = static_cast<u32>(angle) << 8;
130 return static_cast<i16>(cos32(angle32) >> 16);
131}
FASTLED_FORCE_INLINE i32 cos32(u32 angle) FL_NOEXCEPT
Definition sin32.h:81

References cos32(), FASTLED_FORCE_INLINE, and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ cos32()

FASTLED_FORCE_INLINE i32 fl::cos32 ( u32 angle)

Definition at line 81 of file sin32.h.

81 {
82 return sin32(angle + 4194304u);
83}
FASTLED_FORCE_INLINE i32 sin32(u32 angle) FL_NOEXCEPT
Definition sin32.h:59

References FASTLED_FORCE_INLINE, FL_NOEXCEPT, and sin32().

Referenced by fl::fixed_point_base< Derived, IntBits, FracBits >::cos(), fl::s12x4::cos(), fl::s16x16::cos(), fl::s24x8::cos(), fl::s4x12::cos(), fl::s8x24::cos(), fl::s8x8::cos(), cos16lut(), easeInOutSine16(), easeInSine16(), fl::s12x4::sincos(), fl::s24x8::sincos(), fl::s4x12::sincos(), fl::s8x24::sincos(), and fl::s8x8::sincos().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cos_impl_double()

double fl::cos_impl_double ( double value)

Definition at line 280 of file math.cpp.hpp.

280 {
281#if FL_MATH_USE_LIBM
282 return ::cos(value);
283#else
285#endif
286}
F cos_reduce_(F x) FL_NOEXCEPT
Definition math.cpp.hpp:202

References fl::detail::cos_reduce_(), and type_rank< T >::value.

Referenced by cos().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cos_impl_float()

float fl::cos_impl_float ( float value)

Definition at line 272 of file math.cpp.hpp.

272 {
273#if FL_MATH_USE_LIBM
274 return ::cosf(value);
275#else
277#endif
278}

References fl::detail::cos_reduce_(), and type_rank< T >::value.

Referenced by cos(), and cosf().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cosf()

float fl::cosf ( float value)
inline

Definition at line 358 of file math.h.

358{ return cos_impl_float(value); }

References cos_impl_float(), FL_NOEXCEPT, and type_rank< T >::value.

Referenced by fl::detail::BiquadFilterImpl< T >::bandpass(), fl::detail::BiquadFilterImpl< T >::butterworth(), fl::ArchimedeanSpiralPath::compute(), fl::CirclePath::compute(), fl::GielisCurvePath::compute(), fl::HeartPath::compute(), fl::PhyllotaxisPath::compute(), fl::RosePath::compute(), fl::Luminova::draw(), fl::Water::draw(), fl::Water_FP::draw(), drawRadialSpectrum(), fl::FlowFieldFloat::emitOrbitalDots(), FL_DISABLE_WARNING(), fl::detail::BiquadFilterImpl< T >::highpass(), loop(), noiseCylinderCRGB(), noiseCylinderHSV16(), noiseRingCRGB(), noiseRingHSV16(), noiseSphereCRGB(), noiseSphereHSV16(), fl::detail::BiquadFilterImpl< T >::notch(), sincos(), and sincos().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ createFastLEDController()

fl::shared_ptr< IFastLED > fl::createFastLEDController ( u8 controllerIndex = 0)

Create a FastLED controller adapter.

Parameters
controllerIndexIndex of the LED controller to use (default: 0)
Returns
Shared pointer to the adapter

Example:

CRGB leds[100];
FastLED.addLeds<WS2812, 5>(leds, 100);
auto controller = createFastLEDController(); // Uses controller index 0
FL_DISABLE_WARNING_PUSH FL_DISABLE_WARNING_GLOBAL_CONSTRUCTORS CFastLED FastLED
Global LED strip management instance.
CLEDController * controller
fl::shared_ptr< IFastLED > createFastLEDController(u8 controllerIndex)
Create a FastLED controller adapter.

Definition at line 138 of file adapter.cpp.hpp.

138 {
139 return fl::make_shared<FastLEDAdapter>(controllerIndex);
140}

References make_shared().

+ Here is the call graph for this function:

◆ createSerialRequestSource()

fl::function< fl::optional< fl::json >()> fl::createSerialRequestSource ( const char * prefix = "")
inline

Create a JSON-RPC RequestSource that reads from fl:: serial input.

Parameters
prefixOptional prefix to strip from input lines (default: "")
Returns
RequestSource callback suitable for fl::Remote constructor
Note
Composes transport layer (serial I/O) with protocol layer (JSON-RPC normalization)

Example:

auto requestSource = fl::createSerialRequestSource();
auto responseSink = fl::createSerialResponseSink("REMOTE: ");
fl::Remote remote(requestSource, responseSink);
fl::unique_ptr< fl::Remote > remote
Definition RpcClient.ino:43
JSON-RPC server with scheduling support.
Definition remote.h:40
fl::function< fl::optional< fl::json >()> createSerialRequestSource(const char *prefix="")
Create a JSON-RPC RequestSource that reads from fl:: serial input.
Definition serial.h:109
fl::function< void(const fl::json &)> createSerialResponseSink(const char *prefix="REMOTE: ")
Create a JSON-RPC ResponseSink that writes to fl:: serial output.
Definition serial.h:162

Definition at line 109 of file serial.h.

109 {
110 return [prefix]() -> fl::optional<fl::json> {
111 // Non-blocking check - any data available?
112 int avail = fl::available();
113 if (avail <= 0) {
114 return fl::nullopt;
115 }
116
117 // Data available - read a complete line.
118 // On Arduino platforms, fl::readLine() delegates to Serial.readStringUntil()
119 // which uses yield() (immediate context switch) for fast USB CDC multi-packet
120 // assembly. On other platforms, falls back to character-by-character reading.
121 auto line = fl::readLine('\n', '\r', fl::optional<u32>(1000));
122 if (!line.has_value() || line->empty()) {
123 return fl::nullopt;
124 }
125
126 // Use string_view for zero-copy prefix stripping and trimming
127 fl::string_view view = *line;
128
129 // Strip prefix if present
130 if (prefix && prefix[0] != '\0') {
131 if (view.starts_with(prefix)) {
132 view.remove_prefix(fl::strlen(prefix));
133 }
134 }
135
136 // Trim leading whitespace
137 while (!view.empty() && fl::isspace(view.front())) {
138 view.remove_prefix(1);
139 }
140
141 // Trim trailing whitespace
142 while (!view.empty() && fl::isspace(view.back())) {
143 view.remove_suffix(1);
144 }
145
146 // Only parse if input starts with '{'
147 if (view.empty() || view[0] != '{') {
148 return fl::nullopt;
149 }
150
151 // Single copy when parsing JSON (unavoidable - JSON needs owned string)
152 fl::string input(view);
153 return fl::json::parse(input);
154 };
155}
static json parse(const fl::string &txt) FL_NOEXCEPT
Definition json.h:677
constexpr bool empty() const FL_NOEXCEPT
void remove_suffix(fl::size n) FL_NOEXCEPT
constexpr const char & front() const FL_NOEXCEPT
Definition string_view.h:86
bool starts_with(string_view sv) const FL_NOEXCEPT
constexpr const char & back() const FL_NOEXCEPT
Definition string_view.h:90
void remove_prefix(fl::size n) FL_NOEXCEPT
int available()
size_t strlen(const char *s) FL_NOEXCEPT
Optional< T > optional
Definition optional.h:16
constexpr nullopt_t nullopt
Definition optional.h:13
bool isspace(char c) FL_NOEXCEPT
Check if character is whitespace (space, tab, newline, carriage return)
Definition cctype.h:18
fl::optional< fl::string > readLine(char delimiter, char skipChar, fl::optional< u32 > timeoutMs)

References available(), fl::string_view::back(), fl::string_view::empty(), fl::string_view::front(), isspace(), nullopt, fl::json::parse(), readLine(), fl::string_view::remove_prefix(), fl::string_view::remove_suffix(), fl::string_view::starts_with(), and strlen().

Referenced by autoResearchLowMemorySetup(), and createSerialTransport().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ createSerialResponseSink()

fl::function< void(const fl::json &)> fl::createSerialResponseSink ( const char * prefix = "REMOTE: ")
inline

Create a JSON-RPC ResponseSink that writes to fl:: serial output.

Parameters
prefixOptional prefix to prepend to responses (default: "REMOTE: ")
Returns
ResponseSink callback suitable for fl::Remote constructor
Note
Composes protocol layer (schema filtering) with transport layer (serial I/O)

Definition at line 162 of file serial.h.

162 : ") {
163 return [prefix](const fl::json& response) {
164 // Format and write to serial (no filtering needed - protocol uses flat structure)
165 SerialWriter serial;
166 fl::string formatted = formatJsonResponse(response, prefix);
167 writeSerialLine(serial, formatted);
168 };
169}

References formatJsonResponse(), and writeSerialLine().

Referenced by autoResearchLowMemorySetup(), and createSerialTransport().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ createSerialTransport()

fl::pair< fl::function< fl::optional< fl::json >()>, fl::function< void(const fl::json &)> > fl::createSerialTransport ( const char * responsePrefix = "REMOTE: ",
const char * requestPrefix = "" )
inline

Create RequestSource and ResponseSink pair for serial I/O.

Parameters
responsePrefixPrefix for outgoing responses (default: "REMOTE: ")
requestPrefixPrefix to strip from incoming requests (default: "")
Returns
Pair of {RequestSource, ResponseSink} ready for fl::Remote

Example:

auto [source, sink] = fl::transport::createSerialTransport();
fl::Remote remote(source, sink);

Definition at line 182 of file serial.h.

182 : ", const char* requestPrefix = "") {
183 return {createSerialRequestSource(requestPrefix), createSerialResponseSink(responsePrefix)};
184}

References createSerialRequestSource(), and createSerialResponseSink().

+ Here is the call graph for this function:

◆ declval()

template<typename T>
add_rvalue_reference< T >::type fl::declval ( )

References FL_NOEXCEPT.

Referenced by fl::not_null< StringHolderPtr >::operator*().

+ Here is the caller graph for this function:

◆ default_bus_priority()

int fl::default_bus_priority ( Bus b)
constexpr

Default priority assigned to a Bus when registered with the manager.

Higher = preferred. The function is constexpr so callers can use it in constant expressions if needed. Buses without a registered priority fall back to 0.

Definition at line 38 of file bus_priorities.h.

38 {
39 // FORCE-style overrides (FASTLED_ESP32_FORCE_*) are intentionally not
40 // applied here -- the legacy initChannelDrivers() retains its own
41 // priority-bumping logic for backward compatibility. This table is the
42 // baseline used by the new enableDrivers<>() opt-in API.
43 return
44 b == Bus::I2S_SPI ? 10 :
45 b == Bus::LCD_SPI ? 10 :
46 b == Bus::PARLIO ? 4 :
47 b == Bus::LCD_RGB ? 3 :
48 b == Bus::RMT ? 2 :
49 b == Bus::LCD_CLOCKLESS ? 2 :
50 b == Bus::I2S ? 1 :
51 b == Bus::FLEX_IO ? 1 :
52 b == Bus::OBJECT_FLED ? 1 :
53 b == Bus::SPI ? 0 :
54 b == Bus::BIT_BANG ? 0 :
55 b == Bus::STUB ? 0 :
56 b == Bus::UART ? -1 :
57 0;
58}

References BIT_BANG, FL_NOEXCEPT, FLEX_IO, I2S, I2S_SPI, LCD_CLOCKLESS, LCD_RGB, LCD_SPI, OBJECT_FLED, PARLIO, RMT, SPI, STUB, and UART.

◆ default_memory_resource()

memory_resource * fl::default_memory_resource ( )

Get the default memory resource (wraps fl::Malloc / fl::Free / fl::realloc).

Definition at line 73 of file memory_resource.cpp.hpp.

73 {
74 static DefaultMemoryResource instance;
75 return &instance;
76}

References FL_NOEXCEPT.

Referenced by fl::unordered_map_small< Key, Value, Equal >::unordered_map_small(), fl::vector< fl::i16 >::vector(), fl::vector< fl::i16 >::vector(), fl::vector< fl::i16 >::vector(), fl::vector< fl::i16 >::vector(), fl::vector< fl::i16 >::vector(), fl::vector< fl::i16 >::vector(), and fl::vector< fl::i16 >::vector().

+ Here is the caller graph for this function:

◆ default_random()

math::random & fl::default_random ( )

Global default random number generator instance.

All threads share a single Singleton<LockedRandom> so no two threads can produce duplicate sequences from identical seeds.

Definition at line 16 of file random.cpp.hpp.

16 {
18}

References fl::Singleton< T, N >::instance().

Referenced by shuffle().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ degrees()

template<typename T>
T fl::degrees ( T rad)
inlineconstexpr

Definition at line 527 of file math.h.

527 {
528 return rad * static_cast<T>(57.29577951308232); // 180 / PI
529}

References FL_NOEXCEPT.

◆ delay()

template<int Dummy = 0>
void fl::delay ( u32 ms,
bool run_async = true )
inline

Public delay wrapper that keeps bare Arduino delay() preferred after using fl::delay; while still allowing explicit fl::delay() calls.

Parameters
msMilliseconds to delay
run_asyncIf true, pump async tasks during delay (only on platforms with SKETCH_HAS_LARGE_MEMORY==1)

Definition at line 98 of file delay.h.

98 {
99 (void)Dummy;
100 detail::delay_impl(ms, run_async);
101}
void delay_impl(u32 ms, bool run_async)
Internal delay implementation used by the public fl::delay wrapper.

References delay(), fl::detail::delay_impl(), and FL_NOEXCEPT.

Referenced by MidiShieldButton::MidiShieldButton(), ToggleButton::ToggleButton(), fl::HttpConnection::calculateBackoffDelay(), CFastLED::delay(), delay(), fl::third_party::nsgif__next_displayable_frame(), fl::third_party::nsgif_frame_prepare(), and fl::platforms::scopedWatchdogPause3s().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ delaycycles()

template<cycle_t CYCLES>
void fl::delaycycles ( )

Forward declaration of delaycycles template.

Template Parameters
CYCLESthe number of clock cycles to delay
Note
No delay is applied if CYCLES is less than or equal to zero. Specializations for small cycle counts and platform-specific optimizations are defined in delay.cpp

References FL_NOEXCEPT.

Referenced by delaycycles<-1 >(), delaycycles<-10 >(), delaycycles<-2 >(), delaycycles<-3 >(), delaycycles<-4 >(), delaycycles<-5 >(), delaycycles<-6 >(), delaycycles<-7 >(), delaycycles<-8 >(), delaycycles<-9 >(), and delaycycles_min1().

+ Here is the caller graph for this function:

◆ delaycycles< 0 >()

template<>
FASTLED_FORCE_INLINE void fl::delaycycles< 0 > ( )

Definition at line 69 of file delay.cpp.hpp.

69{}

References FASTLED_FORCE_INLINE, and FL_NOEXCEPT.

◆ delaycycles< 1 >()

template<>
void fl::delaycycles< 1 > ( )

Definition at line 75 of file delay.cpp.hpp.

75{ FL_NOP; }

References FL_NOEXCEPT.

Referenced by delaycycles< 11 >(), delaycycles< 21 >(), delaycycles< 31 >(), delaycycles< 41 >(), and delaycycles_min1().

+ Here is the caller graph for this function:

◆ delaycycles< 10 >()

template<>
void fl::delaycycles< 10 > ( )

Definition at line 115 of file delay.cpp.hpp.

115 {
116 FL_NOP2;
117 FL_NOP2;
118 FL_NOP2;
119 FL_NOP2;
120 FL_NOP2;
121}

References FL_NOEXCEPT.

Referenced by delaycycles< 11 >(), delaycycles< 12 >(), delaycycles< 13 >(), delaycycles< 14 >(), delaycycles< 15 >(), delaycycles< 16 >(), delaycycles< 17 >(), delaycycles< 18 >(), delaycycles< 19 >(), delaycycles< 20 >(), delaycycles< 30 >(), delaycycles< 40 >(), and delaycycles< 50 >().

+ Here is the caller graph for this function:

◆ delaycycles< 11 >()

template<>
void fl::delaycycles< 11 > ( )

Definition at line 125 of file delay.cpp.hpp.

void delaycycles< 1 >() FL_NOEXCEPT
Definition delay.cpp.hpp:75
void delaycycles< 10 >() FL_NOEXCEPT

References delaycycles< 1 >(), delaycycles< 10 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 12 >()

template<>
void fl::delaycycles< 12 > ( )

Definition at line 126 of file delay.cpp.hpp.

void delaycycles< 2 >() FL_NOEXCEPT
Definition delay.cpp.hpp:76

References delaycycles< 10 >(), delaycycles< 2 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 13 >()

template<>
void fl::delaycycles< 13 > ( )

Definition at line 127 of file delay.cpp.hpp.

void delaycycles< 3 >() FL_NOEXCEPT
Definition delay.cpp.hpp:77

References delaycycles< 10 >(), delaycycles< 3 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 14 >()

template<>
void fl::delaycycles< 14 > ( )

Definition at line 128 of file delay.cpp.hpp.

void delaycycles< 4 >() FL_NOEXCEPT
Definition delay.cpp.hpp:81

References delaycycles< 10 >(), delaycycles< 4 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 15 >()

template<>
void fl::delaycycles< 15 > ( )

Definition at line 129 of file delay.cpp.hpp.

void delaycycles< 5 >() FL_NOEXCEPT
Definition delay.cpp.hpp:85

References delaycycles< 10 >(), delaycycles< 5 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 16 >()

template<>
void fl::delaycycles< 16 > ( )

Definition at line 130 of file delay.cpp.hpp.

void delaycycles< 6 >() FL_NOEXCEPT
Definition delay.cpp.hpp:91

References delaycycles< 10 >(), delaycycles< 6 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 17 >()

template<>
void fl::delaycycles< 17 > ( )

Definition at line 131 of file delay.cpp.hpp.

void delaycycles< 7 >() FL_NOEXCEPT
Definition delay.cpp.hpp:96

References delaycycles< 10 >(), delaycycles< 7 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 18 >()

template<>
void fl::delaycycles< 18 > ( )

Definition at line 132 of file delay.cpp.hpp.

void delaycycles< 8 >() FL_NOEXCEPT

References delaycycles< 10 >(), delaycycles< 8 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 19 >()

template<>
void fl::delaycycles< 19 > ( )

Definition at line 133 of file delay.cpp.hpp.

void delaycycles< 9 >() FL_NOEXCEPT

References delaycycles< 10 >(), delaycycles< 9 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 2 >()

template<>
void fl::delaycycles< 2 > ( )

Definition at line 76 of file delay.cpp.hpp.

76{ FL_NOP2; }

References FL_NOEXCEPT.

Referenced by delaycycles< 12 >(), delaycycles< 22 >(), delaycycles< 32 >(), and delaycycles< 42 >().

+ Here is the caller graph for this function:

◆ delaycycles< 20 >()

template<>
void fl::delaycycles< 20 > ( )

Definition at line 134 of file delay.cpp.hpp.

References delaycycles< 10 >(), and FL_NOEXCEPT.

Referenced by delaycycles< 21 >(), delaycycles< 22 >(), delaycycles< 23 >(), delaycycles< 24 >(), delaycycles< 25 >(), delaycycles< 26 >(), delaycycles< 27 >(), delaycycles< 28 >(), delaycycles< 29 >(), and delaycycles< 30 >().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ delaycycles< 21 >()

template<>
void fl::delaycycles< 21 > ( )

Definition at line 135 of file delay.cpp.hpp.

void delaycycles< 20 >() FL_NOEXCEPT

References delaycycles< 1 >(), delaycycles< 20 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 22 >()

template<>
void fl::delaycycles< 22 > ( )

Definition at line 136 of file delay.cpp.hpp.

References delaycycles< 2 >(), delaycycles< 20 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 23 >()

template<>
void fl::delaycycles< 23 > ( )

Definition at line 137 of file delay.cpp.hpp.

References delaycycles< 20 >(), delaycycles< 3 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 24 >()

template<>
void fl::delaycycles< 24 > ( )

Definition at line 138 of file delay.cpp.hpp.

References delaycycles< 20 >(), delaycycles< 4 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 25 >()

template<>
void fl::delaycycles< 25 > ( )

Definition at line 139 of file delay.cpp.hpp.

References delaycycles< 20 >(), delaycycles< 5 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 26 >()

template<>
void fl::delaycycles< 26 > ( )

Definition at line 140 of file delay.cpp.hpp.

References delaycycles< 20 >(), delaycycles< 6 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 27 >()

template<>
void fl::delaycycles< 27 > ( )

Definition at line 141 of file delay.cpp.hpp.

References delaycycles< 20 >(), delaycycles< 7 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 28 >()

template<>
void fl::delaycycles< 28 > ( )

Definition at line 142 of file delay.cpp.hpp.

References delaycycles< 20 >(), delaycycles< 8 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 29 >()

template<>
void fl::delaycycles< 29 > ( )

Definition at line 143 of file delay.cpp.hpp.

References delaycycles< 20 >(), delaycycles< 9 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 3 >()

template<>
void fl::delaycycles< 3 > ( )

Definition at line 77 of file delay.cpp.hpp.

77 {
78 FL_NOP;
79 FL_NOP2;
80}

References FL_NOEXCEPT.

Referenced by delaycycles< 13 >(), delaycycles< 23 >(), delaycycles< 33 >(), and delaycycles< 43 >().

+ Here is the caller graph for this function:

◆ delaycycles< 30 >()

template<>
void fl::delaycycles< 30 > ( )

Definition at line 144 of file delay.cpp.hpp.

References delaycycles< 10 >(), delaycycles< 20 >(), and FL_NOEXCEPT.

Referenced by delaycycles< 31 >(), delaycycles< 32 >(), delaycycles< 33 >(), delaycycles< 34 >(), delaycycles< 35 >(), delaycycles< 36 >(), delaycycles< 37 >(), delaycycles< 38 >(), delaycycles< 39 >(), and delaycycles< 40 >().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ delaycycles< 31 >()

template<>
void fl::delaycycles< 31 > ( )

Definition at line 145 of file delay.cpp.hpp.

void delaycycles< 30 >() FL_NOEXCEPT

References delaycycles< 1 >(), delaycycles< 30 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 32 >()

template<>
void fl::delaycycles< 32 > ( )

Definition at line 146 of file delay.cpp.hpp.

References delaycycles< 2 >(), delaycycles< 30 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 33 >()

template<>
void fl::delaycycles< 33 > ( )

Definition at line 147 of file delay.cpp.hpp.

References delaycycles< 3 >(), delaycycles< 30 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 34 >()

template<>
void fl::delaycycles< 34 > ( )

Definition at line 148 of file delay.cpp.hpp.

References delaycycles< 30 >(), delaycycles< 4 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 35 >()

template<>
void fl::delaycycles< 35 > ( )

Definition at line 149 of file delay.cpp.hpp.

References delaycycles< 30 >(), delaycycles< 5 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 36 >()

template<>
void fl::delaycycles< 36 > ( )

Definition at line 150 of file delay.cpp.hpp.

References delaycycles< 30 >(), delaycycles< 6 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 37 >()

template<>
void fl::delaycycles< 37 > ( )

Definition at line 151 of file delay.cpp.hpp.

References delaycycles< 30 >(), delaycycles< 7 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 38 >()

template<>
void fl::delaycycles< 38 > ( )

Definition at line 152 of file delay.cpp.hpp.

References delaycycles< 30 >(), delaycycles< 8 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 39 >()

template<>
void fl::delaycycles< 39 > ( )

Definition at line 153 of file delay.cpp.hpp.

References delaycycles< 30 >(), delaycycles< 9 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 4 >()

template<>
void fl::delaycycles< 4 > ( )

Definition at line 81 of file delay.cpp.hpp.

81 {
82 FL_NOP2;
83 FL_NOP2;
84}

References FL_NOEXCEPT.

Referenced by delaycycles< 14 >(), delaycycles< 24 >(), delaycycles< 34 >(), and delaycycles< 44 >().

+ Here is the caller graph for this function:

◆ delaycycles< 40 >()

template<>
void fl::delaycycles< 40 > ( )

Definition at line 154 of file delay.cpp.hpp.

References delaycycles< 10 >(), delaycycles< 30 >(), and FL_NOEXCEPT.

Referenced by delaycycles< 41 >(), delaycycles< 42 >(), delaycycles< 43 >(), delaycycles< 44 >(), delaycycles< 45 >(), delaycycles< 46 >(), delaycycles< 47 >(), delaycycles< 48 >(), delaycycles< 49 >(), and delaycycles< 50 >().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ delaycycles< 41 >()

template<>
void fl::delaycycles< 41 > ( )

Definition at line 155 of file delay.cpp.hpp.

void delaycycles< 40 >() FL_NOEXCEPT

References delaycycles< 1 >(), delaycycles< 40 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 42 >()

template<>
void fl::delaycycles< 42 > ( )

Definition at line 156 of file delay.cpp.hpp.

References delaycycles< 2 >(), delaycycles< 40 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 43 >()

template<>
void fl::delaycycles< 43 > ( )

Definition at line 157 of file delay.cpp.hpp.

References delaycycles< 3 >(), delaycycles< 40 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 44 >()

template<>
void fl::delaycycles< 44 > ( )

Definition at line 158 of file delay.cpp.hpp.

References delaycycles< 4 >(), delaycycles< 40 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 45 >()

template<>
void fl::delaycycles< 45 > ( )

Definition at line 159 of file delay.cpp.hpp.

References delaycycles< 40 >(), delaycycles< 5 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 46 >()

template<>
void fl::delaycycles< 46 > ( )

Definition at line 160 of file delay.cpp.hpp.

References delaycycles< 40 >(), delaycycles< 6 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 47 >()

template<>
void fl::delaycycles< 47 > ( )

Definition at line 161 of file delay.cpp.hpp.

References delaycycles< 40 >(), delaycycles< 7 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 48 >()

template<>
void fl::delaycycles< 48 > ( )

Definition at line 162 of file delay.cpp.hpp.

References delaycycles< 40 >(), delaycycles< 8 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 49 >()

template<>
void fl::delaycycles< 49 > ( )

Definition at line 163 of file delay.cpp.hpp.

References delaycycles< 40 >(), delaycycles< 9 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 5 >()

template<>
void fl::delaycycles< 5 > ( )

Definition at line 85 of file delay.cpp.hpp.

85 {
86 FL_NOP2;
87 FL_NOP2;
88 FL_NOP;
89}

References FL_NOEXCEPT.

Referenced by delaycycles< 15 >(), delaycycles< 25 >(), delaycycles< 35 >(), and delaycycles< 45 >().

+ Here is the caller graph for this function:

◆ delaycycles< 50 >()

template<>
void fl::delaycycles< 50 > ( )

Definition at line 164 of file delay.cpp.hpp.

References delaycycles< 10 >(), delaycycles< 40 >(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles< 6 >()

template<>
void fl::delaycycles< 6 > ( )

Definition at line 91 of file delay.cpp.hpp.

91 {
92 FL_NOP2;
93 FL_NOP2;
94 FL_NOP2;
95}

References FL_NOEXCEPT.

Referenced by delaycycles< 16 >(), delaycycles< 26 >(), delaycycles< 36 >(), and delaycycles< 46 >().

+ Here is the caller graph for this function:

◆ delaycycles< 7 >()

template<>
void fl::delaycycles< 7 > ( )

Definition at line 96 of file delay.cpp.hpp.

96 {
97 FL_NOP2;
98 FL_NOP2;
99 FL_NOP2;
100 FL_NOP;
101}

References FL_NOEXCEPT.

Referenced by delaycycles< 17 >(), delaycycles< 27 >(), delaycycles< 37 >(), and delaycycles< 47 >().

+ Here is the caller graph for this function:

◆ delaycycles< 8 >()

template<>
void fl::delaycycles< 8 > ( )

Definition at line 102 of file delay.cpp.hpp.

102 {
103 FL_NOP2;
104 FL_NOP2;
105 FL_NOP2;
106 FL_NOP2;
107}

References FL_NOEXCEPT.

Referenced by delaycycles< 18 >(), delaycycles< 28 >(), delaycycles< 38 >(), and delaycycles< 48 >().

+ Here is the caller graph for this function:

◆ delaycycles< 9 >()

template<>
void fl::delaycycles< 9 > ( )

Definition at line 108 of file delay.cpp.hpp.

108 {
109 FL_NOP2;
110 FL_NOP2;
111 FL_NOP2;
112 FL_NOP2;
113 FL_NOP;
114}

References FL_NOEXCEPT.

Referenced by delaycycles< 19 >(), delaycycles< 29 >(), delaycycles< 39 >(), and delaycycles< 49 >().

+ Here is the caller graph for this function:

◆ delaycycles<-1 >()

template<>
FASTLED_FORCE_INLINE void fl::delaycycles<-1 > ( )

Definition at line 68 of file delay.cpp.hpp.

68{}

References delaycycles(), FASTLED_FORCE_INLINE, and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles<-10 >()

template<>
FASTLED_FORCE_INLINE void fl::delaycycles<-10 > ( )

Definition at line 59 of file delay.cpp.hpp.

59{}

References delaycycles(), FASTLED_FORCE_INLINE, and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles<-2 >()

template<>
FASTLED_FORCE_INLINE void fl::delaycycles<-2 > ( )

Definition at line 67 of file delay.cpp.hpp.

67{}

References delaycycles(), FASTLED_FORCE_INLINE, and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles<-3 >()

template<>
FASTLED_FORCE_INLINE void fl::delaycycles<-3 > ( )

Definition at line 66 of file delay.cpp.hpp.

66{}

References delaycycles(), FASTLED_FORCE_INLINE, and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles<-4 >()

template<>
FASTLED_FORCE_INLINE void fl::delaycycles<-4 > ( )

Definition at line 65 of file delay.cpp.hpp.

65{}

References delaycycles(), FASTLED_FORCE_INLINE, and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles<-5 >()

template<>
FASTLED_FORCE_INLINE void fl::delaycycles<-5 > ( )

Definition at line 64 of file delay.cpp.hpp.

64{}

References delaycycles(), FASTLED_FORCE_INLINE, and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles<-6 >()

template<>
FASTLED_FORCE_INLINE void fl::delaycycles<-6 > ( )

Definition at line 63 of file delay.cpp.hpp.

63{}

References delaycycles(), FASTLED_FORCE_INLINE, and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles<-7 >()

template<>
FASTLED_FORCE_INLINE void fl::delaycycles<-7 > ( )

Definition at line 62 of file delay.cpp.hpp.

62{}

References delaycycles(), FASTLED_FORCE_INLINE, and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles<-8 >()

template<>
FASTLED_FORCE_INLINE void fl::delaycycles<-8 > ( )

Definition at line 61 of file delay.cpp.hpp.

61{}

References delaycycles(), FASTLED_FORCE_INLINE, and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles<-9 >()

template<>
FASTLED_FORCE_INLINE void fl::delaycycles<-9 > ( )

Definition at line 60 of file delay.cpp.hpp.

60{}

References delaycycles(), FASTLED_FORCE_INLINE, and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delaycycles_min1()

template<cycle_t CYCLES>
void fl::delaycycles_min1 ( )
inline

A variant of delaycycles that will always delay at least one cycle.

Template Parameters
CYCLESthe number of clock cycles to delay

Definition at line 75 of file delay.h.

75 {
77 delaycycles<CYCLES - 1>();
78}
void delaycycles() FL_NOEXCEPT
Forward declaration of delaycycles template.

References delaycycles(), delaycycles< 1 >(), delaycycles_min1(), and FL_NOEXCEPT.

Referenced by delaycycles_min1().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ delayMicroseconds()

void fl::delayMicroseconds ( u32 us)

Delay for a given number of microseconds.

Parameters
usMicroseconds to delay

Definition at line 206 of file delay.cpp.hpp.

206 {
207 // Direct pass-through to platform layer (no async pumping for microsecond precision)
208 fl::platforms::delayMicroseconds(us);
209}

References FL_NOEXCEPT.

Referenced by delayUs(), fl::third_party::ezWS2812::end_transfer(), fl::third_party::ezWS2812gpio::end_transfer(), executeToggles(), readSerialStringUntil(), readStringUntil(), and fl::validation::testRxChannel().

+ Here is the caller graph for this function:

◆ delayMillis()

void fl::delayMillis ( u32 ms)

Delay for a given number of milliseconds (legacy - no async pumping)

Parameters
msMilliseconds to delay

Definition at line 201 of file delay.cpp.hpp.

201 {
202 // Legacy function - no async pumping (backward compatibility)
203 detail::delay_impl(ms, false);
204}

References fl::detail::delay_impl(), and FL_NOEXCEPT.

Referenced by SketchHalt::check().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ delayMs()

void fl::delayMs ( u32 ms,
bool run_async = true )
inline

Shorter alias for delay with optional async task pumping.

Parameters
msMilliseconds to delay
run_asyncIf true, pump async tasks during delay (only on platforms with SKETCH_HAS_LARGE_MEMORY==1)

Definition at line 120 of file delay.h.

120 {
121 detail::delay_impl(ms, run_async);
122}

References fl::detail::delay_impl(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delayNanoseconds() [1/3]

template<fl::u32 NS>
FASTLED_FORCE_INLINE void fl::delayNanoseconds ( )

Delay for a compile-time constant number of nanoseconds.

Template Parameters
NSNumber of nanoseconds (at compile-time)

Definition at line 47 of file delay.h.

47 {
48 // Delegate to platform-specific implementation with compile-time constant
49 // Platform-specific delayNanoseconds_impl() functions are provided by platforms/delay.h
50 delayNanoseconds_impl(NS);
51}
#define NS(_NS)
Convert from nanoseconds to number of clock cycles.

References FASTLED_FORCE_INLINE, FL_NOEXCEPT, and NS.

Referenced by delayNs(), delayNs(), and delayNs().

+ Here is the caller graph for this function:

◆ delayNanoseconds() [2/3]

void fl::delayNanoseconds ( fl::u32 ns)

Delay for a runtime number of nanoseconds.

Parameters
nsNumber of nanoseconds (runtime value)

Definition at line 44 of file delay.cpp.hpp.

44 {
45 delayNanoseconds_impl(ns);
46}

References FL_NOEXCEPT.

◆ delayNanoseconds() [3/3]

void fl::delayNanoseconds ( fl::u32 ns,
fl::u32 hz )

Delay for a runtime number of nanoseconds with explicit clock frequency.

Parameters
nsNumber of nanoseconds
hzCPU frequency in Hz

Definition at line 48 of file delay.cpp.hpp.

48 {
49 delayNanoseconds_impl(ns, hz);
50}

References FL_NOEXCEPT.

◆ delayNs() [1/3]

template<u32 NS>
void fl::delayNs ( )
inline

Shorter alias for delayNanoseconds (template version)

Template Parameters
NSNumber of nanoseconds (at compile-time)

Definition at line 126 of file delay.h.

126 {
128}
FASTLED_FORCE_INLINE void delayNanoseconds() FL_NOEXCEPT
Delay for a compile-time constant number of nanoseconds.
Definition delay.h:47

References delayNanoseconds(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delayNs() [2/3]

void fl::delayNs ( u32 ns)
inline

Shorter alias for delayNanoseconds (runtime version)

Parameters
nsNumber of nanoseconds (runtime value)

Definition at line 132 of file delay.h.

132 {
134}

References delayNanoseconds(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delayNs() [3/3]

void fl::delayNs ( u32 ns,
u32 hz )
inline

Shorter alias for delayNanoseconds with explicit clock frequency.

Parameters
nsNumber of nanoseconds
hzCPU frequency in Hz

Definition at line 139 of file delay.h.

139 {
140 delayNanoseconds(ns, hz);
141}

References delayNanoseconds(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ delayUs()

void fl::delayUs ( u32 us)
inline

Shorter alias for delayMicroseconds.

Parameters
usMicroseconds to delay

Definition at line 113 of file delay.h.

113 {
115}
void delayMicroseconds(u32 us)
Delay for a given number of microseconds.

References delayMicroseconds(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ digitalMultiWrite16()

void fl::digitalMultiWrite16 ( const Pins16 & pins,
fl::span< const u16 > pin_data )

Convenience free function — creates a temporary DigitalMultiWrite16, initializes it, and writes.

For repeated writes, prefer the class directly to amortize the LUT build cost.

Definition at line 385 of file pins.cpp.hpp.

385 {
386 DigitalMultiWrite16 writer;
387 writer.init(pins);
388 writer.write(pin_data);
389}
int pins[]
Definition Spi.ino:11
void write(fl::span< const u16 > pin_data) const
Write pre-transposed 16-bit data to the 16 pins.
Definition pins.cpp.hpp:328
void init(const Pins16 &pins)
Initialize from 16 pin numbers. -1 means "skip this bit position".
Definition pins.cpp.hpp:275
Pre-computed nibble LUT for fast 16-pin digital writes.
Definition pins.h:93

References fl::DigitalMultiWrite16::init(), pins, and fl::DigitalMultiWrite16::write().

+ Here is the call graph for this function:

◆ digitalMultiWrite8()

void fl::digitalMultiWrite8 ( const Pins8 & pins,
fl::span< const u8 > pin_data )

Convenience free function — creates a temporary DigitalMultiWrite8, initializes it, and writes.

For repeated writes, prefer the class directly to amortize the LUT build cost.

Definition at line 265 of file pins.cpp.hpp.

265 {
266 DigitalMultiWrite8 writer;
267 writer.init(pins);
268 writer.write(pin_data);
269}
void init(const Pins8 &pins)
Initialize from 8 pin numbers. -1 means "skip this bit position".
Definition pins.cpp.hpp:157
void write(fl::span< const u8 > pin_data) const
Write pre-transposed byte data to the 8 pins.
Definition pins.cpp.hpp:209
Pre-computed nibble LUT for fast 8-pin digital writes.
Definition pins.h:28

References fl::DigitalMultiWrite8::init(), pins, and fl::DigitalMultiWrite8::write().

+ Here is the call graph for this function:

◆ digitalRead()

PinValue fl::digitalRead ( int pin)

Read digital value from pin.

Parameters
pinPin number (platform-specific numbering)
Returns
Pin value (Low or High)

Definition at line 55 of file pin.cpp.hpp.

55 {
56 return platforms::digitalRead(pin);
57}

Referenced by fl::DigitalPinImpl::high().

+ Here is the caller graph for this function:

◆ digitalWrite()

void fl::digitalWrite ( int pin,
PinValue val )

Write digital value to pin.

Parameters
pinPin number (platform-specific numbering)
valPin value (Low or High)

Definition at line 51 of file pin.cpp.hpp.

51 {
52 platforms::digitalWrite(pin, val);
53}

Referenced by fl::DigitalMultiWrite16::applyNibble(), fl::DigitalMultiWrite8::applyNibble(), fl::third_party::ezWS2812gpio::begin(), fl::third_party::ezWS2812gpio::end(), fl::pwm_state::pwm_isr_handler(), fl::pwm_state::releaseChannel(), setPwmFrequency(), fl::validation::testRxChannel(), and fl::DigitalPinImpl::write().

+ Here is the caller graph for this function:

◆ disable_rgbw_colorimetric_lut()

void fl::disable_rgbw_colorimetric_lut ( )

Definition at line 511 of file rgbw.cpp.hpp.

511{}

References FL_NOEXCEPT.

◆ div1024_32_16()

LIB8STATIC u16 fl::div1024_32_16 ( u32 in32)

Helper routine to divide a 32-bit value by 1024, returning only the low 16 bits.

On AVR, uses optimized assembly (6 shifts vs 40). Used to convert millis to "binary seconds" (1 bsecond == 1024 millis).

Definition at line 45 of file time_functions.h.

45 {
46 u16 out16;
47#if defined(FL_IS_AVR)
48 asm volatile(" lsr %D[in] \n\t"
49 " ror %C[in] \n\t"
50 " ror %B[in] \n\t"
51 " lsr %D[in] \n\t"
52 " ror %C[in] \n\t"
53 " ror %B[in] \n\t"
54 " mov %B[out],%C[in] \n\t"
55 " mov %A[out],%B[in] \n\t"
56 : [in] "+r"(in32), [out] "=r"(out16));
57#else
58 out16 = (in32 >> 10) & 0xFFFF;
59#endif
60 return out16;
61}

References FL_NOEXCEPT, and LIB8STATIC.

Referenced by bseconds16().

+ Here is the caller graph for this function:

◆ downscale()

void fl::downscale ( const CRGB * src,
const XYMap & srcXY,
CRGB * dst,
const XYMap & dstXY )

Referenced by fl::CRGB::downscale(), and FL_DISABLE_WARNING().

+ Here is the caller graph for this function:

◆ downscaleArbitrary()

void fl::downscaleArbitrary ( const CRGB * src,
const XYMap & srcXY,
CRGB * dst,
const XYMap & dstXY )

Referenced by FL_DISABLE_WARNING().

+ Here is the caller graph for this function:

◆ downscaleHalf() [1/2]

void fl::downscaleHalf ( const CRGB * src,
const XYMap & srcXY,
CRGB * dst,
const XYMap & dstXY )

◆ downscaleHalf() [2/2]

void fl::downscaleHalf ( const CRGB * src,
fl::u16 srcWidth,
fl::u16 srcHeight,
CRGB * dst )

Referenced by FL_DISABLE_WARNING().

+ Here is the caller graph for this function:

◆ drawSquare()

void fl::drawSquare ( void * ,
uint16_t ,
uint16_t ,
int ,
int ,
uint32_t ,
uint32_t  )

◆ ease16() [1/2]

void fl::ease16 ( EaseType type,
u16 * src,
u16 * dst,
u16 count )
inline

Definition at line 148 of file ease.h.

148 {
149 switch (type) {
150 case EaseType::EASE_NONE: return;
152 for (u16 i = 0; i < count; i++) {
153 dst[i] = easeInQuad16(src[i]);
154 }
155 break;
156 }
158 for (u16 i = 0; i < count; i++) {
159 dst[i] = easeOutQuad16(src[i]);
160 }
161 break;
162 }
164 for (u16 i = 0; i < count; i++) {
165 dst[i] = easeInOutQuad16(src[i]);
166 }
167 break;
168 }
170 for (u16 i = 0; i < count; i++) {
171 dst[i] = easeInCubic16(src[i]);
172 }
173 break;
174 }
176 for (u16 i = 0; i < count; i++) {
177 dst[i] = easeOutCubic16(src[i]);
178 }
179 break;
180 }
182 for (u16 i = 0; i < count; i++) {
183 dst[i] = easeInOutCubic16(src[i]);
184 }
185 break;
186 }
188 for (u16 i = 0; i < count; i++) {
189 dst[i] = easeInSine16(src[i]);
190 }
191 break;
192 }
194 for (u16 i = 0; i < count; i++) {
195 dst[i] = easeOutSine16(src[i]);
196 }
197 break;
198 }
200 for (u16 i = 0; i < count; i++) {
201 dst[i] = easeInOutSine16(src[i]);
202 }
203 break;
204 }
205 }
206}
u16 easeInQuad16(u16 i)
16-bit quadratic ease-in function Takes an input value 0-65535 and returns an eased value 0-65535
Definition ease.cpp.hpp:189
u16 easeOutQuad16(u16 i)
16-bit quadratic ease-out function Takes an input value 0-65535 and returns an eased value 0-65535
Definition ease.cpp.hpp:237
u16 easeInCubic16(u16 i)
16-bit cubic ease-in function Takes an input value 0-65535 and returns an eased value 0-65535
Definition ease.cpp.hpp:248
u16 easeInSine16(u16 i)
16-bit sine ease-in function Takes an input value 0-65535 and returns an eased value 0-65535
Definition ease.cpp.hpp:274
u16 easeInOutSine16(u16 i)
16-bit sine ease-in/ease-out function Takes an input value 0-65535 and returns an eased value 0-65535
Definition ease.cpp.hpp:326
u16 easeOutCubic16(u16 i)
16-bit cubic ease-out function Takes an input value 0-65535 and returns an eased value 0-65535
Definition ease.cpp.hpp:261
u16 easeOutSine16(u16 i)
16-bit sine ease-out function Takes an input value 0-65535 and returns an eased value 0-65535
Definition ease.cpp.hpp:305
u16 easeInOutCubic16(u16 x)
16-bit cubic ease-in/ease-out function Takes an input value 0-65535 and returns an eased value 0-6553...
Definition ease.cpp.hpp:215
u16 easeInOutQuad16(u16 x)
16-bit quadratic ease-in/ease-out function Takes an input value 0-65535 and returns an eased value 0-...
Definition ease.cpp.hpp:195

References EASE_IN_CUBIC, EASE_IN_OUT_CUBIC, EASE_IN_OUT_QUAD, EASE_IN_OUT_SINE, EASE_IN_QUAD, EASE_IN_SINE, EASE_NONE, EASE_OUT_CUBIC, EASE_OUT_QUAD, EASE_OUT_SINE, easeInCubic16(), easeInOutCubic16(), easeInOutQuad16(), easeInOutSine16(), easeInQuad16(), easeInSine16(), easeOutCubic16(), easeOutQuad16(), easeOutSine16(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ ease16() [2/2]

u16 fl::ease16 ( EaseType type,
u16 i )
inline

Definition at line 132 of file ease.h.

132 {
133 switch (type) {
134 case EaseType::EASE_NONE: return i;
135 case EaseType::EASE_IN_QUAD: return easeInQuad16(i);
141 case EaseType::EASE_IN_SINE: return easeInSine16(i);
144 default: return i;
145 }
146}

References EASE_IN_CUBIC, EASE_IN_OUT_CUBIC, EASE_IN_OUT_QUAD, EASE_IN_OUT_SINE, EASE_IN_QUAD, EASE_IN_SINE, EASE_NONE, EASE_OUT_CUBIC, EASE_OUT_QUAD, EASE_OUT_SINE, easeInCubic16(), easeInOutCubic16(), easeInOutQuad16(), easeInOutSine16(), easeInQuad16(), easeInSine16(), easeOutCubic16(), easeOutQuad16(), easeOutSine16(), and FL_NOEXCEPT.

Referenced by fl::HSV16::colorBoost().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ease8() [1/2]

void fl::ease8 ( EaseType type,
u8 * src,
u8 * dst,
u8 count )
inline

Definition at line 224 of file ease.h.

224 {
225 switch (type) {
226 case EaseType::EASE_NONE: return;
228 for (u8 i = 0; i < count; i++) {
229 dst[i] = easeInQuad8(src[i]);
230 }
231 break;
232 }
234 for (u8 i = 0; i < count; i++) {
235 dst[i] = easeOutQuad8(src[i]);
236 }
237 break;
238 }
240 for (u8 i = 0; i < count; i++) {
241 dst[i] = easeInOutQuad8(src[i]);
242 }
243 break;
244 }
246 for (u8 i = 0; i < count; i++) {
247 dst[i] = easeInCubic8(src[i]);
248 }
249 break;
250 }
252 for (u8 i = 0; i < count; i++) {
253 dst[i] = easeOutCubic8(src[i]);
254 }
255 break;
256 }
258 for (u8 i = 0; i < count; i++) {
259 dst[i] = easeInOutCubic8(src[i]);
260 }
261 break;
262 }
264 for (u8 i = 0; i < count; i++) {
265 dst[i] = easeInSine8(src[i]);
266 }
267 break;
268 }
270 for (u8 i = 0; i < count; i++) {
271 dst[i] = easeOutSine8(src[i]);
272 }
273 break;
274 }
276 for (u8 i = 0; i < count; i++) {
277 dst[i] = easeInOutSine8(src[i]);
278 }
279 break;
280 }
281 }
282}
u8 easeOutSine8(u8 i)
8-bit sine ease-out function Takes an input value 0-255 and returns an eased value 0-255 Smooth sinus...
Definition ease.cpp.hpp:170
u8 easeInQuad8(u8 i)
8-bit quadratic ease-in function Takes an input value 0-255 and returns an eased value 0-255 The curv...
Definition ease.cpp.hpp:58
u8 easeInOutSine8(u8 i)
8-bit sine ease-in/ease-out function Takes an input value 0-255 and returns an eased value 0-255 Smoo...
Definition ease.cpp.hpp:179
u8 easeInCubic8(u8 i)
8-bit cubic ease-in function Takes an input value 0-255 and returns an eased value 0-255 More pronoun...
Definition ease.cpp.hpp:116
u8 easeInSine8(u8 i)
8-bit sine ease-in function Takes an input value 0-255 and returns an eased value 0-255 Smooth sinuso...
Definition ease.cpp.hpp:142
u8 easeOutCubic8(u8 i)
8-bit cubic ease-out function Takes an input value 0-255 and returns an eased value 0-255 More pronou...
Definition ease.cpp.hpp:129
u8 easeInOutQuad8(u8 i)
8-bit quadratic ease-in/ease-out function Takes an input value 0-255 and returns an eased value 0-255...
Definition ease.cpp.hpp:64
u8 easeOutQuad8(u8 i)
8-bit quadratic ease-out function Takes an input value 0-255 and returns an eased value 0-255 The cur...
Definition ease.cpp.hpp:107
u8 easeInOutCubic8(u8 i)
8-bit cubic ease-in/ease-out function Takes an input value 0-255 and returns an eased value 0-255 Mor...
Definition ease.cpp.hpp:84

References EASE_IN_CUBIC, EASE_IN_OUT_CUBIC, EASE_IN_OUT_QUAD, EASE_IN_OUT_SINE, EASE_IN_QUAD, EASE_IN_SINE, EASE_NONE, EASE_OUT_CUBIC, EASE_OUT_QUAD, EASE_OUT_SINE, easeInCubic8(), easeInOutCubic8(), easeInOutQuad8(), easeInOutSine8(), easeInQuad8(), easeInSine8(), easeOutCubic8(), easeOutQuad8(), easeOutSine8(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ ease8() [2/2]

u8 fl::ease8 ( EaseType type,
u8 i )
inline

Definition at line 208 of file ease.h.

208 {
209 switch (type) {
210 case EaseType::EASE_NONE: return i;
211 case EaseType::EASE_IN_QUAD: return easeInQuad8(i);
217 case EaseType::EASE_IN_SINE: return easeInSine8(i);
220 default: return i;
221 }
222}

References EASE_IN_CUBIC, EASE_IN_OUT_CUBIC, EASE_IN_OUT_QUAD, EASE_IN_OUT_SINE, EASE_IN_QUAD, EASE_IN_SINE, EASE_NONE, EASE_OUT_CUBIC, EASE_OUT_QUAD, EASE_OUT_SINE, easeInCubic8(), easeInOutCubic8(), easeInOutQuad8(), easeInOutSine8(), easeInQuad8(), easeInSine8(), easeOutCubic8(), easeOutQuad8(), easeOutSine8(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ easeInCubic16()

u16 fl::easeInCubic16 ( u16 i)

16-bit cubic ease-in function Takes an input value 0-65535 and returns an eased value 0-65535

Definition at line 248 of file ease.cpp.hpp.

248 {
249 // Simple cubic ease-in: i³ scaled to 16-bit range
250 // y = i³ / MAX²
251 constexpr u32 MAX = 0xFFFF; // 65535
252 constexpr fl::u64 DENOM = (fl::u64)MAX * MAX; // 65535²
253 constexpr fl::u64 ROUND = DENOM >> 1; // for rounding
254
255 fl::u64 ii = i;
256 fl::u64 cube = ii * ii * ii; // i³
257 fl::u64 num = cube + ROUND;
258 return u16(num / DENOM);
259}
#define MAX(a, b)
Definition coder.h:60
fl::u64 u64
Definition s16x16x4.h:221

References MAX.

Referenced by ease16(), and ease16().

+ Here is the caller graph for this function:

◆ easeInCubic8()

u8 fl::easeInCubic8 ( u8 i)

8-bit cubic ease-in function Takes an input value 0-255 and returns an eased value 0-255 More pronounced acceleration than quadratic

Definition at line 116 of file ease.cpp.hpp.

116 {
117 // Simple cubic ease-in: i³ scaled to 8-bit range
118 // y = i³ / MAX²
119 constexpr u16 MAX = 0xFF;
120 constexpr u32 DENOM = (u32)MAX * MAX;
121 constexpr u32 ROUND = DENOM >> 1;
122
123 u32 ii = i;
124 u32 cube = ii * ii * ii; // i³
125 u32 num = cube + ROUND;
126 return u8(num / DENOM);
127}

References MAX.

Referenced by ease8(), and ease8().

+ Here is the caller graph for this function:

◆ easeInOutCubic16()

u16 fl::easeInOutCubic16 ( u16 x)

16-bit cubic ease-in/ease-out function Takes an input value 0-65535 and returns an eased value 0-65535

Definition at line 215 of file ease.cpp.hpp.

215 {
216 const u32 MAX = 0xFFFF; // 65535
217 const u32 HALF = (MAX + 1) >> 1; // 32768
218 const fl::u64 M2 = (fl::u64)MAX * MAX; // 65535² = 4 294 836 225
219
220 if (x < HALF) {
221 // first half: y = 4·(x/MAX)³ → y_i = 4·x³ / MAX²
222 fl::u64 xi = x;
223 fl::u64 cube = xi * xi * xi; // x³
224 // add M2/2 for rounding
225 fl::u64 num = 4 * cube + (M2 >> 1);
226 return (u16)(num / M2);
227 } else {
228 // second half: y = 1 − ((2·(1−x/MAX))³)/2
229 // → y_i = MAX − (4·(MAX−x)³ / MAX²)
230 fl::u64 d = MAX - x;
231 fl::u64 cube = d * d * d; // (MAX−x)³
232 fl::u64 num = 4 * cube + (M2 >> 1);
233 return (u16)(MAX - (num / M2));
234 }
235}

References MAX, and x.

Referenced by ease16(), and ease16().

+ Here is the caller graph for this function:

◆ easeInOutCubic8()

u8 fl::easeInOutCubic8 ( u8 i)

8-bit cubic ease-in/ease-out function Takes an input value 0-255 and returns an eased value 0-255 More pronounced easing curve than quadratic

Definition at line 84 of file ease.cpp.hpp.

84 {
85 constexpr u16 MAX = 0xFF; // 255
86 constexpr u16 HALF = (MAX + 1) >> 1; // 128
87 constexpr u32 DENOM = (u32)MAX * MAX; // 255*255 = 65025
88 constexpr u32 ROUND = DENOM >> 1; // for rounding
89
90 if (i < HALF) {
91 // first half: y = 4·(i/MAX)³ → y_i = 4·i³ / MAX²
92 u32 ii = i;
93 u32 cube = ii * ii * ii; // i³
94 u32 num = 4 * cube + ROUND; // 4·i³, +half denom for rounding
95 return u8(num / DENOM);
96 } else {
97 // second half: y = 1 − ((−2·t+2)³)/2
98 // where t = i/MAX; equivalently:
99 // y_i = MAX − (4·(MAX−i)³ / MAX²)
100 u32 d = MAX - i;
101 u32 cube = d * d * d; // (MAX−i)³
102 u32 num = 4 * cube + ROUND;
103 return u8(MAX - (num / DENOM));
104 }
105}

References MAX.

Referenced by ease8(), and ease8().

+ Here is the caller graph for this function:

◆ easeInOutQuad16()

u16 fl::easeInOutQuad16 ( u16 x)

16-bit quadratic ease-in/ease-out function Takes an input value 0-65535 and returns an eased value 0-65535

Definition at line 195 of file ease.cpp.hpp.

195 {
196 // 16-bit quadratic ease-in / ease-out function
197 constexpr u32 MAX = 0xFFFF; // 65535
198 constexpr u32 HALF = (MAX + 1) >> 1; // 32768
199 constexpr u32 DENOM = MAX; // divisor
200 constexpr u32 ROUND = DENOM >> 1; // for rounding
201
202 if (x < HALF) {
203 // first half: y = 2·(x/MAX)² → y_i = 2·x² / MAX
204 fl::u64 xi = x;
205 fl::u64 num = 2 * xi * xi + ROUND; // 2*x², +half for rounding
206 return u16(num / DENOM);
207 } else {
208 // second half: y = 1 − 2·(1−x/MAX)² → y_i = MAX − (2·(MAX−x)² / MAX)
209 fl::u64 d = MAX - x;
210 fl::u64 num = 2 * d * d + ROUND; // 2*(MAX−x)², +half for rounding
211 return u16(MAX - (num / DENOM));
212 }
213}

References MAX, and x.

Referenced by ease16(), and ease16().

+ Here is the caller graph for this function:

◆ easeInOutQuad8()

u8 fl::easeInOutQuad8 ( u8 i)

8-bit quadratic ease-in/ease-out function Takes an input value 0-255 and returns an eased value 0-255 The curve starts slow, accelerates in the middle, then slows down again

Definition at line 64 of file ease.cpp.hpp.

64 {
65 constexpr u16 MAX = 0xFF; // 255
66 constexpr u16 HALF = (MAX + 1) >> 1; // 128
67 constexpr u16 DENOM = MAX; // divisor for scaling
68 constexpr u16 ROUND = DENOM >> 1; // for rounding
69
70 if (i < HALF) {
71 // first half: y = 2·(i/MAX)² → y_i = 2·i² / MAX
72 u32 t = i;
73 u32 num = 2 * t * t + ROUND; // 2*i², +half for rounding
74 return u8(num / DENOM);
75 } else {
76 // second half: y = 1 − 2·(1−i/MAX)²
77 // → y_i = MAX − (2·(MAX−i)² / MAX)
78 u32 d = MAX - i;
79 u32 num = 2 * d * d + ROUND; // 2*(MAX−i)², +half for rounding
80 return u8(MAX - (num / DENOM));
81 }
82}

References MAX, and t.

Referenced by ease8(), and ease8().

+ Here is the caller graph for this function:

◆ easeInOutSine16()

u16 fl::easeInOutSine16 ( u16 i)

16-bit sine ease-in/ease-out function Takes an input value 0-65535 and returns an eased value 0-65535

Definition at line 326 of file ease.cpp.hpp.

326 {
327 // ease-in-out sine: -(cos(π*t) - 1) / 2
328 // Handle boundary conditions explicitly
329 if (i == 0)
330 return 0;
331 if (i == 65535)
332 return 65535;
333
334 // For 16-bit: use cos32 for efficiency and accuracy
335 // Map i from [0,65535] to [0,8388608] in cos32 space (0 to half wave)
336 // Formula: (1 - cos(π*t)) / 2 where t goes from 0 to 1
337 // sin32/cos32 half cycle is 16777216/2 = 8388608
338 u32 angle = ((fl::u64)i * 8388608ULL) / 65535ULL;
339 i32 cos_result = fl::cos32(angle);
340
341 // Convert cos32 output and apply easing formula: (1 - cos(π*t)) / 2
342 // cos32 output range is [-2147418112, 2147418112]
343 // We want: (2147418112 - cos_result) / 2, then scale to [0, 65535]
344 fl::i64 adjusted = (2147418112LL - (fl::i64)cos_result) / 2;
345 return (u16)((fl::u64)adjusted * 65535ULL / 2147418112ULL);
346}
fl::i64 i64
Definition s16x16x4.h:222

References cos32().

Referenced by ease16(), ease16(), and easeInOutSine8().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ easeInOutSine8()

u8 fl::easeInOutSine8 ( u8 i)

8-bit sine ease-in/ease-out function Takes an input value 0-255 and returns an eased value 0-255 Smooth sinusoidal acceleration and deceleration

Definition at line 179 of file ease.cpp.hpp.

179 {
180 // ease-in-out sine: -(cos(π*t) - 1) / 2
181 // Delegate to 16-bit version for consistency and accuracy
182 // Scale 8-bit input to 16-bit range, call 16-bit function, scale result back
183 u16 input16 = map8_to_16(i);
184 u16 result16 = easeInOutSine16(input16);
185 return map16_to_8(result16);
186}
u16 map8_to_16(u8 x) FL_NOEXCEPT
Definition intmap.h:48
u8 map16_to_8(u16 x) FL_NOEXCEPT
Definition intmap.h:66

References easeInOutSine16(), map16_to_8(), and map8_to_16().

Referenced by ease8(), and ease8().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ easeInQuad16()

u16 fl::easeInQuad16 ( u16 i)

16-bit quadratic ease-in function Takes an input value 0-65535 and returns an eased value 0-65535

Definition at line 189 of file ease.cpp.hpp.

189 {
190 // Simple quadratic ease-in: i^2 scaled to 16-bit range
191 // Using scale16(i, i) which computes (i * i) / 65535
192 return scale16(i, i);
193}

Referenced by ease16(), and ease16().

+ Here is the caller graph for this function:

◆ easeInQuad8()

u8 fl::easeInQuad8 ( u8 i)

8-bit quadratic ease-in function Takes an input value 0-255 and returns an eased value 0-255 The curve starts slow and accelerates (ease-in only)

Definition at line 58 of file ease.cpp.hpp.

58 {
59 // Simple quadratic ease-in: i^2 scaled to 8-bit range
60 // Using scale8(i, i) which computes (i * i) / 255
61 return scale8(i, i);
62}

Referenced by ease8(), and ease8().

+ Here is the caller graph for this function:

◆ easeInSine16()

u16 fl::easeInSine16 ( u16 i)

16-bit sine ease-in function Takes an input value 0-65535 and returns an eased value 0-65535

Definition at line 274 of file ease.cpp.hpp.

274 {
275 // ease-in sine: 1 - cos(t * π/2)
276 // Handle boundary conditions explicitly
277 if (i == 0)
278 return 0;
279 // Remove the hard-coded boundary for 65535 and let math handle it
280
281 // For 16-bit: use cos32 for efficiency and accuracy
282 // Map i from [0,65535] to [0,4194304] in cos32 space (zero to quarter wave)
283 // Formula: 1 - cos(t * π/2) where t goes from 0 to 1
284 // sin32/cos32 quarter cycle is 16777216/4 = 4194304
285 u32 angle = ((fl::u64)i * 4194304ULL) / 65535ULL;
286 i32 cos_result = fl::cos32(angle);
287
288 // Convert cos32 output and apply easing formula: 1 - cos(t * π/2)
289 // cos32 output range is [-2147418112, 2147418112]
290 // At t=0: cos(0) = 2147418112, result should be 0
291 // At t=1: cos(π/2) = 0, result should be 65535
292
293 const fl::i64 MAX_COS32 = 2147418112LL;
294
295 // Calculate: (MAX_COS32 - cos_result) and scale to [0, 65535]
296 fl::i64 adjusted = MAX_COS32 - (fl::i64)cos_result;
297
298 // Scale from [0, 2147418112] to [0, 65535]
299 fl::u64 result = (fl::u64)adjusted * 65535ULL + (MAX_COS32 >> 1); // Add half for rounding
300 u16 final_result = (u16)(result / (fl::u64)MAX_COS32);
301
302 return final_result;
303}

References cos32().

Referenced by ease16(), and ease16().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ easeInSine8()

u8 fl::easeInSine8 ( u8 i)

8-bit sine ease-in function Takes an input value 0-255 and returns an eased value 0-255 Smooth sinusoidal acceleration

Definition at line 142 of file ease.cpp.hpp.

142 {
143
144 static const u8 easeInSineTable[256] FL_PROGMEM = {
145 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
146 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4,
147 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8,
148 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 13, 13, 14, 14,
149 15, 16, 16, 17, 17, 18, 18, 19, 20, 20, 21, 21, 22, 23,
150 23, 24, 25, 25, 26, 27, 27, 28, 29, 30, 30, 31, 32, 33,
151 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 42, 43, 44,
152 45, 46, 47, 48, 49, 50, 51, 52, 52, 53, 54, 55, 56, 57,
153 58, 59, 60, 61, 62, 63, 64, 65, 67, 68, 69, 70, 71, 72,
154 73, 74, 75, 76, 77, 79, 80, 81, 82, 83, 84, 86, 87, 88,
155 89, 90, 91, 93, 94, 95, 96, 98, 99, 100, 101, 103, 104, 105,
156 106, 108, 109, 110, 112, 113, 114, 115, 117, 118, 119, 121, 122, 123,
157 125, 126, 127, 129, 130, 132, 133, 134, 136, 137, 139, 140, 141, 143,
158 144, 146, 147, 148, 150, 151, 153, 154, 156, 157, 159, 160, 161, 163,
159 164, 166, 167, 169, 170, 172, 173, 175, 176, 178, 179, 181, 182, 184,
160 185, 187, 188, 190, 191, 193, 194, 196, 197, 199, 200, 202, 204, 205,
161 207, 208, 210, 211, 213, 214, 216, 217, 219, 221, 222, 224, 225, 227,
162 228, 230, 231, 233, 235, 236, 238, 239, 241, 242, 244, 246, 247, 249,
163 250, 252, 253, 255};
164
165 // ease-in sine: 1 - cos(t * π/2)
166 // Handle boundary conditions explicitly
167 return FL_PGM_READ_BYTE_NEAR(&easeInSineTable[i]);
168}
#define FL_PGM_READ_BYTE_NEAR(x)
Read a byte (8-bit) from PROGMEM memory.
#define FL_PROGMEM
PROGMEM keyword for storage.

References FL_PGM_READ_BYTE_NEAR, and FL_PROGMEM.

Referenced by ease8(), and ease8().

+ Here is the caller graph for this function:

◆ easeOutCubic16()

u16 fl::easeOutCubic16 ( u16 i)

16-bit cubic ease-out function Takes an input value 0-65535 and returns an eased value 0-65535

Definition at line 261 of file ease.cpp.hpp.

261 {
262 // ease-out cubic: 1 - (1-t)³
263 // For 16-bit: y = MAX - (MAX-i)³ / MAX²
264 constexpr u32 MAX = 0xFFFF; // 65535
265 constexpr fl::u64 DENOM = (fl::u64)MAX * MAX; // 65535²
266 constexpr fl::u64 ROUND = DENOM >> 1; // for rounding
267
268 fl::u64 d = MAX - i; // (MAX - i)
269 fl::u64 cube = d * d * d; // (MAX-i)³
270 fl::u64 num = cube + ROUND;
271 return u16(MAX - (num / DENOM));
272}

References MAX.

Referenced by ease16(), and ease16().

+ Here is the caller graph for this function:

◆ easeOutCubic8()

u8 fl::easeOutCubic8 ( u8 i)

8-bit cubic ease-out function Takes an input value 0-255 and returns an eased value 0-255 More pronounced deceleration than quadratic

Definition at line 129 of file ease.cpp.hpp.

129 {
130 // ease-out cubic: 1 - (1-t)³
131 // For 8-bit: y = MAX - (MAX-i)³ / MAX²
132 constexpr u16 MAX = 0xFF;
133 constexpr u32 DENOM = (u32)MAX * MAX;
134 constexpr u32 ROUND = DENOM >> 1;
135
136 u32 d = MAX - i; // (MAX - i)
137 u32 cube = d * d * d; // (MAX-i)³
138 u32 num = cube + ROUND;
139 return u8(MAX - (num / DENOM));
140}

References MAX.

Referenced by ease8(), and ease8().

+ Here is the caller graph for this function:

◆ easeOutQuad16()

u16 fl::easeOutQuad16 ( u16 i)

16-bit quadratic ease-out function Takes an input value 0-65535 and returns an eased value 0-65535

Definition at line 237 of file ease.cpp.hpp.

237 {
238 // ease-out quadratic: 1 - (1-t)²
239 // For 16-bit: y = MAX - (MAX-i)² / MAX
240 constexpr u32 MAX = 0xFFFF; // 65535
241 constexpr u32 ROUND = MAX >> 1; // for rounding
242
243 fl::u64 d = MAX - i; // (MAX - i)
244 fl::u64 num = d * d + ROUND; // (MAX-i)² + rounding
245 return u16(MAX - (num / MAX));
246}

References MAX.

Referenced by ease16(), and ease16().

+ Here is the caller graph for this function:

◆ easeOutQuad8()

u8 fl::easeOutQuad8 ( u8 i)

8-bit quadratic ease-out function Takes an input value 0-255 and returns an eased value 0-255 The curve starts fast and decelerates (ease-out only)

Definition at line 107 of file ease.cpp.hpp.

107 {
108 // ease-out is the inverse of ease-in: 1 - (1-t)²
109 // For 8-bit: y = MAX - (MAX-i)² / MAX
110 constexpr u16 MAX = 0xFF;
111 u32 d = MAX - i; // (MAX - i)
112 u32 num = d * d + (MAX >> 1); // (MAX-i)² + rounding
113 return u8(MAX - (num / MAX));
114}

References MAX.

Referenced by ease8(), and ease8().

+ Here is the caller graph for this function:

◆ easeOutSine16()

u16 fl::easeOutSine16 ( u16 i)

16-bit sine ease-out function Takes an input value 0-65535 and returns an eased value 0-65535

Definition at line 305 of file ease.cpp.hpp.

305 {
306 // ease-out sine: sin(t * π/2)
307 // Handle boundary conditions explicitly
308 if (i == 0)
309 return 0;
310 if (i == 65535)
311 return 65535;
312
313 // For 16-bit: use sin32 for efficiency and accuracy
314 // Map i from [0,65535] to [0,4194304] in sin32 space (zero to quarter wave)
315 // Formula: sin(t * π/2) where t goes from 0 to 1
316 // sin32 quarter cycle is 16777216/4 = 4194304
317 u32 angle = ((fl::u64)i * 4194304ULL) / 65535ULL;
318 i32 sin_result = fl::sin32(angle);
319
320 // Convert sin32 output range [-2147418112, 2147418112] to [0, 65535]
321 // sin32 output is in range -32767*65536 to +32767*65536
322 // For ease-out sine, we only use positive portion [0, 2147418112] -> [0, 65535]
323 return (u16)((fl::u64)sin_result * 65535ULL / 2147418112ULL);
324}

References sin32().

Referenced by ease16(), ease16(), and easeOutSine8().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ easeOutSine8()

u8 fl::easeOutSine8 ( u8 i)

8-bit sine ease-out function Takes an input value 0-255 and returns an eased value 0-255 Smooth sinusoidal deceleration

Definition at line 170 of file ease.cpp.hpp.

170 {
171 // ease-out sine: sin(t * π/2)
172 // Delegate to 16-bit version for consistency and accuracy
173 // Scale 8-bit input to 16-bit range, call 16-bit function, scale result back
174 u16 input16 = map8_to_16(i);
175 u16 result16 = easeOutSine16(input16);
176 return map16_to_8(result16);
177}

References easeOutSine16(), map16_to_8(), and map8_to_16().

Referenced by ease8(), and ease8().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ enable_rgbw_colorimetric_lut() [1/2]

bool fl::enable_rgbw_colorimetric_lut ( int )

Definition at line 510 of file rgbw.cpp.hpp.

510{ return false; }

References FL_NOEXCEPT.

◆ enable_rgbw_colorimetric_lut() [2/2]

bool fl::enable_rgbw_colorimetric_lut ( int ,
RgbwLutInterp  )

Definition at line 506 of file rgbw.cpp.hpp.

507 {
508 return false;
509}

References FL_NOEXCEPT.

◆ enableAllDrivers()

void fl::enableAllDrivers ( )

Register every channel driver available on this platform with ChannelManager, restoring 3.10.3-style runtime driver selection.

Convenience counterpart to fl::enableDrivers<Bus...>(). Idempotent — BusTraits<B>::registerWithManager() deduplicates by name on the manager side, so calling more than once is safe.

Performance vs. binary size. Calling this brings every driver TU into the link, which is exactly what the default build avoids (see #2428). Only call when you actually need runtime driver flexibility.

References FL_NOEXCEPT.

Referenced by CFastLED::add(), and CFastLED::enableAllDrivers().

+ Here is the caller graph for this function:

◆ enableDrivers()

template<Bus... Buses>
void fl::enableDrivers ( )
inline

Register the named drivers with ChannelManager for runtime selection.

Each named bus's BusTraits<B>::registerWithManager() is invoked, which:

  1. Lazily constructs the driver singleton (links its translation unit).
  2. Calls ChannelManager::addDriver(priority, instance) so the runtime manager can route channels to it.

Pre-condition: the per-driver bus_traits.h for each B named here must be reachable from the calling translation unit. Including the per-platform driver headers brings the relevant specializations in. Naming a Bus whose BusTraits<B> specialization is not visible produces a clear "implicit instantiation of undefined template" diagnostic.

#include "platforms/esp/32/drivers/rmt/rmt_5/bus_traits.h"
#include "platforms/esp/32/drivers/parlio/bus_traits.h"
void enableDrivers() FL_NOEXCEPT
Register the named drivers with ChannelManager for runtime selection.
Definition bus_traits.h:80

Definition at line 80 of file bus_traits.h.

80 {
81 // C++11-compatible pack expansion via array initializer trick.
82 using expand = int[];
83 (void)expand{0, detail::bus_register_one<Buses>()...};
84}
int bus_register_one() FL_NOEXCEPT
Helper used by enableDrivers<Bus...>() to expand the parameter pack.
Definition bus_traits.h:54

References fl::detail::bus_register_one(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ encodeAPA102()

template<typename InputIterator, typename OutputIterator>
void fl::encodeAPA102 ( InputIterator first,
InputIterator last,
OutputIterator out,
u8 global_brightness = 31 )

Encode pixel data in APA102 format with global brightness.

Template Parameters
InputIteratorIterator yielding fl::array<u8, 3> (3 bytes in wire order)
OutputIteratorOutput iterator accepting uint8_t
Parameters
firstIterator to first pixel
lastIterator past last pixel
outOutput iterator for encoded bytes
global_brightnessGlobal 5-bit brightness (0-31), default 31
Note
All LEDs use the same brightness value
APA102 uses BGR wire order: pixel[0]=Blue, pixel[1]=Green, pixel[2]=Red

Definition at line 45 of file apa102.h.

46 {
47 // Clamp brightness to 5-bit range
48 global_brightness = global_brightness & 0x1F;
49
50 // Start frame: 4 bytes of 0x00
51 *out++ = 0x00;
52 *out++ = 0x00;
53 *out++ = 0x00;
54 *out++ = 0x00;
55
56 // LED data: brightness header + BGR (count pixels as we go)
57 size_t num_leds = 0;
58 while (first != last) {
59 const fl::array<u8, BYTES_PER_PIXEL_RGB>& pixel = *first;
60 *out++ = 0xE0 | global_brightness;
61 *out++ = pixel[0]; // Index 0 (BGR order: Blue)
62 *out++ = pixel[1]; // Index 1 (BGR order: Green)
63 *out++ = pixel[2]; // Index 2 (BGR order: Red)
64 ++first;
65 ++num_leds;
66 }
67
68 // End frame: ⌈num_leds/32⌉ DWords of 0xFF
69 size_t end_dwords = (num_leds / 32) + 1;
70 for (size_t i = 0; i < end_dwords * 4; i++) {
71 *out++ = 0xFF;
72 }
73}

References FL_NOEXCEPT.

Referenced by fl::PixelIterator::writeAPA102().

+ Here is the caller graph for this function:

◆ encodeAPA102_AutoBrightness()

template<typename InputIterator, typename OutputIterator>
FL_NO_INLINE_IF_AVR FL_OPTIMIZE_O2 void fl::encodeAPA102_AutoBrightness ( InputIterator first,
InputIterator last,
OutputIterator out )

Encode pixel data in APA102 format (auto-detected brightness from first pixel)

Template Parameters
InputIteratorIterator yielding fl::array<u8, 3> (3 bytes in wire order)
OutputIteratorOutput iterator accepting uint8_t
Parameters
firstIterator to first pixel
lastIterator past last pixel
outOutput iterator for encoded bytes
Note
Extracts global brightness from max component of first pixel
APA102 uses BGR wire order: pixel[0]=Blue, pixel[1]=Green, pixel[2]=Red
Uses O2 optimization to avoid AVR register allocation issues with LTO
Marked noinline on AVR to prevent register exhaustion from divisions

Definition at line 131 of file apa102.h.

132 {
133 if (first == last) {
134 // Empty range - just write start frame (no end frame needed for 0 LEDs)
135 *out++ = 0x00; *out++ = 0x00; *out++ = 0x00; *out++ = 0x00;
136 return;
137 }
138
139 // Start frame
140 *out++ = 0x00;
141 *out++ = 0x00;
142 *out++ = 0x00;
143 *out++ = 0x00;
144
145 // Extract global brightness from first pixel
146 const fl::array<u8, BYTES_PER_PIXEL_RGB>& first_pixel = *first;
147 const u16 maxBrightness = 0x1F;
148 // Use sequential comparisons to avoid nested fl::max (helps AVR register allocation)
149 u8 max_rg = (first_pixel[2] > first_pixel[1]) ? first_pixel[2] : first_pixel[1];
150 u8 max_component = (max_rg > first_pixel[0]) ? max_rg : first_pixel[0];
151 u16 brightness = ((((u16)max_component + 1) * maxBrightness - 1) >> 8) + 1;
152 u8 global_brightness = static_cast<u8>(brightness);
153
154 // Write first LED with extracted brightness (BGR order: 0=B, 1=G, 2=R)
155 u8 s0 = (maxBrightness * first_pixel[2] + (brightness >> 1)) / brightness; // Red
156 u8 s1 = (maxBrightness * first_pixel[1] + (brightness >> 1)) / brightness; // Green
157 u8 s2 = (maxBrightness * first_pixel[0] + (brightness >> 1)) / brightness; // Blue
158
159 *out++ = 0xE0 | (global_brightness & 0x1F);
160 *out++ = s2; // Blue
161 *out++ = s1; // Green
162 *out++ = s0; // Red
163 ++first;
164
165 // Write remaining LEDs (count as we go)
166 size_t num_leds = 1; // Already wrote first pixel
167 while (first != last) {
168 const fl::array<u8, BYTES_PER_PIXEL_RGB>& pixel = *first;
169 *out++ = 0xE0 | (global_brightness & 0x1F);
170 *out++ = pixel[0]; // Index 0 (BGR order: Blue)
171 *out++ = pixel[1]; // Index 1 (BGR order: Green)
172 *out++ = pixel[2]; // Index 2 (BGR order: Red)
173 ++first;
174 ++num_leds;
175 }
176
177 // End frame
178 size_t end_dwords = (num_leds / 32) + 1;
179 for (size_t i = 0; i < end_dwords * 4; i++) {
180 *out++ = 0xFF;
181 }
182}

References brightness, and FL_NOEXCEPT.

Referenced by fl::PixelIterator::writeAPA102().

+ Here is the caller graph for this function:

◆ encodeAPA102_HD()

template<typename InputIterator, typename BrightnessIterator, typename OutputIterator>
void fl::encodeAPA102_HD ( InputIterator first,
InputIterator last,
BrightnessIterator brightness_first,
OutputIterator out )

Encode pixel data in APA102 format with per-LED brightness.

Template Parameters
InputIteratorIterator yielding fl::array<u8, 3> (3 bytes in wire order)
BrightnessIteratorIterator yielding uint8_t brightness values
OutputIteratorOutput iterator accepting uint8_t
Parameters
firstIterator to first pixel
lastIterator past last pixel
brightness_firstIterator to first brightness value (8-bit, 0-255)
outOutput iterator for encoded bytes
Note
Each LED has individual brightness (HD gamma mode)
APA102 uses BGR wire order: pixel[0]=Blue, pixel[1]=Green, pixel[2]=Red

Definition at line 86 of file apa102.h.

87 {
88 // Start frame: 4 bytes of 0x00
89 *out++ = 0x00;
90 *out++ = 0x00;
91 *out++ = 0x00;
92 *out++ = 0x00;
93
94 // LED data: brightness header + BGR (per-LED brightness, count as we go)
95 size_t num_leds = 0;
96 while (first != last) {
97 const fl::array<u8, BYTES_PER_PIXEL_RGB>& pixel = *first;
98 u8 brightness_8bit = *brightness_first;
99 u8 brightness_5bit = mapBrightness8to5(brightness_8bit);
100
101 *out++ = 0xE0 | brightness_5bit;
102 *out++ = pixel[0]; // Index 0 (BGR order: Blue)
103 *out++ = pixel[1]; // Index 1 (BGR order: Green)
104 *out++ = pixel[2]; // Index 2 (BGR order: Red)
105
106 ++first;
107 ++brightness_first;
108 ++num_leds;
109 }
110
111 // End frame: ⌈num_leds/32⌉ DWords of 0xFF
112 size_t end_dwords = (num_leds / 32) + 1;
113 for (size_t i = 0; i < end_dwords * 4; i++) {
114 *out++ = 0xFF;
115 }
116}
u8 mapBrightness8to5(u8 brightness_8bit) FL_NOEXCEPT
Map 8-bit brightness to 5-bit (0-31)

References FL_NOEXCEPT, and mapBrightness8to5().

Referenced by fl::PixelIterator::writeAPA102().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ encodeHD108()

template<typename InputIterator, typename OutputIterator>
void fl::encodeHD108 ( InputIterator first,
InputIterator last,
OutputIterator out,
u8 global_brightness = 255 )

Encode pixel data in HD108 format with global brightness.

Template Parameters
InputIteratorIterator yielding fl::array<u8, 3> (3 bytes in wire order)
OutputIteratorOutput iterator accepting uint8_t
Parameters
firstIterator to first pixel
lastIterator past last pixel
outOutput iterator for encoded bytes
global_brightnessGlobal 8-bit brightness (0-255), default 255
Note
Uses gamma 2.8 correction for 16-bit RGB
HD108 uses RGB wire order: pixel[0]=Red, pixel[1]=Green, pixel[2]=Blue

Definition at line 38 of file hd108.h.

39 {
40 // Start frame: 64 bits (8 bytes) of 0x00
41 for (int i = 0; i < 8; i++) {
42 *out++ = 0x00;
43 }
44
45 // Compute brightness header bytes (cached for all LEDs)
46 u8 f0, f1;
47 hd108BrightnessHeader(global_brightness, &f0, &f1);
48
49 // LED data: 2-byte header + 6-byte RGB16 (count as we go)
50 size_t num_leds = 0;
51 while (first != last) {
52 const fl::array<u8, BYTES_PER_PIXEL_RGB>& pixel = *first;
53
54 // Apply gamma correction (2.8) to 16-bit (RGB order: 0=R, 1=G, 2=B)
55 u16 r16 = hd108GammaCorrect(pixel[0]); // Red
56 u16 g16 = hd108GammaCorrect(pixel[1]); // Green
57 u16 b16 = hd108GammaCorrect(pixel[2]); // Blue
58
59 // Transmit: 2 header + 6 color bytes (16-bit RGB, big-endian)
60 *out++ = f0;
61 *out++ = f1;
62 *out++ = static_cast<u8>(r16 >> 8);
63 *out++ = static_cast<u8>(r16 & 0xFF);
64 *out++ = static_cast<u8>(g16 >> 8);
65 *out++ = static_cast<u8>(g16 & 0xFF);
66 *out++ = static_cast<u8>(b16 >> 8);
67 *out++ = static_cast<u8>(b16 & 0xFF);
68
69 ++first;
70 ++num_leds;
71 }
72
73 // End frame: (num_leds / 2) + 4 bytes of 0xFF
74 const size_t latch = num_leds / 2 + 4;
75 for (size_t i = 0; i < latch; i++) {
76 *out++ = 0xFF;
77 }
78}
void hd108BrightnessHeader(u8 brightness_8bit, u8 *f0_out, u8 *f1_out) FL_NOEXCEPT
Generate HD108 per-channel gain header bytes.
u16 hd108GammaCorrect(u8 value) FL_NOEXCEPT
Convert 8-bit color to HD108 16-bit gamma-corrected value (gamma 2.8)

References FL_NOEXCEPT, hd108BrightnessHeader(), and hd108GammaCorrect().

Referenced by fl::PixelIterator::writeHD108().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ encodeHD108_HD()

template<typename InputIterator, typename BrightnessIterator, typename OutputIterator>
void fl::encodeHD108_HD ( InputIterator first,
InputIterator last,
BrightnessIterator brightness_first,
OutputIterator out )

Encode pixel data in HD108 format with per-LED brightness.

Template Parameters
InputIteratorIterator yielding fl::array<u8, 3> (3 bytes in wire order)
BrightnessIteratorIterator yielding uint8_t brightness values
OutputIteratorOutput iterator accepting uint8_t
Parameters
firstIterator to first pixel
lastIterator past last pixel
brightness_firstIterator to first brightness value (8-bit, 0-255)
outOutput iterator for encoded bytes
Note
HD108 uses RGB wire order: pixel[0]=Red, pixel[1]=Green, pixel[2]=Blue

Definition at line 90 of file hd108.h.

91 {
92 // Start frame: 64 bits (8 bytes) of 0x00
93 for (int i = 0; i < 8; i++) {
94 *out++ = 0x00;
95 }
96
97 // Brightness conversion cache (avoid recomputing same values)
98 u8 lastBrightness8 = 0;
99 u8 lastF0 = 0xFF, lastF1 = 0xFF; // Invalid markers
100
101 // LED data: 2-byte header + 6-byte RGB16 (count as we go)
102 size_t num_leds = 0;
103 while (first != last) {
104 const fl::array<u8, BYTES_PER_PIXEL_RGB>& pixel = *first;
105 u8 brightness = *brightness_first;
106
107 // Apply gamma correction (2.8) to 16-bit (RGB order: 0=R, 1=G, 2=B)
108 u16 r16 = hd108GammaCorrect(pixel[0]); // Red
109 u16 g16 = hd108GammaCorrect(pixel[1]); // Green
110 u16 b16 = hd108GammaCorrect(pixel[2]); // Blue
111
112 // Compute brightness header (with caching)
113 u8 f0, f1;
114 if (brightness == lastBrightness8 && lastF0 != 0xFF) {
115 f0 = lastF0;
116 f1 = lastF1;
117 } else {
119 lastBrightness8 = brightness;
120 lastF0 = f0;
121 lastF1 = f1;
122 }
123
124 // Transmit: 2 header + 6 color bytes (16-bit RGB, big-endian)
125 *out++ = f0;
126 *out++ = f1;
127 *out++ = static_cast<u8>(r16 >> 8);
128 *out++ = static_cast<u8>(r16 & 0xFF);
129 *out++ = static_cast<u8>(g16 >> 8);
130 *out++ = static_cast<u8>(g16 & 0xFF);
131 *out++ = static_cast<u8>(b16 >> 8);
132 *out++ = static_cast<u8>(b16 & 0xFF);
133
134 ++first;
135 ++brightness_first;
136 ++num_leds;
137 }
138
139 // End frame: (num_leds / 2) + 4 bytes of 0xFF
140 const size_t latch = num_leds / 2 + 4;
141 for (size_t i = 0; i < latch; i++) {
142 *out++ = 0xFF;
143 }
144}

References brightness, FL_NOEXCEPT, hd108BrightnessHeader(), and hd108GammaCorrect().

Referenced by fl::PixelIterator::writeHD108().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ encodeLPD6803()

template<typename InputIterator, typename OutputIterator>
void fl::encodeLPD6803 ( InputIterator first,
InputIterator last,
OutputIterator out )

Encode pixel data in LPD6803 format.

Template Parameters
InputIteratorIterator yielding fl::array<u8, 3> (3 bytes in wire order)
OutputIteratorOutput iterator accepting uint8_t
Parameters
firstIterator to first pixel
lastIterator past last pixel
outOutput iterator for encoded bytes
Note
LPD6803 uses RGB wire order: pixel[0]=Red, pixel[1]=Green, pixel[2]=Blue

Definition at line 35 of file lpd6803.h.

35 {
36 // Start boundary: 4 bytes of 0x00
37 *out++ = 0x00;
38 *out++ = 0x00;
39 *out++ = 0x00;
40 *out++ = 0x00;
41
42 // LED data: 16-bit format (1bbbbbgggggrrrrr, count as we go)
43 size_t num_leds = 0;
44 while (first != last) {
45 const fl::array<u8, BYTES_PER_PIXEL_RGB>& pixel = *first;
46
47 // RGB order: 0=R, 1=G, 2=B
48 u16 command = lpd6803EncodeRGB(pixel[0], pixel[1], pixel[2]);
49
50 *out++ = static_cast<u8>(command >> 8); // MSB
51 *out++ = static_cast<u8>(command & 0xFF); // LSB
52
53 ++first;
54 ++num_leds;
55 }
56
57 // End boundary: (num_leds / 32) DWords of 0xFF000000
58 size_t end_dwords = (num_leds / 32);
59 for (size_t i = 0; i < end_dwords; i++) {
60 *out++ = 0xFF;
61 *out++ = 0x00;
62 *out++ = 0x00;
63 *out++ = 0x00;
64 }
65}
u16 lpd6803EncodeRGB(u8 r, u8 g, u8 b) FL_NOEXCEPT
Convert RGB to LPD6803 16-bit format (1bbbbbgggggrrrrr)

References FL_NOEXCEPT, and lpd6803EncodeRGB().

Referenced by fl::PixelIterator::writeLPD6803().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ encodeLPD8806()

template<typename InputIterator, typename OutputIterator>
void fl::encodeLPD8806 ( InputIterator first,
InputIterator last,
OutputIterator out )

Encode pixel data in LPD8806 format.

Template Parameters
InputIteratorIterator yielding fl::array<u8, 3> (3 bytes in wire order)
OutputIteratorOutput iterator accepting uint8_t
Parameters
firstIterator to first pixel
lastIterator past last pixel
outOutput iterator for encoded bytes
Note
LPD8806 uses GRB wire order: pixel[0]=Green, pixel[1]=Red, pixel[2]=Blue

Definition at line 33 of file lpd8806.h.

33 {
34 // LED data: GRB with MSB set (count as we go)
35 size_t num_leds = 0;
36 while (first != last) {
37 const fl::array<u8, BYTES_PER_PIXEL_RGB>& pixel = *first;
38
39 // LPD8806 requires MSB set on each byte, and uses 7-bit color depth
40 // GRB order: 0=G, 1=R, 2=B
41 *out++ = lpd8806Encode(pixel[0]); // Index 0 (GRB order: Green)
42 *out++ = lpd8806Encode(pixel[1]); // Index 1 (GRB order: Red)
43 *out++ = lpd8806Encode(pixel[2]); // Index 2 (GRB order: Blue)
44
45 ++first;
46 ++num_leds;
47 }
48
49 // Latch: ((num_leds * 3 + 63) / 64) bytes of 0x00
50 size_t latch_bytes = (num_leds * 3 + 63) / 64;
51 for (size_t i = 0; i < latch_bytes; i++) {
52 *out++ = 0x00;
53 }
54}
u8 lpd8806Encode(u8 value) FL_NOEXCEPT
Apply LPD8806 encoding to a single color byte.

References FL_NOEXCEPT, and lpd8806Encode().

Referenced by fl::PixelIterator::writeLPD8806().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ encodeP9813()

template<typename InputIterator, typename OutputIterator>
void fl::encodeP9813 ( InputIterator first,
InputIterator last,
OutputIterator out )

Encode pixel data in P9813 format.

Template Parameters
InputIteratorIterator yielding fl::array<u8, 3> (3 bytes in wire order)
OutputIteratorOutput iterator accepting uint8_t
Parameters
firstIterator to first pixel
lastIterator past last pixel
outOutput iterator for encoded bytes
Note
P9813 uses BGR wire order: pixel[0]=Blue, pixel[1]=Green, pixel[2]=Red

Definition at line 33 of file p9813.h.

33 {
34 // Start boundary: 4 bytes of 0x00
35 *out++ = 0x00;
36 *out++ = 0x00;
37 *out++ = 0x00;
38 *out++ = 0x00;
39
40 // LED data: flag + BGR
41 while (first != last) {
42 const fl::array<u8, BYTES_PER_PIXEL_RGB>& pixel = *first;
43
44 // P9813 flag byte: 0xC0 | checksum (BGR order: 0=B, 1=G, 2=R)
45 u8 flag = p9813FlagByte(pixel[2], pixel[1], pixel[0]); // r, g, b
46
47 *out++ = flag;
48 *out++ = pixel[0]; // Index 0 (BGR order: Blue)
49 *out++ = pixel[1]; // Index 1 (BGR order: Green)
50 *out++ = pixel[2]; // Index 2 (BGR order: Red)
51
52 ++first;
53 }
54
55 // End boundary: 4 bytes of 0x00
56 *out++ = 0x00;
57 *out++ = 0x00;
58 *out++ = 0x00;
59 *out++ = 0x00;
60}
u8 p9813FlagByte(u8 r, u8 g, u8 b) FL_NOEXCEPT
Generate P9813 flag byte from RGB components.

References FL_NOEXCEPT, and p9813FlagByte().

Referenced by fl::PixelIterator::writeP9813().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ encoder_for()

template<typename TIMING>
ClocklessEncoder fl::encoder_for ( )
constexpr

Extract the encoder selector from a compile-time TIMING type.

If TIMING has a static ENCODER member it is returned; otherwise defaults to CLOCKLESS_ENCODER_WS2812.

Examples
/home/runner/work/FastLED/FastLED/src/fl/channels/config.h.

Definition at line 55 of file clockless_encoder.h.

References FL_NOEXCEPT, and type_rank< T >::value.

Referenced by makeClockless(), AutoResearchRemoteControl::registerFunctions(), AutoResearchRemoteControl::runParallelTestImpl(), and AutoResearchRemoteControl::runSingleTestImpl().

+ Here is the caller graph for this function:

◆ encodeSK9822()

template<typename InputIterator, typename OutputIterator>
void fl::encodeSK9822 ( InputIterator first,
InputIterator last,
OutputIterator out,
u8 global_brightness = 31 )

Encode pixel data in SK9822 format with global brightness.

Template Parameters
InputIteratorIterator yielding fl::array<u8, 3> (3 bytes in wire order)
OutputIteratorOutput iterator accepting uint8_t
Parameters
firstIterator to first pixel
lastIterator past last pixel
outOutput iterator for encoded bytes
global_brightnessGlobal 5-bit brightness (0-31), default 31
Note
SK9822 uses BGR wire order: pixel[0]=Blue, pixel[1]=Green, pixel[2]=Red

Definition at line 38 of file sk9822.h.

39 {
40 // Clamp brightness to 5-bit range
41 global_brightness = global_brightness & 0x1F;
42
43 // Start frame: 4 bytes of 0x00
44 *out++ = 0x00;
45 *out++ = 0x00;
46 *out++ = 0x00;
47 *out++ = 0x00;
48
49 // LED data: brightness header + BGR (count as we go)
50 size_t num_leds = 0;
51 while (first != last) {
52 const fl::array<u8, BYTES_PER_PIXEL_RGB>& pixel = *first;
53 *out++ = 0xE0 | global_brightness;
54 *out++ = pixel[0]; // Index 0 (BGR order: Blue)
55 *out++ = pixel[1]; // Index 1 (BGR order: Green)
56 *out++ = pixel[2]; // Index 2 (BGR order: Red)
57 ++first;
58 ++num_leds;
59 }
60
61 // SK9822 difference: end frame uses 0x00 instead of 0xFF
62 size_t end_dwords = (num_leds / 32) + 1;
63 for (size_t i = 0; i < end_dwords * 4; i++) {
64 *out++ = 0x00;
65 }
66}

References FL_NOEXCEPT.

Referenced by fl::PixelIterator::writeSK9822().

+ Here is the caller graph for this function:

◆ encodeSK9822_AutoBrightness()

template<typename InputIterator, typename OutputIterator>
FL_NO_INLINE_IF_AVR void fl::encodeSK9822_AutoBrightness ( InputIterator first,
InputIterator last,
OutputIterator out )

Encode pixel data in SK9822 format (auto-detected brightness from first pixel)

Template Parameters
InputIteratorIterator yielding fl::array<u8, 3> (3 bytes in wire order)
OutputIteratorOutput iterator accepting uint8_t
Parameters
firstIterator to first pixel
lastIterator past last pixel
outOutput iterator for encoded bytes
Note
SK9822 uses BGR wire order: pixel[0]=Blue, pixel[1]=Green, pixel[2]=Red
Uses O2 optimization to avoid AVR register allocation issues with LTO
Marked noinline on AVR to prevent register exhaustion from divisions

Definition at line 121 of file sk9822.h.

122 {
123 if (first == last) {
124 // Empty range - just write start frame
125 *out++ = 0x00; *out++ = 0x00; *out++ = 0x00; *out++ = 0x00;
126 return;
127 }
128
129 // Start frame
130 *out++ = 0x00;
131 *out++ = 0x00;
132 *out++ = 0x00;
133 *out++ = 0x00;
134
135 // Extract global brightness from first pixel
136 const fl::array<u8, BYTES_PER_PIXEL_RGB>& first_pixel = *first;
137 const u16 maxBrightness = 0x1F;
138 // Use sequential comparisons to avoid nested fl::max (helps AVR register allocation)
139 u8 max_rg = (first_pixel[2] > first_pixel[1]) ? first_pixel[2] : first_pixel[1];
140 u8 max_component = (max_rg > first_pixel[0]) ? max_rg : first_pixel[0];
141 u16 brightness = ((((u16)max_component + 1) * maxBrightness - 1) >> 8) + 1;
142 u8 global_brightness = static_cast<u8>(brightness);
143
144 // Write first LED with extracted brightness (BGR order: 0=B, 1=G, 2=R)
145 u8 s0 = (maxBrightness * first_pixel[2] + (brightness >> 1)) / brightness; // Red
146 u8 s1 = (maxBrightness * first_pixel[1] + (brightness >> 1)) / brightness; // Green
147 u8 s2 = (maxBrightness * first_pixel[0] + (brightness >> 1)) / brightness; // Blue
148
149 *out++ = 0xE0 | (global_brightness & 0x1F);
150 *out++ = s2; // Blue
151 *out++ = s1; // Green
152 *out++ = s0; // Red
153 ++first;
154
155 // Write remaining LEDs (count as we go)
156 size_t num_leds = 1; // Already wrote first pixel
157 while (first != last) {
158 const fl::array<u8, BYTES_PER_PIXEL_RGB>& pixel = *first;
159 *out++ = 0xE0 | (global_brightness & 0x1F);
160 *out++ = pixel[0]; // Index 0 (BGR order: Blue)
161 *out++ = pixel[1]; // Index 1 (BGR order: Green)
162 *out++ = pixel[2]; // Index 2 (BGR order: Red)
163 ++first;
164 ++num_leds;
165 }
166
167 // End frame (SK9822 uses 0x00)
168 size_t end_dwords = (num_leds / 32) + 1;
169 for (size_t i = 0; i < end_dwords * 4; i++) {
170 *out++ = 0x00;
171 }
172}

References brightness, and FL_NOEXCEPT.

Referenced by fl::PixelIterator::writeSK9822().

+ Here is the caller graph for this function:

◆ encodeSK9822_HD()

template<typename InputIterator, typename BrightnessIterator, typename OutputIterator>
void fl::encodeSK9822_HD ( InputIterator first,
InputIterator last,
BrightnessIterator brightness_first,
OutputIterator out )

Encode pixel data in SK9822 format with per-LED brightness.

Template Parameters
InputIteratorIterator yielding fl::array<u8, 3> (3 bytes in wire order)
BrightnessIteratorIterator yielding uint8_t brightness values
OutputIteratorOutput iterator accepting uint8_t
Parameters
firstIterator to first pixel
lastIterator past last pixel
brightness_firstIterator to first brightness value (8-bit, 0-255)
outOutput iterator for encoded bytes
Note
SK9822 uses BGR wire order: pixel[0]=Blue, pixel[1]=Green, pixel[2]=Red

Definition at line 78 of file sk9822.h.

79 {
80 // Start frame: 4 bytes of 0x00
81 *out++ = 0x00;
82 *out++ = 0x00;
83 *out++ = 0x00;
84 *out++ = 0x00;
85
86 // LED data: brightness header + BGR (per-LED brightness, count as we go)
87 size_t num_leds = 0;
88 while (first != last) {
89 const fl::array<u8, BYTES_PER_PIXEL_RGB>& pixel = *first;
90 u8 brightness_8bit = *brightness_first;
91 u8 brightness_5bit = mapBrightness8to5(brightness_8bit);
92
93 *out++ = 0xE0 | brightness_5bit;
94 *out++ = pixel[0]; // Index 0 (BGR order: Blue)
95 *out++ = pixel[1]; // Index 1 (BGR order: Green)
96 *out++ = pixel[2]; // Index 2 (BGR order: Red)
97
98 ++first;
99 ++brightness_first;
100 ++num_leds;
101 }
102
103 // SK9822 difference: end frame uses 0x00
104 size_t end_dwords = (num_leds / 32) + 1;
105 for (size_t i = 0; i < end_dwords * 4; i++) {
106 *out++ = 0x00;
107 }
108}

References FL_NOEXCEPT, and mapBrightness8to5().

Referenced by fl::PixelIterator::writeSK9822().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ encodeSM16716()

template<typename InputIterator, typename OutputIterator>
void fl::encodeSM16716 ( InputIterator first,
InputIterator last,
OutputIterator out )

Encode pixel data in SM16716 format.

Template Parameters
InputIteratorIterator yielding fl::array<u8, 3> (3 bytes in wire order)
OutputIteratorOutput iterator accepting uint8_t
Parameters
firstIterator to first pixel
lastIterator past last pixel
outOutput iterator for encoded bytes
Note
Start bit handling is assumed to be done by SPI hardware
SM16716 uses RGB wire order: pixel[0]=Red, pixel[1]=Green, pixel[2]=Blue

Definition at line 32 of file sm16716.h.

32 {
33 // LED data: RGB bytes
34 // (Start bit for each triplet is handled by SPI hardware layer)
35 while (first != last) {
36 const fl::array<u8, BYTES_PER_PIXEL_RGB>& pixel = *first;
37 *out++ = pixel[0]; // Index 0 (RGB order: Red)
38 *out++ = pixel[1]; // Index 1 (RGB order: Green)
39 *out++ = pixel[2]; // Index 2 (RGB order: Blue)
40 ++first;
41 }
42
43 // Header: 50 zero bits (7 bytes of 0x00)
44 for (int i = 0; i < 7; i++) {
45 *out++ = 0x00;
46 }
47}

References FL_NOEXCEPT.

Referenced by fl::PixelIterator::writeSM16716().

+ Here is the caller graph for this function:

◆ encodeUCS7604()

template<typename OutputIterator>
void fl::encodeUCS7604 ( PixelIterator & pixel_iter,
size_t num_leds,
OutputIterator out,
UCS7604Mode mode,
const UCS7604CurrentControl & current,
bool is_rgbw,
const Gamma8 * gamma = nullptr )

Encode complete UCS7604 frame (preamble + padding + pixel data)

Template Parameters
OutputIteratorOutput iterator accepting uint8_t
Parameters
pixel_iterPixelIterator with pixel data and scaling/gamma/dithering
num_ledsNumber of LEDs to encode
outOutput iterator for complete frame
modeUCS7604 protocol mode (8-bit/16-bit)
currentCurrent control settings (wire order RGBW)
is_rgbwTrue for RGBW mode, false for RGB mode
gammaGamma8 LUT for 16-bit modes (nullable, ignored for 8-bit mode)
Note
Outputs: preamble (15 bytes) + padding (0-2 bytes) + LED data
Total output size is always divisible by 3 (required by UCS7604 protocol)

Definition at line 209 of file ucs7604.h.

211 {
212 constexpr size_t PREAMBLE_LEN = 15;
213
214 // Calculate bytes per LED based on mode and RGB/RGBW
215 size_t bytes_per_led;
217 bytes_per_led = is_rgbw ? 4 : 3;
218 } else {
219 bytes_per_led = is_rgbw ? 8 : 6;
220 }
221
222 // Calculate total data size and padding
223 size_t led_data_size = num_leds * bytes_per_led;
224 size_t total_data_size = PREAMBLE_LEN + led_data_size;
225 size_t padding = (3 - (total_data_size % 3)) % 3;
226
227 // Build preamble (15 bytes) with current control
228 buildUCS7604Preamble(out, mode, current.r, current.g, current.b, current.w);
229
230 // Add padding (0-2 zero bytes)
231 for (size_t i = 0; i < padding; ++i) {
232 *out++ = 0;
233 }
234
235 // Encode LED data based on mode and RGB/RGBW
237 if (is_rgbw) {
238 auto range = makeScaledPixelRangeRGBW(&pixel_iter);
239 encodeUCS7604_8bit_RGBW(range.first, range.second, out);
240 } else {
241 auto range = makeScaledPixelRangeRGB(&pixel_iter);
242 encodeUCS7604_8bit_RGB(range.first, range.second, out);
243 }
244 } else {
245 // 16-bit modes — fall back to gamma 2.8 if no gamma provided
246 static fl::shared_ptr<const Gamma8> default_gamma;
247 const Gamma8& g = gamma ? *gamma : *(default_gamma ? default_gamma : (default_gamma = Gamma8::getOrCreate(2.8f)));
248 if (is_rgbw) {
249 auto range = makeScaledPixelRangeRGBW(&pixel_iter);
250 encodeUCS7604_16bit_RGBW(range.first, range.second, out, g);
251 } else {
252 auto range = makeScaledPixelRangeRGB(&pixel_iter);
253 encodeUCS7604_16bit_RGB(range.first, range.second, out, g);
254 }
255 }
256}
static fl::shared_ptr< const Gamma8 > getOrCreate(float gamma) FL_NOEXCEPT
Definition ease.cpp.hpp:459
pair< detail::ScaledPixelIteratorRGB, detail::ScaledPixelIteratorRGB > makeScaledPixelRangeRGB(PixelIterator *pixels) FL_NOEXCEPT
Create RGB input iterator range from PixelIterator.
void buildUCS7604Preamble(OutputIterator out, UCS7604Mode mode, u8 r_current, u8 g_current, u8 b_current, u8 w_current)
Build UCS7604 preamble (15 bytes)
Definition ucs7604.h:69
void encodeUCS7604_8bit_RGB(InputIterator first, InputIterator last, OutputIterator out)
Encode RGB pixels in UCS7604 8-bit format.
Definition ucs7604.h:106
void encodeUCS7604_16bit_RGBW(InputIterator first, InputIterator last, OutputIterator out, const Gamma8 &gamma)
Encode RGBW pixels in UCS7604 16-bit format with gamma correction.
Definition ucs7604.h:174
pair< detail::ScaledPixelIteratorRGBW, detail::ScaledPixelIteratorRGBW > makeScaledPixelRangeRGBW(PixelIterator *pixels) FL_NOEXCEPT
Create RGBW input iterator range from PixelIterator.
void encodeUCS7604_8bit_RGBW(InputIterator first, InputIterator last, OutputIterator out)
Encode RGBW pixels in UCS7604 8-bit format.
Definition ucs7604.h:124
void encodeUCS7604_16bit_RGB(InputIterator first, InputIterator last, OutputIterator out, const Gamma8 &gamma)
Encode RGB pixels in UCS7604 16-bit format with gamma correction.
Definition ucs7604.h:144
u8 g
Green channel current (0x0-0xF)
Definition ucs7604.h:37
u8 b
Blue channel current (0x0-0xF)
Definition ucs7604.h:38
u8 w
White channel current (0x0-0xF)
Definition ucs7604.h:39
u8 r
Red channel current (0x0-0xF)
Definition ucs7604.h:36

References fl::UCS7604CurrentControl::b, buildUCS7604Preamble(), encodeUCS7604_16bit_RGB(), encodeUCS7604_16bit_RGBW(), encodeUCS7604_8bit_RGB(), encodeUCS7604_8bit_RGBW(), fl::UCS7604CurrentControl::g, gamma(), fl::Gamma8::getOrCreate(), makeScaledPixelRangeRGB(), makeScaledPixelRangeRGBW(), fl::UCS7604CurrentControl::r, UCS7604_MODE_8BIT_800KHZ, and fl::UCS7604CurrentControl::w.

Referenced by buildExpectedUCS7604(), fl::UCS7604ControllerT< DATA_PIN, RGB_ORDER, fl::UCS7604Mode::UCS7604_MODE_8BIT_800KHZ, fl::TIMING_UCS7604_800KHZ, CLOCKLESS_CONTROLLER >::showPixels(), and fl::anonymous_namespace{channel.cpp.hpp}::writeUCS7604().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ encodeUCS7604_16bit_RGB()

template<typename InputIterator, typename OutputIterator>
void fl::encodeUCS7604_16bit_RGB ( InputIterator first,
InputIterator last,
OutputIterator out,
const Gamma8 & gamma )

Encode RGB pixels in UCS7604 16-bit format with gamma correction.

Template Parameters
InputIteratorIterator yielding fl::array<uint8_t, 3> (RGB bytes)
OutputIteratorOutput iterator accepting uint8_t
Parameters
firstBeginning of pixel range
lastEnd of pixel range
outOutput iterator for encoded bytes
gammaGamma8 LUT for 8-to-16 bit expansion
Note
Writes 6 bytes per pixel (R16_hi, R16_lo, G16_hi, G16_lo, B16_hi, B16_lo)

Definition at line 144 of file ucs7604.h.

145 {
146 while (first != last) {
147 const auto& pixel = *first;
148
149 // Apply gamma correction for 16-bit output
150 u8 rgb_in[3] = { pixel[0], pixel[1], pixel[2] };
151 u16 rgb_out[3];
152 gamma.convert(fl::span<const u8>(rgb_in, 3), fl::span<u16>(rgb_out, 3));
153
154 // Write big-endian 16-bit values
155 *out++ = rgb_out[0] >> 8;
156 *out++ = rgb_out[0] & 0xFF;
157 *out++ = rgb_out[1] >> 8;
158 *out++ = rgb_out[1] & 0xFF;
159 *out++ = rgb_out[2] >> 8;
160 *out++ = rgb_out[2] & 0xFF;
161 ++first;
162 }
163}

References gamma().

Referenced by encodeUCS7604().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ encodeUCS7604_16bit_RGBW()

template<typename InputIterator, typename OutputIterator>
void fl::encodeUCS7604_16bit_RGBW ( InputIterator first,
InputIterator last,
OutputIterator out,
const Gamma8 & gamma )

Encode RGBW pixels in UCS7604 16-bit format with gamma correction.

Template Parameters
InputIteratorIterator yielding fl::array<uint8_t, 4> (RGBW bytes)
OutputIteratorOutput iterator accepting uint8_t
Parameters
firstBeginning of pixel range
lastEnd of pixel range
outOutput iterator for encoded bytes
gammaGamma8 LUT for 8-to-16 bit expansion
Note
Writes 8 bytes per pixel (R16_hi, R16_lo, G16_hi, G16_lo, B16_hi, B16_lo, W16_hi, W16_lo)

Definition at line 174 of file ucs7604.h.

175 {
176 while (first != last) {
177 const auto& pixel = *first;
178
179 // Apply gamma correction for 16-bit output
180 u8 rgbw_in[4] = { pixel[0], pixel[1], pixel[2], pixel[3] };
181 u16 rgbw_out[4];
182 gamma.convert(fl::span<const u8>(rgbw_in, 4), fl::span<u16>(rgbw_out, 4));
183
184 // Write big-endian 16-bit values
185 *out++ = rgbw_out[0] >> 8;
186 *out++ = rgbw_out[0] & 0xFF;
187 *out++ = rgbw_out[1] >> 8;
188 *out++ = rgbw_out[1] & 0xFF;
189 *out++ = rgbw_out[2] >> 8;
190 *out++ = rgbw_out[2] & 0xFF;
191 *out++ = rgbw_out[3] >> 8;
192 *out++ = rgbw_out[3] & 0xFF;
193 ++first;
194 }
195}

References gamma().

Referenced by encodeUCS7604().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ encodeUCS7604_8bit_RGB()

template<typename InputIterator, typename OutputIterator>
void fl::encodeUCS7604_8bit_RGB ( InputIterator first,
InputIterator last,
OutputIterator out )

Encode RGB pixels in UCS7604 8-bit format.

Template Parameters
InputIteratorIterator yielding fl::array<uint8_t, 3> (RGB bytes)
OutputIteratorOutput iterator accepting uint8_t
Parameters
firstBeginning of pixel range
lastEnd of pixel range
outOutput iterator for encoded bytes
Note
Writes 3 bytes per pixel (RGB order)

Definition at line 106 of file ucs7604.h.

106 {
107 while (first != last) {
108 const auto& pixel = *first;
109 *out++ = pixel[0]; // R
110 *out++ = pixel[1]; // G
111 *out++ = pixel[2]; // B
112 ++first;
113 }
114}

Referenced by encodeUCS7604().

+ Here is the caller graph for this function:

◆ encodeUCS7604_8bit_RGBW()

template<typename InputIterator, typename OutputIterator>
void fl::encodeUCS7604_8bit_RGBW ( InputIterator first,
InputIterator last,
OutputIterator out )

Encode RGBW pixels in UCS7604 8-bit format.

Template Parameters
InputIteratorIterator yielding fl::array<uint8_t, 4> (RGBW bytes)
OutputIteratorOutput iterator accepting uint8_t
Parameters
firstBeginning of pixel range
lastEnd of pixel range
outOutput iterator for encoded bytes
Note
Writes 4 bytes per pixel (RGBW order)

Definition at line 124 of file ucs7604.h.

124 {
125 while (first != last) {
126 const auto& pixel = *first;
127 *out++ = pixel[0]; // R
128 *out++ = pixel[1]; // G
129 *out++ = pixel[2]; // B
130 *out++ = pixel[3]; // W
131 ++first;
132 }
133}

Referenced by encodeUCS7604().

+ Here is the caller graph for this function:

◆ encodeWS2801()

template<typename InputIterator, typename OutputIterator>
void fl::encodeWS2801 ( InputIterator first,
InputIterator last,
OutputIterator out )

Encode pixel data in WS2801/WS2803 format.

Writes RGB pixel data in WS2801 protocol format. WS2801 is one of the simplest SPI protocols - just 3 bytes per LED (RGB) with no start/end frames. Latching occurs via timing (pause in clock).

Template Parameters
InputIteratorIterator yielding fl::array<u8, 3> (3 bytes in wire order)
OutputIteratorOutput iterator accepting uint8_t (e.g., fl::back_inserter)
Parameters
firstIterator to first pixel
lastIterator past last pixel
outOutput iterator for encoded bytes
Note
WS2803 uses identical protocol to WS2801 (just different default clock speed)
Writes 3 bytes per pixel in wire order
WS2801 uses RGB wire order: pixel[0]=Red, pixel[1]=Green, pixel[2]=Blue

Definition at line 41 of file ws2801.h.

41 {
42 while (first != last) {
43 const array<u8, BYTES_PER_PIXEL_RGB>& pixel = *first;
44 *out++ = pixel[0]; // Index 0 (RGB order: Red)
45 *out++ = pixel[1]; // Index 1 (RGB order: Green)
46 *out++ = pixel[2]; // Index 2 (RGB order: Blue)
47 ++first;
48 }
49 // No end frame needed - WS2801 latches via timing (clock pause)
50}

References FL_NOEXCEPT.

Referenced by encodeWS2803(), and fl::PixelIterator::writeWS2801().

+ Here is the caller graph for this function:

◆ encodeWS2803()

template<typename InputIterator, typename OutputIterator>
void fl::encodeWS2803 ( InputIterator first,
InputIterator last,
OutputIterator out )

Encode pixel data in WS2803 format (alias for WS2801)

Template Parameters
InputIteratorIterator yielding fl::array<u8, 3> (3 bytes in wire order)
OutputIteratorOutput iterator accepting uint8_t
Parameters
firstIterator to first pixel
lastIterator past last pixel
outOutput iterator for encoded bytes
Note
WS2803 protocol is identical to WS2801

Definition at line 31 of file ws2803.h.

31 {
32 // WS2803 uses identical protocol to WS2801
33 encodeWS2801(first, last, out);
34}
void encodeWS2801(InputIterator first, InputIterator last, OutputIterator out) FL_NOEXCEPT
Encode pixel data in WS2801/WS2803 format.
Definition ws2801.h:41

References encodeWS2801(), and FL_NOEXCEPT.

Referenced by fl::PixelIterator::writeWS2803().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ encodeWS2812()

template<typename InputIterator, typename OutputIterator>
void fl::encodeWS2812 ( InputIterator first,
InputIterator last,
OutputIterator out,
const Rgbw & rgbw )

Encode pixel data in WS2812 format (automatic RGB/RGBW selection)

Template Parameters
InputIteratorIterator yielding fl::array<u8, 3> or fl::array<u8, 4>
OutputIteratorOutput iterator accepting uint8_t
Parameters
firstIterator to first pixel
lastIterator past last pixel
outOutput iterator for encoded bytes
rgbwRgbw configuration (if active, uses RGBW mode)
Note
Dispatches to RGB or RGBW encoder based on rgbw.active()

Definition at line 73 of file ws2812.h.

73 {
74 if (rgbw.active()) {
75 encodeWS2812_RGBW(first, last, out);
76 } else {
77 encodeWS2812_RGB(first, last, out);
78 }
79}
Rgbw rgbw
void encodeWS2812_RGB(InputIterator first, InputIterator last, OutputIterator out) FL_NOEXCEPT
Encode 3-byte pixel data in WS2812 format.
Definition ws2812.h:35
void encodeWS2812_RGBW(InputIterator first, InputIterator last, OutputIterator out) FL_NOEXCEPT
Encode 4-byte pixel data in WS2812 format.
Definition ws2812.h:53

References encodeWS2812_RGB(), encodeWS2812_RGBW(), FL_NOEXCEPT, and rgbw.

+ Here is the call graph for this function:

◆ encodeWS2812_RGB()

template<typename InputIterator, typename OutputIterator>
void fl::encodeWS2812_RGB ( InputIterator first,
InputIterator last,
OutputIterator out )

Encode 3-byte pixel data in WS2812 format.

Template Parameters
InputIteratorIterator yielding fl::array<u8, 3> (3 bytes in wire order)
OutputIteratorOutput iterator accepting uint8_t (e.g., fl::back_inserter)
Parameters
firstIterator to first pixel
lastIterator past last pixel
outOutput iterator for encoded bytes
Note
Writes 3 bytes per pixel in whatever color order they're already in

Definition at line 35 of file ws2812.h.

35 {
36 while (first != last) {
37 const fl::array<u8, BYTES_PER_PIXEL_RGB>& pixel = *first;
38 *out++ = pixel[0]; // First byte
39 *out++ = pixel[1]; // Second byte
40 *out++ = pixel[2]; // Third byte
41 ++first;
42 }
43}

References FL_NOEXCEPT.

Referenced by encodeWS2812(), and fl::PixelIterator::writeWS2812().

+ Here is the caller graph for this function:

◆ encodeWS2812_RGBW()

template<typename InputIterator, typename OutputIterator>
void fl::encodeWS2812_RGBW ( InputIterator first,
InputIterator last,
OutputIterator out )

Encode 4-byte pixel data in WS2812 format.

Template Parameters
InputIteratorIterator yielding fl::array<u8, 4> (4 bytes in wire order)
OutputIteratorOutput iterator accepting uint8_t (e.g., fl::back_inserter)
Parameters
firstIterator to first pixel
lastIterator past last pixel
outOutput iterator for encoded bytes
Note
Writes 4 bytes per pixel in whatever color order they're already in

Definition at line 53 of file ws2812.h.

53 {
54 while (first != last) {
55 const fl::array<u8, BYTES_PER_PIXEL_RGBW>& pixel = *first;
56 *out++ = pixel[0]; // First byte
57 *out++ = pixel[1]; // Second byte
58 *out++ = pixel[2]; // Third byte
59 *out++ = pixel[3]; // Fourth byte
60 ++first;
61 }
62}

References FL_NOEXCEPT.

Referenced by encodeWS2812(), and fl::PixelIterator::writeWS2812().

+ Here is the caller graph for this function:

◆ encodeWS2812_RGBWW()

template<typename InputIterator, typename OutputIterator>
void fl::encodeWS2812_RGBWW ( InputIterator first,
InputIterator last,
OutputIterator out )

Encode 5-byte pixel data in WS2812 format (issue #2558, RGBWW).

Template Parameters
InputIteratorIterator yielding fl::array<u8, 5> (5 bytes in wire order: R, G, B, warm-W, cool-W after EOrder + EOrderWW placement)
OutputIteratorOutput iterator accepting uint8_t

Definition at line 86 of file ws2812.h.

86 {
87 while (first != last) {
88 const fl::array<u8, BYTES_PER_PIXEL_RGBWW>& pixel = *first;
89 *out++ = pixel[0];
90 *out++ = pixel[1];
91 *out++ = pixel[2];
92 *out++ = pixel[3];
93 *out++ = pixel[4];
94 ++first;
95 }
96}

References FL_NOEXCEPT.

Referenced by fl::PixelIterator::writeWS2812().

+ Here is the caller graph for this function:

◆ encodeWS2816()

template<typename InputIterator, typename OutputIterator>
void fl::encodeWS2816 ( InputIterator first,
InputIterator last,
OutputIterator out )

Encode 16-bit RGB pixel data into dual 8-bit RGB format for WS2816.

Template Parameters
InputIteratorIterator yielding fl::array<u16, 3> (16-bit RGB in wire order)
OutputIteratorOutput iterator accepting CRGB (e.g., raw pointer)
Parameters
firstIterator to first pixel
lastIterator past last pixel (sentinel)
outOutput iterator for encoded CRGB pairs
Note
Each input pixel yields 2 CRGB output pixels (48 bits → 2×24 bits)
Input iterator yields wire-ordered 16-bit RGB (reordering already done upstream)

Definition at line 61 of file ws2816.h.

61 {
62 while (first != last) {
63 // Get 16-bit RGB in wire order (already scaled, color-corrected, brightness-adjusted)
64 const array<u16, 3>& rgb16 = *first;
65 u16 s0 = rgb16[0];
66 u16 s1 = rgb16[1];
67 u16 s2 = rgb16[2];
68
69 // Use the packing helper function
70 pair<CRGB, CRGB> packed = packWS2816Pixel(s0, s1, s2);
71 *out++ = packed.first;
72 *out++ = packed.second;
73
74 ++first;
75 }
76}
pair< CRGB, CRGB > packWS2816Pixel(u16 s0, u16 s1, u16 s2)
Pack a single 16-bit RGB pixel into two 8-bit CRGB pixels for WS2816.
Definition ws2816.h:36
T1 first
Definition pair.h:16
T2 second
Definition pair.h:17

References fl::pair< T1, T2 >::first, packWS2816Pixel(), and fl::pair< T1, T2 >::second.

+ Here is the call graph for this function:

◆ end() [1/3]

template<typename Container>
auto fl::end ( const Container & c) -> decltype(c.end())
constexpr

Definition at line 40 of file range_access.h.

40 {
41 return c.end();
42}

◆ end() [2/3]

template<typename Container>
auto fl::end ( Container & c) -> decltype(c.end())
constexpr

Definition at line 34 of file range_access.h.

34 {
35 return c.end();
36}

◆ end() [3/3]

template<typename T, fl::size N>
T * fl::end ( T(&) array[N])
constexpr

Definition at line 16 of file range_access.h.

16 {
17 return array + N;
18}

References FL_NOEXCEPT.

Referenced by fl::FontImpl::FontImpl(), fl::MultiChannelConfig::MultiChannelConfig(), fl::UIDropdownImpl::UIDropdownImpl(), fl::FastLEDAdapter::~FastLEDAdapter(), fl::audio::SampleImpl::assign(), fl::anonymous_namespace{mp4_parser.cpp.hpp}::findBox(), fl::test::detail::getTypeName(), fl::third_party::vorbis::go_to_page_before(), fl::detail::heap_sort(), fl::anonymous_namespace{http_parser.cpp.hpp}::http_parser_trim(), fl::third_party::nsgif__process_frame(), fl::third_party::nsgif_data_complete(), fl::detail::JsonToFloatVisitor< T >::operator()(), fl::detail::JsonToIntegerVisitor< T >::operator()(), fl::anonymous_namespace{json.cpp.hpp}::JsonBuilder::parse_float_array(), fl::anonymous_namespace{json.cpp.hpp}::JsonBuilder::parse_int_array(), fl::net::http::ChunkedReader::parseChunkSize(), fl::FastLEDAdapter::setSegment(), fl::IFastLED::setSegment(), fl::WLEDClient::setSegment(), fl::detail::sift_down(), fl::third_party::vorbis::stb_vorbis_stream_length_in_samples(), fl::third_party::truetype::stbtt__cff_index_get(), fl::third_party::truetype::stbtt__cid_get_glyph_subrs(), fl::third_party::truetype::stbtt__dict_get(), fl::third_party::truetype::stbtt_FindGlyphIndex(), time_alpha16(), time_alpha8(), time_alphaf(), traverseGridSegment(), traverseGridSegment16(), traverseGridSegment32(), traverseGridSegmentFloat(), and fl::third_party::vorbis::vorbis_find_page().

+ Here is the caller graph for this function:

◆ equal() [1/4]

template<typename Iterator1, typename Iterator2>
bool fl::equal ( Iterator1 first1,
Iterator1 last1,
Iterator2 first2 )

Definition at line 96 of file algorithm.h.

96 {
97 while (first1 != last1) {
98 if (*first1 != *first2) {
99 return false;
100 }
101 ++first1;
102 ++first2;
103 }
104 return true;
105}

References FL_NOEXCEPT.

Referenced by fl::line_xy< T >::distance_to_line_with_point(), equal_container(), equal_container(), FL_DISABLE_WARNING(), fl::audio::fft::Args::operator==(), operator==(), operator==(), and fl::set< T, fl::allocator_inlined_slab< T, N > >::operator==().

+ Here is the caller graph for this function:

◆ equal() [2/4]

template<typename Iterator1, typename Iterator2, typename BinaryPredicate>
bool fl::equal ( Iterator1 first1,
Iterator1 last1,
Iterator2 first2,
BinaryPredicate pred )

Definition at line 108 of file algorithm.h.

108 {
109 while (first1 != last1) {
110 if (!pred(*first1, *first2)) {
111 return false;
112 }
113 ++first1;
114 ++first2;
115 }
116 return true;
117}

References FL_NOEXCEPT.

◆ equal() [3/4]

template<typename Iterator1, typename Iterator2>
bool fl::equal ( Iterator1 first1,
Iterator1 last1,
Iterator2 first2,
Iterator2 last2 )

Definition at line 120 of file algorithm.h.

120 {
121 while (first1 != last1 && first2 != last2) {
122 if (*first1 != *first2) {
123 return false;
124 }
125 ++first1;
126 ++first2;
127 }
128 return first1 == last1 && first2 == last2;
129}

References FL_NOEXCEPT.

◆ equal() [4/4]

template<typename Iterator1, typename Iterator2, typename BinaryPredicate>
bool fl::equal ( Iterator1 first1,
Iterator1 last1,
Iterator2 first2,
Iterator2 last2,
BinaryPredicate pred )

Definition at line 132 of file algorithm.h.

132 {
133 while (first1 != last1 && first2 != last2) {
134 if (!pred(*first1, *first2)) {
135 return false;
136 }
137 ++first1;
138 ++first2;
139 }
140 return first1 == last1 && first2 == last2;
141}

References FL_NOEXCEPT.

◆ equal_container() [1/2]

template<typename Container1, typename Container2>
bool fl::equal_container ( const Container1 & c1,
const Container2 & c2 )

Definition at line 183 of file algorithm.h.

183 {
184 fl::size size1 = c1.size();
185 fl::size size2 = c2.size();
186 if (size1 != size2) {
187 return false;
188 }
189 return equal(c1.begin(), c1.end(), c2.begin(), c2.end());
190}
bool equal(Iterator1 first1, Iterator1 last1, Iterator2 first2) FL_NOEXCEPT
Definition algorithm.h:96

References equal(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ equal_container() [2/2]

template<typename Container1, typename Container2, typename BinaryPredicate>
bool fl::equal_container ( const Container1 & c1,
const Container2 & c2,
BinaryPredicate pred )

Definition at line 193 of file algorithm.h.

193 {
194 fl::size size1 = c1.size();
195 fl::size size2 = c2.size();
196 if (size1 != size2) {
197 return false;
198 }
199 return equal(c1.begin(), c1.end(), c2.begin(), c2.end(), pred);
200}

References equal(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ exit()

void fl::exit ( int code)
inline

No-op exit function for embedded systems In embedded environments, calling exit is typically not meaningful, so this is a placeholder that does nothing.

Definition at line 8 of file exit.h.

8 {
9 (void)code; // Suppress unused parameter warning
10 // No-op: intentionally does nothing
11}

Referenced by kiss_fftr(), and kiss_fftri().

+ Here is the caller graph for this function:

◆ exp() [1/3]

double fl::exp ( double value)
inline

Definition at line 399 of file math.h.

399{ return exp_impl_double(value); }
double exp_impl_double(double value)
Definition math.cpp.hpp:101

References exp_impl_double(), FL_NOEXCEPT, and type_rank< T >::value.

+ Here is the call graph for this function:

◆ exp() [2/3]

template<typename T>
enable_if< is_integral< T >::value, float >::type fl::exp ( T value)
inline

Definition at line 401 of file math.h.

401{ return exp_impl_float(static_cast<float>(value)); }
float exp_impl_float(float value)
Definition math.cpp.hpp:80

References exp_impl_float(), FL_NOEXCEPT, and type_rank< T >::value.

+ Here is the call graph for this function:

◆ exp() [3/3]

template<typename T>
enable_if< is_fixed_point< T >::value, T >::type fl::exp ( T x)
inline

Definition at line 642 of file fixed_point.h.

642{ return fl::expfp(x); }
enable_if< is_fixed_point< T >::value, T >::type expfp(T x) FL_NOEXCEPT

References expfp(), FL_NOEXCEPT, and x.

Referenced by fl::BindResult< R(Args...)>::BindResult(), ldexp(), ldexp(), ldexp_impl_double(), ldexp_impl_float(), fl::detail::ldexp_loop_(), ldexpf(), MaxFadeTracker::operator()(), fl::fixed_point< IntBits, FracBits, Sign::SIGNED >< IntBits, FracBits >::pow(), fl::fixed_point_base< Derived, IntBits, FracBits >::pow(), pow(), fl::s12x4::pow(), fl::s16x16::pow(), fl::s24x8::pow(), fl::s4x12::pow(), fl::s8x24::pow(), fl::s8x8::pow(), fl::u12x4::pow(), fl::u16x16::pow(), fl::u24x8::pow(), fl::u4x12::pow(), fl::u8x24::pow(), fl::u8x8::pow(), powfp(), fl::detail::BilateralFilterImpl< T, N >::recompute(), strtod(), fl::detail::AttackDecayFilterImpl< T >::update(), fl::detail::CascadedEMAImpl< T, Stages >::update(), fl::detail::ExponentialSmootherImpl< T >::update(), and fl::audio::AutoGain::updatePIController().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ exp_impl_double()

double fl::exp_impl_double ( double value)

Definition at line 101 of file math.cpp.hpp.

101 {
102 if (value > 10.0)
103 return 22026.465794806718; // e^10 approx
104 if (value < -10.0)
105 return 0.0000453999297625; // e^-10 approx
106
107 // For negative values, use exp(x) = 1/exp(-x) to keep the Taylor series
108 // input non-negative where it converges well with limited terms.
109 if (value < 0.0) {
110 return 1.0 / exp_impl_double(-value);
111 }
112
113 double result = 1.0;
114 double term = 1.0;
115 for (int i = 1; i < 10; ++i) {
116 term *= value / static_cast<double>(i);
117 result += term;
118 }
119 return result;
120}

References exp_impl_double(), and type_rank< T >::value.

Referenced by exp(), exp_impl_double(), and pow_impl_double().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ exp_impl_float()

float fl::exp_impl_float ( float value)

Definition at line 80 of file math.cpp.hpp.

80 {
81 if (value > 10.0f)
82 return 22026.465794806718f; // e^10 approx
83 if (value < -10.0f)
84 return 0.0000453999297625f; // e^-10 approx
85
86 // For negative values, use exp(x) = 1/exp(-x) to keep the Taylor series
87 // input non-negative where it converges well with limited terms.
88 if (value < 0.0f) {
89 return 1.0f / exp_impl_float(-value);
90 }
91
92 float result = 1.0f;
93 float term = 1.0f;
94 for (int i = 1; i < 10; ++i) {
95 term *= value / static_cast<float>(i);
96 result += term;
97 }
98 return result;
99}

References exp_impl_float(), and type_rank< T >::value.

Referenced by exp(), exp_impl_float(), expf(), and pow_impl_float().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ expf()

float fl::expf ( float value)
inline

Definition at line 398 of file math.h.

398{ return exp_impl_float(value); }

References exp_impl_float(), FL_NOEXCEPT, and type_rank< T >::value.

Referenced by fl::audio::Reactive::begin(), fl::audio::fft::Bins::binToFreq(), fl::audio::FrequencyBinMapper::calculateLogFrequencies(), fl::audio::detector::EqualizerDetector::computeBinCenters(), fl::audio::detector::Vocal::computeBroadSpectralFeatures(), fl::audio::detector::Percussion::computeFeatures(), fl::audio::computePinkNoiseGains(), fl::audio::fft::Context::initHybrid(), fl::audio::fft::Context::initLogRebin(), fl::audio::fft::Context::initOctaveWise(), fl::NoiseBias1D::trigger(), fl::audio::SilenceEnvelope::update(), and Key::UpdateIntensity().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ expfp()

template<typename T>
enable_if< is_fixed_point< T >::value, T >::type fl::expfp ( T x)
inline

Definition at line 633 of file fixed_point.h.

633 {
634 static const T e_val(static_cast<float>(FL_E));
635 return powfp(e_val, x);
636}
#define FL_E
Definition math.h:30
enable_if< is_fixed_point< T >::value, T >::type powfp(T base, T exp) FL_NOEXCEPT

References FL_E, FL_NOEXCEPT, powfp(), and x.

Referenced by exp().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ extractH264NalUnits()

fl::vector< fl::u8 > fl::extractH264NalUnits ( fl::span< const fl::u8 > data,
const Mp4TrackInfo & track,
fl::string * error )

Definition at line 283 of file mp4_parser.cpp.hpp.

285 {
286 fl::vector<fl::u8> annexB;
287
288 if (!track.isValid) {
289 if (error) *error = "Invalid track info";
290 return annexB;
291 }
292
293 fl::u8 nalLenSize = track.lengthSizeMinusOne + 1; // typically 4
294
295 // Emit SPS NAL units with Annex B start codes
296 for (const auto& sps : track.sps) {
297 annexB.push_back(0x00);
298 annexB.push_back(0x00);
299 annexB.push_back(0x00);
300 annexB.push_back(0x01);
301 for (fl::size j = 0; j < sps.size(); j++) {
302 annexB.push_back(sps[j]);
303 }
304 }
305
306 // Emit PPS NAL units
307 for (const auto& pps : track.pps) {
308 annexB.push_back(0x00);
309 annexB.push_back(0x00);
310 annexB.push_back(0x00);
311 annexB.push_back(0x01);
312 for (fl::size j = 0; j < pps.size(); j++) {
313 annexB.push_back(pps[j]);
314 }
315 }
316
317 // Find mdat box and convert AVCC NAL units to Annex B
318 fl::size mdatPos = fl::size(-1);
319 {
320 fl::size pos = 0;
321 while (pos + 8 <= data.size()) {
322 bool ok = true;
323 fl::u32 boxSize = readU32BE(data, pos, ok);
324 if (!ok || boxSize < 8) break;
325 if (boxIs(data, pos + 4, "mdat")) {
326 mdatPos = pos;
327 break;
328 }
329 pos += boxSize;
330 }
331 }
332
333 if (mdatPos == fl::size(-1)) {
334 if (error) *error = "No mdat box found";
335 return annexB;
336 }
337
338 bool ok = true;
339 fl::u32 mdatSize = readU32BE(data, mdatPos, ok);
340 if (!ok) {
341 if (error) *error = "Invalid mdat box size";
342 return annexB;
343 }
344
345 fl::size mdatBody = mdatPos + 8;
346 fl::size mdatEnd = mdatPos + mdatSize;
347 if (mdatEnd > data.size()) mdatEnd = data.size();
348
349 fl::size pos = mdatBody;
350 while (pos + nalLenSize <= mdatEnd) {
351 fl::u32 nalLen = 0;
352 for (fl::u8 k = 0; k < nalLenSize; k++) {
353 nalLen = (nalLen << 8) | data[pos + k];
354 }
355 pos += nalLenSize;
356
357 if (pos + nalLen > mdatEnd) break;
358
359 // Emit Annex B start code + NAL data
360 annexB.push_back(0x00);
361 annexB.push_back(0x00);
362 annexB.push_back(0x00);
363 annexB.push_back(0x01);
364 for (fl::u32 j = 0; j < nalLen; j++) {
365 annexB.push_back(data[pos + j]);
366 }
367 pos += nalLen;
368 }
369
370 return annexB;
371}
uint8_t pos
Definition Blur.ino:11
fl::u32 readU32BE(fl::span< const fl::u8 > data, fl::size offset, bool &ok)
bool boxIs(fl::span< const fl::u8 > data, fl::size offset, const char *type)
fl::u8 lengthSizeMinusOne
Definition mp4_parser.h:19
fl::vector< fl::vector< fl::u8 > > pps
Definition mp4_parser.h:21
fl::vector< fl::vector< fl::u8 > > sps
Definition mp4_parser.h:20

References fl::Mp4TrackInfo::isValid, fl::Mp4TrackInfo::lengthSizeMinusOne, pos, fl::Mp4TrackInfo::pps, fl::vector< T >::push_back(), fl::span< T, Extent >::size(), and fl::Mp4TrackInfo::sps.

+ Here is the call graph for this function:

◆ fabs() [1/2]

double fl::fabs ( double value)
inline

Definition at line 509 of file math.h.

509{ return fabs_impl_double(value); }
double fabs_impl_double(double value)
Definition math.cpp.hpp:359

References fabs_impl_double(), FL_NOEXCEPT, and type_rank< T >::value.

Referenced by fl::colorimetric_detail::barycentric_xy(), and fl::colorimetric_detail::invert3x3().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fabs() [2/2]

template<typename T>
enable_if< is_integral< T >::value, float >::type fl::fabs ( T value)
inline

Definition at line 511 of file math.h.

511{ return fabs_impl_float(static_cast<float>(value)); }
float fabs_impl_float(float value)
Definition math.cpp.hpp:355

References fabs_impl_float(), FL_NOEXCEPT, and type_rank< T >::value.

+ Here is the call graph for this function:

◆ fabs_impl_double()

double fl::fabs_impl_double ( double value)

Definition at line 359 of file math.cpp.hpp.

359 {
360 return value < 0.0 ? -value : value;
361}

References type_rank< T >::value.

Referenced by fabs().

+ Here is the caller graph for this function:

◆ fabs_impl_float()

float fl::fabs_impl_float ( float value)

Definition at line 355 of file math.cpp.hpp.

355 {
356 return value < 0.0f ? -value : value;
357}

References type_rank< T >::value.

Referenced by fabs(), and fabsf().

+ Here is the caller graph for this function:

◆ fabsf()

float fl::fabsf ( float value)
inline

Definition at line 508 of file math.h.

508{ return fabs_impl_float(value); }

References fabs_impl_float(), FL_NOEXCEPT, and type_rank< T >::value.

Referenced by fl::GielisCurvePath::compute(), fl::RosePath::compute(), fl::FlowFieldFloat::drawAALine(), fl::FlowFieldFloat::drawFlowVectors(), fl::FlowFieldFP::drawFlowVectors(), drawWaveform(), and loop().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fade()

FASTLED_FORCE_INLINE float fl::fade ( float t)

Definition at line 45 of file perlin_float.h.

45 {
46 return t * t * t * (t * (t * 6 - 15) + 10);
47}

References FASTLED_FORCE_INLINE, and t.

Referenced by fl::FlowFieldFloat::flowAdvect(), fl::FlowFieldFloat::Perlin2D::noise(), and pnoise().

+ Here is the caller graph for this function:

◆ fade_raw()

void fl::fade_raw ( CRGB * leds,
fl::u16 num_leds,
fl::u8 fadeBy )

Definition at line 168 of file colorutils.cpp.hpp.

168 {
169 nscale8(leds, num_leds, 255 - fadeBy);
170}
void nscale8(CRGB *leds, fl::u16 num_leds, fl::u8 scale)

References leds, and nscale8().

Referenced by FL_DISABLE_WARNING(), and fl::FlowFieldFP::flowAdvect().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fade_video()

void fl::fade_video ( CRGB * leds,
fl::u16 num_leds,
fl::u8 fadeBy )

Definition at line 156 of file colorutils.cpp.hpp.

156 {
157 nscale8_video(leds, num_leds, 255 - fadeBy);
158}
void nscale8_video(CRGB *leds, fl::u16 num_leds, fl::u8 scale)

References leds, and nscale8_video().

Referenced by FL_DISABLE_WARNING().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fadeLightBy()

void fl::fadeLightBy ( CRGB * leds,
fl::u16 num_leds,
fl::u8 fadeBy )

Definition at line 160 of file colorutils.cpp.hpp.

160 {
161 nscale8_video(leds, num_leds, 255 - fadeBy);
162}

References leds, and nscale8_video().

Referenced by FL_DISABLE_WARNING().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fadeToBlackBy()

void fl::fadeToBlackBy ( CRGB * leds,
fl::u16 num_leds,
fl::u8 fadeBy )

Definition at line 164 of file colorutils.cpp.hpp.

164 {
165 nscale8(leds, num_leds, 255 - fadeBy);
166}

References leds, and nscale8().

Referenced by fl::DemoReel100::confetti(), fl::Luminova::draw(), fl::PerlinParticlePunch::draw(), FL_DISABLE_WARNING(), fl::DemoReel100::juggle(), and fl::DemoReel100::sinelon().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fadeToColorBy()

void fl::fadeToColorBy ( void * ,
uint16_t ,
uint32_t ,
uint8_t  )

◆ fadeUsingColor()

void fl::fadeUsingColor ( CRGB * leds,
fl::u16 numLeds,
const CRGB & colormask )

Definition at line 178 of file colorutils.cpp.hpp.

178 {
179 fl::u8 fr, fg, fb;
180 fr = colormask.r;
181 fg = colormask.g;
182 fb = colormask.b;
183
184 for (fl::u16 i = 0; i < numLeds; ++i) {
185 leds[i].r = scale8_LEAVING_R1_DIRTY(leds[i].r, fr);
186 leds[i].g = scale8_LEAVING_R1_DIRTY(leds[i].g, fg);
187 leds[i].b = scale8(leds[i].b, fb);
188 }
189}

References leds.

Referenced by FL_DISABLE_WARNING().

+ Here is the caller graph for this function:

◆ fast_hash32()

static u32 fl::fast_hash32 ( u32 x)
inlinestatic

Definition at line 81 of file hash.h.

81 {
82 x = (x ^ 61u) ^ (x >> 16);
83 x = x + (x << 3);
84 x = x ^ (x >> 4);
85 x = x * 0x27d4eb2dU;
86 x = x ^ (x >> 15);
87 return x;
88}

References FL_NOEXCEPT, and x.

Referenced by hash_pair(), fl::FastHash< Key >::operator()(), fl::FastHash< vec2< T > >::operator()(), fl::Hash< bool >::operator()(), fl::Hash< fl::u8 >::operator()(), fl::Hash< float >::operator()(), fl::Hash< i16 >::operator()(), fl::Hash< i32 >::operator()(), fl::Hash< i8 >::operator()(), fl::Hash< T * >::operator()(), fl::Hash< u16 >::operator()(), and fl::Hash< u32 >::operator()().

+ Here is the caller graph for this function:

◆ fast_hash64()

static u32 fl::fast_hash64 ( u64 x)
inlinestatic

Definition at line 98 of file hash.h.

98 {
99 u32 x1 = static_cast<u32>(x & 0x00000000FFFFFFFF);
100 u32 x2 = static_cast<u32>(x >> 32);
101 return hash_pair(x1, x2);
102}
static u32 hash_pair(u32 a, u32 b, u32 seed=0) FL_NOEXCEPT
Definition hash.h:91

References FL_NOEXCEPT, hash_pair(), and x.

+ Here is the call graph for this function:

◆ fast_logf_approx()

float fl::fast_logf_approx ( float x)
inline

Definition at line 406 of file math.h.

406 {
407 union { float f; u32 i; } u;
408 u.f = x;
409 i32 e = static_cast<i32>(u.i >> 23) - 127;
410 u.i = (u.i & 0x007FFFFFu) | 0x3F800000u;
411 float m = u.f;
412 float t = m - 1.0f;
413 float log2m = t * (1.3327635f + t * (-0.3327635f));
414 return (static_cast<float>(e) + log2m) * 0.6931471805599453f;
415}

References FL_NOEXCEPT, t, and x.

Referenced by fl::audio::detector::Vocal::computeBroadSpectralFeatures().

+ Here is the caller graph for this function:

◆ FASTLED_DEPRECATED()

fl::FASTLED_DEPRECATED ( "Use blur2d(..., const XYMap& xymap) instead" )

References FL_NOEXCEPT.

◆ fastled_file_offset()

const char * fl::fastled_file_offset ( const char * file)

Definition at line 56 of file log.cpp.hpp.

56 {
57 const char *p = file;
58 const char *last_slash = nullptr;
59
60 while (*p) {
61 // Check for "src/" or "src\\" (handle both Unix and Windows paths)
62 if (p[0] == 's' && p[1] == 'r' && p[2] == 'c' && (p[3] == '/' || p[3] == '\\')) {
63 return p; // Skip past "src/" or "src\\"
64 }
65 // Track both forward slash and backslash
66 if (*p == '/' || *p == '\\') {
67 last_slash = p;
68 }
69 p++;
70 }
71 // If "src/" or "src\\" not found but we found at least one slash, return after the
72 // last slash
73 if (last_slash) {
74 return last_slash + 1;
75 }
76 return file; // If no slashes found at all, return original path
77}

◆ FASTLED_SHARED_PTR() [1/56]

fl::FASTLED_SHARED_PTR ( Animartrix )

◆ FASTLED_SHARED_PTR() [2/56]

fl::FASTLED_SHARED_PTR ( ArchimedeanSpiralPath )

◆ FASTLED_SHARED_PTR() [3/56]

fl::FASTLED_SHARED_PTR ( Blend2d )

◆ FASTLED_SHARED_PTR() [4/56]

fl::FASTLED_SHARED_PTR ( CatmullRomParams )

◆ FASTLED_SHARED_PTR() [5/56]

fl::FASTLED_SHARED_PTR ( CatmullRomPath )

◆ FASTLED_SHARED_PTR() [6/56]

fl::FASTLED_SHARED_PTR ( Channel )

Referenced by FASTLED_SHARED_PTR(), and FASTLED_SHARED_PTR().

+ Here is the caller graph for this function:

◆ FASTLED_SHARED_PTR() [7/56]

fl::FASTLED_SHARED_PTR ( ChannelData )

◆ FASTLED_SHARED_PTR() [8/56]

fl::FASTLED_SHARED_PTR ( CirclePath )

◆ FASTLED_SHARED_PTR() [9/56]

fl::FASTLED_SHARED_PTR ( Cylon )

◆ FASTLED_SHARED_PTR() [10/56]

fl::FASTLED_SHARED_PTR ( DemoReel100 )

◆ FASTLED_SHARED_PTR() [11/56]

fl::FASTLED_SHARED_PTR ( DigitalPinImpl )

◆ FASTLED_SHARED_PTR() [12/56]

fl::FASTLED_SHARED_PTR ( FileSystem )

◆ FASTLED_SHARED_PTR() [13/56]

fl::FASTLED_SHARED_PTR ( Fire2012 )

Simple one-dimensional fire animation function.

◆ FASTLED_SHARED_PTR() [14/56]

fl::FASTLED_SHARED_PTR ( FlowField )

◆ FASTLED_SHARED_PTR() [15/56]

fl::FASTLED_SHARED_PTR ( FlowFieldFloat )

◆ FASTLED_SHARED_PTR() [16/56]

fl::FASTLED_SHARED_PTR ( FlowFieldFP )

◆ FASTLED_SHARED_PTR() [17/56]

fl::FASTLED_SHARED_PTR ( Frame )

◆ FASTLED_SHARED_PTR() [18/56]

fl::FASTLED_SHARED_PTR ( FsImpl )

◆ FASTLED_SHARED_PTR() [19/56]

fl::FASTLED_SHARED_PTR ( Fx )

◆ FASTLED_SHARED_PTR() [20/56]

fl::FASTLED_SHARED_PTR ( Fx2d )

◆ FASTLED_SHARED_PTR() [21/56]

fl::FASTLED_SHARED_PTR ( Fx2dTo1d )

◆ FASTLED_SHARED_PTR() [22/56]

fl::FASTLED_SHARED_PTR ( FxLayer )

◆ FASTLED_SHARED_PTR() [23/56]

fl::FASTLED_SHARED_PTR ( GielisCurvePath )

◆ FASTLED_SHARED_PTR() [24/56]

fl::FASTLED_SHARED_PTR ( HeartPath )

◆ FASTLED_SHARED_PTR() [25/56]

fl::FASTLED_SHARED_PTR ( IDecoder )

◆ FASTLED_SHARED_PTR() [26/56]

fl::FASTLED_SHARED_PTR ( LinePath )

◆ FASTLED_SHARED_PTR() [27/56]

fl::FASTLED_SHARED_PTR ( LinePathParams )

◆ FASTLED_SHARED_PTR() [28/56]

fl::FASTLED_SHARED_PTR ( Luminova )

◆ FASTLED_SHARED_PTR() [29/56]

fl::FASTLED_SHARED_PTR ( Mp3Decoder )

References FASTLED_SHARED_PTR().

+ Here is the call graph for this function:

◆ FASTLED_SHARED_PTR() [30/56]

fl::FASTLED_SHARED_PTR ( NoisePalette )

◆ FASTLED_SHARED_PTR() [31/56]

fl::FASTLED_SHARED_PTR ( NoiseWave )

◆ FASTLED_SHARED_PTR() [32/56]

fl::FASTLED_SHARED_PTR ( Pacifica )

◆ FASTLED_SHARED_PTR() [33/56]

fl::FASTLED_SHARED_PTR ( Particles1d )

◆ FASTLED_SHARED_PTR() [34/56]

fl::FASTLED_SHARED_PTR ( PerlinParticlePunch )

◆ FASTLED_SHARED_PTR() [35/56]

fl::FASTLED_SHARED_PTR ( PhyllotaxisPath )

◆ FASTLED_SHARED_PTR() [36/56]

fl::FASTLED_SHARED_PTR ( PointPath )

◆ FASTLED_SHARED_PTR() [37/56]

fl::FASTLED_SHARED_PTR ( Pride2015 )

◆ FASTLED_SHARED_PTR() [38/56]

fl::FASTLED_SHARED_PTR ( RedSquare )

◆ FASTLED_SHARED_PTR() [39/56]

fl::FASTLED_SHARED_PTR ( RosePath )

◆ FASTLED_SHARED_PTR() [40/56]

fl::FASTLED_SHARED_PTR ( RosePathParams )

◆ FASTLED_SHARED_PTR() [41/56]

fl::FASTLED_SHARED_PTR ( RxChannel )

◆ FASTLED_SHARED_PTR() [42/56]

fl::FASTLED_SHARED_PTR ( ScaleUp )

◆ FASTLED_SHARED_PTR() [43/56]

fl::FASTLED_SHARED_PTR ( TimeFunction )

◆ FASTLED_SHARED_PTR() [44/56]

fl::FASTLED_SHARED_PTR ( TimeWarp )

◆ FASTLED_SHARED_PTR() [45/56]

fl::FASTLED_SHARED_PTR ( TransformFloatImpl )

◆ FASTLED_SHARED_PTR() [46/56]

fl::FASTLED_SHARED_PTR ( TwinkleFox )

◆ FASTLED_SHARED_PTR() [47/56]

fl::FASTLED_SHARED_PTR ( VideoFxWrapper )

◆ FASTLED_SHARED_PTR() [48/56]

fl::FASTLED_SHARED_PTR ( VorbisDecoder )

References FASTLED_SHARED_PTR().

+ Here is the call graph for this function:

◆ FASTLED_SHARED_PTR() [49/56]

fl::FASTLED_SHARED_PTR ( WaveCrgbGradientMap )

◆ FASTLED_SHARED_PTR() [50/56]

fl::FASTLED_SHARED_PTR ( WaveCrgbMap )

◆ FASTLED_SHARED_PTR() [51/56]

fl::FASTLED_SHARED_PTR ( WaveCrgbMapDefault )

◆ FASTLED_SHARED_PTR() [52/56]

fl::FASTLED_SHARED_PTR ( WaveFx )

◆ FASTLED_SHARED_PTR() [53/56]

fl::FASTLED_SHARED_PTR ( XYPath )

◆ FASTLED_SHARED_PTR() [54/56]

fl::FASTLED_SHARED_PTR ( XYPathFunction )

◆ FASTLED_SHARED_PTR() [55/56]

fl::FASTLED_SHARED_PTR ( XYPathGenerator )

◆ FASTLED_SHARED_PTR() [56/56]

fl::FASTLED_SHARED_PTR ( XYPathRenderer )

◆ FASTLED_SHARED_PTR_NO_FWD() [1/5]

fl::FASTLED_SHARED_PTR_NO_FWD ( LUT16 )

◆ FASTLED_SHARED_PTR_NO_FWD() [2/5]

fl::FASTLED_SHARED_PTR_NO_FWD ( LUTXY16 )

◆ FASTLED_SHARED_PTR_NO_FWD() [3/5]

fl::FASTLED_SHARED_PTR_NO_FWD ( LUTXYFLOAT )

◆ FASTLED_SHARED_PTR_NO_FWD() [4/5]

fl::FASTLED_SHARED_PTR_NO_FWD ( LUTXYZFLOAT )

◆ FASTLED_SHARED_PTR_NO_FWD() [5/5]

fl::FASTLED_SHARED_PTR_NO_FWD ( memorybuf )

◆ FASTLED_SHARED_PTR_STRUCT()

fl::FASTLED_SHARED_PTR_STRUCT ( ChannelConfig )

◆ fclose()

int fl::fclose ( FILE * file)
inline

Close a file.

Parameters
fileFile handle
Returns
0 on success, non-zero on error

Definition at line 250 of file file_io.h.

250 {
251 return -1;
252}

Referenced by fl::detail::posix_filebuf::close(), fl::third_party::plm_buffer_destroy(), and fl::third_party::vorbis::vorbis_deinit().

+ Here is the caller graph for this function:

◆ feof()

int fl::feof ( FILE * file)
inline

Check for end-of-file.

Parameters
fileFile handle
Returns
Non-zero if EOF, 0 otherwise

Definition at line 279 of file file_io.h.

279 {
280 return 0;
281}

Referenced by fl::detail::posix_filebuf::is_eof(), and fl::detail::posix_filebuf::read().

+ Here is the caller graph for this function:

◆ ferror()

int fl::ferror ( FILE * file)
inline

Check for file error.

Parameters
fileFile handle
Returns
Non-zero if error, 0 otherwise

Definition at line 289 of file file_io.h.

289 {
290 return 1;
291}

Referenced by fl::detail::posix_filebuf::has_error(), and fl::detail::posix_filebuf::read().

+ Here is the caller graph for this function:

◆ fflush()

int fl::fflush ( FILE * file)
inline

Flush file buffers.

Parameters
fileFile handle
Returns
0 on success, non-zero on error

Definition at line 270 of file file_io.h.

270 {
271 return -1;
272}

Referenced by fl::detail::posix_filebuf::write().

+ Here is the caller graph for this function:

◆ fill()

template<typename Iterator, typename T>
void fl::fill ( Iterator first,
Iterator last,
const T & value )

Definition at line 204 of file algorithm.h.

204 {
205 while (first != last) {
206 *first = value;
207 ++first;
208 }
209}

References FL_NOEXCEPT, and type_rank< T >::value.

Referenced by fl::format_detail::apply_width_align(), fl::audio::detector::Beat::reset(), fl::audio::detector::TempoAnalyzer::reset(), fl::audio::detector::Transient::reset(), and fl::ChannelData::writeWithPadding().

+ Here is the caller graph for this function:

◆ fill_gradient() [1/4]

template<typename T>
void fl::fill_gradient ( T * targetArray,
u16 numLeds,
const CHSV & c1,
const CHSV & c2,
const CHSV & c3,
const CHSV & c4,
TGradientDirectionCode directionCode = SHORTEST_HUES )

Fill a range of LEDs with a smooth HSV gradient between four HSV colors.

See also
fill_gradient()
Parameters
targetArraya pointer to the color array to fill
numLedsthe number of LEDs to fill
c1the starting color in the gradient
c2the first middle color for the gradient
c3the second middle color for the gradient
c4the end color for the gradient
directionCodethe direction to travel around the color wheel

Definition at line 251 of file fill.h.

253 {
254 u16 onethird = (numLeds / 3);
255 u16 twothirds = ((numLeds * 2) / 3);
256 u16 last = numLeds - 1;
257 fill_gradient(targetArray, 0, c1, onethird, c2, directionCode);
258 fill_gradient(targetArray, onethird, c2, twothirds, c3, directionCode);
259 fill_gradient(targetArray, twothirds, c3, last, c4, directionCode);
260}
void fill_gradient(T *targetArray, u16 startpos, CHSV startcolor, u16 endpos, CHSV endcolor, TGradientDirectionCode directionCode=SHORTEST_HUES) FL_NOEXCEPT
Fill a range of LEDs with a smooth HSV gradient between two HSV colors.
Definition fill.h:105

References fill_gradient(), FL_NOEXCEPT, and SHORTEST_HUES.

+ Here is the call graph for this function:

◆ fill_gradient() [2/4]

template<typename T>
void fl::fill_gradient ( T * targetArray,
u16 numLeds,
const CHSV & c1,
const CHSV & c2,
const CHSV & c3,
TGradientDirectionCode directionCode = SHORTEST_HUES )

Fill a range of LEDs with a smooth HSV gradient between three HSV colors.

See also
fill_gradient()
Parameters
targetArraya pointer to the color array to fill
numLedsthe number of LEDs to fill
c1the starting color in the gradient
c2the middle color for the gradient
c3the end color for the gradient
directionCodethe direction to travel around the color wheel

Definition at line 232 of file fill.h.

234 {
235 u16 half = (numLeds / 2);
236 u16 last = numLeds - 1;
237 fill_gradient(targetArray, 0, c1, half, c2, directionCode);
238 fill_gradient(targetArray, half, c2, last, c3, directionCode);
239}

References fill_gradient(), FL_NOEXCEPT, and SHORTEST_HUES.

+ Here is the call graph for this function:

◆ fill_gradient() [3/4]

template<typename T>
void fl::fill_gradient ( T * targetArray,
u16 numLeds,
const CHSV & c1,
const CHSV & c2,
TGradientDirectionCode directionCode = SHORTEST_HUES )

Fill a range of LEDs with a smooth HSV gradient between two HSV colors.

See also
fill_gradient()
Parameters
targetArraya pointer to the color array to fill
numLedsthe number of LEDs to fill
c1the starting color in the gradient
c2the end color for the gradient
directionCodethe direction to travel around the color wheel

Definition at line 216 of file fill.h.

218 {
219 u16 last = numLeds - 1;
220 fill_gradient(targetArray, 0, c1, last, c2, directionCode);
221}

References fill_gradient(), FL_NOEXCEPT, and SHORTEST_HUES.

+ Here is the call graph for this function:

◆ fill_gradient() [4/4]

template<typename T>
void fl::fill_gradient ( T * targetArray,
u16 startpos,
CHSV startcolor,
u16 endpos,
CHSV endcolor,
TGradientDirectionCode directionCode = SHORTEST_HUES )

Fill a range of LEDs with a smooth HSV gradient between two HSV colors.

This function can write the gradient colors either:

  1. Into an array of CRGBs (e.g., an leds[] array, or a CRGB palette)
  2. Into an array of CHSVs (e.g. a CHSV palette).

In the case of writing into a CRGB array, the gradient is computed in HSV space, and then HSV values are converted to RGB as they're written into the CRGB array.

Parameters
targetArraya pointer to the color array to fill
startposthe starting position in the array
startcolorthe starting color for the gradient
endposthe ending position in the array
endcolorthe end color for the gradient
directionCodethe direction to travel around the color wheel

Definition at line 105 of file fill.h.

107 {
108 // if the points are in the wrong order, straighten them
109 if (endpos < startpos) {
110 u16 t = endpos;
111 CHSV tc = endcolor;
112 endcolor = startcolor;
113 endpos = startpos;
114 startpos = t;
115 startcolor = tc;
116 }
117
118 // If we're fading toward black (val=0) or white (sat=0),
119 // then set the endhue to the starthue.
120 // This lets us ramp smoothly to black or white, regardless
121 // of what 'hue' was set in the endcolor (since it doesn't matter)
122 if (endcolor.value == 0 || endcolor.saturation == 0) {
123 endcolor.hue = startcolor.hue;
124 }
125
126 // Similarly, if we're fading in from black (val=0) or white (sat=0)
127 // then set the starthue to the endhue.
128 // This lets us ramp smoothly up from black or white, regardless
129 // of what 'hue' was set in the startcolor (since it doesn't matter)
130 if (startcolor.value == 0 || startcolor.saturation == 0) {
131 startcolor.hue = endcolor.hue;
132 }
133
134 saccum87 huedistance87;
135 saccum87 satdistance87;
136 saccum87 valdistance87;
137
138 satdistance87 = (endcolor.sat - startcolor.sat) << 7;
139 valdistance87 = (endcolor.val - startcolor.val) << 7;
140
141 fl::u8 huedelta8 = endcolor.hue - startcolor.hue;
142
143 if (directionCode == SHORTEST_HUES) {
144 directionCode = FORWARD_HUES;
145 if (huedelta8 > 127) {
146 directionCode = BACKWARD_HUES;
147 }
148 }
149
150 if (directionCode == LONGEST_HUES) {
151 directionCode = FORWARD_HUES;
152 if (huedelta8 < 128) {
153 directionCode = BACKWARD_HUES;
154 }
155 }
156
157 if (directionCode == FORWARD_HUES) {
158 huedistance87 = huedelta8 << 7;
159 } else /* directionCode == BACKWARD_HUES */
160 {
161 huedistance87 = (fl::u8)(256 - huedelta8) << 7;
162 huedistance87 = -huedistance87;
163 }
164
165 u16 pixeldistance = endpos - startpos;
166 i16 divisor = pixeldistance ? pixeldistance : 1;
167
168#if FASTLED_USE_32_BIT_GRADIENT_FILL
169 // Use higher precision 32 bit math for new micros.
170 i32 huedelta823 = (huedistance87 * 65536) / divisor;
171 i32 satdelta823 = (satdistance87 * 65536) / divisor;
172 i32 valdelta823 = (valdistance87 * 65536) / divisor;
173
174 huedelta823 *= 2;
175 satdelta823 *= 2;
176 valdelta823 *= 2;
177 u32 hue824 = static_cast<u32>(startcolor.hue) << 24;
178 u32 sat824 = static_cast<u32>(startcolor.sat) << 24;
179 u32 val824 = static_cast<u32>(startcolor.val) << 24;
180 for (u16 i = startpos; i <= endpos; ++i) {
181 targetArray[i] = CHSV(hue824 >> 24, sat824 >> 24, val824 >> 24);
182 hue824 += huedelta823;
183 sat824 += satdelta823;
184 val824 += valdelta823;
185 }
186#else
187 // Use 8-bit math for older micros.
188 saccum87 huedelta87 = huedistance87 / divisor;
189 saccum87 satdelta87 = satdistance87 / divisor;
190 saccum87 valdelta87 = valdistance87 / divisor;
191
192 huedelta87 *= 2;
193 satdelta87 *= 2;
194 valdelta87 *= 2;
195
196 accum88 hue88 = startcolor.hue << 8;
197 accum88 sat88 = startcolor.sat << 8;
198 accum88 val88 = startcolor.val << 8;
199 for (u16 i = startpos; i <= endpos; ++i) {
200 targetArray[i] = CHSV(hue88 >> 8, sat88 >> 8, val88 >> 8);
201 hue88 += huedelta87;
202 sat88 += satdelta87;
203 val88 += valdelta87;
204 }
205#endif // defined(FL_IS_AVR)
206}
#define saccum87
ANSI: signed short _Accum.
Definition fill.h:19
u16 accum88
ANSI: unsigned short _Accum. 8 bits int, 8 bits fraction.
Definition s16x16x4.h:182

References BACKWARD_HUES, fill_gradient(), FL_NOEXCEPT, FORWARD_HUES, LONGEST_HUES, saccum87, SHORTEST_HUES, and t.

Referenced by fill_gradient(), fill_gradient(), fill_gradient(), and fill_gradient().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fill_gradient_RGB() [1/7]

void fl::fill_gradient_RGB ( CRGB * leds,
u16 numLeds,
const CRGB & c1,
const CRGB & c2 )

Fill a range of LEDs with a smooth RGB gradient between two RGB colors.

See also
fill_gradient_RGB()
Parameters
ledsa pointer to the LED array to fill
numLedsthe number of LEDs to fill
c1the starting color in the gradient
c2the end color for the gradient

Definition at line 149 of file fill.cpp.hpp.

150 {
151 u16 last = numLeds - 1;
152 fill_gradient_RGB(leds, 0, c1, last, c2);
153}
void fill_gradient_RGB(CRGB *leds, u16 startpos, CRGB startcolor, u16 endpos, CRGB endcolor)
Fill a range of LEDs with a smooth RGB gradient between two RGB colors.
Definition fill.cpp.hpp:107

References fill_gradient_RGB(), and leds.

+ Here is the call graph for this function:

◆ fill_gradient_RGB() [2/7]

void fl::fill_gradient_RGB ( CRGB * leds,
u16 numLeds,
const CRGB & c1,
const CRGB & c2,
const CRGB & c3 )

Fill a range of LEDs with a smooth RGB gradient between three RGB colors.

See also
fill_gradient_RGB()
Parameters
ledsa pointer to the LED array to fill
numLedsthe number of LEDs to fill
c1the starting color in the gradient
c2the middle color for the gradient
c3the end color for the gradient

Definition at line 155 of file fill.cpp.hpp.

156 {
157 u16 half = (numLeds / 2);
158 u16 last = numLeds - 1;
159 fill_gradient_RGB(leds, 0, c1, half, c2);
160 fill_gradient_RGB(leds, half, c2, last, c3);
161}

References fill_gradient_RGB(), and leds.

+ Here is the call graph for this function:

◆ fill_gradient_RGB() [3/7]

void fl::fill_gradient_RGB ( CRGB * leds,
u16 numLeds,
const CRGB & c1,
const CRGB & c2,
const CRGB & c3,
const CRGB & c4 )

Fill a range of LEDs with a smooth RGB gradient between four RGB colors.

See also
fill_gradient_RGB()
Parameters
ledsa pointer to the LED array to fill
numLedsthe number of LEDs to fill
c1the starting color in the gradient
c2the first middle color for the gradient
c3the second middle color for the gradient
c4the end color for the gradient

Definition at line 163 of file fill.cpp.hpp.

164 {
165 u16 onethird = (numLeds / 3);
166 u16 twothirds = ((numLeds * 2) / 3);
167 u16 last = numLeds - 1;
168 fill_gradient_RGB(leds, 0, c1, onethird, c2);
169 fill_gradient_RGB(leds, onethird, c2, twothirds, c3);
170 fill_gradient_RGB(leds, twothirds, c3, last, c4);
171}

References fill_gradient_RGB(), and leds.

+ Here is the call graph for this function:

◆ fill_gradient_RGB() [4/7]

void fl::fill_gradient_RGB ( CRGB * leds,
u16 startpos,
CRGB startcolor,
u16 endpos,
CRGB endcolor )

Fill a range of LEDs with a smooth RGB gradient between two RGB colors.

Unlike HSV, there is no "color wheel" in RGB space, and therefore there's only one "direction" for the gradient to go. This means there's no TGradientDirectionCode parameter for direction.

Parameters
ledsa pointer to the LED array to fill
startposthe starting position in the array
startcolorthe starting color for the gradient
endposthe ending position in the array
endcolorthe end color for the gradient

Definition at line 107 of file fill.cpp.hpp.

108 {
109 // if the points are in the wrong order, straighten them
110 if (endpos < startpos) {
111 u16 t = endpos;
112 CRGB tc = endcolor;
113 endcolor = startcolor;
114 endpos = startpos;
115 startpos = t;
116 startcolor = tc;
117 }
118
119 saccum87 rdistance87;
120 saccum87 gdistance87;
121 saccum87 bdistance87;
122
123 rdistance87 = (endcolor.r - startcolor.r) << 7;
124 gdistance87 = (endcolor.g - startcolor.g) << 7;
125 bdistance87 = (endcolor.b - startcolor.b) << 7;
126
127 u16 pixeldistance = endpos - startpos;
128 i16 divisor = pixeldistance ? pixeldistance : 1;
129
130 saccum87 rdelta87 = rdistance87 / divisor;
131 saccum87 gdelta87 = gdistance87 / divisor;
132 saccum87 bdelta87 = bdistance87 / divisor;
133
134 rdelta87 *= 2;
135 gdelta87 *= 2;
136 bdelta87 *= 2;
137
138 accum88 r88 = startcolor.r << 8;
139 accum88 g88 = startcolor.g << 8;
140 accum88 b88 = startcolor.b << 8;
141 for (u16 i = startpos; i <= endpos; ++i) {
142 leds[i] = CRGB(r88 >> 8, g88 >> 8, b88 >> 8);
143 r88 += rdelta87;
144 g88 += gdelta87;
145 b88 += bdelta87;
146 }
147}

References leds, saccum87, and t.

Referenced by fill_gradient_RGB(), fill_gradient_RGB(), fill_gradient_RGB(), fill_gradient_RGB(), fill_gradient_RGB(), and fill_gradient_RGB().

+ Here is the caller graph for this function:

◆ fill_gradient_RGB() [5/7]

void fl::fill_gradient_RGB ( fl::span< CRGB > leds,
const CRGB & c1,
const CRGB & c2 )
inline

Fill a range of LEDs with a smooth RGB gradient between two RGB colors.

Unlike HSV, there is no "color wheel" in RGB space, and therefore there's only one "direction" for the gradient to go. This means there's no TGradientDirectionCode parameter for direction.

Parameters
ledsa pointer to the LED array to fill
startposthe starting position in the array
startcolorthe starting color for the gradient
endposthe ending position in the array
endcolorthe end color for the gradient

Definition at line 308 of file fill.h.

309 {
310 fill_gradient_RGB(leds.data(), static_cast<u16>(leds.size()), c1, c2);
311}

References fill_gradient_RGB(), FL_NOEXCEPT, and leds.

+ Here is the call graph for this function:

◆ fill_gradient_RGB() [6/7]

void fl::fill_gradient_RGB ( fl::span< CRGB > leds,
const CRGB & c1,
const CRGB & c2,
const CRGB & c3 )
inline

Fill a range of LEDs with a smooth RGB gradient between two RGB colors.

Unlike HSV, there is no "color wheel" in RGB space, and therefore there's only one "direction" for the gradient to go. This means there's no TGradientDirectionCode parameter for direction.

Parameters
ledsa pointer to the LED array to fill
startposthe starting position in the array
startcolorthe starting color for the gradient
endposthe ending position in the array
endcolorthe end color for the gradient

Definition at line 314 of file fill.h.

315 {
316 fill_gradient_RGB(leds.data(), static_cast<u16>(leds.size()), c1, c2, c3);
317}

References fill_gradient_RGB(), FL_NOEXCEPT, and leds.

+ Here is the call graph for this function:

◆ fill_gradient_RGB() [7/7]

void fl::fill_gradient_RGB ( fl::span< CRGB > leds,
const CRGB & c1,
const CRGB & c2,
const CRGB & c3,
const CRGB & c4 )
inline

Fill a range of LEDs with a smooth RGB gradient between two RGB colors.

Unlike HSV, there is no "color wheel" in RGB space, and therefore there's only one "direction" for the gradient to go. This means there's no TGradientDirectionCode parameter for direction.

Parameters
ledsa pointer to the LED array to fill
startposthe starting position in the array
startcolorthe starting color for the gradient
endposthe ending position in the array
endcolorthe end color for the gradient

Definition at line 320 of file fill.h.

322 {
323 fill_gradient_RGB(leds.data(), static_cast<u16>(leds.size()), c1, c2, c3,
324 c4);
325}

References fill_gradient_RGB(), FL_NOEXCEPT, and leds.

+ Here is the call graph for this function:

◆ fill_rainbow() [1/3]

void fl::fill_rainbow ( CHSV * targetArray,
int numToFill,
fl::u8 initialhue,
fl::u8 deltahue = 5 )

Fill a range of LEDs with a rainbow of colors.

The colors making up the rainbow are at full saturation and full value (brightness).

Parameters
targetArraya pointer to the LED array to fill
numToFillthe number of LEDs to fill in the array
initialhuethe starting hue for the rainbow
deltahuehow many hue values to advance for each LED

Definition at line 41 of file fill.cpp.hpp.

42 {
43 CHSV hsv;
44 hsv.hue = initialhue;
45 hsv.val = 255;
46 hsv.sat = 240;
47 for (int i = 0; i < numToFill; ++i) {
48 targetArray[i] = hsv;
49 hsv.hue += deltahue;
50 }
51}

◆ fill_rainbow() [2/3]

void fl::fill_rainbow ( CRGB * targetArray,
int numToFill,
fl::u8 initialhue,
fl::u8 deltahue = 5 )

Fill a range of LEDs with a rainbow of colors.

The colors making up the rainbow are at full saturation and full value (brightness).

Parameters
targetArraya pointer to the LED array to fill
numToFillthe number of LEDs to fill in the array
initialhuethe starting hue for the rainbow
deltahuehow many hue values to advance for each LED

Definition at line 29 of file fill.cpp.hpp.

30 {
31 CHSV hsv;
32 hsv.hue = initialhue;
33 hsv.val = 255;
34 hsv.sat = 240;
35 for (int i = 0; i < numToFill; ++i) {
36 targetArray[i] = hsv;
37 hsv.hue += deltahue;
38 }
39}

Referenced by fill_rainbow(), and fl::DemoReel100::rainbow().

+ Here is the caller graph for this function:

◆ fill_rainbow() [3/3]

void fl::fill_rainbow ( fl::span< CRGB > leds,
fl::u8 initialhue,
fl::u8 deltahue = 5 )
inline

Fill a range of LEDs with a rainbow of colors.

The colors making up the rainbow are at full saturation and full value (brightness).

Parameters
targetArraya pointer to the LED array to fill
numToFillthe number of LEDs to fill in the array
initialhuethe starting hue for the rainbow
deltahuehow many hue values to advance for each LED

Definition at line 58 of file fill.h.

59 {
60 fill_rainbow(leds.data(), static_cast<int>(leds.size()), initialhue, deltahue);
61}
void fill_rainbow(CRGB *targetArray, int numToFill, u8 initialhue, u8 deltahue)
Fill a range of LEDs with a rainbow of colors.
Definition fill.cpp.hpp:29

References fill_rainbow(), FL_NOEXCEPT, and leds.

+ Here is the call graph for this function:

◆ fill_rainbow_circular() [1/3]

void fl::fill_rainbow_circular ( CHSV * targetArray,
int numToFill,
fl::u8 initialhue,
bool reversed = false )

Fill a range of LEDs with a rainbow of colors, so that the hues are continuous between the end of the strip and the beginning.

The colors making up the rainbow are at full saturation and full value (brightness).

Parameters
targetArraya pointer to the LED array to fill
numToFillthe number of LEDs to fill in the array
initialhuethe starting hue for the rainbow
reversedwhether to progress through the rainbow hues backwards

Definition at line 80 of file fill.cpp.hpp.

81 {
82 if (numToFill == 0)
83 return; // avoiding div/0
84
85 CHSV hsv;
86 hsv.hue = initialhue;
87 hsv.val = 255;
88 hsv.sat = 240;
89
90 const u16 hueChange =
91 65535 / (u16)numToFill; // hue change for each LED, * 256 for
92 // precision (256 * 256 - 1)
93 u16 hueOffset = 0; // offset for hue value, with precision (*256)
94
95 for (int i = 0; i < numToFill; ++i) {
96 targetArray[i] = hsv;
97 if (reversed)
98 hueOffset -= hueChange;
99 else
100 hueOffset += hueChange;
101 hsv.hue = initialhue +
102 (u8)(hueOffset >>
103 8); // assign new hue with precise offset (as 8-bit)
104 }
105}

◆ fill_rainbow_circular() [2/3]

void fl::fill_rainbow_circular ( CRGB * targetArray,
int numToFill,
fl::u8 initialhue,
bool reversed = false )

Fill a range of LEDs with a rainbow of colors, so that the hues are continuous between the end of the strip and the beginning.

The colors making up the rainbow are at full saturation and full value (brightness).

Parameters
targetArraya pointer to the LED array to fill
numToFillthe number of LEDs to fill in the array
initialhuethe starting hue for the rainbow
reversedwhether to progress through the rainbow hues backwards

Definition at line 53 of file fill.cpp.hpp.

54 {
55 if (numToFill == 0)
56 return; // avoiding div/0
57
58 CHSV hsv;
59 hsv.hue = initialhue;
60 hsv.val = 255;
61 hsv.sat = 240;
62
63 const u16 hueChange =
64 65535 / (u16)numToFill; // hue change for each LED, * 256 for
65 // precision (256 * 256 - 1)
66 u16 hueOffset = 0; // offset for hue value, with precision (*256)
67
68 for (int i = 0; i < numToFill; ++i) {
69 targetArray[i] = hsv;
70 if (reversed)
71 hueOffset -= hueChange;
72 else
73 hueOffset += hueChange;
74 hsv.hue = initialhue +
75 (u8)(hueOffset >>
76 8); // assign new hue with precise offset (as 8-bit)
77 }
78}

Referenced by fill_rainbow_circular().

+ Here is the caller graph for this function:

◆ fill_rainbow_circular() [3/3]

void fl::fill_rainbow_circular ( fl::span< CRGB > leds,
fl::u8 initialhue,
bool reversed = false )
inline

Fill a range of LEDs with a rainbow of colors, so that the hues are continuous between the end of the strip and the beginning.

The colors making up the rainbow are at full saturation and full value (brightness).

Parameters
targetArraya pointer to the LED array to fill
numToFillthe number of LEDs to fill in the array
initialhuethe starting hue for the rainbow
reversedwhether to progress through the rainbow hues backwards

Definition at line 79 of file fill.h.

80 {
81 fill_rainbow_circular(leds.data(), static_cast<int>(leds.size()),
82 initialhue, reversed);
83}
void fill_rainbow_circular(CRGB *targetArray, int numToFill, u8 initialhue, bool reversed)
Fill a range of LEDs with a rainbow of colors, so that the hues are continuous between the end of the...
Definition fill.cpp.hpp:53

References fill_rainbow_circular(), FL_NOEXCEPT, and leds.

+ Here is the call graph for this function:

◆ fill_solid() [1/3]

void fl::fill_solid ( CHSV * targetArray,
int numToFill,
const CHSV & color )

Fill a range of LEDs with a solid color.

Parameters
targetArraya pointer to the LED array to fill
numToFillthe number of LEDs to fill in the array
colorthe color to fill with

Definition at line 16 of file fill.cpp.hpp.

17 {
18 for (int i = 0; i < numToFill; ++i) {
19 targetArray[i] = color;
20 }
21}

◆ fill_solid() [2/3]

void fl::fill_solid ( CRGB * targetArray,
int numToFill,
const CRGB & color )

Fill a range of LEDs with a solid color.

Parameters
targetArraya pointer to the LED array to fill
numToFillthe number of LEDs to fill in the array
colorthe color to fill with

Definition at line 9 of file fill.cpp.hpp.

10 {
11 for (int i = 0; i < numToFill; ++i) {
12 targetArray[i] = color;
13 }
14}

Referenced by fl::Pacifica::draw(), fill_solid(), and fl::NoisePalette::SetupBlackAndWhiteStripedPalette().

+ Here is the caller graph for this function:

◆ fill_solid() [3/3]

void fl::fill_solid ( fl::span< CRGB > leds,
const CRGB & color )
inline

Fill a range of LEDs with a solid color.

Parameters
targetArraya pointer to the LED array to fill
numToFillthe number of LEDs to fill in the array
colorthe color to fill with

Definition at line 39 of file fill.h.

39 {
40 fill_solid(leds.data(), static_cast<int>(leds.size()), color);
41}
void fill_solid(CRGB *targetArray, int numToFill, const CRGB &color)
Fill a range of LEDs with a solid color.
Definition fill.cpp.hpp:9

References fill_solid(), FL_NOEXCEPT, and leds.

+ Here is the call graph for this function:

◆ find()

template<typename Iterator, typename T>
Iterator fl::find ( Iterator first,
Iterator last,
const T & value )

Definition at line 212 of file algorithm.h.

212 {
213 while (first != last) {
214 if (*first == value) {
215 return first;
216 }
217 ++first;
218 }
219 return last;
220}

References FL_NOEXCEPT, and type_rank< T >::value.

Referenced by fl::task::Executor::register_runner(), and fl::task::Executor::unregister_runner().

+ Here is the caller graph for this function:

◆ find_if()

template<typename Iterator, typename UnaryPredicate>
Iterator fl::find_if ( Iterator first,
Iterator last,
UnaryPredicate pred )

Definition at line 223 of file algorithm.h.

223 {
224 while (first != last) {
225 if (pred(*first)) {
226 return first;
227 }
228 ++first;
229 }
230 return last;
231}

References FL_NOEXCEPT.

◆ find_if_not()

template<typename Iterator, typename UnaryPredicate>
Iterator fl::find_if_not ( Iterator first,
Iterator last,
UnaryPredicate pred )

Definition at line 234 of file algorithm.h.

234 {
235 while (first != last) {
236 if (!pred(*first)) {
237 return first;
238 }
239 ++first;
240 }
241 return last;
242}

References FL_NOEXCEPT.

◆ five_bit_hd_gamma_bitshift() [1/2]

void fl::five_bit_hd_gamma_bitshift ( fl::span< const CRGB > colors,
CRGB colors_scale,
u8 global_brightness,
fl::span< CRGB > out_colors,
fl::span< u8 > out_power_5bit )

Definition at line 83 of file five_bit_hd_gamma.cpp.hpp.

85 {
86
87 u16 n = static_cast<u16>(colors.size());
88 if (out_colors.size() < n) n = static_cast<u16>(out_colors.size());
89 if (out_power_5bit.size() < n) n = static_cast<u16>(out_power_5bit.size());
90
91 // Brightness==0: zero everything and return immediately.
92 if (global_brightness == 0) {
93 for (u16 i = 0; i < n; ++i) {
94 out_colors[i] = CRGB(0, 0, 0);
95 out_power_5bit[i] = 0;
96 }
97 return;
98 }
99
101
102 // Precompute color-scale multipliers once (avoid per-pixel branches).
103 const bool apply_r_scale = (colors_scale.r != 0xff);
104 const bool apply_g_scale = (colors_scale.g != 0xff);
105 const bool apply_b_scale = (colors_scale.b != 0xff);
106 const u16 rscale_p1 = 1u + static_cast<u16>(colors_scale.r);
107 const u16 gscale_p1 = 1u + static_cast<u16>(colors_scale.g);
108 const u16 bscale_p1 = 1u + static_cast<u16>(colors_scale.b);
109
110 // Precompute brightness multiplier once.
111 const bool apply_brightness = (global_brightness != 0xff);
112 const u16 bright_p1 = 1u + static_cast<u16>(global_brightness);
113
114 for (u16 i = 0; i < n; ++i) {
115 const CRGB &c = colors[i];
116
117 u16 r16 = five_bit_impl::gamma_lut_read(glut, c.r);
118 u16 g16 = five_bit_impl::gamma_lut_read(glut, c.g);
119 u16 b16 = five_bit_impl::gamma_lut_read(glut, c.b);
120
121 // Color-scale: branchless multiply, guarded by precomputed bools.
122 if (apply_r_scale) r16 = five_bit_impl::scale16by8_nozero(r16, rscale_p1);
123 if (apply_g_scale) g16 = five_bit_impl::scale16by8_nozero(g16, gscale_p1);
124 if (apply_b_scale) b16 = five_bit_impl::scale16by8_nozero(b16, bscale_p1);
125
126 five_bit_impl::five_bit_pixel(r16, g16, b16, global_brightness,
127 bright_p1, apply_brightness,
128 &out_colors[i], &out_power_5bit[i]);
129 }
130}
const u16 GAMMA_2_8_LUT[256]

References GAMMA_2_8_LUT, and fl::span< T, Extent >::size().

Referenced by APA102Controller< DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED, GAMMA_CORRECTION_MODE, START_FRAME, END_FRAME >::showPixelsGammaBitShift().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ five_bit_hd_gamma_bitshift() [2/2]

void fl::five_bit_hd_gamma_bitshift ( fl::span< const CRGB > colors,
CRGB colors_scale,
u8 global_brightness,
fl::span< CRGBA5 > out )

Definition at line 133 of file five_bit_hd_gamma.cpp.hpp.

135 {
136
137 u16 n = static_cast<u16>(colors.size());
138 if (out.size() < n) n = static_cast<u16>(out.size());
139
140 // Brightness==0: zero everything and return immediately.
141 if (global_brightness == 0) {
142 for (u16 i = 0; i < n; ++i) {
143 out[i].color = CRGB(0, 0, 0);
144 out[i].brightness_5bit = 0;
145 }
146 return;
147 }
148
150
151 // Precompute color-scale multipliers once (avoid per-pixel branches).
152 const bool apply_r_scale = (colors_scale.r != 0xff);
153 const bool apply_g_scale = (colors_scale.g != 0xff);
154 const bool apply_b_scale = (colors_scale.b != 0xff);
155 const u16 rscale_p1 = 1u + static_cast<u16>(colors_scale.r);
156 const u16 gscale_p1 = 1u + static_cast<u16>(colors_scale.g);
157 const u16 bscale_p1 = 1u + static_cast<u16>(colors_scale.b);
158
159 // Precompute brightness multiplier once.
160 const bool apply_brightness = (global_brightness != 0xff);
161 const u16 bright_p1 = 1u + static_cast<u16>(global_brightness);
162
163 for (u16 i = 0; i < n; ++i) {
164 const CRGB &c = colors[i];
165
166 u16 r16 = five_bit_impl::gamma_lut_read(glut, c.r);
167 u16 g16 = five_bit_impl::gamma_lut_read(glut, c.g);
168 u16 b16 = five_bit_impl::gamma_lut_read(glut, c.b);
169
170 // Color-scale: branchless multiply, guarded by precomputed bools.
171 if (apply_r_scale) r16 = five_bit_impl::scale16by8_nozero(r16, rscale_p1);
172 if (apply_g_scale) g16 = five_bit_impl::scale16by8_nozero(g16, gscale_p1);
173 if (apply_b_scale) b16 = five_bit_impl::scale16by8_nozero(b16, bscale_p1);
174
175 five_bit_impl::five_bit_pixel(r16, g16, b16, global_brightness,
176 bright_p1, apply_brightness,
177 &out[i].color, &out[i].brightness_5bit);
178 }
179}

References GAMMA_2_8_LUT, and fl::span< T, Extent >::size().

+ Here is the call graph for this function:

◆ FL_ALIGN_AS_T()

template<typename... Types>
class fl::FL_ALIGN_AS_T ( max_align< Types... >::value )

Get a reference to the stored value of type T

Template Parameters
TThe type to retrieve
Returns
Reference to the stored value
Note
Asserts if the variant doesn't contain type T. Use is<T>() to check first.
Warning
Will crash if called with wrong type - this is intentional for fast failure

Get a const reference to the stored value of type T

Template Parameters
TThe type to retrieve
Returns
Const reference to the stored value
Note
Asserts if the variant doesn't contain type T. Use is<T>() to check first.
Warning
Will crash if called with wrong type - this is intentional for fast failure

Definition at line 1 of file variant.h.

17 {
18 public:
19 using Tag = u8;
20 static constexpr Tag Empty = 0;
21
22 // –– ctors/dtors/assign as before …
23
24 variant() FL_NOEXCEPT : _tag(Empty) {}
25
26 template <typename T, typename = typename fl::enable_if<
27 contains_type<T, Types...>::value>::type>
28 variant(const T &value) FL_NOEXCEPT : _tag(Empty) {
29 construct<T>(value);
30 }
31
32 template <typename T, typename = typename fl::enable_if<
33 contains_type<T, Types...>::value>::type>
34 variant(T &&value) FL_NOEXCEPT : _tag(Empty) {
35 construct<T>(fl::move(value));
36 }
37
38 variant(const variant &other) FL_NOEXCEPT : _tag(Empty) {
39 if (!other.empty()) {
40 copy_construct_from(other);
41 }
42 }
43
44 variant(variant &&other) FL_NOEXCEPT : _tag(Empty) {
45 if (!other.empty()) {
46 move_construct_from(other);
47 // After moving, mark other as empty to prevent destructor calls on moved-from objects
48 other._tag = Empty;
49 }
50 }
51
52 ~variant() FL_NOEXCEPT { reset(); }
53
54 variant &operator=(const variant &other) FL_NOEXCEPT {
55 if (this != &other) {
56 reset();
57 if (!other.empty()) {
58 copy_construct_from(other);
59 }
60 }
61 return *this;
62 }
63
64 variant &operator=(variant &&other) FL_NOEXCEPT {
65 if (this != &other) {
66 reset();
67 if (!other.empty()) {
68 move_construct_from(other);
69 // After moving, mark other as empty to prevent destructor calls on moved-from objects
70 other._tag = Empty;
71 }
72 }
73 return *this;
74 }
75
76 template <typename T, typename = typename fl::enable_if<
77 contains_type<T, Types...>::value>::type>
78 variant &operator=(const T &value) FL_NOEXCEPT {
79 // Copy first to handle self-referential values (e.g. assigning
80 // from a reference into this variant's own storage)
81 T value_copy(value);
82 reset();
83 construct<T>(fl::move(value_copy));
84 return *this;
85 }
86
87 template <typename T, typename = typename fl::enable_if<
88 contains_type<T, Types...>::value>::type>
89 variant &operator=(T &&value) FL_NOEXCEPT {
90 reset();
91 construct<T>(fl::move(value));
92 return *this;
93 }
94
95 // –– modifiers, observers, ptr/get, etc. unchanged …
96
97 template <typename T, typename... Args>
98 typename fl::enable_if<contains_type<T, Types...>::value, T &>::type
99 emplace(Args &&...args) FL_NOEXCEPT {
100 reset();
101 construct<T>(fl::forward<Args>(args)...);
102 return *ptr<T>();
103 }
104
105 void reset() FL_NOEXCEPT {
106 if (!empty()) {
107 destroy_current();
108 _tag = Empty;
109 }
110 }
111
112 Tag tag() const FL_NOEXCEPT { return _tag; }
113 bool empty() const FL_NOEXCEPT { return _tag == Empty; }
114
115 template <typename T> bool is() const FL_NOEXCEPT {
116 return _tag == type_to_tag<T>();
117 }
118
119 template <typename T> T *ptr() FL_NOEXCEPT {
120 if (!is<T>()) return nullptr;
121 // Use bit_cast_ptr for safe type-punning on properly aligned storage
122 // The storage is guaranteed to be properly aligned by alignas(max_align<Types...>::value)
123 return fl::bit_cast_ptr<T>(&_storage[0]);
124 }
125
126 template <typename T> const T *ptr() const FL_NOEXCEPT {
127 if (!is<T>()) return nullptr;
128 // Use bit_cast_ptr for safe type-punning on properly aligned storage
129 // The storage is guaranteed to be properly aligned by alignas(max_align<Types...>::value)
130 return fl::bit_cast_ptr<const T>(&_storage[0]);
131 }
132
138 template <typename T> T &get() FL_NOEXCEPT {
139 // Dereference ptr() directly - will crash with null pointer access if wrong type
140 // This provides fast failure semantics similar to std::variant
141 return *ptr<T>();
142 }
143
149 template <typename T> const T &get() const FL_NOEXCEPT {
150 // Dereference ptr() directly - will crash with null pointer access if wrong type
151 // This provides fast failure semantics similar to std::variant
152 return *ptr<T>();
153 }
154
155 template <typename T> bool equals(const T &other) const FL_NOEXCEPT {
156 if (auto p = ptr<T>()) {
157 return *p == other;
158 }
159 return false;
160 }
161
162 // –– visitor using O(1) function‐pointer table
163 template <typename Visitor> void visit(Visitor &visitor) FL_NOEXCEPT {
164 if (_tag == Empty)
165 return;
166
167 // Fn is "a pointer to function taking (void* storage, Visitor&)"
168 using Fn = void (*)(void *, Visitor &);
169
170 // Build a constexpr array of one thunk per type in Types...
171 // Each thunk casts the storage back to the right T* and calls
172 // visitor.accept
173 static constexpr Fn table[] = {
174 &variant::template visit_fn<Types, Visitor>...};
175
176 // _tag is 1-based, so dispatch in O(1) via one indirect call:
177 // Check bounds to prevent out-of-bounds access
178 size_t index = _tag - 1;
179 if (index < sizeof...(Types)) {
180 table[index](&_storage, visitor);
181 }
182 }
183
184 template <typename Visitor> void visit(Visitor &visitor) const FL_NOEXCEPT {
185 if (_tag == Empty)
186 return;
187
188 // Fn is "a pointer to function taking (const void* storage, Visitor&)"
189 using Fn = void (*)(const void *, Visitor &);
190
191 // Build a constexpr array of one thunk per type in Types...
192 static constexpr Fn table[] = {
193 &variant::template visit_fn_const<Types, Visitor>...};
194
195 // _tag is 1-based, so dispatch in O(1) via one indirect call:
196 // Check bounds to prevent out-of-bounds access
197 size_t index = _tag - 1;
198 if (index < sizeof...(Types)) {
199 table[index](&_storage, visitor);
200 }
201 }
202
203 private:
204 // –– helper for the visit table
205 template <typename T, typename Visitor>
206 static void visit_fn(void *storage, Visitor &v) FL_NOEXCEPT {
207 // Use bit_cast_ptr for safe type-punning on properly aligned storage
208 // The storage is guaranteed to be properly aligned by alignas(max_align<Types...>::value)
209 T* typed_ptr = fl::bit_cast_ptr<T>(storage);
210 v.accept(*typed_ptr);
211 }
212
213 template <typename T, typename Visitor>
214 static void visit_fn_const(const void *storage, Visitor &v) FL_NOEXCEPT {
215 // Use bit_cast_ptr for safe type-punning on properly aligned storage
216 // The storage is guaranteed to be properly aligned by alignas(max_align<Types...>::value)
217 const T* typed_ptr = fl::bit_cast_ptr<const T>(storage);
218 v.accept(*typed_ptr);
219 }
220
221 // –– destroy via table
222 void destroy_current() FL_NOEXCEPT {
223 using Fn = void (*)(void *);
226 static constexpr Fn table[] = {&variant::template destroy_fn<Types>...};
227 if (_tag != Empty) {
228 table[_tag - 1](&_storage);
229 }
231 }
232
233 template <typename T> static void destroy_fn(void *storage) FL_NOEXCEPT {
234 // Use bit_cast_ptr for safe type-punning on properly aligned storage
235 // The storage is guaranteed to be properly aligned by alignas(max_align<Types...>::value)
236 T* typed_ptr = fl::bit_cast_ptr<T>(storage);
237 typed_ptr->~T();
238 }
239
240 // –– copy‐construct via table
241 void copy_construct_from(const variant &other) FL_NOEXCEPT {
242 using Fn = void (*)(void *, const variant &);
245 static constexpr Fn table[] = {&variant::template copy_fn<Types>...};
246 table[other._tag - 1](&_storage, other);
248 _tag = other._tag;
249 }
250
251 template <typename T>
252 static void copy_fn(void *storage, const variant &other) FL_NOEXCEPT {
253 // Use bit_cast_ptr for safe type-punning on properly aligned storage
254 // The storage is guaranteed to be properly aligned by alignas(max_align<Types...>::value)
255 const T* source_ptr = fl::bit_cast_ptr<const T>(&other._storage[0]);
256 new (storage) T(*source_ptr);
257 }
258
259 // –– move‐construct via table
260 void move_construct_from(variant &other) FL_NOEXCEPT {
261 using Fn = void (*)(void *, variant &);
264 static constexpr Fn table[] = {&variant::template move_fn<Types>...};
265 table[other._tag - 1](&_storage, other);
267 _tag = other._tag;
268 other.reset();
269 }
270
271 template <typename T> static void move_fn(void *storage, variant &other) FL_NOEXCEPT {
272 // Use bit_cast_ptr for safe type-punning on properly aligned storage
273 // The storage is guaranteed to be properly aligned by alignas(max_align<Types...>::value)
274 T* source_ptr = fl::bit_cast_ptr<T>(&other._storage[0]);
275 new (storage) T(fl::move(*source_ptr));
276 }
277
278 // –– everything below here (type_traits, construct<T>, type_to_tag,
279 // storage)
280 // stays exactly as you wrote it:
281
282 // … max_size, max_align, contains_type, type_to_tag_impl, etc. …
283
284 // Helper to map a type to its tag value
285 template <typename T> static constexpr Tag type_to_tag() FL_NOEXCEPT {
286 return type_to_tag_impl<T, Types...>::value;
287 }
288
289 // Implementation details for type_to_tag
290 template <typename T, typename... Ts> struct type_to_tag_impl;
291
292 template <typename T> struct type_to_tag_impl<T> {
293 static constexpr Tag value = 0; // Not found
294 };
295
296 template <typename T, typename U, typename... Rest>
297 struct type_to_tag_impl<T, U, Rest...> {
298 static constexpr Tag value =
300 ? 1
301 : (type_to_tag_impl<T, Rest...>::value == 0
302 ? 0
303 : type_to_tag_impl<T, Rest...>::value + 1);
304 };
305
306 template <typename T, typename... Args> void construct(Args &&...args) FL_NOEXCEPT {
307 new (&_storage) T(fl::forward<Args>(args)...);
308 _tag = type_to_tag<T>();
309 }
310
312
313 Tag _tag;
314};
constexpr remove_reference< T >::type && move(T &&t) FL_NOEXCEPT
Definition s16x16x4.h:28
To * bit_cast_ptr(void *storage) FL_NOEXCEPT
Definition bit_cast.h:60
pair_element< I, T1, T2 >::type & get(pair< T1, T2 > &p) FL_NOEXCEPT
Definition pair.h:115
#define FL_ALIGN_AS_T(expr)
#define FL_DISABLE_WARNING(warning)
#define FL_DISABLE_WARNING_PUSH
#define FL_DISABLE_WARNING_POP
#define FL_NOEXCEPT

References args, bit_cast_ptr(), FL_ALIGN_AS_T(), FL_ALIGN_AS_T, FL_DISABLE_WARNING, FL_DISABLE_WARNING_POP, FL_DISABLE_WARNING_PUSH, FL_NOEXCEPT, fl::fl::forward(), get(), fl::fl::move(), type_rank< T >::value, and fl::fl::is_same< T, U >::value.

Referenced by FL_ALIGN_AS_T(), fl::Singleton< AutoResearchRemoteControl >::instance(), fl::SingletonThreadLocal< T, N >::instance(), and fl::SingletonShared< T, N >::instanceInner().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ FL_ALIGN_PROGMEM()

fl::FL_ALIGN_PROGMEM ( 64 ) const

References FL_PROGMEM, and GAMMA_2_8_LUT.

◆ FL_ALIGNAS() [1/5]

struct fl::FL_ALIGNAS ( 16 )

Combined sin+cos result for 4 angles (raw SIMD primitives)

Definition at line 1 of file chasing_spiral_state.h.

23 {
24 // SoA pixel geometry — built once when grid size changes, reused every frame.
25 // Each array has `count` valid entries, padded to the next multiple of 4
26 // (so SIMD loads never read past the allocation).
27 fl::vector<fl::i32> base_angle; // 3*theta - dist/3, raw s16x16
28 fl::vector<fl::i32> dist_scaled; // distance * 0.1, raw s16x16
29 fl::vector<fl::i32> rf3; // 3 * radial_filter, raw s16x16 (red)
30 fl::vector<fl::i32> rf_half; // radial_filter / 2, raw s16x16 (green)
31 fl::vector<fl::i32> rf_quarter; // radial_filter / 4, raw s16x16 (blue)
32 fl::vector<fl::u16> pixel_idx; // pre-mapped xyMap(x,y) LED index
33 int count = 0;
34
35 // Perlin fade LUT (257 entries, Q8.24 format).
36 // FL_ALIGNAS(16): enables aligned SIMD loads in pnoise2d_raw_simd4_vec.
37 FL_ALIGNAS(16) fl::i32 fade_lut[257];
38 bool fade_lut_initialized = false;
39
40 ChasingSpiralState() : fade_lut{}, fade_lut_initialized(false) {}
41};
#define FL_ALIGNAS(N)

References FL_ALIGNAS(), and FL_ALIGNAS.

+ Here is the call graph for this function:

◆ FL_ALIGNAS() [2/5]

struct fl::FL_ALIGNAS ( 4 )

Lookup table for nibble-to-waveform expansion in wave3 format (32 bytes)

Maps each 4-bit nibble (0x0 to 0xF) to a 12-bit waveform pattern stored in u16. Each LED bit expands to 3 ticks: bit-0 → 100 (1H,2L), bit-1 → 110 (2H,1L). 4 bits × 3 ticks = 12 bits per nibble, stored in the lower 12 bits of u16.

Total size: 16 nibbles × 2 bytes = 32 bytes

Definition at line 1 of file wave3.h.

31 {
32 u16 lut[16]; // nibble → 12-bit pattern in lower bits of u16
33};

Referenced by FL_ALIGNAS(), and FL_ALIGNAS().

+ Here is the caller graph for this function:

◆ FL_ALIGNAS() [3/5]

fl::FL_ALIGNAS ( 64 ) const

Definition at line 18 of file perlin_float.h.

18 {
19 151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7,
20 225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10, 23, 190,
21 6, 148, 247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117,
22 35, 11, 32, 57, 177, 33, 88, 237, 149, 56, 87, 174, 20, 125, 136,
23 171, 168, 68, 175, 74, 165, 71, 134, 139, 48, 27, 166, 77, 146, 158,
24 231, 83, 111, 229, 122, 60, 211, 133, 230, 220, 105, 92, 41, 55, 46,
25 245, 40, 244, 102, 143, 54, 65, 25, 63, 161, 1, 216, 80, 73, 209,
26 76, 132, 187, 208, 89, 18, 169, 200, 196, 135, 130, 116, 188, 159, 86,
27 164, 100, 109, 198, 173, 186, 3, 64, 52, 217, 226, 250, 124, 123, 5,
28 202, 38, 147, 118, 126, 255, 82, 85, 212, 207, 206, 59, 227, 47, 16,
29 58, 17, 182, 189, 28, 42, 223, 183, 170, 213, 119, 248, 152, 2, 44,
30 154, 163, 70, 221, 153, 101, 155, 167, 43, 172, 9, 129, 22, 39, 253,
31 19, 98, 108, 110, 79, 113, 224, 232, 178, 185, 112, 104, 218, 246, 97,
32 228, 251, 34, 242, 193, 238, 210, 144, 12, 191, 179, 162, 241, 81, 51,
33 145, 235, 249, 14, 239, 107, 49, 192, 214, 31, 181, 199, 106, 157, 184,
34 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254, 138, 236, 205, 93,
35 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156,
36 180};

◆ FL_ALIGNAS() [4/5]

struct fl::FL_ALIGNAS ( 8 )

Container for 8 packed wave symbols (8 bytes total)

Byte-indexed expansion LUT (#2526): 256 entries × 8 bytes = 2 KB.

Lookup table for nibble-to-waveform expansion (64 bytes total)

Holds 8 Wave8Bit structures (1 byte each = 8 bytes total). The struct is 8-byte aligned for optimized memory access.

Maps each 4-bit nibble (0x0 to 0xF) to 4 Wave8Bit structures (4 bytes). This reduces byte conversion from 8 lookups (bit-level) to 2 lookups (nibble-level).

Total size: 16 nibbles × 4 Wave8Bit × 1 byte = 64 bytes

Maps a full input byte directly to its 8 Wave8Bit pulse symbols, so the hot expansion is a single indexed 8-byte copy instead of two nibble lookups + two 4-byte copies. Same total memory traffic, ~half the index/issue work — the win on the in-order RV32 core (which is issue-bound here, not bandwidth- bound). Keep this in internal SRAM (not PSRAM) so the lookup stays fast.

Definition at line 1 of file wave8.h.

30 {
31 Wave8Bit symbols[8]; // 8 bytes total (8 symbols × 1 byte each)
32};

◆ FL_ALIGNAS() [5/5]

template<typename T, fl::size N>
struct fl::FL_ALIGNAS ( alignof(T) ,
alignof(fl::uptr) ? alignof(T) :alignof(fl::uptr)  )

Definition at line 1 of file vector.h.

32 : alignof(fl::uptr)) InlinedMemoryBlock {
33 // using MemoryType = uinptr_t;
34 typedef fl::uptr MemoryType;
35 enum {
36 kTotalBytes = N * sizeof(T),
37 kExtraSize =
38 (kTotalBytes % alignof(fl::max_align_t)) ? (alignof(fl::max_align_t) - (kTotalBytes % alignof(fl::max_align_t))) : 0,
39 // Fix: calculate total bytes first, then convert to MemoryType units
40 kTotalBytesAligned = kTotalBytes + kExtraSize,
41 kBlockSize = (kTotalBytesAligned + sizeof(MemoryType) - 1) / sizeof(MemoryType),
42 };
43
44 InlinedMemoryBlock() FL_NOEXCEPT {
45 fl::memset(mMemoryBlock, 0, sizeof(mMemoryBlock));
46#ifdef FASTLED_TESTING
47 __data = memory();
48#endif
49 }
50
51 InlinedMemoryBlock(const InlinedMemoryBlock &other) FL_NOEXCEPT = default;
52 InlinedMemoryBlock(InlinedMemoryBlock &&other) FL_NOEXCEPT = default;
53
54 // u32 mRaw[N * sizeof(T)/sizeof(MemoryType) + kExtraSize];
55 // align this to the size of MemoryType.
56 // u32 mMemoryBlock[kTotalSize] = {0};
57 MemoryType mMemoryBlock[kBlockSize];
58
59 T *memory() FL_NOEXCEPT {
60 MemoryType *begin = &mMemoryBlock[0];
61 fl::uptr shift_up =
62 fl::ptr_to_int(begin) & (sizeof(MemoryType) - 1);
63 MemoryType *raw = begin + shift_up;
64 return fl::bit_cast<T *>(raw);
65 }
66
67 const T *memory() const FL_NOEXCEPT {
68 const MemoryType *begin = &mMemoryBlock[0];
69 const fl::uptr shift_up =
70 fl::ptr_to_int(begin) & (sizeof(MemoryType) - 1);
71 const MemoryType *raw = begin + shift_up;
72 return fl::bit_cast<const T *>(raw);
73 }
74
75#ifdef FASTLED_TESTING
76 T *__data = nullptr;
77#endif
78};
max_align_selector<(sizeof(longdouble)>sizeof(double))>::type max_align_t
Definition s16x16x4.h:56
constexpr T * begin(T(&array)[N]) FL_NOEXCEPT
uptr ptr_to_int(T *ptr) FL_NOEXCEPT
Definition bit_cast.h:71

References begin(), bit_cast(), FL_ALIGNAS(), FL_NOEXCEPT, memset(), and ptr_to_int().

+ Here is the call graph for this function:

◆ FL_DISABLE_WARNING() [1/3]

FL_DISABLE_WARNING_PUSH fl::FL_DISABLE_WARNING ( cast- align)

◆ FL_DISABLE_WARNING() [2/3]

FL_DISABLE_WARNING_PUSH fl::FL_DISABLE_WARNING ( float- equal)

Definition at line 135 of file math.h.

142 {
143
144// Primary template for map_range_math
145template <typename T, typename U> struct map_range_math {
146 static U map(T value, T in_min, T in_max, U out_min, U out_max) FL_NOEXCEPT {
147 if (in_min == in_max)
148 return out_min;
149 return out_min +
150 (value - in_min) * (out_max - out_min) / (in_max - in_min);
151 }
152};
153
154// Specialization for u8 -> u8
155template <> struct map_range_math<u8, u8> {
156 static u8 map(u8 value, u8 in_min, u8 in_max,
157 u8 out_min, u8 out_max) FL_NOEXCEPT;
158};
159
160// Specialization for u16 -> u16
161template <> struct map_range_math<u16, u16> {
162 static u16 map(u16 value, u16 in_min, u16 in_max,
163 u16 out_min, u16 out_max) FL_NOEXCEPT;
164};
165
166// Equality comparison helpers
167template <typename T> bool equals(T a, T b) FL_NOEXCEPT { return a == b; }
168inline bool equals(float a, float b) FL_NOEXCEPT { return fl::almost_equal(a, b); }
169inline bool equals(double d, double d2) FL_NOEXCEPT { return fl::almost_equal(d, d2); }
170
171} // namespace map_range_detail
MapRedBlackTree< Key, T, Compare, fl::allocator_slab< char > > map
Definition map.h:283
constexpr bool almost_equal(T a, T b, U tolerance) FL_NOEXCEPT
Definition math.h:90

References almost_equal(), equal(), FL_DISABLE_WARNING_FLOAT_CONVERSION, FL_DISABLE_WARNING_IMPLICIT_INT_CONVERSION, FL_DISABLE_WARNING_SIGN_CONVERSION, FL_NOEXCEPT, and type_rank< T >::value.

+ Here is the call graph for this function:

◆ FL_DISABLE_WARNING() [3/3]

FL_DISABLE_WARNING_PUSH fl::FL_DISABLE_WARNING ( sign- compare)

References FL_DISABLE_WARNING_FLOAT_CONVERSION, FL_DISABLE_WARNING_IMPLICIT_INT_CONVERSION, FL_DISABLE_WARNING_SIGN_CONVERSION, and sign().

+ Here is the call graph for this function:

◆ FL_STATIC_ASSERT()

fl::FL_STATIC_ASSERT ( static_cast< fl::u8 > Bus::STUB = =14,
"Bus changed: add the new value to busName() in this file"  )

References STUB.

Referenced by jsonArrayToFloatVector().

+ Here is the caller graph for this function:

◆ float_bits_magnitude_exceeds_2_24()

static bool fl::float_bits_magnitude_exceeds_2_24 ( u32 bits)
inlinestatic

Definition at line 56 of file json.cpp.hpp.

56 {
57 const u32 biased_exp = (bits >> 23) & 0xFFu;
58 const u32 mantissa = bits & 0x7FFFFFu;
59 return biased_exp == 0xFFu || biased_exp > 151u ||
60 (biased_exp == 151u && mantissa != 0u);
61}

References FL_NOEXCEPT.

Referenced by fl::anonymous_namespace{json.cpp.hpp}::classify_array(), and fl::anonymous_namespace{json.cpp.hpp}::JsonTokenizer::scan_array_lookahead().

+ Here is the caller graph for this function:

◆ floor() [1/4]

double fl::floor ( double value)
inline

Definition at line 305 of file math.h.

305{ return floor_impl_double(value); }
double floor_impl_double(double value)
Definition math.cpp.hpp:52

References FL_NOEXCEPT, floor_impl_double(), and type_rank< T >::value.

+ Here is the call graph for this function:

◆ floor() [2/4]

template<typename T>
enable_if< is_integral< T >::value, float >::type fl::floor ( T value)
inline

Definition at line 307 of file math.h.

307{ return floor_impl_float(static_cast<float>(value)); }
float floor_impl_float(float value)
Definition math.cpp.hpp:43

References FL_NOEXCEPT, floor_impl_float(), and type_rank< T >::value.

+ Here is the call graph for this function:

◆ floor() [3/4]

template<typename T>
enable_if< floor_detail::has_static_floor< T >::value, decltype(T::floor(declval< T >()))>::type fl::floor ( T value)
inline

Definition at line 479 of file math.h.

479 {
480 return T::floor(value);
481}

References FL_NOEXCEPT, and type_rank< T >::value.

◆ floor() [4/4]

template<typename T>
enable_if< is_fixed_point< T >::value, T >::type fl::floor ( T x)
inlineconstexpr

Definition at line 503 of file fixed_point.h.

503{ return T::floor(x); }

References FL_NOEXCEPT, and x.

Referenced by fl::SpectralVariance< T >::SpectralVariance(), fl::detail::SpectralVarianceImpl< T >::SpectralVarianceImpl(), kf_factor(), fl::detail::SpectralVarianceImpl< T >::setFloor(), fl::SpectralVariance< T >::setFloor(), traverseGridSegmentFloat(), and Painter::VegasVisualizer().

+ Here is the caller graph for this function:

◆ floor_impl_double()

double fl::floor_impl_double ( double value)

Definition at line 52 of file math.cpp.hpp.

52 {
53 if (value >= 0.0) {
54 return static_cast<double>(static_cast<long long>(value));
55 }
56 long long i = static_cast<long long>(value);
57 return static_cast<double>(i - (value != static_cast<double>(i) ? 1 : 0));
58}

References type_rank< T >::value.

Referenced by floor(), and fmod_impl_double().

+ Here is the caller graph for this function:

◆ floor_impl_float()

FL_DISABLE_WARNING_POP float fl::floor_impl_float ( float value)

Definition at line 43 of file math.cpp.hpp.

43 {
44 if (value >= 0.0f) {
45 return static_cast<float>(static_cast<int>(value));
46 }
47 int i = static_cast<int>(value);
48 return static_cast<float>(i - (value != static_cast<float>(i) ? 1 : 0));
49}

References type_rank< T >::value.

Referenced by floor(), floorf(), and fmod_impl_float().

+ Here is the caller graph for this function:

◆ floorf()

float fl::floorf ( float value)
inline

Definition at line 304 of file math.h.

304{ return floor_impl_float(value); }

References FL_NOEXCEPT, floor_impl_float(), and type_rank< T >::value.

Referenced by fl::Corkscrew::at_splat_extrapolate(), fl::FlowFieldFloat::drawAALine(), fl::FlowFieldFloat::drawDot(), fl::FlowFieldFloat::drawFlowVectors(), fl::FlowFieldFP::drawFlowVectors(), fl::FlowFieldFloat::flowAdvect(), fl::audio::fft::Context::initOctaveWise(), fl::FlowFieldFloat::Perlin2D::noise(), pnoise(), splat(), and fl::NoiseBias1D::trigger().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ flush()

bool fl::flush ( u32 timeoutMs)

Definition at line 208 of file cstdio.cpp.hpp.

208 {
209#ifdef FASTLED_TESTING
210 if (get_flush_handler()) {
211 return get_flush_handler()(timeoutMs);
212 }
213#endif
214 return platforms::flush(timeoutMs);
215}

Referenced by fl::SerialPort::flush(), and printJsonRaw().

+ Here is the caller graph for this function:

◆ fmod() [1/2]

template<typename T>
enable_if<!is_integral< T >::value, T >::type fl::fmod ( T x,
T y )
inline
Examples
BeatDetection.ino.

Definition at line 339 of file math.h.

339 {
340 return static_cast<T>(fmod_impl_float(static_cast<float>(x), static_cast<float>(y)));
341}
float fmod_impl_float(float x, float y)
Definition math.cpp.hpp:401

References FL_NOEXCEPT, fmod_impl_float(), x, and y.

+ Here is the call graph for this function:

◆ fmod() [2/2]

template<typename T>
enable_if< is_integral< T >::value, float >::type fl::fmod ( T x,
T y )
inline

Definition at line 347 of file math.h.

347{ return fmod_impl_float(static_cast<float>(x), static_cast<float>(y)); }

References FL_NOEXCEPT, fmod_impl_float(), x, and y.

+ Here is the call graph for this function:

◆ fmod< double >()

template<>
double fl::fmod< double > ( double x,
double y )
inline

Definition at line 343 of file math.h.

343 {
344 return fmod_impl_double(x, y);
345}
double fmod_impl_double(double x, double y)
Definition math.cpp.hpp:413

References FL_NOEXCEPT, fmod_impl_double(), x, and y.

+ Here is the call graph for this function:

◆ fmod_impl_double()

double fl::fmod_impl_double ( double x,
double y )

Definition at line 413 of file math.cpp.hpp.

413 {
414#if FL_MATH_USE_LIBM
415 return ::fmod(x, y);
416#else
417 if (y == 0.0) return 0.0;
418 const double q = x / y;
419 const double t = q >= 0.0 ? floor_impl_double(q) : ceil_impl_double(q);
420 return x - t * y;
421#endif
422}

References ceil_impl_double(), floor_impl_double(), t, x, and y.

Referenced by fmod< double >().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fmod_impl_float()

float fl::fmod_impl_float ( float x,
float y )

Definition at line 401 of file math.cpp.hpp.

401 {
402#if FL_MATH_USE_LIBM
403 return ::fmodf(x, y);
404#else
405 if (y == 0.0f) return 0.0f;
406 const float q = x / y;
407 // Truncate toward zero (libm fmod convention).
408 const float t = q >= 0.0f ? floor_impl_float(q) : ceil_impl_float(q);
409 return x - t * y;
410#endif
411}

References ceil_impl_float(), floor_impl_float(), t, x, and y.

Referenced by fmod(), and fmodf().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fmodf()

float fl::fmodf ( float x,
float y )
inline

Definition at line 336 of file math.h.

336{ return fmod_impl_float(x, y); }

References FL_NOEXCEPT, fmod_impl_float(), x, and y.

Referenced by fl::Corkscrew::at_exact(), calculate_oscillators(), fl::Corkscrew::calculateTileAtWrap(), fl::Center_Field::draw(), fl::Center_Field_FP::draw(), fl::Chasing_Spirals_Float::draw(), fl::FlowFieldFloat::fmodPos(), get_position(), fl::anonymous_namespace{chasing_spirals.cpp.hpp}::setupChasingSpiralFrame(), and fl::audio::detector::Beat::updatePhase().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fopen()

FILE * fl::fopen ( const char * path,
const char * mode )
inline

Open a file.

Parameters
pathFile path
modeFile mode string (e.g., "r", "w", "rb", "wb", "r+", "w+", "a", "ab")
Returns
File handle pointer, or nullptr on failure

Definition at line 246 of file file_io.h.

246 {
247 return nullptr;
248}

Referenced by fl::detail::posix_filebuf::posix_filebuf(), fl::third_party::plm_buffer_no_start_code(), and fl::third_party::vorbis::stb_vorbis_open_filename().

+ Here is the caller graph for this function:

◆ format() [1/2]

fl::string fl::format ( const char * fmt)
inline

Format with no arguments.

Definition at line 439 of file format.h.

439 {
440 return format_detail::format_impl(fmt, nullptr, 0);
441}
fl::string format_impl(const char *fmt, const FormatArg *args, int num_args)
Definition format.h:368

References fl::format_detail::format_impl().

Referenced by fl::Frame::Frame(), fl::third_party::SoftwareGifDecoder::SoftwareGifDecoder(), fl::third_party::TJpgInstanceDecoder::beginDecodingStream(), fl::Frame::convertPixelsToRgb(), fl::printf_detail::format_impl(), fl::printf_detail::format_impl(), getBytesPerPixel(), fl::printf_detail::parse_format_spec(), printf(), fl::SerialPort::printf(), snprintf(), sprintf(), and fl::third_party::truetype::stbtt_FindGlyphIndex().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ format() [2/2]

template<typename... Args>
fl::string fl::format ( const char * fmt,
const Args &... args )

Format with variadic arguments.

Definition at line 445 of file format.h.

445 {
447 return format_detail::format_impl(fmt, arg_array, static_cast<int>(sizeof...(Args)));
448}

References args, and fl::format_detail::format_impl().

+ Here is the call graph for this function:

◆ formatJsonResponse()

fl::string fl::formatJsonResponse ( const fl::json & response,
const char * prefix = "" )

Serialize JSON response to a string.

Parameters
responseJSON response object
prefixOptional prefix to prepend (default: "")
Returns
Formatted string ready to be written to output
Note
Generic JSON serialization - works for any JSON, not just JSON-RPC

Definition at line 12 of file serial.cpp.hpp.

12 {
13 // Use sstream to minimize allocations
14 fl::sstream ss;
15
16 // Add prefix if provided
17 if (prefix && prefix[0] != '\0') {
18 ss << prefix;
19 }
20
21 // Serialize to compact JSON
22 fl::string jsonStr = response.to_string();
23
24 // Stream copy with inline filtering (replace newlines with spaces)
25 for (size_t i = 0; i < jsonStr.size(); ++i) {
26 char c = jsonStr[i];
27 ss << ((c == '\n' || c == '\r') ? ' ' : c);
28 }
29
30 return ss.str();
31}
string str() const FL_NOEXCEPT
Definition strstream.h:43

References fl::basic_string::size(), and fl::sstream::str().

Referenced by createSerialResponseSink(), printJsonRaw(), and printStreamRaw().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ forward() [1/2]

template<typename T>
T && fl::forward ( typename remove_reference< T >::type && t)
constexpr

Definition at line 240 of file type_traits.h.

240 {
242 "Cannot forward an rvalue as an lvalue");
243 return static_cast<T &&>(t);
244}

References FL_NOEXCEPT, FL_STATIC_ASSERT, t, and fl::is_lvalue_reference< T >::value.

◆ forward() [2/2]

template<typename T>
T && fl::forward ( typename remove_reference< T >::type & t)
constexpr

Definition at line 234 of file type_traits.h.

234 {
235 return static_cast<T &&>(t);
236}

References FL_NOEXCEPT, and t.

Referenced by fl::list< T >::Node::Node(), fl::RedBlackTree< T, Compare, Allocator >::RBNode::RBNode(), fl::scope_exit< EF >::scope_exit(), fl::video::VideoImpl::updateBufferFromFile(), and fl::video::VideoImpl::updateBufferIfNecessary().

+ Here is the caller graph for this function:

◆ fract()

template<typename T>
enable_if< is_fixed_point< T >::value, T >::type fl::fract ( T x)
inlineconstexpr

Definition at line 513 of file fixed_point.h.

513{ return T::fract(x); }

References FL_NOEXCEPT, and x.

◆ fread()

fl::size_t fl::fread ( void * buffer,
fl::size_t size,
fl::size_t count,
FILE * file )
inline

Read from file.

Parameters
bufferDestination buffer
sizeSize of each element
countNumber of elements to read
fileFile handle
Returns
Number of elements actually read

Definition at line 254 of file file_io.h.

254 {
255 return 0;
256}

Referenced by fl::third_party::vorbis::getn(), and fl::detail::posix_filebuf::read().

+ Here is the caller graph for this function:

◆ Free()

void fl::Free ( void * ptr)

Definition at line 167 of file allocator.cpp.hpp.

167 {
168#if defined(FASTLED_TESTING)
169 if (gMallocFreeHook && ptr) {
170 MemoryGuard allows_hook;
171 if (allows_hook.enabled()) {
172 gMallocFreeHook->onFree(ptr);
173 }
174 }
175#endif
176
177 Dealloc(ptr);
178}

Referenced by fl::SlabAllocator< T, SLAB_SIZE >::Slab::~Slab(), fl::SlabAllocator< T, SLAB_SIZE >::cleanup(), fl::SlabAllocator< T, SLAB_SIZE >::createSlab(), fl::allocator< U >::deallocate(), fl::allocator_realloc< U >::deallocate(), fl::SlabAllocator< T, SLAB_SIZE >::deallocate(), fl::anonymous_namespace{memory_resource.cpp.hpp}::DefaultMemoryResource::do_deallocate(), fl::third_party::lzw_context_destroy(), fl::third_party::nsgif__get_frame(), and fl::third_party::nsgif_destroy().

+ Here is the caller graph for this function:

◆ free()

void fl::free ( void * ptr)

Definition at line 13 of file malloc.cpp.hpp.

13 {
14 ::free(ptr);
15 }

References free().

Referenced by FrameBuffer::~FrameBuffer(), fl::StringHolder::~StringHolder(), fl::audio::SynthOscillatorImpl::~SynthOscillatorImpl(), _generate_kernel(), aligned_free(), fl::AsyncLogQueue< DescriptorCount, ArenaSize >::arenaHasSpace(), fl::anonymous_namespace{allocator.cpp.hpp}::DefaultFree(), fl::unordered_map_small< Key, Value, Equal >::do_insert(), fl::unordered_map_small< Key, Value, Equal >::do_insert(), free(), free_kernels(), generate_kernels(), reallocate_kernels(), SetPSRamAllocator(), fl::third_party::vorbis::setup_free(), fl::third_party::vorbis::setup_temp_free(), fl::third_party::vorbis::stb_vorbis_decode_filename(), and fl::third_party::vorbis::stb_vorbis_decode_memory().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fseek()

int fl::fseek ( FILE * file,
long offset,
int origin )
inline

Set file position.

Parameters
fileFile handle
offsetOffset from origin
originSeek origin (io::seek_set, io::seek_cur, io::seek_end)
Returns
0 on success, non-zero on error

Definition at line 266 of file file_io.h.

266 {
267 return -1;
268}

Referenced by fl::detail::posix_filebuf::seek(), fl::third_party::vorbis::set_file_offset(), fl::detail::posix_filebuf::size(), fl::third_party::vorbis::skip(), and fl::third_party::vorbis::stb_vorbis_open_file().

+ Here is the caller graph for this function:

◆ ftell()

long fl::ftell ( FILE * file)
inline

Get current file position.

Parameters
fileFile handle
Returns
Current position, or -1 on error

Definition at line 262 of file file_io.h.

262 {
263 return -1;
264}

Referenced by fl::detail::posix_filebuf::size(), fl::third_party::vorbis::skip(), fl::third_party::vorbis::stb_vorbis_get_file_offset(), fl::third_party::vorbis::stb_vorbis_open_file(), fl::third_party::vorbis::stb_vorbis_open_file_section(), and fl::detail::posix_filebuf::tell().

+ Here is the caller graph for this function:

◆ ftoa()

void fl::ftoa ( float value,
char * buffer,
int precision = 2 )

Convert floating point number to string buffer.

Parameters
valueThe float value to convert
bufferOutput buffer (must be at least 64 bytes)
precisionNumber of decimal places (default: 2)

Definition at line 186 of file charconv.cpp.hpp.

186 {
187 // Forward to printf_detail for now - implementation in str.cpp will be updated
188 // to use this function instead of duplicating the logic
190 fl::size len = result.length();
191 if (len > 63) len = 63; // Leave room for null terminator
192 for (fl::size i = 0; i < len; ++i) {
193 buffer[i] = result[i];
194 }
195 buffer[len] = '\0';
196}
fl::string format_float(float value, int precision) FL_NOEXCEPT
Definition stdio.h:282

References fl::printf_detail::format_float(), and type_rank< T >::value.

Referenced by fl::basic_string::append(), fl::basic_string::append(), and fl::format_detail::format_float().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fwrite()

fl::size_t fl::fwrite ( const void * data,
fl::size_t size,
fl::size_t count,
FILE * file )
inline

Write to file.

Parameters
dataSource data
sizeSize of each element
countNumber of elements to write
fileFile handle
Returns
Number of elements actually written

Definition at line 258 of file file_io.h.

258 {
259 return 0;
260}

Referenced by fl::detail::posix_filebuf::write().

+ Here is the caller graph for this function:

◆ gamma()

template<typename Fixed>
u32 fl::gamma ( float g)
constexpr

Definition at line 36 of file gamma_lut.h.

36 {
37 return Fixed(g).raw();
38}

References FL_NOEXCEPT.

Referenced by fl::Gamma8Impl::Gamma8Impl(), applyGamma_video(), applyGamma_video(), encodeUCS7604(), encodeUCS7604_16bit_RGB(), encodeUCS7604_16bit_RGBW(), FL_DISABLE_WARNING(), fl::Gamma8::getOrCreate(), napplyGamma_video(), napplyGamma_video(), fl::Channel::setGamma(), fl::UCS7604ControllerT< DATA_PIN, RGB_ORDER, fl::UCS7604Mode::UCS7604_MODE_8BIT_800KHZ, fl::TIMING_UCS7604_800KHZ, CLOCKLESS_CONTROLLER >::showPixels(), and fl::anonymous_namespace{channel.cpp.hpp}::writeUCS7604().

+ Here is the caller graph for this function:

◆ gamma_2_8()

u16 fl::gamma_2_8 ( u8 value)

Definition at line 53 of file ease.cpp.hpp.

53 {
55}
#define FL_PGM_READ_WORD_ALIGNED(addr)

References FL_PGM_READ_WORD_ALIGNED, GAMMA_2_8_LUT, and type_rank< T >::value.

Referenced by HD108Controller< DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED >::showPixels().

+ Here is the caller graph for this function:

◆ get() [1/12]

template<fl::size I, typename T1, typename T2>
const pair_element< I, T1, T2 >::type & fl::get ( const pair< T1, T2 > & p)

Definition at line 125 of file pair.h.

125 {
126 FL_STATIC_ASSERT(I < 2, "Index out of bounds for pair");
127 if (I == 0) {
128 return p.first;
129 } else {
130 return p.second;
131 }
132}

References FL_NOEXCEPT, and FL_STATIC_ASSERT.

◆ get() [2/12]

template<typename T, typename T1, typename T2>
const T & fl::get ( const pair< T1, T2 > & p)

Definition at line 159 of file pair.h.

159 {
161 "Type T must be one of the pair's element types");
163 "Type T must be unique in the pair");
165 return p.first;
166 } else {
167 return p.second;
168 }
169}

References FL_NOEXCEPT, FL_STATIC_ASSERT, and fl::fl::is_same< T, U >::value.

◆ get() [3/12]

template<size_t I, typename Head, typename... Tail>
enable_if< I==0, constHead & >::type fl::get ( const tuple< Head, Tail... > & t)

Definition at line 78 of file tuple.h.

78 {
79 return t.head;
80}

References FL_NOEXCEPT, and t.

◆ get() [4/12]

template<size_t I, typename Head, typename... Tail>
enable_if< I!=0, consttypenametuple_element< I, tuple< Head, Tail... > >::type & >::type fl::get ( const tuple< Head, Tail... > & t)

Definition at line 84 of file tuple.h.

84 {
85 return get<I-1>(t.tail);
86}

References FL_NOEXCEPT, get(), and t.

+ Here is the call graph for this function:

◆ get() [5/12]

template<fl::size I, typename T1, typename T2>
pair_element< I, T1, T2 >::type && fl::get ( pair< T1, T2 > && p)

Definition at line 135 of file pair.h.

135 {
136 FL_STATIC_ASSERT(I < 2, "Index out of bounds for pair");
137 if (I == 0) {
138 return fl::move(p.first);
139 } else {
140 return fl::move(p.second);
141 }
142}

References FL_NOEXCEPT, FL_STATIC_ASSERT, and fl::fl::move().

+ Here is the call graph for this function:

◆ get() [6/12]

template<typename T, typename T1, typename T2>
T && fl::get ( pair< T1, T2 > && p)

Definition at line 172 of file pair.h.

172 {
174 "Type T must be one of the pair's element types");
176 "Type T must be unique in the pair");
178 return fl::move(p.first);
179 } else {
180 return fl::move(p.second);
181 }
182}

References FL_NOEXCEPT, FL_STATIC_ASSERT, fl::fl::move(), and fl::fl::is_same< T, U >::value.

+ Here is the call graph for this function:

◆ get() [7/12]

template<fl::size I, typename T1, typename T2>
pair_element< I, T1, T2 >::type & fl::get ( pair< T1, T2 > & p)

Definition at line 115 of file pair.h.

115 {
116 FL_STATIC_ASSERT(I < 2, "Index out of bounds for pair");
117 if (I == 0) {
118 return p.first;
119 } else {
120 return p.second;
121 }
122}

References FL_NOEXCEPT, and FL_STATIC_ASSERT.

Referenced by fl::Corkscrew::clear(), fl::detail::JsonToType< fl::ConstCharPtrWrapper, void >::convert(), fl::detail::JsonToType< fl::ConstSpanWrapper< T >, void >::convert(), fl::detail::JsonToType< fl::vector< fl::u8 >, void >::convert(), fl::detail::JsonToType< fl::vector< T >, void >::convert(), fl::Corkscrew::data(), fl::basic_string::erase(), fl::task::PromiseResult< T >::error(), FL_ALIGN_AS_T(), get(), get(), get(), fl::Rpc::handle(), fl::basic_string::insert(), fl::basic_string::insert(), fl::TypedRpcBinding< R(Args...)>::invoke(), fl::TypedRpcBinding< void(Args...)>::invoke(), fl::TypedRpcBinding< R(Args...)>::invokeImpl(), fl::TypedRpcBinding< void(Args...)>::invokeImpl(), fl::TypedRpcBinding< R(Args...)>::invokeImplWithReturn(), fl::TypedRpcBinding< R(Args...)>::invokeWithReturn(), fl::task::anonymous_namespace{task.cpp.hpp}::make_trace_label(), fl::Corkscrew::pixelCount(), fl::Corkscrew::rawData(), fl::basic_string::replace(), fl::basic_string::replace(), fl::expected< T, E >::value(), fl::expected< T, E >::value(), fl::task::PromiseResult< T >::value(), and fl::task::PromiseResult< T >::value().

+ Here is the caller graph for this function:

◆ get() [8/12]

template<typename T, typename T1, typename T2>
T & fl::get ( pair< T1, T2 > & p)

Definition at line 146 of file pair.h.

146 {
148 "Type T must be one of the pair's element types");
150 "Type T must be unique in the pair");
152 return p.first;
153 } else {
154 return p.second;
155 }
156}

References FL_NOEXCEPT, FL_STATIC_ASSERT, and fl::fl::is_same< T, U >::value.

◆ get() [9/12]

template<size_t I, typename Head, typename... Tail>
enable_if< I==0, Head && >::type fl::get ( tuple< Head, Tail... > && t)

Definition at line 91 of file tuple.h.

91 {
92 return fl::move(t.head);
93}

References FL_NOEXCEPT, fl::fl::move(), and t.

+ Here is the call graph for this function:

◆ get() [10/12]

template<size_t I, typename Head, typename... Tail>
enable_if< I!=0, typenametuple_element< I, tuple< Head, Tail... > >::type && >::type fl::get ( tuple< Head, Tail... > && t)

Definition at line 97 of file tuple.h.

97 {
98 return get<I-1>(fl::move(t.tail));
99}

References FL_NOEXCEPT, get(), fl::fl::move(), and t.

+ Here is the call graph for this function:

◆ get() [11/12]

template<size_t I, typename Head, typename... Tail>
enable_if< I==0, Head & >::type fl::get ( tuple< Head, Tail... > & t)

Definition at line 65 of file tuple.h.

65 {
66 return t.head;
67}

References FL_NOEXCEPT, and t.

◆ get() [12/12]

template<size_t I, typename Head, typename... Tail>
enable_if< I!=0, typenametuple_element< I, tuple< Head, Tail... > >::type & >::type fl::get ( tuple< Head, Tail... > & t)

Definition at line 71 of file tuple.h.

71 {
72 return get<I-1>(t.tail);
73}

References FL_NOEXCEPT, get(), and t.

+ Here is the call graph for this function:

◆ get_async_logger_by_index()

template<fl::size N, typename InfoProvider>
AsyncLogger & fl::get_async_logger_by_index ( )
inline

Template-based logger accessor with auto-registration and enablement check.

Template Parameters
NLogger index (0-15, maps to Singleton<AsyncLogger, N>)
InfoProviderType providing category name and define name via static methods
Returns
Reference to AsyncLogger singleton instance
Note
Only instantiated template indices are compiled - linker removes unused ones
Prints error message once if logging is disabled for this category

Definition at line 249 of file async_logger.h.

249 {
250 // Get singleton instance (only this specific N is instantiated)
251 static AsyncLogger* logger_ptr = []() {
254
255 // Auto-instantiate service task on first logger access
256 // This ensures automatic background servicing via fl::delay() and fl::task::Scheduler
258
259 return ptr;
260 }();
261
262 // Check if logging is enabled, print error once if not
263 // (Implementation in async_logger.cpp.hpp uses FL_ERROR)
265
266 return *logger_ptr;
267}
ISR-safe async logger wrapper (zero heap allocation) Uses embedded AsyncLogQueue instead of heap-allo...
static T & instance() FL_NOEXCEPT
Definition singleton.h:81
void checkLoggerEnabled()
Check if logger is enabled and print error once if not.
void registerLogger(AsyncLogger *logger)

References fl::detail::checkLoggerEnabled(), get_async_logger_by_index(), fl::detail::ActiveLoggerRegistry::instance(), fl::detail::AsyncLoggerServiceTask::instance(), and fl::SingletonShared< T, N >::instance().

Referenced by get_async_logger_by_index(), get_audio_async_logger_isr(), get_audio_async_logger_main(), get_flexio_async_logger_isr(), get_flexio_async_logger_main(), get_interrupt_async_logger_isr(), get_interrupt_async_logger_main(), get_objectfled_async_logger_isr(), get_objectfled_async_logger_main(), get_parlio_async_logger_isr(), get_parlio_async_logger_main(), get_rmt_async_logger_isr(), get_rmt_async_logger_main(), get_spi_async_logger_isr(), and get_spi_async_logger_main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ get_audio_async_logger_isr()

AsyncLogger & fl::get_audio_async_logger_isr ( )
inline

Definition at line 297 of file async_logger.h.

297 {
299}
AsyncLogger & get_async_logger_by_index()
Template-based logger accessor with auto-registration and enablement check.

References get_async_logger_by_index(), and get_audio_async_logger_isr().

Referenced by get_audio_async_logger_isr().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ get_audio_async_logger_main()

AsyncLogger & fl::get_audio_async_logger_main ( )
inline

Definition at line 301 of file async_logger.h.

References get_async_logger_by_index(), and get_audio_async_logger_main().

Referenced by get_audio_async_logger_main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ get_bit_period_ns()

u32 fl::get_bit_period_ns ( const ChipsetTiming & timing)
constexpr

Get total bit period (T1 + T2 + T3) in nanoseconds.

Parameters
timingChipset timing structure
Returns
Total bit period in nanoseconds

Definition at line 528 of file led_timing.h.

528 {
529 return timing.T1 + timing.T2 + timing.T3;
530}

References FL_NOEXCEPT.

◆ get_empty_json_obj()

json_object & fl::get_empty_json_obj ( )

Definition at line 69 of file json.cpp.hpp.

69 {
70 static json_object empty_object;
71 return empty_object;
72}
fl::flat_map< fl::string, fl::shared_ptr< json_value >, fl::StringFastLess > json_object
Definition types.h:34

◆ get_errno()

int fl::get_errno ( )
inline

Definition at line 17 of file cerrno.h.

17 {
18 return errno;
19}

Referenced by fl::detail::posix_filebuf::captureError().

+ Here is the caller graph for this function:

◆ get_flexio_async_logger_isr()

AsyncLogger & fl::get_flexio_async_logger_isr ( )
inline

Definition at line 313 of file async_logger.h.

References get_async_logger_by_index(), and get_flexio_async_logger_isr().

Referenced by get_flexio_async_logger_isr().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ get_flexio_async_logger_main()

AsyncLogger & fl::get_flexio_async_logger_main ( )
inline

Definition at line 317 of file async_logger.h.

References get_async_logger_by_index(), and get_flexio_async_logger_main().

Referenced by get_flexio_async_logger_main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ get_interrupt_async_logger_isr()

AsyncLogger & fl::get_interrupt_async_logger_isr ( )
inline

Definition at line 305 of file async_logger.h.

References get_async_logger_by_index(), and get_interrupt_async_logger_isr().

Referenced by get_interrupt_async_logger_isr().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ get_interrupt_async_logger_main()

AsyncLogger & fl::get_interrupt_async_logger_main ( )
inline

Definition at line 309 of file async_logger.h.

References get_async_logger_by_index(), and get_interrupt_async_logger_main().

Referenced by get_interrupt_async_logger_main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ get_null_json_value()

json_value & fl::get_null_json_value ( )

Definition at line 64 of file json.cpp.hpp.

64 {
65 static json_value null_value;
66 return null_value;
67}

Referenced by fl::json_value::iterator::KeyValue::KeyValue(), fl::SerializerVisitor::accept(), fl::SerializerVisitor::accept(), fl::json_value::operator[](), and fl::json_value::operator[]().

+ Here is the caller graph for this function:

◆ get_objectfled_async_logger_isr()

AsyncLogger & fl::get_objectfled_async_logger_isr ( )
inline

Definition at line 321 of file async_logger.h.

References get_async_logger_by_index(), and get_objectfled_async_logger_isr().

Referenced by get_objectfled_async_logger_isr().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ get_objectfled_async_logger_main()

AsyncLogger & fl::get_objectfled_async_logger_main ( )
inline

Definition at line 325 of file async_logger.h.

References get_async_logger_by_index(), and get_objectfled_async_logger_main().

Referenced by get_objectfled_async_logger_main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ get_parlio_async_logger_isr()

AsyncLogger & fl::get_parlio_async_logger_isr ( )
inline

Definition at line 273 of file async_logger.h.

References get_async_logger_by_index(), and get_parlio_async_logger_isr().

Referenced by get_parlio_async_logger_isr().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ get_parlio_async_logger_main()

AsyncLogger & fl::get_parlio_async_logger_main ( )
inline

Definition at line 277 of file async_logger.h.

References get_async_logger_by_index(), and get_parlio_async_logger_main().

Referenced by get_parlio_async_logger_main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ get_ready()

void fl::get_ready ( unsigned long & a,
unsigned long & b )
inline

Definition at line 166 of file engine_core.h.

166 {
167 a = fl::micros();
168 b = fl::micros(); // logOutput
169}
fl::u32 micros()
Universal microsecond timer - returns microseconds since system startup.

References micros().

Referenced by fl::Engine::get_ready().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ get_rgbw_colorimetric_profile()

const DiodeProfile * fl::get_rgbw_colorimetric_profile ( )

Definition at line 203 of file rgbw.cpp.hpp.

203 {
204 const DiodeProfile* p =
206 return p != nullptr ? p : &kRgbwDefaultProfile;
207}
const DiodeProfile kRgbwDefaultProfile
Definition rgbw.cpp.hpp:37

References FL_NOEXCEPT, fl::Singleton< T, N >::instance(), and kRgbwDefaultProfile.

Referenced by CFastLED::getRgbwColorimetricProfile().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ get_rgbww_colorimetric_profile()

const colorimetric_detail::RgbcctProfile * fl::get_rgbww_colorimetric_profile ( )

Definition at line 108 of file rgbww.cpp.hpp.

108 {
109 const RgbwwColorimetricState& state = fl::Singleton<RgbwwColorimetricState>::instance();
110 return state.has_profile ? &state.profile : &kRgbwwDefaultProfile;
111}
const colorimetric_detail::RgbcctProfile kRgbwwDefaultProfile
Definition rgbww.cpp.hpp:53

References FL_NOEXCEPT, fl::Singleton< T, N >::instance(), kRgbwwDefaultProfile, and state.

+ Here is the call graph for this function:

◆ get_rmt_async_logger_isr()

AsyncLogger & fl::get_rmt_async_logger_isr ( )
inline

Definition at line 281 of file async_logger.h.

References get_async_logger_by_index(), and get_rmt_async_logger_isr().

Referenced by get_rmt_async_logger_isr().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ get_rmt_async_logger_main()

AsyncLogger & fl::get_rmt_async_logger_main ( )
inline

Definition at line 285 of file async_logger.h.

References get_async_logger_by_index(), and get_rmt_async_logger_main().

Referenced by get_rmt_async_logger_main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ get_spi_async_logger_isr()

AsyncLogger & fl::get_spi_async_logger_isr ( )
inline

Definition at line 289 of file async_logger.h.

References get_async_logger_by_index(), and get_spi_async_logger_isr().

Referenced by get_spi_async_logger_isr().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ get_spi_async_logger_main()

AsyncLogger & fl::get_spi_async_logger_main ( )
inline

Definition at line 293 of file async_logger.h.

References get_async_logger_by_index(), and get_spi_async_logger_main().

Referenced by get_spi_async_logger_main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ get_timing_by_name()

const ChipsetTiming * fl::get_timing_by_name ( const char * name)

Get timing by name (for dynamic lookup if needed)

Parameters
nameChipset name string
Returns
Pointer to ChipsetTiming or nullptr if not found Note: This is a runtime function and should only be used during initialization

References FL_NOEXCEPT.

◆ get_timing_t1()

u32 fl::get_timing_t1 ( const ChipsetTiming & timing)
constexpr

Extract T1 (high time for bit 0) from timing constant.

Parameters
timingChipset timing structure
Returns
T1 value in nanoseconds

Definition at line 535 of file led_timing.h.

535 {
536 return timing.T1;
537}

References FL_NOEXCEPT.

◆ get_timing_t2()

u32 fl::get_timing_t2 ( const ChipsetTiming & timing)
constexpr

Extract T2 (additional high time for bit 1) from timing constant.

Parameters
timingChipset timing structure
Returns
T2 value in nanoseconds

Definition at line 542 of file led_timing.h.

542 {
543 return timing.T2;
544}

References FL_NOEXCEPT.

◆ get_timing_t3()

u32 fl::get_timing_t3 ( const ChipsetTiming & timing)
constexpr

Extract T3 (low tail duration) from timing constant.

Parameters
timingChipset timing structure
Returns
T3 value in nanoseconds

Definition at line 549 of file led_timing.h.

549 {
550 return timing.T3;
551}

References FL_NOEXCEPT.

◆ getAnimartrixCount()

int fl::getAnimartrixCount ( )
inline

Definition at line 194 of file animartrix.hpp.

194 {
195 return static_cast<int>(AnimartrixAnim::NUM_ANIMATIONS);
196}

References NUM_ANIMATIONS.

◆ getAnimartrixInfo()

AnimartrixAnimInfo fl::getAnimartrixInfo ( int index)
inline

Definition at line 198 of file animartrix.hpp.

198 {
199 if (index < 0 || index >= static_cast<int>(AnimartrixAnim::NUM_ANIMATIONS)) {
200 return {-1, "UNKNOWN"};
201 }
202 return {static_cast<int>(ANIMATION_TABLE[index].anim),
203 ANIMATION_TABLE[index].name};
204}
static const AnimartrixEntry ANIMATION_TABLE[]

References ANIMATION_TABLE, and NUM_ANIMATIONS.

Referenced by fl::Animartrix::getAnimationList().

+ Here is the caller graph for this function:

◆ getAnimartrixName()

fl::string fl::getAnimartrixName ( int animation)
inline

Definition at line 187 of file animartrix.hpp.

187 {
188 if (animation < 0 || animation >= static_cast<int>(AnimartrixAnim::NUM_ANIMATIONS)) {
189 return "UNKNOWN";
190 }
191 return ANIMATION_TABLE[animation].name;
192}
const char * name

References ANIMATION_TABLE, and NUM_ANIMATIONS.

Referenced by fl::Animartrix::fxSet().

+ Here is the caller graph for this function:

◆ getBytesPerPixel()

fl::u8 fl::getBytesPerPixel ( PixelFormat format)
inline

Definition at line 15 of file pixel.h.

15 {
16 switch (format) {
17 case PixelFormat::RGB565: return 2;
18 case PixelFormat::RGB888: return 3;
19 case PixelFormat::RGBA8888: return 4;
20 case PixelFormat::YUV420: return 1; // Simplified for luminance component
21 default: return 3;
22 }
23}
fl::string format(const char *fmt)
Format with no arguments.
Definition format.h:439

References format(), RGB565, RGB888, RGBA8888, and YUV420.

Referenced by fl::third_party::TJpgInstanceDecoder::allocateFrameBuffer(), and fl::third_party::TJpgInstanceDecoder::getBytesPerPixel().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getDataPinFromChipset()

int fl::getDataPinFromChipset ( const ChipsetVariant & chipset)
inline

Definition at line 6 of file chipset_helpers.h.

6 {
7 if (const ClocklessChipset* clockless = chipset.ptr<ClocklessChipset>()) {
8 return clockless->pin;
9 } else if (const SpiChipsetConfig* spi = chipset.ptr<SpiChipsetConfig>()) {
10 return spi->dataPin;
11 }
12 return -1;
13}
Clockless chipset configuration (single data pin)
Definition config.h:32

◆ getenv()

const char * fl::getenv ( const char * name)

Definition at line 455 of file cstdlib.cpp.hpp.

455 {
456#ifdef FL_IS_STUB
457 return ::getenv(name);
458#else
459 (void)name; // Suppress unused parameter warning
460 return nullptr;
461#endif
462}

◆ getFreeHeap()

HeapInfo fl::getFreeHeap ( )

Query available heap memory.

Returns
HeapInfo struct with free SRAM and PSRAM bytes

Platform implementations:

Usage:

if (heap.free_sram < 1024) {
// Low SRAM warning
}
if (heap.has_psram()) {
// PSRAM is available
}
HeapInfo getFreeHeap()
Query available heap memory.
Definition heap.cpp.hpp:67
bool has_psram() const
Check if PSRAM is available.
Definition heap.h:24
fl::size free_sram
Free SRAM in bytes (internal fast memory)
Definition heap.h:17
Heap memory information.
Definition heap.h:16

Definition at line 67 of file heap.cpp.hpp.

67 {
68 HeapInfo info;
69 info.free_sram = 0; // Not available
70 info.free_psram = 0; // Not available
71 return info;
72}
fl::size free_psram
Free PSRAM in bytes (external slower memory, 0 if not available)
Definition heap.h:18

References fl::HeapInfo::free_psram, and fl::HeapInfo::free_sram.

◆ getLogLevel()

u8 fl::getLogLevel ( )

Get the current global log level.

Returns
Current log level (0-4)

Definition at line 28 of file cstdio.cpp.hpp.

28 {
29 return gLogLevel;
30}
static u8 gLogLevel

References gLogLevel.

Referenced by fl::ScopedLogDisable::ScopedLogDisable().

+ Here is the caller graph for this function:

◆ getPwmFrequency()

u32 fl::getPwmFrequency ( int pin)

Query the configured PWM frequency for a pin.

Parameters
pinPin number (platform-specific numbering)
Returns
Frequency in Hz, or 0 if not configured

Definition at line 354 of file pin.cpp.hpp.

354 {
356 if (ch) {
357 return ch->frequency_hz;
358 }
359
360 // Not in our state — ask platform (may have been set externally)
361 return platforms::getPwmFrequencyNative(pin);
362}

References fl::pwm_state::findByPin(), and fl::pwm_state::PwmPinState::frequency_hz.

+ Here is the call graph for this function:

◆ getStubChannelEngine()

IChannelDriver * fl::getStubChannelEngine ( )

Get stub channel driver for testing or unsupported platforms.

Returns
Pointer to singleton stub driver instance
Note
Returns a no-op driver that allows code to compile/run on all platforms

Definition at line 718 of file channel.cpp.hpp.

718 {
719 static StubChannelEngine instance;
720 return &instance;
721}

◆ getTimingFromChipset()

ChipsetTimingConfig fl::getTimingFromChipset ( const ChipsetVariant & chipset)
inline

Definition at line 16 of file chipset_helpers.h.

16 {
17 if (const ClocklessChipset* clockless = chipset.ptr<ClocklessChipset>()) {
18 return clockless->timing;
19 }
20 return ChipsetTimingConfig(0, 0, 0, 0); // Invalid/empty timing for SPI
21}

◆ getTraceStorage()

static TraceStorage & fl::getTraceStorage ( )
static

Definition at line 48 of file trace.cpp.hpp.

48 {
50}
static T & instance() FL_NOEXCEPT
Definition singleton.h:133

References FL_NOEXCEPT, and fl::SingletonThreadLocal< T, N >::instance().

Referenced by fl::ScopedTrace::clear(), fl::ScopedTrace::depth(), fl::ScopedTrace::dump(), fl::ScopedTrace::dump(), fl::ScopedTrace::pop(), and fl::ScopedTrace::push().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ global_interner()

StringInterner & fl::global_interner ( )

Definition at line 108 of file string_interner.cpp.hpp.

108 {
110}

References fl::Singleton< T, N >::instance().

Referenced by intern(), intern(), intern(), intern(), fl::string::intern(), fl::string::interned(), fl::string::interned(), and fl::string::interned().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ global_interner_mutex()

static fl::mutex & fl::global_interner_mutex ( )
static

Definition at line 16 of file string_interner.cpp.hpp.

16 {
17 static fl::mutex mtx;
18 return mtx;
19}
fl::platforms::mutex mutex
Definition mutex.h:20

Referenced by intern(), intern(), intern(), and intern().

+ Here is the caller graph for this function:

◆ grad()

FASTLED_FORCE_INLINE float fl::grad ( int hash,
float x,
float y,
float z )

Definition at line 55 of file perlin_float.h.

55 {
56 int h = hash & 15; /* CONVERT LO 4 BITS OF HASH CODE */
57 float u = h < 8 ? x : y, /* INTO 12 GRADIENT DIRECTIONS. */
58 v = h < 4 ? y
59 : h == 12 || h == 14 ? x
60 : z;
61 return ((h & 1) == 0 ? u : -u) + ((h & 2) == 0 ? v : -v);
62}
uint32_t z[NUM_LAYERS]
Definition Fire2023.h:93

References FASTLED_FORCE_INLINE, x, y, and z.

Referenced by fl::anonymous_namespace{wave.cpp.hpp}::BatchDraw::BatchDraw(), fl::FlowFieldFloat::Perlin2D::noise(), and pnoise().

+ Here is the caller graph for this function:

◆ hash_pair()

static u32 fl::hash_pair ( u32 a,
u32 b,
u32 seed = 0 )
inlinestatic

Definition at line 91 of file hash.h.

92 {
93 // mix in 'a', then mix in 'b'
94 u32 h = fast_hash32(seed ^ a);
95 return fast_hash32(h ^ b);
96}
static u32 fast_hash32(u32 x) FL_NOEXCEPT
Definition hash.h:81

References fast_hash32(), and FL_NOEXCEPT.

Referenced by fast_hash64(), and fl::FastHash< vec2< T > >::operator()().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ hash_string_view()

u32 fl::hash_string_view ( string_view sv)
inline

Definition at line 463 of file string_view.h.

463 {
464 // FNV-1a 32-bit hash algorithm
465 u32 hash = 2166136261u;
466 for (fl::size i = 0; i < sv.size(); ++i) {
467 hash ^= static_cast<u32>(sv[i]);
468 hash *= 16777619u;
469 }
470 return hash;
471}
constexpr fl::size size() const FL_NOEXCEPT
Definition string_view.h:99

References FL_NOEXCEPT.

◆ hd108BrightnessHeader()

void fl::hd108BrightnessHeader ( u8 brightness_8bit,
u8 * f0_out,
u8 * f1_out )
inline

Generate HD108 per-channel gain header bytes.

Parameters
brightness_8bit8-bit brightness (0-255) - UNUSED, kept for API compatibility
f0_outOutput: first header byte
f1_outOutput: second header byte
Note
HD108 uses per-channel gain encoding: 5 bits each for R/G/B
All gains set to maximum (31) for maximum precision
Brightness control via 16-bit PWM values (applied before encoding)
Future: Per channel gain control for higher color range

Definition at line 80 of file encoder_utils.h.

80 {
81 (void)brightness_8bit; // Unused - brightness applied to 16-bit values instead
82
83 // Use maximum gain for all channels for maximum precision
84 // Brightness control happens via 16-bit PWM values
85 constexpr u8 r_gain = 31;
86 constexpr u8 g_gain = 31;
87 constexpr u8 b_gain = 31;
88
89 // Correct HD108 per-channel encoding:
90 // f0: [1][RRRRR][GG] - marker bit, 5-bit R gain, 2 MSBs of G gain
91 // f1: [GGG][BBBBB] - 3 LSBs of G gain, 5-bit B gain
92 *f0_out = 0x80 | ((r_gain & 0x1F) << 2) | ((g_gain >> 3) & 0x03);
93 *f1_out = ((g_gain & 0x07) << 5) | (b_gain & 0x1F);
94}

References FL_NOEXCEPT.

Referenced by encodeHD108(), and encodeHD108_HD().

+ Here is the caller graph for this function:

◆ hd108GammaCorrect()

u16 fl::hd108GammaCorrect ( u8 value)
inline

Convert 8-bit color to HD108 16-bit gamma-corrected value (gamma 2.8)

Parameters
value8-bit color value (0-255)
Returns
16-bit gamma-corrected value

Definition at line 68 of file encoder_utils.h.

68 {
70}

References FL_NOEXCEPT, fl::ProgmemLUT16< GammaEval16< gamma< u8x24 >(2.8f)>, 256 >::read(), and type_rank< T >::value.

Referenced by encodeHD108(), and encodeHD108_HD().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ HeatColor()

CRGB fl::HeatColor ( fl::u8 temperature)

Definition at line 202 of file colorutils.cpp.hpp.

202 {
203 CRGB heatcolor;
204
205 // Scale 'heat' down from 0-255 to 0-191,
206 // which can then be easily divided into three
207 // equal 'thirds' of 64 units each.
208 fl::u8 t192 = scale8_video(temperature, 191);
209
210 // calculate a value that ramps up from
211 // zero to 255 in each 'third' of the scale.
212 fl::u8 heatramp = t192 & 0x3F; // 0..63
213 heatramp <<= 2; // scale up to 0..252
214
215 // now figure out which third of the spectrum we're in:
216 if (t192 & 0x80) {
217 // we're in the hottest third
218 heatcolor.r = 255; // full red
219 heatcolor.g = 255; // full green
220 heatcolor.b = heatramp; // ramp up blue
221
222 } else if (t192 & 0x40) {
223 // we're in the middle third
224 heatcolor.r = 255; // full red
225 heatcolor.g = heatramp; // ramp up green
226 heatcolor.b = 0; // no blue
227
228 } else {
229 // we're in the coolest third
230 heatcolor.r = heatramp; // ramp up red
231 heatcolor.g = 0; // no green
232 heatcolor.b = 0; // no blue
233 }
234
235 return heatcolor;
236}

Referenced by FL_DISABLE_WARNING().

+ Here is the caller graph for this function:

◆ hours8()

LIB8STATIC u8 fl::hours8 ( )

Return the current hours since boot in an 8-bit value.

Definition at line 34 of file time_functions.h.

34 {
35 u32 ms = fl::millis();
36 u8 h8;
37 h8 = (ms / (3600000L)) & 0xFF;
38 return h8;
39}

References FL_NOEXCEPT, LIB8STATIC, and millis().

+ Here is the call graph for this function:

◆ HSV16toRGB()

static CRGB fl::HSV16toRGB ( const HSV16 & hsv)
static

Definition at line 121 of file hsv16.cpp.hpp.

121 {
122 // Convert 16-bit values to working range
123 u32 h = hsv.h;
124 u32 s = hsv.s;
125 u32 v = hsv.v;
126
127 if (s == 0) {
128 // Grayscale case - use precise mapping
129 u8 gray = map16_to_8(v);
130 return CRGB{gray, gray, gray};
131 }
132
133 // Determine which sector of the color wheel (0-5)
134 u32 sector = (h * 6) / 65536;
135 u32 sector_pos = (h * 6) % 65536; // Position within sector (0-65535)
136
137 // Calculate intermediate values using precise mapping
138 // c = v * s / 65536, with proper rounding
139 u32 c = map32_to_16(v * s);
140
141 // Calculate x = c * (1 - |2*(sector_pos/65536) - 1|)
142 u32 x;
143 if (sector & 1) {
144 // For odd sectors (1, 3, 5), we want decreasing values
145 // x = c * (65535 - sector_pos) / 65535
146 x = map32_to_16(c * (65535 - sector_pos));
147 } else {
148 // For even sectors (0, 2, 4), we want increasing values
149 // x = c * sector_pos / 65535
150 x = map32_to_16(c * sector_pos);
151 }
152
153 u32 m = v - c;
154
155 u32 r1, g1, b1;
156 switch (sector) {
157 case 0: r1 = c; g1 = x; b1 = 0; break;
158 case 1: r1 = x; g1 = c; b1 = 0; break;
159 case 2: r1 = 0; g1 = c; b1 = x; break;
160 case 3: r1 = 0; g1 = x; b1 = c; break;
161 case 4: r1 = x; g1 = 0; b1 = c; break;
162 default: r1 = c; g1 = 0; b1 = x; break;
163 }
164
165 // Add baseline and scale to 8-bit using accurate mapping
166 u8 R = map16_to_8(u16(r1 + m));
167 u8 G = map16_to_8(u16(g1 + m));
168 u8 B = map16_to_8(u16(b1 + m));
169
170 return CRGB{R, G, B};
171}
u16 map32_to_16(u32 x) FL_NOEXCEPT
Definition intmap.h:72
FL_DISABLE_WARNING_PUSH unsigned char * B
u16 v
Definition hsv16.h:12
u16 h
Definition hsv16.h:10
u16 s
Definition hsv16.h:11

References B, fl::HSV16::h, map16_to_8(), map32_to_16(), fl::HSV16::s, fl::HSV16::v, and x.

Referenced by fl::HSV16::ToRGB().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ hypot() [1/2]

double fl::hypot ( double x,
double y )
inline

Definition at line 501 of file math.h.

501{ return hypot_impl_double(x, y); }
double hypot_impl_double(double x, double y)
Definition math.cpp.hpp:520

References FL_NOEXCEPT, hypot_impl_double(), x, and y.

+ Here is the call graph for this function:

◆ hypot() [2/2]

template<typename T>
enable_if< is_integral< T >::value, float >::type fl::hypot ( T x,
T y )
inline

Definition at line 503 of file math.h.

503{ return hypot_impl_float(static_cast<float>(x), static_cast<float>(y)); }
float hypot_impl_float(float x, float y)
Definition math.cpp.hpp:512

References FL_NOEXCEPT, hypot_impl_float(), x, and y.

+ Here is the call graph for this function:

◆ hypot_impl_double()

double fl::hypot_impl_double ( double x,
double y )

Definition at line 520 of file math.cpp.hpp.

520 {
521#if FL_MATH_USE_LIBM
522 return ::hypot(x, y);
523#else
524 return detail::sqrt_newton_<double>(x * x + y * y);
525#endif
526}

References fl::detail::sqrt_newton_(), x, and y.

Referenced by hypot().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ hypot_impl_float()

float fl::hypot_impl_float ( float x,
float y )

Definition at line 512 of file math.cpp.hpp.

512 {
513#if FL_MATH_USE_LIBM
514 return ::hypotf(x, y);
515#else
516 return detail::sqrt_newton_<float>(x * x + y * y);
517#endif
518}

References fl::detail::sqrt_newton_(), x, and y.

Referenced by hypot(), and hypotf().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ hypotf()

float fl::hypotf ( float x,
float y )
inline

Definition at line 500 of file math.h.

500{ return hypot_impl_float(x, y); }

References FL_NOEXCEPT, hypot_impl_float(), x, and y.

Referenced by render_polar_lookup_table().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ieee754_format_decimal()

fl::string fl::ieee754_format_decimal ( u32 bits,
int precision = 6 )

Format IEEE 754 single-precision bits as decimal text.

Emits a fixed-point decimal representation with precision digits after the point. Negative values emit a leading -. Inf / NaN bit patterns emit "inf" / "-inf" / "nan" (JSON does not allow these, but the codec stays defensive).

No FP arithmetic is performed.

Parameters
bitsIEEE 754 single-precision bit pattern.
precisionDigits after the decimal point. Negative values collapse to 0 (integer form). Clamped to [0, 9].
Returns
Heap-allocated fl::string with the decimal text.

Definition at line 439 of file ieee754_string.cpp.hpp.

439 {
440 if (precision < 0) precision = 0;
441 if (precision > 9) precision = 9;
442
443 const bool neg = (bits >> 31) & 1u;
444 const int biased_exp = static_cast<int>((bits >> 23) & 0xFFu);
445 const u32 mant_bits = bits & 0x7FFFFFu;
446
447 // Inf / NaN.
448 if (biased_exp == 0xFF) {
449 if (mant_bits != 0) return fl::string("nan");
450 return neg ? fl::string("-inf") : fl::string("inf");
451 }
452
453 fl::string s;
454
455 auto append_zero_with_precision = [&]() {
456 s += "0";
457 if (precision > 0) {
458 s += ".";
459 for (int i = 0; i < precision; ++i) s += "0";
460 }
461 };
462
463 // +/- 0 (and any subnormal -- those collapse to zero per the parser's
464 // contract, so the serializer matches).
465 if (biased_exp == 0) {
466 if (neg) s += "-";
467 append_zero_with_precision();
468 return s;
469 }
470
471 // Normal number: value = mantissa_full * 2**bin_exp.
472 // mantissa_full carries the implicit leading 1.
473 const u32 mantissa_full = mant_bits | 0x800000u; // 24 bits
474 const int bin_exp_raw = biased_exp - 127 - 23; // signed
475
476 // Lift to a 64-bit normalized representation so we can multiply against
477 // the shared pow10 table. mantissa_full's bit 23 is set, so shifting left by 40
478 // puts that set bit in position 63.
479 const u64 mant64 = static_cast<u64>(mantissa_full) << 40;
480 const int bin_exp = bin_exp_raw - 40;
481
482 // Look up the normalized representation of 10**precision.
483 const fl::size idx = static_cast<fl::size>(precision - kPow10KMin);
484 const u64 pow_mant = kPow10Mant[idx];
485 const int pow_exp = kPow10BExp[idx];
486
487 // Multiply via the same widening helper the parser uses.
488 u64 scaled_hi = mul_hi_u64(mant64, pow_mant);
489 int scaled_bin_exp = bin_exp + pow_exp + 64;
490 if ((scaled_hi & 0x8000000000000000ull) == 0) {
491 scaled_hi <<= 1;
492 --scaled_bin_exp;
493 }
494
495 // Convert (scaled_hi, scaled_bin_exp) to a u64 integer count of
496 // `precision` decimal places. Overflow on the way up clamps to +/- inf;
497 // underflow on the way down collapses to +/- 0 -- same contract as the
498 // parser at the edges.
499 u64 scaled_int;
500 if (scaled_bin_exp >= 0) {
501 if (scaled_bin_exp > 0) {
502 // (scaled_hi << scaled_bin_exp) drops the top bit -- magnitude
503 // beyond what u64 can carry. Treat as overflow.
504 return neg ? fl::string("-inf") : fl::string("inf");
505 }
506 scaled_int = scaled_hi;
507 } else {
508 const int shift = -scaled_bin_exp;
509 if (shift >= 64) {
510 scaled_int = 0;
511 } else {
512 // Round-half-to-even on the shifted-off low bits.
513 const u64 mask = (shift == 64) ? ~0ull : ((1ull << shift) - 1ull);
514 const u64 low = scaled_hi & mask;
515 scaled_int = scaled_hi >> shift;
516 const u64 half = (shift == 0) ? 0 : (1ull << (shift - 1));
517 if (low > half || (low == half && (scaled_int & 1ull))) {
518 ++scaled_int;
519 }
520 }
521 }
522
523 // For the integer / fractional split we need the EXACT integer value of
524 // 10**precision (not the normalized form). precision is in [0, 9] so this
525 // fits in u32 easily -- keep it inline to avoid pulling another table.
526 static constexpr u32 kPow10IntExact[] = {
527 1u, 10u, 100u, 1000u,
528 10000u, 100000u, 1000000u, 10000000u,
529 100000000u, 1000000000u,
530 };
531 const u64 pow10_exact = kPow10IntExact[precision];
532
533 const u64 int_part = scaled_int / pow10_exact;
534 const u64 frac_part = scaled_int % pow10_exact;
535
536 if (neg && (int_part != 0 || frac_part != 0)) {
537 s += "-";
538 }
539 append_u64_decimal(s, int_part);
540
541 if (precision > 0) {
542 s += ".";
543 // Format `frac_part` as exactly `precision` digits, left-padded with
544 // zeros. utoa64 emits the minimum-digit form, so count its length and
545 // prepend the difference.
546 char buf[24];
547 const int n = fl::utoa64(frac_part, buf, 10);
548 for (int i = n; i < precision; ++i) s += "0";
549 for (int i = 0; i < n; ++i) s += fl::string(1, buf[i]);
550 }
551
552 return s;
553}
static constexpr fl::u64 kPow10Mant[kPow10Count]
static constexpr fl::i16 kPow10BExp[kPow10Count]
fl::u64 mul_hi_u64(fl::u64 a, fl::u64 b) FL_NOEXCEPT
static void append_u64_decimal(fl::string &out, fl::u64 value) FL_NOEXCEPT

References append_u64_decimal(), FL_NOEXCEPT, and utoa64().

Referenced by fl::SerializerVisitor::accept(), and fl::SerializerVisitor::accept().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ieee754_parse_decimal()

u32 fl::ieee754_parse_decimal ( const char * s,
fl::size len,
fl::size * consumed = nullptr )

Parse a decimal floating-point number into IEEE 754 single-precision bits.

Accepts the usual decimal syntax: optional sign, integer digits, optional fractional part, optional e/E exponent. Returns the IEEE 754 single-precision bit pattern of the parsed value. Caller bit-casts to float via fl::bit_cast<float>(bits) if needed.

No FP arithmetic is performed. The implementation uses only integer shifts, masks, and 32x32->64 widening multiplies – libgcc soft-FP helpers (__aeabi_d*, __aeabi_f*) are never reached.

Failure mode: malformed inputs return 0x00000000 (positive zero) and set *consumed to 0. Inputs that overflow IEEE 754 single-precision range (>~3.4e38) clamp to +inf / -inf bit patterns. Inputs that underflow (>~1.4e-45) clamp to +/-0.

Parameters
sPointer to the decimal text.
lenLength of the text in bytes (no NUL terminator assumed).
consumedIf non-null, receives the number of bytes consumed. Useful for caller-side bookkeeping (e.g. JSON tokenizer).
Returns
IEEE 754 single-precision bit pattern.

Definition at line 261 of file ieee754_string.cpp.hpp.

261 {
262 fl::size i = 0;
263
264 auto fail = [&]() -> u32 {
265 if (consumed) *consumed = 0;
266 return 0;
267 };
268
269 // Skip leading whitespace.
270 while (i < len && (s[i] == ' ' || s[i] == '\t' || s[i] == '\n' ||
271 s[i] == '\r' || s[i] == '\f' || s[i] == '\v')) {
272 ++i;
273 }
274
275 // Sign.
276 u32 sign_bit = 0;
277 if (i < len && s[i] == '-') { sign_bit = kSignBitMask; ++i; }
278 else if (i < len && s[i] == '+') { ++i; }
279
280 // Mantissa: integer + optional fractional. Cap at 19 significant decimal
281 // digits -- that is the max u64 can hold (10**19 < 2**64). Beyond that we
282 // drop digits but keep tracking the decimal exponent so values like
283 // "100000000000000000000" (1e20) still round to the right magnitude.
284 fl::u64 mantissa = 0;
285 int decimal_exp = 0;
286 int significant_digits = 0;
287 bool seen_decimal = false;
288 bool seen_digit = false;
289 constexpr int kMaxSignificantDigits = 19;
290
291 while (i < len) {
292 const char c = s[i];
293 if (c >= '0' && c <= '9') {
294 seen_digit = true;
295 if (significant_digits < kMaxSignificantDigits) {
296 // u64 max is ~1.8e19, mantissa * 10 + 9 stays below for 18 digits.
297 mantissa = mantissa * 10u + static_cast<fl::u64>(c - '0');
298 if (significant_digits != 0 || c != '0') {
299 ++significant_digits;
300 }
301 if (seen_decimal) {
302 --decimal_exp;
303 }
304 } else {
305 // Out of mantissa precision -- track magnitude via decimal_exp only.
306 if (!seen_decimal) {
307 ++decimal_exp;
308 }
309 }
310 ++i;
311 } else if (c == '.' && !seen_decimal) {
312 seen_decimal = true;
313 ++i;
314 } else {
315 break;
316 }
317 }
318
319 // Reject inputs that contained no digit (e.g. "", ".", "-.", "+.", "e5").
320 // `i == mantissa_start` only catches "" and "-"/"+" -- a lone "." passes
321 // the start-position guard because the loop consumed it.
322 if (!seen_digit) {
323 return fail();
324 }
325
326 // Optional exponent.
327 if (i < len && (s[i] == 'e' || s[i] == 'E')) {
328 const fl::size exp_start = i + 1;
329 fl::size j = exp_start;
330 int exp_sign = 1;
331 if (j < len && s[j] == '-') { exp_sign = -1; ++j; }
332 else if (j < len && s[j] == '+') { ++j; }
333 int exp_val = 0;
334 const fl::size digits_begin = j;
335 while (j < len && s[j] >= '0' && s[j] <= '9') {
336 if (exp_val < 10000) {
337 exp_val = exp_val * 10 + (s[j] - '0');
338 }
339 ++j;
340 }
341 if (j != digits_begin) {
342 decimal_exp += exp_sign * exp_val;
343 i = j;
344 }
345 // else: lone 'e' with no digits -- treat as end-of-number, leave i at 'e'.
346 }
347
348 if (consumed) *consumed = i;
349
350 if (mantissa == 0) {
351 return sign_bit;
352 }
353
354 // Normalize mantissa into [2**63, 2**64) so the top bit is set. The
355 // shift count becomes part of the binary exponent.
356 int mantissa_shift = 0;
357 while ((mantissa & 0x8000000000000000ull) == 0) {
358 mantissa <<= 1;
359 ++mantissa_shift;
360 }
361 // After normalization: original_mantissa = mantissa * 2**(-mantissa_shift).
362
363 // Out-of-table decimal exponent: under/overflow before we even multiply.
364 // The table floor (kPow10KMin) is chosen so the parser's raw 19-digit
365 // mantissa still covers IEEE 754 single-precision range -- see
366 // ci/tools/gen_pow10_table.py.
367 if (decimal_exp < kPow10KMin) {
368 return sign_bit; // +/- 0
369 }
370 if (decimal_exp > kPow10KMax) {
371 return sign_bit | kInfBitsPos; // +/- inf
372 }
373
374 const fl::size idx = static_cast<fl::size>(decimal_exp - kPow10KMin);
375 const fl::u64 pow_mant = kPow10Mant[idx];
376 const int pow_exp = kPow10BExp[idx];
377
378 fl::u64 product_hi = mul_hi_u64(mantissa, pow_mant);
379 // The full product (mantissa * pow_mant) is in [2**126, 2**128). Its top
380 // 64 bits (product_hi) are in [2**62, 2**64). If bit 63 isn't set,
381 // shift left by 1 to renormalize and consume one binary-exponent unit.
382 int extra_shift = 0;
383 if ((product_hi & 0x8000000000000000ull) == 0) {
384 product_hi <<= 1;
385 extra_shift = 1;
386 }
387
388 // Binary exponent of the renormalized mantissa: combines the input
389 // mantissa shift, the pow10 binary exponent, the +64 for taking the
390 // top half of the 128-bit product, and the renormalization shift.
391 int bin_exp = -mantissa_shift + pow_exp + 64 - extra_shift;
392
393 // IEEE 754 single-precision biased exponent: the implicit-1 form is
394 // product_hi / 2**63, so the unbiased binary exponent is (bin_exp + 63).
395 int biased_exp = bin_exp + 63 + 127;
396
397 if (biased_exp >= 0xFF) {
398 return sign_bit | kInfBitsPos; // +/- inf
399 }
400 if (biased_exp <= 0) {
401 // Subnormal / underflow. For embedded-grade precision we collapse
402 // to +/- 0 -- the JSON-RPC use case never needs denormals, and
403 // avoiding the subnormal path keeps the bit-twiddling logic compact.
404 return sign_bit;
405 }
406
407 // Extract the 23-bit mantissa from the top 64 bits with round-half-to-even.
408 // product_hi bits [62:40] -> ieee_mant bits [22:0]
409 // product_hi bit [39] -> rounding bit
410 // product_hi bits [38:0] -> sticky bits
411 fl::u32 ieee_mant = static_cast<fl::u32>((product_hi >> 40) & 0x7FFFFFu);
412 const fl::u64 round_bit = (product_hi >> 39) & 1u;
413 const fl::u64 sticky = (product_hi & 0x7FFFFFFFFFull); // bits [38:0]
414 if (round_bit && (sticky != 0 || (ieee_mant & 1u))) {
415 ++ieee_mant;
416 if (ieee_mant == (1u << 23)) {
417 // Mantissa overflow on rounding -- re-renormalize.
418 ieee_mant = 0;
419 ++biased_exp;
420 if (biased_exp >= 0xFF) {
421 return sign_bit | kInfBitsPos;
422 }
423 }
424 }
425
426 return sign_bit | (static_cast<fl::u32>(biased_exp) << 23) | ieee_mant;
427}
void fail(const char *msg, const char *file, int line, bool isFatal) FL_NOEXCEPT
Helper for FAIL macros.

References FL_NOEXCEPT.

Referenced by fl::anonymous_namespace{json.cpp.hpp}::JsonBuilder::on_token(), fl::anonymous_namespace{json.cpp.hpp}::JsonBuilder::parse_float_array(), and fl::anonymous_namespace{json.cpp.hpp}::JsonTokenizer::scan_array_lookahead().

+ Here is the caller graph for this function:

◆ init()

void fl::init ( Context & ctx,
int w,
int h )
inline

Definition at line 133 of file engine.h.

133 {
134 if (!ctx.mEngine) {
136 }
137 ctx.num_x = w;
138 ctx.num_y = h;
139 ctx.mEngine->init(w, h);
140}
fl::enable_if<!fl::is_array< T >::value, unique_ptr< T > >::type make_unique(Args &&... args) FL_NOEXCEPT
Definition unique_ptr.h:261
fl::unique_ptr< Engine > mEngine
Definition context.h:38
int num_y
Definition context.h:27
int num_x
Definition context.h:26

References init().

Referenced by fl::deque< int >::deque(), fl::FixedVector< fl::u32, kMaxBatchSize >::FixedVector(), fl::list< T >::list(), fl::MapRedBlackTree< Key, T, Compare, fl::allocator_slab< char > >< Key, T, Compare >::MapRedBlackTree(), fl::MultiMapTree< Key, T, Compare, fl::allocator_slab< char > >::MultiMapTree(), fl::MultiSetTree< Key, Compare, fl::allocator_slab< char > >::MultiSetTree(), fl::set< T, fl::allocator_inlined_slab< T, N > >::set(), fl::span< T, dynamic_extent >::span(), fl::vector< fl::i16 >::vector(), fl::vector_psram< T >::vector_psram(), fl::VectorN< T, INLINED_SIZE >::VectorN(), fl::Animartrix::draw(), init(), fl::iterator<, u8 >::insert(), fl::iterator<, u8 >::operator=(), fl::set< T, fl::allocator_inlined_slab< T, N > >::operator=(), and fl::iterator<, u8 >::unordered_map().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ int_to_ptr()

template<typename T>
T * fl::int_to_ptr ( uptr value)

Definition at line 76 of file bit_cast.h.

76 {
77 return bit_cast<T*>(value);
78}

References bit_cast(), FL_NOEXCEPT, and type_rank< T >::value.

Referenced by fl::CLEDController::beginShowLeds().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ intern() [1/4]

fl::string fl::intern ( const char * str)

Definition at line 123 of file string_interner.cpp.hpp.

123 {
124 fl::unique_lock<fl::mutex> lock(global_interner_mutex());
125 return global_interner().intern(str);
126}
fl::string intern(const string_view &sv)
StringInterner & global_interner()
static fl::mutex & global_interner_mutex()

References global_interner(), global_interner_mutex(), and fl::StringInterner::intern().

+ Here is the call graph for this function:

◆ intern() [2/4]

fl::string fl::intern ( const fl::span< const char > & sp)

Definition at line 128 of file string_interner.cpp.hpp.

128 {
129 fl::unique_lock<fl::mutex> lock(global_interner_mutex());
130 return global_interner().intern(sp);
131}

References global_interner(), global_interner_mutex(), and fl::StringInterner::intern().

+ Here is the call graph for this function:

◆ intern() [3/4]

fl::string fl::intern ( const fl::string & str)

Definition at line 118 of file string_interner.cpp.hpp.

118 {
119 fl::unique_lock<fl::mutex> lock(global_interner_mutex());
120 return global_interner().intern(str);
121}

References global_interner(), global_interner_mutex(), and fl::StringInterner::intern().

+ Here is the call graph for this function:

◆ intern() [4/4]

fl::string fl::intern ( const string_view & sv)

Definition at line 113 of file string_interner.cpp.hpp.

113 {
114 fl::unique_lock<fl::mutex> lock(global_interner_mutex());
115 return global_interner().intern(sv);
116}

References global_interner(), global_interner_mutex(), and fl::StringInterner::intern().

+ Here is the call graph for this function:

◆ interrupt_disable()

void fl::interrupt_disable ( )

Disable global interrupts (platform-specific).

Definition at line 10 of file critical_section.cpp.hpp.

10 {
11 interruptsDisable();
12}

Referenced by fl::isr::critical_section::critical_section().

+ Here is the caller graph for this function:

◆ interrupt_enable()

void fl::interrupt_enable ( )

Enable global interrupts (platform-specific).

Definition at line 14 of file critical_section.cpp.hpp.

14 {
15 interruptsEnable();
16}

Referenced by fl::isr::critical_section::~critical_section().

+ Here is the caller graph for this function:

◆ invoke() [1/3]

template<typename F, typename... Args>
auto fl::invoke ( F && f,
Args &&... args ) -> enable_if_t<!is_member_function_pointer<typename remove_reference<F>::type>::value && !detail::is_member_data_pointer<typename remove_reference<F>::type>::value, decltype(fl::forward<F>(f)(fl::forward<Args>(args)...))>

Definition at line 83 of file functional.h.

87{
89}

References args, FL_NOEXCEPT, fl::fl::forward(), and type_rank< T >::value.

+ Here is the call graph for this function:

◆ invoke() [2/3]

template<typename F, typename T1>
auto fl::invoke ( F && f,
T1 && t1 ) -> enable_if_t<detail::is_member_data_pointer<typename remove_reference<F>::type>::value && !detail::use_pointer_syntax<T1>::value, decltype(fl::forward<T1>(t1).*f)>

Definition at line 63 of file functional.h.

67{
68 return fl::forward<T1>(t1).*f;
69}

References FL_NOEXCEPT, fl::fl::forward(), type_rank< T >::value, and fl::fl::integral_constant< bool, false >::value.

+ Here is the call graph for this function:

◆ invoke() [3/3]

template<typename F, typename T1, typename... Args>
auto fl::invoke ( F && f,
T1 && t1,
Args &&... args ) -> enable_if_t<is_member_function_pointer<typename remove_reference<F>::type>::value && !detail::use_pointer_syntax<T1>::value, decltype((fl::forward<T1>(t1).*f)(fl::forward<Args>(args)...))>

Definition at line 43 of file functional.h.

47{
48 return (fl::forward<T1>(t1).*f)(fl::forward<Args>(args)...);
49}

References args, FL_NOEXCEPT, fl::fl::forward(), type_rank< T >::value, and fl::fl::integral_constant< bool, false >::value.

Referenced by fl::Rpc::bindAsync().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isdigit()

bool fl::isdigit ( char c)
inline

Check if character is a decimal digit (0-9)

Parameters
cThe character to check
Returns
true if c is a digit, false otherwise

Definition at line 25 of file cctype.h.

25 {
26 return c >= '0' && c <= '9';
27}

References FL_NOEXCEPT.

Referenced by fl::float_conversion_visitor< FloatType >::operator()(), fl::float_conversion_visitor< double >::operator()(), fl::int_conversion_visitor< IntType >::operator()(), fl::int_conversion_visitor< i64 >::operator()(), and fl::anonymous_namespace{http_parser.cpp.hpp}::parseInt().

+ Here is the caller graph for this function:

◆ isDigitInBase()

static bool fl::isDigitInBase ( char c,
int base )
static

Definition at line 55 of file cstdlib.cpp.hpp.

55 {
56 if (base <= 10) {
57 return c >= '0' && c < ('0' + base);
58 }
59 if (c >= '0' && c <= '9') {
60 return true;
61 }
62 if (c >= 'a' && c < ('a' + base - 10)) {
63 return true;
64 }
65 if (c >= 'A' && c < ('A' + base - 10)) {
66 return true;
67 }
68 return false;
69}

Referenced by strtol(), and strtoul().

+ Here is the caller graph for this function:

◆ isqrt32()

FL_OPTIMIZE_FUNCTION constexpr u16 fl::isqrt32 ( u32 x)
inlineconstexpr

Definition at line 53 of file isqrt.h.

53 {
54 return x == 0 ? u16(0)
55 : _isqrt32_step(x, 0, _isqrt32_start(x, u32(1) << 30));
56}

References _isqrt32_start(), _isqrt32_step(), FL_NOEXCEPT, FL_OPTIMIZE_FUNCTION, and x.

Referenced by fl::gfx::detail::drawStrokeLineCore(), fl::s12x4::sqrt(), fl::s4x12::sqrt(), fl::s8x8::sqrt(), fl::u12x4::sqrt(), fl::u4x12::sqrt(), fl::u8x8::sqrt(), and fl::fixed_point_base< Derived, IntBits, FracBits >::sqrt_impl().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isqrt64()

FL_OPTIMIZE_FUNCTION constexpr u32 fl::isqrt64 ( u64 x)
inlineconstexpr

Definition at line 58 of file isqrt.h.

58 {
59 return x == 0 ? u32(0)
60 : _isqrt64_step(x, 0, _isqrt64_start(x, u64(1) << 62));
61}

References _isqrt64_start(), _isqrt64_step(), FL_NOEXCEPT, FL_OPTIMIZE_FUNCTION, and x.

Referenced by fl::s16x16::sqrt(), fl::s24x8::sqrt(), fl::s8x24::sqrt(), fl::u16x16::sqrt(), fl::u24x8::sqrt(), fl::u8x24::sqrt(), and fl::fixed_point_base< Derived, IntBits, FracBits >::sqrt_impl().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isspace()

bool fl::isspace ( char c)
inline

Check if character is whitespace (space, tab, newline, carriage return)

Parameters
cThe character to check
Returns
true if c is a whitespace character, false otherwise

Definition at line 18 of file cctype.h.

18 {
19 return c == ' ' || c == '\t' || c == '\n' || c == '\r';
20}

References FL_NOEXCEPT.

Referenced by createSerialRequestSource(), fl::anonymous_namespace{http_parser.cpp.hpp}::http_parser_trim(), and fl::string::trim().

+ Here is the caller graph for this function:

◆ itoa()

int fl::itoa ( i32 value,
char * buffer,
int radix )

Convert signed 32-bit integer to string buffer in given radix.

Parameters
valueThe integer value to convert
bufferOutput buffer (must be at least 34 bytes for base 2, 12 for base 10, 12 for base 16)
radixNumber base (2-36, typically 10 for decimal, 16 for hex, 8 for octal)
Returns
Number of characters written (excluding null terminator)

Definition at line 68 of file charconv.cpp.hpp.

68 {
69 char tmp[16]; // be careful with the length of the buffer
70 char *tp = tmp;
71 int i;
72 u32 v;
73
74 int sign = (radix == 10 && value < 0);
75 if (sign)
76 v = -static_cast<u32>(value);
77 else
78 v = static_cast<u32>(value);
79
80 while (v || tp == tmp) {
81 i = v % radix;
82 v = radix ? v / radix : 0;
83 if (i < 10)
84 *tp++ = i + '0';
85 else
86 *tp++ = i + 'a' - 10;
87 }
88
89 int len = tp - tmp;
90
91 if (sign) {
92 *sp++ = '-';
93 len++;
94 }
95
96 while (tp > tmp)
97 *sp++ = *--tp;
98
99 *sp = '\0'; // Null-terminate the string
100 return len;
101}
constexpr enable_if< is_fixed_point< T >::value, int >::type sign(T x) FL_NOEXCEPT

References sign(), and type_rank< T >::value.

Referenced by fl::sstream::appendFormatted(), fl::basic_string::appendHex(), fl::basic_string::appendOct(), fl::ostream::operator<<(), fl::ostream::operator<<(), fl::ostream::operator<<(), fl::SerialPort::print(), fl::SerialPort::println(), fl::basic_string::write(), and fl::basic_string::write().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ itoa64()

int fl::itoa64 ( i64 value,
char * buffer,
int radix )

Convert signed 64-bit integer to string buffer in given radix.

Parameters
valueThe signed 64-bit integer value to convert
bufferOutput buffer (must be at least 66 bytes for base 2 with sign, 21 for base 10)
radixNumber base (2-36, typically 10 for decimal, 16 for hex, 8 for octal)
Returns
Number of characters written (excluding null terminator)

Definition at line 103 of file charconv.cpp.hpp.

103 {
104 char tmp[32]; // Buffer for 64-bit integer (max 65 chars for base 2 + sign)
105 char *tp = tmp;
106 int i;
107 u64 v;
108
109 int sign = (radix == 10 && value < 0);
110 if (sign)
111 v = -static_cast<u64>(value);
112 else
113 v = static_cast<u64>(value);
114
115 while (v || tp == tmp) {
116 i = v % radix;
117 v = radix ? v / radix : 0;
118 if (i < 10)
119 *tp++ = i + '0';
120 else
121 *tp++ = i + 'a' - 10;
122 }
123
124 int len = tp - tmp;
125
126 if (sign) {
127 *sp++ = '-';
128 len++;
129 }
130
131 while (tp > tmp)
132 *sp++ = *--tp;
133
134 *sp = '\0'; // Null-terminate the string
135 return len;
136}

References sign(), and type_rank< T >::value.

Referenced by fl::basic_string::appendHex(), fl::basic_string::appendOct(), fl::SerialPort::print(), and fl::SerialPort::println().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ jsonArrayToFloatVector()

fl::vector< float > fl::jsonArrayToFloatVector ( const fl::json & jsonArray)

Definition at line 34 of file screenmap.cpp.hpp.

34 {
36
37 if (!jsonArray.has_value() || !jsonArray.is_array()) {
38 return result;
39 }
40 auto begin_float = jsonArray.begin_array<float>();
41 auto end_float = jsonArray.end_array<float>();
42
43 using T = decltype(*begin_float);
44 FL_STATIC_ASSERT(fl::is_same<T, fl::parse_result<float>>::value, "Value type must be parse_result<float>");
45
46 // Use explicit array iterator style as demonstrated in FEATURE.md
47 // DO NOT CHANGE THIS CODE. FIX THE IMPLIMENTATION IF NECESSARY.
48 for (auto it = begin_float; it != end_float; ++it) {
49 // assert that the value type is parse_result<float>
50
51 // get the name of the type
52 auto parseResult = *it;
53 if (!parseResult.has_error()) {
54 result.push_back(parseResult.get_value());
55 } else {
56 FL_WARN("jsonArrayToFloatVector: parse_result<float> has error: " << parseResult.get_error().message);
57 }
58 }
59
60 return result;
61}
bool is_array() const FL_NOEXCEPT
Definition json.h:246
bool has_value() const FL_NOEXCEPT
Definition json.h:654
json_value::template array_iterator< T > end_array() FL_NOEXCEPT
Definition json.h:498
json_value::template array_iterator< T > begin_array() FL_NOEXCEPT
Definition json.h:492

References FL_STATIC_ASSERT(), FL_WARN, jsonArrayToFloatVector(), and type_rank< T >::value.

Referenced by jsonArrayToFloatVector(), fl::ScreenMap::ParseJson(), and parseV2SegmentArray().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ldexp() [1/2]

double fl::ldexp ( double value,
int exp )
inline

Definition at line 515 of file math.h.

515{ return ldexp_impl_double(value, exp); }
double ldexp_impl_double(double value, int exp)
Definition math.cpp.hpp:653
enable_if< is_fixed_point< T >::value, T >::type exp(T x) FL_NOEXCEPT

References exp(), FL_NOEXCEPT, ldexp_impl_double(), and type_rank< T >::value.

+ Here is the call graph for this function:

◆ ldexp() [2/2]

template<typename T>
enable_if< is_integral< T >::value, float >::type fl::ldexp ( T value,
int exp )
inline

Definition at line 517 of file math.h.

517{ return ldexp_impl_float(static_cast<float>(value), exp); }
float ldexp_impl_float(float value, int exp)
Definition math.cpp.hpp:645

References exp(), FL_NOEXCEPT, ldexp_impl_float(), and type_rank< T >::value.

+ Here is the call graph for this function:

◆ ldexp_impl_double()

double fl::ldexp_impl_double ( double value,
int exp )

Definition at line 653 of file math.cpp.hpp.

653 {
654#if FL_MATH_USE_LIBM
655 return ::ldexp(value, exp);
656#else
658#endif
659}
F ldexp_loop_(F value, int exp) FL_NOEXCEPT
Definition math.cpp.hpp:623

References exp(), fl::detail::ldexp_loop_(), and type_rank< T >::value.

Referenced by ldexp().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ldexp_impl_float()

float fl::ldexp_impl_float ( float value,
int exp )

Definition at line 645 of file math.cpp.hpp.

645 {
646#if FL_MATH_USE_LIBM
647 return ::ldexpf(value, exp);
648#else
650#endif
651}

References exp(), fl::detail::ldexp_loop_(), and type_rank< T >::value.

Referenced by ldexp(), and ldexpf().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ldexpf()

float fl::ldexpf ( float value,
int exp )
inline

Definition at line 514 of file math.h.

514{ return ldexp_impl_float(value, exp); }

References exp(), FL_NOEXCEPT, ldexp_impl_float(), and type_rank< T >::value.

+ Here is the call graph for this function:

◆ lerp() [1/2]

FASTLED_FORCE_INLINE float fl::lerp ( float t,
float a,
float b )

Definition at line 50 of file perlin_float.h.

50 {
51 return a + t * (b - a);
52}

References FASTLED_FORCE_INLINE, and t.

Referenced by fl::FlowFieldFloat::Perlin2D::noise(), and pnoise().

+ Here is the caller graph for this function:

◆ lerp() [2/2]

template<typename T>
enable_if< is_fixed_point< T >::value, T >::type fl::lerp ( T a,
T b,
T t )
inlineconstexpr

Definition at line 537 of file fixed_point.h.

537{ return T::lerp(a, b, t); }

References FL_NOEXCEPT, and t.

◆ lexicographical_compare() [1/2]

template<typename Iterator1, typename Iterator2>
bool fl::lexicographical_compare ( Iterator1 first1,
Iterator1 last1,
Iterator2 first2,
Iterator2 last2 )

Definition at line 146 of file algorithm.h.

146 {
147 while (first1 != last1 && first2 != last2) {
148 if (*first1 < *first2) {
149 return true;
150 }
151 if (*first2 < *first1) {
152 return false;
153 }
154 ++first1;
155 ++first2;
156 }
157 // If we've exhausted first1 but not first2, first1 is less
158 // If we've exhausted both, they're equal (return false)
159 // If we've exhausted first2 but not first1, first2 is less (return false)
160 return (first1 == last1) && (first2 != last2);
161}

References FL_NOEXCEPT.

Referenced by fl::MapRedBlackTree< Key, T, Compare, fl::allocator_slab< char > >< Key, T, Compare >::operator<(), operator<(), operator<(), and fl::set< T, fl::allocator_inlined_slab< T, N > >::operator<().

+ Here is the caller graph for this function:

◆ lexicographical_compare() [2/2]

template<typename Iterator1, typename Iterator2, typename Compare>
bool fl::lexicographical_compare ( Iterator1 first1,
Iterator1 last1,
Iterator2 first2,
Iterator2 last2,
Compare comp )

Definition at line 165 of file algorithm.h.

165 {
166 while (first1 != last1 && first2 != last2) {
167 if (comp(*first1, *first2)) {
168 return true;
169 }
170 if (comp(*first2, *first1)) {
171 return false;
172 }
173 ++first1;
174 ++first2;
175 }
176 // If we've exhausted first1 but not first2, first1 is less
177 // If we've exhausted both, they're equal (return false)
178 // If we've exhausted first2 but not first1, first2 is less (return false)
179 return (first1 == last1) && (first2 != last2);
180}

References FL_NOEXCEPT.

◆ loadJpegFromSD()

FramePtr fl::loadJpegFromSD ( int cs_pin,
const char * filepath,
const JpegConfig & config = JpegConfig(),
fl::string * error_message = nullptr )
inline

Definition at line 108 of file file_system.h.

110 {
111 FileSystem fs;
112 if (!fs.beginSd(cs_pin)) {
113 if (error_message) {
114 *error_message = "Failed to initialize SD card on CS pin ";
115 error_message->append(static_cast<fl::u32>(cs_pin));
116 }
117 return FramePtr();
118 }
119 return fs.loadJpeg(filepath, config, error_message);
120}
bool beginSd(int cs_pin)
FramePtr loadJpeg(const char *path, const JpegConfig &config=JpegConfig(), fl::string *error_message=nullptr)
string & append(const bitset_fixed< N > &bs) FL_NOEXCEPT
Definition string.h:284

References fl::FileSystem::beginSd(), and fl::FileSystem::loadJpeg().

+ Here is the call graph for this function:

◆ log() [1/2]

double fl::log ( double value)
inline

Definition at line 419 of file math.h.

419{ return log_impl_double(value); }
double log_impl_double(double value)
Definition math.cpp.hpp:296

References FL_NOEXCEPT, log_impl_double(), and type_rank< T >::value.

+ Here is the call graph for this function:

◆ log() [2/2]

template<typename T>
enable_if< is_integral< T >::value, float >::type fl::log ( T value)
inline

Definition at line 421 of file math.h.

421{ return log_impl_float(static_cast<float>(value)); }
float log_impl_float(float value)
Definition math.cpp.hpp:288

References FL_NOEXCEPT, log_impl_float(), and type_rank< T >::value.

+ Here is the call graph for this function:

◆ log10() [1/2]

double fl::log10 ( double value)
inline

Definition at line 425 of file math.h.

425{ return log10_impl_double(value); }
double log10_impl_double(double value)
Definition math.cpp.hpp:313

References FL_NOEXCEPT, log10_impl_double(), and type_rank< T >::value.

Referenced by fl::audio::SoundLevelMeter::processBlock().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ log10() [2/2]

template<typename T>
enable_if< is_integral< T >::value, float >::type fl::log10 ( T value)
inline

Definition at line 427 of file math.h.

427{ return log10_impl_float(static_cast<float>(value)); }
float log10_impl_float(float value)
Definition math.cpp.hpp:304

References FL_NOEXCEPT, log10_impl_float(), and type_rank< T >::value.

+ Here is the call graph for this function:

◆ log10_impl_double()

double fl::log10_impl_double ( double value)

Definition at line 313 of file math.cpp.hpp.

313 {
314#if FL_MATH_USE_LIBM
315 return ::log10(value);
316#else
317 const double kInvLn10 = 0.43429448190325182765;
318 return detail::log_natural_<double>(value) * kInvLn10;
319#endif
320}
F log_natural_(F value) FL_NOEXCEPT
Definition math.cpp.hpp:214

References fl::detail::log_natural_(), and type_rank< T >::value.

Referenced by log10().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ log10_impl_float()

float fl::log10_impl_float ( float value)

Definition at line 304 of file math.cpp.hpp.

304 {
305#if FL_MATH_USE_LIBM
306 return ::log10f(value);
307#else
308 const float kInvLn10 = 0.43429448190325182765f;
309 return detail::log_natural_<float>(value) * kInvLn10;
310#endif
311}

References fl::detail::log_natural_(), and type_rank< T >::value.

Referenced by log10(), and log10f().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ log10f()

float fl::log10f ( float value)
inline

Definition at line 424 of file math.h.

424{ return log10_impl_float(value); }

References FL_NOEXCEPT, log10_impl_float(), and type_rank< T >::value.

Referenced by fl::audio::detector::Backbeat::calculateMultibandAccent(), fl::audio::fft::Bins::db(), and drawWaveform().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ log2() [1/2]

double fl::log2 ( double value)
inline

Definition at line 431 of file math.h.

431{ return log_impl_double(value) / log_impl_double(2.0); }

References FL_NOEXCEPT, log_impl_double(), and type_rank< T >::value.

+ Here is the call graph for this function:

◆ log2() [2/2]

template<typename T>
enable_if< is_integral< T >::value, float >::type fl::log2 ( T value)
inline

Definition at line 433 of file math.h.

433{ return log_impl_float(static_cast<float>(value)) / log_impl_float(2.0f); }

References FL_NOEXCEPT, log_impl_float(), and type_rank< T >::value.

+ Here is the call graph for this function:

◆ log2f()

float fl::log2f ( float value)
inline

Definition at line 430 of file math.h.

430{ return log_impl_float(value) / log_impl_float(2.0f); }

References FL_NOEXCEPT, log_impl_float(), and type_rank< T >::value.

Referenced by fl::audio::fft::Context::initOctaveWise().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ log_impl_double()

double fl::log_impl_double ( double value)

Definition at line 296 of file math.cpp.hpp.

296 {
297#if FL_MATH_USE_LIBM
298 return ::log(value);
299#else
301#endif
302}

References fl::detail::log_natural_(), and type_rank< T >::value.

Referenced by log(), and log2().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ log_impl_float()

float fl::log_impl_float ( float value)

Definition at line 288 of file math.cpp.hpp.

288 {
289#if FL_MATH_USE_LIBM
290 return ::logf(value);
291#else
293#endif
294}

References fl::detail::log_natural_(), and type_rank< T >::value.

Referenced by log(), log2(), log2f(), and logf().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ logf()

float fl::logf ( float value)
inline

Definition at line 418 of file math.h.

418{ return log_impl_float(value); }

References FL_NOEXCEPT, log_impl_float(), and type_rank< T >::value.

Referenced by fl::audio::detector::anonymous_namespace{equalizer.cpp.hpp}::applyScaling(), fl::audio::Reactive::applyScaling(), fl::audio::Reactive::begin(), fl::audio::fft::Bins::binToFreq(), fl::audio::detector::ChordDetector::calculateChroma(), fl::audio::FrequencyBinMapper::calculateLogFrequencies(), fl::audio::detector::Note::calculatePitchBend(), fl::audio::detector::EqualizerDetector::computeBinCenters(), fl::audio::detector::Percussion::computeFeatures(), fl::audio::computePinkNoiseGains(), fl::audio::detector::KeyDetector::extractChroma(), fl::audio::fft::Bins::freqToBin(), fl::audio::detector::Note::frequencyToMidiNote(), fl::audio::fft::Context::initHybrid(), fl::audio::fft::Context::initLogRebin(), fl::audio::fft::Context::initOctaveWise(), fl::audio::interpolateMicResponse(), and fl::audio::detector::EqualizerDetector::update().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ logFrame()

void fl::logFrame ( unsigned long & c)
inline

Definition at line 175 of file engine_core.h.

175 {
176 c = fl::micros();
177}

References micros().

Referenced by fl::Engine::logFrame().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ logOutput()

void fl::logOutput ( unsigned long & b)
inline

Definition at line 171 of file engine_core.h.

171 {
172 b = fl::micros();
173}

References micros().

Referenced by fl::Engine::logOutput().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ lower_bound() [1/2]

template<typename Iterator, typename T>
Iterator fl::lower_bound ( Iterator first,
Iterator last,
const T & value )

Definition at line 556 of file algorithm.h.

556 {
557 typedef typename fl::remove_reference<decltype(*first)>::type value_type;
558 return detail::lower_bound_impl(first, last, value,
559 [](const value_type& a, const T& b) { return a < b; });
560}
Iterator lower_bound_impl(Iterator first, Iterator last, const T &value, Compare comp) FL_NOEXCEPT
Definition algorithm.h:442

References FL_NOEXCEPT, fl::detail::lower_bound_impl(), and type_rank< T >::value.

+ Here is the call graph for this function:

◆ lower_bound() [2/2]

template<typename Iterator, typename T, typename Compare>
Iterator fl::lower_bound ( Iterator first,
Iterator last,
const T & value,
Compare comp )

Definition at line 551 of file algorithm.h.

551 {
552 return detail::lower_bound_impl(first, last, value, comp);
553}

References FL_NOEXCEPT, fl::detail::lower_bound_impl(), and type_rank< T >::value.

Referenced by fl::detail::AlphaTrimmedMeanImpl< T, N >::update(), fl::detail::HampelFilterImpl< T, N >::update(), and fl::detail::MedianFilterImpl< T, N >::update().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ lpd6803EncodeRGB()

u16 fl::lpd6803EncodeRGB ( u8 r,
u8 g,
u8 b )
inline

Convert RGB to LPD6803 16-bit format (1bbbbbgggggrrrrr)

Parameters
rRed component (0-255)
gGreen component (0-255)
bBlue component (0-255)
Returns
16-bit LPD6803 command word
Note
Bit 15: marker (1), Bits 14-0: 5-5-5 RGB

Definition at line 102 of file encoder_utils.h.

102 {
103 u16 command = 0x8000; // Start marker
104 command |= (r & 0xF8) << 7; // Red: high 5 bits
105 command |= (g & 0xF8) << 2; // Green: high 5 bits
106 command |= (b >> 3); // Blue: high 5 bits
107 return command;
108}

References FL_NOEXCEPT.

Referenced by encodeLPD6803().

+ Here is the caller graph for this function:

◆ lpd8806Encode()

u8 fl::lpd8806Encode ( u8 value)
inline

Apply LPD8806 encoding to a single color byte.

Parameters
value8-bit color value (0-255)
Returns
7-bit color with MSB set (0x80-0xFF)
Note
LPD8806 uses 7-bit color depth with MSB always set

Definition at line 60 of file encoder_utils.h.

60 {
61 // LPD8806 requires MSB set on each byte, and uses 7-bit color depth
62 return 0x80 | ((value >> 1) | ((value && (value < 254)) & 0x01));
63}

References FL_NOEXCEPT, and type_rank< T >::value.

Referenced by encodeLPD8806().

+ Here is the caller graph for this function:

◆ lround() [1/2]

long fl::lround ( double value)
inline

Definition at line 331 of file math.h.

331{ return lround_impl_double(value); }
long lround_impl_double(double value)
Definition math.cpp.hpp:372

References FL_NOEXCEPT, lround_impl_double(), and type_rank< T >::value.

+ Here is the call graph for this function:

◆ lround() [2/2]

template<typename T>
enable_if< is_integral< T >::value, long >::type fl::lround ( T value)
inline

Definition at line 333 of file math.h.

333{ return static_cast<long>(value); }

References FL_NOEXCEPT, and type_rank< T >::value.

◆ lround_impl_double()

long fl::lround_impl_double ( double value)

Definition at line 372 of file math.cpp.hpp.

372 {
373#if FL_MATH_USE_LIBM
374 return ::lround(value);
375#else
376 if (value >= 0.0) return static_cast<long>(value + 0.5);
377 return static_cast<long>(value - 0.5);
378#endif
379}

References type_rank< T >::value.

Referenced by lround(), and round_impl_double().

+ Here is the caller graph for this function:

◆ lround_impl_float()

long fl::lround_impl_float ( float value)

Definition at line 363 of file math.cpp.hpp.

363 {
364#if FL_MATH_USE_LIBM
365 return ::lroundf(value);
366#else
367 if (value >= 0.0f) return static_cast<long>(value + 0.5f);
368 return static_cast<long>(value - 0.5f);
369#endif
370}

References type_rank< T >::value.

Referenced by lroundf(), and round_impl_float().

+ Here is the caller graph for this function:

◆ lroundf()

long fl::lroundf ( float value)
inline

Definition at line 330 of file math.h.

330{ return lround_impl_float(value); }
long lround_impl_float(float value)
Definition math.cpp.hpp:363

References FL_NOEXCEPT, lround_impl_float(), and type_rank< T >::value.

+ Here is the call graph for this function:

◆ lsrX4()

fl::u8 fl::lsrX4 ( fl::u8 dividend)
inline

Helper function to divide a number by 16, aka four logical shift right (LSR)'s.

On avr-gcc, "u8 >> 4" generates a loop, which is big, and slow. merely forcing it to be four /=2's causes avr-gcc to emit a SWAP instruction followed by an AND 0x0F, which is faster, and smaller.

Definition at line 243 of file colorutils.cpp.hpp.

243 {
244#if defined(FL_IS_AVR)
245 dividend /= 2;
246 dividend /= 2;
247 dividend /= 2;
248 dividend /= 2;
249#else
250 dividend >>= 4;
251#endif
252 return dividend;
253}

Referenced by ColorFromPalette(), ColorFromPalette(), and ColorFromPalette().

+ Here is the caller graph for this function:

◆ make4PhaseTiming()

ChipsetTiming4Phase fl::make4PhaseTiming ( const ChipsetTiming & timing_3phase,
u32 tolerance_ns = 150 )

Create 4-phase RX timing from 3-phase chipset timing with tolerance.

Converts FastLED's 3-phase timing (T1, T2, T3) to 4-phase RX timing with configurable tolerance for signal variations.

3-phase encoding (FastLED chipset timing):

4-phase decoding (actual encoder output):

4-phase decoding thresholds with tolerance:

Parameters
timing_3phase3-phase chipset timing configuration
tolerance_nsTolerance for all timings (default: 150ns, accounts for jitter/drift)
Returns
ChipsetTiming4Phase 4-phase RX timing structure

Example:

ChipsetTiming ws2812b_tx{250, 625, 375, 280, "WS2812B"};
auto rx_timing = make4PhaseTiming(ws2812b_tx, 150);
// Results in:
// T0H: [100ns, 400ns], T0L: [850ns, 1150ns]
// T1H: [725ns, 1025ns], T1L: [225ns, 525ns]
ChipsetTiming4Phase make4PhaseTiming(const ChipsetTiming &timing_3phase, u32 tolerance_ns) FL_NOEXCEPT
Create 4-phase RX timing from 3-phase chipset timing with tolerance.
Definition rx.cpp.hpp:51
Generic chipset timing entry Provides T1, T2, T3 timing parameters in nanoseconds for any LED protoco...
Definition led_timing.h:86

Definition at line 51 of file rx.cpp.hpp.

52 {
53 // Calculate derived values from 3-phase timing
54 // The encoder uses:
55 // Bit 0: T1 high + (T2+T3) low
56 // Bit 1: (T1+T2) high + T3 low
57 u32 t0h = timing_3phase.T1; // Bit 0 high time
58 u32 t0l = timing_3phase.T2 + timing_3phase.T3; // Bit 0 low time
59 u32 t1h = timing_3phase.T1 + timing_3phase.T2; // Bit 1 high time
60 u32 t1l = timing_3phase.T3; // Bit 1 low time
61
63
64 // Bit 0 timing thresholds
65 result.t0h_min_ns = (t0h > tolerance_ns) ? (t0h - tolerance_ns) : 0;
66 result.t0h_max_ns = t0h + tolerance_ns;
67 result.t0l_min_ns = (t0l > tolerance_ns) ? (t0l - tolerance_ns) : 0;
68 result.t0l_max_ns = t0l + tolerance_ns;
69
70 // Bit 1 timing thresholds
71 result.t1h_min_ns = (t1h > tolerance_ns) ? (t1h - tolerance_ns) : 0;
72 result.t1h_max_ns = t1h + tolerance_ns;
73 result.t1l_min_ns = (t1l > tolerance_ns) ? (t1l - tolerance_ns) : 0;
74 result.t1l_max_ns = t1l + tolerance_ns;
75
76 // Reset pulse threshold
77 result.reset_min_us = timing_3phase.RESET;
78
79 // gap_tolerance_ns retains its default value of 0
80
81 return result;
82}
u32 RESET
Reset/latch time (microseconds)
Definition led_timing.h:90
4-phase RX timing thresholds for chipset detection
Definition rx.h:87

References FL_NOEXCEPT.

Referenced by autoResearchLowMemorySetup(), capture(), and AutoResearchRemoteControl::registerFunctions().

+ Here is the caller graph for this function:

◆ make_optional() [1/2]

template<typename T>
optional< T > fl::make_optional ( const T & value)

Definition at line 235 of file optional.h.

235 {
236 return optional<T>(value);
237}

References FL_NOEXCEPT, and type_rank< T >::value.

Referenced by fl::net::http::Response::get_header().

+ Here is the caller graph for this function:

◆ make_optional() [2/2]

template<typename T>
optional< T > fl::make_optional ( T && value)

Definition at line 240 of file optional.h.

240 {
241 return optional<T>(fl::move(value));
242}

References FL_NOEXCEPT, fl::fl::move(), and type_rank< T >::value.

+ Here is the call graph for this function:

◆ make_pair()

template<typename T1, typename T2>
pair< typename fl::decay< T1 >::type, typename fl::decay< T2 >::type > fl::make_pair ( T1 && t,
T2 && u )

Definition at line 95 of file pair.h.

95 {
97}
typename conditional< is_array< U >::value, typename remove_extent< U >::type *, typename conditional< is_function< U >::value, typename add_pointer< U >::type, typename remove_cv< U >::type >::type >::type type
Definition s16x16x4.h:315

References FL_NOEXCEPT, fl::fl::forward(), and t.

Referenced by fl::Animartrix::getAnimationList(), makeScaledBrightnessRange(), makeScaledPixelRangeRGB(), makeScaledPixelRangeRGB16(), makeScaledPixelRangeRGBW(), makeScaledPixelRangeRGBWW(), packWS2816Pixel(), and fl::Animartrix::setVizFactory().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ make_scope_exit()

template<typename EF>
scope_exit< decay_t< EF > > fl::make_scope_exit ( EF && f)

Factory for C++11/14 (no CTAD).

Usage: auto guard = fl::make_scope_exit([&]{ cleanup(); });

Definition at line 48 of file scope_exit.h.

48 {
50}
RAII guard that executes a callable when destroyed.
Definition scope_exit.h:17

References fl::fl::forward().

Referenced by fl::task::run().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ make_sdcard_filesystem()

FL_LINK_WEAK FsImplPtr fl::make_sdcard_filesystem ( int cs_pin)

Definition at line 62 of file file_system_sd.cpp.hpp.

62 {
63 FASTLED_UNUSED(cs_pin);
64 return FsImplPtr();
65}
#define FASTLED_UNUSED(x)

References FASTLED_UNUSED, and FL_LINK_WEAK.

Referenced by fl::FileSystem::beginSd().

+ Here is the caller graph for this function:

◆ make_shared()

template<typename T, typename... Args>
shared_ptr< T > fl::make_shared ( Args &&... args)
Examples
FxDemoReel100.ino, FxFire2012.ino, and FxGfx2Video.ino.

Definition at line 414 of file shared_ptr.h.

414 {
415 auto* control = new detail::InlinedControlBlock<T>();
416 T* obj = control->get_object();
417 new(obj) T(fl::forward<Args>(args)...); // Placement new
418 control->object_constructed = true;
419 return shared_ptr<T>(obj, control, detail::make_shared_tag{});
420}

Referenced by fl::audio::detector::Backbeat::Backbeat(), fl::Blend2d::Blend2d(), fl::DigitalPin::DigitalPin(), fl::audio::detector::Downbeat::Downbeat(), fl::FxCompositor::FxCompositor(), fl::HttpRequestParser::HttpRequestParser(), fl::HttpResponseParser::HttpResponseParser(), fl::json::json(), fl::json::json(), fl::json::json(), fl::json::json(), fl::json::json(), fl::json::json(), fl::json::json(), fl::json::json(), fl::json::json(), fl::LinePath::LinePath(), fl::MultiChannelConfig::MultiChannelConfig(), fl::MultiChannelConfig::MultiChannelConfig(), fl::audio::detector::Note::Note(), fl::audio::Processor::Processor(), fl::audio::Reactive::Reactive(), fl::RosePath::RosePath(), fl::ScreenMap::ScreenMap(), fl::ScreenMap::ScreenMap(), fl::ScreenMap::ScreenMap(), fl::Video::Video(), fl::video::VideoImpl::VideoImpl(), fl::XYPath::XYPath(), fl::audio::AudioManager::add(), fl::FxEngine::addFx(), fl::UIDropdown::addNextButton(), fl::task::after_frame(), fl::task::after_frame(), fl::shared_ptr< filebuf >::allocate_shared, fl::third_party::SoftwareMpeg1Decoder::allocateFrameBuffers(), fl::string::appendHex(), fl::basic_string::assign(), fl::basic_string::assign(), fl::basic_string::assign(), fl::task::at_framerate(), fl::task::at_framerate(), fl::task::before_frame(), fl::task::before_frame(), AudioReactive::begin(), fl::video::VideoImpl::begin(), fl::Rpc::bindAsync(), fl::basic_string::c_str_mutable(), fl::json_value::clone_array(), fl::XYMap::constructWithLookUpTable(), fl::third_party::SoftwareGifDecoder::convertBitmapToFrame(), fl::XMap::convertToLookUpTable(), fl::XYMap::convertToLookUpTable(), fl::basic_string::copy(), fl::task::coroutine(), fl::audio::ISynthEngine::create(), fl::audio::ISynthOscillator::create(), fl::Channel::create(), fl::ChannelData::create(), fl::ChannelData::create(), fl::RxChannel::create(), fl::SpiChannelEngineAdapter::create(), fl::task::Promise< T >::create(), CreateArgsLower(), CreateArgsUpper(), fl::Gif::createDecoder(), fl::Jpeg::createDecoder(), fl::Mp3::createDecoder(), fl::Mpeg1::createDecoder(), fl::Vorbis::createDecoder(), fl::RxDevice::createDummy(), createFastLEDController(), fl::third_party::createTJpgInstanceDecoder(), fl::audio::Processor::createWithAutoInput(), fl::Jpeg::decode(), fl::Jpeg::decode(), fl::third_party::SoftwareMpeg1Decoder::decodeFrame(), fl::Mpeg1FileHandle::decodeNextFrameIfNeeded(), fl::Jpeg::decodeWithTimeout(), fl::FxLayer::draw(), fl::video::VideoImpl::draw(), fl::basic_string::erase(), fl::task::every_ms(), fl::task::every_ms(), FL_DISABLE_WARNING(), fl::json::from_char(), fl::json_value::from_char(), fl::json::fromValue(), fl::XYMap::fromXMap(), fl::audio::fft::FFT::ImplCache::get_or_create(), fl::anonymous_namespace{json.cpp.hpp}::JsonBuilder::get_result(), fl::audio::Processor::getBackbeatDetector(), fl::audio::Processor::getBeatDetector(), fl::audio::Processor::getBuildupDetector(), fl::audio::Processor::getChordDetector(), fl::audio::Processor::getDownbeatDetector(), fl::audio::Processor::getDropDetector(), fl::audio::Processor::getDynamicsAnalyzer(), fl::audio::Processor::getEnergyAnalyzer(), fl::audio::Processor::getEqualizerDetector(), fl::audio::Context::getFFT(), fl::audio::Processor::getFrequencyBands(), fl::audio::Processor::getKeyDetector(), fl::audio::Processor::getMoodAnalyzer(), fl::audio::Processor::getNoteDetector(), fl::audio::anonymous_namespace{audio.cpp.hpp}::AudioSamplePool::getOrCreate(), fl::Gamma8::getOrCreate(), fl::Corkscrew::getOrCreateInputSurface(), fl::audio::Processor::getPercussionDetector(), fl::audio::Processor::getPitchDetector(), fl::audio::Processor::getSilenceDetector(), fl::audio::Processor::getTempoAnalyzer(), fl::audio::Processor::getTransientDetector(), fl::audio::Processor::getVibeDetector(), fl::audio::Processor::getVocalDetector(), fl::basic_string::heapData(), fl::TransformFloatImpl::Identity(), fl::third_party::TJpgInstanceDecoder::initializeDecoder(), fl::basic_string::insert(), fl::basic_string::insert(), fl::StringInterner::intern(), fl::Font::load(), anonymous_namespace{xypaths.cpp}::make_path(), make_shared_ptr(), fl::basic_string::materialize(), fl::XYPath::NewArchimedeanSpiralPath(), fl::XYPath::NewArchimedeanSpiralPath(), fl::XYPath::NewCatmullRomPath(), fl::XYPath::NewCirclePath(), fl::XYPath::NewCirclePath(), fl::XYPath::NewCustomPath(), fl::XYPath::NewGielisCurvePath(), fl::XYPath::NewHeartPath(), fl::XYPath::NewHeartPath(), fl::XYPath::NewLinePath(), fl::XYPath::NewLinePath(), fl::XYPath::NewPhyllotaxisPath(), fl::XYPath::NewPointPath(), fl::XYPath::NewRosePath(), NewWaveSimulation2D(), fl::anonymous_namespace{json.cpp.hpp}::JsonBuilder::on_token(), fl::fstream::open(), fl::ifstream::open(), fl::ofstream::open(), fl::FileSystem::openMpeg1Video(), fl::NullFileSystem::openRead(), fl::json::operator=(), fl::json::operator=(), fl::json::operator[](), fl::json_value::operator[](), fl::json_value::operator[](), fl::anonymous_namespace{json.cpp.hpp}::optimize_array(), fl::json_value::parse2(), fl::Gif::parseGifInfo(), fl::Mpeg1::parseMpeg1Info(), fl::video::VideoImpl::pause(), fl::audio::platform_create_audio_input(), fl::audio::AutoGain::process(), CodecProcessor::processGif(), CodecProcessor::processMpeg1(), fl::audio::SignalConditioner::processSample(), fl::json::push_back(), AutoResearchRemoteControl::registerFunctions(), fl::Rpc::registerMethod(), fl::basic_string::replace(), fl::basic_string::replace(), fl::basic_string::reserve(), fl::HttpRequestParser::reset(), fl::HttpResponseParser::reset(), fl::video::VideoImpl::resume(), fl::net::http::HttpStreamTransport::rpcStream(), fl::json::set(), setup(), fl::basic_string::shrink_to_fit(), fl::basic_string::swapWith(), fl::json_value::to_string(), fl::XYMap::toScreenMap(), fl::video::VideoImpl::updateBufferFromFile(), and fl::video::VideoImpl::updateBufferFromStream().

◆ make_shared_array()

template<typename T>
shared_ptr< T > fl::make_shared_array ( size_t n)

Definition at line 441 of file shared_ptr.h.

441 {
442 T* arr = new T[n](); // Zero-initialize the array
444 return shared_ptr<T>(arr, control, detail::make_shared_tag{});
445}

◆ make_shared_no_tracking()

template<typename T>
shared_ptr< T > fl::make_shared_no_tracking ( T & obj)

Definition at line 435 of file shared_ptr.h.

435 {
436 return shared_ptr<T>(&obj, nullptr, detail::no_tracking_tag{});
437}

References FL_NOEXCEPT.

Referenced by fl::Blend2d::add(), fl::FxEngine::addFx(), and fl::Blend2d::setParams().

+ Here is the caller graph for this function:

◆ make_shared_ptr()

template<typename T, typename... Args>
fl::shared_ptr< T > fl::make_shared_ptr ( Args &&... args)

Definition at line 16 of file memory.h.

16 {
18}

References args, FL_NOEXCEPT, fl::fl::forward(), and make_shared().

+ Here is the call graph for this function:

◆ make_shared_with_deleter()

template<typename T, typename Deleter, typename... Args>
shared_ptr< T > fl::make_shared_with_deleter ( Deleter d,
Args &&... args )

Definition at line 423 of file shared_ptr.h.

423 {
424 T* obj = new T(fl::forward<Args>(args)...);
425 auto* control = new detail::ControlBlock<T, Deleter>(obj, d);
426 //new(control->get_object()) T(fl::forward<Args>(args)...);
427 //control->object_constructed = true;
428 return shared_ptr<T>(obj, control, detail::make_shared_tag{});
429}

◆ make_tuple()

template<typename... Ts>
tuple< typename fl::decay< Ts >::type... > fl::make_tuple ( Ts &&... args)

Definition at line 104 of file tuple.h.

104 {
106}

References args, FL_NOEXCEPT, and fl::fl::forward().

Referenced by fl::Rpc::bindAsync(), fl::detail::JsonToType< T, Enable >::convert(), fl::detail::JsonToType< bool, void >::convert(), fl::detail::JsonToType< fl::ConstCharPtrWrapper, void >::convert(), fl::detail::JsonToType< fl::ConstSpanWrapper< T >, void >::convert(), fl::detail::JsonToType< fl::json, void >::convert(), fl::detail::JsonToType< fl::string, void >::convert(), fl::detail::JsonToType< fl::vector< fl::u8 >, void >::convert(), fl::detail::JsonToType< fl::vector< T >, void >::convert(), fl::detail::JsonToType< T, typename fl::enable_if< fl::is_floating_point< T >::value >::type >::convert(), fl::detail::JsonToType< T, typename fl::enable_if< fl::is_integral< T >::value &&!fl::is_same< T, bool >::value >::type >::convert(), fl::JsonArgConverter< R()>::convert(), fl::ScopedTrace::dump(), fl::Rpc::handle(), fl::detail::ResponseAwareInvoker< void(Args...)>::invoke(), fl::detail::TypedInvoker< void(Args...)>::invoke(), and fl::TypedRpcBinding< R(Args...)>::invokeWithReturn().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ make_unique() [1/2]

template<typename T, typename... Args>
fl::enable_if<!fl::is_array< T >::value, unique_ptr< T > >::type fl::make_unique ( Args &&... args)

Definition at line 261 of file unique_ptr.h.

261 {
262 return unique_ptr<T>(new T(fl::forward<Args>(args)...));
263}

References args, FL_NOEXCEPT, and fl::fl::forward().

Referenced by fl::task::CoroutineTask::CoroutineTask(), fl::spi::Device::Device(), fl::third_party::GifBitmap::GifBitmap(), fl::audio::fft::Impl::Impl(), fl::JpegDecoder::JpegDecoder(), fl::Mp3Decoder::Mp3Decoder(), fl::spi::MultiLaneDevice::MultiLaneDevice(), fl::spi::ParallelDevice::ParallelDevice(), fl::audio::Reactive::Reactive(), fl::Spi::Spi(), fl::task::TimeTask::TimeTask(), fl::VorbisDecoder::VorbisDecoder(), autoResearchChipsetTimingLegacy(), fl::audio::Reactive::begin(), fl::third_party::Mp3StreamDecoderImpl::begin(), LegacyClocklessProxy::create(), fl::audio::Reactive::ensureAudioProcessor(), fl::WaveSimulation1D::init(), fl::WaveSimulation2D::init(), fl::net::http::FetchManager::register_promise(), AutoResearchRemoteControl::runParallelTestImpl(), AutoResearchRemoteControl::runSingleTestImpl(), setup(), AutoResearchRemoteControl::startBleRemote(), and fl::spi::Device::writeAsync().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ make_unique() [2/2]

template<typename T>
fl::enable_if< fl::is_array< T >::value, unique_ptr< T > >::type fl::make_unique ( fl::size_t size)

Definition at line 268 of file unique_ptr.h.

268 {
269 typedef typename fl::remove_extent<T>::type U;
270 return unique_ptr<T>(new U[size]());
271}

References FL_NOEXCEPT.

◆ makeClockless()

template<typename TIMING>
ClocklessChipset fl::makeClockless ( int pin)
constexpr

Build a ClocklessChipset from a compile-time TIMING trait.

Collapses the historical two-step pattern:

fl::ClocklessChipset chipset(PIN, timing);
#define PIN
Definition PinMode.ino:7
constexpr ChipsetTimingConfig makeTimingConfig() FL_NOEXCEPT
Convert compile-time CHIPSET type to runtime timing config.

into a single expression:

constexpr ClocklessChipset makeClockless(int pin) FL_NOEXCEPT
Build a ClocklessChipset from a compile-time TIMING trait.
Definition config.h:94

The encoder selector is extracted from the TIMING trait via encoder_for<>(): timings with a static ENCODER member (e.g., TIMING_UCS7604_800KHZ) yield that encoder; others default to CLOCKLESS_ENCODER_WS2812.

Template Parameters
TIMINGCompile-time chipset timing trait (e.g., TIMING_WS2812_800KHZ)
Parameters
pinGPIO data pin
Examples
/home/runner/work/FastLED/FastLED/src/fl/channels/config.h.

Definition at line 94 of file config.h.

94 {
96}
constexpr ClocklessEncoder encoder_for() FL_NOEXCEPT
Extract the encoder selector from a compile-time TIMING type.

References encoder_for(), FL_NOEXCEPT, and makeTimingConfig().

Referenced by fl::ChannelConfig::ChannelConfig().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ makeScaledBrightnessRange()

pair< detail::ScaledPixelIteratorBrightness, detail::ScaledPixelIteratorBrightness > fl::makeScaledBrightnessRange ( PixelIterator * pixels)
inline

Create brightness input iterator range from PixelIterator.

Parameters
pixelsPixelIterator to wrap
Returns
Pair of begin/end iterators

Definition at line 426 of file pixel_iterator_adapters.h.

426 {
427 return make_pair(
430 );
431}
Input iterator adapter for PixelIterator yielding brightness values.
pair< typename fl::decay< T1 >::type, typename fl::decay< T2 >::type > make_pair(T1 &&t, T2 &&u) FL_NOEXCEPT
Definition pair.h:95

References FL_NOEXCEPT, and make_pair().

Referenced by fl::PixelIterator::writeAPA102(), fl::PixelIterator::writeHD108(), and fl::PixelIterator::writeSK9822().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ makeScaledPixelRangeRGB()

pair< detail::ScaledPixelIteratorRGB, detail::ScaledPixelIteratorRGB > fl::makeScaledPixelRangeRGB ( PixelIterator * pixels)
inline

Create RGB input iterator range from PixelIterator.

Parameters
pixelsPixelIterator to wrap
Returns
Pair of begin/end iterators

Definition at line 395 of file pixel_iterator_adapters.h.

395 {
396 return make_pair(
398 detail::ScaledPixelIteratorRGB() // End sentinel
399 );
400}
Input iterator adapter for PixelIterator yielding 3-byte pixel data.

References FL_NOEXCEPT, make_pair(), and makeScaledPixelRangeRGB().

Referenced by encodeUCS7604(), makeScaledPixelRangeRGB(), fl::PixelIterator::writeAPA102(), fl::PixelIterator::writeHD108(), fl::PixelIterator::writeLPD6803(), fl::PixelIterator::writeLPD8806(), fl::PixelIterator::writeP9813(), fl::PixelIterator::writeSK9822(), fl::PixelIterator::writeSM16716(), fl::PixelIterator::writeWS2801(), fl::PixelIterator::writeWS2803(), and fl::PixelIterator::writeWS2812().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ makeScaledPixelRangeRGB16()

pair< detail::ScaledPixelIteratorRGB16, detail::ScaledPixelIteratorRGB16 > fl::makeScaledPixelRangeRGB16 ( PixelIterator * pixels)
inline

Create 16-bit RGB input iterator range from PixelIterator.

Parameters
pixelsPixelIterator to wrap
Returns
Pair of begin/end iterators

Definition at line 437 of file pixel_iterator_adapters.h.

437 {
438 return make_pair(
440 detail::ScaledPixelIteratorRGB16() // End sentinel
441 );
442}
Input iterator adapter for PixelIterator yielding 16-bit RGB pixel data.

References FL_NOEXCEPT, and make_pair().

+ Here is the call graph for this function:

◆ makeScaledPixelRangeRGBW()

pair< detail::ScaledPixelIteratorRGBW, detail::ScaledPixelIteratorRGBW > fl::makeScaledPixelRangeRGBW ( PixelIterator * pixels)
inline

Create RGBW input iterator range from PixelIterator.

Parameters
pixelsPixelIterator to wrap
Returns
Pair of begin/end iterators

Definition at line 406 of file pixel_iterator_adapters.h.

406 {
407 return make_pair(
409 detail::ScaledPixelIteratorRGBW() // End sentinel
410 );
411}
Input iterator adapter for PixelIterator yielding 4-byte pixel data.

References FL_NOEXCEPT, and make_pair().

Referenced by encodeUCS7604(), and fl::PixelIterator::writeWS2812().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ makeScaledPixelRangeRGBWW()

pair< detail::ScaledPixelIteratorRGBWW, detail::ScaledPixelIteratorRGBWW > fl::makeScaledPixelRangeRGBWW ( PixelIterator * pixels)
inline

Create RGBWW input iterator range from PixelIterator (issue #2558)

Definition at line 415 of file pixel_iterator_adapters.h.

415 {
416 return make_pair(
418 detail::ScaledPixelIteratorRGBWW() // End sentinel
419 );
420}
Input iterator adapter yielding 5-byte RGBWW pixels (issue #2558).

References FL_NOEXCEPT, and make_pair().

Referenced by fl::PixelIterator::writeWS2812().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ makeTimingConfig()

template<typename CHIPSET>
ChipsetTimingConfig fl::makeTimingConfig ( )
constexpr

Convert compile-time CHIPSET type to runtime timing config.

Extracts T1/T2/T3/RESET from a compile-time chipset traits type. The encoder selector is extracted separately via encoder_for<TIMING>() (see clockless_encoder.h) and stored on ClocklessChipset, not here.

Template Parameters
CHIPSETChipset timing trait (e.g., TIMING_WS2812_800KHZ)
Returns
Runtime timing configuration for the chipset
Examples
/home/runner/work/FastLED/FastLED/src/fl/channels/config.h, and Sailboat.ino.

Definition at line 63 of file chipset_timing_config.h.

63 {
64 return {
65 CHIPSET::T1, // t1_ns
66 CHIPSET::T2, // t2_ns
67 CHIPSET::T3, // t3_ns
68 CHIPSET::RESET, // reset_us
69 "CHIPSET" // name (generic placeholder)
70 };
71}

References FL_NOEXCEPT.

Referenced by makeClockless(), autoresearch::maybeRegisterStubAutorun(), AutoResearchRemoteControl::registerFunctions(), AutoResearchRemoteControl::runParallelTestImpl(), AutoResearchRemoteControl::runSingleTestImpl(), setup(), and autoresearch::parlio_stream::validateParlioStreaming().

+ Here is the caller graph for this function:

◆ makeViz()

template<typename T>
static IAnimartrix2Viz * fl::makeViz ( )
static

Definition at line 100 of file animartrix.hpp.

100{ return new T(); } // ok bare allocation

◆ Malloc()

void * fl::Malloc ( fl::size size)

Definition at line 152 of file allocator.cpp.hpp.

152 {
153 void* ptr = Alloc(size);
154
155#if defined(FASTLED_TESTING)
156 if (gMallocFreeHook && ptr) {
157 MemoryGuard allows_hook;
158 if (allows_hook.enabled()) {
159 gMallocFreeHook->onMalloc(ptr, size);
160 }
161 }
162#endif
163
164 return ptr;
165}

Referenced by fl::allocator< U >::allocate(), fl::allocator_realloc< U >::allocate(), fl::SlabAllocator< T, SLAB_SIZE >::allocate(), fl::SlabAllocator< T, SLAB_SIZE >::createSlab(), fl::anonymous_namespace{memory_resource.cpp.hpp}::DefaultMemoryResource::do_allocate(), fl::third_party::lzw_context_create(), fl::third_party::nsgif__get_frame(), fl::third_party::nsgif__record_frame(), and fl::third_party::nsgif_create().

+ Here is the caller graph for this function:

◆ malloc()

void * fl::malloc ( size_t size)

Definition at line 9 of file malloc.cpp.hpp.

9 {
10 return ::malloc(size);
11 }

Referenced by fl::StringHolder::StringHolder(), fl::StringHolder::StringHolder(), fl::StringHolder::StringHolder(), fl::audio::SynthOscillatorImpl::SynthOscillatorImpl(), fl::third_party::AllocateBuffers(), calloc(), fl::anonymous_namespace{allocator.cpp.hpp}::DefaultAlloc(), generate_kernels(), reallocate_kernels(), fl::third_party::vorbis::setup_malloc(), fl::third_party::vorbis::setup_temp_malloc(), fl::third_party::vorbis::stb_vorbis_decode_filename(), and fl::third_party::vorbis::stb_vorbis_decode_memory().

+ Here is the caller graph for this function:

◆ map16_to_32()

u32 fl::map16_to_32 ( u16 x)
inline
Deprecated
Use int_scale<uint16_t, uint32_t>() instead
Examples
/home/runner/work/FastLED/FastLED/src/fl/math/intmap.h.

Definition at line 60 of file intmap.h.

60 {
61 return fl::int_scale<u16, u32>(x);
62}

References FL_NOEXCEPT, and x.

◆ map16_to_8()

u8 fl::map16_to_8 ( u16 x)
inline
Deprecated
Use int_scale<uint16_t, uint8_t>() instead
Examples
/home/runner/work/FastLED/FastLED/src/fl/math/intmap.h.

Definition at line 66 of file intmap.h.

66 {
67 return fl::int_scale<u16, u8>(x);
68}

References FL_NOEXCEPT, and x.

Referenced by easeInOutSine8(), easeOutSine8(), and HSV16toRGB().

+ Here is the caller graph for this function:

◆ map32_to_16()

u16 fl::map32_to_16 ( u32 x)
inline
Deprecated
Use int_scale<uint32_t, uint16_t>() instead
Examples
/home/runner/work/FastLED/FastLED/src/fl/math/intmap.h.

Definition at line 72 of file intmap.h.

72 {
73 return fl::int_scale<u32, u16>(x);
74}

References FL_NOEXCEPT, and x.

Referenced by FL_DISABLE_WARNING(), and HSV16toRGB().

+ Here is the caller graph for this function:

◆ map32_to_8()

u8 fl::map32_to_8 ( u32 x)
inline
Deprecated
Use int_scale<uint32_t, uint8_t>() instead
Examples
/home/runner/work/FastLED/FastLED/src/fl/math/intmap.h.

Definition at line 77 of file intmap.h.

77 {
78 return fl::int_scale<u32, u8>(x);
79}

References FL_NOEXCEPT, and x.

◆ map8_to_16()

u16 fl::map8_to_16 ( u8 x)
inline
Deprecated
Use int_scale<uint8_t, uint16_t>() instead
Examples
/home/runner/work/FastLED/FastLED/src/fl/math/intmap.h.

Definition at line 48 of file intmap.h.

48 {
49 return fl::int_scale<u8, u16>(x);
50}

References FL_NOEXCEPT, and x.

Referenced by fl::detail::ScaledPixelIteratorRGB16::advance(), easeInOutSine8(), and easeOutSine8().

+ Here is the caller graph for this function:

◆ map8_to_32()

u32 fl::map8_to_32 ( u8 x)
inline
Deprecated
Use int_scale<uint8_t, uint32_t>() instead
Examples
/home/runner/work/FastLED/FastLED/src/fl/math/intmap.h.

Definition at line 54 of file intmap.h.

54 {
55 return fl::int_scale<u8, u32>(x);
56}

References FL_NOEXCEPT, and x.

◆ map_float()

FASTLED_FORCE_INLINE float fl::map_float ( float x,
float in_min,
float in_max,
float out_min,
float out_max )

Definition at line 90 of file engine_core.h.

91 {
92 float result =
93 (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
94 if (result < out_min)
95 result = out_min;
96 if (result > out_max)
97 result = out_max;
98 return result;
99}

References FASTLED_FORCE_INLINE, and x.

Referenced by render_value().

+ Here is the caller graph for this function:

◆ map_range()

template<typename T, typename U>
FASTLED_FORCE_INLINE U fl::map_range ( T value,
T in_min,
T in_max,
U out_min,
U out_max )

Definition at line 174 of file math.h.

175 {
176 if (map_range_detail::equals(value, in_min)) {
177 return out_min;
178 }
179 if (map_range_detail::equals(value, in_max)) {
180 return out_max;
181 }
182 return map_range_detail::map_range_math<T, U>::map(value, in_min, in_max, out_min, out_max);
183}

References FASTLED_FORCE_INLINE, FL_NOEXCEPT, and type_rank< T >::value.

Referenced by fl::Corkscrew::at_splat_extrapolate(), drawRadialSpectrum(), drawSpectrumBars(), drawVUMeter(), drawWaveform(), fl::video::FrameTracker::get_interval_frames(), loop(), anonymous_namespace{xypaths.cpp}::make_path(), map_range_clamped(), fl::XYPathRenderer::rasterize(), and fl::iterator<, u8 >::setLoadFactor().

+ Here is the caller graph for this function:

◆ map_range_clamped()

template<typename T, typename U>
FASTLED_FORCE_INLINE U fl::map_range_clamped ( T value,
T in_min,
T in_max,
U out_min,
U out_max )
Examples
ElPanelReactive.ino.

Definition at line 186 of file math.h.

187 {
188 value = clamp(value, in_min, in_max);
189 return map_range<T, U>(value, in_min, in_max, out_min, out_max);
190}
FASTLED_FORCE_INLINE U map_range(T value, T in_min, T in_max, U out_min, U out_max) FL_NOEXCEPT
Definition math.h:174
constexpr enable_if< is_fixed_point< T >::value, T >::type clamp(T x, T lo, T hi) FL_NOEXCEPT

References clamp(), FASTLED_FORCE_INLINE, FL_NOEXCEPT, map_range(), and type_rank< T >::value.

Referenced by rescaleNoiseValue16(), and setup().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ mapBrightness8to5()

u8 fl::mapBrightness8to5 ( u8 brightness_8bit)
inline

Map 8-bit brightness to 5-bit (0-31)

Parameters
brightness_8bitInput brightness (0-255)
Returns
5-bit brightness (0-31)
Note
Ensures non-zero input maps to non-zero output (fixes issue #1908)
Uses bit-shift approximation on AVR to avoid expensive division

Definition at line 20 of file encoder_utils.h.

20 {
21 #if defined(FL_IS_AVR)
22 // AVR-specific: Use bit shifts to avoid expensive division
23 // Approximation: (value * 31) / 255 ≈ (value * 31) >> 8
24 // Add rounding: ((value * 31) + 128) >> 8
25 u16 bri5 = ((u16)brightness_8bit * 31 + 128) >> 8;
26
27 // Ensure non-zero input doesn't map to zero output
28 if (bri5 == 0 && brightness_8bit != 0) {
29 bri5 = 1;
30 }
31
32 return static_cast<u8>(bri5);
33 #else
34 // Non-AVR: Use accurate division
35 u16 bri5 = ((u16)brightness_8bit * 31 + 128) / 255;
36
37 // Ensure non-zero input doesn't map to zero output
38 if (bri5 == 0 && brightness_8bit != 0) {
39 bri5 = 1;
40 }
41
42 return static_cast<u8>(bri5);
43 #endif
44}

References FL_NOEXCEPT.

Referenced by encodeAPA102_HD(), and encodeSK9822_HD().

+ Here is the caller graph for this function:

◆ max()

template<typename T, typename U>
common_type_t< T, U > fl::max ( T a,
U b )
inlineconstexpr
Examples
FxNoiseRing.ino.

Definition at line 75 of file math.h.

75 {
76 return (a > b) ? a : b;
77}

References FL_NOEXCEPT.

Referenced by fl::video::FrameInterpolator::FrameInterpolator(), fl::spi::Transaction::Impl::Impl(), fl::rect< T >::rect(), fl::task::TimeTask::TimeTask(), fl::UINumberField::UINumberField(), fl::UINumberFieldImpl::UINumberFieldImpl(), fl::UISliderImpl::UISliderImpl(), fl::video::VideoImpl::VideoImpl(), fl::Tile2x2_u8::bounds(), CalcDecayFactor(), fl::audio::detector::MoodAnalyzer::calculateArousal(), fl::audio::detector::Vocal::calculateAutocorrelationIrregularity(), fl::audio::detector::FrequencyBands::calculateBandEnergy(), fl::audio::detector::DropDetector::calculateBassFlux(), fl::audio::detector::MusicalBeat::calculateBeatConfidence(), fl::audio::detector::BuildupDetector::calculateBuildupIntensity(), fl::audio::detector::MoodAnalyzer::calculateConfidence(), fl::audio::detector::Pitch::calculateConfidence(), fl::audio::detector::DropDetector::calculateDropImpact(), fl::audio::detector::DropDetector::calculateEnergyFlux(), fl::audio::detector::Transient::calculateEnergyFlux(), fl::audio::detector::BuildupDetector::calculateEnergyTrend(), fl::audio::detector::TempoAnalyzer::calculateIntervalScore(), fl::audio::detector::Vocal::calculateRawConfidence(), fl::XYPath::calculateSteps(), fl::audio::detector::BuildupDetector::calculateTrebleTrend(), fl::audio::detector::DynamicsAnalyzer::calculateTrend(), fl::audio::detector::MoodAnalyzer::calculateValence(), fl::audio::detector::Percussion::computeConfidences(), fl::audio::detector::Percussion::computeFeatures(), fl::audio::detector::Vocal::computeFormantRatio(), fl::audio::detector::Vocal::computePCMTimeDomainFeatures(), fl::audio::detector::Beat::detectBeat(), fl::audio::detector::Downbeat::detectDownbeat(), fl::audio::detector::KeyDetector::detectKey(), draw(), fl::Blend2d::draw(), fl::Corkscrew::draw(), fl::FlowFieldFloat::drawAALine(), fl::FlowFieldFP::drawAALine(), fl::FlowFieldFloat::drawDot(), fl::FlowFieldFP::drawDot(), drawRadialSpectrum(), drawSpectrumBars(), fl::rect< T >::expand(), FL_DISABLE_WARNING(), fl::FlowFieldFloat::flowAdvect(), fl::Transform16::From(), ColorHSV::FromRGB(), fl::math::random::generate_nolock(), fl::audio::detector::DropDetector::getBassEnergy(), fl::ScreenMap::getBounds(), fl::WaveSimulation1D::getf(), fl::WaveSimulation1D::geti16(), fl::WaveSimulation2D::geti16(), fl::WaveSimulation1D::geti16Previous(), fl::WaveSimulation2D::geti16Previous(), fl::vec2< u16 >::getMax(), fl::vec2< u16 >::getMax(), fl::vec3< float >::getMax(), fl::vec3< float >::getMax(), fl::RectangularDrawBuffer::getMaxBytesInStrip(), hsv2rgb_fullspectrum(), NoiseGenerator::LedValue(), loop(), fl::audio::detector::ChordDetector::matchChordPattern(), fl::CRGB::maximizeBrightness(), fl::Tile2x2_u8::MaxTile(), fl::Tile2x2_u8::maxValue(), fl::audio::NoiseFloorTracker::normalize(), fl::third_party::nsgif__animation_complete(), fl::math::random::operator()(), MaxFadeTracker::operator()(), fl::spi::MultiLaneDevice::operator=(), fl::spi::ParallelDevice::operator=(), fl::audio::AutoGain::process(), processWaveAutoTrigger(), fl::math::random::random16(), fl::math::random::random8(), fl::math::random::random8_nolock(), fl::Corkscrew::readFrom(), Ripple::renderLed(), RGBtoHSV16(), sampleBilinear(), sampleNearest(), fl::TimeClampedTransition::set_max_clamp(), fl::audio::detector::FrequencyBands::setBassRange(), fl::WaveSimulation1D::setf(), fl::WaveSimulation2D::seti16(), fl::audio::detector::FrequencyBands::setMidRange(), fl::Potentiometer::setRange(), fl::audio::detector::DynamicsAnalyzer::setSmoothingFactor(), fl::audio::detector::Vocal::setThreshold(), fl::audio::detector::FrequencyBands::setTrebleRange(), fl::UINumberFieldImpl::setValue(), fl::UISliderImpl::setValue(), fl::LineSimplifierExact< NumberT >::simplify(), fl::FixedVector< fl::u32, kMaxBatchSize >::swap(), fl::basic_string::swapWith(), fl::Transform16::ToBounds(), traverseGridSegment(), fl::NoiseBias1D::trigger(), fl::audio::detector::EnergyAnalyzer::update(), fl::audio::detector::Percussion::update(), fl::audio::NoiseFloorTracker::update(), fl::audio::detector::MusicalBeat::updateBPMEstimate(), fl::audio::detector::DynamicsAnalyzer::updateCompression(), fl::audio::NoiseFloorTracker::updateFloor(), fl::audio::AutoGain::updatePIController(), fl::audio::detector::TempoAnalyzer::updateStability(), and Painter::VegasVisualizer().

◆ max_element() [1/2]

template<typename Iterator>
Iterator fl::max_element ( Iterator first,
Iterator last )

Definition at line 18 of file algorithm.h.

18 {
19 if (first == last) {
20 return last;
21 }
22
23 Iterator max_iter = first;
24 ++first;
25
26 while (first != last) {
27 if (*max_iter < *first) {
28 max_iter = first;
29 }
30 ++first;
31 }
32
33 return max_iter;
34}

References FL_NOEXCEPT.

Referenced by loop().

+ Here is the caller graph for this function:

◆ max_element() [2/2]

template<typename Iterator, typename Compare>
Iterator fl::max_element ( Iterator first,
Iterator last,
Compare comp )

Definition at line 37 of file algorithm.h.

37 {
38 if (first == last) {
39 return last;
40 }
41
42 Iterator max_iter = first;
43 ++first;
44
45 while (first != last) {
46 if (comp(*max_iter, *first)) {
47 max_iter = first;
48 }
49 ++first;
50 }
51
52 return max_iter;
53}

References FL_NOEXCEPT.

◆ memchr() [1/2]

const void * fl::memchr ( const void * s,
int c,
size_t n )

Definition at line 135 of file cstring.cpp.hpp.

135 {
136 if (n == 0) return nullptr;
137 return ::memchr(s, c, n);
138}

References FL_NOEXCEPT.

◆ memchr() [2/2]

void * fl::memchr ( void * s,
int c,
size_t n )

Definition at line 130 of file cstring.cpp.hpp.

130 {
131 if (n == 0) return nullptr;
132 return ::memchr(s, c, n);
133}

References FL_NOEXCEPT.

◆ memcmp()

int fl::memcmp ( const void * s1,
const void * s2,
size_t n )

Definition at line 115 of file cstring.cpp.hpp.

115 {
116 if (n == 0) return 0;
117 return ::memcmp(s1, s2, n);
118}

References FL_NOEXCEPT.

Referenced by FL_DISABLE_WARNING(), fl::StringFastLess::operator()(), fl::string::operator==(), and string_compare().

+ Here is the caller graph for this function:

◆ memcopy()

void * fl::memcopy ( void * dest,
const void * src,
size_t n )
inline

Definition at line 103 of file cstring.h.

103 {
104 return memcpy(dest, src, n);
105}

References FL_NOEXCEPT, and memcpy().

Referenced by fl::third_party::MP3Decode(), fl::third_party::plm_audio_create_with_buffer(), fl::third_party::plm_buffer_write(), fl::third_party::plm_video_decode_sequence_header(), CodecProcessor::processGif(), CodecProcessor::processJpeg(), CodecProcessor::processMpeg1(), shiftUp(), and fl::ChannelData::writeWithPadding().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ memcpy()

void * fl::memcpy ( void * dest,
const void * src,
size_t n )
Examples
/home/runner/work/FastLED/FastLED/src/fl/math/transposition.h.

Definition at line 110 of file cstring.cpp.hpp.

110 {
111 if (n == 0) return dest;
112 return ::memcpy(dest, src, n);
113}

References FL_NOEXCEPT.

Referenced by fl::bitset_dynamic::bitset_dynamic(), fl::StringHolder::StringHolder(), fl::StringHolder::StringHolder(), fl::basic_string::assign(), fl::string::assign(), autoresearch::simd_check::benchFloat4(), bit_cast(), fl::XYMap::constructWithLookUpTable(), fl::basic_string::copy(), fl::basic_string::copy(), fl::basic_string::copy(), fl::Frame::copy(), fl::string_view::copy(), fl::StringHolder::copy(), fl::Frame::draw(), fl::FxCompositor::draw(), fl::basic_string::erase(), FL_DISABLE_WARNING(), fl::AsyncLogger::flush(), fl::AsyncLogger::flushN(), fl::audio::Context::hashFFTArgs(), fl::third_party::SoftwareMpeg1Decoder::initializeDecoder(), fl::third_party::TJpgInstanceDecoder::initializeDecoder(), fl::third_party::TJpgInstanceDecoder::inputCallback(), fl::basic_string::insert(), fl::basic_string::insert(), fl::vector_basic::insert_copy_impl(), fl::vector_basic::insert_move_impl(), fl::third_party::TJpg_Decoder::jd_input(), kiss_fft_stride(), fl::third_party::SoftwareGifDecoder::loadMoreData(), fl::basic_string::materialize(), memcopy(), fl::basic_string::moveAssign(), fl::basic_string::moveFrom(), fl::third_party::nsgif__get_frame(), fl::third_party::nsgif__record_frame(), fl::third_party::nsgif__recover_frame(), fl::third_party::nsgif_global_palette(), fl::bitset_dynamic::operator=(), fl::bitset_dynamic::operator^(), fl::bitset_dynamic::operator|(), fl::vector_basic::push_back_copy_impl(), fl::vector_basic::push_back_move_impl(), qsort_insertion_sort(), fl::detail::qsort_swap(), fl::Mpeg1FileHandle::read(), fl::net::http::ChunkedReader::readChunk(), fl::third_party::TJpgInstanceDecoder::readStreamData(), reallocate_kernels(), fl::basic_string::replace(), fl::basic_string::replace(), fl::basic_string::reserve(), fl::bitset_dynamic::resize(), fl::vector_basic::resize_value_impl(), fl::basic_string::shrink_to_fit(), fl::vector_basic::swap_impl(), fl::basic_string::swapWith(), fl::SpiChannelEngineAdapter::transmitBatch(), transpose_wave8byte_parlio_template(), fl::vector_basic::trivial_copy(), fl::vector_basic::trivial_swap(), fl::net::http::ChunkedWriter::writeChunk(), and fl::net::http::ChunkedWriter::writeFinal().

◆ memmove()

void * fl::memmove ( void * dest,
const void * src,
size_t n )

Definition at line 120 of file cstring.cpp.hpp.

120 {
121 if (n == 0) return dest;
122 return ::memmove(dest, src, n);
123}

References FL_NOEXCEPT.

Referenced by fl::basic_string::erase(), fl::basic_string::insert(), fl::basic_string::insert(), fl::third_party::MP3Decode(), fl::third_party::plm_buffer_discard_read_bytes(), fl::basic_string::replace(), fl::basic_string::replace(), and fl::vector_basic::trivial_move_left().

+ Here is the caller graph for this function:

◆ memset()

void * fl::memset ( void * s,
int c,
size_t n )

Definition at line 125 of file cstring.cpp.hpp.

125 {
126 if (n == 0) return s;
127 return ::memset(s, c, n);
128}

References FL_NOEXCEPT.

Referenced by fl::audio::fft::Context::Context(), fl::Frame::Frame(), fl::Frame::Frame(), fl::allocator_inlined< T, N, BaseAllocator >::InlinedStorage::InlinedStorage(), Message< Settings::SysExMaxSize >::Message(), fl::third_party::Mp3HelixDecoder::Mp3HelixDecoder(), fl::audio::SynthOscillatorImpl::SynthOscillatorImpl(), fl::third_party::TJpgInstanceDecoder::TJpgInstanceDecoder(), ui_state::ui_state(), fl::allocator< U >::allocate(), fl::allocator_realloc< U >::allocate(), fl::SlabAllocator< T, SLAB_SIZE >::allocate(), fl::third_party::TJpgInstanceDecoder::allocateFrameBuffer(), calloc(), capture(), fl::Frame::clear(), fl::CLEDController::clearLedDataInternal(), clearLeds(), fl::Frame::convertPixelsToRgb(), fl::third_party::create_huffman_tbl(), fl::anonymous_namespace{memory_resource.cpp.hpp}::DefaultMemoryResource::do_allocate(), fl::anonymous_namespace{memory_resource.cpp.hpp}::DefaultMemoryResource::do_reallocate(), fl::FxLayer::draw(), fill_2dnoise16(), fill_2dnoise8(), fill_noise16(), fill_noise8(), FL_ALIGNAS(), FL_DISABLE_WARNING(), fl::RectangularDrawBuffer::getLedsBufferBytesForPin(), fl::audio::fft::Context::initOctaveWise(), fl::third_party::jd_prepare(), fl::third_party::mcu_load(), fl::third_party::nsgif__restore_bg(), fl::third_party::nsgif_create(), fl::RectangularDrawBuffer::onQueuingStart(), Painter::PaintVuMidNotesFade(), fl::third_party::plm_audio_create_with_buffer(), fl::third_party::plm_audio_decode_frame(), fl::third_party::plm_buffer_create_with_capacity(), fl::third_party::plm_buffer_create_with_memory(), fl::third_party::plm_create_with_buffer(), fl::third_party::plm_demux_create(), fl::third_party::plm_video_create_with_buffer(), fl::third_party::plm_video_decode_block(), PSRamAllocate(), fl::allocator_realloc< U >::reallocate(), fl::allocator< U >::reallocate_impl(), fl::bitset_dynamic::reset(), fl::third_party::Mp3HelixDecoder::reset(), fl::bitset_dynamic::resize(), fl::audio::fft::Context::runHybrid(), fl::audio::fft::Context::runLogRebin(), fl::audio::fft::Context::runOctaveWise(), shiftUp(), and fl::vector_basic::trivial_default_construct().

◆ micros()

fl::u32 fl::micros ( )

Universal microsecond timer - returns microseconds since system startup.

This function provides consistent high-resolution timing across all FastLED platforms:

Returns
Number of microseconds since the system started
Note
Wraps around approximately every 71.6 minutes (2^32 microseconds)
This function is designed to be zero-overhead - it compiles to a direct platform call in optimized builds

Behavior

Examples

// Precise timing measurement
fl::u32 start = fl::micros();
fast_operation();
fl::u32 elapsed = fl::micros() - start;
// High-precision delay
fl::u32 target = fl::micros() + 100; // 100 microseconds
while (fl::micros() < target) {
// Busy wait
}

Definition at line 80 of file chrono.cpp.hpp.

80 {
81 // Note: micros() does not support time injection
82 return fl::platforms::micros();
83}

References micros().

Referenced by autoresearch::simd_check::benchFloat4(), autoresearch::simd_check::benchS16x16_4(), autoresearch::simd_check::benchS8x8_4(), autoresearch::simd_check::benchSimd4(), autoresearch::simd_check::benchU16x16_4(), fl::Yves::draw(), fl::Yves_FP::draw(), get_ready(), logFrame(), logOutput(), CMinWait< WAIT >::mark(), micros(), fl::chrono::steady_clock::now(), fl::chrono::system_clock::now(), fl::task::run(), CFastLED::show(), CFastLED::showColor(), CMinWait< WAIT >::wait(), fl::ChannelManager::waitForCondition(), and fl::IChannelDriver::waitForCondition().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ millis()

fl::u32 fl::millis ( )

Universal millisecond timer - returns milliseconds since system startup.

This function provides consistent timing across all FastLED platforms:

Returns
Number of milliseconds since the system started
Note
Wraps around approximately every 49.7 days (2^32 milliseconds)
This function is designed to be zero-overhead - it compiles to a direct platform call in optimized builds

Behavior

Examples

// Basic timing
fl::u32 start = fl::millis();
do_work();
fl::u32 elapsed = fl::millis() - start;
// Animation timing
static fl::u32 last_frame = 0;
fl::u32 now = fl::millis();
if (now - last_frame >= 16) { // 60 FPS
render_frame();
last_frame = now;
}
// Timeout handling
fl::u32 timeout = fl::millis() + 5000; // 5 second timeout
while (fl::millis() < timeout && !is_complete()) {
process_step();
}
Examples
Animartrix.ino, BeatDetection.ino, FxGfx2Video.ino, and FxNoiseRing.ino.

Definition at line 64 of file chrono.cpp.hpp.

64 {
65#ifdef FASTLED_TESTING
66 // Check for injected time provider first
67 {
68 fl::unique_lock<fl::mutex> lock(get_time_mutex());
69 const auto& provider = get_time_provider();
70 if (provider) {
71 return provider();
72 }
73 }
74#endif
75
76 // Use platform-specific implementation
77 return fl::platforms::millis();
78}

References millis().

Referenced by CountingButton::CountingButton(), fl::Pir::Pir(), autoReset(), beat88(), animartrix_ring::SoundOrchestrator::begin(), bseconds16(), SketchHalt::check(), CFastLED::countFPS(), DbgDoSimulatedKeyboardPress(), fl::Jpeg::decodeWithTimeout(), CFastLED::delay(), fl::DemoReel100::draw(), fl::NoiseWave::draw(), fl::Pride2015::draw(), fl::TwinkleFox::drawTwinkleFox(), SketchHalt::error(), fillFrameBufferNoise(), fl::net::http::HttpStreamTransport::getCurrentTimeMs(), fl::Engine::getTime(), HandleNoteOff(), HandleNoteOn(), hours8(), loop(), millis(), millis64(), minutes16(), fl::SerialPort::parseFloat(), fl::SerialPort::parseInt(), fl::ChannelManager::pollNeededWaitSliceMs(), fl::Remote::processRpc(), rainbowWave(), ToggleButton::Read(), fl::SerialPort::readBytes(), fl::SerialPort::readBytesUntil(), readSerialStringUntil(), fl::SerialPort::readString(), readStringUntil(), fl::SerialPort::readStringUntil(), fl::Remote::scheduleFunction(), seconds16(), setup(), fl::third_party::TJpgInstanceDecoder::shouldYield(), fl::Particles1d::Particle::spawn(), fl::Particles1d::Particle::spawn(), fl::third_party::TJpgInstanceDecoder::startTick(), fl::test::XMLReporter::testCaseEnd(), ColorSelector::Update(), fl::task::Scheduler::update(), fl::task::Scheduler::update_tasks_of_type(), fl::spi::Transaction::wait(), fl::ChannelManager::waitForCondition(), fl::IChannelDriver::waitForCondition(), write_one_frame(), and fl::spi::Device::writeAsync().

+ Here is the call graph for this function:

◆ millis64()

fl::u64 fl::millis64 ( )

64-bit millisecond timer - returns milliseconds since system startup without wraparound

This function provides a 64-bit millisecond counter that never wraps around in any practical timeframe (584 million years). It's built on top of fl::millis() and automatically detects and corrects for 32-bit wraparound.

The implementation uses a function-local static for thread-safe accumulation on platforms that support it. On platforms with native 64-bit timers, this function may be optimized to use the native implementation directly.

Returns
Number of milliseconds since system startup as a 64-bit value
Note
Thread-safe on platforms with proper static initialization guards
No wraparound in practical usage (584+ million years)
Slightly higher overhead than millis() due to wraparound detection

Examples

// Long-running timing without wraparound concerns
long_running_operation();
fl::u64 elapsed = fl::millis64() - start;
// Safe duration tracking across 49+ day boundaries
static fl::u64 session_start = fl::millis64();
fl::u64 uptime = fl::millis64() - session_start; // Never wraps
// Timestamps for logging and analytics
fl::u64 event_time = fl::millis64();
log_event("operation_complete", event_time);
fl::u64 millis64()
64-bit millisecond timer - returns milliseconds since system startup without wraparound

Definition at line 108 of file chrono.cpp.hpp.

108 {
109 Millis64State& state = get_millis64_state();
110 fl::u32 current_millis = fl::millis();
111 fl::unique_lock<fl::mutex> lock(state.mutex);
112
113 if (!state.initialized) {
114 // First call, set initial value
115 state.accumulated = current_millis;
116 state.last_millis = current_millis;
117 state.initialized = true;
118 return state.accumulated;
119 }
120
121 // Detect wraparound: current < last means 32-bit counter wrapped
122 // Delta calculation handles wraparound correctly via unsigned arithmetic
123 fl::u32 delta = current_millis - state.last_millis;
124
125 // Accumulate the delta into 64-bit counter
126 state.accumulated += delta;
127
128 // Update last value for next call
129 state.last_millis = current_millis;
130
131 return state.accumulated;
132}

References millis(), millis64(), and state.

Referenced by millis64(), and time().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ millis64_reset()

void fl::millis64_reset ( )

Definition at line 100 of file chrono.cpp.hpp.

100 {
101 Millis64State& state = get_millis64_state();
102 fl::unique_lock<fl::mutex> lock(state.mutex);
103 state.accumulated = 0;
104 state.last_millis = 0;
105 state.initialized = false;
106}

References millis64_reset(), and state.

Referenced by millis64_reset().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ min()

FL_DISABLE_WARNING_PUSH U constexpr common_type_t< T, U > fl::min ( T a,
U b )
inlineconstexpr

Definition at line 71 of file math.h.

71 {
72 return (a < b) ? a : b;
73}

References FL_NOEXCEPT.

Referenced by fl::rect< T >::rect(), fl::UINumberField::UINumberField(), fl::UINumberFieldImpl::UINumberFieldImpl(), fl::UISliderImpl::UISliderImpl(), fl::anonymous_namespace{gradient.cpp.hpp}::VisitorFill::VisitorFill(), fl::WaveFx::addf(), fl::Tile2x2_u8::bounds(), anonymous_namespace{Painter.cpp}::CalcSaturation(), fl::audio::detector::MoodAnalyzer::calculateArousal(), fl::audio::detector::Vocal::calculateAutocorrelationIrregularity(), fl::audio::detector::FrequencyBands::calculateBandEnergy(), fl::audio::detector::DropDetector::calculateBassFlux(), fl::audio::detector::BuildupDetector::calculateBuildupIntensity(), fl::audio::detector::MoodAnalyzer::calculateConfidence(), fl::audio::detector::Pitch::calculateConfidence(), fl::audio::detector::DropDetector::calculateDropImpact(), fl::audio::detector::DropDetector::calculateEnergyFlux(), fl::audio::detector::BuildupDetector::calculateEnergyTrend(), fl::audio::detector::Backbeat::calculateMultibandAccent(), fl::audio::detector::Backbeat::calculatePatternConfidence(), fl::audio::detector::Vocal::calculateRawConfidence(), fl::audio::detector::Beat::calculateSpectralFlux(), fl::audio::detector::TempoAnalyzer::calculateSpectralFlux(), fl::audio::detector::DropDetector::calculateSpectralNovelty(), fl::audio::detector::TempoAnalyzer::calculateTempoConfidence(), fl::audio::detector::BuildupDetector::calculateTrebleTrend(), fl::audio::detector::DynamicsAnalyzer::calculateTrend(), fl::audio::detector::MoodAnalyzer::calculateValence(), fl::audio::detector::Vocal::calculateVocalPresenceRatio(), fl::audio::detector::Percussion::computeConfidences(), fl::audio::detector::Percussion::computeFeatures(), fl::audio::detector::Vocal::computeFormantRatio(), fl::audio::detector::Beat::detectBeat(), fl::audio::detector::KeyDetector::detectKey(), fl::audio::detector::Transient::detectTransient(), fl::Corkscrew::draw(), fl::FlowFieldFloat::drawDot(), fl::FlowFieldFP::drawDot(), drawFireEffect(), drawRadialSpectrum(), LedRopeTCL::DrawRepeat(), drawVUMeter(), fl::FlowFieldFloat::emitOrbitalDots(), fl::FlowFieldFP::emitOrbitalDots(), fl::rect< T >::expand(), FL_DISABLE_WARNING(), FL_DISABLE_WARNING(), fl::AsyncLogger::flush(), fl::AsyncLogger::flushN(), fl::Transform16::From(), ColorHSV::FromRGB(), fl::math::random::generate_nolock(), fl::ScreenMap::getBounds(), fl::vec2< u16 >::getMin(), fl::vec2< u16 >::getMin(), fl::vec3< float >::getMin(), fl::vec3< float >::getMin(), anonymous_namespace{wave_simulation.cpp.hpp}::half_duplex_blend_linear(), anonymous_namespace{wave_simulation.cpp.hpp}::half_duplex_blend_sqrt_q15(), hsv2rgb_fullspectrum(), fl::Engine::init(), fl::FileSystem::loadJpeg(), loop(), makeRingScreenMap(), fl::bitset_dynamic::operator&(), fl::math::random::operator()(), fl::bitset_dynamic::operator^(), fl::bitset_dynamic::operator|(), fl::ScreenMap::ParseJson(), parseV2SegmentArray(), fl::audio::AutoGain::process(), processWaveAutoTrigger(), fl::math::random::random16(), fl::math::random::random8(), fl::math::random::random8_nolock(), fl::Mpeg1FileHandle::read(), fl::Corkscrew::readFrom(), fl::detail::TriangularFilterImpl< T, N >::recompute(), Ripple::renderLed(), fl::bitset_dynamic::resize(), RGBtoHSV16(), fl::task::run(), sampleBilinear(), sampleNearest(), fl::TransformFloat::scale(), fl::audio::detector::FrequencyBands::setBassRange(), fl::audio::detector::FrequencyBands::setMidRange(), fl::Potentiometer::setRange(), fl::audio::detector::DynamicsAnalyzer::setSmoothingFactor(), fl::audio::detector::FrequencyBands::setTrebleRange(), fl::UINumberFieldImpl::setValue(), fl::UISliderImpl::setValue(), fl::LineSimplifierExact< NumberT >::simplify(), fl::FixedVector< fl::u32, kMaxBatchSize >::swap(), to_uint8(), fl::Transform16::ToBounds(), traverseGridSegmentFloat(), fl::NoiseBias1D::trigger(), fl::audio::detector::BuildupDetector::update(), fl::audio::detector::EnergyAnalyzer::update(), fl::audio::detector::EqualizerDetector::update(), fl::audio::detector::FrequencyBands::update(), fl::audio::detector::TempoAnalyzer::update(), fl::audio::NoiseFloorTracker::update(), fl::audio::detector::Transient::updateAttackTime(), fl::audio::detector::Backbeat::updateBackbeatProfile(), fl::audio::detector::MusicalBeat::updateBPMEstimate(), fl::audio::detector::DynamicsAnalyzer::updateCompression(), fl::TimeClampedTransition::updatef(), fl::audio::NoiseFloorTracker::updateFloor(), fl::audio::AutoGain::updatePIController(), and Painter::VegasVisualizer().

◆ min_element() [1/2]

template<typename Iterator>
Iterator fl::min_element ( Iterator first,
Iterator last )

Definition at line 56 of file algorithm.h.

56 {
57 if (first == last) {
58 return last;
59 }
60
61 Iterator min_iter = first;
62 ++first;
63
64 while (first != last) {
65 if (*first < *min_iter) {
66 min_iter = first;
67 }
68 ++first;
69 }
70
71 return min_iter;
72}

References FL_NOEXCEPT.

Referenced by loop().

+ Here is the caller graph for this function:

◆ min_element() [2/2]

template<typename Iterator, typename Compare>
Iterator fl::min_element ( Iterator first,
Iterator last,
Compare comp )

Definition at line 75 of file algorithm.h.

75 {
76 if (first == last) {
77 return last;
78 }
79
80 Iterator min_iter = first;
81 ++first;
82
83 while (first != last) {
84 if (comp(*first, *min_iter)) {
85 min_iter = first;
86 }
87 ++first;
88 }
89
90 return min_iter;
91}

References FL_NOEXCEPT.

◆ minutes16()

LIB8STATIC u16 fl::minutes16 ( )

Return the current minutes since boot in a 16-bit value.

Definition at line 26 of file time_functions.h.

26 {
27 u32 ms = fl::millis();
28 u16 m16;
29 m16 = (ms / (60000L)) & 0xFFFF;
30 return m16;
31}

References FL_NOEXCEPT, LIB8STATIC, and millis().

+ Here is the call graph for this function:

◆ mod()

template<typename T>
enable_if< is_fixed_point< T >::value, T >::type fl::mod ( T a,
T b )
inlineconstexpr

Definition at line 518 of file fixed_point.h.

518{ return T::mod(a, b); }

References FL_NOEXCEPT.

◆ move()

template<typename T>
remove_reference< T >::type && fl::move ( T && t)
constexpr

Definition at line 28 of file move.h.

28 {
29 return static_cast<typename remove_reference<T>::type &&>(t);
30}

References FL_NOEXCEPT, and t.

Referenced by fl::BindResult< R(Args...)>::BindResult(), fl::BindResult< R(Args...)>::BindResult(), fl::ChannelConfig::ChannelConfig(), fl::Rpc::Config< Callable >::Config(), fl::Rpc::Config< Callable >::Config(), fl::ConstCharPtrWrapper::ConstCharPtrWrapper(), fl::ConstSpanWrapper< int >::ConstSpanWrapper(), fl::task::Coroutine::Coroutine(), fl::task::Handle::Handle(), fl::task::PromiseResult< T >::PromiseResult(), fl::task::PromiseResult< T >::PromiseResult(), fl::queue< T, Container >::queue(), fl::Remote::Remote(), fl::detail::ResponseAwareInvoker< R(Args...)>::ResponseAwareInvoker(), fl::detail::ResponseAwareInvoker< void(Args...)>::ResponseAwareInvoker(), fl::ResponseSend::ResponseSend(), fl::Server::Server(), fl::net::http::StreamHandle::StreamHandle(), fl::MultiMapTree< Key, Value, Compare, Allocator >::ValueWithId::ValueWithId(), fl::MultiSetTree< Key, Compare, Allocator >::ValueWithId::ValueWithId(), CFastLED::add(), autoResearchChipsetTimingLegacy(), calculate_oscillators(), fl::vector< fl::i16 >::erase(), FL_DISABLE_WARNING(), FL_DISABLE_WARNING(), fl::FixedVector< fl::u32, kMaxBatchSize >::insert(), fl::FixedVector< fl::u32, kMaxBatchSize >::insert(), fl::iterator<, u8 >::insert(), fl::iterator<, u8 >::insert_or_assign(), fl::iterator<, u8 >::insert_or_assign(), fl::iterator<, u8 >::operator=(), fl::SortedHeapVector< T, LessThan >::operator=(), fl::unique_ptr< T, Deleter >::operator=(), fl::unique_ptr< T, Deleter >::operator=(), fl::unique_ptr< T[], Deleter >::operator=(), fl::unique_ptr< T[], Deleter >::operator=(), fl::iterator<, u8 >::rehash_inline_no_resize(), CFastLED::remove(), run_default_oscillators(), AutoResearchRemoteControl::runParallelTestImpl(), AutoResearchRemoteControl::runSingleTestImpl(), and fl::iterator<, u8 >::try_emplace().

+ Here is the caller graph for this function:

◆ multiply()

float fl::multiply ( float & a,
float & b )
inline

Definition at line 151 of file engine_core.h.

151{ return a * b / 255.f; }

Referenced by fl::Engine::multiply().

+ Here is the caller graph for this function:

◆ multiply_fp()

FASTLED_FORCE_INLINE fl::i32 fl::multiply_fp ( fl::i32 a,
fl::i32 b )

Definition at line 135 of file render_value_fp.h.

135 {
136 return (a * b) / 255;
137}

References FASTLED_FORCE_INLINE.

◆ MurmurHash3_x86_32()

static u32 fl::MurmurHash3_x86_32 ( const void * key,
fl::size len,
u32 seed = 0 )
inlinestatic

Definition at line 22 of file hash.h.

23 {
24
26 FL_DISABLE_WARNING_IMPLICIT_FALLTHROUGH;
27
28 const fl::u8 *data = static_cast<const fl::u8 *>(key);
29 const int nblocks = int(len / 4);
30
31 u32 h1 = seed;
32 const u32 c1 = 0xcc9e2d51;
33 const u32 c2 = 0x1b873593;
34
35 // body
36 const u32 *blocks = reinterpret_cast<const u32 *>(data); // ok reinterpret cast
37 for (int i = 0; i < nblocks; ++i) {
38 u32 k1 = blocks[i];
39 k1 *= c1;
40 k1 = (k1 << 15) | (k1 >> 17);
41 k1 *= c2;
42
43 h1 ^= k1;
44 h1 = (h1 << 13) | (h1 >> 19);
45 h1 = h1 * 5 + 0xe6546b64;
46 }
47
48 // tail
49 const fl::u8 *tail = data + (nblocks * 4);
50 u32 k1 = 0;
51 switch (len & 3) {
52 case 3:
53 k1 ^= u32(tail[2]) << 16;
54 case 2:
55 k1 ^= u32(tail[1]) << 8;
56 case 1:
57 k1 ^= u32(tail[0]);
58 k1 *= c1;
59 k1 = (k1 << 15) | (k1 >> 17);
60 k1 *= c2;
61 h1 ^= k1;
62 }
63
64 // finalization
65 h1 ^= u32(len);
66 // fmix32
67 h1 ^= h1 >> 16;
68 h1 *= 0x85ebca6b;
69 h1 ^= h1 >> 13;
70 h1 *= 0xc2b2ae35;
71 h1 ^= h1 >> 16;
72
73 return h1;
74
76}

References FL_DISABLE_WARNING_POP, and FL_DISABLE_WARNING_PUSH.

Referenced by fl::FastHash< vec2< T > >::operator()(), fl::Hash< audio::fft::Args >::operator()(), fl::Hash< double >::operator()(), fl::Hash< fl::string >::operator()(), fl::Hash< fl::string_view >::operator()(), fl::Hash< Key >::operator()(), fl::Hash< T * >::operator()(), and fl::Hash< vec2< T > >::operator()().

+ Here is the caller graph for this function:

◆ napplyGamma_video() [1/4]

CRGB & fl::napplyGamma_video ( CRGB & rgb,
float gamma )

Definition at line 1329 of file colorutils.cpp.hpp.

1329 {
1331 return rgb;
1332}

References applyGamma_video(), and gamma().

Referenced by FL_DISABLE_WARNING().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ napplyGamma_video() [2/4]

CRGB & fl::napplyGamma_video ( CRGB & rgb,
float gammaR,
float gammaG,
float gammaB )

Definition at line 1334 of file colorutils.cpp.hpp.

1334 {
1335 rgb = applyGamma_video(rgb, gammaR, gammaG, gammaB);
1336 return rgb;
1337}

References applyGamma_video().

+ Here is the call graph for this function:

◆ napplyGamma_video() [3/4]

void fl::napplyGamma_video ( CRGB * rgbarray,
fl::u16 count,
float gamma )

Definition at line 1339 of file colorutils.cpp.hpp.

1339 {
1340 for (fl::u16 i = 0; i < count; ++i) {
1341 rgbarray[i] = applyGamma_video(rgbarray[i], gamma);
1342 }
1343}

References applyGamma_video(), and gamma().

+ Here is the call graph for this function:

◆ napplyGamma_video() [4/4]

void fl::napplyGamma_video ( CRGB * rgbarray,
fl::u16 count,
float gammaR,
float gammaG,
float gammaB )

Definition at line 1345 of file colorutils.cpp.hpp.

1346 {
1347 for (fl::u16 i = 0; i < count; ++i) {
1348 rgbarray[i] = applyGamma_video(rgbarray[i], gammaR, gammaG, gammaB);
1349 }
1350}

References applyGamma_video().

+ Here is the call graph for this function:

◆ nblend() [1/4]

CHSV & fl::nblend ( CHSV & existing,
const CHSV & overlay,
fract8 amountOfOverlay,
TGradientDirectionCode directionCode )

Definition at line 77 of file colorutils.cpp.hpp.

78 {
79 if (amountOfOverlay == 0) {
80 return existing;
81 }
82
83 if (amountOfOverlay == 255) {
84 existing = overlay;
85 return existing;
86 }
87
88 fract8 amountOfKeep = 255 - amountOfOverlay;
89
90 fl::u8 huedelta8 = overlay.hue - existing.hue;
91
92 if (directionCode == SHORTEST_HUES) {
93 directionCode = FORWARD_HUES;
94 if (huedelta8 > 127) {
95 directionCode = BACKWARD_HUES;
96 }
97 }
98
99 if (directionCode == LONGEST_HUES) {
100 directionCode = FORWARD_HUES;
101 if (huedelta8 < 128) {
102 directionCode = BACKWARD_HUES;
103 }
104 }
105
106 if (directionCode == FORWARD_HUES) {
107 existing.hue = existing.hue + scale8(huedelta8, amountOfOverlay);
108 } else /* directionCode == BACKWARD_HUES */
109 {
110 huedelta8 = -huedelta8;
111 existing.hue = existing.hue - scale8(huedelta8, amountOfOverlay);
112 }
113
114 existing.sat = scale8_LEAVING_R1_DIRTY(existing.sat, amountOfKeep) +
115 scale8_LEAVING_R1_DIRTY(overlay.sat, amountOfOverlay);
116 existing.val = scale8_LEAVING_R1_DIRTY(existing.val, amountOfKeep) +
117 scale8_LEAVING_R1_DIRTY(overlay.val, amountOfOverlay);
118
119 cleanup_R1();
120
121 return existing;
122}
u8 fract8
Fixed-Point Fractional Types.
Definition s16x16x4.h:161

References BACKWARD_HUES, FORWARD_HUES, LONGEST_HUES, and SHORTEST_HUES.

◆ nblend() [2/4]

void fl::nblend ( CHSV * existing,
const CHSV * overlay,
fl::u16 count,
fract8 amountOfOverlay,
TGradientDirectionCode directionCode )

Definition at line 124 of file colorutils.cpp.hpp.

125 {
126 if (existing == overlay)
127 return;
128 for (fl::u16 i = count; i; --i) {
129 nblend(*existing, *overlay, amountOfOverlay, directionCode);
130 ++existing;
131 ++overlay;
132 }
133}

References nblend().

+ Here is the call graph for this function:

◆ nblend() [3/4]

CRGB & fl::nblend ( CRGB & existing,
const CRGB & overlay,
fract8 amountOfOverlay )

Definition at line 22 of file colorutils.cpp.hpp.

22 {
23 if (amountOfOverlay == 0) {
24 return existing;
25 }
26
27 if (amountOfOverlay == 255) {
28 existing = overlay;
29 return existing;
30 }
31
32#if 0
33 // Old blend method which unfortunately had some rounding errors
34 fract8 amountOfKeep = 255 - amountOfOverlay;
35
36 existing.red = scale8_LEAVING_R1_DIRTY( existing.red, amountOfKeep)
37 + scale8_LEAVING_R1_DIRTY( overlay.red, amountOfOverlay);
38 existing.green = scale8_LEAVING_R1_DIRTY( existing.green, amountOfKeep)
39 + scale8_LEAVING_R1_DIRTY( overlay.green, amountOfOverlay);
40 existing.blue = scale8_LEAVING_R1_DIRTY( existing.blue, amountOfKeep)
41 + scale8_LEAVING_R1_DIRTY( overlay.blue, amountOfOverlay);
42
43 cleanup_R1();
44#else
45 // Corrected blend method, with no loss-of-precision rounding errors
46 existing.red = blend8(existing.red, overlay.red, amountOfOverlay);
47 existing.green = blend8(existing.green, overlay.green, amountOfOverlay);
48 existing.blue = blend8(existing.blue, overlay.blue, amountOfOverlay);
49#endif
50
51 return existing;
52}

Referenced by blend(), blend(), fl::Pride2015::draw(), FL_DISABLE_WARNING(), nblend(), and nblend().

+ Here is the caller graph for this function:

◆ nblend() [4/4]

void fl::nblend ( CRGB * existing,
const CRGB * overlay,
fl::u16 count,
fract8 amountOfOverlay )

Definition at line 54 of file colorutils.cpp.hpp.

55 {
56 for (fl::u16 i = count; i; --i) {
57 nblend(*existing, *overlay, amountOfOverlay);
58 ++existing;
59 ++overlay;
60 }
61}

References nblend().

+ Here is the call graph for this function:

◆ nblendPaletteTowardPalette()

void fl::nblendPaletteTowardPalette ( CRGBPalette16 & current,
CRGBPalette16 & target,
fl::u8 maxChanges )

Definition at line 1251 of file colorutils.cpp.hpp.

1252 {
1253 fl::u8 *p1;
1254 fl::u8 *p2;
1255 fl::u8 changes = 0;
1256
1257 p1 = (fl::u8 *)current.entries;
1258 p2 = (fl::u8 *)target.entries;
1259
1260 const fl::u8 totalChannels = sizeof(CRGBPalette16);
1261 for (fl::u8 i = 0; i < totalChannels; ++i) {
1262 // if the values are equal, no changes are needed
1263 if (p1[i] == p2[i]) {
1264 continue;
1265 }
1266
1267 // if the current value is less than the target, increase it by one
1268 if (p1[i] < p2[i]) {
1269 ++p1[i];
1270 ++changes;
1271 }
1272
1273 // if the current value is greater than the target,
1274 // increase it by one (or two if it's still greater).
1275 if (p1[i] > p2[i]) {
1276 --p1[i];
1277 ++changes;
1278 if (p1[i] > p2[i]) {
1279 --p1[i];
1280 }
1281 }
1282
1283 // if we've hit the maximum number of changes, exit
1284 if (changes >= maxChanges) {
1285 break;
1286 }
1287 }
1288}

Referenced by fl::TwinkleFox::draw(), and FL_DISABLE_WARNING().

+ Here is the caller graph for this function:

◆ noiseCylinderCRGB()

CRGB fl::noiseCylinderCRGB ( float angle,
float height,
u32 time,
float radius = 1.0f )

Generate CRGB noise for a cylinder pattern.

Samples three z-slices of 3D Perlin noise to create independent red, green, and blue components (direct RGB, not HSV conversion). Maps the angle around the circumference using sin/cos, and samples height directly.

Parameters
anglePosition around the cylinder (radians, 0 to 2π)
heightVertical position on the cylinder
timeAnimation time parameter
radiusNoise zoom level (level of detail). Larger values = coarser pattern, smaller = more detail (default 1.0)
Returns
CRGB color with 8-bit components

Definition at line 208 of file noise.cpp.hpp.

208 {
209 // Convert cylindrical coordinates to cartesian
210 // angle: azimuth around cylinder (0 to 2π)
211 // height: vertical position (used directly)
212 // x = cos(angle)
213 // y = sin(angle)
214 // z = height
215 float x = fl::cosf(angle);
216 float y = fl::sinf(angle);
217
218 // Map sin/cos values from [-1, 1] to [0, 0xFFFF]
219 // This ensures positive values for uint32_t conversion
220 u32 nx = static_cast<u32>((x + 1.0f) * 0.5f * radius * 0xffff);
221 u32 ny = static_cast<u32>((y + 1.0f) * 0.5f * radius * 0xffff);
222 u32 nz = static_cast<u32>(height * radius * 0xffff);
223
224 // Sample three different t-slices for R, G, B components (direct RGB)
225 // Using offsets 0x0, 0x10000, 0x20000 to separate them in noise space
226 u16 r16_raw = inoise16(nx, ny, nz, time);
227 u16 g16_raw = inoise16(nx, ny, nz, time + 0x10000);
228 u16 b16_raw = inoise16(nx, ny, nz, time + 0x20000);
229
230 // Rescale from observed noise range to full 0-65535 range using global extents
231 u16 r16 = rescaleNoiseValue16(r16_raw);
232 u16 g16 = rescaleNoiseValue16(g16_raw);
233 u16 b16 = rescaleNoiseValue16(b16_raw);
234
235 // Scale down to 8-bit
236 u8 r = fl::int_scale<u16, u8>(r16);
237 u8 g = fl::int_scale<u16, u8>(g16);
238 u8 b = fl::int_scale<u16, u8>(b16);
239
240 return CRGB(r, g, b);
241}
fl::u16 inoise16(fl::u32 x, fl::u32 y, fl::u32 z, fl::u32 t)
FASTLED_FORCE_INLINE u16 rescaleNoiseValue16(u16 raw_value)
Rescale raw inoise16() output to full 16-bit range [0, 65535] Curries in the global NOISE16_EXTENT_MI...
Definition noise.cpp.hpp:21
fl::u64 time() FL_NOEXCEPT
Alias for millis64() - returns 64-bit millisecond time.
Definition chrono.h:346
float sinf(float value) FL_NOEXCEPT
Definition math.h:352
float cosf(float value) FL_NOEXCEPT
Definition math.h:358

References cosf(), height, inoise16(), rescaleNoiseValue16(), sinf(), time(), x, and y.

+ Here is the call graph for this function:

◆ noiseCylinderHSV16()

HSV16 fl::noiseCylinderHSV16 ( float angle,
float height,
u32 time,
float radius = 1.0f )

Cylinder noise functions - sample three z-slices for independent component evolution.

Generate HSV16 noise for a cylinder pattern.

Samples three z-slices of 3D Perlin noise (at time, time+0x10000, time+0x20000) to create independent hue, saturation, and value components. Maps the angle around the circumference using sin/cos, and samples height directly.

Parameters
anglePosition around the cylinder (radians, 0 to 2π)
heightVertical position on the cylinder
timeAnimation time parameter
radiusNoise zoom level (level of detail). Larger values = coarser pattern, smaller = more detail (default 1.0)
Returns
HSV16 color with 16-bit components

Definition at line 166 of file noise.cpp.hpp.

166 {
167 // Convert cylindrical coordinates to cartesian
168 // angle: azimuth around cylinder (0 to 2π)
169 // height: vertical position (used directly)
170 // x = cos(angle)
171 // y = sin(angle)
172 // z = height
173 float x = fl::cosf(angle);
174 float y = fl::sinf(angle);
175
176 // Map sin/cos values from [-1, 1] to [0, 0xFFFF]
177 // This ensures positive values for uint32_t conversion
178 u32 nx = static_cast<u32>((x + 1.0f) * 0.5f * radius * 0xffff);
179 u32 ny = static_cast<u32>((y + 1.0f) * 0.5f * radius * 0xffff);
180 u32 nz = static_cast<u32>(height * radius * 0xffff);
181
182 // Sample three different t-slices for H, S, V components
183 // Using offsets 0x0, 0x10000, 0x20000 to separate them in noise space
184 u16 h_raw = inoise16(nx, ny, nz, time);
185 u16 s_raw = inoise16(nx, ny, nz, time + 0x10000);
186 u16 v_raw = inoise16(nx, ny, nz, time + 0x20000);
187
188 // Rescale from observed noise range to full 0-65535 range using global extents
189 u16 h = rescaleNoiseValue16(h_raw);
190 u16 s = rescaleNoiseValue16(s_raw);
191 u16 v = rescaleNoiseValue16(v_raw);
192
193 return HSV16(h, s, v);
194}

References cosf(), height, inoise16(), rescaleNoiseValue16(), sinf(), time(), x, and y.

Referenced by noiseCylinderHSV8().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ noiseCylinderHSV8()

CHSV fl::noiseCylinderHSV8 ( float angle,
float height,
u32 time,
float radius = 1.0f )

Generate HSV8 (8-bit) noise for a cylinder pattern.

Calls noiseCylinderHSV16() and scales each component down to 8-bit.

Parameters
anglePosition around the cylinder (radians, 0 to 2π)
heightVertical position on the cylinder
timeAnimation time parameter
radiusNoise zoom level (level of detail). Larger values = coarser pattern, smaller = more detail (default 1.0)
Returns
HSV8 (CHSV) color with 8-bit components

Definition at line 196 of file noise.cpp.hpp.

196 {
197 HSV16 hsv16 = noiseCylinderHSV16(angle, height, time, radius);
198
199 // Scale 16-bit components down to 8-bit using bit shift with rounding
200 // This preserves the relative position in the value range
201 u8 h = (hsv16.h + 128) >> 8;
202 u8 s = (hsv16.s + 128) >> 8;
203 u8 v = (hsv16.v + 128) >> 8;
204
205 return CHSV(h, s, v);
206}
HSV16 noiseCylinderHSV16(float angle, float height, u32 time, float radius)
Cylinder noise functions - sample three z-slices for independent component evolution.

References fl::HSV16::h, height, noiseCylinderHSV16(), fl::HSV16::s, time(), and fl::HSV16::v.

+ Here is the call graph for this function:

◆ noiseRingCRGB()

CRGB fl::noiseRingCRGB ( float angle,
u32 time,
float radius = 1.0f )

Generate CRGB noise for a ring pattern.

Samples three z-slices of 3D Perlin noise to create independent red, green, and blue components (direct RGB, not HSV conversion).

Parameters
anglePosition around the ring (radians, 0 to 2π)
timeAnimation time parameter
radiusNoise zoom level (level of detail). Larger values = coarser pattern, smaller = more detail (default 1.0)
Returns
CRGB color with 8-bit components

Definition at line 63 of file noise.cpp.hpp.

63 {
64 // Convert angle to cartesian coordinates
65 float x = fl::cosf(angle);
66 float y = fl::sinf(angle);
67
68 // Map sin/cos values from [-1, 1] to [0, 0xFFFF]
69 // This ensures positive values for uint32_t conversion
70 u32 nx = static_cast<u32>((x + 1.0f) * 0.5f * radius * 0xffff);
71 u32 ny = static_cast<u32>((y + 1.0f) * 0.5f * radius * 0xffff);
72
73 // Sample three different z-slices for R, G, B components (direct RGB)
74 // Using offsets 0x0, 0x10000, 0x20000 to separate them in noise space
75 u16 r16_raw = inoise16(nx, ny, time);
76 u16 g16_raw = inoise16(nx, ny, time + 0x10000);
77 u16 b16_raw = inoise16(nx, ny, time + 0x20000);
78
79 // Rescale from observed noise range to full 0-65535 range using global extents
80 u16 r16 = rescaleNoiseValue16(r16_raw);
81 u16 g16 = rescaleNoiseValue16(g16_raw);
82 u16 b16 = rescaleNoiseValue16(b16_raw);
83
84 // Scale down to 8-bit
85 u8 r = r16 >> 8;
86 u8 g = g16 >> 8;
87 u8 b = b16 >> 8;
88
89 return CRGB(r, g, b);
90}

References cosf(), inoise16(), rescaleNoiseValue16(), sinf(), time(), x, and y.

+ Here is the call graph for this function:

◆ noiseRingHSV16()

HSV16 fl::noiseRingHSV16 ( float angle,
u32 time,
float radius = 1.0f )

Ring noise functions - sample three z-slices for independent component evolution.

Generate HSV16 noise for a ring pattern.

Samples three z-slices of 3D Perlin noise (at time, time+0x10000, time+0x20000) to create independent hue, saturation, and value components.

Parameters
anglePosition around the ring (radians, 0 to 2π)
timeAnimation time parameter
radiusNoise zoom level (level of detail). Larger values = coarser pattern, smaller = more detail (default 1.0)
Returns
HSV16 color with 16-bit components

Definition at line 27 of file noise.cpp.hpp.

27 {
28 // Convert angle to cartesian coordinates
29 float x = fl::cosf(angle);
30 float y = fl::sinf(angle);
31
32 // Map sin/cos values from [-1, 1] to [0, 0xFFFF]
33 // This ensures positive values for uint32_t conversion
34 u32 nx = static_cast<u32>((x + 1.0f) * 0.5f * radius * 0xffff);
35 u32 ny = static_cast<u32>((y + 1.0f) * 0.5f * radius * 0xffff);
36
37 // Sample three different z-slices for H, S, V components
38 // Using offsets 0x0, 0x10000, 0x20000 to separate them in noise space
39 u16 h_raw = inoise16(nx, ny, time);
40 u16 s_raw = inoise16(nx, ny, time + 0x10000);
41 u16 v_raw = inoise16(nx, ny, time + 0x20000);
42
43 // Rescale from observed noise range to full 0-65535 range using global extents
44 u16 h = rescaleNoiseValue16(h_raw);
45 u16 s = rescaleNoiseValue16(s_raw);
46 u16 v = rescaleNoiseValue16(v_raw);
47
48 return HSV16(h, s, v);
49}

References cosf(), inoise16(), rescaleNoiseValue16(), sinf(), time(), x, and y.

Referenced by noiseRingHSV8().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ noiseRingHSV8()

CHSV fl::noiseRingHSV8 ( float angle,
u32 time,
float radius = 1.0f )

Generate HSV8 (8-bit) noise for a ring pattern.

Calls noiseRingHSV16() and scales each component down to 8-bit.

Parameters
anglePosition around the ring (radians, 0 to 2π)
timeAnimation time parameter
radiusNoise zoom level (level of detail). Larger values = coarser pattern, smaller = more detail (default 1.0)
Returns
HSV8 (CHSV) color with 8-bit components
Examples
FxNoiseRing.ino.

Definition at line 51 of file noise.cpp.hpp.

51 {
52 fl::HSV16 hsv16 = noiseRingHSV16(angle, time, radius);
53
54 // Scale 16-bit components down to 8-bit using bit shift with rounding
55 // This preserves the relative position in the value range
56 u8 h = (hsv16.h + 128) >> 8;
57 u8 s = (hsv16.s + 128) >> 8;
58 u8 v = (hsv16.v + 128) >> 8;
59
60 return CHSV(h, s, v);
61}
HSV16 noiseRingHSV16(float angle, u32 time, float radius)
Ring noise functions - sample three z-slices for independent component evolution.
Definition noise.cpp.hpp:27

References fl::HSV16::h, noiseRingHSV16(), fl::HSV16::s, time(), and fl::HSV16::v.

Referenced by draw().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ noiseSphereCRGB()

CRGB fl::noiseSphereCRGB ( float angle,
float phi,
u32 time,
float radius = 1.0f )

Generate CRGB noise for a sphere pattern.

Samples three z-slices of 3D Perlin noise to create independent red, green, and blue components (direct RGB, not HSV conversion).

Parameters
angleAzimuth angle around the sphere (radians, 0 to 2π)
phiPolar angle from the north pole (radians, 0 to π)
timeAnimation time parameter
radiusNoise zoom level (level of detail). Larger values = coarser pattern, smaller = more detail (default 1.0)
Returns
CRGB color with 8-bit components

Definition at line 133 of file noise.cpp.hpp.

133 {
134 // Convert spherical coordinates to cartesian
135 // angle: azimuth (0 to 2π), phi: polar angle from north pole (0 to π)
136 // x = sin(phi) * cos(angle)
137 // y = sin(phi) * sin(angle)
138 // z = cos(phi)
139 float sin_phi = fl::sinf(phi);
140 float cos_phi = fl::cosf(phi);
141 float x = sin_phi * fl::cosf(angle);
142 float y = sin_phi * fl::sinf(angle);
143 float z = cos_phi;
144
145 // Map cartesian values from [-1, 1] to [0, 0xFFFF]
146 // This ensures positive values for uint32_t conversion
147 u32 nx = static_cast<u32>((x + 1.0f) * 0.5f * radius * 0xffff);
148 u32 ny = static_cast<u32>((y + 1.0f) * 0.5f * radius * 0xffff);
149 u32 nz = static_cast<u32>((z + 1.0f) * 0.5f * radius * 0xffff);
150
151 // Sample three different t-slices for R, G, B components (direct RGB)
152 // Using offsets 0x0, 0x10000, 0x20000 to separate them in noise space
153 u16 r16 = inoise16(nx, ny, nz, time);
154 u16 g16 = inoise16(nx, ny, nz, time + 0x10000);
155 u16 b16 = inoise16(nx, ny, nz, time + 0x20000);
156
157 u8 r = fl::int_scale<u16, u8>(r16);
158 u8 g = fl::int_scale<u16, u8>(g16);
159 u8 b = fl::int_scale<u16, u8>(b16);
160
161 return CRGB(r, g, b);
162}

References cosf(), inoise16(), sinf(), time(), x, y, and z.

+ Here is the call graph for this function:

◆ noiseSphereHSV16()

HSV16 fl::noiseSphereHSV16 ( float angle,
float phi,
u32 time,
float radius = 1.0f )

Sphere noise functions - sample three z-slices for independent component evolution.

Generate HSV16 noise for a sphere pattern.

Samples three z-slices of 3D Perlin noise (at time, time+0x10000, time+0x20000) to create independent hue, saturation, and value components.

Parameters
angleAzimuth angle around the sphere (radians, 0 to 2π)
phiPolar angle from the north pole (radians, 0 to π)
timeAnimation time parameter
radiusNoise zoom level (level of detail). Larger values = coarser pattern, smaller = more detail (default 1.0)
Returns
HSV16 color with 16-bit components

Definition at line 94 of file noise.cpp.hpp.

94 {
95 // Convert spherical coordinates to cartesian
96 // angle: azimuth (0 to 2π), phi: polar angle from north pole (0 to π)
97 // x = sin(phi) * cos(angle)
98 // y = sin(phi) * sin(angle)
99 // z = cos(phi)
100 float sin_phi = fl::sinf(phi);
101 float cos_phi = fl::cosf(phi);
102 float x = sin_phi * fl::cosf(angle);
103 float y = sin_phi * fl::sinf(angle);
104 float z = cos_phi;
105
106 // Map cartesian values from [-1, 1] to [0, 0xFFFF]
107 // This ensures positive values for uint32_t conversion
108 u32 nx = static_cast<u32>((x + 1.0f) * 0.5f * radius * 0xffff);
109 u32 ny = static_cast<u32>((y + 1.0f) * 0.5f * radius * 0xffff);
110 u32 nz = static_cast<u32>((z + 1.0f) * 0.5f * radius * 0xffff);
111
112 // Sample three different t-slices for H, S, V components
113 // Using offsets 0x0, 0x10000, 0x20000 to separate them in noise space
114 u16 h = inoise16(nx, ny, nz, time);
115 u16 s = inoise16(nx, ny, nz, time + 0x10000);
116 u16 v = inoise16(nx, ny, nz, time + 0x20000);
117
118 return HSV16(h, s, v);
119}

References cosf(), inoise16(), sinf(), time(), x, y, and z.

Referenced by noiseSphereHSV8().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ noiseSphereHSV8()

CHSV fl::noiseSphereHSV8 ( float angle,
float phi,
u32 time,
float radius = 1.0f )

Generate HSV8 (8-bit) noise for a sphere pattern.

Calls noiseSphereHSV16() and scales each component down to 8-bit.

Parameters
angleAzimuth angle around the sphere (radians, 0 to 2π)
phiPolar angle from the north pole (radians, 0 to π)
timeAnimation time parameter
radiusNoise zoom level (level of detail). Larger values = coarser pattern, smaller = more detail (default 1.0)
Returns
HSV8 (CHSV) color with 8-bit components

Definition at line 121 of file noise.cpp.hpp.

121 {
122 HSV16 hsv16 = noiseSphereHSV16(angle, phi, time, radius);
123
124 // Scale 16-bit components down to 8-bit using bit shift with rounding
125 // This preserves the relative position in the value range
126 u8 h = (hsv16.h + 128) >> 8;
127 u8 s = (hsv16.s + 128) >> 8;
128 u8 v = (hsv16.v + 128) >> 8;
129
130 return CHSV(h, s, v);
131}
HSV16 noiseSphereHSV16(float angle, float phi, u32 time, float radius)
Sphere noise functions - sample three z-slices for independent component evolution.
Definition noise.cpp.hpp:94

References fl::HSV16::h, noiseSphereHSV16(), fl::HSV16::s, time(), and fl::HSV16::v.

+ Here is the call graph for this function:

◆ nscale8()

void fl::nscale8 ( CRGB * leds,
fl::u16 num_leds,
fl::u8 scale )

Definition at line 172 of file colorutils.cpp.hpp.

172 {
173 for (fl::u16 i = 0; i < num_leds; ++i) {
174 leds[i].nscale8(scale);
175 }
176}
fl::UISlider scale("Scale", 4,.1, 4,.1)

References leds, and scale.

Referenced by fade_raw(), fadeToBlackBy(), and FL_DISABLE_WARNING().

+ Here is the caller graph for this function:

◆ nscale8_video()

void fl::nscale8_video ( CRGB * leds,
fl::u16 num_leds,
fl::u8 scale )

Definition at line 150 of file colorutils.cpp.hpp.

150 {
151 for (fl::u16 i = 0; i < num_leds; ++i) {
152 leds[i].nscale8_video(scale);
153 }
154}

References leds, and scale.

Referenced by fade_video(), fadeLightBy(), and FL_DISABLE_WARNING().

+ Here is the caller graph for this function:

◆ operator!()

bool fl::operator! ( RemoteClearFlags flags)
inline

Definition at line 49 of file types.h.

49 {
50 return static_cast<u8>(flags) == 0;
51}

◆ operator!=() [1/14]

template<typename T, fl::size N>
bool fl::operator!= ( const array< T, N > & lhs,
const array< T, N > & rhs )

Definition at line 176 of file array.h.

176 {
177 return !(lhs == rhs);
178}

References FL_NOEXCEPT.

◆ operator!=() [2/14]

FASTLED_FORCE_INLINE bool fl::operator!= ( const CRGB & lhs,
const CRGB & rhs )

Check if two CRGB objects do not have the same color data.

Definition at line 739 of file crgb.h.

740{
741 return !(lhs == rhs);
742}

References FASTLED_FORCE_INLINE, and FL_NOEXCEPT.

Referenced by FL_DISABLE_WARNING().

+ Here is the caller graph for this function:

◆ operator!=() [3/14]

template<typename Key, typename Value, typename Less>
bool fl::operator!= ( const flat_map< Key, Value, Less > & lhs,
const flat_map< Key, Value, Less > & rhs )

Definition at line 519 of file flat_map.h.

520 {
521 return !(lhs == rhs);
522}

References FL_NOEXCEPT.

◆ operator!=() [4/14]

template<typename Key, typename Less>
bool fl::operator!= ( const flat_set< Key, Less > & lhs,
const flat_set< Key, Less > & rhs )

Definition at line 333 of file flat_set.h.

334 {
335 return !(lhs == rhs);
336}

◆ operator!=() [5/14]

template<typename T1, typename T2, typename U1, typename U2>
bool fl::operator!= ( const pair< T1, T2 > & lhs,
const pair< U1, U2 > & rhs )

Definition at line 63 of file pair.h.

63 {
64 return !(lhs == rhs);
65}

References FL_NOEXCEPT.

◆ operator!=() [6/14]

template<typename T, typename Container>
bool fl::operator!= ( const queue< T, Container > & lhs,
const queue< T, Container > & rhs )

Non-member inequality comparison for queues.

Definition at line 211 of file queue.h.

211 {
212 return lhs.get_container() != rhs.get_container();
213}
Container & get_container()
Get access to the underlying container (for advanced use)
Definition queue.h:140

References fl::queue< T, Container >::get_container().

+ Here is the call graph for this function:

◆ operator!=() [7/14]

template<typename T, typename Y>
bool fl::operator!= ( const shared_ptr< T > & lhs,
const shared_ptr< Y > & rhs )

Definition at line 462 of file shared_ptr.h.

462 {
463 return lhs.get() != rhs.get();
464}

References FL_NOEXCEPT.

◆ operator!=() [8/14]

template<typename T>
bool fl::operator!= ( const shared_ptr< T > & lhs,
fl::nullptr_t  )

Definition at line 497 of file shared_ptr.h.

497 {
498 return lhs.get() != nullptr;
499}

References FL_NOEXCEPT.

◆ operator!=() [9/14]

template<typename T, typename Deleter>
bool fl::operator!= ( const unique_ptr< T, Deleter > & ptr,
fl::nullptr_t  )

Definition at line 249 of file unique_ptr.h.

249 {
250 return static_cast<bool>(ptr);
251}

References FL_NOEXCEPT.

◆ operator!=() [10/14]

template<typename T1, typename Deleter1, typename T2, typename Deleter2>
bool fl::operator!= ( const unique_ptr< T1, Deleter1 > & lhs,
const unique_ptr< T2, Deleter2 > & rhs )

Definition at line 234 of file unique_ptr.h.

234 {
235 return !(lhs == rhs);
236}

References FL_NOEXCEPT.

◆ operator!=() [11/14]

template<typename T>
bool fl::operator!= ( fl::nullptr_t ,
const shared_ptr< T > & rhs )

Definition at line 502 of file shared_ptr.h.

502 {
503 return nullptr != rhs.get();
504}

References FL_NOEXCEPT.

◆ operator!=() [12/14]

template<typename T, typename Deleter>
bool fl::operator!= ( fl::nullptr_t ,
const unique_ptr< T, Deleter > & ptr )

Definition at line 254 of file unique_ptr.h.

254 {
255 return static_cast<bool>(ptr);
256}

References FL_NOEXCEPT.

◆ operator!=() [13/14]

bool fl::operator!= ( string_view lhs,
string_view rhs )
inline

Definition at line 441 of file string_view.h.

441 {
442 return lhs.compare(rhs) != 0;
443}
int compare(string_view other) const FL_NOEXCEPT

References FL_NOEXCEPT.

◆ operator!=() [14/14]

template<typename T, typename U>
bool fl::operator!= ( T lhs,
const not_null< U > & rhs )
constexpr

Definition at line 315 of file not_null.h.

315 {
316 return lhs != rhs.get();
317}
constexpr const T & get() const FL_NOEXCEPT
Definition not_null.h:223

References FL_NOEXCEPT.

◆ operator%()

FASTLED_FORCE_INLINE CRGB fl::operator% ( const CRGB & p1,
u8 d )

Scale using CRGB::nscale8_video()

Definition at line 206 of file crgb.hpp.

207{
208 CRGB retval( p1);
209 retval.nscale8_video( d);
210 return retval;
211}

References FASTLED_FORCE_INLINE, FL_NOEXCEPT, and fl::CRGB::nscale8_video().

+ Here is the call graph for this function:

◆ operator&() [1/2]

FASTLED_FORCE_INLINE CRGB fl::operator& ( const CRGB & p1,
const CRGB & p2 )

Combine two CRGB objects, taking the smallest value of each channel.

Definition at line 787 of file crgb.h.

788{
789 return CRGB( p1.r < p2.r ? p1.r : p2.r,
790 p1.g < p2.g ? p1.g : p2.g,
791 p1.b < p2.b ? p1.b : p2.b);
792}

References FASTLED_FORCE_INLINE, and FL_NOEXCEPT.

Referenced by FL_DISABLE_WARNING().

+ Here is the caller graph for this function:

◆ operator&() [2/2]

RemoteClearFlags fl::operator& ( RemoteClearFlags a,
RemoteClearFlags b )
inline

Definition at line 45 of file types.h.

45 {
46 return static_cast<RemoteClearFlags>(static_cast<u8>(a) & static_cast<u8>(b));
47}
RemoteClearFlags
Flags for clearing Remote state (can be OR'd together)
Definition types.h:32

◆ operator*() [1/6]

FASTLED_FORCE_INLINE CRGB fl::operator* ( const CRGB & p1,
u8 d )

Multiply each of the channels by a constant, saturating each channel at 0xFF.

Definition at line 198 of file crgb.hpp.

199{
200 return CRGB( qmul8( p1.r, d),
201 qmul8( p1.g, d),
202 qmul8( p1.b, d));
203}

References FASTLED_FORCE_INLINE, and FL_NOEXCEPT.

◆ operator*() [2/6]

template<class T, int F, int I>
static i16 fl::operator* ( i16 v,
qfx< T, F, I > & q )
static

Definition at line 39 of file qfx.h.

39{ return q * v; }

References FL_NOEXCEPT.

◆ operator*() [3/6]

template<class T, int F, int I>
static i32 fl::operator* ( i32 v,
qfx< T, F, I > & q )
static

Definition at line 38 of file qfx.h.

38{ return q * v; }

References FL_NOEXCEPT.

◆ operator*() [4/6]

FASTLED_FORCE_INLINE s16x16 fl::operator* ( s16x16 a,
s0x32 b )
constexpr

Definition at line 660 of file fixed_point.h.

660 {
661 return b * a;
662}

◆ operator*() [5/6]

template<class T, int F, int I>
static u16 fl::operator* ( u16 v,
qfx< T, F, I > & q )
static

Definition at line 37 of file qfx.h.

37{ return q * v; }

References FL_NOEXCEPT.

◆ operator*() [6/6]

template<class T, int F, int I>
static u32 fl::operator* ( u32 v,
qfx< T, F, I > & q )
static

Definition at line 36 of file qfx.h.

36{ return q * v; }

References FL_NOEXCEPT.

◆ operator+() [1/8]

string fl::operator+ ( const char * lhs,
const string & rhs )
inline

Definition at line 462 of file string.h.

462 {
463 string result(lhs);
464 result += rhs;
465 return result;
466}

References FL_NOEXCEPT.

◆ operator+() [2/8]

template<typename T>
fl::enable_if<!fl::is_arithmetic< T >::value, string >::type fl::operator+ ( const char * lhs,
const T & rhs )
inline

Definition at line 482 of file string.h.

482 {
483 string result(lhs);
484 result += rhs;
485 return result;
486}

References FL_NOEXCEPT.

◆ operator+() [3/8]

FASTLED_FORCE_INLINE CRGB fl::operator+ ( const CRGB & p1,
const CRGB & p2 )

Add one CRGB to another, saturating at 0xFF for each channel.

Definition at line 182 of file crgb.hpp.

183{
184 return CRGB( fl::qadd8( p1.r, p2.r),
185 fl::qadd8( p1.g, p2.g),
186 fl::qadd8( p1.b, p2.b));
187}

References FASTLED_FORCE_INLINE, and FL_NOEXCEPT.

◆ operator+() [4/8]

string fl::operator+ ( const string & lhs,
const char * rhs )
inline

Definition at line 468 of file string.h.

468 {
469 string result(lhs);
470 result += rhs;
471 return result;
472}

References FL_NOEXCEPT.

◆ operator+() [5/8]

string fl::operator+ ( const string & lhs,
const string & rhs )
inline

Definition at line 474 of file string.h.

474 {
475 string result(lhs);
476 result += rhs;
477 return result;
478}

References FL_NOEXCEPT.

◆ operator+() [6/8]

template<typename T>
string fl::operator+ ( const string & lhs,
const T & rhs )
inline

Definition at line 498 of file string.h.

498 {
499 string result(lhs);
500 result += rhs;
501 return result;
502}

References FL_NOEXCEPT.

◆ operator+() [7/8]

template<typename T>
fl::enable_if<!fl::is_arithmetic< T >::value, string >::type fl::operator+ ( const T & lhs,
const char * rhs )
inline

Definition at line 490 of file string.h.

490 {
491 string result;
492 result.append(lhs);
493 result += rhs;
494 return result;
495}

References FL_NOEXCEPT.

◆ operator+() [8/8]

template<typename T>
string fl::operator+ ( const T & lhs,
const string & rhs )
inline

Definition at line 505 of file string.h.

505 {
506 string result;
507 result.append(lhs);
508 result += rhs;
509 return result;
510}

References FL_NOEXCEPT.

◆ operator-()

FASTLED_FORCE_INLINE CRGB fl::operator- ( const CRGB & p1,
const CRGB & p2 )

Subtract one CRGB from another, saturating at 0x00 for each channel.

Definition at line 190 of file crgb.hpp.

191{
192 return CRGB( fl::qsub8( p1.r, p2.r),
193 fl::qsub8( p1.g, p2.g),
194 fl::qsub8( p1.b, p2.b));
195}

References FASTLED_FORCE_INLINE, and FL_NOEXCEPT.

◆ operator/()

FASTLED_FORCE_INLINE CRGB fl::operator/ ( const CRGB & p1,
u8 d )

Divide each of the channels by a constant.

Definition at line 781 of file crgb.h.

782{
783 return CRGB( p1.r/d, p1.g/d, p1.b/d);
784}

References FASTLED_FORCE_INLINE, and FL_NOEXCEPT.

◆ operator<() [1/8]

template<typename T, fl::size N>
bool fl::operator< ( const array< T, N > & lhs,
const array< T, N > & rhs )

Definition at line 181 of file array.h.

181 {
182 for (fl::size i = 0; i < N; ++i) {
183 if (lhs[i] < rhs[i]) {
184 return true;
185 }
186 if (rhs[i] < lhs[i]) {
187 return false;
188 }
189 }
190 return false;
191}

References FL_NOEXCEPT.

◆ operator<() [2/8]

FASTLED_FORCE_INLINE bool fl::operator< ( const CRGB & lhs,
const CRGB & rhs )

Check if the sum of the color channels in one CRGB object is less than another.

Definition at line 745 of file crgb.h.

746{
747 u16 sl, sr;
748 sl = lhs.r + lhs.g + lhs.b;
749 sr = rhs.r + rhs.g + rhs.b;
750 return sl < sr;
751}

References FASTLED_FORCE_INLINE, and FL_NOEXCEPT.

Referenced by FL_DISABLE_WARNING().

+ Here is the caller graph for this function:

◆ operator<() [3/8]

template<typename Key, typename Value, typename Less>
bool fl::operator< ( const flat_map< Key, Value, Less > & lhs,
const flat_map< Key, Value, Less > & rhs )

Definition at line 525 of file flat_map.h.

526 {
527 return fl::lexicographical_compare(lhs.begin(), lhs.end(),
528 rhs.begin(), rhs.end());
529}
iterator begin() FL_NOEXCEPT
Definition flat_map.h:83
iterator end() FL_NOEXCEPT
Definition flat_map.h:84
bool lexicographical_compare(Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2) FL_NOEXCEPT
Definition algorithm.h:146

References FL_NOEXCEPT, and lexicographical_compare().

+ Here is the call graph for this function:

◆ operator<() [4/8]

template<typename Key, typename Less>
bool fl::operator< ( const flat_set< Key, Less > & lhs,
const flat_set< Key, Less > & rhs )

Definition at line 339 of file flat_set.h.

340 {
341 return fl::lexicographical_compare(lhs.begin(), lhs.end(),
342 rhs.begin(), rhs.end());
343}
iterator begin()
Definition flat_set.h:75
iterator end()
Definition flat_set.h:76

References fl::flat_set< Key, Less >::begin(), fl::flat_set< Key, Less >::end(), and lexicographical_compare().

+ Here is the call graph for this function:

◆ operator<() [5/8]

template<typename T1, typename T2, typename U1, typename U2>
bool fl::operator< ( const pair< T1, T2 > & lhs,
const pair< U1, U2 > & rhs )

Definition at line 68 of file pair.h.

68 {
69 return lhs.first < rhs.first || (!(rhs.first < lhs.first) && lhs.second < rhs.second);
70}

References FL_NOEXCEPT.

◆ operator<() [6/8]

template<typename T, typename Container>
bool fl::operator< ( const queue< T, Container > & lhs,
const queue< T, Container > & rhs )

Non-member less-than comparison for queues.

Definition at line 217 of file queue.h.

217 {
218 return lhs.get_container() < rhs.get_container();
219}

References fl::queue< T, Container >::get_container().

+ Here is the call graph for this function:

◆ operator<() [7/8]

template<typename T, typename Y>
bool fl::operator< ( const shared_ptr< T > & lhs,
const shared_ptr< Y > & rhs )

Definition at line 467 of file shared_ptr.h.

467 {
468 return lhs.get() < rhs.get();
469}

References FL_NOEXCEPT.

◆ operator<() [8/8]

bool fl::operator< ( string_view lhs,
string_view rhs )
inline

Definition at line 445 of file string_view.h.

445 {
446 return lhs.compare(rhs) < 0;
447}

References FL_NOEXCEPT.

◆ operator<<() [1/7]

ostream & fl::operator<< ( ostream & os,
const dec_t &  )

Definition at line 54 of file ostream.cpp.hpp.

54 {
55 os.mBase = 10;
56 return os;
57}
int mBase
Definition ostream.h:88

◆ operator<<() [2/7]

ostream & fl::operator<< ( ostream & os,
const endl_t &  )
inline

Definition at line 99 of file ostream.h.

99 {
100 os << "\n";
101 return os;
102}

References FL_NOEXCEPT.

◆ operator<<() [3/7]

ostream & fl::operator<< ( ostream & os,
const hex_t &  )

Definition at line 49 of file ostream.cpp.hpp.

49 {
50 os.mBase = 16;
51 return os;
52}

◆ operator<<() [4/7]

ostream & fl::operator<< ( ostream & os,
const oct_t &  )

Definition at line 59 of file ostream.cpp.hpp.

59 {
60 os.mBase = 8;
61 return os;
62}

◆ operator<<() [5/7]

sstream & fl::operator<< ( sstream & ss,
const dec_t &  )

Definition at line 51 of file strstream.cpp.hpp.

51 {
52 ss.mBase = 10;
53 return ss;
54}

◆ operator<<() [6/7]

sstream & fl::operator<< ( sstream & ss,
const hex_t &  )

Definition at line 46 of file strstream.cpp.hpp.

46 {
47 ss.mBase = 16;
48 return ss;
49}

◆ operator<<() [7/7]

sstream & fl::operator<< ( sstream & ss,
const oct_t &  )

Definition at line 56 of file strstream.cpp.hpp.

56 {
57 ss.mBase = 8;
58 return ss;
59}

◆ operator<=() [1/8]

template<typename T, fl::size N>
bool fl::operator<= ( const array< T, N > & lhs,
const array< T, N > & rhs )

Definition at line 194 of file array.h.

194 {
195 return !(rhs < lhs);
196}

References FL_NOEXCEPT.

◆ operator<=() [2/8]

FASTLED_FORCE_INLINE bool fl::operator<= ( const CRGB & lhs,
const CRGB & rhs )

Check if the sum of the color channels in one CRGB object is less than or equal to another.

Definition at line 772 of file crgb.h.

773{
774 u16 sl, sr;
775 sl = lhs.r + lhs.g + lhs.b;
776 sr = rhs.r + rhs.g + rhs.b;
777 return sl <= sr;
778}

References FASTLED_FORCE_INLINE, and FL_NOEXCEPT.

Referenced by FL_DISABLE_WARNING().

+ Here is the caller graph for this function:

◆ operator<=() [3/8]

template<typename Key, typename Value, typename Less>
bool fl::operator<= ( const flat_map< Key, Value, Less > & lhs,
const flat_map< Key, Value, Less > & rhs )

Definition at line 532 of file flat_map.h.

533 {
534 return !(rhs < lhs);
535}

References FL_NOEXCEPT.

◆ operator<=() [4/8]

template<typename Key, typename Less>
bool fl::operator<= ( const flat_set< Key, Less > & lhs,
const flat_set< Key, Less > & rhs )

Definition at line 346 of file flat_set.h.

347 {
348 return !(rhs < lhs);
349}

◆ operator<=() [5/8]

template<typename T1, typename T2, typename U1, typename U2>
bool fl::operator<= ( const pair< T1, T2 > & lhs,
const pair< U1, U2 > & rhs )

Definition at line 73 of file pair.h.

73 {
74 return !(rhs < lhs);
75}

References FL_NOEXCEPT.

◆ operator<=() [6/8]

template<typename T, typename Container>
bool fl::operator<= ( const queue< T, Container > & lhs,
const queue< T, Container > & rhs )

Non-member less-than-or-equal comparison for queues.

Definition at line 223 of file queue.h.

223 {
224 return lhs.get_container() <= rhs.get_container();
225}

References fl::queue< T, Container >::get_container().

+ Here is the call graph for this function:

◆ operator<=() [7/8]

template<typename T, typename Y>
bool fl::operator<= ( const shared_ptr< T > & lhs,
const shared_ptr< Y > & rhs )

Definition at line 472 of file shared_ptr.h.

472 {
473 return lhs.get() <= rhs.get();
474}

References FL_NOEXCEPT.

◆ operator<=() [8/8]

bool fl::operator<= ( string_view lhs,
string_view rhs )
inline

Definition at line 449 of file string_view.h.

449 {
450 return lhs.compare(rhs) <= 0;
451}

References FL_NOEXCEPT.

◆ operator==() [1/14]

template<typename T, fl::size N>
bool fl::operator== ( const array< T, N > & lhs,
const array< T, N > & rhs )

Definition at line 165 of file array.h.

165 {
166 // return std::equal(lhs.begin(), lhs.end(), rhs.begin());
167 for (fl::size i = 0; i < N; ++i) {
168 if (lhs[i] != rhs[i]) {
169 return false;
170 }
171 }
172 return true;
173}

References FL_NOEXCEPT.

◆ operator==() [2/14]

FASTLED_FORCE_INLINE bool fl::operator== ( const CRGB & lhs,
const CRGB & rhs )

Check if two CRGB objects have the same color data.

Definition at line 733 of file crgb.h.

734{
735 return (lhs.r == rhs.r) && (lhs.g == rhs.g) && (lhs.b == rhs.b);
736}

References FASTLED_FORCE_INLINE, and FL_NOEXCEPT.

Referenced by FL_DISABLE_WARNING().

+ Here is the caller graph for this function:

◆ operator==() [3/14]

template<typename Key, typename Value, typename Less>
bool fl::operator== ( const flat_map< Key, Value, Less > & lhs,
const flat_map< Key, Value, Less > & rhs )

Definition at line 512 of file flat_map.h.

513 {
514 return lhs.size() == rhs.size() &&
515 fl::equal(lhs.begin(), lhs.end(), rhs.begin());
516}
size_type size() const FL_NOEXCEPT
Definition flat_map.h:96

References equal(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ operator==() [4/14]

template<typename Key, typename Less>
bool fl::operator== ( const flat_set< Key, Less > & lhs,
const flat_set< Key, Less > & rhs )

Definition at line 326 of file flat_set.h.

327 {
328 return lhs.size() == rhs.size() &&
329 fl::equal(lhs.begin(), lhs.end(), rhs.begin());
330}
size_type size() const
Definition flat_set.h:88

References fl::flat_set< Key, Less >::begin(), fl::flat_set< Key, Less >::end(), equal(), and fl::flat_set< Key, Less >::size().

+ Here is the call graph for this function:

◆ operator==() [5/14]

template<typename T1, typename T2, typename U1, typename U2>
bool fl::operator== ( const pair< T1, T2 > & lhs,
const pair< U1, U2 > & rhs )

Definition at line 58 of file pair.h.

58 {
59 return lhs.first == rhs.first && lhs.second == rhs.second;
60}

References FL_NOEXCEPT.

◆ operator==() [6/14]

template<typename T, typename Container>
bool fl::operator== ( const queue< T, Container > & lhs,
const queue< T, Container > & rhs )

Non-member equality comparison for queues.

Definition at line 205 of file queue.h.

205 {
206 return lhs.get_container() == rhs.get_container();
207}

References fl::queue< T, Container >::get_container().

+ Here is the call graph for this function:

◆ operator==() [7/14]

template<typename T, typename Y>
bool fl::operator== ( const shared_ptr< T > & lhs,
const shared_ptr< Y > & rhs )

Definition at line 457 of file shared_ptr.h.

457 {
458 return lhs.get() == rhs.get();
459}

References FL_NOEXCEPT.

◆ operator==() [8/14]

template<typename T>
bool fl::operator== ( const shared_ptr< T > & lhs,
fl::nullptr_t  )

Definition at line 487 of file shared_ptr.h.

487 {
488 return lhs.get() == nullptr;
489}

References FL_NOEXCEPT.

◆ operator==() [9/14]

template<typename T, typename Deleter>
bool fl::operator== ( const unique_ptr< T, Deleter > & ptr,
fl::nullptr_t  )

Definition at line 239 of file unique_ptr.h.

239 {
240 return !ptr;
241}

References FL_NOEXCEPT.

◆ operator==() [10/14]

template<typename T1, typename Deleter1, typename T2, typename Deleter2>
bool fl::operator== ( const unique_ptr< T1, Deleter1 > & lhs,
const unique_ptr< T2, Deleter2 > & rhs )

Definition at line 229 of file unique_ptr.h.

229 {
230 return lhs.get() == rhs.get();
231}
pointer get() const FL_NOEXCEPT
Definition unique_ptr.h:97

References FL_NOEXCEPT.

◆ operator==() [11/14]

template<typename T>
bool fl::operator== ( fl::nullptr_t ,
const shared_ptr< T > & rhs )

Definition at line 492 of file shared_ptr.h.

492 {
493 return nullptr == rhs.get();
494}

References FL_NOEXCEPT.

◆ operator==() [12/14]

template<typename T, typename Deleter>
bool fl::operator== ( fl::nullptr_t ,
const unique_ptr< T, Deleter > & ptr )

Definition at line 244 of file unique_ptr.h.

244 {
245 return !ptr;
246}

References FL_NOEXCEPT.

◆ operator==() [13/14]

bool fl::operator== ( string_view lhs,
string_view rhs )
inline

Definition at line 437 of file string_view.h.

437 {
438 return lhs.compare(rhs) == 0;
439}

References FL_NOEXCEPT.

◆ operator==() [14/14]

template<typename T, typename U>
bool fl::operator== ( T lhs,
const not_null< U > & rhs )
constexpr

Definition at line 309 of file not_null.h.

309 {
310 return lhs == rhs.get();
311}

References FL_NOEXCEPT.

◆ operator>() [1/8]

template<typename T, fl::size N>
bool fl::operator> ( const array< T, N > & lhs,
const array< T, N > & rhs )

Definition at line 199 of file array.h.

199 {
200 return rhs < lhs;
201}

References FL_NOEXCEPT.

◆ operator>() [2/8]

FASTLED_FORCE_INLINE bool fl::operator> ( const CRGB & lhs,
const CRGB & rhs )

Check if the sum of the color channels in one CRGB object is greater than another.

Definition at line 754 of file crgb.h.

755{
756 u16 sl, sr;
757 sl = lhs.r + lhs.g + lhs.b;
758 sr = rhs.r + rhs.g + rhs.b;
759 return sl > sr;
760}

References FASTLED_FORCE_INLINE, and FL_NOEXCEPT.

Referenced by FL_DISABLE_WARNING().

+ Here is the caller graph for this function:

◆ operator>() [3/8]

template<typename Key, typename Value, typename Less>
bool fl::operator> ( const flat_map< Key, Value, Less > & lhs,
const flat_map< Key, Value, Less > & rhs )

Definition at line 538 of file flat_map.h.

539 {
540 return rhs < lhs;
541}

References FL_NOEXCEPT.

◆ operator>() [4/8]

template<typename Key, typename Less>
bool fl::operator> ( const flat_set< Key, Less > & lhs,
const flat_set< Key, Less > & rhs )

Definition at line 352 of file flat_set.h.

353 {
354 return rhs < lhs;
355}

◆ operator>() [5/8]

template<typename T1, typename T2, typename U1, typename U2>
bool fl::operator> ( const pair< T1, T2 > & lhs,
const pair< U1, U2 > & rhs )

Definition at line 78 of file pair.h.

78 {
79 return rhs < lhs;
80}

References FL_NOEXCEPT.

◆ operator>() [6/8]

template<typename T, typename Container>
bool fl::operator> ( const queue< T, Container > & lhs,
const queue< T, Container > & rhs )

Non-member greater-than comparison for queues.

Definition at line 229 of file queue.h.

229 {
230 return lhs.get_container() > rhs.get_container();
231}

References fl::queue< T, Container >::get_container().

+ Here is the call graph for this function:

◆ operator>() [7/8]

template<typename T, typename Y>
bool fl::operator> ( const shared_ptr< T > & lhs,
const shared_ptr< Y > & rhs )

Definition at line 477 of file shared_ptr.h.

477 {
478 return lhs.get() > rhs.get();
479}

References FL_NOEXCEPT.

◆ operator>() [8/8]

bool fl::operator> ( string_view lhs,
string_view rhs )
inline

Definition at line 453 of file string_view.h.

453 {
454 return lhs.compare(rhs) > 0;
455}

References FL_NOEXCEPT.

◆ operator>=() [1/8]

template<typename T, fl::size N>
bool fl::operator>= ( const array< T, N > & lhs,
const array< T, N > & rhs )

Definition at line 204 of file array.h.

204 {
205 return !(lhs < rhs);
206}

References FL_NOEXCEPT.

◆ operator>=() [2/8]

FASTLED_FORCE_INLINE bool fl::operator>= ( const CRGB & lhs,
const CRGB & rhs )

Check if the sum of the color channels in one CRGB object is greater than or equal to another.

Definition at line 763 of file crgb.h.

764{
765 u16 sl, sr;
766 sl = lhs.r + lhs.g + lhs.b;
767 sr = rhs.r + rhs.g + rhs.b;
768 return sl >= sr;
769}

References FASTLED_FORCE_INLINE, and FL_NOEXCEPT.

Referenced by FL_DISABLE_WARNING().

+ Here is the caller graph for this function:

◆ operator>=() [3/8]

template<typename Key, typename Value, typename Less>
bool fl::operator>= ( const flat_map< Key, Value, Less > & lhs,
const flat_map< Key, Value, Less > & rhs )

Definition at line 544 of file flat_map.h.

545 {
546 return !(lhs < rhs);
547}

References FL_NOEXCEPT.

◆ operator>=() [4/8]

template<typename Key, typename Less>
bool fl::operator>= ( const flat_set< Key, Less > & lhs,
const flat_set< Key, Less > & rhs )

Definition at line 358 of file flat_set.h.

359 {
360 return !(lhs < rhs);
361}

◆ operator>=() [5/8]

template<typename T1, typename T2, typename U1, typename U2>
bool fl::operator>= ( const pair< T1, T2 > & lhs,
const pair< U1, U2 > & rhs )

Definition at line 83 of file pair.h.

83 {
84 return !(lhs < rhs);
85}

References FL_NOEXCEPT.

◆ operator>=() [6/8]

template<typename T, typename Container>
bool fl::operator>= ( const queue< T, Container > & lhs,
const queue< T, Container > & rhs )

Non-member greater-than-or-equal comparison for queues.

Definition at line 235 of file queue.h.

235 {
236 return lhs.get_container() >= rhs.get_container();
237}

References fl::queue< T, Container >::get_container().

+ Here is the call graph for this function:

◆ operator>=() [7/8]

template<typename T, typename Y>
bool fl::operator>= ( const shared_ptr< T > & lhs,
const shared_ptr< Y > & rhs )

Definition at line 482 of file shared_ptr.h.

482 {
483 return lhs.get() >= rhs.get();
484}

References FL_NOEXCEPT.

◆ operator>=() [8/8]

bool fl::operator>= ( string_view lhs,
string_view rhs )
inline

Definition at line 457 of file string_view.h.

457 {
458 return lhs.compare(rhs) >= 0;
459}

References FL_NOEXCEPT.

◆ operator|() [1/2]

FASTLED_FORCE_INLINE CRGB fl::operator| ( const CRGB & p1,
const CRGB & p2 )

Combine two CRGB objects, taking the largest value of each channel.

Definition at line 795 of file crgb.h.

796{
797 return CRGB( p1.r > p2.r ? p1.r : p2.r,
798 p1.g > p2.g ? p1.g : p2.g,
799 p1.b > p2.b ? p1.b : p2.b);
800}

References FASTLED_FORCE_INLINE, and FL_NOEXCEPT.

Referenced by FL_DISABLE_WARNING().

+ Here is the caller graph for this function:

◆ operator|() [2/2]

RemoteClearFlags fl::operator| ( RemoteClearFlags a,
RemoteClearFlags b )
inline

Definition at line 41 of file types.h.

41 {
42 return static_cast<RemoteClearFlags>(static_cast<u8>(a) | static_cast<u8>(b));
43}

◆ P()

FASTLED_FORCE_INLINE fl::u8 fl::P ( fl::u8 x)

Definition at line 38 of file perlin_float.h.

38 {
39 const fl::u8 idx = x & 255;
40 const fl::u8 *ptr = PERLIN_NOISE + idx;
41 return *ptr;
42}

References FASTLED_FORCE_INLINE, and x.

Referenced by fl::gfx::blur_detail::interior_row< 0, RGB_T, acc_t >::apply(), fl::gfx::blur_detail::interior_row< 1, RGB_T, acc_t >::apply(), fl::gfx::blur_detail::interior_row< 2, RGB_T, acc_t >::apply(), fl::gfx::blur_detail::interior_row< 3, RGB_T, acc_t >::apply(), fl::gfx::blur_detail::interior_row< 4, RGB_T, acc_t >::apply(), fl::gfx::blur_detail::apply_pass(), fl::gfx::blur_detail::apply_pass_alpha(), fl::gfx::blurGaussianImpl(), fl::gfx::blurGaussianMappedImpl(), fl::colorimetric_detail::build_source_matrix(), pnoise(), and fl::gfx::blur_detail::vpass_rowmajor_impl().

+ Here is the caller graph for this function:

◆ p9813FlagByte()

u8 fl::p9813FlagByte ( u8 r,
u8 g,
u8 b )
inline

Generate P9813 flag byte from RGB components.

Parameters
rRed component (0-255)
gGreen component (0-255)
bBlue component (0-255)
Returns
P9813 flag byte (0xC0 | checksum)
Note
Checksum uses top 2 bits of each color channel

Definition at line 52 of file encoder_utils.h.

52 {
53 return 0xC0 | ((~b & 0xC0) >> 2) | ((~g & 0xC0) >> 4) | ((~r & 0xC0) >> 6);
54}

References FL_NOEXCEPT.

Referenced by encodeP9813().

+ Here is the caller graph for this function:

◆ packWS2816Pixel()

pair< CRGB, CRGB > fl::packWS2816Pixel ( u16 s0,
u16 s1,
u16 s2 )
inline

Pack a single 16-bit RGB pixel into two 8-bit CRGB pixels for WS2816.

Parameters
s0First 16-bit channel value (R)
s1Second 16-bit channel value (G)
s2Third 16-bit channel value (B)
Returns
Pair of CRGB pixels encoding the 16-bit values
Note
Channel layout: [R_hi, R_lo, G_hi] and [G_lo, B_hi, B_lo]

Definition at line 36 of file ws2816.h.

36 {
37 // Split each 16-bit channel into high/low bytes
38 u8 b0_hi = s0 >> 8;
39 u8 b0_lo = s0 & 0xFF;
40 u8 b1_hi = s1 >> 8;
41 u8 b1_lo = s1 & 0xFF;
42 u8 b2_hi = s2 >> 8;
43 u8 b2_lo = s2 & 0xFF;
44
45 // Pack into two CRGB pixels: [R_hi, R_lo, G_hi] and [G_lo, B_hi, B_lo]
46 return make_pair(
47 CRGB(b0_hi, b0_lo, b1_hi),
48 CRGB(b1_lo, b2_hi, b2_lo)
49 );
50}

References make_pair().

Referenced by encodeWS2816().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ parse_lnk()

url fl::parse_lnk ( fl::string_view content)
inline

Parse the contents of a .lnk file into a fl::url.

Format: one URL per line. Leading/trailing whitespace on each line is ignored. Blank lines and lines whose first non-whitespace character is # are treated as comments and skipped. The first non-comment, non-blank line is returned as a fl::url.

Future-compat: additional lines (metadata like sha256=..., fallback=...) are ignored by this v1 parser so older binaries keep working when future .lnk files grow richer.

See also parse_lnk_with_metadata() which returns the URL alongside the (currently unenforced) metadata fields for forward-compat callers.

Definition at line 274 of file url.h.

274 {
275 fl::size pos = 0;
276 while (pos < content.size()) {
277 fl::size eol = content.find('\n', pos);
278 fl::size lineEnd = (eol == fl::string_view::npos) ? content.size() : eol;
279 fl::string_view line = content.substr(pos, lineEnd - pos);
280 pos = (eol == fl::string_view::npos) ? content.size() : eol + 1;
281
282 // Strip a trailing '\r' from CRLF line endings.
283 if (!line.empty() && line[line.size() - 1] == '\r') {
284 line = line.substr(0, line.size() - 1);
285 }
286
287 // Trim leading whitespace.
288 fl::size s = 0;
289 while (s < line.size() &&
290 (line[s] == ' ' || line[s] == '\t')) {
291 ++s;
292 }
293 // Trim trailing whitespace.
294 fl::size e = line.size();
295 while (e > s &&
296 (line[e - 1] == ' ' || line[e - 1] == '\t')) {
297 --e;
298 }
299 line = line.substr(s, e - s);
300
301 if (line.empty()) {
302 continue;
303 }
304 if (line[0] == '#') {
305 continue;
306 }
307 return url(line);
308 }
309 return url();
310}
static constexpr fl::size npos
Definition string_view.h:35
fl::size find(char ch, fl::size pos=0) const FL_NOEXCEPT
string_view substr(fl::size pos=0, fl::size count=npos) const FL_NOEXCEPT
Definition url.h:15

References fl::string_view::empty(), FL_NOEXCEPT, fl::string_view::npos, pos, fl::string_view::size(), and fl::string_view::substr().

+ Here is the call graph for this function:

◆ parse_lnk_with_metadata()

LnkMetadata fl::parse_lnk_with_metadata ( fl::string_view content)
inline

Parse a .lnk file into URL + metadata (forward-compat).

Accepts the same format as parse_lnk() and additionally scans non-comment key=value lines that follow the primary URL. Recognized keys:

v1: the returned metadata is parsed but NOT enforced by the runtime. sha256 is not verified and fallback is not retried. These fields are reserved for future integrity/retry features so existing .lnk files remain valid when richer behavior lands.

Definition at line 325 of file url.h.

325 {
326 LnkMetadata out;
327 bool gotPrimary = false;
328 fl::size pos = 0;
329 while (pos < content.size()) {
330 fl::size eol = content.find('\n', pos);
331 fl::size lineEnd = (eol == fl::string_view::npos) ? content.size() : eol;
332 fl::string_view line = content.substr(pos, lineEnd - pos);
333 pos = (eol == fl::string_view::npos) ? content.size() : eol + 1;
334
335 if (!line.empty() && line[line.size() - 1] == '\r') {
336 line = line.substr(0, line.size() - 1);
337 }
338
339 fl::size s = 0;
340 while (s < line.size() &&
341 (line[s] == ' ' || line[s] == '\t')) {
342 ++s;
343 }
344 fl::size e = line.size();
345 while (e > s &&
346 (line[e - 1] == ' ' || line[e - 1] == '\t')) {
347 --e;
348 }
349 line = line.substr(s, e - s);
350
351 if (line.empty() || line[0] == '#') {
352 continue;
353 }
354
355 if (!gotPrimary) {
356 out.primary = url(line);
357 gotPrimary = true;
358 continue;
359 }
360
361 // Subsequent lines: look for "key=value" metadata.
362 fl::size eq = line.find('=');
363 if (eq == fl::string_view::npos) {
364 // Unknown non-kv line, ignore (forward-compat).
365 continue;
366 }
367 fl::string_view key = line.substr(0, eq);
368 fl::string_view value = line.substr(eq + 1);
369 if (key == "sha256") {
370 out.sha256 = fl::string(value.data(), value.size());
371 } else if (key == "fallback") {
372 out.fallback = url(value);
373 }
374 // else: unknown key, ignore.
375 }
376 return out;
377}
fl::url primary
First non-comment URL in the file.
Definition url.h:253
fl::url fallback
Mirror URL used if primary fails (reserved).
Definition url.h:255
fl::string sha256
Hex-encoded sha256 of the expected asset (reserved).
Definition url.h:254
Metadata extracted from a .lnk asset link file.
Definition url.h:252

References fl::string_view::empty(), fl::LnkMetadata::fallback, fl::string_view::find(), FL_NOEXCEPT, fl::string_view::npos, pos, fl::LnkMetadata::primary, fl::LnkMetadata::sha256, fl::string_view::size(), fl::string_view::substr(), and type_rank< T >::value.

+ Here is the call graph for this function:

◆ parseFloat()

float fl::parseFloat ( const char * str,
fl::size len )

Parse a floating point number from a character buffer.

Parameters
strThe character buffer to parse
lenThe length of the buffer
Returns
The parsed float value (0.0f if parsing fails)

Definition at line 199 of file charconv.cpp.hpp.

199 {
200 float result = 0.0f; // The resulting number
201 float sign = 1.0f; // Positive or negative
202 float fraction = 0.0f; // Fractional part
203 float divisor = 1.0f; // Divisor for the fractional part
204 int isFractional = 0; // Whether the current part is fractional
205
206 fl::size pos = 0; // Current position in the string
207
208 // Handle empty input
209 if (len == 0) {
210 return 0.0f;
211 }
212
213 // Skip leading whitespace (manual check instead of isspace)
214 while (pos < len &&
215 (str[pos] == ' ' || str[pos] == '\t' || str[pos] == '\n' ||
216 str[pos] == '\r' || str[pos] == '\f' || str[pos] == '\v')) {
217 pos++;
218 }
219
220 // Handle optional sign
221 if (pos < len && str[pos] == '-') {
222 sign = -1.0f;
223 pos++;
224 } else if (pos < len && str[pos] == '+') {
225 pos++;
226 }
227
228 // Main parsing loop
229 while (pos < len) {
230 if (str[pos] >= '0' && str[pos] <= '9') {
231 if (isFractional) {
232 divisor *= 10.0f;
233 fraction += (str[pos] - '0') / divisor;
234 } else {
235 result = result * 10.0f + (str[pos] - '0');
236 }
237 } else if (str[pos] == '.' && !isFractional) {
238 isFractional = 1;
239 } else {
240 // Stop parsing at invalid characters
241 break;
242 }
243 pos++;
244 }
245
246 // Combine integer and fractional parts
247 result = result + fraction;
248
249 // Apply the sign
250 return sign * result;
251}

References pos, and sign().

Referenced by fl::float_conversion_visitor< FloatType >::operator()(), fl::float_conversion_visitor< double >::operator()(), and fl::basic_string::toFloat().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ parseInt() [1/2]

int fl::parseInt ( const char * str)

Parse an integer from a null-terminated string.

Parameters
strThe null-terminated string to parse
Returns
The parsed integer value (0 if parsing fails)

Definition at line 287 of file charconv.cpp.hpp.

287 {
288 // Calculate length manually to avoid strlen dependency
289 fl::size len = 0;
290 while (str[len] != '\0') {
291 len++;
292 }
293 return parseInt(str, len);
294}
int parseInt(const char *str, fl::size len)
Parse an integer from a character buffer.

References parseInt().

+ Here is the call graph for this function:

◆ parseInt() [2/2]

int fl::parseInt ( const char * str,
fl::size len )

Parse an integer from a character buffer.

Parameters
strThe character buffer to parse
lenThe length of the buffer
Returns
The parsed integer value (0 if parsing fails)

Definition at line 253 of file charconv.cpp.hpp.

253 {
254 int result = 0;
255 int sign = 1;
256 fl::size pos = 0;
257
258 // Handle empty input
259 if (len == 0) {
260 return 0;
261 }
262
263 // Skip leading whitespace
264 while (pos < len &&
265 (str[pos] == ' ' || str[pos] == '\t' || str[pos] == '\n' ||
266 str[pos] == '\r' || str[pos] == '\f' || str[pos] == '\v')) {
267 pos++;
268 }
269
270 // Handle optional sign
271 if (pos < len && str[pos] == '-') {
272 sign = -1;
273 pos++;
274 } else if (pos < len && str[pos] == '+') {
275 pos++;
276 }
277
278 // Parse digits
279 while (pos < len && str[pos] >= '0' && str[pos] <= '9') {
280 result = result * 10 + (str[pos] - '0');
281 pos++;
282 }
283
284 return sign * result;
285}

References pos, and sign().

Referenced by fl::HttpRequestParser::feed(), fl::HttpResponseParser::feed(), fl::anonymous_namespace{json.cpp.hpp}::JsonBuilder::on_token(), fl::int_conversion_visitor< IntType >::operator()(), fl::int_conversion_visitor< i64 >::operator()(), fl::anonymous_namespace{json.cpp.hpp}::JsonBuilder::parse_float_array(), fl::anonymous_namespace{json.cpp.hpp}::JsonBuilder::parse_int_array(), parseInt(), fl::HttpResponseParser::parseStatusLine(), and fl::anonymous_namespace{json.cpp.hpp}::JsonTokenizer::scan_array_lookahead().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ parseMp4()

Mp4TrackInfo fl::parseMp4 ( fl::span< const fl::u8 > data,
fl::string * error )

Definition at line 106 of file mp4_parser.cpp.hpp.

106 {
107 Mp4TrackInfo info;
108
109 if (data.size() < 8) {
110 if (error) *error = "Data too small for MP4";
111 return info;
112 }
113
114 // Find moov box at top level
115 fl::size moovPos = findBox(data, 0, data.size(), "moov");
116 if (moovPos == fl::size(-1)) {
117 if (error) *error = "No moov box found";
118 return info;
119 }
120
121 bool ok = true;
122 fl::u32 moovSize = readU32BE(data, moovPos, ok);
123 if (!ok) {
124 if (error) *error = "Invalid moov box size";
125 return info;
126 }
127 fl::size moovEnd = moovPos + moovSize;
128 if (moovEnd > data.size()) moovEnd = data.size();
129 fl::size moovBody = moovPos + 8;
130
131 // Find trak box inside moov
132 fl::size trakPos = findBox(data, moovBody, moovEnd, "trak");
133 if (trakPos == fl::size(-1)) {
134 if (error) *error = "No trak box found";
135 return info;
136 }
137
138 fl::u32 trakSize = readU32BE(data, trakPos, ok);
139 if (!ok) {
140 if (error) *error = "Invalid trak box size";
141 return info;
142 }
143 fl::size trakEnd = trakPos + trakSize;
144 if (trakEnd > moovEnd) trakEnd = moovEnd;
145 fl::size trakBody = trakPos + 8;
146
147 // Find mdia box inside trak
148 fl::size mdiaPos = findBox(data, trakBody, trakEnd, "mdia");
149 if (mdiaPos == fl::size(-1)) {
150 if (error) *error = "No mdia box found";
151 return info;
152 }
153
154 fl::u32 mdiaSize = readU32BE(data, mdiaPos, ok);
155 if (!ok) {
156 if (error) *error = "Invalid mdia box size";
157 return info;
158 }
159 fl::size mdiaEnd = mdiaPos + mdiaSize;
160 if (mdiaEnd > trakEnd) mdiaEnd = trakEnd;
161 fl::size mdiaBody = mdiaPos + 8;
162
163 // Find minf box inside mdia
164 fl::size minfPos = findBox(data, mdiaBody, mdiaEnd, "minf");
165 if (minfPos == fl::size(-1)) {
166 if (error) *error = "No minf box found";
167 return info;
168 }
169
170 fl::u32 minfSize = readU32BE(data, minfPos, ok);
171 if (!ok) {
172 if (error) *error = "Invalid minf box size";
173 return info;
174 }
175 fl::size minfEnd = minfPos + minfSize;
176 if (minfEnd > mdiaEnd) minfEnd = mdiaEnd;
177 fl::size minfBody = minfPos + 8;
178
179 // Find stbl box inside minf
180 fl::size stblPos = findBox(data, minfBody, minfEnd, "stbl");
181 if (stblPos == fl::size(-1)) {
182 if (error) *error = "No stbl box found";
183 return info;
184 }
185
186 fl::u32 stblSize = readU32BE(data, stblPos, ok);
187 if (!ok) {
188 if (error) *error = "Invalid stbl box size";
189 return info;
190 }
191 fl::size stblEnd = stblPos + stblSize;
192 if (stblEnd > minfEnd) stblEnd = minfEnd;
193 fl::size stblBody = stblPos + 8;
194
195 // Find stsd box inside stbl
196 fl::size stsdPos = findBox(data, stblBody, stblEnd, "stsd");
197 if (stsdPos == fl::size(-1)) {
198 if (error) *error = "No stsd box found";
199 return info;
200 }
201
202 fl::u32 stsdSize = readU32BE(data, stsdPos, ok);
203 if (!ok) {
204 if (error) *error = "Invalid stsd box size";
205 return info;
206 }
207 fl::size stsdEnd = stsdPos + stsdSize;
208 if (stsdEnd > stblEnd) stsdEnd = stblEnd;
209
210 // stsd is a full box: 8 byte header + 4 byte version/flags + 4 byte entry_count
211 fl::size stsdBody = stsdPos + 8 + 4 + 4;
212 if (stsdBody > stsdEnd) {
213 if (error) *error = "stsd box too small";
214 return info;
215 }
216
217 // Look for avc1 sample entry inside stsd
218 fl::size avc1Pos = findBox(data, stsdBody, stsdEnd, "avc1");
219 if (avc1Pos == fl::size(-1)) {
220 if (error) *error = "No avc1 sample entry found (not H.264)";
221 return info;
222 }
223
224 fl::u32 avc1Size = readU32BE(data, avc1Pos, ok);
225 if (!ok) {
226 if (error) *error = "Invalid avc1 box size";
227 return info;
228 }
229 fl::size avc1End = avc1Pos + avc1Size;
230 if (avc1End > stsdEnd) avc1End = stsdEnd;
231
232 // avc1 sample entry layout:
233 // 8 bytes: box header (size + "avc1")
234 // 6 bytes: reserved
235 // 2 bytes: data_reference_index
236 // 2 bytes: pre_defined
237 // 2 bytes: reserved
238 // 12 bytes: pre_defined[3]
239 // 2 bytes: width
240 // 2 bytes: height
241 // ... then sub-boxes including avcC
242 fl::size avc1Body = avc1Pos + 8 + 6 + 2 + 2 + 2 + 12;
243 if (avc1Body + 4 > avc1End) {
244 if (error) *error = "avc1 box too small for dimensions";
245 return info;
246 }
247
248 info.width = readU16BE(data, avc1Body, ok);
249 info.height = readU16BE(data, avc1Body + 2, ok);
250 if (!ok) {
251 if (error) *error = "Failed to read dimensions from avc1";
252 return info;
253 }
254
255 // Skip to sub-boxes: avc1Body + 4 (width/height) + 4 (horiz res) + 4 (vert res) +
256 // 4 (reserved) + 2 (frame_count) + 32 (compressor_name) + 2 (depth) + 2 (pre_defined)
257 fl::size subBoxStart = avc1Body + 4 + 4 + 4 + 4 + 2 + 32 + 2 + 2;
258
259 // Find avcC box inside avc1
260 fl::size avcCPos = findBox(data, subBoxStart, avc1End, "avcC");
261 if (avcCPos == fl::size(-1)) {
262 if (error) *error = "No avcC box found inside avc1";
263 return info;
264 }
265
266 fl::u32 avcCSize = readU32BE(data, avcCPos, ok);
267 if (!ok) {
268 if (error) *error = "Invalid avcC box size";
269 return info;
270 }
271 fl::size avcCEnd = avcCPos + avcCSize;
272 if (avcCEnd > avc1End) avcCEnd = avc1End;
273
274 if (!parseAvcC(data, avcCPos, avcCEnd, info)) {
275 if (error) *error = "Failed to parse avcC configuration record";
276 return info;
277 }
278
279 info.isValid = true;
280 return info;
281}
bool parseAvcC(fl::span< const fl::u8 > data, fl::size offset, fl::size boxEnd, Mp4TrackInfo &info)
fl::u16 readU16BE(fl::span< const fl::u8 > data, fl::size offset, bool &ok)
fl::size findBox(fl::span< const fl::u8 > data, fl::size start, fl::size end, const char *type)

References fl::Mp4TrackInfo::height, fl::Mp4TrackInfo::isValid, fl::span< T, Extent >::size(), and fl::Mp4TrackInfo::width.

Referenced by fl::H264::parseH264Info().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ parseV2SegmentArray()

static bool fl::parseV2SegmentArray ( const fl::json & segmentsArr,
fl::flat_map< string, ScreenMap > * segmentMaps,
string * err )
static

Definition at line 114 of file screenmap.cpp.hpp.

116 {
117 if (!segmentsArr.has_value() || !segmentsArr.is_array()) {
118 *err = "v2 'segments' is not an array";
119 return false;
120 }
121
122 auto arrPtr = segmentsArr.as_array();
123 if (!arrPtr) {
124 *err = "v2 'segments' array could not be read";
125 return false;
126 }
127
128 for (const auto& elem : *arrPtr) {
129 if (!elem) {
130 *err = "v2 segment is null";
131 return false;
132 }
133 fl::json segVal(elem);
134 if (!segVal.has_value() || !segVal.is_object()) {
135 *err = "v2 segment is not an object";
136 return false;
137 }
138
139 // Required: id
140 if (!segVal.contains("id") || !segVal["id"].has_value()) {
141 *err = "v2 segment missing 'id'";
142 return false;
143 }
144 auto idOpt = segVal["id"].as_string();
145 if (!idOpt) {
146 *err = "v2 segment 'id' is not a string";
147 return false;
148 }
149 string id = *idOpt;
150
151 // Required: x
152 if (!segVal.contains("x") || !segVal["x"].has_value() || !segVal["x"].is_array()) {
153 *err = "v2 segment '" + id + "' missing or invalid 'x' array";
154 return false;
155 }
156 fl::vector<float> x_array = jsonArrayToFloatVector(segVal["x"]);
157
158 // Required: y
159 if (!segVal.contains("y") || !segVal["y"].has_value() || !segVal["y"].is_array()) {
160 *err = "v2 segment '" + id + "' missing or invalid 'y' array";
161 return false;
162 }
163 fl::vector<float> y_array = jsonArrayToFloatVector(segVal["y"]);
164
165 // Optional: diameter (not in canonical v2 but accepted as a backward-compat
166 // hint when present; otherwise the per-group `diameter` could be wired here
167 // in a future iteration).
168 float diameter = -1.0f;
169 if (segVal.contains("diameter") && segVal["diameter"].has_value()) {
170 auto diameterOpt = segVal["diameter"].as_float();
171 if (diameterOpt) {
172 diameter = static_cast<float>(*diameterOpt);
173 }
174 }
175
176 auto n = fl::min(x_array.size(), y_array.size());
177 ScreenMap segment_map(n, diameter);
178 for (size_t i = 0; i < n; i++) {
179 segment_map.set(i, vec2f{x_array[i], y_array[i]});
180 }
181 (*segmentMaps)[id] = fl::move(segment_map);
182 }
183 return true;
184}
const json_array * as_array() const FL_NOEXCEPT
Definition json.h:287
fl::size size() const FL_NOEXCEPT
FL_DISABLE_WARNING_PUSH U constexpr common_type_t< T, U > min(T a, U b) FL_NOEXCEPT
Definition math.h:71
vec2< float > vec2f
Definition geometry.h:333
fl::vector< float > jsonArrayToFloatVector(const fl::json &jsonArray)

References fl::json::as_float(), fl::json::as_string(), fl::json::contains(), FL_NOEXCEPT, fl::json::has_value(), fl::json::is_array(), fl::json::is_object(), jsonArrayToFloatVector(), min(), fl::fl::move(), fl::ScreenMap::set(), and fl::vector_basic::size().

Referenced by fl::ScreenMap::ParseJson().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ peek()

int fl::peek ( )

Definition at line 123 of file cstdio.cpp.hpp.

123 {
124 return platforms::peek();
125}

Referenced by fl::SerialPort::peek().

+ Here is the caller graph for this function:

◆ pinMap()

void fl::pinMap ( fl::span< PinInfo > pins)

Resolve port IDs for an array of PinInfo in-place.

For each entry, sets port = pinToPort(pin). Skips entries where pin < 0.

Definition at line 395 of file pins.cpp.hpp.

395 {
396 for (fl::size i = 0; i < pins.size(); ++i) {
397 if (pins[i].pin >= 0) {
398 pins[i].port = pinToPort(pins[i].pin);
399 }
400 }
401}
int pinToPort(int pin)
Map a runtime pin number to an integer port ID using FastPin<N>::port().
Definition pins.cpp.hpp:150

References pins, and pinToPort().

+ Here is the call graph for this function:

◆ pinMode()

void fl::pinMode ( int pin,
PinMode mode )

Set pin mode (input, output, pull-up, pull-down)

Parameters
pinPin number (platform-specific numbering)
modePin mode configuration

Definition at line 378 of file pin.cpp.hpp.

378 {
379 // Release any active PWM channel on this pin
380 // When pinMode is called, the pin's function is being changed,
381 // so any existing PWM configuration should be cleared
383 if (ch) {
385 }
386
387 platforms::pinMode(pin, mode);
388}
void releaseChannel(PwmPinState *ch)
Definition pin.cpp.hpp:205

References fl::pwm_state::findByPin(), and fl::pwm_state::releaseChannel().

Referenced by fl::third_party::ezWS2812gpio::begin(), initPanels(), fl::DigitalPinImpl::setPinMode(), setPwmFrequency(), and fl::validation::testRxChannel().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ pinToPort()

int fl::pinToPort ( int pin)

Map a runtime pin number to an integer port ID using FastPin<N>::port().

Pins that share the same GPIO port register return the same ID.

Parameters
pinPin number (0-63)
Returns
Integer port ID (0-based), or -1 for out-of-range pins

Definition at line 150 of file pins.cpp.hpp.

150 {
151 if (pin < 0) return -1;
152 return portValueToId(digitalPinToPort(pin));
153}

Referenced by fl::DigitalMultiWrite16::allSamePort(), fl::DigitalMultiWrite8::allSamePort(), fl::DigitalMultiWrite16::init(), fl::DigitalMultiWrite8::init(), and pinMap().

+ Here is the caller graph for this function:

◆ pnoise()

FASTLED_FORCE_INLINE float fl::pnoise ( float x,
float y,
float z )

Definition at line 65 of file perlin_float.h.

65 {
66 int X = (int)fl::floorf(x) & 255, /* FIND UNIT CUBE THAT */
67 Y = (int)fl::floorf(y) & 255, /* CONTAINS POINT. */
68 Z = (int)fl::floorf(z) & 255;
69 x -= fl::floorf(x); /* FIND RELATIVE X,Y,Z */
70 y -= fl::floorf(y); /* OF POINT IN CUBE. */
71 z -= fl::floorf(z);
72 float u = fade(x), /* COMPUTE FADE CURVES */
73 v = fade(y), /* FOR EACH OF X,Y,Z. */
74 w = fade(z);
75 int A = P(X) + Y, AA = P(A) + Z,
76 AB = P(A + 1) + Z, /* HASH COORDINATES OF */
77 B = P(X + 1) + Y, BA = P(B) + Z,
78 BB = P(B + 1) + Z; /* THE 8 CUBE CORNERS, */
79
80 return lerp(w,
81 lerp(v,
82 lerp(u, grad(P(AA), x, y, z), /* AND ADD */
83 grad(P(BA), x - 1, y, z)), /* BLENDED */
84 lerp(u, grad(P(AB), x, y - 1, z), /* RESULTS */
85 grad(P(BB), x - 1, y - 1, z))), /* FROM 8 */
86 lerp(v,
87 lerp(u, grad(P(AA + 1), x, y, z - 1), /* CORNERS */
88 grad(P(BA + 1), x - 1, y, z - 1)), /* OF CUBE */
89 lerp(u, grad(P(AB + 1), x, y - 1, z - 1),
90 grad(P(BB + 1), x - 1, y - 1, z - 1))));
91}
float floorf(float value) FL_NOEXCEPT
Definition math.h:304
FASTLED_FORCE_INLINE float fade(float t)
FASTLED_FORCE_INLINE fl::u8 P(fl::u8 x)
FASTLED_FORCE_INLINE float grad(int hash, float x, float y, float z)
FASTLED_FORCE_INLINE float lerp(float t, float a, float b)

References B, fade(), FASTLED_FORCE_INLINE, floorf(), grad(), lerp(), P(), x, y, and z.

Referenced by calculate_oscillators(), render_value(), and autoresearch::animartrix_check::runPerlinBenchmark().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ pop_heap() [1/2]

template<typename Iterator>
void fl::pop_heap ( Iterator first,
Iterator last )

Definition at line 67 of file priority_queue.h.

67 {
68 using value_type = typename fl::remove_reference<decltype(*first)>::type;
69 pop_heap(first, last, [](const value_type &a, const value_type &b) { return a < b; });
70}
void pop_heap(Iterator first, Iterator last, Compare comp)

References pop_heap().

+ Here is the call graph for this function:

◆ pop_heap() [2/2]

template<typename Iterator, typename Compare>
void fl::pop_heap ( Iterator first,
Iterator last,
Compare comp )

Definition at line 58 of file priority_queue.h.

58 {
59 --last;
60 auto tmp = *first;
61 *first = *last;
62 *last = tmp;
63
64 sift_down(first, last, first, comp);
65}
void sift_down(Iterator first, Iterator last, Iterator start, Compare comp)

References sift_down().

Referenced by fl::PriorityQueue< T, Compare, VectorT >::pop(), and pop_heap().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ pow() [1/3]

double fl::pow ( double base,
double exponent )
inline

Definition at line 437 of file math.h.

437{ return pow_impl_double(base, exponent); }
double pow_impl_double(double base, double exponent)
Definition math.cpp.hpp:338

References FL_NOEXCEPT, and pow_impl_double().

+ Here is the call graph for this function:

◆ pow() [2/3]

template<typename T>
enable_if< is_fixed_point< T >::value, T >::type fl::pow ( T base,
T exp )
inline

Definition at line 569 of file fixed_point.h.

569{ return T::pow(base, exp); }

References exp(), and FL_NOEXCEPT.

Referenced by rainbowWave().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ pow() [3/3]

template<typename T>
enable_if< is_integral< T >::value, float >::type fl::pow ( T base,
T exponent )
inline

Definition at line 439 of file math.h.

439{ return pow_impl_float(static_cast<float>(base), static_cast<float>(exponent)); }
float pow_impl_float(float base, float exponent)
Definition math.cpp.hpp:322

References FL_NOEXCEPT, and pow_impl_float().

+ Here is the call graph for this function:

◆ pow_impl_double()

double fl::pow_impl_double ( double base,
double exponent )

Definition at line 338 of file math.cpp.hpp.

338 {
339#if FL_MATH_USE_LIBM
340 return ::pow(base, exponent);
341#else
342 if (exponent == 0.0) return 1.0;
343 int ie = static_cast<int>(exponent);
344 if (static_cast<double>(ie) == exponent && ie >= -8 && ie <= 8) {
345 double r = 1.0;
346 if (ie > 0) { for (int i = 0; i < ie; ++i) r *= base; return r; }
347 if (ie < 0) { for (int i = 0; i < -ie; ++i) r *= base; return 1.0 / r; }
348 }
349 if (base <= 0.0) return 0.0;
350 return exp_impl_double(exponent * detail::log_natural_<double>(base));
351#endif
352}

References exp_impl_double(), and fl::detail::log_natural_().

Referenced by pow().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ pow_impl_float()

float fl::pow_impl_float ( float base,
float exponent )

Definition at line 322 of file math.cpp.hpp.

322 {
323#if FL_MATH_USE_LIBM
324 return ::powf(base, exponent);
325#else
326 if (exponent == 0.0f) return 1.0f;
327 int ie = static_cast<int>(exponent);
328 if (static_cast<float>(ie) == exponent && ie >= -8 && ie <= 8) {
329 float r = 1.0f;
330 if (ie > 0) { for (int i = 0; i < ie; ++i) r *= base; return r; }
331 if (ie < 0) { for (int i = 0; i < -ie; ++i) r *= base; return 1.0f / r; }
332 }
333 if (base <= 0.0f) return 0.0f;
334 return exp_impl_float(exponent * detail::log_natural_<float>(base));
335#endif
336}

References exp_impl_float(), and fl::detail::log_natural_().

Referenced by pow(), and powf().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ powf()

float fl::powf ( float base,
float exponent )
inline

Definition at line 436 of file math.h.

436{ return pow_impl_float(base, exponent); }

References FL_NOEXCEPT, and pow_impl_float().

Referenced by fl::audio::detector::Vibe::adjustRateToFPS(), fl::GielisCurvePath::compute(), fl::HeartPath::compute(), fl::Distance_Experiment::draw(), fl::Distance_Experiment_FP::draw(), drawWaveform(), fl::FlowFieldFloat::flowAdvect(), and fl::audio::detector::Note::midiNoteToFrequency().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ powfp()

template<typename T>
enable_if< is_fixed_point< T >::value, T >::type fl::powfp ( T base,
T exp )
inline

Definition at line 620 of file fixed_point.h.

620 {
621 return T::pow(base, exp);
622}

References exp(), and FL_NOEXCEPT.

Referenced by expfp().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ print()

void fl::print ( const char * str)

Definition at line 77 of file cstdio.cpp.hpp.

77 {
78 if (!str) return;
79 // Check global log level - if NONE, suppress all output
80 if (gLogLevel == static_cast<u8>(LogLevel::FL_LOG_LEVEL_NONE)) return;
81
82#ifdef FASTLED_TESTING
83 // Check for injected handler first
84 if (get_print_handler()) {
85 get_print_handler()(str);
86 return;
87 }
88#endif
89
90 // Delegate to platform implementation
91 platforms::print(str);
92}

References FL_LOG_LEVEL_NONE, and gLogLevel.

Referenced by fl::test::SerialReporter::assertResult(), fl::AsyncLogger::flush(), fl::AsyncLogger::flushN(), fl::ostream::operator<<(), fl::ostream::operator<<(), fl::ostream::operator<<(), fl::ostream::operator<<(), fl::ostream::operator<<(), fl::ostream::operator<<(), fl::ostream::operator<<(), fl::ostream::operator<<(), fl::ostream::operator<<(), fl::ostream::operator<<(), fl::ostream::operator<<(), fl::ostream::operator<<(), fl::SerialPort::print(), printf(), fl::test::SerialReporter::subcaseStart(), fl::test::SerialReporter::testCaseEnd(), fl::test::SerialReporter::testCaseStart(), fl::test::SerialReporter::testRunEnd(), and fl::SerialPort::write().

+ Here is the caller graph for this function:

◆ printf()

template<typename... Args>
void fl::printf ( const char * format,
const Args &... args )

Printf-like formatting function that prints directly to the platform output.

Parameters
formatFormat string with placeholders like "%d", "%s", "%f" etc.
argsArguments to format

Supported format specifiers:

Example usage:

fl::printf("Value: %d, Name: %s", 42, "test");
fl::printf("Float: %.2f", 3.14159);
int* ptr = &value;
fl::printf("Pointer: %p", ptr);
void printf(const char *format, const Args &... args) FL_NOEXCEPT
Printf-like formatting function that prints directly to the platform output.
Definition stdio.h:635
Parameters
formatFormat string with placeholders like "%d", "%s", "%f" etc.
argsArguments to format

Supported format specifiers:

Example usage:

fl::printf("Value: %d, Name: %s", 42, "test");
fl::printf("Float: %.2f", 3.14159);
Examples
Chromancer.ino.

Definition at line 635 of file stdio.h.

635 {
636 sstream stream;
638 fl::print(stream.str().c_str());
639}
const char * c_str() const FL_NOEXCEPT
void format_impl(sstream &stream, const char *format) FL_NOEXCEPT
Definition stdio.h:563
void print(const char *str)

References args, fl::basic_string::c_str(), FL_NOEXCEPT, format(), fl::printf_detail::format_impl(), print(), and fl::sstream::str().

Referenced by fl::test::DefaultReporter::assertResult(), fl::test::TestContext::checkTimeout(), fl::test::fail(), handleClientResponse(), handleResponse(), fl::test::TestContext::listTests(), fl::third_party::MP3Decode(), fl::test::outputCapture(), fl::test::outputMessage(), fl::test::SerialReporter::print(), sendAsyncRequest(), sendAsyncStreamRequest(), sendSyncRequest(), setup(), fl::test::skipTest(), fl::test::DefaultReporter::subcaseStart(), fl::test::DefaultReporter::testCaseEnd(), fl::test::DefaultReporter::testCaseStart(), fl::test::DefaultReporter::testRunEnd(), and fl::test::DefaultReporter::testRunStart().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ println()

void fl::println ( const char * str)

Definition at line 94 of file cstdio.cpp.hpp.

94 {
95 if (!str) return;
96 // Check global log level - if NONE, suppress all output
97 if (gLogLevel == static_cast<u8>(LogLevel::FL_LOG_LEVEL_NONE)) return;
98
99#ifdef FASTLED_TESTING
100 // Check for injected handler first
101 if (get_println_handler()) {
102 get_println_handler()(str);
103 return;
104 }
105#endif
106
107 // Delegate to platform implementation
108 platforms::println(str);
109}

References FL_LOG_LEVEL_NONE, and gLogLevel.

Referenced by fl::AsyncLogger::flush(), fl::AsyncLogger::flushN(), fl::detail::log_emit(), printJsonRaw(), fl::SerialPort::println(), fl::SerialPort::println(), fl::SerialWriter::println(), and printStreamRaw().

+ Here is the caller graph for this function:

◆ psram_memory_resource()

memory_resource * fl::psram_memory_resource ( )

Get the PSRAM memory resource (wraps PSRamAllocate / PSRamDeallocate).

Definition at line 78 of file memory_resource.cpp.hpp.

78 {
79 static PSRamMemoryResource instance;
80 return &instance;
81}

Referenced by fl::vector_psram< T >::vector_psram(), and fl::vector_psram< T >::vector_psram().

+ Here is the caller graph for this function:

◆ PSRamAllocate()

void * fl::PSRamAllocate ( fl::size size,
bool zero )

Definition at line 119 of file allocator.cpp.hpp.

119 {
120
121 void *ptr = Alloc(size);
122 if (ptr && zero) {
123 fl::memset(ptr, 0, size);
124 }
125
126#if defined(FASTLED_TESTING)
127 if (gMallocFreeHook && ptr) {
128 MemoryGuard allows_hook;
129 if (allows_hook.enabled()) {
130 gMallocFreeHook->onMalloc(ptr, size);
131 }
132 }
133#endif
134
135 return ptr;
136}

References memset().

Referenced by fl::PSRamAllocator< T >::Alloc(), and fl::anonymous_namespace{memory_resource.cpp.hpp}::PSRamMemoryResource::do_allocate().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ PSRamDeallocate()

void fl::PSRamDeallocate ( void * ptr)

Definition at line 138 of file allocator.cpp.hpp.

138 {
139#if defined(FASTLED_TESTING)
140 if (gMallocFreeHook && ptr) {
141 // gMallocFreeHook->onFree(ptr);
142 MemoryGuard allows_hook;
143 if (allows_hook.enabled()) {
144 gMallocFreeHook->onFree(ptr);
145 }
146 }
147#endif
148
149 Dealloc(ptr);
150}

Referenced by fl::anonymous_namespace{memory_resource.cpp.hpp}::PSRamMemoryResource::do_deallocate(), fl::PSRamAllocator< T >::Free(), and fl::PSRamDeleter< T >::operator()().

+ Here is the caller graph for this function:

◆ ptr_to_int()

template<typename T>
uptr fl::ptr_to_int ( T * ptr)

Definition at line 71 of file bit_cast.h.

71 {
72 return bit_cast<uptr>(ptr);
73}

References bit_cast(), and FL_NOEXCEPT.

Referenced by fl::CLEDController::endShowLeds(), FL_ALIGNAS(), fl::format_detail::format_pointer(), fl::isr::is_aligned(), fl::isr::memcpy(), fl::isr::memset_zero(), and fl::Hash< T * >::operator()().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ push_heap() [1/2]

template<typename Iterator>
void fl::push_heap ( Iterator first,
Iterator last )

Definition at line 52 of file priority_queue.h.

52 {
53 using value_type = typename fl::remove_reference<decltype(*first)>::type;
54 push_heap(first, last, [](const value_type &a, const value_type &b) { return a < b; });
55}
void push_heap(Iterator first, Iterator last, Compare comp)

References push_heap().

+ Here is the call graph for this function:

◆ push_heap() [2/2]

template<typename Iterator, typename Compare>
void fl::push_heap ( Iterator first,
Iterator last,
Compare comp )

Definition at line 38 of file priority_queue.h.

38 {
39 auto pos = last - 1;
40 auto parent = first + ((pos - first) - 1) / 2;
41
42 while (pos > first && comp(*parent, *pos)) {
43 auto tmp = *parent;
44 *parent = *pos;
45 *pos = tmp;
46
47 pos = parent;
48 parent = first + ((pos - first) - 1) / 2;
49 }
50}

References pos.

Referenced by fl::PriorityQueue< T, Compare, VectorT >::emplace(), fl::PriorityQueue< T, Compare, VectorT >::push(), fl::PriorityQueue< T, Compare, VectorT >::push(), and push_heap().

+ Here is the caller graph for this function:

◆ pwmEnd()

int fl::pwmEnd ( int pin)

Release PWM channel and stop output on a pin.

Parameters
pinPin number (platform-specific numbering)
Returns
0 on success, -1 if not initialized

Definition at line 364 of file pin.cpp.hpp.

364 {
366 if (!ch) {
367 return -1;
368 }
369
371 return 0;
372}

References fl::pwm_state::findByPin(), and fl::pwm_state::releaseChannel().

+ Here is the call graph for this function:

◆ qsort()

void fl::qsort ( void * base,
size_t nmemb,
size_t size,
qsort_compare_fn compar )

Definition at line 440 of file cstdlib.cpp.hpp.

440 {
441 if (!base || nmemb <= 1 || size == 0 || !compar) {
442 return;
443 }
444
445 char* arr = static_cast<char*>(base);
446 detail::qsort_impl(arr, nmemb, size, compar);
447}
void qsort_impl(char *base, size_t nmemb, size_t size, qsort_compare_fn compar)

References fl::detail::qsort_impl().

Referenced by fl::third_party::vorbis::compute_sorted_huffman(), and fl::third_party::vorbis::start_decoder().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ qsort_insertion_sort()

static void fl::qsort_insertion_sort ( char * base,
size_t nmemb,
size_t size,
qsort_compare_fn compar )
static

Definition at line 348 of file cstdlib.cpp.hpp.

348 {
349 for (size_t i = 1; i < nmemb; ++i) {
350 // Save current element in temp buffer
351 char temp[256]; // Stack buffer for elements up to 256 bytes
352 char* elem_i = base + i * size;
353
354 if (size <= sizeof(temp)) {
355 memcpy(temp, elem_i, size);
356
357 size_t j = i;
358 while (j > 0 && compar(temp, base + (j - 1) * size) < 0) {
359 memcpy(base + j * size, base + (j - 1) * size, size);
360 --j;
361 }
362
363 memcpy(base + j * size, temp, size);
364 } else {
365 // For large elements, use swaps instead of shifts
366 size_t j = i;
367 while (j > 0 && compar(elem_i, base + (j - 1) * size) < 0) {
368 detail::qsort_swap(base + j * size, base + (j - 1) * size, size);
369 --j;
370 }
371 }
372 }
373}
void qsort_swap(char *a, char *b, size_t size)

References memcpy(), and fl::detail::qsort_swap().

Referenced by fl::detail::qsort_impl().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ qsort_partition()

static size_t fl::qsort_partition ( char * base,
size_t nmemb,
size_t size,
qsort_compare_fn compar )
static

Definition at line 376 of file cstdlib.cpp.hpp.

376 {
377 // Use median-of-three for pivot selection
378 size_t mid = nmemb / 2;
379 size_t last = nmemb - 1;
380
381 char* first_elem = base;
382 char* mid_elem = base + mid * size;
383 char* last_elem = base + last * size;
384
385 // Sort first, middle, last to find median
386 if (compar(mid_elem, first_elem) < 0) {
387 detail::qsort_swap(first_elem, mid_elem, size);
388 }
389 if (compar(last_elem, first_elem) < 0) {
390 detail::qsort_swap(first_elem, last_elem, size);
391 }
392 if (compar(last_elem, mid_elem) < 0) {
393 detail::qsort_swap(mid_elem, last_elem, size);
394 }
395
396 // Now mid_elem contains the median, swap it to end-1 position
397 detail::qsort_swap(mid_elem, base + (last - 1) * size, size);
398 char* pivot = base + (last - 1) * size;
399
400 // Partition
401 size_t i = 0;
402 for (size_t j = 0; j < last - 1; ++j) {
403 if (compar(base + j * size, pivot) < 0) {
404 if (i != j) {
405 detail::qsort_swap(base + i * size, base + j * size, size);
406 }
407 ++i;
408 }
409 }
410
411 // Move pivot to its final position
412 detail::qsort_swap(base + i * size, pivot, size);
413 return i;
414}

References fl::detail::qsort_swap().

Referenced by fl::detail::qsort_impl().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ radians()

template<typename T>
T fl::radians ( T deg)
inlineconstexpr

Definition at line 522 of file math.h.

522 {
523 return deg * static_cast<T>(0.017453292519943295); // PI / 180
524}

References FL_NOEXCEPT.

◆ radiansToA24_fp()

FASTLED_FORCE_INLINE fl::u32 fl::radiansToA24_fp ( fl::i32 angle_s16x16_raw)

Definition at line 38 of file render_value_fp.h.

38 {
39 constexpr fl::i32 RAD_TO_A24 = 2670177; // 16777216 / (2*PI) in s16x16 sense
40 return static_cast<fl::u32>(
41 (static_cast<fl::i64>(angle_s16x16_raw) * RAD_TO_A24) >> fl::s16x16::FRAC_BITS);
42}
static constexpr int FRAC_BITS
Definition s16x16.h:22

References FASTLED_FORCE_INLINE, and fl::s16x16::FRAC_BITS.

Referenced by render_value_fp().

+ Here is the caller graph for this function:

◆ rand()

u32 fl::rand ( )

Definition at line 449 of file cstdlib.cpp.hpp.

449 {
450 return static_cast<u32>(::rand());
451}
u32 rand()

References rand().

Referenced by rand().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ read()

int fl::read ( )

Definition at line 127 of file cstdio.cpp.hpp.

127 {
128#ifdef FASTLED_TESTING
129 // Check for injected handler first
130 if (get_read_handler()) {
131 return get_read_handler()();
132 }
133#endif
134
135 // Delegate to platform implementation
136 return platforms::read();
137}

Referenced by fl::unordered_map_small< Key, Value, Equal >::compact(), fl::istream_real::get(), fl::istream_real::getline(), fl::third_party::plm_buffer_read(), fl::filebuf::read(), fl::filebuf::read(), fl::ifstream::read(), fl::ifstream::read(), fl::SerialPort::read(), fl::SerialReader::read(), fl::video::PixelStream::readFrameAt(), fl::istream_real::readLine(), fl::filebuf::readRGB8(), fl::ifstream::readRGB8(), and readStringUntil().

+ Here is the caller graph for this function:

◆ read_sin32_lut()

FASTLED_FORCE_INLINE i32 fl::read_sin32_lut ( const i32 * addr)

Definition at line 30 of file sin32.h.

30 {
31 return (i32)FL_PGM_READ_DWORD_ALIGNED(addr);
32}
#define FL_PGM_READ_DWORD_ALIGNED(addr)

References FASTLED_FORCE_INLINE, FL_NOEXCEPT, and FL_PGM_READ_DWORD_ALIGNED.

Referenced by sin32_interp().

+ Here is the caller graph for this function:

◆ readLine()

fl::optional< fl::string > fl::readLine ( char delimiter,
char skipChar,
fl::optional< u32 > timeoutMs )

Definition at line 185 of file cstdio.cpp.hpp.

185 {
186 // Try platform-native line reading first (e.g., Arduino's Serial.readStringUntil).
187 // This is critical for USB CDC platforms (ESP32-C6/S3) where the native
188 // implementation uses yield() (immediate context switch) instead of
189 // delay(1) (1ms FreeRTOS sleep), enabling correct multi-packet assembly.
190 char nativeBuf[512];
191 int nativeLen = platforms::readLineNative(delimiter, nativeBuf, sizeof(nativeBuf));
192 if (nativeLen >= 0) {
193 fl::string result(nativeBuf, nativeLen);
194 return fl::string(result.trim());
195 }
196
197 // Fallback: character-by-character reading for non-Arduino platforms
198 sstream buffer;
199 if (!readStringUntil(buffer, delimiter, skipChar, timeoutMs)) {
200 return fl::nullopt; // Timeout occurred
201 }
202
203 // Convert to string and trim whitespace (trim() returns a new fl::string)
204 fl::string result = buffer.str();
205 return fl::string(result.trim());
206}
bool readStringUntil(sstream &out, char delimiter, char skipChar, fl::optional< u32 > timeoutMs)

References nullopt, readStringUntil(), and fl::sstream::str().

Referenced by createSerialRequestSource(), and readSerialLine().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ readSerialLine() [1/2]

template<typename SerialIn>
fl::optional< fl::string > fl::readSerialLine ( SerialIn & serial,
char delimiter = '\n',
fl::optional< u32 > timeoutMs = fl::nullopt )

Read a line from a serial-like input source (blocking with optional timeout)

Template Parameters
SerialInType providing available() and read() methods
Parameters
serialSerial input source
delimiterLine delimiter character (default: '
')
timeoutMsOptional timeout in milliseconds (nullopt = wait forever)
Returns
Optional string containing the line (without delimiter), or nullopt if timeout
Note
Follows Arduino's readStringUntil() style - blocks until complete line or timeout

Definition at line 191 of file serial.h.

191 {
192 // Delegate to readSerialStringUntil with default skipChar='\r'
193 return readSerialStringUntil(serial, delimiter, '\r', timeoutMs);
194}
fl::optional< fl::string > readSerialStringUntil(SerialIn &serial, char delimiter, char skipChar, fl::optional< u32 > timeoutMs)
Definition serial.h:197

References readSerialStringUntil().

+ Here is the call graph for this function:

◆ readSerialLine() [2/2]

fl::optional< fl::string > fl::readSerialLine ( SerialReader & serial,
char delimiter = '\n',
fl::optional< u32 > timeoutMs = fl::nullopt )
inline

Optimized readSerialLine for fl:: serial input.

Parameters
serialSerialReader adapter (unused, for API consistency)
delimiterLine delimiter character (default: '
')
timeoutMsOptional timeout in milliseconds (nullopt = wait forever)
Returns
Optional string containing the line (without delimiter), or nullopt if timeout
Note
Delegates to normalized fl::readLine() API with default skipChar='\r'

Definition at line 82 of file serial.h.

82 {
83 (void)serial; // Unused, we call fl::readLine() directly
84 return fl::readLine(delimiter, '\r', timeoutMs);
85}

References nullopt, and readLine().

+ Here is the call graph for this function:

◆ readSerialStringUntil()

template<typename SerialIn>
fl::optional< fl::string > fl::readSerialStringUntil ( SerialIn & serial,
char delimiter,
char skipChar,
fl::optional< u32 > timeoutMs )

Definition at line 197 of file serial.h.

197 {
198 // Follows Arduino Serial.readStringUntil() API - blocks until delimiter found
199 fl::sstream buffer;
200
201 u32 startTime = fl::millis();
202
203 // Read characters until we find delimiter or timeout
204 while (true) {
205 // Check timeout (only if timeout is set)
206 if (timeoutMs.has_value()) {
207 if (fl::millis() - startTime >= timeoutMs.value()) {
208 // Timeout occurred - return nullopt
209 return fl::nullopt;
210 }
211 }
212
213 // Try to read next character
214 int c = serial.read();
215
216 // Handle -1 (no data available) like Arduino's timedRead():
217 // Keep trying until timeout (or forever if no timeout set)
218 if (c == -1) {
219 // Brief 1us yield instead of 1ms delay for fast USB CDC polling.
221 continue;
222 }
223
224 // Found delimiter - complete
225 if (c == delimiter) {
226 break;
227 }
228
229 // Skip specified character (e.g., '\r' for cross-platform line endings)
230 if (c == skipChar) {
231 continue;
232 }
233
234 // Valid character - add to buffer
235 buffer << static_cast<char>(c);
236 }
237
238 // Convert to string and trim whitespace
239 fl::string result = buffer.str();
240 result.trim();
241 return result;
242}
T & value() FL_NOEXCEPT
Definition optional.h:112
bool has_value() const FL_NOEXCEPT
Definition optional.h:42

References delayMicroseconds(), fl::Optional< T >::has_value(), millis(), nullopt, fl::sstream::str(), and fl::Optional< T >::value().

Referenced by readSerialLine().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ readStringUntil()

bool fl::readStringUntil ( sstream & out,
char delimiter,
char skipChar,
fl::optional< u32 > timeoutMs )

Definition at line 139 of file cstdio.cpp.hpp.

139 {
140 // Follows Arduino Serial.readStringUntil() API - blocks until delimiter found
141 u32 startTime = fl::millis();
142
143 // Read characters until we find delimiter or timeout
144 while (true) {
145 // Check timeout (only if timeout is set)
146 if (timeoutMs.has_value()) {
147 if (fl::millis() - startTime >= timeoutMs.value()) {
148 // Timeout occurred
149 return false;
150 }
151 }
152
153 // Try to read next character
154 int c = read();
155
156 // Handle -1 (no data available) like Arduino's timedRead():
157 // Keep trying until timeout (or forever if no timeout set)
158 if (c == -1) {
159 // Brief 1us yield to prevent busy loop without the 1ms
160 // minimum sleep that fl::delay(1) imposes on FreeRTOS
161 // (vTaskDelay(1) = 1 tick = 1ms). The 1ms delay was too
162 // slow for USB CDC multi-packet assembly (64-byte packets).
164 continue;
165 }
166
167 // Found delimiter - complete
168 if (c == delimiter) {
169 break;
170 }
171
172 // Skip specified character (e.g., '\r' for cross-platform line endings)
173 if (c == skipChar) {
174 continue;
175 }
176
177 // Valid character - add to output stream
178 out << static_cast<char>(c);
179 }
180
181 // Successfully read until delimiter
182 return true;
183}
int read()

References delayMicroseconds(), fl::Optional< T >::has_value(), millis(), read(), and fl::Optional< T >::value().

Referenced by readLine().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ realloc()

void * fl::realloc ( void * ptr,
size_t new_size )

Definition at line 26 of file malloc.cpp.hpp.

26 {
27 return ::realloc(ptr, new_size);
28 }

Referenced by fl::anonymous_namespace{memory_resource.cpp.hpp}::DefaultMemoryResource::do_reallocate(), fl::StringHolder::grow(), fl::allocator_realloc< U >::reallocate(), fl::allocator< U >::reallocate_impl(), fl::third_party::vorbis::stb_vorbis_decode_filename(), and fl::third_party::vorbis::stb_vorbis_decode_memory().

+ Here is the caller graph for this function:

◆ register_asset()

void fl::register_asset ( fl::string_view path,
const fl::url & u )

Public helper: plug an asset mapping at runtime.

Register an asset path → URL mapping at runtime.

Used by:

Populates the same registry resolve_asset() consults. Called from:

Last writer wins for duplicate paths (scan then manually plug in tests).

Definition at line 118 of file asset.cpp.hpp.

118 {
119 asset_detail::registry().push_back(
120 {fl::string(path.data(), path.size()), u});
121}
constexpr const char * data() const FL_NOEXCEPT
Definition string_view.h:94
fl::vector< AssetEntry > & registry() FL_NOEXCEPT
Definition asset.cpp.hpp:42

References FL_NOEXCEPT, and fl::asset_detail::registry().

+ Here is the call graph for this function:

◆ reinterpret_cast_()

template<typename To, typename From>
To fl::reinterpret_cast_ ( const From & from)

Definition at line 88 of file bit_cast.h.

88 { // ok reinterpret cast - defining the wrapper
89 return bit_cast<To>(from);
90}

References bit_cast(), and FL_NOEXCEPT.

Referenced by fl::ifstream::read(), and fl::ifstream::readRGB8().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ reinterpret_pointer_cast()

template<typename T, typename Y>
shared_ptr< T > fl::reinterpret_pointer_cast ( const shared_ptr< Y > & other)

Definition at line 524 of file shared_ptr.h.

524 {
525 return shared_ptr<T>(other, fl::bit_cast<T*>(other.get()));
526}

References bit_cast(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ remove()

template<typename Iterator, typename T>
Iterator fl::remove ( Iterator first,
Iterator last,
const T & value )

Definition at line 265 of file algorithm.h.

265 {
266 Iterator result = first;
267 while (first != last) {
268 if (!(*first == value)) {
269 if (result != first) {
270 *result = fl::move(*first);
271 }
272 ++result;
273 }
274 ++first;
275 }
276 return result;
277}

References FL_NOEXCEPT, fl::fl::move(), and type_rank< T >::value.

+ Here is the call graph for this function:

◆ remove_if()

template<typename Iterator, typename UnaryPredicate>
Iterator fl::remove_if ( Iterator first,
Iterator last,
UnaryPredicate pred )

Definition at line 280 of file algorithm.h.

280 {
281 Iterator result = first;
282 while (first != last) {
283 if (!pred(*first)) {
284 if (result != first) {
285 *result = fl::move(*first);
286 }
287 ++result;
288 }
289 ++first;
290 }
291 return result;
292}

References FL_NOEXCEPT, and fl::fl::move().

+ Here is the call graph for this function:

◆ render_polar_lookup_table()

void fl::render_polar_lookup_table ( float cx,
float cy,
fl::vector< fl::vector< float > > & polar_theta,
fl::vector< fl::vector< float > > & distance,
int num_x,
int num_y )
inline

Definition at line 27 of file engine_core.h.

30 {
31 polar_theta.resize(num_x, fl::vector<float>(num_y, 0.0f));
32 distance.resize(num_x, fl::vector<float>(num_y, 0.0f));
33
34 for (int xx = 0; xx < num_x; xx++) {
35 for (int yy = 0; yy < num_y; yy++) {
36 float dx = xx - cx;
37 float dy = yy - cy;
38 distance[xx][yy] = fl::hypotf(dx, dy);
39 polar_theta[xx][yy] = fl::atan2f(dy, dx);
40 }
41 }
42}
void resize(fl::size n) FL_NOEXCEPT
Definition vector.h:593
float hypotf(float x, float y) FL_NOEXCEPT
Definition math.h:500
float atan2f(float y, float x) FL_NOEXCEPT
Definition math.h:390

References atan2f(), and hypotf().

Referenced by fl::Engine::init().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ render_value()

FASTLED_FORCE_INLINE float fl::render_value ( render_parameters & animation)

Definition at line 103 of file engine_core.h.

103 {
104 // Convert polar coordinates back to cartesian ones
105 float newx = (animation.offset_x + animation.center_x -
106 (FL_COS_F(animation.angle) * animation.dist)) *
107 animation.scale_x;
108 float newy = (animation.offset_y + animation.center_y -
109 (FL_SIN_F(animation.angle) * animation.dist)) *
110 animation.scale_y;
111 float newz = (animation.offset_z + animation.z) * animation.scale_z;
112
113 // Render noise value at this new cartesian point
114 float raw_noise_field_value = pnoise(newx, newy, newz);
115
116 // Enhance histogram (improve contrast) by setting black and white point
117 if (raw_noise_field_value < animation.low_limit)
118 raw_noise_field_value = animation.low_limit;
119 if (raw_noise_field_value > animation.high_limit)
120 raw_noise_field_value = animation.high_limit;
121
122 float scaled_noise_value =
123 map_float(raw_noise_field_value, animation.low_limit,
124 animation.high_limit, 0, 255);
125
126 return scaled_noise_value;
127}
#define FL_COS_F(x)
Definition engine_core.h:18
FASTLED_FORCE_INLINE float map_float(float x, float in_min, float in_max, float out_min, float out_max)
Definition engine_core.h:90

References fl::render_parameters::angle, fl::render_parameters::center_x, fl::render_parameters::center_y, fl::render_parameters::dist, FASTLED_FORCE_INLINE, FL_COS_F, FL_SIN_F, fl::render_parameters::high_limit, fl::render_parameters::low_limit, map_float(), fl::render_parameters::offset_x, fl::render_parameters::offset_y, fl::render_parameters::offset_z, pnoise(), fl::render_parameters::scale_x, fl::render_parameters::scale_y, fl::render_parameters::scale_z, and fl::render_parameters::z.

Referenced by fl::Engine::render_value().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ render_value_fp()

FASTLED_FORCE_INLINE fl::i32 fl::render_value_fp ( const render_parameters_fp & p,
const fl::i32 * fade_lut,
const fl::u8 * perm )

Definition at line 53 of file render_value_fp.h.

56 {
57
58 using FP = fl::s16x16;
59 constexpr fl::i32 FP_ONE = static_cast<fl::i32>(1) << FP::FRAC_BITS;
60
61 // sincos32 for angle
62 fl::u32 a24 = radiansToA24_fp(p.angle_raw);
63 SinCos32 sc = sincos32(a24);
64
65 // sincos32 output is in [-2147418112, 2147418112] (Q0.31 range).
66 // To multiply with s16x16 dist, we use:
67 // result_s16x16 = (sc_val * dist_raw) >> 31
68 // This gives us the product in s16x16 format.
69 fl::i32 cos_dist = static_cast<fl::i32>(
70 (static_cast<fl::i64>(sc.cos_val) * p.dist_raw) >> 31);
71 fl::i32 sin_dist = static_cast<fl::i32>(
72 (static_cast<fl::i64>(sc.sin_val) * p.dist_raw) >> 31);
73
74 // newx = (offset_x + center_x - cos*dist) * scale_x
75 // newy = (offset_y + center_y - sin*dist) * scale_y
76 fl::i32 pre_x = p.offset_x_raw + p.center_x_raw - cos_dist;
77 fl::i32 pre_y = p.offset_y_raw + p.center_y_raw - sin_dist;
78
79 fl::i32 nx = static_cast<fl::i32>(
80 (static_cast<fl::i64>(pre_x) * p.scale_x_raw) >> FP::FRAC_BITS);
81 fl::i32 ny = static_cast<fl::i32>(
82 (static_cast<fl::i64>(pre_y) * p.scale_y_raw) >> FP::FRAC_BITS);
83
84 // Compute z coordinate: newz = (offset_z + z) * scale_z
85 fl::i32 nz = static_cast<fl::i32>(
86 (static_cast<fl::i64>(p.offset_z_raw + p.z_raw) * p.scale_z_raw) >> FP::FRAC_BITS);
87
88 // Perlin noise: 2D when z==0, 3D otherwise
89 fl::i32 raw_noise;
90 if (nz == 0) {
91 raw_noise = perlin_s16x16::pnoise2d_raw(nx, ny, fade_lut, perm);
92 } else {
93 raw_noise = perlin_s16x16::pnoise3d_raw(nx, ny, nz, fade_lut, perm);
94 }
95
96 // Clamp to [low_limit, high_limit]
97 if (raw_noise < p.low_limit_raw) raw_noise = p.low_limit_raw;
98 if (raw_noise > p.high_limit_raw) raw_noise = p.high_limit_raw;
99
100 // Map from [low_limit, high_limit] to [0, 255]
101 // map_float(x, low, high, 0, 255) = (x - low) * 255 / (high - low)
102 fl::i32 range = p.high_limit_raw - p.low_limit_raw;
103 fl::i32 shifted = raw_noise - p.low_limit_raw;
104
105 // shifted is in [0, range], we want (shifted * 255) / range
106 // For the common case where low=0, high=1: range = FP_ONE
107 // result = (shifted * 255) >> FRAC_BITS (since shifted is in [0, FP_ONE])
108 // For low=-1, high=1: range = 2*FP_ONE
109 // result = (shifted * 255) / (2*FP_ONE)
110 fl::i32 result;
111 if (range == FP_ONE) {
112 // Optimized path: low_limit=0, high_limit=1
113 result = static_cast<fl::i32>(
114 (static_cast<fl::i64>(shifted) * 255) >> FP::FRAC_BITS);
115 } else if (range == 2 * FP_ONE) {
116 // Optimized path: low_limit=-1, high_limit=1
117 result = static_cast<fl::i32>(
118 (static_cast<fl::i64>(shifted) * 255) >> (FP::FRAC_BITS + 1));
119 } else {
120 // General path
121 result = static_cast<fl::i32>(
122 (static_cast<fl::i64>(shifted) * 255) / range);
123 }
124
125 // Final clamp to [0, 255]
126 if (result < 0) result = 0;
127 if (result > 255) result = 255;
128
129 return result;
130}
FASTLED_FORCE_INLINE fl::u32 radiansToA24_fp(fl::i32 angle_s16x16_raw)
static constexpr i32 FP_ONE
FASTLED_FORCE_INLINE SinCos32 sincos32(u32 angle) FL_NOEXCEPT
Definition sin32.h:88
i32 sin_val
Definition sin32.h:25
i32 cos_val
Definition sin32.h:26
static fl::i32 pnoise2d_raw(fl::i32 fx_raw, fl::i32 fy_raw, const fl::i32 *fade_lut, const fl::u8 *perm)
static fl::i32 pnoise3d_raw(fl::i32 fx_raw, fl::i32 fy_raw, fl::i32 fz_raw, const fl::i32 *fade_lut, const fl::u8 *perm)

References fl::render_parameters_fp::angle_raw, fl::render_parameters_fp::center_x_raw, fl::render_parameters_fp::center_y_raw, fl::SinCos32::cos_val, fl::render_parameters_fp::dist_raw, FASTLED_FORCE_INLINE, FP_ONE, fl::render_parameters_fp::high_limit_raw, fl::render_parameters_fp::low_limit_raw, fl::render_parameters_fp::offset_x_raw, fl::render_parameters_fp::offset_y_raw, fl::render_parameters_fp::offset_z_raw, fl::perlin_s16x16::pnoise2d_raw(), fl::perlin_s16x16::pnoise3d_raw(), radiansToA24_fp(), fl::render_parameters_fp::scale_x_raw, fl::render_parameters_fp::scale_y_raw, fl::render_parameters_fp::scale_z_raw, fl::SinCos32::sin_val, sincos32(), and fl::render_parameters_fp::z_raw.

Referenced by fl::Center_Field_FP::draw(), fl::Complex_Kaleido_5_FP::draw(), fl::Module_Experiment10_FP::draw(), fl::Module_Experiment2_FP::draw(), fl::Module_Experiment3_FP::draw(), fl::Scaledemo1_FP::draw(), fl::SpiralMatrix4_FP::draw(), and render_value_fp_from_float().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ render_value_fp_from_float()

FASTLED_FORCE_INLINE fl::i32 fl::render_value_fp_from_float ( const render_parameters & anim,
const fl::i32 * fade_lut,
const fl::u8 * perm )

Definition at line 180 of file render_value_fp.h.

183 {
184 using FP = fl::s16x16;
186 p.angle_raw = FP(anim.angle).raw();
187 p.dist_raw = FP(anim.dist).raw();
188 p.scale_x_raw = FP(anim.scale_x).raw();
189 p.scale_y_raw = FP(anim.scale_y).raw();
190 p.scale_z_raw = FP(anim.scale_z).raw();
191 p.offset_x_raw = FP(anim.offset_x).raw();
192 p.offset_y_raw = FP(anim.offset_y).raw();
193 p.offset_z_raw = FP(anim.offset_z).raw();
194 p.z_raw = FP(anim.z).raw();
195 p.center_x_raw = FP(anim.center_x).raw();
196 p.center_y_raw = FP(anim.center_y).raw();
197 p.low_limit_raw = FP(anim.low_limit).raw();
198 p.high_limit_raw = FP(anim.high_limit).raw();
199 return render_value_fp(p, fade_lut, perm);
200}
FASTLED_FORCE_INLINE fl::i32 render_value_fp(const render_parameters_fp &p, const fl::i32 *fade_lut, const fl::u8 *perm)

References fl::render_parameters::angle, fl::render_parameters_fp::angle_raw, fl::render_parameters::center_x, fl::render_parameters_fp::center_x_raw, fl::render_parameters::center_y, fl::render_parameters_fp::center_y_raw, fl::render_parameters::dist, fl::render_parameters_fp::dist_raw, FASTLED_FORCE_INLINE, fl::render_parameters::high_limit, fl::render_parameters_fp::high_limit_raw, fl::render_parameters::low_limit, fl::render_parameters_fp::low_limit_raw, fl::render_parameters::offset_x, fl::render_parameters_fp::offset_x_raw, fl::render_parameters::offset_y, fl::render_parameters_fp::offset_y_raw, fl::render_parameters::offset_z, fl::render_parameters_fp::offset_z_raw, fl::s16x16::raw(), render_value_fp(), fl::render_parameters::scale_x, fl::render_parameters_fp::scale_x_raw, fl::render_parameters::scale_y, fl::render_parameters_fp::scale_y_raw, fl::render_parameters::scale_z, fl::render_parameters_fp::scale_z_raw, fl::render_parameters::z, and fl::render_parameters_fp::z_raw.

Referenced by fl::Big_Caleido_FP::draw(), fl::Caleido1_FP::draw(), fl::Caleido2_FP::draw(), fl::Caleido3_FP::draw(), fl::Complex_Kaleido_2_FP::draw(), fl::Complex_Kaleido_3_FP::draw(), fl::Complex_Kaleido_4_FP::draw(), fl::Complex_Kaleido_6_FP::draw(), fl::Complex_Kaleido_FP::draw(), fl::Distance_Experiment_FP::draw(), fl::Fluffy_Blobs_FP::draw(), fl::Hot_Blob_FP::draw(), fl::Lava1_FP::draw(), fl::Module_Experiment1_FP::draw(), fl::Module_Experiment4_FP::draw(), fl::Module_Experiment5_FP::draw(), fl::Module_Experiment6_FP::draw(), fl::Module_Experiment7_FP::draw(), fl::Module_Experiment8_FP::draw(), fl::Module_Experiment9_FP::draw(), fl::Parametric_Water_FP::draw(), fl::Polar_Waves_FP::draw(), fl::RGB_Blobs2_FP::draw(), fl::RGB_Blobs3_FP::draw(), fl::RGB_Blobs4_FP::draw(), fl::RGB_Blobs5_FP::draw(), fl::RGB_Blobs_FP::draw(), fl::Rings_FP::draw(), fl::Rotating_Blob_FP::draw(), fl::Slow_Fade_FP::draw(), fl::SpiralMatrix10_FP::draw(), fl::SpiralMatrix1_FP::draw(), fl::SpiralMatrix2_FP::draw(), fl::SpiralMatrix3_FP::draw(), fl::SpiralMatrix5_FP::draw(), fl::SpiralMatrix6_FP::draw(), fl::SpiralMatrix8_FP::draw(), fl::SpiralMatrix9_FP::draw(), fl::Spiralus2_FP::draw(), fl::Spiralus_FP::draw(), fl::Water_FP::draw(), fl::Waves_FP::draw(), fl::Yves_FP::draw(), fl::Zoom2_FP::draw(), and fl::Zoom_FP::draw().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ replace()

template<typename Iterator, typename T>
void fl::replace ( Iterator first,
Iterator last,
const T & old_value,
const T & new_value )

Definition at line 245 of file algorithm.h.

245 {
246 while (first != last) {
247 if (*first == old_value) {
248 *first = new_value;
249 }
250 ++first;
251 }
252}

References FL_NOEXCEPT.

◆ replace_if()

template<typename Iterator, typename UnaryPredicate, typename T>
void fl::replace_if ( Iterator first,
Iterator last,
UnaryPredicate pred,
const T & new_value )

Definition at line 255 of file algorithm.h.

255 {
256 while (first != last) {
257 if (pred(*first)) {
258 *first = new_value;
259 }
260 ++first;
261 }
262}

References FL_NOEXCEPT.

◆ rescaleNoiseValue16()

FASTLED_FORCE_INLINE u16 fl::rescaleNoiseValue16 ( u16 raw_value)

Rescale raw inoise16() output to full 16-bit range [0, 65535] Curries in the global NOISE16_EXTENT_MIN/MAX extents for clean, reusable rescaling.

Parameters
raw_valueRaw noise value from inoise16()
Returns
Rescaled value spanning the full 16-bit range (0-65535)

Definition at line 21 of file noise.cpp.hpp.

21 {
23 u16(0), u16(65535));
24}
constexpr u16 NOISE16_EXTENT_MAX
Definition noise.h:23
FASTLED_FORCE_INLINE U map_range_clamped(T value, T in_min, T in_max, U out_min, U out_max) FL_NOEXCEPT
Definition math.h:186
constexpr u16 NOISE16_EXTENT_MIN
Observed min/max extents for inoise16() output.
Definition noise.h:22

References FASTLED_FORCE_INLINE, map_range_clamped(), NOISE16_EXTENT_MAX, and NOISE16_EXTENT_MIN.

Referenced by noiseCylinderCRGB(), noiseCylinderHSV16(), noiseRingCRGB(), and noiseRingHSV16().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ resetCauseName()

fl::string_view fl::resetCauseName ( ResetCause c)
inline

Return a static-lifetime name for c — zero-cost, no allocation.

String literal lives in flash on embedded platforms. Safe to call from any context (ISR, panic handler, before setup() finishes). Backed by fl::string_view so the result has no destructor and can be passed by value freely.

Definition at line 61 of file watchdog.h.

61 {
62 switch (c) {
63 case ResetCause::POWER_ON: return fl::string_view("POWER_ON");
64 case ResetCause::BROWNOUT: return fl::string_view("BROWNOUT");
65 case ResetCause::EXTERNAL_PIN: return fl::string_view("EXTERNAL_PIN");
66 case ResetCause::WATCHDOG: return fl::string_view("WATCHDOG");
67 case ResetCause::SOFTWARE: return fl::string_view("SOFTWARE");
68 case ResetCause::LOCKUP: return fl::string_view("LOCKUP");
69 case ResetCause::DEBUGGER: return fl::string_view("DEBUGGER");
70 case ResetCause::PANIC: return fl::string_view("PANIC");
72 default: return fl::string_view("UNKNOWN");
73 }
74}

References BROWNOUT, DEBUGGER, EXTERNAL_PIN, FL_NOEXCEPT, LOCKUP, PANIC, POWER_ON, SOFTWARE, UNKNOWN, and WATCHDOG.

Referenced by fl::ResetInfo::causeName().

+ Here is the caller graph for this function:

◆ resolve_asset()

fl::url fl::resolve_asset ( const asset_ref & a)

Resolve an asset handle to a URL (or local file path) at runtime.

Resolution rules:

The runtime ignores any sha256= / fallback= metadata in .lnk files. These are parsed by fl::parse_lnk_with_metadata() for forward-compat and reserved for future integrity/retry features.

Declared here; defined in fl/asset/asset.cpp.hpp.

Definition at line 123 of file asset.cpp.hpp.

123 {
124 if (!a) {
125 return fl::url();
126 }
127 const fl::string_view p = a.path();
128
129 // 1. Registry always wins. On WASM this is populated by generated code
130 // from the asset scanner; on host/stub tests may populate it manually.
131 fl::url fromRegistry = asset_detail::lookup_registry(p);
132 if (fromRegistry.isValid()) {
133 return fromRegistry;
134 }
135
136 // 2. Host/stub: fall back to filesystem probe + sibling .lnk.
137#if defined(FASTLED_TESTING) || defined(FL_IS_STUB)
138 return asset_detail::resolve_host(p);
139#else
140 // 3. Other platforms (WASM without manifest, ESP32 v1): no fallback.
141 // TODO(#2284): ESP32 LittleFS / SD-card resolution.
142 return fl::url();
143#endif
144}
fl::string_view path() const FL_NOEXCEPT
The relative asset path as a string view (e.g. "data/track.mp3").
Definition asset.h:106
bool isValid() const FL_NOEXCEPT
Definition url.h:37
fl::url lookup_registry(fl::string_view path) FL_NOEXCEPT
Look up an asset path in the registry. Returns invalid url() on miss.
Definition asset.cpp.hpp:50

References FL_NOEXCEPT, fl::url::isValid(), and fl::asset_detail::lookup_registry().

Referenced by fl::UIAudio::UIAudio().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ reverse()

template<typename Iterator>
void fl::reverse ( Iterator first,
Iterator last )

Definition at line 11 of file algorithm.h.

11 {
12 while ((first != last) && (first != --last)) {
13 swap(*first++, *last);
14 }
15}
void swap(array< T, N > &lhs, array< T, N > &rhs) FL_NOEXCEPT
Definition array.h:209

References FL_NOEXCEPT, and swap().

+ Here is the call graph for this function:

◆ rgb565ToRgb888()

void fl::rgb565ToRgb888 ( fl::u16 rgb565,
fl::u8 & r,
fl::u8 & g,
fl::u8 & b )

Definition at line 23 of file pixel.cpp.hpp.

23 {
24 // Extract RGB components from RGB565
25 fl::u8 r5 = (rgb565 >> 11) & 0x1F; // 5-bit red
26 fl::u8 g6 = (rgb565 >> 5) & 0x3F; // 6-bit green
27 fl::u8 b5 = rgb565 & 0x1F; // 5-bit blue
28
29 // Use lookup tables for fast conversion
33}
const fl::u8 rgb565_5to8_table[32]
Definition pixel.cpp.hpp:9
const fl::u8 rgb565_6to8_table[64]
Definition pixel.cpp.hpp:15

References FL_PGM_READ_BYTE_NEAR, rgb565_5to8_table, and rgb565_6to8_table.

Referenced by fl::Frame::convertPixelsToRgb().

+ Here is the caller graph for this function:

◆ rgb888ToRgb565()

fl::u16 fl::rgb888ToRgb565 ( fl::u8 r,
fl::u8 g,
fl::u8 b )
inline

Definition at line 29 of file pixel.h.

29 {
30 return ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3);
31}

◆ rgb_2_rgbw() [1/2]

FASTLED_FORCE_INLINE void fl::rgb_2_rgbw ( RGBW_MODE mode,
u16 w_color_temperature,
u8 r,
u8 g,
u8 b,
u8 r_scale,
u8 g_scale,
u8 b_scale,
u8 * out_r,
u8 * out_g,
u8 * out_b,
u8 * out_w )

Converts RGB to RGBW using one of the functions.

Dynamic version of the rgb_w_rgbw function with less chance for the compiler to optimize.

Definition at line 317 of file rgbw.h.

319 {
320 switch (mode) {
323 rgb_2_rgbw_null_white_pixel(w_color_temperature, r, g, b, r_scale,
324 g_scale, b_scale, out_r, out_g, out_b,
325 out_w);
326 return;
328 rgb_2_rgbw_exact(w_color_temperature, r, g, b, r_scale, g_scale,
329 b_scale, out_r, out_g, out_b, out_w);
330 return;
332 rgb_2_rgbw_white_boosted(w_color_temperature, r, g, b, r_scale, g_scale,
333 b_scale, out_r, out_g, out_b, out_w);
334 return;
336 rgb_2_rgbw_max_brightness(w_color_temperature, r, g, b, r_scale,
337 g_scale, b_scale, out_r, out_g, out_b, out_w);
338 return;
340 rgb_2_rgbw_user_function(w_color_temperature, r, g, b, r_scale, g_scale,
341 b_scale, out_r, out_g, out_b, out_w);
342 return;
344 rgb_2_rgbw_colorimetric(w_color_temperature, r, g, b, r_scale, g_scale,
345 b_scale, out_r, out_g, out_b, out_w);
346 return;
348 rgb_2_rgbw_colorimetric_boosted(w_color_temperature, r, g, b, r_scale,
349 g_scale, b_scale, out_r, out_g, out_b,
350 out_w);
351 return;
352 }
353 rgb_2_rgbw_null_white_pixel(w_color_temperature, r, g, b, r_scale, g_scale,
354 b_scale, out_r, out_g, out_b, out_w);
355}
void rgb_2_rgbw_colorimetric_boosted(u16 w_color_temperature, u8 r, u8 g, u8 b, u8 r_scale, u8 g_scale, u8 b_scale, u8 *out_r, u8 *out_g, u8 *out_b, u8 *out_w) FL_NOEXCEPT
Definition rgbw.cpp.hpp:527
@ kRGBWUserFunction
Definition rgbw.h:29
@ kRGBWNullWhitePixel
Definition rgbw.h:16
@ kRGBWColorimetricBoosted
Definition rgbw.h:25
@ kRGBWMaxBrightness
Definition rgbw.h:19
@ kRGBWColorimetric
Definition rgbw.h:24
@ kRGBWBoostedWhite
Definition rgbw.h:18
@ kRGBWExactColors
Definition rgbw.h:17
@ kRGBWInvalid
Definition rgbw.h:15
void rgb_2_rgbw_exact(u16 w_color_temperature, u8 r, u8 g, u8 b, u8 r_scale, u8 g_scale, u8 b_scale, u8 *out_r, u8 *out_g, u8 *out_b, u8 *out_w)
Converts RGB to RGBW using a color transfer method from saturated color channels to white.
Definition rgbw.cpp.hpp:80
void rgb_2_rgbw_null_white_pixel(u16 w_color_temperature, u8 r, u8 g, u8 b, u8 r_scale, u8 g_scale, u8 b_scale, u8 *out_r, u8 *out_g, u8 *out_b, u8 *out_w)
Converts RGB to RGBW with the W channel set to black, always.
Definition rgbw.cpp.hpp:106
void rgb_2_rgbw_user_function(u16 w_color_temperature, u8 r, u8 g, u8 b, u8 r_scale, u8 g_scale, u8 b_scale, u8 *out_r, u8 *out_g, u8 *out_b, u8 *out_w)
Definition rgbw.cpp.hpp:177
void rgb_2_rgbw_white_boosted(u16 w_color_temperature, u8 r, u8 g, u8 b, u8 r_scale, u8 g_scale, u8 b_scale, u8 *out_r, u8 *out_g, u8 *out_b, u8 *out_w)
Converts RGB to RGBW with a boosted white channel.
Definition rgbw.cpp.hpp:118
void rgb_2_rgbw_colorimetric(u16 w_color_temperature, u8 r, u8 g, u8 b, u8 r_scale, u8 g_scale, u8 b_scale, u8 *out_r, u8 *out_g, u8 *out_b, u8 *out_w) FL_NOEXCEPT
Definition rgbw.cpp.hpp:516
void rgb_2_rgbw_max_brightness(u16 w_color_temperature, u8 r, u8 g, u8 b, u8 r_scale, u8 g_scale, u8 b_scale, u8 *out_r, u8 *out_g, u8 *out_b, u8 *out_w)
The minimum brigthness of the RGB channels is used to set the W channel.
Definition rgbw.cpp.hpp:95

References FL_NOEXCEPT, kRGBWBoostedWhite, kRGBWColorimetric, kRGBWColorimetricBoosted, kRGBWExactColors, kRGBWInvalid, kRGBWMaxBrightness, kRGBWNullWhitePixel, kRGBWUserFunction, rgb_2_rgbw_colorimetric(), rgb_2_rgbw_colorimetric_boosted(), rgb_2_rgbw_exact(), rgb_2_rgbw_max_brightness(), rgb_2_rgbw_null_white_pixel(), rgb_2_rgbw_user_function(), and rgb_2_rgbw_white_boosted().

Referenced by PixelController< RGB_ORDER, LANES, MASK >::loadAndScaleRGBW(), and rgb_2_rgbw().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rgb_2_rgbw() [2/2]

template<RGBW_MODE MODE>
FASTLED_FORCE_INLINE void fl::rgb_2_rgbw ( u16 w_color_temperature,
u8 r,
u8 g,
u8 b,
u8 r_scale,
u8 g_scale,
u8 b_scale,
u8 * out_r,
u8 * out_g,
u8 * out_b,
u8 * out_w )

Definition at line 360 of file rgbw.h.

362 {
363 // We trust that the compiler will inline all of this.
364 rgb_2_rgbw(MODE, w_color_temperature, r, g, b, r_scale, g_scale, b_scale,
365 out_r, out_g, out_b, out_w);
366}
FASTLED_FORCE_INLINE void rgb_2_rgbw(RGBW_MODE mode, u16 w_color_temperature, u8 r, u8 g, u8 b, u8 r_scale, u8 g_scale, u8 b_scale, u8 *out_r, u8 *out_g, u8 *out_b, u8 *out_w) FL_NOEXCEPT
Converts RGB to RGBW using one of the functions.
Definition rgbw.h:317

References FL_NOEXCEPT, and rgb_2_rgbw().

+ Here is the call graph for this function:

◆ rgb_2_rgbw_colorimetric()

void fl::rgb_2_rgbw_colorimetric ( u16 w_color_temperature,
u8 r,
u8 g,
u8 b,
u8 r_scale,
u8 g_scale,
u8 b_scale,
u8 * out_r,
u8 * out_g,
u8 * out_b,
u8 * out_w )

Definition at line 516 of file rgbw.cpp.hpp.

519 {
520#ifndef FASTLED_SUPPRESS_COLORIMETRIC_FALLBACK_WARNING
521 FL_WARN_ONCE("RGBW: kRGBWColorimetric requested but FASTLED_RGBW_COLORIMETRIC is not defined — falling back to kRGBWExactColors. Define FASTLED_RGBW_COLORIMETRIC=1 to enable the colorimetric path.");
522#endif
523 rgb_2_rgbw_exact(w_color_temperature, r, g, b, r_scale, g_scale, b_scale,
524 out_r, out_g, out_b, out_w);
525}
#define FL_WARN_ONCE(X)
Definition log.h:278

References FL_NOEXCEPT, FL_WARN_ONCE, and rgb_2_rgbw_exact().

Referenced by rgb_2_rgbw().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rgb_2_rgbw_colorimetric_boosted()

void fl::rgb_2_rgbw_colorimetric_boosted ( u16 w_color_temperature,
u8 r,
u8 g,
u8 b,
u8 r_scale,
u8 g_scale,
u8 b_scale,
u8 * out_r,
u8 * out_g,
u8 * out_b,
u8 * out_w )

Definition at line 527 of file rgbw.cpp.hpp.

530 {
531#ifndef FASTLED_SUPPRESS_COLORIMETRIC_FALLBACK_WARNING
532 FL_WARN_ONCE("RGBW: kRGBWColorimetricBoosted requested but FASTLED_RGBW_COLORIMETRIC is not defined — falling back to kRGBWExactColors. Define FASTLED_RGBW_COLORIMETRIC=1 to enable the colorimetric path.");
533#endif
534 rgb_2_rgbw_exact(w_color_temperature, r, g, b, r_scale, g_scale, b_scale,
535 out_r, out_g, out_b, out_w);
536}

References FL_NOEXCEPT, FL_WARN_ONCE, and rgb_2_rgbw_exact().

Referenced by rgb_2_rgbw().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rgb_2_rgbw_exact()

void fl::rgb_2_rgbw_exact ( u16 w_color_temperature,
u8 r,
u8 g,
u8 b,
u8 r_scale,
u8 g_scale,
u8 b_scale,
u8 * out_r,
u8 * out_g,
u8 * out_b,
u8 * out_w )

Converts RGB to RGBW using a color transfer method from saturated color channels to white.

This is designed to produce the most accurate white point for a given color temperature and reduces power usage of the chip since a white led is much more efficient than three color channels of the same power mixing together. However the pixel will never achieve full brightness since the white channel is 3x more efficient than the color channels mixed together, so in this mode the max brightness of a given pixel is reduced.

RGB(255, 255, 255) -> RGBW(0, 0, 0, 85)
RGB(255, 0, 0) -> RGBW(255, 0, 0, 0)
@ RGB
Red, Green, Blue (0012)
Definition eorder.h:14

Definition at line 80 of file rgbw.cpp.hpp.

83 {
84 (void)w_color_temperature;
85 r = scale8(r, r_scale);
86 g = scale8(g, g_scale);
87 b = scale8(b, b_scale);
88 u8 min_component = min3(r, g, b);
89 *out_r = r - min_component;
90 *out_g = g - min_component;
91 *out_b = b - min_component;
92 *out_w = min_component;
93}

Referenced by rgb_2_rgbw(), rgb_2_rgbw_colorimetric(), rgb_2_rgbw_colorimetric_boosted(), and rgb_2_rgbw_user_function().

+ Here is the caller graph for this function:

◆ rgb_2_rgbw_max_brightness()

void fl::rgb_2_rgbw_max_brightness ( u16 w_color_temperature,
u8 r,
u8 g,
u8 b,
u8 r_scale,
u8 g_scale,
u8 b_scale,
u8 * out_r,
u8 * out_g,
u8 * out_b,
u8 * out_w )

The minimum brigthness of the RGB channels is used to set the W channel.

This will allow the max brightness of the led chipset to be used. However the leds will appear over-desaturated in this mode.

RGB(255, 255, 255) -> RGBW(255, 255, 255, 255)
RGB(1, 0, 0) -> RGBW(1, 0, 0, 1)

Definition at line 95 of file rgbw.cpp.hpp.

98 {
99 (void)w_color_temperature;
100 *out_r = scale8(r, r_scale);
101 *out_g = scale8(g, g_scale);
102 *out_b = scale8(b, b_scale);
103 *out_w = min3(*out_r, *out_g, *out_b);
104}

Referenced by rgb_2_rgbw().

+ Here is the caller graph for this function:

◆ rgb_2_rgbw_null_white_pixel()

void fl::rgb_2_rgbw_null_white_pixel ( u16 w_color_temperature,
u8 r,
u8 g,
u8 b,
u8 r_scale,
u8 g_scale,
u8 b_scale,
u8 * out_r,
u8 * out_g,
u8 * out_b,
u8 * out_w )

Converts RGB to RGBW with the W channel set to black, always.

RGB(255, 255, 255) -> RGBW(255, 255, 255, 0)

Definition at line 106 of file rgbw.cpp.hpp.

110 {
111 (void)w_color_temperature;
112 *out_r = scale8(r, r_scale);
113 *out_g = scale8(g, g_scale);
114 *out_b = scale8(b, b_scale);
115 *out_w = 0;
116}

Referenced by rgb_2_rgbw().

+ Here is the caller graph for this function:

◆ rgb_2_rgbw_user_function()

void fl::rgb_2_rgbw_user_function ( u16 w_color_temperature,
u8 r,
u8 g,
u8 b,
u8 r_scale,
u8 g_scale,
u8 b_scale,
u8 * out_r,
u8 * out_g,
u8 * out_b,
u8 * out_w )

Definition at line 177 of file rgbw.cpp.hpp.

180 {
182 if (fn == nullptr) {
183 fn = rgb_2_rgbw_exact;
184 }
185 fn(w_color_temperature, r, g, b, r_scale, g_scale, b_scale,
186 out_r, out_g, out_b, out_w);
187}
void(* rgb_2_rgbw_function)(u16 w_color_temperature, u8 r, u8 g, u8 b, u8 r_scale, u8 g_scale, u8 b_scale, u8 *out_r, u8 *out_g, u8 *out_b, u8 *out_w)
Definition rgbw.h:231

References fl::Singleton< T, N >::instance(), and rgb_2_rgbw_exact().

Referenced by rgb_2_rgbw().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rgb_2_rgbw_white_boosted()

void fl::rgb_2_rgbw_white_boosted ( u16 w_color_temperature,
u8 r,
u8 g,
u8 b,
u8 r_scale,
u8 g_scale,
u8 b_scale,
u8 * out_r,
u8 * out_g,
u8 * out_b,
u8 * out_w )

Converts RGB to RGBW with a boosted white channel.

Definition at line 118 of file rgbw.cpp.hpp.

121 {
122 (void)w_color_temperature;
123 r = scale8(r, r_scale);
124 g = scale8(g, g_scale);
125 b = scale8(b, b_scale);
126 u8 min_component = min3(r, g, b);
127 u8 w;
128 bool is_min = true;
129 if (min_component <= 84) {
130 w = 3 * min_component;
131 } else {
132 w = 255;
133 is_min = false;
134 }
135 u8 r_prime;
136 u8 g_prime;
137 u8 b_prime;
138 if (is_min) {
139 r_prime = r - min_component;
140 g_prime = g - min_component;
141 b_prime = b - min_component;
142 } else {
143 u8 w3 = divide_by_3(w);
144 r_prime = r - w3;
145 g_prime = g - w3;
146 b_prime = b - w3;
147 }
148
149 *out_r = r_prime;
150 *out_g = g_prime;
151 *out_b = b_prime;
152 *out_w = w;
153}

Referenced by rgb_2_rgbw().

+ Here is the caller graph for this function:

◆ rgb_2_rgbww()

FASTLED_FORCE_INLINE void fl::rgb_2_rgbww ( const Rgbww & cfg,
fl::u8 r,
fl::u8 g,
fl::u8 b,
fl::u8 r_scale,
fl::u8 g_scale,
fl::u8 b_scale,
fl::u8 * out_r,
fl::u8 * out_g,
fl::u8 * out_b,
fl::u8 * out_ww,
fl::u8 * out_wc )

Definition at line 173 of file rgbww.h.

177 {
178 switch (cfg.rgbww_mode) {
180 // Inactive: emit zeros across all five channels.
181 *out_r = *out_g = *out_b = *out_ww = *out_wc = 0;
182 return;
184 rgb_2_rgbww_colorimetric(cfg, r, g, b, r_scale, g_scale, b_scale,
185 out_r, out_g, out_b, out_ww, out_wc);
186 return;
188 rgb_2_rgbww_colorimetric_boosted(cfg, r, g, b, r_scale, g_scale, b_scale,
189 out_r, out_g, out_b, out_ww, out_wc);
190 return;
192 rgb_2_rgbww_user_function(cfg, r, g, b, r_scale, g_scale, b_scale,
193 out_r, out_g, out_b, out_ww, out_wc);
194 return;
195 }
196 *out_r = *out_g = *out_b = *out_ww = *out_wc = 0;
197}
void rgb_2_rgbww_colorimetric_boosted(const Rgbww &cfg, u8 r, u8 g, u8 b, u8 r_scale, u8 g_scale, u8 b_scale, u8 *out_r, u8 *out_g, u8 *out_b, u8 *out_ww, u8 *out_wc) FL_NOEXCEPT
Colorimetric white-overdrive solver for RGBWW (wx_lp_legacy + RGBCCT layered blend).
void rgb_2_rgbww_user_function(const Rgbww &cfg, u8 r, u8 g, u8 b, u8 r_scale, u8 g_scale, u8 b_scale, u8 *out_r, u8 *out_g, u8 *out_b, u8 *out_ww, u8 *out_wc) FL_NOEXCEPT
User-installable RGB->RGBWW function.
void rgb_2_rgbww_colorimetric(const Rgbww &cfg, u8 r, u8 g, u8 b, u8 r_scale, u8 g_scale, u8 b_scale, u8 *out_r, u8 *out_g, u8 *out_b, u8 *out_ww, u8 *out_wc) FL_NOEXCEPT
Colorimetric strict sub-gamut solver for RGBWW (gist sec 5 + sec 11-12, using solve_rgbcct from rgbw_...
RGBWW_MODE rgbww_mode
Definition rgbww.h:71

References FL_NOEXCEPT, and rgb_2_rgbww().

Referenced by PixelController< RGB_ORDER, LANES, MASK >::loadAndScaleRGBWW(), and rgb_2_rgbww().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rgb_2_rgbww_colorimetric()

void fl::rgb_2_rgbww_colorimetric ( const Rgbww & cfg,
fl::u8 r,
fl::u8 g,
fl::u8 b,
fl::u8 r_scale,
fl::u8 g_scale,
fl::u8 b_scale,
fl::u8 * out_r,
fl::u8 * out_g,
fl::u8 * out_b,
fl::u8 * out_ww,
fl::u8 * out_wc )

Colorimetric strict sub-gamut solver for RGBWW (gist sec 5 + sec 11-12, using solve_rgbcct from rgbw_colorimetric.h).

Requires FASTLED_RGBW_COLORIMETRIC; stub emits FL_WARN_ONCE + zeros otherwise.

Definition at line 366 of file rgbww.cpp.hpp.

370 {
371 (void)cfg; (void)r; (void)g; (void)b;
372 (void)r_scale; (void)g_scale; (void)b_scale;
373#ifndef FASTLED_SUPPRESS_RGBWW_FALLBACK_WARNING
374 FL_WARN_ONCE("RGBWW: kRGBWWColorimetric requires FASTLED_RGBW_COLORIMETRIC=1 "
375 "(the math library that provides solve_rgbcct). Outputting zeros.");
376#endif
377 zero_out(out_r, out_g, out_b, out_ww, out_wc);
378}

References FL_NOEXCEPT, and FL_WARN_ONCE.

◆ rgb_2_rgbww_colorimetric_boosted()

void fl::rgb_2_rgbww_colorimetric_boosted ( const Rgbww & cfg,
fl::u8 r,
fl::u8 g,
fl::u8 b,
fl::u8 r_scale,
fl::u8 g_scale,
fl::u8 b_scale,
fl::u8 * out_r,
fl::u8 * out_g,
fl::u8 * out_b,
fl::u8 * out_ww,
fl::u8 * out_wc )

Colorimetric white-overdrive solver for RGBWW (wx_lp_legacy + RGBCCT layered blend).

Requires FASTLED_RGBW_COLORIMETRIC; stub emits FL_WARN_ONCE + zeros.

Definition at line 380 of file rgbww.cpp.hpp.

384 {
385 (void)cfg; (void)r; (void)g; (void)b;
386 (void)r_scale; (void)g_scale; (void)b_scale;
387#ifndef FASTLED_SUPPRESS_RGBWW_FALLBACK_WARNING
388 FL_WARN_ONCE("RGBWW: kRGBWWColorimetricBoosted requires FASTLED_RGBW_COLORIMETRIC=1. "
389 "Outputting zeros.");
390#endif
391 zero_out(out_r, out_g, out_b, out_ww, out_wc);
392}

References FL_NOEXCEPT, and FL_WARN_ONCE.

◆ rgb_2_rgbww_user_function()

void fl::rgb_2_rgbww_user_function ( const Rgbww & cfg,
fl::u8 r,
fl::u8 g,
fl::u8 b,
fl::u8 r_scale,
fl::u8 g_scale,
fl::u8 b_scale,
fl::u8 * out_r,
fl::u8 * out_g,
fl::u8 * out_b,
fl::u8 * out_ww,
fl::u8 * out_wc )

User-installable RGB->RGBWW function.

Set via set_rgb_2_rgbww_function(). Falls back to all-zero output when no user function has been installed.

Definition at line 154 of file rgbww.cpp.hpp.

158 {
160 if (fn == nullptr) {
161 // No user function installed — produce safe zero output.
162 zero_out(out_r, out_g, out_b, out_ww, out_wc);
163 return;
164 }
165 fn(cfg, r, g, b, r_scale, g_scale, b_scale,
166 out_r, out_g, out_b, out_ww, out_wc);
167}
void(* rgb_2_rgbww_function)(const Rgbww &cfg, fl::u8 r, fl::u8 g, fl::u8 b, fl::u8 r_scale, fl::u8 g_scale, fl::u8 b_scale, fl::u8 *out_r, fl::u8 *out_g, fl::u8 *out_b, fl::u8 *out_ww, fl::u8 *out_wc)
Definition rgbww.h:110

References FL_NOEXCEPT, and fl::Singleton< T, N >::instance().

+ Here is the call graph for this function:

◆ rgb_sanity_check()

FASTLED_FORCE_INLINE rgb fl::rgb_sanity_check ( rgb & pixel)

Definition at line 130 of file engine_core.h.

130 {
131 if (pixel.red < 0)
132 pixel.red = 0;
133 if (pixel.green < 0)
134 pixel.green = 0;
135 if (pixel.blue < 0)
136 pixel.blue = 0;
137
138 if (pixel.red > 255)
139 pixel.red = 255;
140 if (pixel.green > 255)
141 pixel.green = 255;
142 if (pixel.blue > 255)
143 pixel.blue = 255;
144
145 return pixel;
146}
float green
Definition core_types.h:45
float red
Definition core_types.h:44
float blue
Definition core_types.h:46

References fl::rgb::blue, FASTLED_FORCE_INLINE, fl::rgb::green, and fl::rgb::red.

Referenced by fl::Engine::rgb_sanity_check().

+ Here is the caller graph for this function:

◆ rgb_sanity_check_fp()

FASTLED_FORCE_INLINE void fl::rgb_sanity_check_fp ( fl::i32 & r,
fl::i32 & g,
fl::i32 & b )

Definition at line 166 of file render_value_fp.h.

166 {
167 if (r < 0) r = 0;
168 if (r > 255) r = 255;
169 if (g < 0) g = 0;
170 if (g > 255) g = 255;
171 if (b < 0) b = 0;
172 if (b > 255) b = 255;
173}

References FASTLED_FORCE_INLINE.

Referenced by fl::Center_Field_FP::draw(), fl::Complex_Kaleido_5_FP::draw(), fl::Module_Experiment2_FP::draw(), fl::Module_Experiment3_FP::draw(), fl::Scaledemo1_FP::draw(), and fl::SpiralMatrix4_FP::draw().

+ Here is the caller graph for this function:

◆ RGBtoHSV16()

static HSV16 fl::RGBtoHSV16 ( const CRGB & rgb)
static

Definition at line 19 of file hsv16.cpp.hpp.

19 {
20 // Work with 8-bit values directly
21 u8 r = rgb.r;
22 u8 g = rgb.g;
23 u8 b = rgb.b;
24
25 // Find min and max
26 u8 mx = max(r, max(g, b));
27 u8 mn = min(r, min(g, b));
28 u8 delta = mx - mn;
29
30 u16 h = 0;
31 u16 s = 0;
32 u16 v = scale8_to_16_accurate(mx);
33
34 // Calculate saturation using improved scaling
35 if (mx > 0) {
36 // s = (delta * 65535) / mx, but with better accuracy
37 // Use the same technique as scale8_to_16_accurate but for arbitrary denominator
38 if (delta == mx) {
39 s = 65535; // Saturation is 100%
40 } else {
41 s = (u16)(((u32)delta * 65535 + (mx >> 1)) / mx);
42 }
43 }
44
45 // Calculate hue using improved algorithms
46 if (delta > 0) {
47 u32 hue_calc = 0;
48
49 if (mx == r) {
50 // Hue in red sector (0-60 degrees)
51 if (g >= b) {
52 // Use improved division: hue_calc = (g - b) * 65535 / (6 * delta)
53 u32 numerator = (u32)(g - b) * 65535;
54 if (delta <= 42) { // 6 * 42 = 252, safe for small delta
55 hue_calc = numerator / (6 * delta);
56 } else {
57 hue_calc = numerator / delta / 6; // Avoid overflow
58 }
59 } else {
60 u32 numerator = (u32)(b - g) * 65535;
61 if (delta <= 42) {
62 hue_calc = 65535 - numerator / (6 * delta);
63 } else {
64 hue_calc = 65535 - numerator / delta / 6;
65 }
66 }
67 } else if (mx == g) {
68 // Hue in green sector (60-180 degrees)
69 // Handle signed arithmetic properly to avoid integer underflow
70 i32 signed_diff = (i32)b - (i32)r;
71 u32 sector_offset = 65535 / 3; // 60 degrees (120 degrees in 16-bit space)
72
73 if (signed_diff >= 0) {
74 // Positive case: b >= r
75 u32 numerator = (u32)signed_diff * 65535;
76 if (delta <= 42) {
77 hue_calc = sector_offset + numerator / (6 * delta);
78 } else {
79 hue_calc = sector_offset + numerator / delta / 6;
80 }
81 } else {
82 // Negative case: b < r
83 u32 numerator = (u32)(-signed_diff) * 65535;
84 if (delta <= 42) {
85 hue_calc = sector_offset - numerator / (6 * delta);
86 } else {
87 hue_calc = sector_offset - numerator / delta / 6;
88 }
89 }
90 } else { // mx == b
91 // Hue in blue sector (180-300 degrees)
92 // Handle signed arithmetic properly to avoid integer underflow
93 i32 signed_diff = (i32)r - (i32)g;
94 u32 sector_offset = (2 * 65535) / 3; // 240 degrees (240 degrees in 16-bit space)
95
96 if (signed_diff >= 0) {
97 // Positive case: r >= g
98 u32 numerator = (u32)signed_diff * 65535;
99 if (delta <= 42) {
100 hue_calc = sector_offset + numerator / (6 * delta);
101 } else {
102 hue_calc = sector_offset + numerator / delta / 6;
103 }
104 } else {
105 // Negative case: r < g
106 u32 numerator = (u32)(-signed_diff) * 65535;
107 if (delta <= 42) {
108 hue_calc = sector_offset - numerator / (6 * delta);
109 } else {
110 hue_calc = sector_offset - numerator / delta / 6;
111 }
112 }
113 }
114
115 h = (u16)(hue_calc & 0xFFFF);
116 }
117
118 return HSV16{h, s, v};
119}
constexpr common_type_t< T, U > max(T a, U b) FL_NOEXCEPT
Definition math.h:75
static u16 scale8_to_16_accurate(u8 x)
Definition hsv16.cpp.hpp:11

References max(), min(), and scale8_to_16_accurate().

Referenced by fl::HSV16::HSV16().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rgbw_colorimetric_lut_enabled()

bool fl::rgbw_colorimetric_lut_enabled ( )

Definition at line 512 of file rgbw.cpp.hpp.

512{ return false; }

References FL_NOEXCEPT.

◆ rgbw_colorimetric_lut_memory_bytes()

unsigned long fl::rgbw_colorimetric_lut_memory_bytes ( int grid_n,
RgbwLutInterp interp )
constexpr

Definition at line 158 of file rgbw.h.

159 {
160 return (grid_n < 1)
161 ? 0UL
162 : (static_cast<unsigned long>(
163 grid_n < 4 ? 4 : (grid_n > 256 ? 256 : grid_n))
164 * static_cast<unsigned long>(
165 grid_n < 4 ? 4 : (grid_n > 256 ? 256 : grid_n))
166 * (interp == RgbwLutInterp::Hermite ? 24UL : 8UL));
167}

References constexpr, FL_NOEXCEPT, Hermite, and rgbw_colorimetric_lut_memory_bytes().

Referenced by rgbw_colorimetric_lut_memory_bytes().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rgbw_partial_reorder()

void fl::rgbw_partial_reorder ( EOrderW w_placement,
u8 b0,
u8 b1,
u8 b2,
u8 w,
u8 * out_b0,
u8 * out_b1,
u8 * out_b2,
u8 * out_b3 )

Definition at line 540 of file rgbw.cpp.hpp.

542 {
543
544 u8 out[4] = {b0, b1, b2, 0};
545 switch (w_placement) {
546 // unrolled loop for speed.
547 case W3:
548 out[3] = w;
549 break;
550 case W2:
551 out[3] = out[2]; // memmove and copy.
552 out[2] = w;
553 break;
554 case W1:
555 out[3] = out[2];
556 out[2] = out[1];
557 out[1] = w;
558 break;
559 case W0:
560 out[3] = out[2];
561 out[2] = out[1];
562 out[1] = out[0];
563 out[0] = w;
564 break;
565 }
566 *out_b0 = out[0];
567 *out_b1 = out[1];
568 *out_b2 = out[2];
569 *out_b3 = out[3];
570}

References W0, W1, W2, and W3.

Referenced by PixelController< RGB_ORDER, LANES, MASK >::loadAndScaleRGBW().

+ Here is the caller graph for this function:

◆ rgbww_partial_reorder()

void fl::rgbww_partial_reorder ( EOrderWW ww_placement,
fl::u8 b0,
fl::u8 b1,
fl::u8 b2,
fl::u8 ww,
fl::u8 wc,
fl::u8 * out_b0,
fl::u8 * out_b1,
fl::u8 * out_b2,
fl::u8 * out_b3,
fl::u8 * out_b4 )

Dispatch RGB->RGBWW for a given mode.

Reorder a 5-channel pixel given an EOrderWW placement. The three RGB bytes (b0, b1, b2) are assumed to already be in native LED RGB order — this function only handles the warm-W / cool-W insertion. Outputs the final 5-byte stream in wire order.

Encoding convention (matches EOrderWW enum values): high nibble = warm-W destination index (0..4) low nibble = cool-W destination index (0..4) The remaining three indices receive b0, b1, b2 in ascending order.

Definition at line 127 of file rgbww.cpp.hpp.

131 {
132 // Five output slots: out[0..4].
133 u8 out[5];
134 const u8 enc = static_cast<u8>(ww_placement);
135 const u8 ww_idx = (enc >> 4) & 0x07;
136 const u8 wc_idx = enc & 0x07;
137 out[ww_idx] = ww;
138 out[wc_idx] = wc;
139 // Fill the three remaining slots with b0, b1, b2 in ascending index order.
140 u8 b_idx = 0;
141 const u8 rgb_bytes[3] = { b0, b1, b2 };
142 for (u8 k = 0; k < 5; ++k) {
143 if (k != ww_idx && k != wc_idx) {
144 out[k] = rgb_bytes[b_idx++];
145 }
146 }
147 *out_b0 = out[0];
148 *out_b1 = out[1];
149 *out_b2 = out[2];
150 *out_b3 = out[3];
151 *out_b4 = out[4];
152}

References FL_NOEXCEPT.

Referenced by PixelController< RGB_ORDER, LANES, MASK >::loadAndScaleRGBWW().

+ Here is the caller graph for this function:

◆ round() [1/2]

template<typename T>
enable_if<!is_integral< T >::value, T >::type fl::round ( T value)
inline
Examples
Chromancer.ino.

Definition at line 319 of file math.h.

319 {
320 return static_cast<T>(round_impl_float(static_cast<float>(value)));
321}
float round_impl_float(float value)
Definition math.cpp.hpp:384

References FL_NOEXCEPT, round_impl_float(), and type_rank< T >::value.

Referenced by fl::gfx::coordToU8< double >(), fl::gfx::coordToU8< float >(), and loop().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ round() [2/2]

template<typename T>
enable_if< is_integral< T >::value, float >::type fl::round ( T value)
inline

Definition at line 327 of file math.h.

327{ return static_cast<float>(value); }

References FL_NOEXCEPT, and type_rank< T >::value.

◆ round< double >()

template<>
double fl::round< double > ( double value)
inline

Definition at line 323 of file math.h.

323 {
324 return round_impl_double(value);
325}
double round_impl_double(double value)
Definition math.cpp.hpp:392

References FL_NOEXCEPT, round_impl_double(), and type_rank< T >::value.

+ Here is the call graph for this function:

◆ round_impl_double()

double fl::round_impl_double ( double value)

Definition at line 392 of file math.cpp.hpp.

392 {
393#if FL_MATH_USE_LIBM
394 return ::round(value);
395#else
396 return static_cast<double>(lround_impl_double(value));
397#endif
398}

References lround_impl_double(), and type_rank< T >::value.

Referenced by round< double >().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ round_impl_float()

float fl::round_impl_float ( float value)

Definition at line 384 of file math.cpp.hpp.

384 {
385#if FL_MATH_USE_LIBM
386 return ::roundf(value);
387#else
388 return static_cast<float>(lround_impl_float(value));
389#endif
390}

References lround_impl_float(), and type_rank< T >::value.

Referenced by round(), and roundf().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ roundf()

float fl::roundf ( float value)
inline

Definition at line 316 of file math.h.

316{ return round_impl_float(value); }

References FL_NOEXCEPT, round_impl_float(), and type_rank< T >::value.

Referenced by plotSoftDot().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ rsqrt()

template<typename T>
enable_if< is_fixed_point< T >::value, T >::type fl::rsqrt ( T x)
inlineconstexpr

Definition at line 564 of file fixed_point.h.

564{ return T::rsqrt(x); }

References FL_NOEXCEPT, and x.

◆ run_default_oscillators()

void fl::run_default_oscillators ( oscillators & timings,
modulators & move,
fl::u32 current_time,
float speed_factor,
float master_speed = 0.005 )
inline

Definition at line 59 of file engine_core.h.

61 {
62 timings.master_speed = master_speed;
63
64 timings.ratio[0] = 1;
65 timings.ratio[1] = 2;
66 timings.ratio[2] = 3;
67 timings.ratio[3] = 4;
68 timings.ratio[4] = 5;
69 timings.ratio[5] = 6;
70 timings.ratio[6] = 7;
71 timings.ratio[7] = 8;
72 timings.ratio[8] = 9;
73 timings.ratio[9] = 10;
74
75 timings.offset[0] = 000;
76 timings.offset[1] = 100;
77 timings.offset[2] = 200;
78 timings.offset[3] = 300;
79 timings.offset[4] = 400;
80 timings.offset[5] = 500;
81 timings.offset[6] = 600;
82 timings.offset[7] = 700;
83 timings.offset[8] = 800;
84 timings.offset[9] = 900;
85
86 calculate_oscillators(timings, move, current_time, speed_factor);
87}
void calculate_oscillators(oscillators &timings, modulators &move, fl::u32 current_time, float speed_factor)
Definition engine_core.h:46

References calculate_oscillators(), fl::oscillators::master_speed, move(), fl::oscillators::offset, and fl::oscillators::ratio.

Referenced by fl::Engine::run_default_oscillators().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ runSingleValidationTest()

SingleTestResult fl::runSingleValidationTest ( const SingleTestConfig & config)

Run a single stateless validation test.

Parameters
configTest configuration
Returns
Test result with pass/fail information

Definition at line 13 of file validation.cpp.hpp.

13 {
15 result.driver = config.driver_name;
16 result.lane_count = static_cast<int>(config.lane_sizes.size());
17 result.lane_sizes = config.lane_sizes;
18 result.pattern = config.pattern;
19
20 // ========================================================================
21 // Input Validation
22 // ========================================================================
23
24 // Validate driver name
25 if (config.driver_name.empty()) {
26 result.success = false;
27 result.error_message = "Driver name cannot be empty";
28 return result;
29 }
30
31 // Validate lane count (1-16 lanes)
32 if (config.lane_sizes.empty()) {
33 result.success = false;
34 result.error_message = "Lane count must be at least 1";
35 return result;
36 }
37
38 if (config.lane_sizes.size() > 16) {
39 result.success = false;
40 result.error_message = "Lane count cannot exceed 16";
41 return result;
42 }
43
44 // Validate individual lane sizes (must be > 0)
45 for (size_t i = 0; i < config.lane_sizes.size(); i++) {
46 if (config.lane_sizes[i] <= 0) {
47 result.success = false;
48 fl::sstream ss;
49 ss << "Lane size at index " << i << " must be positive (got " << config.lane_sizes[i] << ")";
50 result.error_message = ss.str();
51 return result;
52 }
53 }
54
55 // Validate iterations (must be > 0)
56 if (config.iterations <= 0) {
57 result.success = false;
58 result.error_message = "Iterations must be positive";
59 return result;
60 }
61
62 // Validate pattern name (must not be empty)
63 if (config.pattern.empty()) {
64 result.success = false;
65 result.error_message = "Pattern name cannot be empty";
66 return result;
67 }
68
69 // ========================================================================
70 // Test Execution (Placeholder)
71 // ========================================================================
72 // NOTE: Actual hardware validation logic (LED array creation, channel
73 // configuration, loopback testing) is implemented in the validation
74 // example sketch. This library function focuses on configuration
75 // validation and test orchestration.
76
77 result.success = true;
78 result.passed = true;
79 result.total_tests = 4 * config.iterations; // 4 patterns per iteration
80 result.passed_tests = result.total_tests;
81 result.duration_ms = 100; // Placeholder duration
82
83 return result;
84}
bool empty() const FL_NOEXCEPT
int iterations
Number of test iterations (default: 1)
Definition validation.h:30
string driver_name
Driver to test (e.g., "PARLIO", "RMT")
Definition validation.h:27
vector< int > lane_sizes
LED count per lane [100, 100, 200].
Definition validation.h:28
string pattern
Test pattern name (default: "MSB_LSB_A")
Definition validation.h:29
Single test result - comprehensive pass/fail information.
Definition validation.h:42

References fl::SingleTestConfig::driver_name, fl::basic_string::empty(), fl::vector_basic::empty(), fl::SingleTestConfig::iterations, fl::SingleTestConfig::lane_sizes, fl::SingleTestConfig::pattern, fl::vector_basic::size(), and fl::sstream::str().

+ Here is the call graph for this function:

◆ RxDevice::create< RxDeviceType::FLEXIO >()

template<>
fl::shared_ptr< RxDevice > fl::RxDevice::create< RxDeviceType::FLEXIO > ( int pin)

Definition at line 51 of file rx.cpp.hpp.

305 {
306 (void)pin; // Suppress unused parameter warning
307 return RxDevice::createDummy();
308}
static fl::shared_ptr< RxDevice > createDummy() FL_NOEXCEPT
Create dummy RxDevice instance (default fallback)
Definition rx.cpp.hpp:43

◆ RxDevice::create< RxDeviceType::FLEXPWM >() [1/2]

template<>
fl::shared_ptr< RxDevice > fl::RxDevice::create< RxDeviceType::FLEXPWM > ( int pin)

Definition at line 51 of file rx.cpp.hpp.

298 {
299 (void)pin; // Suppress unused parameter warning
300 return RxDevice::createDummy();
301}

◆ RxDevice::create< RxDeviceType::FLEXPWM >() [2/2]

template<>
fl::shared_ptr< RxDevice > fl::RxDevice::create< RxDeviceType::FLEXPWM > ( int pin)

Definition at line 51 of file rx.cpp.hpp.

298 {
299 (void)pin; // Suppress unused parameter warning
300 return RxDevice::createDummy();
301}

◆ RxDevice::create< RxDeviceType::ISR >() [1/2]

template<>
fl::shared_ptr< RxDevice > fl::RxDevice::create< RxDeviceType::ISR > ( int pin)

Definition at line 51 of file rx.cpp.hpp.

291 {
292 (void)pin; // Suppress unused parameter warning
293 return RxDevice::createDummy();
294}

◆ RxDevice::create< RxDeviceType::ISR >() [2/2]

template<>
fl::shared_ptr< RxDevice > fl::RxDevice::create< RxDeviceType::ISR > ( int pin)

Definition at line 51 of file rx.cpp.hpp.

291 {
292 (void)pin; // Suppress unused parameter warning
293 return RxDevice::createDummy();
294}

◆ RxDevice::create< RxDeviceType::LPC_SCT_CAPTURE >() [1/2]

template<>
fl::shared_ptr< RxDevice > fl::RxDevice::create< RxDeviceType::LPC_SCT_CAPTURE > ( int pin)

Definition at line 51 of file rx.cpp.hpp.

312 {
313 (void)pin; // Suppress unused parameter warning
314 return RxDevice::createDummy();
315}

◆ RxDevice::create< RxDeviceType::LPC_SCT_CAPTURE >() [2/2]

template<>
fl::shared_ptr< RxDevice > fl::RxDevice::create< RxDeviceType::LPC_SCT_CAPTURE > ( int pin)

Definition at line 51 of file rx.cpp.hpp.

312 {
313 (void)pin; // Suppress unused parameter warning
314 return RxDevice::createDummy();
315}

◆ RxDevice::create< RxDeviceType::PLATFORM_DEFAULT >() [1/2]

template<>
fl::shared_ptr< RxDevice > fl::RxDevice::create< RxDeviceType::PLATFORM_DEFAULT > ( int pin)

Definition at line 51 of file rx.cpp.hpp.

319 {
321}
static fl::shared_ptr< RxDevice > create(int pin) FL_NOEXCEPT
Template factory method to create RX device by type.

◆ RxDevice::create< RxDeviceType::PLATFORM_DEFAULT >() [2/2]

template<>
fl::shared_ptr< RxDevice > fl::RxDevice::create< RxDeviceType::PLATFORM_DEFAULT > ( int pin)

Definition at line 51 of file rx.cpp.hpp.

319 {
321}

◆ RxDevice::create< RxDeviceType::RMT >() [1/2]

template<>
fl::shared_ptr< RxDevice > fl::RxDevice::create< RxDeviceType::RMT > ( int pin)

Definition at line 51 of file rx.cpp.hpp.

284 {
285 (void)pin; // Suppress unused parameter warning
286 return RxDevice::createDummy();
287}

◆ RxDevice::create< RxDeviceType::RMT >() [2/2]

template<>
fl::shared_ptr< RxDevice > fl::RxDevice::create< RxDeviceType::RMT > ( int pin)

Definition at line 51 of file rx.cpp.hpp.

284 {
285 (void)pin; // Suppress unused parameter warning
286 return RxDevice::createDummy();
287}

◆ sample()

CRGB fl::sample ( const CRGB * grid,
const XYMap & xyMap,
float x,
float y,
SampleMode mode = SampleMode::SAMPLE_BILINEAR )

Sample a pixel from a 2D CRGB grid at floating-point coordinates.

Parameters
gridPixel buffer (row-major or XYMap-indexed)
xyMapCoordinate-to-index mapping for the grid
xFloating-point x coordinate
yFloating-point y coordinate
modeInterpolation mode (default: SAMPLE_BILINEAR)

Definition at line 9 of file sample.cpp.hpp.

10 {
11 if (mode == SampleMode::SAMPLE_BILINEAR) {
12 return sampleBilinear(grid, xyMap, x, y);
13 }
14 return sampleNearest(grid, xyMap, x, y);
15}
fl::XYMap xyMap
int y
Definition simple.h:93
CRGB sampleNearest(const CRGB *grid, const XYMap &xyMap, float x, float y)
Nearest-neighbor sample from a 2D CRGB grid.
CRGB sampleBilinear(const CRGB *grid, const XYMap &xyMap, float x, float y)
Bilinear interpolation sample from a 2D CRGB grid.

References SAMPLE_BILINEAR, sampleBilinear(), sampleNearest(), x, xyMap, and y.

Referenced by fl::audio::Context::Context(), fl::audio::AutoGain::~AutoGain(), fl::audio::Processor::~Processor(), fl::audio::SignalConditioner::~SignalConditioner(), fl::audio::SignalConditioner::applyNoiseGate(), fl::third_party::SoftwareMpeg1Decoder::audioDecodeCallback(), fl::audio::Reactive::computeRMS(), fl::audio::Processor::createWithAutoInput(), fl::third_party::Mp3HelixDecoder::decodeToAudioSamples(), fl::Fx2dTo1d::draw(), fl::audio::Sample::fft(), fl::audio::SignalConditioner::filterSpikes(), fl::audio::Context::getFFT(), fl::third_party::plm_audio_read_samples(), fl::audio::AutoGain::process(), fl::audio::Reactive::processFFT(), fl::audio::Reactive::processSample(), fl::audio::SignalConditioner::processSample(), fl::audio::IInput::readAll(), fl::audio::anonymous_namespace{audio.cpp.hpp}::GuardedFFT::run(), fl::audio::fft::FFT::run(), fl::audio::fft::Impl::run(), fl::audio::fft::Impl::run(), fl::audio::Context::setSample(), fl::audio::Processor::update(), and fl::audio::Reactive::updateVolumeAndPeak().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sampleBilinear()

CRGB fl::sampleBilinear ( const CRGB * grid,
const XYMap & xyMap,
float x,
float y )

Bilinear interpolation sample from a 2D CRGB grid.

Definition at line 17 of file sample.cpp.hpp.

17 {
18 int x0 = static_cast<int>(x);
19 int y0 = static_cast<int>(y);
20 int x1 = min(x0 + 1, static_cast<int>(xyMap.getWidth()) - 1);
21 int y1 = min(y0 + 1, static_cast<int>(xyMap.getHeight()) - 1);
22
23 // Clamp x0 and y0 to valid range
24 x0 = max(0, min(x0, static_cast<int>(xyMap.getWidth()) - 1));
25 y0 = max(0, min(y0, static_cast<int>(xyMap.getHeight()) - 1));
26
27 float fx = x - x0;
28 float fy = y - y0;
29
30 // Get four neighboring pixels
31 CRGB c00 = grid[xyMap.mapToIndex(x0, y0)];
32 CRGB c10 = grid[xyMap.mapToIndex(x1, y0)];
33 CRGB c01 = grid[xyMap.mapToIndex(x0, y1)];
34 CRGB c11 = grid[xyMap.mapToIndex(x1, y1)];
35
36 // Interpolate
37 CRGB c0 = CRGB::blend(c00, c10, static_cast<u8>(fx * 255));
38 CRGB c1 = CRGB::blend(c01, c11, static_cast<u8>(fx * 255));
39 return CRGB::blend(c0, c1, static_cast<u8>(fy * 255));
40}
static CRGB blend(const CRGB &p1, const CRGB &p2, fract8 amountOfP2) FL_NOEXCEPT
Definition crgb.cpp.hpp:54

References fl::CRGB::blend(), max(), min(), x, xyMap, and y.

Referenced by sample().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sampleNearest()

CRGB fl::sampleNearest ( const CRGB * grid,
const XYMap & xyMap,
float x,
float y )

Nearest-neighbor sample from a 2D CRGB grid.

Definition at line 42 of file sample.cpp.hpp.

42 {
43 int xi = static_cast<int>(x + 0.5f); // Round to nearest
44 int yi = static_cast<int>(y + 0.5f);
45 xi = max(0, min(xi, static_cast<int>(xyMap.getWidth()) - 1));
46 yi = max(0, min(yi, static_cast<int>(xyMap.getHeight()) - 1));
47 return grid[xyMap.mapToIndex(xi, yi)];
48}

References max(), min(), x, xyMap, and y.

Referenced by sample().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ scale8_to_16_accurate()

static u16 fl::scale8_to_16_accurate ( u8 x)
inlinestatic

Definition at line 11 of file hsv16.cpp.hpp.

11 {
12 if (x == 0) return 0;
13 if (x == 255) return 65535;
14 // Use 32-bit arithmetic with rounding: (x * 65535 + 127) / 255
15 // This is equivalent to: (x * 65535 + 255/2) / 255
16 return (u16)(((u32)x * 65535 + 127) / 255);
17}

References x.

Referenced by RGBtoHSV16().

+ Here is the caller graph for this function:

◆ screen()

float fl::screen ( float & a,
float & b )
inline

Definition at line 155 of file engine_core.h.

155 {
156 return (1 - (1 - a / 255.f) * (1 - b / 255.f)) * 255.f;
157}

Referenced by fl::Engine::screen().

+ Here is the caller graph for this function:

◆ screen_fp()

FASTLED_FORCE_INLINE fl::i32 fl::screen_fp ( fl::i32 a,
fl::i32 b )

Definition at line 139 of file render_value_fp.h.

139 {
140 // screen(a,b) = 1 - (1-a/255)*(1-b/255) * 255
141 // = 255 - (255-a)*(255-b)/255
142 return 255 - ((255 - a) * (255 - b)) / 255;
143}

References FASTLED_FORCE_INLINE.

◆ seconds16()

LIB8STATIC u16 fl::seconds16 ( )

Return the current seconds since boot in a 16-bit value.

Definition at line 18 of file time_functions.h.

18 {
19 u32 ms = fl::millis();
20 u16 s16;
21 s16 = ms / 1000;
22 return s16;
23}

References FL_NOEXCEPT, LIB8STATIC, and millis().

+ Here is the call graph for this function:

◆ serial_begin()

void fl::serial_begin ( u32 baudRate)

Definition at line 227 of file cstdio.cpp.hpp.

227 {
228 platforms::begin(baudRate);
229}

Referenced by autoResearchLowMemorySetup(), fl::SerialPort::begin(), and setup().

+ Here is the caller graph for this function:

◆ serial_ready()

bool fl::serial_ready ( )

Definition at line 231 of file cstdio.cpp.hpp.

231 {
232 return platforms::serial_ready();
233}

Referenced by fl::SerialPort::operator bool(), and setup().

+ Here is the caller graph for this function:

◆ serializeValue()

fl::string fl::serializeValue ( const json_value & value)

References type_rank< T >::value.

◆ set_errno()

void fl::set_errno ( int value)
inline

Definition at line 22 of file cerrno.h.

22 {
23 errno = value;
24}

References type_rank< T >::value.

◆ set_input_gamut() [1/2]

void fl::set_input_gamut ( DiodeProfile * profile,
InputGamut g )

Definition at line 279 of file rgbw.cpp.hpp.

279 {
280 set_input_gamut(profile, g, nullptr);
281}
void set_input_gamut(DiodeProfile *profile, InputGamut g, const float white_xy[2]) FL_NOEXCEPT
Definition rgbw.cpp.hpp:242

References FL_NOEXCEPT, and set_input_gamut().

+ Here is the call graph for this function:

◆ set_input_gamut() [2/2]

void fl::set_input_gamut ( DiodeProfile * profile,
InputGamut g,
const float white_xy[2] )

Definition at line 242 of file rgbw.cpp.hpp.

243 {
244 if (profile == nullptr) return;
245 auto apply = [profile](const float r[2], const float gp[2],
246 const float b[2], const float w[2]) {
247 profile->input_xy_r[0] = r[0]; profile->input_xy_r[1] = r[1];
248 profile->input_xy_g[0] = gp[0]; profile->input_xy_g[1] = gp[1];
249 profile->input_xy_b[0] = b[0]; profile->input_xy_b[1] = b[1];
250 profile->input_xy_w[0] = w[0]; profile->input_xy_w[1] = w[1];
251 };
252 switch (g) {
253 case InputGamut::Native: {
254 // For Native, the input gamut tracks this profile's LED primaries —
255 // copy them over rather than picking a fixed sRGB-like fallback.
256 const float d65[2] = {0.31272f, 0.32903f};
257 const float* w = (white_xy != nullptr) ? white_xy : d65;
258 apply(profile->xy_r, profile->xy_g, profile->xy_b, w);
260 return;
261 }
263 white_xy != nullptr ? white_xy : kRec709.xy_w);
264 invalidate_colorimetric_caches_for(profile); return;
266 white_xy != nullptr ? white_xy : kRec2020.xy_w);
267 invalidate_colorimetric_caches_for(profile); return;
269 white_xy != nullptr ? white_xy : kDciP3D65.xy_w);
270 invalidate_colorimetric_caches_for(profile); return;
272 white_xy != nullptr ? white_xy : kDciP3D60.xy_w);
273 invalidate_colorimetric_caches_for(profile); return;
274 }
275 // Default-fallthrough for forward-compat with future enum additions:
276 // leave the profile's input_xy_* untouched — also nothing to invalidate.
277}
void invalidate_colorimetric_caches_for(const DiodeProfile *profile) FL_NOEXCEPT
Definition rgbw.cpp.hpp:503
float input_xy_b[2]
Definition rgbw.h:68
float xy_g[2]
Definition rgbw.h:56
float input_xy_r[2]
Definition rgbw.h:66
float xy_b[2]
Definition rgbw.h:57
float input_xy_g[2]
Definition rgbw.h:67
float input_xy_w[2]
Definition rgbw.h:69
float xy_r[2]
Definition rgbw.h:55

References DciP3D60, DciP3D65, FL_NOEXCEPT, Native, Rec2020, Rec709, fl::anonymous_namespace{rgbw.cpp.hpp}::NamedGamut::xy_b, fl::anonymous_namespace{rgbw.cpp.hpp}::NamedGamut::xy_g, fl::anonymous_namespace{rgbw.cpp.hpp}::NamedGamut::xy_r, and fl::anonymous_namespace{rgbw.cpp.hpp}::NamedGamut::xy_w.

Referenced by set_input_gamut(), CFastLED::setInputGamut(), and CFastLED::setInputGamut().

+ Here is the caller graph for this function:

◆ set_rgb_2_rgbw_function()

void fl::set_rgb_2_rgbw_function ( rgb_2_rgbw_function func)

Definition at line 173 of file rgbw.cpp.hpp.

173 {
175}

References fl::Singleton< T, N >::instance().

+ Here is the call graph for this function:

◆ set_rgb_2_rgbww_function()

void fl::set_rgb_2_rgbww_function ( rgb_2_rgbww_function func)

Definition at line 123 of file rgbww.cpp.hpp.

123 {
125}

References FL_NOEXCEPT, and fl::Singleton< T, N >::instance().

+ Here is the call graph for this function:

◆ set_rgbw_colorimetric_profile()

void fl::set_rgbw_colorimetric_profile ( const DiodeProfile * profile)

Definition at line 199 of file rgbw.cpp.hpp.

199 {
201}

References FL_NOEXCEPT, and fl::Singleton< T, N >::instance().

Referenced by CFastLED::setRgbwColorimetricProfile().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ set_rgbww_colorimetric_profile()

void fl::set_rgbww_colorimetric_profile ( const colorimetric_detail::RgbcctProfile * profile)

Definition at line 98 of file rgbww.cpp.hpp.

98 {
100 if (profile == nullptr) {
101 state.has_profile = false;
102 return;
103 }
104 state.profile = *profile;
105 state.has_profile = true;
106}

References FL_NOEXCEPT, fl::Singleton< T, N >::instance(), and state.

+ Here is the call graph for this function:

◆ setAdcRange()

void fl::setAdcRange ( AdcRange range)

Set ADC voltage range.

Parameters
rangeVoltage range for analog readings
Note
Implementation varies by platform (reference voltage vs attenuation)
Not all ranges supported on all platforms (no-op for unsupported values)

Definition at line 63 of file pin.cpp.hpp.

63 {
64 platforms::setAdcRange(range);
65}

◆ setLogLevel()

void fl::setLogLevel ( u8 level)

Set the global log level.

Parameters
levelNew log level (use LogLevel enum values)
Note
Setting to LogLevel::FL_LOG_LEVEL_NONE disables all logging output

Definition at line 32 of file cstdio.cpp.hpp.

32 {
33 gLogLevel = level;
34}

References gLogLevel.

Referenced by fl::ScopedLogDisable::ScopedLogDisable(), and fl::ScopedLogDisable::~ScopedLogDisable().

+ Here is the caller graph for this function:

◆ SetPSRamAllocator()

void fl::SetPSRamAllocator ( void *(* alloc )(fl::size),
void(* free )(void *) )

Definition at line 114 of file allocator.cpp.hpp.

114 {
115 Alloc = alloc;
116 Dealloc = free;
117}

References free().

+ Here is the call graph for this function:

◆ setPwm16()

void fl::setPwm16 ( int pin,
u16 val )

Set PWM duty cycle with 16-bit resolution.

Parameters
pinPin number (platform-specific numbering)
valPWM duty cycle (0-65535, platform-specific maximum)

Definition at line 249 of file pin.cpp.hpp.

249 {
251
253 // Route to ISR duty cycle update (scale 16-bit to 8-bit)
254 u8 duty = static_cast<u8>(val >> 8);
256 ch->duty_cycle = duty;
257 ch->high_ticks = (static_cast<u32>(ch->period_ticks) * duty) / 256;
258 return;
259 }
260
261 if (ch && ch->backend == pwm_state::PwmBackend::Native) {
262 platforms::setPwm16(pin, val);
263 return;
264 }
265
266 // No setPwmFrequency called — forward to platform as before
267 platforms::setPwm16(pin, val);
268}

References fl::pwm_state::PwmPinState::backend, fl::pwm_state::PwmPinState::duty_cycle, fl::pwm_state::findByPin(), fl::pwm_state::PwmPinState::high_ticks, fl::pwm_state::IsrSoftware, fl::pwm_state::Native, and fl::pwm_state::PwmPinState::period_ticks.

Referenced by analogWrite16().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ setPwmFrequency()

int fl::setPwmFrequency ( int pin,
u32 frequency_hz )

Set PWM frequency for a pin.

Subsequent analogWrite()/setPwm16() calls use this frequency. Automatically selects native hardware PWM or ISR-based software PWM depending on platform.

Parameters
pinPin number (platform-specific numbering)
frequency_hzDesired PWM frequency in Hz (1-500 Hz for ISR, platform-dependent for native HW)
Returns
0 on success, negative error code on failure (-1: invalid freq, -2: all channels in use, -3: ISR setup failed, -4: native HW failed)

Definition at line 274 of file pin.cpp.hpp.

274 {
275 // Check if pin already has a channel
277
278 if (ch) {
279 // Pin already configured — release and reconfigure
281 ch = nullptr;
282 }
283
284 // Validate frequency
285 if (frequency_hz == 0) {
286 FL_WARN("setPwmFrequency: Frequency must be > 0");
287 return -1;
288 }
289
290 // Query platform: can it handle this natively?
291 bool needs_isr = platforms::needsPwmIsrFallback(pin, frequency_hz);
292
293 if (!needs_isr) {
294 // Native path
295 int result = platforms::setPwmFrequencyNative(pin, frequency_hz);
296 if (result != 0) {
297 FL_WARN("setPwmFrequency: Native backend failed: " << result);
298 return result;
299 }
300
301 // Allocate tracking slot
302 ch = pwm_state::allocate();
303 if (!ch) {
304 FL_WARN("setPwmFrequency: All " << static_cast<int>(pwm_state::MAX_PWM_CHANNELS) << " channels in use");
305 return -2;
306 }
307
308 ch->pin = pin;
309 ch->frequency_hz = frequency_hz;
311 ch->duty_cycle = 0;
312 return 0;
313 }
314
315 // ISR software fallback path
316 if (frequency_hz > pwm_state::MAX_ISR_PWM_FREQUENCY) {
317 FL_WARN("setPwmFrequency: ISR fallback max " << pwm_state::MAX_ISR_PWM_FREQUENCY << " Hz, requested " << frequency_hz);
318 return -1;
319 }
320
321 // Allocate channel
322 ch = pwm_state::allocate();
323 if (!ch) {
324 FL_WARN("setPwmFrequency: All " << static_cast<int>(pwm_state::MAX_PWM_CHANNELS) << " channels in use");
325 return -2;
326 }
327
328 // Ensure ISR is running
329 int isr_result = pwm_state::ensureIsrActive();
330 if (isr_result != 0) {
331 return -3;
332 }
333
334 // Configure GPIO
337
338 // Initialize channel (atomic)
339 {
340 fl::isr::critical_section cs;
341 ch->pin = pin;
342 ch->frequency_hz = frequency_hz;
344 ch->period_ticks = pwm_state::ISR_FREQUENCY_HZ / frequency_hz;
345 ch->duty_cycle = 0;
346 ch->high_ticks = 0;
347 ch->tick_counter = 0;
348 ch->pin_state = false;
349 }
350
351 return 0;
352}
constexpr u8 MAX_PWM_CHANNELS
Definition pin.cpp.hpp:79
constexpr u32 MAX_ISR_PWM_FREQUENCY
Definition pin.cpp.hpp:81
PwmPinState * allocate()
Definition pin.cpp.hpp:152
constexpr u32 ISR_FREQUENCY_HZ
Definition pin.cpp.hpp:80
int ensureIsrActive()
Definition pin.cpp.hpp:175
void pinMode(int pin, PinMode mode)
Set pin mode (input, output, pull-up, pull-down)
Definition pin.cpp.hpp:378
void digitalWrite(int pin, PinValue val)
Write digital value to pin.
Definition pin.cpp.hpp:51

References fl::pwm_state::allocate(), fl::pwm_state::PwmPinState::backend, digitalWrite(), fl::pwm_state::PwmPinState::duty_cycle, fl::pwm_state::ensureIsrActive(), fl::pwm_state::findByPin(), FL_WARN, fl::pwm_state::PwmPinState::frequency_hz, fl::pwm_state::PwmPinState::high_ticks, fl::pwm_state::ISR_FREQUENCY_HZ, fl::pwm_state::IsrSoftware, Low, fl::pwm_state::MAX_ISR_PWM_FREQUENCY, fl::pwm_state::MAX_PWM_CHANNELS, fl::pwm_state::Native, Output, fl::pwm_state::PwmPinState::period_ticks, fl::pwm_state::PwmPinState::pin, fl::pwm_state::PwmPinState::pin_state, pinMode(), fl::pwm_state::releaseChannel(), and fl::pwm_state::PwmPinState::tick_counter.

Referenced by initPanels().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ setTime()

void fl::setTime ( Context & ctx,
fl::u32 t )
inline

Definition at line 143 of file engine.h.

143 {
144 ctx.currentTime = t;
145 if (ctx.mEngine) {
146 ctx.mEngine->setTime(t);
147 }
148}
fl::optional< fl::u32 > currentTime
Definition context.h:35

References fl::Context::currentTime, fl::Context::mEngine, and t.

Referenced by fl::Animartrix::draw().

+ Here is the caller graph for this function:

◆ shuffle() [1/3]

template<typename Iterator>
void fl::shuffle ( Iterator first,
Iterator last )

Definition at line 662 of file algorithm.h.

662 {
663 shuffle(first, last, default_random());
664}
math::random & default_random()
Global default random number generator instance.
void shuffle(Iterator first, Iterator last, RandomGenerator &g) FL_NOEXCEPT
Definition algorithm.h:628

References default_random(), FL_NOEXCEPT, and shuffle().

+ Here is the call graph for this function:

◆ shuffle() [2/3]

template<typename Iterator>
void fl::shuffle ( Iterator first,
Iterator last,
math::random & rng )

Definition at line 645 of file algorithm.h.

645 {
646 if (first == last) {
647 return; // Empty range, nothing to shuffle
648 }
649
650 auto n = last - first;
651 for (auto i = n - 1; i > 0; --i) {
652 // Generate random index from 0 to i (inclusive)
653 auto j = rng(static_cast<u32>(i + 1));
654
655 // Swap elements at positions i and j
656 swap(*(first + i), *(first + j));
657 }
658}

References FL_NOEXCEPT, and swap().

+ Here is the call graph for this function:

◆ shuffle() [3/3]

template<typename Iterator, typename RandomGenerator>
void fl::shuffle ( Iterator first,
Iterator last,
RandomGenerator & g )

Definition at line 628 of file algorithm.h.

628 {
629 if (first == last) {
630 return; // Empty range, nothing to shuffle
631 }
632
633 auto n = last - first;
634 for (auto i = n - 1; i > 0; --i) {
635 // Generate random index from 0 to i (inclusive)
636 auto j = g() % (i + 1);
637
638 // Swap elements at positions i and j
639 swap(*(first + i), *(first + j));
640 }
641}

References FL_NOEXCEPT, and swap().

Referenced by shuffle().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sift_down()

template<typename Iterator, typename Compare>
void fl::sift_down ( Iterator first,
Iterator last,
Iterator start,
Compare comp )

Definition at line 15 of file priority_queue.h.

15 {
16 auto root = start;
17 auto child = first + 2 * (root - first) + 1;
18
19 while (child < last) {
20 if (child + 1 < last && comp(*child, *(child + 1))) {
21 ++child;
22 }
23
24 if (comp(*root, *child)) {
25 auto tmp = *root;
26 *root = *child;
27 *child = tmp;
28
29 root = child;
30 child = first + 2 * (root - first) + 1;
31 } else {
32 break;
33 }
34 }
35}

Referenced by pop_heap().

+ Here is the caller graph for this function:

◆ sign()

template<typename T>
enable_if< is_fixed_point< T >::value, int >::type fl::sign ( T x)
inlineconstexpr

Definition at line 530 of file fixed_point.h.

530{ return T::sign(x); }

References FL_NOEXCEPT, and x.

Referenced by fl::third_party::ClipToShort(), fl::third_party::FASTABS(), FL_DISABLE_WARNING(), fl::third_party::vorbis::float32_unpack(), itoa(), itoa64(), parseFloat(), and parseInt().

+ Here is the caller graph for this function:

◆ sin() [1/3]

double fl::sin ( double value)
inline

Definition at line 353 of file math.h.

353{ return sin_impl_double(value); }
double sin_impl_double(double value)
Definition math.cpp.hpp:264

References FL_NOEXCEPT, sin_impl_double(), and type_rank< T >::value.

+ Here is the call graph for this function:

◆ sin() [2/3]

template<typename T>
enable_if< is_fixed_point< T >::value, T >::type fl::sin ( T angle)
inline
Examples
BeatDetection.ino, and Sailboat.ino.

Definition at line 577 of file fixed_point.h.

577{ return T::sin(angle); }

References FL_NOEXCEPT.

Referenced by fl::ScreenMap::Circle(), animartrix_ring::SoundOrchestrator::driveBpmLocked(), fillFrameBufferNoise(), makeCorkScrew(), makeRingScreenMap(), and makeScreenMap().

+ Here is the caller graph for this function:

◆ sin() [3/3]

template<typename T>
enable_if< is_integral< T >::value, float >::type fl::sin ( T value)
inline

Definition at line 355 of file math.h.

355{ return sin_impl_float(static_cast<float>(value)); }
float sin_impl_float(float value)
Definition math.cpp.hpp:256

References FL_NOEXCEPT, sin_impl_float(), and type_rank< T >::value.

+ Here is the call graph for this function:

◆ sin16lut()

FASTLED_FORCE_INLINE i16 fl::sin16lut ( u16 angle)

Definition at line 121 of file sin32.h.

121 {
122 u32 angle32 = static_cast<u32>(angle) << 8;
123 return static_cast<i16>(sin32(angle32) >> 16);
124}

References FASTLED_FORCE_INLINE, FL_NOEXCEPT, and sin32().

+ Here is the call graph for this function:

◆ sin32()

FASTLED_FORCE_INLINE i32 fl::sin32 ( u32 angle)

Definition at line 59 of file sin32.h.

59 {
60 u8 angle256 = static_cast<u8>(angle >> 16); // 0..255
61 u32 t = angle & 0xFFFF; // 0..65535
62
63 u8 quadrant = angle256 >> 6; // 0..3
64 u8 pos = angle256 & 0x3F; // 0..63
65
66 // Branchless quarter-wave mapping
67 u8 mirror = quadrant & 1;
68 u8 qi = static_cast<u8>(pos + mirror * (64 - 2 * pos));
69 u8 qi_next = static_cast<u8>(qi + 1 - 2 * mirror);
70
71 i32 dmask = -static_cast<i32>(mirror);
72 i32 raw = sin32_interp(qi, qi_next, dmask, t);
73
74 // Branchless sign: negative in quadrants 2, 3
75 i32 vmask = -static_cast<i32>((quadrant >> 1) & 1);
76 return (i32)(((i64)raw ^ vmask) - vmask);
77}
FASTLED_FORCE_INLINE i32 sin32_interp(u8 qi, u8 qi_next, i32 dmask, u32 t, u8 offset=0) FL_NOEXCEPT
Definition sin32.h:40

References FASTLED_FORCE_INLINE, FL_NOEXCEPT, pos, sin32_interp(), and t.

Referenced by cos32(), easeOutSine16(), fl::fixed_point_base< Derived, IntBits, FracBits >::sin(), fl::s12x4::sin(), fl::s16x16::sin(), fl::s24x8::sin(), fl::s4x12::sin(), fl::s8x24::sin(), fl::s8x8::sin(), sin16lut(), fl::s12x4::sincos(), fl::s24x8::sincos(), fl::s4x12::sincos(), fl::s8x24::sincos(), and fl::s8x8::sincos().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sin32_interp()

FASTLED_FORCE_INLINE i32 fl::sin32_interp ( u8 qi,
u8 qi_next,
i32 dmask,
u32 t,
u8 offset = 0 )

Definition at line 40 of file sin32.h.

40 {
41 i32 y0 = read_sin32_lut(&sinCosPairedLut[qi * 4 + offset]);
42 i32 m0 = read_sin32_lut(&sinCosPairedLut[qi * 4 + offset + 1]);
43 i32 y1 = read_sin32_lut(&sinCosPairedLut[qi_next * 4 + offset]);
44
45 // Branchless conditional negate derivative
46 m0 = (m0 ^ dmask) - dmask;
47
48 // Quadratic interpolation (Horner form, 2 muls):
49 // P(t) = y0 + T*(m0 + T*(y1 - y0 - m0)) where T = t/65536
50 i32 c = y1 - y0 - m0;
51 i32 r = (i32)((i64)c * t >> 16) + m0;
52 return (i32)(((i64)r * t >> 16) + (i64)y0);
53}
FASTLED_FORCE_INLINE i32 read_sin32_lut(const i32 *addr) FL_NOEXCEPT
Definition sin32.h:30
const i32 sinCosPairedLut[]

References FASTLED_FORCE_INLINE, FL_NOEXCEPT, offset(), read_sin32_lut(), sinCosPairedLut, and t.

Referenced by sin32(), and sincos32().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sin_impl_double()

double fl::sin_impl_double ( double value)

Definition at line 264 of file math.cpp.hpp.

264 {
265#if FL_MATH_USE_LIBM
266 return ::sin(value);
267#else
269#endif
270}
F sin_reduce_(F x) FL_NOEXCEPT
Definition math.cpp.hpp:184

References fl::detail::sin_reduce_(), and type_rank< T >::value.

Referenced by sin().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sin_impl_float()

float fl::sin_impl_float ( float value)

Definition at line 256 of file math.cpp.hpp.

256 {
257#if FL_MATH_USE_LIBM
258 return ::sinf(value);
259#else
261#endif
262}

References fl::detail::sin_reduce_(), and type_rank< T >::value.

Referenced by sin(), and sinf().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sincos() [1/3]

template<typename T>
enable_if< is_integral< T >::value >::type fl::sincos ( T angle,
float & out_sin,
float & out_cos )
inline

Definition at line 544 of file math.h.

544 {
545 out_sin = fl::sinf(static_cast<float>(angle));
546 out_cos = fl::cosf(static_cast<float>(angle));
547}

References cosf(), FL_NOEXCEPT, and sinf().

+ Here is the call graph for this function:

◆ sincos() [2/3]

template<typename T>
enable_if< is_fixed_point< T >::value, void >::type fl::sincos ( T angle,
T & out_sin,
T & out_cos )
inline

Definition at line 589 of file fixed_point.h.

589{ T::sincos(angle, out_sin, out_cos); }

References FL_NOEXCEPT.

◆ sincos() [3/3]

template<typename T>
enable_if< is_floating_point< T >::value >::type fl::sincos ( T angle,
T & out_sin,
T & out_cos )
inline

Definition at line 536 of file math.h.

536 {
537 out_sin = static_cast<T>(fl::sinf(static_cast<float>(angle)));
538 out_cos = static_cast<T>(fl::cosf(static_cast<float>(angle)));
539}

References cosf(), FL_NOEXCEPT, and sinf().

+ Here is the call graph for this function:

◆ sincos32()

FASTLED_FORCE_INLINE SinCos32 fl::sincos32 ( u32 angle)

Definition at line 88 of file sin32.h.

88 {
89 u8 angle256 = static_cast<u8>(angle >> 16);
90 u32 t = angle & 0xFFFF;
91
92 u8 quadrant = angle256 >> 6;
93 u8 pos = angle256 & 0x3F;
94
95 // Quarter-wave mapping (same for both sin and cos)
96 u8 mirror_s = quadrant & 1;
97 u8 qi = static_cast<u8>(pos + mirror_s * (64 - 2 * pos));
98 u8 qi_next = static_cast<u8>(qi + 1 - 2 * mirror_s);
99
100 // Derivative masks: sin and cos have opposite mirror states
101 i32 sdmask = -static_cast<i32>(mirror_s);
102 i32 cdmask = ~sdmask; // opposite mirror
103
104 // Sin at offset 0, cos at offset 2 — same qi, same cache line
105 i32 s_raw = sin32_interp(qi, qi_next, sdmask, t, 0);
106 i32 c_raw = sin32_interp(qi, qi_next, cdmask, t, 2);
107
108 // Sin sign: negative in quadrants 2, 3
109 i32 svmask = -static_cast<i32>((quadrant >> 1) & 1);
110 // Cos sign: negative in quadrants 1, 2 (XOR of quadrant bits)
111 i32 cvmask = -static_cast<i32>((quadrant ^ (quadrant >> 1)) & 1);
112
113 SinCos32 out;
114 out.sin_val = (i32)(((i64)s_raw ^ svmask) - svmask);
115 out.cos_val = (i32)(((i64)c_raw ^ cvmask) - cvmask);
116 return out;
117}

References fl::SinCos32::cos_val, FASTLED_FORCE_INLINE, FL_NOEXCEPT, pos, sin32_interp(), fl::SinCos32::sin_val, and t.

Referenced by fl::Chasing_Spirals_Q31_SIMD::draw(), render_value_fp(), fl::fixed_point_base< Derived, IntBits, FracBits >::sincos(), and fl::s16x16::sincos().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sincos32_simd()

FASTLED_FORCE_INLINE SinCos32_simd fl::sincos32_simd ( simd::simd_u32x4 angles)

Process 4 angles simultaneously, returning vectorized sin/cos values SIMD-optimized: vectorized angle decomposition, vector LUT loads with 4x4 transpose (AoS→SoA), and vectorized quadratic interpolation.

Parameters
angles4 u32 angles (0 to 16777216 per angle is a full circle)
Returns
SinCos32_simd with raw i32 values (range: -2147418112 to 2147418112)

Definition at line 145 of file sin32.h.

145 {
146 // ========== Phase 1a: SIMD angle decomposition ==========
147 // Break down each of the 4 angles into components needed for LUT lookup
148
149 // Extract high 8 bits (angle >> 16) → 0..255 range for quadrant + position
150 simd::simd_u32x4 angle256_vec = simd::srl_u32_4(angles, 16);
151
152 // Extract low 16 bits → fractional part for interpolation (0..65535)
153 simd::simd_u32x4 t_vec = simd::and_u32_4(angles, simd::set1_u32_4(0xFFFF));
154
155 // Determine quadrant (0=0°-90°, 1=90°-180°, 2=180°-270°, 3=270°-360°)
156 simd::simd_u32x4 quadrant_vec = simd::srl_u32_4(angle256_vec, 6);
157
158 // Position within quadrant (0..63) → maps to LUT indices 0..63
159 simd::simd_u32x4 pos_vec = simd::and_u32_4(angle256_vec, simd::set1_u32_4(0x3F));
160
161 // Mirror flag: quadrants 1 and 3 need mirrored LUT access
162 simd::simd_u32x4 mirror_s_vec = simd::and_u32_4(quadrant_vec, simd::set1_u32_4(1));
163
164 // ========== Phase 1b: SIMD mask computation ==========
165 // Compute masks for branchless conditional negation in interpolation and sign application
166
167 // Sin derivative mask: 0x00000000 (direct) or 0xFFFFFFFF (negate derivative in mirrored quadrants)
168 simd::simd_u32x4 sdmask_vec = simd::sub_i32_4(simd::set1_u32_4(0), mirror_s_vec);
169
170 // Cos derivative mask: opposite of sin (cos mirrors opposite direction)
171 simd::simd_u32x4 cdmask_vec = simd::xor_u32_4(sdmask_vec, simd::set1_u32_4(0xFFFFFFFF));
172
173 // Sin value sign mask: negative in quadrants 2 and 3 (bit 1 of quadrant)
174 simd::simd_u32x4 quadrant_bit1 = simd::and_u32_4(simd::srl_u32_4(quadrant_vec, 1), simd::set1_u32_4(1));
175 simd::simd_u32x4 svmask_vec = simd::sub_i32_4(simd::set1_u32_4(0), quadrant_bit1);
176
177 // Cos value sign mask: negative in quadrants 1 and 2 (XOR of quadrant bits 0 and 1)
178 simd::simd_u32x4 quadrant_xor = simd::xor_u32_4(quadrant_vec, simd::srl_u32_4(quadrant_vec, 1));
179 simd::simd_u32x4 quadrant_xor_bit0 = simd::and_u32_4(quadrant_xor, simd::set1_u32_4(1));
180 simd::simd_u32x4 cvmask_vec = simd::sub_i32_4(simd::set1_u32_4(0), quadrant_xor_bit0);
181
182 // ========== Phase 1c: Vectorized quarter-wave index mapping ==========
183 // Map position to LUT index using quarter-wave symmetry (branchless mirror logic)
184
185 // Compute qi = pos + mirror * (64 - 2*pos)
186 // This mirrors the position for odd quadrants: pos 0→64, pos 63→1
187 simd::simd_u32x4 two_pos = simd::add_i32_4(pos_vec, pos_vec);
188 simd::simd_u32x4 term_vec = simd::sub_i32_4(simd::set1_u32_4(64), two_pos);
189 simd::simd_u32x4 masked_term = simd::and_u32_4(term_vec, sdmask_vec); // Zero term if not mirrored
190 simd::simd_u32x4 qi_s_vec = simd::add_i32_4(pos_vec, masked_term);
191
192 // Compute qi_next = qi + 1 - 2*mirror
193 // Direct: qi_next = qi + 1 (forward), Mirrored: qi_next = qi - 1 (backward)
194 simd::simd_u32x4 two_mirror_s = simd::add_i32_4(mirror_s_vec, mirror_s_vec);
195 simd::simd_u32x4 qi_next_s_vec = simd::sub_i32_4(simd::add_i32_4(qi_s_vec, simd::set1_u32_4(1)), two_mirror_s);
196
197 // ========== Phase 2: Vector LUT loads + 4x4 transpose (AoS → SoA) ==========
198 // Each LUT entry is 16 bytes: {y_sin, m_sin, y_cos, m_cos} (4 × i32)
199 // We load 4 full entries (one per angle) and transpose to separate vectors
200 // Input: 4 rows × 4 columns (AoS: each row is one angle's data)
201 // Output: 4 columns as separate vectors (SoA: each vector contains same field for 4 angles)
202
203 // Extract indices from SIMD registers for scalar LUT indexing
204 // (SIMD gather is not available on all platforms, so we use scalar indexing)
205 u32 qi0 = simd::extract_u32_4(qi_s_vec, 0);
206 u32 qi1 = simd::extract_u32_4(qi_s_vec, 1);
207 u32 qi2 = simd::extract_u32_4(qi_s_vec, 2);
208 u32 qi3 = simd::extract_u32_4(qi_s_vec, 3);
209
210 u32 qn0 = simd::extract_u32_4(qi_next_s_vec, 0);
211 u32 qn1 = simd::extract_u32_4(qi_next_s_vec, 1);
212 u32 qn2 = simd::extract_u32_4(qi_next_s_vec, 2);
213 u32 qn3 = simd::extract_u32_4(qi_next_s_vec, 3);
214
215 // Load full 16-byte qi entries: {y_sin, m_sin, y_cos, m_cos}
216 // e0 = {y_s0, m_s0, y_c0, m_c0}, e1 = {y_s1, m_s1, y_c1, m_c1}, ...
217 simd::simd_u32x4 e0 = simd::load_u32_4(reinterpret_cast<const u32*>(&sinCosPairedLut[qi0 * 4])); // ok reinterpret cast
218 simd::simd_u32x4 e1 = simd::load_u32_4(reinterpret_cast<const u32*>(&sinCosPairedLut[qi1 * 4])); // ok reinterpret cast
219 simd::simd_u32x4 e2 = simd::load_u32_4(reinterpret_cast<const u32*>(&sinCosPairedLut[qi2 * 4])); // ok reinterpret cast
220 simd::simd_u32x4 e3 = simd::load_u32_4(reinterpret_cast<const u32*>(&sinCosPairedLut[qi3 * 4])); // ok reinterpret cast
221
222 // 4x4 transpose qi entries: AoS {y_s, m_s, y_c, m_c} → SoA
223 // Classic SIMD matrix transpose using interleaved unpacks
224 // Step 1: interleave pairs at 32-bit granularity
225 simd::simd_u32x4 t01lo = simd::unpacklo_u32_4(e0, e1); // {y_s0, y_s1, m_s0, m_s1}
226 simd::simd_u32x4 t01hi = simd::unpackhi_u32_4(e0, e1); // {y_c0, y_c1, m_c0, m_c1}
227 simd::simd_u32x4 t23lo = simd::unpacklo_u32_4(e2, e3); // {y_s2, y_s3, m_s2, m_s3}
228 simd::simd_u32x4 t23hi = simd::unpackhi_u32_4(e2, e3); // {y_c2, y_c3, m_c2, m_c3}
229 // Step 2: final interleave at 64-bit granularity → complete SoA vectors
230 simd::simd_u32x4 y0_s_v = simd::unpacklo_u64_as_u32_4(t01lo, t23lo); // {y_s0, y_s1, y_s2, y_s3}
231 simd::simd_u32x4 m0_s_v = simd::unpackhi_u64_as_u32_4(t01lo, t23lo); // {m_s0, m_s1, m_s2, m_s3}
232 simd::simd_u32x4 y0_c_v = simd::unpacklo_u64_as_u32_4(t01hi, t23hi); // {y_c0, y_c1, y_c2, y_c3}
233 simd::simd_u32x4 m0_c_v = simd::unpackhi_u64_as_u32_4(t01hi, t23hi); // {m_c0, m_c1, m_c2, m_c3}
234
235 // Load full 16-byte qi_next entries (only need y_sin and y_cos for interpolation endpoint)
236 simd::simd_u32x4 n0 = simd::load_u32_4(reinterpret_cast<const u32*>(&sinCosPairedLut[qn0 * 4])); // ok reinterpret cast
237 simd::simd_u32x4 n1 = simd::load_u32_4(reinterpret_cast<const u32*>(&sinCosPairedLut[qn1 * 4])); // ok reinterpret cast
238 simd::simd_u32x4 n2 = simd::load_u32_4(reinterpret_cast<const u32*>(&sinCosPairedLut[qn2 * 4])); // ok reinterpret cast
239 simd::simd_u32x4 n3 = simd::load_u32_4(reinterpret_cast<const u32*>(&sinCosPairedLut[qn3 * 4])); // ok reinterpret cast
240
241 // Partial transpose qi_next: only extract y_sin and y_cos (derivatives not needed)
242 simd::simd_u32x4 n01lo = simd::unpacklo_u32_4(n0, n1); // {y_s0, y_s1, m_s0, m_s1}
243 simd::simd_u32x4 n01hi = simd::unpackhi_u32_4(n0, n1); // {y_c0, y_c1, m_c0, m_c1}
244 simd::simd_u32x4 n23lo = simd::unpacklo_u32_4(n2, n3); // {y_s2, y_s3, m_s2, m_s3}
245 simd::simd_u32x4 n23hi = simd::unpackhi_u32_4(n2, n3); // {y_c2, y_c3, m_c2, m_c3}
246 simd::simd_u32x4 y1_s_v = simd::unpacklo_u64_as_u32_4(n01lo, n23lo); // {y1_s0, y1_s1, y1_s2, y1_s3}
247 simd::simd_u32x4 y1_c_v = simd::unpacklo_u64_as_u32_4(n01hi, n23hi); // {y1_c0, y1_c1, y1_c2, y1_c3}
248
249 // ========== Phase 3: SIMD quadratic interpolation ==========
250 // Vectorized version of scalar interpolation formula from sin32_interp()
251 // P(t) = y0 + T*(m0 + T*(y1 - y0 - m0)) where T = t/65536
252 // Implemented as: c = y1 - y0 - m0; r = c*T + m0; result = r*T + y0
253 //
254 // Optimization: Uses mulhi_su32_4 (signed × unsigned-positive, 11 ops on SSE2)
255 // instead of mulhi_i32_4 (14 ops on SSE2). Safe because t_vec is always in [0, 65535].
256
257 // Sin interpolation
258 // Apply derivative mask: conditionally negate m0 for mirrored quadrants
259 m0_s_v = simd::sub_i32_4(simd::xor_u32_4(m0_s_v, sdmask_vec), sdmask_vec); // (m0 ^ mask) - mask
260 // Compute quadratic coefficient: c = y1 - y0 - m0
261 simd::simd_u32x4 c_s = simd::sub_i32_4(simd::sub_i32_4(y1_s_v, y0_s_v), m0_s_v);
262 // First multiply: r = c*t/65536 + m0 (linear term + derivative)
263 simd::simd_u32x4 r_s = simd::add_i32_4(simd::mulhi_su32_4(c_s, t_vec), m0_s_v);
264 // Second multiply: result = r*t/65536 + y0 (quadratic interpolation complete)
265 simd::simd_u32x4 s_raw = simd::add_i32_4(simd::mulhi_su32_4(r_s, t_vec), y0_s_v);
266
267 // Cos interpolation (identical structure to sin, but uses cos-specific masks and data)
268 m0_c_v = simd::sub_i32_4(simd::xor_u32_4(m0_c_v, cdmask_vec), cdmask_vec); // Conditionally negate m0
269 simd::simd_u32x4 c_c = simd::sub_i32_4(simd::sub_i32_4(y1_c_v, y0_c_v), m0_c_v); // c = y1 - y0 - m0
270 simd::simd_u32x4 r_c = simd::add_i32_4(simd::mulhi_su32_4(c_c, t_vec), m0_c_v); // r = c*t/65536 + m0
271 simd::simd_u32x4 c_raw = simd::add_i32_4(simd::mulhi_su32_4(r_c, t_vec), y0_c_v); // result = r*t/65536 + y0
272
273 // ========== Apply final sign masks ==========
274 // Use branchless negate: (val ^ mask) - mask
275 // If mask = 0x00000000: val unchanged
276 // If mask = 0xFFFFFFFF: val negated (two's complement)
277 SinCos32_simd result;
278 result.sin_vals = simd::sub_i32_4(simd::xor_u32_4(s_raw, svmask_vec), svmask_vec); // Negate if quadrant 2 or 3
279 result.cos_vals = simd::sub_i32_4(simd::xor_u32_4(c_raw, cvmask_vec), cvmask_vec); // Negate if quadrant 1 or 2
280 return result;
281}
platforms::simd_u32x4 simd_u32x4
Definition types.h:26

References FASTLED_FORCE_INLINE, FL_NOEXCEPT, and sinCosPairedLut.

Referenced by fl::Chasing_Spirals_Q31::draw(), and fl::anonymous_namespace{chasing_spirals.cpp.hpp}::simd4_processChannel().

+ Here is the caller graph for this function:

◆ sinf()

float fl::sinf ( float value)
inline

Definition at line 352 of file math.h.

352{ return sin_impl_float(value); }

References FL_NOEXCEPT, sin_impl_float(), and type_rank< T >::value.

Referenced by fl::detail::BiquadFilterImpl< T >::bandpass(), fl::detail::BiquadFilterImpl< T >::butterworth(), fl::ArchimedeanSpiralPath::compute(), fl::CirclePath::compute(), fl::GielisCurvePath::compute(), fl::HeartPath::compute(), fl::PhyllotaxisPath::compute(), fl::RosePath::compute(), fl::Luminova::draw(), fl::Module_Experiment10::draw(), fl::Module_Experiment10_FP::draw(), fl::Module_Experiment5::draw(), fl::Module_Experiment5_FP::draw(), fl::Module_Experiment6::draw(), fl::Module_Experiment6_FP::draw(), fl::Module_Experiment7::draw(), fl::Module_Experiment7_FP::draw(), fl::Module_Experiment8::draw(), fl::Module_Experiment8_FP::draw(), fl::Parametric_Water::draw(), fl::Parametric_Water_FP::draw(), fl::Water::draw(), fl::Water_FP::draw(), drawPlasmaWave(), drawRadialSpectrum(), fl::FlowFieldFloat::emitLissajousLine(), fl::FlowFieldFloat::emitOrbitalDots(), FL_DISABLE_WARNING(), fl::detail::BiquadFilterImpl< T >::highpass(), loop(), noiseCylinderCRGB(), noiseCylinderHSV16(), noiseRingCRGB(), noiseRingHSV16(), noiseSphereCRGB(), noiseSphereHSV16(), fl::detail::BiquadFilterImpl< T >::notch(), sincos(), sincos(), and fl::NoiseBias1D::trigger().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ smap16_to_32()

i32 fl::smap16_to_32 ( i16 x)
inline

Use int_scale<int16_t, int32_t>() instead.

Examples
/home/runner/work/FastLED/FastLED/src/fl/math/intmap.h.

Definition at line 93 of file intmap.h.

93 {
94 return fl::int_scale<i16, i32>(x);
95}

References FL_NOEXCEPT, and x.

◆ smap16_to_8()

i8 fl::smap16_to_8 ( i16 x)
inline

Use int_scale<int16_t, int8_t>() instead.

Examples
/home/runner/work/FastLED/FastLED/src/fl/math/intmap.h.

Definition at line 98 of file intmap.h.

98 {
99 return fl::int_scale<i16, i8>(x);
100}

References FL_NOEXCEPT, and x.

◆ smap32_to_16()

i16 fl::smap32_to_16 ( i32 x)
inline

Use int_scale<int32_t, int16_t>() instead.

Examples
/home/runner/work/FastLED/FastLED/src/fl/math/intmap.h.

Definition at line 103 of file intmap.h.

103 {
104 return fl::int_scale<i32, i16>(x);
105}

References FL_NOEXCEPT, and x.

◆ smap32_to_8()

i8 fl::smap32_to_8 ( i32 x)
inline

Use int_scale<int32_t, int8_t>() instead.

Examples
/home/runner/work/FastLED/FastLED/src/fl/math/intmap.h.

Definition at line 108 of file intmap.h.

108 {
109 return fl::int_scale<i32, i8>(x);
110}

References FL_NOEXCEPT, and x.

◆ smap8_to_16()

i16 fl::smap8_to_16 ( i8 x)
inline

Use int_scale<int8_t, int16_t>() instead.

Examples
/home/runner/work/FastLED/FastLED/src/fl/math/intmap.h.

Definition at line 83 of file intmap.h.

83 {
84 return fl::int_scale<i8, i16>(x);
85}

References FL_NOEXCEPT, and x.

◆ smap8_to_32()

i32 fl::smap8_to_32 ( i8 x)
inline

Use int_scale<int8_t, int32_t>() instead.

Examples
/home/runner/work/FastLED/FastLED/src/fl/math/intmap.h.

Definition at line 88 of file intmap.h.

88 {
89 return fl::int_scale<i8, i32>(x);
90}

References FL_NOEXCEPT, and x.

◆ smoothstep()

template<typename T>
enable_if< is_fixed_point< T >::value, T >::type fl::smoothstep ( T edge0,
T edge1,
T x )
inline

Definition at line 552 of file fixed_point.h.

552{ return T::smoothstep(edge0, edge1, x); }

References FL_NOEXCEPT, and x.

◆ snprintf()

template<typename... Args>
int fl::snprintf ( char * buffer,
fl::size size,
const char * format,
const Args &... args )

Snprintf-like formatting function that writes to a buffer.

Parameters
bufferOutput buffer to write formatted string to
sizeMaximum number of characters to write (including null terminator)
formatFormat string with placeholders like "%d", "%s", "%f" etc.
argsArguments to format
Returns
Number of characters that would have been written if buffer was large enough

Supported format specifiers:

Example usage:

char buffer[100];
int len = fl::snprintf(buffer, sizeof(buffer), "Value: %d, Name: %s", 42, "test");
int snprintf(char *buffer, fl::size size, const char *format, const Args &... args) FL_NOEXCEPT
Snprintf-like formatting function that writes to a buffer.
Definition stdio.h:666

Definition at line 666 of file stdio.h.

666 {
667 // Handle null buffer or zero size
668 if (!buffer || size == 0) {
669 return 0;
670 }
671
672 // Format to internal string stream
673 sstream stream;
675 fl::string result = stream.str();
676
677 // Get the formatted string length
678 fl::size formatted_len = result.size();
679
680 // Copy to buffer, ensuring null termination
681 fl::size copy_len = (formatted_len < size - 1) ? formatted_len : size - 1;
682
683 // Copy characters
684 for (fl::size i = 0; i < copy_len; ++i) {
685 buffer[i] = result[i];
686 }
687
688 // Null terminate
689 buffer[copy_len] = '\0';
690
691 // Return the number of characters actually written (excluding null terminator)
692 // This respects the buffer size limit instead of returning the full formatted length
693 return static_cast<int>(copy_len);
694}

References args, FL_NOEXCEPT, format(), fl::printf_detail::format_impl(), and fl::sstream::str().

Referenced by fl::net::http::ChunkedWriter::chunkOverhead(), fl::audio::detector::Key::getKeyName(), getPort(), fl::net::http::HttpStreamTransport::idToString(), fl::third_party::TJpgInstanceDecoder::initializeDecoder(), fl::SerialPort::printf(), fl::third_party::TJpgInstanceDecoder::processChunk(), sprintf(), and fl::net::http::ChunkedWriter::writeChunk().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sort() [1/2]

template<typename Iterator>
void fl::sort ( Iterator first,
Iterator last )

Definition at line 574 of file algorithm.h.

574 {
575 // Use explicit template parameter to avoid C++14 auto in lambda
576 typedef typename fl::remove_reference<decltype(*first)>::type value_type;
577 sort(first, last, [](const value_type& a, const value_type& b) { return a < b; });
578}
void sort(Iterator first, Iterator last, Compare comp) FL_NOEXCEPT
Definition algorithm.h:564

References FL_NOEXCEPT, and sort().

+ Here is the call graph for this function:

◆ sort() [2/2]

template<typename Iterator, typename Compare>
void fl::sort ( Iterator first,
Iterator last,
Compare comp )

Definition at line 564 of file algorithm.h.

564 {
565 if (first == last || first + 1 == last) {
566 return; // Already sorted or empty
567 }
568
569 detail::quicksort_impl(first, last, comp);
570}
void quicksort_impl(Iterator first, Iterator last, Compare comp) FL_NOEXCEPT
Definition algorithm.h:411

References FL_NOEXCEPT, and fl::detail::quicksort_impl().

Referenced by FL_DISABLE_WARNING(), sort(), fl::detail::AlphaTrimmedMeanImpl< T, N >::update(), and fl::detail::MedianFilterImpl< T, N >::update().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sort_small() [1/2]

template<typename Iterator>
void fl::sort_small ( Iterator first,
Iterator last )

Definition at line 620 of file algorithm.h.

620 {
621 typedef typename fl::remove_reference<decltype(*first)>::type value_type;
622 sort_small(first, last,
623 [](const value_type& a, const value_type& b) { return a < b; });
624}
void sort_small(Iterator first, Iterator last, Compare comp) FL_NOEXCEPT
Definition algorithm.h:612

References FL_NOEXCEPT, and sort_small().

+ Here is the call graph for this function:

◆ sort_small() [2/2]

template<typename Iterator, typename Compare>
void fl::sort_small ( Iterator first,
Iterator last,
Compare comp )

Definition at line 612 of file algorithm.h.

612 {
613 if (first == last || first + 1 == last) {
614 return; // Already sorted or empty
615 }
616 detail::insertion_sort(first, last, comp);
617}
void insertion_sort(Iterator first, Iterator last, Compare comp) FL_NOEXCEPT
Definition algorithm.h:298

References FL_NOEXCEPT, and fl::detail::insertion_sort().

Referenced by fl::ChannelManager::addDriver(), fl::ChannelManager::setDriverPriority(), and sort_small().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ splat()

Tile2x2_u8 fl::splat ( vec2f xy)

"Splat" as in "splat pixel rendering" takes a pixel value in float x,y coordinates and "splats" it into a 2x2 tile of pixel values.

Each of the four pixels in the tile is a fl::u8 value in the range [0..255] that represents the intensity of the pixel at that point. Tile2x2_u8 splat(vec2f xy);

Definition at line 14 of file splat.cpp.hpp.

14 {
15 // 1) collect values.
16 float x = xy.x;
17 float y = xy.y;
18
19 // 2) integer cell indices
20 i16 cx = static_cast<i16>(floorf(x));
21 i16 cy = static_cast<i16>(floorf(y));
22
23 // 3) fractional offsets in [0..1)
24 float fx = x - cx;
25 float fy = y - cy;
26
27 // 4) bilinear weights
28 float w_ll = (1 - fx) * (1 - fy); // lower‑left
29 float w_lr = fx * (1 - fy); // lower‑right
30 float w_ul = (1 - fx) * fy; // upper‑left
31 float w_ur = fx * fy; // upper‑right
32
33 // 5) build Tile2x2_u8 anchored at (cx,cy)
34 Tile2x2_u8 out(vec2<u16>(cx, cy));
35 out.lower_left() = to_uint8(w_ll);
36 out.lower_right() = to_uint8(w_lr);
37 out.upper_left() = to_uint8(w_ul);
38 out.upper_right() = to_uint8(w_ur);
39
40 return out;
41}
unsigned int xy(unsigned int x, unsigned int y)
static u8 to_uint8(float f)
Definition splat.cpp.hpp:8

References floorf(), fl::Tile2x2_u8::lower_left(), fl::Tile2x2_u8::lower_right(), to_uint8(), fl::Tile2x2_u8::upper_left(), fl::Tile2x2_u8::upper_right(), x, xy(), and y.

Referenced by fl::Corkscrew::at_splat_extrapolate(), and fl::XYPathRenderer::at_subpixel().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sprintf()

template<fl::size N, typename... Args>
int fl::sprintf ( char(&) buffer[N],
const char * format,
const Args &... args )

Sprintf-like formatting function that writes to a buffer.

Parameters
bufferOutput buffer to write formatted string to
formatFormat string with placeholders like "%d", "%s", "%f" etc.
argsArguments to format
Returns
Number of characters written (excluding null terminator)

This function writes a formatted string to the provided buffer. The buffer size is deduced at compile time from the array reference, providing automatic safety against buffer overflows.

Example usage:

char buffer[100];
int len = fl::sprintf(buffer, "Value: %d, Name: %s", 42, "test");
int sprintf(char(&buffer)[N], const char *format, const Args &... args) FL_NOEXCEPT
Sprintf-like formatting function that writes to a buffer.
Definition stdio.h:712

Definition at line 712 of file stdio.h.

712 {
713 // Use the compile-time known buffer size for safety
714 return snprintf(buffer, N, format, args...);
715}

References args, FL_NOEXCEPT, format(), and snprintf().

Referenced by fl::ScopedTrace::dump().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sqrt() [1/5]

double fl::sqrt ( double value)
inline

Definition at line 455 of file math.h.

455{ return sqrt_impl_double(value); }
double sqrt_impl_double(double value)
Definition math.cpp.hpp:248

References FL_NOEXCEPT, sqrt_impl_double(), and type_rank< T >::value.

+ Here is the call graph for this function:

◆ sqrt() [2/5]

float fl::sqrt ( float value)
inline

Definition at line 454 of file math.h.

454{ return sqrt_impl_float(value); }
float sqrt_impl_float(float value)
Definition math.cpp.hpp:240

References FL_NOEXCEPT, sqrt_impl_float(), and type_rank< T >::value.

+ Here is the call graph for this function:

◆ sqrt() [3/5]

template<typename T>
enable_if< is_integral< T >::value, float >::type fl::sqrt ( T value)
inline

Definition at line 457 of file math.h.

457{ return sqrt_impl_float(static_cast<float>(value)); }

References FL_NOEXCEPT, sqrt_impl_float(), and type_rank< T >::value.

+ Here is the call graph for this function:

◆ sqrt() [4/5]

template<typename T>
enable_if< sqrt_detail::has_static_sqrt< T >::value, decltype(T::sqrt(declval< T >()))>::type fl::sqrt ( T value)
inline

Definition at line 463 of file math.h.

463 {
464 return T::sqrt(value);
465}

References FL_NOEXCEPT, and type_rank< T >::value.

◆ sqrt() [5/5]

template<typename T>
enable_if< is_fixed_point< T >::value, T >::type fl::sqrt ( T x)
inlineconstexpr

Definition at line 559 of file fixed_point.h.

559{ return T::sqrt(x); }

References FL_NOEXCEPT, and x.

Referenced by noise_test_helpers::calcAverageColorDifference(), anonymous_namespace{Painter.cpp}::CalcLuminance(), fl::audio::detector::MoodAnalyzer::calculateConfidence(), fl::audio::detector::MusicalBeat::calculateIBIStdDev(), fl::audio::detector::Backbeat::calculatePatternConfidence(), fl::audio::detector::MoodAnalyzer::calculateSpectralFlux(), fl::audio::detector::ChordDetector::chromaDistance(), detectBeat(), fl::vec2< u16 >::distance(), fl::vec3< float >::distance(), fl::line_xy< T >::distance_to_line_with_point(), fl::LineSimplifierExact< NumberT >::estimateMaxDistance(), kf_factor(), fl::colorimetric_detail::nnls3(), Painter::PaintVuNotes(), Painter::PaintVuSpaceInvaders(), rms(), fl::audio::fft::Context::runNaive(), fl::audio::fft::Context::runOctaveWise(), fl::audio::detector::TempoAnalyzer::updateStability(), and Painter::VegasVisualizer().

+ Here is the caller graph for this function:

◆ sqrt_impl_double()

double fl::sqrt_impl_double ( double value)

Definition at line 248 of file math.cpp.hpp.

248 {
249#if FL_MATH_USE_LIBM
250 return ::sqrt(value);
251#else
253#endif
254}

References fl::detail::sqrt_newton_(), and type_rank< T >::value.

Referenced by sqrt().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sqrt_impl_float()

float fl::sqrt_impl_float ( float value)

Definition at line 240 of file math.cpp.hpp.

240 {
241#if FL_MATH_USE_LIBM
242 return ::sqrtf(value);
243#else
245#endif
246}

References fl::detail::sqrt_newton_(), and type_rank< T >::value.

Referenced by sqrt(), sqrt(), and sqrtf().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sqrtf()

float fl::sqrtf ( float value)
inline

Definition at line 453 of file math.h.

453{ return sqrt_impl_float(value); }

References FL_NOEXCEPT, sqrt_impl_float(), and type_rank< T >::value.

Referenced by fl::audio::detector::anonymous_namespace{equalizer.cpp.hpp}::applyScaling(), fl::audio::Reactive::applyScaling(), fl::audio::fft::Bins::binBoundary(), fl::PhyllotaxisPath::compute(), fl::audio::detector::Vocal::computeBroadSpectralFeatures(), fl::audio::detector::Vocal::computePCMTimeDomainFeatures(), fl::audio::computePinkNoiseGain(), fl::audio::Reactive::computeRMS(), fl::audio::detector::KeyDetector::correlateWithProfile(), fl::Center_Field::draw(), fl::RGB_Blobs2::draw(), fl::RGB_Blobs2_FP::draw(), fl::RGB_Blobs3::draw(), fl::RGB_Blobs3_FP::draw(), fl::RGB_Blobs4::draw(), fl::RGB_Blobs4_FP::draw(), fl::RGB_Blobs5::draw(), fl::RGB_Blobs5_FP::draw(), fl::RGB_Blobs::draw(), fl::RGB_Blobs_FP::draw(), fl::Slow_Fade::draw(), fl::Slow_Fade_FP::draw(), fl::FlowFieldFloat::drawDot(), drawPlasmaWave(), fl::audio::detector::KeyDetector::initializeProfileStats(), fl::audio::SampleImpl::initRms(), and fl::audio::AutoGain::process().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ squarewave8()

LIB8STATIC u8 fl::squarewave8 ( u8 in,
u8 pulsewidth = 128 )

Square wave generator.

if in < pulsewidth then output is 255 if in >= pulsewidth then output is 0

Parameters
ininput value
pulsewidthwidth of the output pulse
Returns
square wave output

Definition at line 22 of file squarewave.h.

22 {
23 if (in < pulsewidth || (pulsewidth == 255)) {
24 return 255;
25 } else {
26 return 0;
27 }
28}

References FL_NOEXCEPT, and LIB8STATIC.

◆ stable_sort() [1/2]

template<typename Iterator>
void fl::stable_sort ( Iterator first,
Iterator last )

Definition at line 592 of file algorithm.h.

592 {
593 // Use explicit template parameter to avoid C++14 auto in lambda
594 typedef typename fl::remove_reference<decltype(*first)>::type value_type;
595 stable_sort(first, last, [](const value_type& a, const value_type& b) { return a < b; });
596}
void stable_sort(Iterator first, Iterator last, Compare comp) FL_NOEXCEPT
Definition algorithm.h:582

References FL_NOEXCEPT, and stable_sort().

+ Here is the call graph for this function:

◆ stable_sort() [2/2]

template<typename Iterator, typename Compare>
void fl::stable_sort ( Iterator first,
Iterator last,
Compare comp )

Definition at line 582 of file algorithm.h.

582 {
583 if (first == last || first + 1 == last) {
584 return; // Already sorted or empty
585 }
586
587 detail::mergesort_impl(first, last, comp);
588}
void mergesort_impl(Iterator first, Iterator last, Compare comp) FL_NOEXCEPT
Definition algorithm.h:534

References FL_NOEXCEPT, and fl::detail::mergesort_impl().

Referenced by stable_sort().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ static_pointer_cast()

template<typename T, typename Y>
shared_ptr< T > fl::static_pointer_cast ( const shared_ptr< Y > & other)

Definition at line 514 of file shared_ptr.h.

514 {
515 return shared_ptr<T>(other, static_cast<T*>(other.get()));
516}

References FL_NOEXCEPT.

Referenced by fl::audio::ISynthOscillator::create().

+ Here is the caller graph for this function:

◆ step()

template<typename T>
enable_if< is_fixed_point< T >::value, T >::type fl::step ( T edge,
T x )
inlineconstexpr

Definition at line 547 of file fixed_point.h.

547{ return T::step(edge, x); }

References FL_NOEXCEPT, and x.

Referenced by fl::UISliderImpl::UISliderImpl(), fl::audio::detector::Vocal::calculateAutocorrelationIrregularity(), fl::audio::FrequencyBinMapper::calculateLinearFrequencies(), fl::third_party::vorbis::codebook_decode_step(), fl::FlowFieldFP::emitOrbitalDots(), FL_DISABLE_WARNING(), fl::third_party::hexwave::hexwave_engine_create(), fl::flat_map< int, FxPtr >::lower_bound(), fl::flat_map< int, FxPtr >::lower_bound(), fl::flat_set< Key, Less >::lower_bound(), fl::flat_set< Key, Less >::lower_bound(), fl::detail::lower_bound_impl(), fl::PerlinParticlePunch::noiseCircleDraw(), fl::third_party::nsgif__decode_complex(), fl::third_party::nsgif__deinterlace(), fl::third_party::nsgif__next_row(), fl::third_party::vorbis::residue_decode(), fl::flat_map< int, FxPtr >::upper_bound(), fl::flat_map< int, FxPtr >::upper_bound(), fl::flat_set< Key, Less >::upper_bound(), and fl::flat_set< Key, Less >::upper_bound().

+ Here is the caller graph for this function:

◆ strcat()

char * fl::strcat ( char * dest,
const char * src )

Definition at line 54 of file cstring.cpp.hpp.

54 {
55 return ::strcat(dest, src);
56}

References FL_NOEXCEPT.

◆ strchr() [1/2]

char * fl::strchr ( char * s,
int c )

Definition at line 66 of file cstring.cpp.hpp.

66 {
67 return ::strchr(s, c);
68}

References FL_NOEXCEPT.

◆ strchr() [2/2]

const char * fl::strchr ( const char * s,
int c )

Definition at line 70 of file cstring.cpp.hpp.

70 {
71 return ::strchr(s, c);
72}

References FL_NOEXCEPT.

◆ strcmp()

int fl::strcmp ( const char * s1,
const char * s2 )

Definition at line 38 of file cstring.cpp.hpp.

38 {
39 return ::strcmp(s1, s2);
40}

References FL_NOEXCEPT.

Referenced by capture(), fl::basic_string::compare(), fl::basic_string::compare(), fl::basic_string::operator!=(), fl::basic_string::operator!=(), fl::basic_string::operator<(), fl::basic_string::operator<=(), fl::basic_string::operator==(), fl::basic_string::operator==(), fl::test::SubcaseSignature::operator==(), fl::basic_string::operator>(), fl::basic_string::operator>=(), fl::detail::singleton_registry_get(), fl::detail::singleton_registry_set(), fl::string::strcmp(), and DriverTestRunner::validateExpectedDrivers().

+ Here is the caller graph for this function:

◆ strcpy()

char * fl::strcpy ( char * dest,
const char * src )

Definition at line 46 of file cstring.cpp.hpp.

46 {
47 return ::strcpy(dest, src);
48}

References FL_NOEXCEPT.

◆ strcspn()

size_t fl::strcspn ( const char * s1,
const char * s2 )

Definition at line 86 of file cstring.cpp.hpp.

86 {
87 return ::strcspn(s1, s2);
88}

References FL_NOEXCEPT.

◆ strerror()

char * fl::strerror ( int errnum)

Definition at line 102 of file cstring.cpp.hpp.

102 {
103 return ::strerror(errnum);
104}

References FL_NOEXCEPT.

Referenced by fl::detail::posix_filebuf::error_message(), fl::fstream::error_message(), and fl::ofstream::error_message().

+ Here is the caller graph for this function:

◆ string_compare()

static int fl::string_compare ( const string & a,
const string & b )
inlinestatic

Definition at line 211 of file string.cpp.hpp.

211 {
212 fl::size n = (a.size() < b.size()) ? a.size() : b.size();
213 int r = fl::memcmp(a.c_str(), b.c_str(), n);
214 if (r != 0) return r;
215 if (a.size() < b.size()) return -1;
216 if (a.size() > b.size()) return 1;
217 return 0;
218}
int memcmp(const void *s1, const void *s2, size_t n) FL_NOEXCEPT

References FL_NOEXCEPT, and memcmp().

Referenced by fl::string::operator<(), fl::string::operator<=(), fl::string::operator>(), and fl::string::operator>=().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ strlen()

size_t fl::strlen ( const char * s)

Definition at line 34 of file cstring.cpp.hpp.

34 {
35 return ::strlen(s);
36}

References FL_NOEXCEPT.

Referenced by fl::StringHolder::StringHolder(), fl::basic_string::append(), fl::basic_string::append(), fl::basic_string::append(), fl::basic_string::compare(), fl::basic_string::copy(), createSerialRequestSource(), fl::basic_string::ends_with(), fl::basic_string::find_first_not_of(), fl::basic_string::find_first_of(), fl::basic_string::find_last_not_of(), fl::basic_string::find_last_of(), fl::basic_string::insert(), fl::FontRenderer::measureString(), fl::json::normalize_json_string(), fl::string::operator=(), fl::SerialPort::print(), fl::SerialPort::println(), fl::basic_string::replace(), fl::basic_string::rfind(), fl::basic_string::setLiteral(), and fl::basic_string::starts_with().

+ Here is the caller graph for this function:

◆ strncat()

char * fl::strncat ( char * dest,
const char * src,
size_t n )

Definition at line 58 of file cstring.cpp.hpp.

58 {
59 return ::strncat(dest, src, n);
60}

References FL_NOEXCEPT.

◆ strncmp()

int fl::strncmp ( const char * s1,
const char * s2,
size_t n )

Definition at line 42 of file cstring.cpp.hpp.

42 {
43 return ::strncmp(s1, s2, n);
44}

References FL_NOEXCEPT.

Referenced by fl::basic_string::compare(), fl::basic_string::compare(), fl::basic_string::compare(), fl::basic_string::compare(), fl::basic_string::ends_with(), fl::third_party::nsgif__app_ext_is_loop_count(), fl::third_party::nsgif__parse_header(), and fl::basic_string::starts_with().

+ Here is the caller graph for this function:

◆ strncpy()

char * fl::strncpy ( char * dest,
const char * src,
size_t n )

Definition at line 50 of file cstring.cpp.hpp.

50 {
51 return ::strncpy(dest, src, n);
52}

References FL_NOEXCEPT.

◆ strpbrk() [1/2]

char * fl::strpbrk ( char * s1,
const char * s2 )

Definition at line 90 of file cstring.cpp.hpp.

90 {
91 return ::strpbrk(s1, s2);
92}

References FL_NOEXCEPT.

◆ strpbrk() [2/2]

const char * fl::strpbrk ( const char * s1,
const char * s2 )

Definition at line 94 of file cstring.cpp.hpp.

94 {
95 return ::strpbrk(s1, s2);
96}

References FL_NOEXCEPT.

◆ strrchr() [1/2]

char * fl::strrchr ( char * s,
int c )

Definition at line 74 of file cstring.cpp.hpp.

74 {
75 return ::strrchr(s, c);
76}

References FL_NOEXCEPT.

◆ strrchr() [2/2]

const char * fl::strrchr ( const char * s,
int c )

Definition at line 78 of file cstring.cpp.hpp.

78 {
79 return ::strrchr(s, c);
80}

References FL_NOEXCEPT.

◆ strspn()

size_t fl::strspn ( const char * s1,
const char * s2 )

Definition at line 82 of file cstring.cpp.hpp.

82 {
83 return ::strspn(s1, s2);
84}

References FL_NOEXCEPT.

◆ strstr()

const char * fl::strstr ( const char * haystack,
const char * needle )

Definition at line 62 of file cstring.cpp.hpp.

62 {
63 return ::strstr(haystack, needle);
64}

References FL_NOEXCEPT.

Referenced by fl::basic_string::find(), and fl::basic_string::find().

+ Here is the caller graph for this function:

◆ strtod()

double fl::strtod ( const char * str,
char ** endptr )

Definition at line 238 of file cstdlib.cpp.hpp.

238 {
239 if (!str) {
240 if (endptr) {
241 *endptr = const_cast<char*>(str);
242 }
243 return 0.0;
244 }
245
246 const char* p = str;
247 double result = 0.0;
248 bool negative = false;
249
250 // Skip leading whitespace
251 while (*p == ' ' || *p == '\t' || *p == '\n' || *p == '\r' || *p == '\f' || *p == '\v') {
252 p++;
253 }
254
255 // Handle sign
256 if (*p == '-') {
257 negative = true;
258 p++;
259 } else if (*p == '+') {
260 p++;
261 }
262
263 const char* start = p;
264
265 // Parse integer part
266 while (*p >= '0' && *p <= '9') {
267 result = result * 10.0 + (*p - '0');
268 p++;
269 }
270
271 // Parse fractional part
272 if (*p == '.') {
273 p++;
274 double fraction = 0.1;
275 while (*p >= '0' && *p <= '9') {
276 result += (*p - '0') * fraction;
277 fraction *= 0.1;
278 p++;
279 }
280 }
281
282 // Parse exponent
283 if (*p == 'e' || *p == 'E') {
284 p++;
285 bool expNegative = false;
286 if (*p == '-') {
287 expNegative = true;
288 p++;
289 } else if (*p == '+') {
290 p++;
291 }
292
293 int exp = 0;
294 while (*p >= '0' && *p <= '9') {
295 exp = exp * 10 + (*p - '0');
296 p++;
297 }
298
299 double multiplier = 1.0;
300 for (int i = 0; i < exp; i++) {
301 multiplier *= 10.0;
302 }
303
304 if (expNegative) {
305 result /= multiplier;
306 } else {
307 result *= multiplier;
308 }
309 }
310
311 // Set endptr
312 if (endptr) {
313 if (p == start) {
314 *endptr = const_cast<char*>(str);
315 } else {
316 *endptr = const_cast<char*>(p);
317 }
318 }
319
320 return negative ? -result : result;
321}

References exp().

Referenced by fl::detail::JsonToFloatVisitor< T >::operator()().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ strtok()

char * fl::strtok ( char * s1,
const char * s2 )

Definition at line 98 of file cstring.cpp.hpp.

98 {
99 return ::strtok(s1, s2);
100}

References FL_NOEXCEPT.

◆ strtol()

long fl::strtol ( const char * str,
char ** endptr,
int base )

Definition at line 85 of file cstdlib.cpp.hpp.

85 {
86 if (!str) {
87 if (endptr) {
88 *endptr = const_cast<char*>(str);
89 }
90 return 0;
91 }
92
93 const char* p = str;
94 long result = 0;
95 bool negative = false;
96
97 // Skip leading whitespace
98 while (*p == ' ' || *p == '\t' || *p == '\n' || *p == '\r' || *p == '\f' || *p == '\v') {
99 p++;
100 }
101
102 // Handle sign
103 if (*p == '-') {
104 negative = true;
105 p++;
106 } else if (*p == '+') {
107 p++;
108 }
109
110 // Auto-detect base if base is 0
111 if (base == 0) {
112 if (*p == '0') {
113 if (*(p + 1) == 'x' || *(p + 1) == 'X') {
114 base = 16;
115 p += 2;
116 } else {
117 base = 8;
118 p++;
119 }
120 } else {
121 base = 10;
122 }
123 } else if (base == 16) {
124 // Skip optional 0x/0X prefix for base 16
125 if (*p == '0' && (*(p + 1) == 'x' || *(p + 1) == 'X')) {
126 p += 2;
127 }
128 }
129
130 // Validate base
131 if (base < 2 || base > 36) {
132 if (endptr) {
133 *endptr = const_cast<char*>(str);
134 }
135 return 0;
136 }
137
138 // Parse digits
139 const char* start = p;
140 while (*p && isDigitInBase(*p, base)) {
141 result = result * base + charToDigit(*p);
142 p++;
143 }
144
145 // Set endptr to point to first invalid character
146 if (endptr) {
147 if (p == start) {
148 // No digits parsed
149 *endptr = const_cast<char*>(str);
150 } else {
151 *endptr = const_cast<char*>(p);
152 }
153 }
154
155 return negative ? -result : result;
156}
static int charToDigit(char c)
static bool isDigitInBase(char c, int base)

References charToDigit(), and isDigitInBase().

Referenced by atoi(), atol(), fl::detail::JsonToIntegerVisitor< T >::operator()(), and fl::wled::parseSegmentFields().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ strtoul()

unsigned long fl::strtoul ( const char * str,
char ** endptr,
int base )

Definition at line 158 of file cstdlib.cpp.hpp.

158 {
159 if (!str) {
160 if (endptr) {
161 *endptr = const_cast<char*>(str);
162 }
163 return 0;
164 }
165
166 const char* p = str;
167 unsigned long result = 0;
168
169 // Skip leading whitespace
170 while (*p == ' ' || *p == '\t' || *p == '\n' || *p == '\r' || *p == '\f' || *p == '\v') {
171 p++;
172 }
173
174 // Handle optional + sign (ignore - for unsigned)
175 if (*p == '+') {
176 p++;
177 } else if (*p == '-') {
178 // Negative values wrap around for unsigned
179 p++;
180 }
181
182 // Auto-detect base if base is 0
183 if (base == 0) {
184 if (*p == '0') {
185 if (*(p + 1) == 'x' || *(p + 1) == 'X') {
186 base = 16;
187 p += 2;
188 } else {
189 base = 8;
190 p++;
191 }
192 } else {
193 base = 10;
194 }
195 } else if (base == 16) {
196 // Skip optional 0x/0X prefix for base 16
197 if (*p == '0' && (*(p + 1) == 'x' || *(p + 1) == 'X')) {
198 p += 2;
199 }
200 }
201
202 // Validate base
203 if (base < 2 || base > 36) {
204 if (endptr) {
205 *endptr = const_cast<char*>(str);
206 }
207 return 0;
208 }
209
210 // Parse digits
211 const char* start = p;
212 while (*p && isDigitInBase(*p, base)) {
213 result = result * base + charToDigit(*p);
214 p++;
215 }
216
217 // Set endptr to point to first invalid character
218 if (endptr) {
219 if (p == start) {
220 // No digits parsed
221 *endptr = const_cast<char*>(str);
222 } else {
223 *endptr = const_cast<char*>(p);
224 }
225 }
226
227 return result;
228}

References charToDigit(), and isDigitInBase().

Referenced by fl::net::http::ChunkedReader::parseChunkSize().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ subtract()

float fl::subtract ( float & a,
float & b )
inline

Definition at line 149 of file engine_core.h.

149{ return a - b; }

Referenced by fl::Engine::subtract().

+ Here is the caller graph for this function:

◆ subtract_fp()

FASTLED_FORCE_INLINE fl::i32 fl::subtract_fp ( fl::i32 a,
fl::i32 b )

Definition at line 157 of file render_value_fp.h.

157 {
158 return a - b;
159}

References FASTLED_FORCE_INLINE.

◆ swap() [1/11]

template<typename T, fl::size N>
void fl::swap ( array< T, N > & lhs,
array< T, N > & rhs )

Definition at line 209 of file array.h.

210 {
211 lhs.swap(rhs);
212}
void swap(array &other) FL_NOEXCEPT
Definition array.h:101

References FL_NOEXCEPT.

Referenced by fl::FixedVector< fl::u32, kMaxBatchSize >::FixedVector(), fl::detail::heap_sort(), fl::vector< fl::i16 >::insert(), fl::FixedVector< fl::u32, kMaxBatchSize >::operator=(), fl::detail::partition(), reverse(), fl::detail::rotate_impl(), shuffle(), shuffle(), fl::detail::sift_down(), fl::FixedVector< fl::u32, kMaxBatchSize >::swap(), fl::iterator<, u8 >::swap(), fl::shared_ptr< filebuf >::swap(), fl::shared_ptr< filebuf >::swap(), and fl::vector< fl::i16 >::swap().

+ Here is the caller graph for this function:

◆ swap() [2/11]

template<typename Key, typename Value, typename Less>
void fl::swap ( flat_map< Key, Value, Less > & lhs,
flat_map< Key, Value, Less > & rhs )

Definition at line 551 of file flat_map.h.

552 {
553 lhs.swap(rhs);
554}
void swap(flat_map &other) FL_NOEXCEPT
Definition flat_map.h:379

References FL_NOEXCEPT.

◆ swap() [3/11]

template<typename Key, typename Less>
void fl::swap ( flat_set< Key, Less > & lhs,
flat_set< Key, Less > & rhs )

Definition at line 365 of file flat_set.h.

366 {
367 lhs.swap(rhs);
368}
void swap(flat_set &other) FL_NOEXCEPT
Definition flat_set.h:302

References FL_NOEXCEPT.

◆ swap() [4/11]

template<typename T>
void fl::swap ( list< T > & lhs,
list< T > & rhs )

Definition at line 675 of file list.h.

675 {
676 lhs.swap(rhs);
677}
void swap(list &other)
Definition list.h:428

References fl::list< T >::swap().

+ Here is the call graph for this function:

◆ swap() [5/11]

template<typename T1, typename T2>
void fl::swap ( pair< T1, T2 > & lhs,
pair< T1, T2 > & rhs )

Definition at line 89 of file pair.h.

89 {
90 lhs.swap(rhs);
91}
void swap(pair &other) FL_NOEXCEPT
Definition pair.h:50

References FL_NOEXCEPT.

◆ swap() [6/11]

template<typename T, typename Container>
void fl::swap ( queue< T, Container > & lhs,
queue< T, Container > & rhs )

Swap two queues.

Template Parameters
TElement type
ContainerContainer type
Parameters
lhsFirst queue
rhsSecond queue

Definition at line 199 of file queue.h.

199 {
200 lhs.swap(rhs);
201}
void swap(queue &other)
Swap the contents with another queue.
Definition queue.h:129

References fl::queue< T, Container >::swap().

+ Here is the call graph for this function:

◆ swap() [7/11]

template<typename T>
void fl::swap ( shared_ptr< T > & lhs,
shared_ptr< T > & rhs )

Definition at line 508 of file shared_ptr.h.

508 {
509 lhs.swap(rhs);
510}
void swap(shared_ptr &other) FL_NOEXCEPT
Definition shared_ptr.h:309

References FL_NOEXCEPT.

◆ swap() [8/11]

template<typename T>
void fl::swap ( T & a,
T & b )

Definition at line 877 of file type_traits.h.

877 {
878 // if T is a POD, use use a simple data copy swap.
879 // if T is not a POD, use the T::Swap method.
881}

References FL_NOEXCEPT.

◆ swap() [9/11]

template<typename T, typename Deleter>
void fl::swap ( unique_ptr< T, Deleter > & lhs,
unique_ptr< T, Deleter > & rhs )

Definition at line 223 of file unique_ptr.h.

223 {
224 lhs.swap(rhs);
225}
void swap(unique_ptr &u) FL_NOEXCEPT
Definition unique_ptr.h:121

References FL_NOEXCEPT.

◆ swap() [10/11]

template<typename Key, typename Value, typename Equal>
void fl::swap ( unordered_map_small< Key, Value, Equal > & lhs,
unordered_map_small< Key, Value, Equal > & rhs )

Definition at line 474 of file unordered_map_small.h.

475 {
476 lhs.swap(rhs);
477}
void swap(unordered_map_small &other) FL_NOEXCEPT

References FL_NOEXCEPT.

◆ swap() [11/11]

template<typename T>
void fl::swap ( weak_ptr< T > & lhs,
weak_ptr< T > & rhs )

Definition at line 198 of file weak_ptr.h.

198 {
199 lhs.swap(rhs);
200}
void swap(weak_ptr &other) FL_NOEXCEPT
Definition weak_ptr.h:126

References FL_NOEXCEPT.

◆ swap_by_copy()

template<typename T>
void fl::swap_by_copy ( T & a,
T & b )

Definition at line 883 of file type_traits.h.

883 {
884 // Force copy semantics (for cases where move might not be safe)
885 T tmp = a;
886 a = b;
887 b = tmp;
888}

References FL_NOEXCEPT.

◆ sys_yield()

static void fl::sys_yield ( )
static

Definition at line 21 of file yield.cpp.hpp.

21 {
22 // Pure OS-level yield — no FastLED subsystem pumping.
23#ifdef FL_IS_ESP32
24 vTaskDelay(0);
25#elif FASTLED_MULTITHREADED
26 std::this_thread::yield(); // okay std namespace
27#endif
28 // Single-threaded non-RTOS platforms: no-op
29}

Referenced by yield().

+ Here is the caller graph for this function:

◆ tan() [1/2]

double fl::tan ( double value)
inline

Definition at line 365 of file math.h.

365{ return tan_impl_double(value); }
double tan_impl_double(double value)
Definition math.cpp.hpp:598

References FL_NOEXCEPT, tan_impl_double(), and type_rank< T >::value.

+ Here is the call graph for this function:

◆ tan() [2/2]

template<typename T>
enable_if< is_integral< T >::value, float >::type fl::tan ( T value)
inline

Definition at line 367 of file math.h.

367{ return tan_impl_float(static_cast<float>(value)); }
float tan_impl_float(float value)
Definition math.cpp.hpp:588

References FL_NOEXCEPT, tan_impl_float(), and type_rank< T >::value.

+ Here is the call graph for this function:

◆ tan_impl_double()

double fl::tan_impl_double ( double value)

Definition at line 598 of file math.cpp.hpp.

598 {
599#if FL_MATH_USE_LIBM
600 return ::tan(value);
601#else
602 const double c = detail::cos_reduce_<double>(value);
603 if (c == 0.0) return 0.0;
605#endif
606}

References fl::detail::cos_reduce_(), fl::detail::sin_reduce_(), and type_rank< T >::value.

Referenced by tan().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ tan_impl_float()

float fl::tan_impl_float ( float value)

Definition at line 588 of file math.cpp.hpp.

588 {
589#if FL_MATH_USE_LIBM
590 return ::tanf(value);
591#else
592 const float c = detail::cos_reduce_<float>(value);
593 if (c == 0.0f) return 0.0f;
595#endif
596}

References fl::detail::cos_reduce_(), fl::detail::sin_reduce_(), and type_rank< T >::value.

Referenced by tan(), and tanf().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ tanf()

float fl::tanf ( float value)
inline

Definition at line 364 of file math.h.

364{ return tan_impl_float(value); }

References FL_NOEXCEPT, tan_impl_float(), and type_rank< T >::value.

+ Here is the call graph for this function:

◆ time()

fl::u64 fl::time ( )
inline

Alias for millis64() - returns 64-bit millisecond time.

This function is an alias for fl::millis64() and provides a convenient shorter name for getting the 64-bit millisecond timer value.

Returns
Number of milliseconds since system startup as a 64-bit value
Note
Inline function - zero overhead
See also
millis64() for full documentation

Definition at line 346 of file chrono.h.

346 {
347 return fl::millis64();
348}

References FL_NOEXCEPT, millis64(), and time().

Referenced by fl::audio::detector::Key::Key(), fl::HashMapLru< Key, T, Hash, KeyEqual, INLINED_COUNT >::ValueWithTimestamp::ValueWithTimestamp(), fl::task::Handle::_set_last_run_time(), fl::video::VideoImpl::draw(), fl::third_party::MP3Decode(), noiseCylinderCRGB(), noiseCylinderHSV16(), noiseCylinderHSV8(), noiseRingCRGB(), noiseRingHSV16(), noiseRingHSV8(), noiseSphereCRGB(), noiseSphereHSV16(), noiseSphereHSV8(), fl::third_party::plm_audio_set_time(), fl::third_party::plm_frame_to_abgr(), fl::third_party::plm_seek(), fl::third_party::plm_seek_frame(), fl::third_party::plm_video_set_time(), fl::task::Handle::set_last_run_time(), fl::task::ITaskImpl::set_last_run_time(), fl::task::TimeTask::set_last_run_time(), and time().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ time_alpha16()

u16 fl::time_alpha16 ( u32 now,
u32 start,
u32 end )

Definition at line 25 of file time_alpha.cpp.hpp.

25 {
26 if (now < start) {
27 return 0;
28 }
29 if (now > end) {
30 return 65535;
31 }
32 u32 elapsed = now - start;
33 u32 total = end - start;
34 u32 out = (elapsed * 65535) / total;
35 if (out > 65535) {
36 out = 65535;
37 }
38 return static_cast<u16>(out);
39}

References end(), and FL_NOEXCEPT.

+ Here is the call graph for this function:

◆ time_alpha8()

u8 fl::time_alpha8 ( u32 now,
u32 start,
u32 end )

Definition at line 9 of file time_alpha.cpp.hpp.

9 {
10 if (now < start) {
11 return 0;
12 }
13 if (now > end) {
14 return 255;
15 }
16 u32 elapsed = now - start;
17 u32 total = end - start;
18 u32 out = (elapsed * 255) / total;
19 if (out > 255) {
20 out = 255;
21 }
22 return static_cast<u8>(out);
23}

References end(), and FL_NOEXCEPT.

Referenced by fl::TimeClampedTransition::update8(), and fl::TimeRamp::update8().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ time_alphaf()

float fl::time_alphaf ( u32 now,
u32 start,
u32 end )
inline

Definition at line 25 of file time_alpha.h.

25 {
26 if (now < start) {
27 return 0.0f;
28 }
29 u32 elapsed = now - start;
30 u32 total = end - start;
31 float out = static_cast<float>(elapsed) / static_cast<float>(total);
32 return out;
33}

References end(), and FL_NOEXCEPT.

Referenced by fl::TimeClampedTransition::updatef().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ to_array() [1/2]

template<fl::size N, typename T>
array< T, N > fl::to_array ( fl::span< const T, fl::size(-1)> s)

Definition at line 217 of file array.h.

217 {
219 for (fl::size i = 0; i < N; ++i) {
220 result.mData[i] = s[i];
221 }
222 return result;
223}

References FL_NOEXCEPT.

◆ to_array() [2/2]

template<typename T, fl::size N>
array< T, N > fl::to_array ( fl::span< const T, N > s)

Definition at line 227 of file array.h.

227 {
229 for (fl::size i = 0; i < N; ++i) {
230 result.mData[i] = s[i];
231 }
232 return result;
233}

References FL_NOEXCEPT.

◆ to_hex()

template<typename T>
fl::string fl::to_hex ( T value,
bool uppercase = false,
bool pad_to_width = false )

Convert an integer value to hexadecimal string representation.

Template Parameters
TIntegral type
Parameters
valueThe integer value to convert
uppercaseIf true, use uppercase hex digits (A-F), otherwise lowercase (a-f)
pad_to_widthIf true, pad with leading zeros to full type width (default: false for minimal representation)
Returns
Hexadecimal string representation of the value

Example usage:

fl::string hex = fl::to_hex(255, false); // "ff" (minimal)
fl::string hex_upper = fl::to_hex(255, true); // "FF" (minimal uppercase)
fl::string hex_padded = fl::to_hex(255, false, true); // "000000ff" (padded to int width)
fl::string hex_neg = fl::to_hex(-16, false); // "-10"
fl::string to_hex(T value, bool uppercase=false, bool pad_to_width=false) FL_NOEXCEPT
Convert an integer value to hexadecimal string representation.
Definition string.h:517

Definition at line 517 of file string.h.

517 {
519 bool is_negative = false;
520 u64 unsigned_value;
521 if (static_cast<i64>(value) < 0 && sizeof(T) <= 8) {
522 is_negative = true;
523 unsigned_value = static_cast<u64>(-static_cast<i64>(value));
524 } else {
525 unsigned_value = static_cast<u64>(value);
526 }
527 return detail::hex(unsigned_value, width, is_negative, uppercase, pad_to_width);
528}
fl::u64 u64
Definition s16x16x4.h:221
fl::string hex(u64 value, HexIntWidth width, bool is_negative, bool uppercase, bool pad_to_width)
Internal hex conversion function (implementation in charconv.cpp)
constexpr HexIntWidth get_hex_int_width() FL_NOEXCEPT
Compile-time integer width determination (default - triggers error)
Definition charconv.h:60

References FL_NOEXCEPT, fl::detail::get_hex_int_width(), fl::detail::hex(), type_rank< T >::value, and width.

Referenced by fl::printf_detail::format_arg(), and fl::printf_detail::format_arg().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ to_runtime_timing()

template<typename TIMING>
ChipsetTiming fl::to_runtime_timing ( )
constexpr

Convert enum-based timing type to runtime ChipsetTiming struct.

Template Parameters
TIMINGTiming type with enum-based T1, T2, T3, RESET values
Returns
Runtime ChipsetTiming struct initialized from timing type

Definition at line 521 of file led_timing.h.

521 {
522 return {TIMING::T1, TIMING::T2, TIMING::T3, TIMING::RESET, "timing"};
523}

References FL_NOEXCEPT.

Referenced by autoResearchLowMemorySetup(), and AutoResearchRemoteControl::registerFunctions().

+ Here is the caller graph for this function:

◆ to_string() [1/2]

string fl::to_string ( float value,
int precision )
inline

Definition at line 456 of file string.h.

456 {
457 string result;
458 result.append(value, precision);
459 return result;
460}

References FL_NOEXCEPT, and type_rank< T >::value.

◆ to_string() [2/2]

template<typename T>
string fl::to_string ( T value)
inline

Definition at line 450 of file string.h.

450 {
451 string result;
452 result.append(value);
453 return result;
454}

References FL_NOEXCEPT, to_string(), and type_rank< T >::value.

Referenced by fl::detail::MethodSchema< R(Args...)>::addParams(), fl::detail::MethodSchema< void(Args...)>::addParams(), fl::detail::JsonToType< fl::ConstSpanWrapper< T >, void >::convert(), fl::detail::JsonToType< fl::vector< fl::u8 >, void >::convert(), fl::detail::JsonToType< fl::vector< T >, void >::convert(), fl::JsonArgConverter< R()>::convert(), FL_DISABLE_WARNING(), fl::validation::formatSummaryTable(), fl::Channel::makeName(), fl::RxChannel::makeName(), fl::detail::JsonToBoolVisitor::operator()(), fl::detail::JsonToBoolVisitor::operator()(), fl::detail::JsonToFloatVisitor< T >::operator()(), fl::detail::JsonToFloatVisitor< T >::operator()(), fl::detail::JsonToFloatVisitor< T >::operator()(), fl::detail::JsonToIntegerVisitor< T >::operator()(), fl::detail::JsonToIntegerVisitor< T >::operator()(), fl::detail::JsonToIntegerVisitor< T >::operator()(), fl::detail::JsonToIntegerVisitor< T >::operator()(), fl::detail::JsonToStringVisitor::operator()(), fl::detail::JsonToStringVisitor::operator()(), fl::StringConversionVisitor::operator()(), fl::StringConversionVisitor::operator()(), fl::StringConversionVisitor::operator()(), and to_string().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ to_uint8()

static u8 fl::to_uint8 ( float f)
static

Definition at line 8 of file splat.cpp.hpp.

8 {
9 // convert to [0..255] range
10 u8 i = static_cast<u8>(f * 255.0f + .5f);
11 return fl::min(i, 255);
12}

References min().

Referenced by splat().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ tolower()

char fl::tolower ( char c)
inline

Convert character to lowercase.

Parameters
cThe character to convert
Returns
The lowercase version of c (if c is uppercase), otherwise c unchanged

Definition at line 32 of file cctype.h.

32 {
33 return (c >= 'A' && c <= 'Z') ? (c + ('a' - 'A')) : c;
34}

References FL_NOEXCEPT.

Referenced by fl::BoolConversionVisitor::operator()(), and fl::anonymous_namespace{http_parser.cpp.hpp}::toLower().

+ Here is the caller graph for this function:

◆ toString() [1/2]

const char * fl::toString ( RxBackend backend)
inline

Definition at line 17 of file types.h.

17 {
18 switch (backend) {
19 case RxBackend::PLATFORM_DEFAULT: return "PLATFORM_DEFAULT";
20 case RxBackend::RMT: return "RMT";
21 case RxBackend::ISR: return "ISR";
22 case RxBackend::FLEXPWM: return "FLEXPWM";
23 case RxBackend::FLEXIO: return "FLEXIO";
24 case RxBackend::LPC_SCT_CAPTURE: return "LPC_SCT_CAPTURE";
25 }
26 return "UNKNOWN";
27}
@ LPC_SCT_CAPTURE
LPC8xx SCT input-capture + DMA edge backend (LPC845 et al). Capture path is a skeleton until follow-u...
Definition types.h:14
@ FLEXPWM
Teensy 4.x-only FlexPWM capture backend.
Definition types.h:12
@ FLEXIO
Teensy 4.x-only FlexIO capture backend (FLEXIO1 — FLEXIO2 is owned by the WS2812 TX driver)....
Definition types.h:13
@ PLATFORM_DEFAULT
Use the recommended backend for the active platform (RMT on ESP32; FlexPWM on Teensy 4....
Definition types.h:9
@ RMT
ESP32-only RMT capture backend.
Definition types.h:10
@ ISR
Platform-neutral interrupt-driven edge capture backend when available.
Definition types.h:11

References FL_NOEXCEPT, FLEXIO, FLEXPWM, ISR, LPC_SCT_CAPTURE, PLATFORM_DEFAULT, and RMT.

◆ toString() [2/2]

const char * fl::toString ( RxDeviceType type)
inline

Convert RxDeviceType to human-readable string.

Parameters
typeRX device type
Returns
String name ("ISR" or "RMT")

Definition at line 177 of file rx.h.

177 {
178 switch (type) {
179 case RxDeviceType::PLATFORM_DEFAULT: return "PLATFORM_DEFAULT";
180 case RxDeviceType::ISR: return "ISR";
181 case RxDeviceType::RMT: return "RMT";
182 case RxDeviceType::FLEXPWM: return "FLEXPWM";
183 case RxDeviceType::FLEXIO: return "FLEXIO";
184 case RxDeviceType::LPC_SCT_CAPTURE: return "LPC_SCT_CAPTURE";
185 }
186 return "UNKNOWN";
187}
@ RMT
RMT-based receiver (ESP32)
Definition rx.h:166

References FL_NOEXCEPT, FLEXIO, FLEXPWM, ISR, LPC_SCT_CAPTURE, PLATFORM_DEFAULT, and RMT.

Referenced by runTest(), and setup().

+ Here is the caller graph for this function:

◆ toupper()

char fl::toupper ( char c)
inline

Convert character to uppercase.

Parameters
cThe character to convert
Returns
The uppercase version of c (if c is lowercase), otherwise c unchanged

Definition at line 39 of file cctype.h.

39 {
40 return (c >= 'a' && c <= 'z') ? (c - ('a' - 'A')) : c;
41}

References FL_NOEXCEPT.

◆ transpose8()

template<int m, int n>
FASTLED_FORCE_INLINE void fl::transpose8 ( unsigned char * A,
unsigned char * B )

Templated 8x8 bit transpose with custom stride.

Based on: https://web.archive.org/web/20190108225554/http://www.hackersdelight.org/hdcodetxt/transpose8.c.txt

Template Parameters
mInput stride (1 for sequential bytes)
nOutput stride (1 for sequential bytes)
Parameters
AInput array (8 bytes at stride m)
BOutput array (8 bytes at stride n, transposed)
Examples
/home/runner/work/FastLED/FastLED/src/fl/math/transposition.h.

Definition at line 186 of file transposition.h.

186 {
187 fl::u32 x, y, t;
188
189 // Load the array and pack it into x and y.
190 if(m == 1) {
191 y = *(fl::u32*)(A);
192 x = *(fl::u32*)(A+4);
193 } else {
194 x = (fl::u32(A[0])<<24) | (fl::u32(A[m])<<16) | (fl::u32(A[2*m])<<8) | A[3*m];
195 y = (fl::u32(A[4*m])<<24) | (fl::u32(A[5*m])<<16) | (fl::u32(A[6*m])<<8) | A[7*m];
196 }
197
198 // pre-transform x
199 t = (x ^ (x >> 7)) & 0x00AA00AA; x = x ^ t ^ (t << 7);
200 t = (x ^ (x >>14)) & 0x0000CCCC; x = x ^ t ^ (t <<14);
201
202 // pre-transform y
203 t = (y ^ (y >> 7)) & 0x00AA00AA; y = y ^ t ^ (t << 7);
204 t = (y ^ (y >>14)) & 0x0000CCCC; y = y ^ t ^ (t <<14);
205
206 // final transform
207 t = (x & 0xF0F0F0F0) | ((y >> 4) & 0x0F0F0F0F);
208 y = ((x << 4) & 0xF0F0F0F0) | (y & 0x0F0F0F0F);
209 x = t;
210
211 B[7*n] = y; y >>= 8;
212 B[6*n] = y; y >>= 8;
213 B[5*n] = y; y >>= 8;
214 B[4*n] = y;
215
216 B[3*n] = x; x >>= 8;
217 B[2*n] = x; x >>= 8;
218 B[n] = x; x >>= 8;
219 B[0] = x;
220}

References B, FASTLED_FORCE_INLINE, FL_NOEXCEPT, t, x, and y.

◆ transpose8x1()

FASTLED_FORCE_INLINE void fl::transpose8x1 ( unsigned char * A,
unsigned char * B )

Simplified 8x1 bit transpose (inline version)

Parameters
AInput array (8 bytes)
BOutput array (8 bytes, transposed)
Examples
/home/runner/work/FastLED/FastLED/src/fl/math/transposition.h.

Definition at line 116 of file transposition.h.

116 {
117 fl::u32 x, y, t;
118
119 // Load the array and pack it into x and y.
120 y = *(fl::u32*)(A);
121 x = *(fl::u32*)(A+4);
122
123 // pre-transform x
124 t = (x ^ (x >> 7)) & 0x00AA00AA; x = x ^ t ^ (t << 7);
125 t = (x ^ (x >>14)) & 0x0000CCCC; x = x ^ t ^ (t <<14);
126
127 // pre-transform y
128 t = (y ^ (y >> 7)) & 0x00AA00AA; y = y ^ t ^ (t << 7);
129 t = (y ^ (y >>14)) & 0x0000CCCC; y = y ^ t ^ (t <<14);
130
131 // final transform
132 t = (x & 0xF0F0F0F0) | ((y >> 4) & 0x0F0F0F0F);
133 y = ((x << 4) & 0xF0F0F0F0) | (y & 0x0F0F0F0F);
134 x = t;
135
136 *((u32*)B) = y;
137 *((u32*)(B+4)) = x;
138}

References B, FASTLED_FORCE_INLINE, FL_NOEXCEPT, t, x, and y.

◆ transpose8x1_MSB()

FASTLED_FORCE_INLINE void fl::transpose8x1_MSB ( unsigned char * A,
unsigned char * B )

Simplified 8x1 bit transpose with MSB-first output.

Based on: https://web.archive.org/web/20190108225554/http://www.hackersdelight.org/hdcodetxt/transpose8.c.txt

Parameters
AInput array (8 bytes)
BOutput array (8 bytes, transposed MSB-first)
Examples
/home/runner/work/FastLED/FastLED/src/fl/math/transposition.h.

Definition at line 146 of file transposition.h.

146 {
147 fl::u32 x, y, t;
148
149 // Load the array and pack it into x and y.
150 y = *(fl::u32*)(A);
151 x = *(fl::u32*)(A+4);
152
153 // pre-transform x
154 t = (x ^ (x >> 7)) & 0x00AA00AA; x = x ^ t ^ (t << 7);
155 t = (x ^ (x >>14)) & 0x0000CCCC; x = x ^ t ^ (t <<14);
156
157 // pre-transform y
158 t = (y ^ (y >> 7)) & 0x00AA00AA; y = y ^ t ^ (t << 7);
159 t = (y ^ (y >>14)) & 0x0000CCCC; y = y ^ t ^ (t <<14);
160
161 // final transform
162 t = (x & 0xF0F0F0F0) | ((y >> 4) & 0x0F0F0F0F);
163 y = ((x << 4) & 0xF0F0F0F0) | (y & 0x0F0F0F0F);
164 x = t;
165
166 B[7] = y; y >>= 8;
167 B[6] = y; y >>= 8;
168 B[5] = y; y >>= 8;
169 B[4] = y;
170
171 B[3] = x; x >>= 8;
172 B[2] = x; x >>= 8;
173 B[1] = x; x >>= 8;
174 B[0] = x;
175}

References B, FASTLED_FORCE_INLINE, FL_NOEXCEPT, t, x, and y.

Referenced by transpose_8strips().

+ Here is the caller graph for this function:

◆ transpose8x1_noinline()

void fl::transpose8x1_noinline ( unsigned char * A,
unsigned char * B )

Simplified 8x1 bit transpose (non-inline version)

This rotates data into LSB for faster write (code can walk array backwards). Based on: https://web.archive.org/web/20190108225554/http://www.hackersdelight.org/hdcodetxt/transpose8.c.txt

Parameters
AInput array (8 bytes)
BOutput array (8 bytes, transposed)
Examples
/home/runner/work/FastLED/FastLED/src/fl/math/transposition.h.

References B, and FL_NOEXCEPT.

◆ transpose_16lane_inline()

void fl::transpose_16lane_inline ( const u8 *const lanes[16],
u8 * output,
size_t num_bytes )
inline

Low-level bit-interleaving primitive for 16 lanes (ISR-safe)

Transposes 16 input bytes into 16-way interleaved format. This function is ISR-safe: no allocations, no exceptions, minimal overhead. Inline functions are automatically placed where needed - no IRAM_ATTR required.

Parameters
lanesArray of 16 lane byte pointers
outputOutput buffer (must have space for num_bytes * 16 bytes)
num_bytesNumber of bytes to transpose per lane
Note
Inline function - inlined at call site (including ISR contexts)
Output size is num_bytes * 16
Examples
/home/runner/work/FastLED/FastLED/src/fl/math/transposition.h.

Definition at line 417 of file transposition.h.

421 {
422 for (size_t byte_idx = 0; byte_idx < num_bytes; byte_idx++) {
423 // Pack lanes 0-7 into first 64-bit register
424 u64 packed_lo =
425 ((u64)lanes[0][byte_idx] << 0) |
426 ((u64)lanes[1][byte_idx] << 8) |
427 ((u64)lanes[2][byte_idx] << 16) |
428 ((u64)lanes[3][byte_idx] << 24) |
429 ((u64)lanes[4][byte_idx] << 32) |
430 ((u64)lanes[5][byte_idx] << 40) |
431 ((u64)lanes[6][byte_idx] << 48) |
432 ((u64)lanes[7][byte_idx] << 56);
433
434 // Pack lanes 8-15 into second 64-bit register
435 u64 packed_hi =
436 ((u64)lanes[8][byte_idx] << 0) |
437 ((u64)lanes[9][byte_idx] << 8) |
438 ((u64)lanes[10][byte_idx] << 16) |
439 ((u64)lanes[11][byte_idx] << 24) |
440 ((u64)lanes[12][byte_idx] << 32) |
441 ((u64)lanes[13][byte_idx] << 40) |
442 ((u64)lanes[14][byte_idx] << 48) |
443 ((u64)lanes[15][byte_idx] << 56);
444
445 u8* dest = &output[byte_idx * 16];
446
447 // Extract bits in parallel from both packed registers
448 for (int bit = 7; bit >= 0; bit--) {
449 dest[7 - bit] =
450 ((packed_lo >> (bit + 0)) & 0x01) << 0 |
451 ((packed_lo >> (bit + 8)) & 0x01) << 1 |
452 ((packed_lo >> (bit + 16)) & 0x01) << 2 |
453 ((packed_lo >> (bit + 24)) & 0x01) << 3 |
454 ((packed_lo >> (bit + 32)) & 0x01) << 4 |
455 ((packed_lo >> (bit + 40)) & 0x01) << 5 |
456 ((packed_lo >> (bit + 48)) & 0x01) << 6 |
457 ((packed_lo >> (bit + 56)) & 0x01) << 7;
458
459 dest[15 - bit] =
460 ((packed_hi >> (bit + 0)) & 0x01) << 0 |
461 ((packed_hi >> (bit + 8)) & 0x01) << 1 |
462 ((packed_hi >> (bit + 16)) & 0x01) << 2 |
463 ((packed_hi >> (bit + 24)) & 0x01) << 3 |
464 ((packed_hi >> (bit + 32)) & 0x01) << 4 |
465 ((packed_hi >> (bit + 40)) & 0x01) << 5 |
466 ((packed_hi >> (bit + 48)) & 0x01) << 6 |
467 ((packed_hi >> (bit + 56)) & 0x01) << 7;
468 }
469 }
470}

References FL_NOEXCEPT.

Referenced by fl::SPITransposer::transpose16().

+ Here is the caller graph for this function:

◆ transpose_2lane_inline()

void fl::transpose_2lane_inline ( const u8 * lane0_byte,
const u8 * lane1_byte,
u8 * output,
size_t num_bytes )
inline

Low-level bit-interleaving primitive for 2 lanes (ISR-safe)

Transposes 2 input bytes into 2-way interleaved format with direct bit extraction. This function is ISR-safe: no allocations, no exceptions, minimal overhead. Inline functions are automatically placed where needed - no IRAM_ATTR required.

Parameters
lane0_bytePointer to lane 0 byte
lane1_bytePointer to lane 1 byte
outputOutput buffer (must have space for 2 bytes)
num_bytesNumber of bytes to transpose per lane
Note
Inline function - inlined at call site (including ISR contexts)
Output size is num_bytes * 2
Examples
/home/runner/work/FastLED/FastLED/src/fl/math/transposition.h.

Definition at line 329 of file transposition.h.

334 {
335 for (size_t byte_idx = 0; byte_idx < num_bytes; byte_idx++) {
336 u8 a = lane0_byte[byte_idx];
337 u8 b = lane1_byte[byte_idx];
338
339 // dest[0] contains bit pairs for positions 7,6,5,4 (MSB first)
340 output[byte_idx * 2 + 0] =
341 ((a >> 7) & 0x01) << 0 | ((b >> 7) & 0x01) << 1 |
342 ((a >> 6) & 0x01) << 2 | ((b >> 6) & 0x01) << 3 |
343 ((a >> 5) & 0x01) << 4 | ((b >> 5) & 0x01) << 5 |
344 ((a >> 4) & 0x01) << 6 | ((b >> 4) & 0x01) << 7;
345
346 // dest[1] contains bit pairs for positions 3,2,1,0 (LSB)
347 output[byte_idx * 2 + 1] =
348 ((a >> 3) & 0x01) << 0 | ((b >> 3) & 0x01) << 1 |
349 ((a >> 2) & 0x01) << 2 | ((b >> 2) & 0x01) << 3 |
350 ((a >> 1) & 0x01) << 4 | ((b >> 1) & 0x01) << 5 |
351 ((a >> 0) & 0x01) << 6 | ((b >> 0) & 0x01) << 7;
352 }
353}

References FL_NOEXCEPT.

Referenced by fl::SPITransposer::transpose2().

+ Here is the caller graph for this function:

◆ transpose_2strips()

FASTLED_FORCE_INLINE void fl::transpose_2strips ( const u8 *const input[2],
u8 * output,
u16 num_leds,
u8 bytes_per_led )

Transpose 2 LED strips into parallel bit format.

This function transposes 2 LED strips from standard byte-sequential format to bit-parallel format suitable for 2-way PIO output.

Input: 2 strips, each with num_leds * bytes_per_led bytes Output: num_leds * bytes_per_led * 8 bytes

Parameters
inputArray of 2 pointers to LED strip data
outputPointer to output buffer
num_ledsNumber of LEDs per strip (all strips padded to this length)
bytes_per_ledNumber of bytes per LED (3 for RGB, 4 for RGBW, etc.)
Note
All strips must be pre-padded to the same length
Output buffer must be pre-allocated by caller
Upper 6 bits of each output byte are zero
Examples
/home/runner/work/FastLED/FastLED/src/fl/math/transposition.h.

Definition at line 767 of file transposition.h.

772 {
773 // Process each LED
774 for (u16 led = 0; led < num_leds; led++) {
775 // Process each byte in the LED
776 for (u8 byte_idx = 0; byte_idx < bytes_per_led; byte_idx++) {
777 // Collect one byte from each strip for this byte position
778 u8 strip_bytes[2];
779 strip_bytes[0] = input[0][led * bytes_per_led + byte_idx];
780 strip_bytes[1] = input[1][led * bytes_per_led + byte_idx];
781
782 // Transpose: extract each bit position from both strips
783 for (int bit = 7; bit >= 0; bit--) {
784 u8 output_byte =
785 ((strip_bytes[0] >> bit) & 1) |
786 (((strip_bytes[1] >> bit) & 1) << 1);
787 *output++ = output_byte;
788 }
789 }
790 }
791}

References FASTLED_FORCE_INLINE, and FL_NOEXCEPT.

Referenced by transpose_strips().

+ Here is the caller graph for this function:

◆ transpose_4lane_inline()

void fl::transpose_4lane_inline ( const u8 *const lanes[4],
u8 * output,
size_t num_bytes )
inline

Low-level bit-interleaving primitive for 4 lanes (ISR-safe)

Transposes 4 input bytes into 4-way interleaved format with direct bit extraction. This function is ISR-safe: no allocations, no exceptions, minimal overhead. Inline functions are automatically placed where needed - no IRAM_ATTR required.

Parameters
lanesArray of 4 lane byte pointers
outputOutput buffer (must have space for num_bytes * 4 bytes)
num_bytesNumber of bytes to transpose per lane
Note
Inline function - inlined at call site (including ISR contexts)
Output size is num_bytes * 4
Examples
/home/runner/work/FastLED/FastLED/src/fl/math/transposition.h.

Definition at line 355 of file transposition.h.

359 {
360 for (size_t byte_idx = 0; byte_idx < num_bytes; byte_idx++) {
361 u8 a = lanes[0][byte_idx];
362 u8 b = lanes[1][byte_idx];
363 u8 c = lanes[2][byte_idx];
364 u8 d = lanes[3][byte_idx];
365
366 u8* dest = &output[byte_idx * 4];
367
368 dest[0] = ((a >> 7) & 0x01) << 0 | ((b >> 7) & 0x01) << 1 | ((c >> 7) & 0x01) << 2 | ((d >> 7) & 0x01) << 3 |
369 ((a >> 6) & 0x01) << 4 | ((b >> 6) & 0x01) << 5 | ((c >> 6) & 0x01) << 6 | ((d >> 6) & 0x01) << 7;
370
371 dest[1] = ((a >> 5) & 0x01) << 0 | ((b >> 5) & 0x01) << 1 | ((c >> 5) & 0x01) << 2 | ((d >> 5) & 0x01) << 3 |
372 ((a >> 4) & 0x01) << 4 | ((b >> 4) & 0x01) << 5 | ((c >> 4) & 0x01) << 6 | ((d >> 4) & 0x01) << 7;
373
374 dest[2] = ((a >> 3) & 0x01) << 0 | ((b >> 3) & 0x01) << 1 | ((c >> 3) & 0x01) << 2 | ((d >> 3) & 0x01) << 3 |
375 ((a >> 2) & 0x01) << 4 | ((b >> 2) & 0x01) << 5 | ((c >> 2) & 0x01) << 6 | ((d >> 2) & 0x01) << 7;
376
377 dest[3] = ((a >> 1) & 0x01) << 0 | ((b >> 1) & 0x01) << 1 | ((c >> 1) & 0x01) << 2 | ((d >> 1) & 0x01) << 3 |
378 ((a >> 0) & 0x01) << 4 | ((b >> 0) & 0x01) << 5 | ((c >> 0) & 0x01) << 6 | ((d >> 0) & 0x01) << 7;
379 }
380}

References FL_NOEXCEPT.

Referenced by fl::SPITransposer::transpose4().

+ Here is the caller graph for this function:

◆ transpose_4strips()

FASTLED_FORCE_INLINE void fl::transpose_4strips ( const u8 *const input[4],
u8 * output,
u16 num_leds,
u8 bytes_per_led )

Transpose 4 LED strips into parallel bit format.

This function transposes 4 LED strips from standard byte-sequential format to bit-parallel format suitable for 4-way PIO output.

Input: 4 strips, each with num_leds * bytes_per_led bytes Output: num_leds * bytes_per_led * 8 bytes

Parameters
inputArray of 4 pointers to LED strip data
outputPointer to output buffer
num_ledsNumber of LEDs per strip (all strips padded to this length)
bytes_per_ledNumber of bytes per LED (3 for RGB, 4 for RGBW, etc.)
Note
All strips must be pre-padded to the same length
Output buffer must be pre-allocated by caller
Upper 4 bits of each output byte are zero
Examples
/home/runner/work/FastLED/FastLED/src/fl/math/transposition.h.

Definition at line 722 of file transposition.h.

727 {
728 // Process each LED
729 for (u16 led = 0; led < num_leds; led++) {
730 // Process each byte in the LED
731 for (u8 byte_idx = 0; byte_idx < bytes_per_led; byte_idx++) {
732 // Collect one byte from each strip for this byte position
733 u8 strip_bytes[4];
734 for (int strip = 0; strip < 4; strip++) {
735 strip_bytes[strip] = input[strip][led * bytes_per_led + byte_idx];
736 }
737
738 // Transpose: extract each bit position from all 4 strips
739 for (int bit = 7; bit >= 0; bit--) {
740 u8 output_byte = 0;
741 // Pack bits from all 4 strips into lower 4 bits
742 for (int strip = 0; strip < 4; strip++) {
743 output_byte |= ((strip_bytes[strip] >> bit) & 1) << strip;
744 }
745 *output++ = output_byte;
746 }
747 }
748 }
749}

References FASTLED_FORCE_INLINE, and FL_NOEXCEPT.

Referenced by transpose_strips().

+ Here is the caller graph for this function:

◆ transpose_8lane_inline()

void fl::transpose_8lane_inline ( const u8 *const lanes[8],
u8 * output,
size_t num_bytes )
inline

Low-level bit-interleaving primitive for 8 lanes (ISR-safe)

Transposes 8 input bytes into 8-way interleaved format with optimized bit extraction. This function is ISR-safe: no allocations, no exceptions, minimal overhead. Inline functions are automatically placed where needed - no IRAM_ATTR required.

Parameters
lanesArray of 8 lane byte pointers
outputOutput buffer (must have space for num_bytes * 8 bytes)
num_bytesNumber of bytes to transpose per lane
Note
Inline function - inlined at call site (including ISR contexts)
Output size is num_bytes * 8
Examples
/home/runner/work/FastLED/FastLED/src/fl/math/transposition.h.

Definition at line 382 of file transposition.h.

386 {
387 for (size_t byte_idx = 0; byte_idx < num_bytes; byte_idx++) {
388 // Pack 8 bytes into a single 64-bit register
389 // This reduces register pressure and enables parallel bit extraction
390 u64 packed =
391 ((u64)lanes[0][byte_idx] << 0) |
392 ((u64)lanes[1][byte_idx] << 8) |
393 ((u64)lanes[2][byte_idx] << 16) |
394 ((u64)lanes[3][byte_idx] << 24) |
395 ((u64)lanes[4][byte_idx] << 32) |
396 ((u64)lanes[5][byte_idx] << 40) |
397 ((u64)lanes[6][byte_idx] << 48) |
398 ((u64)lanes[7][byte_idx] << 56);
399
400 u8* dest = &output[byte_idx * 8];
401
402 // Extract bits in parallel (compiler can optimize independent shifts)
403 for (int bit = 7; bit >= 0; bit--) {
404 dest[7 - bit] =
405 ((packed >> (bit + 0)) & 0x01) << 0 |
406 ((packed >> (bit + 8)) & 0x01) << 1 |
407 ((packed >> (bit + 16)) & 0x01) << 2 |
408 ((packed >> (bit + 24)) & 0x01) << 3 |
409 ((packed >> (bit + 32)) & 0x01) << 4 |
410 ((packed >> (bit + 40)) & 0x01) << 5 |
411 ((packed >> (bit + 48)) & 0x01) << 6 |
412 ((packed >> (bit + 56)) & 0x01) << 7;
413 }
414 }
415}

References FL_NOEXCEPT.

Referenced by fl::SPITransposer::transpose8().

+ Here is the caller graph for this function:

◆ transpose_8strips()

FASTLED_FORCE_INLINE void fl::transpose_8strips ( const u8 *const input[8],
u8 * output,
u16 num_leds,
u8 bytes_per_led )

Transpose 8 LED strips into parallel bit format.

This function transposes 8 LED strips from standard byte-sequential format to bit-parallel format suitable for 8-way PIO output. It uses the highly optimized transpose8x1_MSB() function (Hacker's Delight algorithm).

Input: 8 strips, each with num_leds * bytes_per_led bytes Output: num_leds * bytes_per_led * 8 bytes

Parameters
inputArray of 8 pointers to LED strip data
outputPointer to output buffer
num_ledsNumber of LEDs per strip (all strips padded to this length)
bytes_per_ledNumber of bytes per LED (3 for RGB, 4 for RGBW, etc.)
Note
All strips must be pre-padded to the same length
Output buffer must be pre-allocated by caller
Examples
/home/runner/work/FastLED/FastLED/src/fl/math/transposition.h.

Definition at line 680 of file transposition.h.

685 {
686 // Process each LED
687 for (u16 led = 0; led < num_leds; led++) {
688 u8 temp_input[8];
689
690 // Process each byte in the LED
691 for (u8 byte_idx = 0; byte_idx < bytes_per_led; byte_idx++) {
692 // Collect one byte from each strip for this byte position
693 for (int strip = 0; strip < 8; strip++) {
694 temp_input[strip] = input[strip][led * bytes_per_led + byte_idx];
695 }
696
697 // Transpose 8 bytes → 8 bytes (1 bit from each strip per output byte)
698 transpose8x1_MSB(temp_input, output);
699
700 // Advance output pointer by 8 bytes
701 output += 8;
702 }
703 }
704}
FASTLED_FORCE_INLINE void transpose8x1_MSB(unsigned char *A, unsigned char *B) FL_NOEXCEPT
Simplified 8x1 bit transpose with MSB-first output.

References FASTLED_FORCE_INLINE, FL_NOEXCEPT, transpose8x1_MSB(), and transpose_8strips().

Referenced by transpose_8strips(), and transpose_strips().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ transpose_generic_inline()

template<typename TSource>
void fl::transpose_generic_inline ( const TSource *const lanes[],
size_t num_lanes,
u8 * output,
size_t num_items )
inline

Generic bit-interleaving primitive for N lanes with M-bit source data (ISR-safe)

This is a generalized transposition function that can handle:

Use cases:

Template Parameters
TSourceSource data type (uint8_t, uint16_t, or uint32_t)
Parameters
lanesArray of lane data pointers (cast to TSource*)
num_lanesNumber of lanes to transpose (1-16)
outputOutput buffer
num_itemsNumber of source items to transpose per lane
Note
Inline function - inlined at call site (including ISR contexts)
Output size is num_items * (sizeof(TSource) * 8) bytes
Handles lane counts < 8 by padding upper bits with zeros
Examples
/home/runner/work/FastLED/FastLED/src/fl/math/transposition.h.

Definition at line 473 of file transposition.h.

478 {
479 constexpr size_t bits_per_item = sizeof(TSource) * 8;
480
481 for (size_t item_idx = 0; item_idx < num_items; item_idx++) {
482 u8* dest = &output[item_idx * bits_per_item];
483
484 // Process each bit position in the source data (MSB to LSB)
485 for (size_t bit_pos = 0; bit_pos < bits_per_item; bit_pos++) {
486 size_t src_bit = (bits_per_item - 1) - bit_pos;
487 u8 output_byte = 0;
488
489 // Extract bit from each lane (up to 8 lanes per output byte)
490 for (size_t lane = 0; lane < num_lanes && lane < 8; lane++) {
491 TSource src_value = lanes[lane][item_idx];
492 u8 bit = (src_value >> src_bit) & 0x01;
493 output_byte |= (bit << (7 - lane));
494 }
495
496 dest[bit_pos] = output_byte;
497 }
498 }
499}

References FL_NOEXCEPT.

◆ transpose_strips()

bool fl::transpose_strips ( u8 num_strips,
const u8 *const * input,
u8 * output,
u16 num_leds,
u8 bytes_per_led )
inline

Helper to transpose N strips with automatic dispatch.

Parameters
num_stripsNumber of strips (must be 2, 4, or 8)
inputArray of pointers to LED strip data
outputPointer to output buffer
num_ledsNumber of LEDs per strip
bytes_per_ledNumber of bytes per LED (3 for RGB, 4 for RGBW, etc.)
Returns
true if successful, false if invalid strip count
Examples
/home/runner/work/FastLED/FastLED/src/fl/math/transposition.h.

Definition at line 812 of file transposition.h.

818 {
819 switch (num_strips) {
820 case 8:
821 transpose_8strips(input, output, num_leds, bytes_per_led);
822 return true;
823 case 4:
824 transpose_4strips(input, output, num_leds, bytes_per_led);
825 return true;
826 case 2:
827 transpose_2strips(input, output, num_leds, bytes_per_led);
828 return true;
829 default:
830 return false; // Invalid strip count
831 }
832}
FASTLED_FORCE_INLINE void transpose_2strips(const u8 *const input[2], u8 *output, u16 num_leds, u8 bytes_per_led) FL_NOEXCEPT
Transpose 2 LED strips into parallel bit format.
FASTLED_FORCE_INLINE void transpose_4strips(const u8 *const input[4], u8 *output, u16 num_leds, u8 bytes_per_led) FL_NOEXCEPT
Transpose 4 LED strips into parallel bit format.
FASTLED_FORCE_INLINE void transpose_8strips(const u8 *const input[8], u8 *output, u16 num_leds, u8 bytes_per_led) FL_NOEXCEPT
Transpose 8 LED strips into parallel bit format.

References FL_NOEXCEPT, transpose_2strips(), transpose_4strips(), and transpose_8strips().

+ Here is the call graph for this function:

◆ transpose_wave8byte_parlio()

FASTLED_FORCE_INLINE FL_IRAM size_t fl::transpose_wave8byte_parlio ( const u8 *FL_RESTRICT_PARAM laneWaveforms,
size_t data_width,
u8 *FL_RESTRICT_PARAM outputBuffer )
Examples
/home/runner/work/FastLED/FastLED/src/fl/math/transposition.h.

Definition at line 1064 of file transposition.h.

1068 {
1069 // Dispatch to template specialization based on runtime data_width
1070 // Compiler generates optimized code for each specialization (no runtime branching)
1071 switch (data_width) {
1072 case 1:
1073 return transpose_wave8byte_parlio_template<1>(laneWaveforms, outputBuffer);
1074 case 2:
1075 return transpose_wave8byte_parlio_template<2>(laneWaveforms, outputBuffer);
1076 case 4:
1077 return transpose_wave8byte_parlio_template<4>(laneWaveforms, outputBuffer);
1078 case 8:
1079 return transpose_wave8byte_parlio_template<8>(laneWaveforms, outputBuffer);
1080 case 16:
1081 return transpose_wave8byte_parlio_template<16>(laneWaveforms, outputBuffer);
1082 default:
1083 // Invalid data_width
1084 return 0;
1085 }
1086}
FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION size_t transpose_wave8byte_parlio_template(const u8 *FL_RESTRICT_PARAM laneWaveforms, u8 *FL_RESTRICT_PARAM outputBuffer) FL_NOEXCEPT
Template specialization of transpose for compile-time data_width (optimization)

References FASTLED_FORCE_INLINE, FL_IRAM, FL_NOEXCEPT, FL_RESTRICT_PARAM, and transpose_wave8byte_parlio_template().

+ Here is the call graph for this function:

◆ transpose_wave8byte_parlio_template()

template<size_t DATA_WIDTH>
FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION size_t fl::transpose_wave8byte_parlio_template ( const u8 *FL_RESTRICT_PARAM laneWaveforms,
u8 *FL_RESTRICT_PARAM outputBuffer )

Template specialization of transpose for compile-time data_width (optimization)

This template version eliminates runtime branching by specializing for each data width. The compiler generates optimized code for each DATA_WIDTH value at compile time.

Template Parameters
DATA_WIDTHNumber of parallel lanes (1, 2, 4, 8, or 16) - compile-time constant
Examples
/home/runner/work/FastLED/FastLED/src/fl/math/transposition.h.

Definition at line 845 of file transposition.h.

848 {
849 constexpr size_t bytes_per_lane = 8; // sizeof(Wave8Byte)
850 constexpr size_t pulsesPerByte = 64; // 8 bits × 8 pulses per bit
851 size_t outputIdx = 0;
852
853 // Note: Using regular if statements (C++11 compatible)
854 // Compiler optimizes away dead branches for constant template parameters
855 if (DATA_WIDTH == 8) {
856 // Special optimized case for 8 lanes with bit packing
857 // Optimized: Hoist packing outside inner loop to reduce redundant operations
858 for (size_t bit_pos = 0; bit_pos < 8; bit_pos++) {
859 // Pack 8 wave8_byte values into a single 64-bit register for parallel extraction
860 // This packing is done once per bit_pos (8 times) instead of 64 times
861 u64 packed =
862 ((u64)laneWaveforms[0 * bytes_per_lane + bit_pos] << 0) |
863 ((u64)laneWaveforms[1 * bytes_per_lane + bit_pos] << 8) |
864 ((u64)laneWaveforms[2 * bytes_per_lane + bit_pos] << 16) |
865 ((u64)laneWaveforms[3 * bytes_per_lane + bit_pos] << 24) |
866 ((u64)laneWaveforms[4 * bytes_per_lane + bit_pos] << 32) |
867 ((u64)laneWaveforms[5 * bytes_per_lane + bit_pos] << 40) |
868 ((u64)laneWaveforms[6 * bytes_per_lane + bit_pos] << 48) |
869 ((u64)laneWaveforms[7 * bytes_per_lane + bit_pos] << 56);
870
871 // Inner loop: extract 8 pulses from the packed data
872 for (size_t pulse_bit = 0; pulse_bit < 8; pulse_bit++) {
873 // Extract pulse bits in parallel (compiler can optimize independent shifts)
874 outputBuffer[outputIdx++] =
875 ((packed >> (7 - pulse_bit + 0)) & 0x01) << 0 |
876 ((packed >> (7 - pulse_bit + 8)) & 0x01) << 1 |
877 ((packed >> (7 - pulse_bit + 16)) & 0x01) << 2 |
878 ((packed >> (7 - pulse_bit + 24)) & 0x01) << 3 |
879 ((packed >> (7 - pulse_bit + 32)) & 0x01) << 4 |
880 ((packed >> (7 - pulse_bit + 40)) & 0x01) << 5 |
881 ((packed >> (7 - pulse_bit + 48)) & 0x01) << 6 |
882 ((packed >> (7 - pulse_bit + 56)) & 0x01) << 7;
883 }
884 }
885 } else if (DATA_WIDTH <= 8) {
886 // Pack into single bytes (compile-time branch elimination via template instantiation)
887 // Guard against division by zero when DATA_WIDTH > 8 (shouldn't execute this branch, but compiler still evaluates it)
888 const size_t ticksPerByte = (DATA_WIDTH > 8) ? 1 : (8 / DATA_WIDTH);
889 const size_t numOutputBytes = (pulsesPerByte + ticksPerByte - 1) / ticksPerByte;
890
891 for (size_t outputByteIdx = 0; outputByteIdx < numOutputBytes; outputByteIdx++) {
892 u8 outputByte = 0;
893
894 FL_UNROLL(8)
895 for (size_t t = 0; t < ticksPerByte; t++) {
896 size_t pulse_idx = outputByteIdx * ticksPerByte + t;
897 if (pulse_idx >= pulsesPerByte)
898 break;
899
900 size_t bit_pos = pulse_idx / 8;
901 size_t pulse_bit = pulse_idx % 8;
902
903 FL_UNROLL(8)
904 for (size_t lane = 0; lane < DATA_WIDTH; lane++) {
905 const u8* laneWaveform = laneWaveforms + (lane * bytes_per_lane);
906 u8 wave8_byte = laneWaveform[bit_pos];
907 u8 pulse = (wave8_byte >> (7 - pulse_bit)) & 1;
908
909 size_t bitPos = t * DATA_WIDTH + lane;
910 outputByte |= (pulse << bitPos);
911 }
912 }
913
914 outputBuffer[outputIdx++] = outputByte;
915 }
916 } else if (DATA_WIDTH == 16) {
917 // Pack into 16-bit words (compile-time branch)
918 // Optimized: Software pipelining + output buffering
919 // Process 2 bit positions in parallel for better ILP, and batch writes for better cache efficiency
920
921 // Output buffer: accumulate 16 words (32 bytes) before writing
922 // This aligns with typical 32-byte cache lines and reduces memory write overhead
923 u8 writeBuffer[32];
924 size_t writeIdx = 0;
925
926 for (size_t bit_pos = 0; bit_pos < 8; bit_pos += 2) {
927 // Pack 16 wave8_byte values for TWO bit positions simultaneously
928 // This enables instruction-level parallelism and better register utilization
929 u64 packed_lo_0 =
930 ((u64)laneWaveforms[0 * bytes_per_lane + bit_pos + 0] << 0) |
931 ((u64)laneWaveforms[1 * bytes_per_lane + bit_pos + 0] << 8) |
932 ((u64)laneWaveforms[2 * bytes_per_lane + bit_pos + 0] << 16) |
933 ((u64)laneWaveforms[3 * bytes_per_lane + bit_pos + 0] << 24) |
934 ((u64)laneWaveforms[4 * bytes_per_lane + bit_pos + 0] << 32) |
935 ((u64)laneWaveforms[5 * bytes_per_lane + bit_pos + 0] << 40) |
936 ((u64)laneWaveforms[6 * bytes_per_lane + bit_pos + 0] << 48) |
937 ((u64)laneWaveforms[7 * bytes_per_lane + bit_pos + 0] << 56);
938
939 u64 packed_hi_0 =
940 ((u64)laneWaveforms[8 * bytes_per_lane + bit_pos + 0] << 0) |
941 ((u64)laneWaveforms[9 * bytes_per_lane + bit_pos + 0] << 8) |
942 ((u64)laneWaveforms[10 * bytes_per_lane + bit_pos + 0] << 16) |
943 ((u64)laneWaveforms[11 * bytes_per_lane + bit_pos + 0] << 24) |
944 ((u64)laneWaveforms[12 * bytes_per_lane + bit_pos + 0] << 32) |
945 ((u64)laneWaveforms[13 * bytes_per_lane + bit_pos + 0] << 40) |
946 ((u64)laneWaveforms[14 * bytes_per_lane + bit_pos + 0] << 48) |
947 ((u64)laneWaveforms[15 * bytes_per_lane + bit_pos + 0] << 56);
948
949 u64 packed_lo_1 =
950 ((u64)laneWaveforms[0 * bytes_per_lane + bit_pos + 1] << 0) |
951 ((u64)laneWaveforms[1 * bytes_per_lane + bit_pos + 1] << 8) |
952 ((u64)laneWaveforms[2 * bytes_per_lane + bit_pos + 1] << 16) |
953 ((u64)laneWaveforms[3 * bytes_per_lane + bit_pos + 1] << 24) |
954 ((u64)laneWaveforms[4 * bytes_per_lane + bit_pos + 1] << 32) |
955 ((u64)laneWaveforms[5 * bytes_per_lane + bit_pos + 1] << 40) |
956 ((u64)laneWaveforms[6 * bytes_per_lane + bit_pos + 1] << 48) |
957 ((u64)laneWaveforms[7 * bytes_per_lane + bit_pos + 1] << 56);
958
959 u64 packed_hi_1 =
960 ((u64)laneWaveforms[8 * bytes_per_lane + bit_pos + 1] << 0) |
961 ((u64)laneWaveforms[9 * bytes_per_lane + bit_pos + 1] << 8) |
962 ((u64)laneWaveforms[10 * bytes_per_lane + bit_pos + 1] << 16) |
963 ((u64)laneWaveforms[11 * bytes_per_lane + bit_pos + 1] << 24) |
964 ((u64)laneWaveforms[12 * bytes_per_lane + bit_pos + 1] << 32) |
965 ((u64)laneWaveforms[13 * bytes_per_lane + bit_pos + 1] << 40) |
966 ((u64)laneWaveforms[14 * bytes_per_lane + bit_pos + 1] << 48) |
967 ((u64)laneWaveforms[15 * bytes_per_lane + bit_pos + 1] << 56);
968
969 // Inner loop: interleave extraction from both bit positions
970 // This allows CPU to execute independent operations in parallel
971 for (size_t pulse_bit = 0; pulse_bit < 8; pulse_bit++) {
972 // Extract pulse bits for first bit position
973 u16 outputWord_0 =
974 ((packed_lo_0 >> (7 - pulse_bit + 0)) & 0x01) << 0 |
975 ((packed_lo_0 >> (7 - pulse_bit + 8)) & 0x01) << 1 |
976 ((packed_lo_0 >> (7 - pulse_bit + 16)) & 0x01) << 2 |
977 ((packed_lo_0 >> (7 - pulse_bit + 24)) & 0x01) << 3 |
978 ((packed_lo_0 >> (7 - pulse_bit + 32)) & 0x01) << 4 |
979 ((packed_lo_0 >> (7 - pulse_bit + 40)) & 0x01) << 5 |
980 ((packed_lo_0 >> (7 - pulse_bit + 48)) & 0x01) << 6 |
981 ((packed_lo_0 >> (7 - pulse_bit + 56)) & 0x01) << 7 |
982 ((packed_hi_0 >> (7 - pulse_bit + 0)) & 0x01) << 8 |
983 ((packed_hi_0 >> (7 - pulse_bit + 8)) & 0x01) << 9 |
984 ((packed_hi_0 >> (7 - pulse_bit + 16)) & 0x01) << 10 |
985 ((packed_hi_0 >> (7 - pulse_bit + 24)) & 0x01) << 11 |
986 ((packed_hi_0 >> (7 - pulse_bit + 32)) & 0x01) << 12 |
987 ((packed_hi_0 >> (7 - pulse_bit + 40)) & 0x01) << 13 |
988 ((packed_hi_0 >> (7 - pulse_bit + 48)) & 0x01) << 14 |
989 ((packed_hi_0 >> (7 - pulse_bit + 56)) & 0x01) << 15;
990
991 // Extract pulse bits for second bit position
992 u16 outputWord_1 =
993 ((packed_lo_1 >> (7 - pulse_bit + 0)) & 0x01) << 0 |
994 ((packed_lo_1 >> (7 - pulse_bit + 8)) & 0x01) << 1 |
995 ((packed_lo_1 >> (7 - pulse_bit + 16)) & 0x01) << 2 |
996 ((packed_lo_1 >> (7 - pulse_bit + 24)) & 0x01) << 3 |
997 ((packed_lo_1 >> (7 - pulse_bit + 32)) & 0x01) << 4 |
998 ((packed_lo_1 >> (7 - pulse_bit + 40)) & 0x01) << 5 |
999 ((packed_lo_1 >> (7 - pulse_bit + 48)) & 0x01) << 6 |
1000 ((packed_lo_1 >> (7 - pulse_bit + 56)) & 0x01) << 7 |
1001 ((packed_hi_1 >> (7 - pulse_bit + 0)) & 0x01) << 8 |
1002 ((packed_hi_1 >> (7 - pulse_bit + 8)) & 0x01) << 9 |
1003 ((packed_hi_1 >> (7 - pulse_bit + 16)) & 0x01) << 10 |
1004 ((packed_hi_1 >> (7 - pulse_bit + 24)) & 0x01) << 11 |
1005 ((packed_hi_1 >> (7 - pulse_bit + 32)) & 0x01) << 12 |
1006 ((packed_hi_1 >> (7 - pulse_bit + 40)) & 0x01) << 13 |
1007 ((packed_hi_1 >> (7 - pulse_bit + 48)) & 0x01) << 14 |
1008 ((packed_hi_1 >> (7 - pulse_bit + 56)) & 0x01) << 15;
1009
1010 // Write to buffer instead of directly to output
1011 writeBuffer[writeIdx++] = outputWord_0 & 0xFF;
1012 writeBuffer[writeIdx++] = (outputWord_0 >> 8) & 0xFF;
1013 writeBuffer[writeIdx++] = outputWord_1 & 0xFF;
1014 writeBuffer[writeIdx++] = (outputWord_1 >> 8) & 0xFF;
1015 }
1016
1017 // Flush buffer when full (16 words = 32 bytes)
1018 // This triggers efficient burst writes that align with cache lines
1019 if (writeIdx == 32) {
1020 fl::memcpy(&outputBuffer[outputIdx], writeBuffer, 32);
1021 outputIdx += 32;
1022 writeIdx = 0;
1023 }
1024 }
1025 } else {
1026 // Invalid DATA_WIDTH (compile-time error if template instantiated with wrong value)
1027 return 0;
1028 }
1029
1030 return outputIdx;
1031}
#define FL_UNROLL(N)

References FASTLED_FORCE_INLINE, FL_IRAM, FL_NOEXCEPT, FL_OPTIMIZE_FUNCTION, FL_RESTRICT_PARAM, FL_UNROLL, memcpy(), and t.

Referenced by transpose_wave8byte_parlio().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ traverseGridSegment()

template<typename GridVisitor>
void fl::traverseGridSegment ( const vec2f & start,
const vec2f & end,
GridVisitor & visitor )
inline

Traverse a grid segment by selecting the cells that are crossed.

This version will select the fastest integer implementation based on the length of the segment. Most of the time it will call traverseGridSegment16() since segment spans are typically < 256 pixels.

Template Parameters
GridVisitor
Parameters
startstart point
endend point
visitorcalled for each cell visited.

Fully tested.

Definition at line 282 of file traverse_grid.h.

283 {
284 float dx = fl::abs(end.x - start.x);
285 float dy = fl::abs(end.y - start.y);
286 float maxRange = fl::max(dx, dy);
287
288 // if (maxRange < 256.0f) {
289 // // Use Q8.8 (16-bit signed) if within ±127
290 // traverseGridSegment16(start, end, visitor);
291 // }
292 // else if (maxRange < 16777216.0f) {
293 // // Use Q24.8 (32-bit signed) if within ±8 million
294 // traverseGridSegment32(start, end, visitor);
295 // }
296 // else {
297 // // Fall back to floating-point
298 // traverseGridSegment(start, end, visitor);
299 // }
300
301 if (maxRange < 256.0f) {
302 // Use Q8.8 (16-bit signed) if within ±127
303 traverseGridSegment16(start, end, visitor);
304 } else {
305 // Use Q24.8 (32-bit signed) if within ±8 million
306 traverseGridSegment32(start, end, visitor);
307 }
308}
void traverseGridSegment16(const vec2f &start, const vec2f &end, GridVisitor &visitor)
Traverse a grid segment using fixed-point 8.8 arithmetic.
void traverseGridSegment32(const vec2f &start, const vec2f &end, GridVisitor &visitor)
value_type y
Definition geometry.h:191
value_type x
Definition geometry.h:190

References abs(), end(), max(), traverseGridSegment16(), traverseGridSegment32(), fl::vec2< T >::x, and fl::vec2< T >::y.

+ Here is the call graph for this function:

◆ traverseGridSegment16()

template<typename GridVisitor>
void fl::traverseGridSegment16 ( const vec2f & start,
const vec2f & end,
GridVisitor & visitor )

Traverse a grid segment using fixed-point 8.8 arithmetic.

Template Parameters
GridVisitor
Parameters
startstart point
endend point
visitorcalled for each cell visited.

UNTESTED!!!!

Definition at line 125 of file traverse_grid.h.

126 {
127 const i16 FP_SHIFT = 8;
128 const i16 FP_ONE = 1 << FP_SHIFT;
129 // const i16 FP_MASK = FP_ONE - 1;
130
131 // Convert to fixed-point (Q8.8), signed
132 i16 startX_fp = static_cast<i16>(start.x * FP_ONE);
133 i16 startY_fp = static_cast<i16>(start.y * FP_ONE);
134 i16 endX_fp = static_cast<i16>(end.x * FP_ONE);
135 i16 endY_fp = static_cast<i16>(end.y * FP_ONE);
136
137 i16 x0 = startX_fp >> FP_SHIFT;
138 i16 y0 = startY_fp >> FP_SHIFT;
139 i16 x1 = endX_fp >> FP_SHIFT;
140 i16 y1 = endY_fp >> FP_SHIFT;
141
142 i16 stepX = (x1 > x0) ? 1 : (x1 < x0) ? -1 : 0;
143 i16 stepY = (y1 > y0) ? 1 : (y1 < y0) ? -1 : 0;
144
145 i16 deltaX_fp = endX_fp - startX_fp;
146 i16 deltaY_fp = endY_fp - startY_fp;
147
148 // Use (max)() to prevent macro expansion by Arduino.h's max macro
149 u16 absDeltaX_fp =
150 (deltaX_fp != 0) ? static_cast<u16>(
151 fl::abs((i32(FP_ONE) << FP_SHIFT) / deltaX_fp))
153 u16 absDeltaY_fp =
154 (deltaY_fp != 0) ? static_cast<u16>(
155 fl::abs((i32(FP_ONE) << FP_SHIFT) / deltaY_fp))
157
158 i16 nextX_fp = (stepX > 0) ? ((x0 + 1) << FP_SHIFT) : (x0 << FP_SHIFT);
159 i16 nextY_fp = (stepY > 0) ? ((y0 + 1) << FP_SHIFT) : (y0 << FP_SHIFT);
160
161 // Use (max)() to prevent macro expansion by Arduino.h's max macro
162 u16 tMaxX_fp =
163 (deltaX_fp != 0)
164 ? static_cast<u16>(
165 fl::abs(i32(nextX_fp - startX_fp)) * absDeltaX_fp >> FP_SHIFT)
167 u16 tMaxY_fp =
168 (deltaY_fp != 0)
169 ? static_cast<u16>(
170 fl::abs(i32(nextY_fp - startY_fp)) * absDeltaY_fp >> FP_SHIFT)
172
173 const u16 maxT_fp = FP_ONE;
174
175 i16 currentX = x0;
176 i16 currentY = y0;
177
178 while (true) {
179 visitor.visit(currentX, currentY);
180
181 u16 t_fp = (tMaxX_fp < tMaxY_fp) ? tMaxX_fp : tMaxY_fp;
182 if (t_fp > maxT_fp)
183 break;
184
185 if (tMaxX_fp < tMaxY_fp) {
186 tMaxX_fp += absDeltaX_fp;
187 currentX += stepX;
188 } else {
189 tMaxY_fp += absDeltaY_fp;
190 currentY += stepY;
191 }
192 }
193
194 // Ensure the end cell (x1, y1) is visited at least once
195 if (currentX != x1 || currentY != y1) {
196 visitor.visit(x1, y1);
197 }
198}
static constexpr T max() FL_NOEXCEPT
Definition limits.h:108

References abs(), end(), FP_ONE, fl::numeric_limits< T >::max(), fl::vec2< T >::x, and fl::vec2< T >::y.

Referenced by traverseGridSegment().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ traverseGridSegment32()

template<typename GridVisitor>
void fl::traverseGridSegment32 ( const vec2f & start,
const vec2f & end,
GridVisitor & visitor )
Template Parameters
GridVisitor
Parameters
startstart point
endend point
visitorcalled for each cell visited.

UNTESTED!!!!

Definition at line 207 of file traverse_grid.h.

208 {
209 const i32 FP_SHIFT = 8;
210 const i32 FP_ONE = 1 << FP_SHIFT;
211 // const i32 FP_MASK = FP_ONE - 1;
212
213 // Convert to fixed-point (Q24.8) signed
214 i32 startX_fp = static_cast<i32>(start.x * FP_ONE);
215 i32 startY_fp = static_cast<i32>(start.y * FP_ONE);
216 i32 endX_fp = static_cast<i32>(end.x * FP_ONE);
217 i32 endY_fp = static_cast<i32>(end.y * FP_ONE);
218
219 i32 x0 = startX_fp >> FP_SHIFT;
220 i32 y0 = startY_fp >> FP_SHIFT;
221 i32 x1 = endX_fp >> FP_SHIFT;
222 i32 y1 = endY_fp >> FP_SHIFT;
223
224 i32 stepX = (x1 > x0) ? 1 : (x1 < x0) ? -1 : 0;
225 i32 stepY = (y1 > y0) ? 1 : (y1 < y0) ? -1 : 0;
226
227 i32 deltaX_fp = endX_fp - startX_fp;
228 i32 deltaY_fp = endY_fp - startY_fp;
229
230 // Use (max)() to prevent macro expansion by Arduino.h's max macro
231 u32 absDeltaX_fp =
232 (deltaX_fp != 0) ? static_cast<u32>(
233 fl::abs((fl::i64(FP_ONE) << FP_SHIFT) / deltaX_fp))
235 u32 absDeltaY_fp =
236 (deltaY_fp != 0) ? static_cast<u32>(
237 fl::abs((fl::i64(FP_ONE) << FP_SHIFT) / deltaY_fp))
239
240 i32 nextX_fp = (stepX > 0) ? ((x0 + 1) << FP_SHIFT) : (x0 << FP_SHIFT);
241 i32 nextY_fp = (stepY > 0) ? ((y0 + 1) << FP_SHIFT) : (y0 << FP_SHIFT);
242
243 // Use (max)() to prevent macro expansion by Arduino.h's max macro
244 u32 tMaxX_fp =
245 (deltaX_fp != 0)
246 ? static_cast<u32>(
247 fl::abs(fl::i64(nextX_fp - startX_fp)) * absDeltaX_fp >> FP_SHIFT)
249 u32 tMaxY_fp =
250 (deltaY_fp != 0)
251 ? static_cast<u32>(
252 fl::abs(fl::i64(nextY_fp - startY_fp)) * absDeltaY_fp >> FP_SHIFT)
254
255 const u32 maxT_fp = FP_ONE;
256
257 i32 currentX = x0;
258 i32 currentY = y0;
259
260 while (true) {
261 visitor.visit(currentX, currentY);
262
263 u32 t_fp = (tMaxX_fp < tMaxY_fp) ? tMaxX_fp : tMaxY_fp;
264 if (t_fp > maxT_fp)
265 break;
266
267 if (tMaxX_fp < tMaxY_fp) {
268 tMaxX_fp += absDeltaX_fp;
269 currentX += stepX;
270 } else {
271 tMaxY_fp += absDeltaY_fp;
272 currentY += stepY;
273 }
274 }
275
276 if (currentX != x1 || currentY != y1) {
277 visitor.visit(x1, y1);
278 }
279}

References abs(), end(), FP_ONE, fl::numeric_limits< T >::max(), fl::vec2< T >::x, and fl::vec2< T >::y.

Referenced by traverseGridSegment().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ traverseGridSegmentFloat()

template<typename GridVisitor>
void fl::traverseGridSegmentFloat ( const vec2f & start,
const vec2f & end,
GridVisitor & visitor )

Traverse a grid segment using floating point arithmetic.

Traverse a grid segment using fixed-point 8.8 arithmetic.

Useful for testing.

Template Parameters
GridVisitor
Parameters
startstart point
endend point
visitorcalled for each cell visited.

Fully tested.

Template Parameters
GridVisitor
Parameters
startstart point
endend point
visitorcalled for each cell visited.

Fully tested.

Definition at line 70 of file traverse_grid.h.

71 {
72 int x0 = static_cast<int>(fl::floor(start.x));
73 int y0 = static_cast<int>(fl::floor(start.y));
74 int x1 = static_cast<int>(fl::floor(end.x));
75 int y1 = static_cast<int>(fl::floor(end.y));
76
77 int stepX = (x1 > x0) ? 1 : (x1 < x0) ? -1 : 0;
78 int stepY = (y1 > y0) ? 1 : (y1 < y0) ? -1 : 0;
79
80 float dx = end.x - start.x;
81 float dy = end.y - start.y;
82
83 float tDeltaX = (dx != 0.0f) ? fl::abs(1.0f / dx) : FL_FLT_MAX;
84 float tDeltaY = (dy != 0.0f) ? fl::abs(1.0f / dy) : FL_FLT_MAX;
85
86 float nextX = (stepX > 0) ? (fl::floor(start.x) + 1) : fl::floor(start.x);
87 float nextY = (stepY > 0) ? (fl::floor(start.y) + 1) : fl::floor(start.y);
88
89 float tMaxX = (dx != 0.0f) ? fl::abs((nextX - start.x) / dx) : FL_FLT_MAX;
90 float tMaxY = (dy != 0.0f) ? fl::abs((nextY - start.y) / dy) : FL_FLT_MAX;
91
92 float maxT = 1.0f;
93
94 int currentX = x0;
95 int currentY = y0;
96
97 while (true) {
98 visitor.visit(currentX, currentY);
99 float t = fl::min(tMaxX, tMaxY);
100 if (t > maxT)
101 break;
102
103 if (tMaxX < tMaxY) {
104 tMaxX += tDeltaX;
105 currentX += stepX;
106 } else {
107 tMaxY += tDeltaY;
108 currentY += stepY;
109 }
110 }
111
112 // Ensure the end cell (x1, y1) is visited at least once
113 if (currentX != x1 || currentY != y1) {
114 visitor.visit(x1, y1);
115 }
116}
#define FL_FLT_MAX
Definition math.h:54
constexpr enable_if< is_fixed_point< T >::value, T >::type floor(T x) FL_NOEXCEPT

References abs(), end(), FL_FLT_MAX, floor(), min(), t, fl::vec2< T >::x, and fl::vec2< T >::y.

+ Here is the call graph for this function:

◆ upscale()

void fl::upscale ( const CRGB * input,
CRGB * output,
u16 inputWidth,
u16 inputHeight,
const fl::XYMap & xyMap )
inline

Definition at line 56 of file upscale.h.

57 {
58 u16 outputWidth = xyMap.getWidth();
59 u16 outputHeight = xyMap.getHeight();
60 const bool wontFit =
61 (outputWidth != xyMap.getWidth() || outputHeight != xyMap.getHeight());
62
63 // Check if we can use the optimized rectangular version
64 const bool isRectangular = (xyMap.getType() == XYMap::kLineByLine);
65
66 if (isRectangular) {
67 // Use optimized rectangular version that bypasses XY mapping
68 if (wontFit || (inputWidth & (inputWidth - 1)) ||
69 (inputHeight & (inputHeight - 1))) {
70 upscaleRectangular(input, output, inputWidth, inputHeight,
71 outputWidth, outputHeight);
72 } else {
73 upscaleRectangularPowerOf2(input, output, inputWidth, inputHeight,
74 outputWidth, outputHeight);
75 }
76 } else {
77 // Use the original XY-mapped versions
78 if (wontFit || (inputWidth & (inputWidth - 1)) ||
79 (inputHeight & (inputHeight - 1))) {
80 upscaleArbitrary(input, output, inputWidth, inputHeight, xyMap);
81 } else {
82 upscalePowerOf2(input, output, inputWidth, inputHeight, xyMap);
83 }
84 }
85}
@ kLineByLine
Definition xymap.h:43
void upscaleRectangular(const CRGB *input, CRGB *output, u16 inputWidth, u16 inputHeight, u16 outputWidth, u16 outputHeight)
Optimized upscale for rectangular/line-by-line XY maps.
void upscaleRectangularPowerOf2(const CRGB *input, CRGB *output, u8 inputWidth, u8 inputHeight, u8 outputWidth, u8 outputHeight)
Optimized upscale for rectangular/line-by-line XY maps (power-of-2 version).
void upscaleArbitrary(const CRGB *input, CRGB *output, u16 inputWidth, u16 inputHeight, const XYMap &xyMap)
Performs bilinear interpolation for upscaling an image.
void upscalePowerOf2(const CRGB *input, CRGB *output, u8 inputWidth, u8 inputHeight, const XYMap &xyMap)
Performs bilinear interpolation for upscaling an image.

References fl::XYMap::kLineByLine, upscaleArbitrary(), upscalePowerOf2(), upscaleRectangular(), upscaleRectangularPowerOf2(), and xyMap.

Referenced by fl::ScaleUp::expand(), and fl::CRGB::upscale().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ upscaleArbitrary()

void fl::upscaleArbitrary ( const CRGB * input,
CRGB * output,
u16 inputWidth,
u16 inputHeight,
const fl::XYMap & xyMap )

Performs bilinear interpolation for upscaling an image.

Parameters
outputThe output grid to write into the interpolated values.
inputThe input grid to read from.
inputWidthThe width of the input grid.
inputHeightThe height of the input grid.
xyMapThe XYMap to use to determine where to write the pixel. If the pixel is mapped outside of the range then it is clipped.

Definition at line 105 of file upscale.cpp.hpp.

106 {
107 u16 n = xyMap.getTotal();
108 u16 outputWidth = xyMap.getWidth();
109 u16 outputHeight = xyMap.getHeight();
110 const u16 scale_factor = 256; // Using 8 bits for the fractional part
111
112 for (u16 y = 0; y < outputHeight; y++) {
113 for (u16 x = 0; x < outputWidth; x++) {
114 // Calculate the corresponding position in the input grid
115 u32 fx = ((u32)x * (inputWidth - 1) * scale_factor) /
116 (outputWidth - 1);
117 u32 fy = ((u32)y * (inputHeight - 1) * scale_factor) /
118 (outputHeight - 1);
119
120 u16 ix = fx / scale_factor; // Integer part of x
121 u16 iy = fy / scale_factor; // Integer part of y
122 u16 dx = fx % scale_factor; // Fractional part of x
123 u16 dy = fy % scale_factor; // Fractional part of y
124
125 u16 ix1 = (ix + 1 < inputWidth) ? ix + 1 : ix;
126 u16 iy1 = (iy + 1 < inputHeight) ? iy + 1 : iy;
127
128 u16 i00 = iy * inputWidth + ix;
129 u16 i10 = iy * inputWidth + ix1;
130 u16 i01 = iy1 * inputWidth + ix;
131 u16 i11 = iy1 * inputWidth + ix1;
132
133 CRGB c00 = input[i00];
134 CRGB c10 = input[i10];
135 CRGB c01 = input[i01];
136 CRGB c11 = input[i11];
137
138 CRGB result;
139 result.r = bilinearInterpolate(c00.r, c10.r, c01.r, c11.r, dx, dy);
140 result.g = bilinearInterpolate(c00.g, c10.g, c01.g, c11.g, dx, dy);
141 result.b = bilinearInterpolate(c00.b, c10.b, c01.b, c11.b, dx, dy);
142
143 u16 idx = xyMap.mapToIndex(x, y);
144 if (idx < n) {
145 output[idx] = result;
146 }
147 }
148 }
149}
u8 bilinearInterpolate(u8 v00, u8 v10, u8 v01, u8 v11, u16 dx, u16 dy)

References bilinearInterpolate(), x, xyMap, and y.

Referenced by fl::ScaleUp::expand(), and upscale().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ upscaleArbitraryFloat()

void fl::upscaleArbitraryFloat ( const CRGB * input,
CRGB * output,
u16 inputWidth,
u16 inputHeight,
const XYMap & xyMap )

Definition at line 266 of file upscale.cpp.hpp.

267 {
268 u16 n = xyMap.getTotal();
269 u16 outputWidth = xyMap.getWidth();
270 u16 outputHeight = xyMap.getHeight();
271
272 for (u16 y = 0; y < outputHeight; y++) {
273 for (u16 x = 0; x < outputWidth; x++) {
274 // Map output pixel to input grid position
275 float fx =
276 static_cast<float>(x) * (inputWidth - 1) / (outputWidth - 1);
277 float fy =
278 static_cast<float>(y) * (inputHeight - 1) / (outputHeight - 1);
279
280 u16 ix = static_cast<u16>(fx);
281 u16 iy = static_cast<u16>(fy);
282 float dx = fx - ix;
283 float dy = fy - iy;
284
285 u16 ix1 = (ix + 1 < inputWidth) ? ix + 1 : ix;
286 u16 iy1 = (iy + 1 < inputHeight) ? iy + 1 : iy;
287
288 u16 i00 = iy * inputWidth + ix;
289 u16 i10 = iy * inputWidth + ix1;
290 u16 i01 = iy1 * inputWidth + ix;
291 u16 i11 = iy1 * inputWidth + ix1;
292
293 CRGB c00 = input[i00];
294 CRGB c10 = input[i10];
295 CRGB c01 = input[i01];
296 CRGB c11 = input[i11];
297
298 CRGB result;
299 result.r =
300 upscaleFloat(c00.r, c10.r, c01.r, c11.r, dx, dy);
301 result.g =
302 upscaleFloat(c00.g, c10.g, c01.g, c11.g, dx, dy);
303 result.b =
304 upscaleFloat(c00.b, c10.b, c01.b, c11.b, dx, dy);
305
306 u16 idx = xyMap.mapToIndex(x, y);
307 if (idx < n) {
308 output[idx] = result;
309 }
310 }
311 }
312}
u8 upscaleFloat(u8 v00, u8 v10, u8 v01, u8 v11, float dx, float dy)

References upscaleFloat(), x, xyMap, and y.

+ Here is the call graph for this function:

◆ upscaleFloat() [1/2]

void fl::upscaleFloat ( const CRGB * input,
CRGB * output,
u8 inputWidth,
u8 inputHeight,
const XYMap & xyMap )

Definition at line 315 of file upscale.cpp.hpp.

316 {
317 u8 outputWidth = xyMap.getWidth();
318 u8 outputHeight = xyMap.getHeight();
319 if (outputWidth != xyMap.getWidth() || outputHeight != xyMap.getHeight()) {
320 // xyMap has width and height that do not fit in a u8.
321 return;
322 }
323 u16 n = xyMap.getTotal();
324
325 for (u8 y = 0; y < outputHeight; y++) {
326 for (u8 x = 0; x < outputWidth; x++) {
327 // Map output pixel to input grid position
328 float fx =
329 static_cast<float>(x) * (inputWidth - 1) / (outputWidth - 1);
330 float fy =
331 static_cast<float>(y) * (inputHeight - 1) / (outputHeight - 1);
332
333 u8 ix = static_cast<u8>(fx);
334 u8 iy = static_cast<u8>(fy);
335 float dx = fx - ix;
336 float dy = fy - iy;
337
338 u8 ix1 = (ix + 1 < inputWidth) ? ix + 1 : ix;
339 u8 iy1 = (iy + 1 < inputHeight) ? iy + 1 : iy;
340
341 u16 i00 = iy * inputWidth + ix;
342 u16 i10 = iy * inputWidth + ix1;
343 u16 i01 = iy1 * inputWidth + ix;
344 u16 i11 = iy1 * inputWidth + ix1;
345
346 CRGB c00 = input[i00];
347 CRGB c10 = input[i10];
348 CRGB c01 = input[i01];
349 CRGB c11 = input[i11];
350
351 CRGB result;
352 result.r =
353 upscaleFloat(c00.r, c10.r, c01.r, c11.r, dx, dy);
354 result.g =
355 upscaleFloat(c00.g, c10.g, c01.g, c11.g, dx, dy);
356 result.b =
357 upscaleFloat(c00.b, c10.b, c01.b, c11.b, dx, dy);
358
359 u16 idx = xyMap.mapToIndex(x, y);
360 if (idx < n) {
361 output[idx] = result;
362 }
363 }
364 }
365}

References upscaleFloat(), x, xyMap, and y.

+ Here is the call graph for this function:

◆ upscaleFloat() [2/2]

u8 fl::upscaleFloat ( u8 v00,
u8 v10,
u8 v01,
u8 v11,
float dx,
float dy )

Definition at line 245 of file upscale.cpp.hpp.

246 {
247 float dx_inv = 1.0f - dx;
248 float dy_inv = 1.0f - dy;
249
250 // Calculate the weights for each corner
251 float w00 = dx_inv * dy_inv;
252 float w10 = dx * dy_inv;
253 float w01 = dx_inv * dy;
254 float w11 = dx * dy;
255
256 // Compute the weighted sum
257 float sum = v00 * w00 + v10 * w10 + v01 * w01 + v11 * w11;
258
259 // Clamp the result to [0, 255] and round
260 u8 result = static_cast<u8>(sum + 0.5f);
261
262 return result;
263}

Referenced by fl::ScaleUp::expand(), upscaleArbitraryFloat(), and upscaleFloat().

+ Here is the caller graph for this function:

◆ UpscalePalette() [1/6]

void fl::UpscalePalette ( const class CHSVPalette16 & srcpal16,
class CHSVPalette256 & destpal256 )

Definition at line 1217 of file colorutils.cpp.hpp.

1218 {
1219 detail::UpscalePaletteInterpolated(srcpal16, destpal256);
1220}
void UpscalePaletteInterpolated(const TSrcPalette &srcpal, TDestPalette &destpal)

References fl::detail::UpscalePaletteInterpolated().

+ Here is the call graph for this function:

◆ UpscalePalette() [2/6]

void fl::UpscalePalette ( const class CHSVPalette16 & srcpal16,
class CHSVPalette32 & destpal32 )

Definition at line 1227 of file colorutils.cpp.hpp.

1228 {
1229 detail::UpscalePaletteRepeat(srcpal16, destpal32);
1230}
void UpscalePaletteRepeat(const TSrcPalette &srcpal, TDestPalette &destpal)

References fl::detail::UpscalePaletteRepeat().

+ Here is the call graph for this function:

◆ UpscalePalette() [3/6]

void fl::UpscalePalette ( const class CHSVPalette32 & srcpal32,
class CHSVPalette256 & destpal256 )

Definition at line 1237 of file colorutils.cpp.hpp.

1238 {
1239 detail::UpscalePaletteInterpolated(srcpal32, destpal256);
1240}

References fl::detail::UpscalePaletteInterpolated().

+ Here is the call graph for this function:

◆ UpscalePalette() [4/6]

void fl::UpscalePalette ( const class CRGBPalette16 & srcpal16,
class CRGBPalette256 & destpal256 )

Definition at line 1212 of file colorutils.cpp.hpp.

1213 {
1214 detail::UpscalePaletteInterpolated(srcpal16, destpal256);
1215}

References fl::detail::UpscalePaletteInterpolated().

Referenced by FL_DISABLE_WARNING().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ UpscalePalette() [5/6]

void fl::UpscalePalette ( const class CRGBPalette16 & srcpal16,
class CRGBPalette32 & destpal32 )

Definition at line 1222 of file colorutils.cpp.hpp.

1223 {
1224 detail::UpscalePaletteRepeat(srcpal16, destpal32);
1225}

References fl::detail::UpscalePaletteRepeat().

+ Here is the call graph for this function:

◆ UpscalePalette() [6/6]

void fl::UpscalePalette ( const class CRGBPalette32 & srcpal32,
class CRGBPalette256 & destpal256 )

Definition at line 1232 of file colorutils.cpp.hpp.

1233 {
1234 detail::UpscalePaletteInterpolated(srcpal32, destpal256);
1235}

References fl::detail::UpscalePaletteInterpolated().

+ Here is the call graph for this function:

◆ upscalePowerOf2()

void fl::upscalePowerOf2 ( const CRGB * input,
CRGB * output,
u8 inputWidth,
u8 inputHeight,
const fl::XYMap & xyMap )

Performs bilinear interpolation for upscaling an image.

Parameters
outputThe output grid to write into the interpolated values.
inputThe input grid to read from.
inputWidthThe width of the input grid.
inputHeightThe height of the input grid.
xyMapThe XYMap to use to determine where to write the pixel. If the pixel is mapped outside of the range then it is clipped.

Definition at line 169 of file upscale.cpp.hpp.

170 {
171 u8 width = xyMap.getWidth();
172 u8 height = xyMap.getHeight();
173 if (width != xyMap.getWidth() || height != xyMap.getHeight()) {
174 // xyMap has width and height that do not fit in an u16.
175 return;
176 }
177 u16 n = xyMap.getTotal();
178
179 for (u8 y = 0; y < height; y++) {
180 for (u8 x = 0; x < width; x++) {
181 // Use 8-bit fixed-point arithmetic with 8 fractional bits
182 // (scale factor of 256)
183 u16 fx = ((u16)x * (inputWidth - 1) * 256) / (width - 1);
184 u16 fy =
185 ((u16)y * (inputHeight - 1) * 256) / (height - 1);
186
187 u8 ix = fx >> 8; // Integer part
188 u8 iy = fy >> 8;
189 u8 dx = fx & 0xFF; // Fractional part
190 u8 dy = fy & 0xFF;
191
192 u8 ix1 = (ix + 1 < inputWidth) ? ix + 1 : ix;
193 u8 iy1 = (iy + 1 < inputHeight) ? iy + 1 : iy;
194
195 u16 i00 = iy * inputWidth + ix;
196 u16 i10 = iy * inputWidth + ix1;
197 u16 i01 = iy1 * inputWidth + ix;
198 u16 i11 = iy1 * inputWidth + ix1;
199
200 CRGB c00 = input[i00];
201 CRGB c10 = input[i10];
202 CRGB c01 = input[i01];
203 CRGB c11 = input[i11];
204
205 CRGB result;
206 result.r =
207 bilinearInterpolatePowerOf2(c00.r, c10.r, c01.r, c11.r, dx, dy);
208 result.g =
209 bilinearInterpolatePowerOf2(c00.g, c10.g, c01.g, c11.g, dx, dy);
210 result.b =
211 bilinearInterpolatePowerOf2(c00.b, c10.b, c01.b, c11.b, dx, dy);
212
213 u16 idx = xyMap.mapToIndex(x, y);
214 if (idx < n) {
215 output[idx] = result;
216 }
217 }
218 }
219}
u8 bilinearInterpolatePowerOf2(u8 v00, u8 v10, u8 v01, u8 v11, u8 dx, u8 dy)

References bilinearInterpolatePowerOf2(), height, width, x, xyMap, and y.

Referenced by fl::ScaleUp::expand(), and upscale().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ upscaleRectangular()

void fl::upscaleRectangular ( const CRGB * input,
CRGB * output,
u16 inputWidth,
u16 inputHeight,
u16 outputWidth,
u16 outputHeight )

Optimized upscale for rectangular/line-by-line XY maps.

Parameters
inputThe input grid to read from.
outputThe output grid to write into the interpolated values.
inputWidthThe width of the input grid.
inputHeightThe height of the input grid.
outputWidthThe width of the output grid.
outputHeightThe height of the output grid. This version bypasses XY mapping overhead for rectangular layouts.

Definition at line 19 of file upscale.cpp.hpp.

20 {
21 const u16 scale_factor = 256; // Using 8 bits for the fractional part
22
23 for (u16 y = 0; y < outputHeight; y++) {
24 for (u16 x = 0; x < outputWidth; x++) {
25 // Calculate the corresponding position in the input grid
26 u32 fx = ((u32)x * (inputWidth - 1) * scale_factor) /
27 (outputWidth - 1);
28 u32 fy = ((u32)y * (inputHeight - 1) * scale_factor) /
29 (outputHeight - 1);
30
31 u16 ix = fx / scale_factor; // Integer part of x
32 u16 iy = fy / scale_factor; // Integer part of y
33 u16 dx = fx % scale_factor; // Fractional part of x
34 u16 dy = fy % scale_factor; // Fractional part of y
35
36 u16 ix1 = (ix + 1 < inputWidth) ? ix + 1 : ix;
37 u16 iy1 = (iy + 1 < inputHeight) ? iy + 1 : iy;
38
39 // Direct array access - no XY mapping overhead
40 u16 i00 = iy * inputWidth + ix;
41 u16 i10 = iy * inputWidth + ix1;
42 u16 i01 = iy1 * inputWidth + ix;
43 u16 i11 = iy1 * inputWidth + ix1;
44
45 CRGB c00 = input[i00];
46 CRGB c10 = input[i10];
47 CRGB c01 = input[i01];
48 CRGB c11 = input[i11];
49
51 result.r = bilinearInterpolate(c00.r, c10.r, c01.r, c11.r, dx, dy);
52 result.g = bilinearInterpolate(c00.g, c10.g, c01.g, c11.g, dx, dy);
53 result.b = bilinearInterpolate(c00.b, c10.b, c01.b, c11.b, dx, dy);
54
55 // Direct array access - no XY mapping overhead
56 u16 idx = y * outputWidth + x;
57 output[idx] = result;
58 }
59 }
60}

References bilinearInterpolate(), x, and y.

Referenced by upscale().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ upscaleRectangularPowerOf2()

void fl::upscaleRectangularPowerOf2 ( const CRGB * input,
CRGB * output,
u8 inputWidth,
u8 inputHeight,
u8 outputWidth,
u8 outputHeight )

Optimized upscale for rectangular/line-by-line XY maps (power-of-2 version).

Parameters
inputThe input grid to read from.
outputThe output grid to write into the interpolated values.
inputWidthThe width of the input grid (must be power of 2).
inputHeightThe height of the input grid (must be power of 2).
outputWidthThe width of the output grid (must be power of 2).
outputHeightThe height of the output grid (must be power of 2). This version bypasses XY mapping overhead for rectangular layouts.

Definition at line 62 of file upscale.cpp.hpp.

63 {
64 for (u8 y = 0; y < outputHeight; y++) {
65 for (u8 x = 0; x < outputWidth; x++) {
66 // Use 8-bit fixed-point arithmetic with 8 fractional bits
67 // (scale factor of 256)
68 u16 fx = ((u16)x * (inputWidth - 1) * 256) / (outputWidth - 1);
69 u16 fy = ((u16)y * (inputHeight - 1) * 256) / (outputHeight - 1);
70
71 u8 ix = fx >> 8; // Integer part
72 u8 iy = fy >> 8;
73 u8 dx = fx & 0xFF; // Fractional part
74 u8 dy = fy & 0xFF;
75
76 u8 ix1 = (ix + 1 < inputWidth) ? ix + 1 : ix;
77 u8 iy1 = (iy + 1 < inputHeight) ? iy + 1 : iy;
78
79 // Direct array access - no XY mapping overhead
80 u16 i00 = iy * inputWidth + ix;
81 u16 i10 = iy * inputWidth + ix1;
82 u16 i01 = iy1 * inputWidth + ix;
83 u16 i11 = iy1 * inputWidth + ix1;
84
85 CRGB c00 = input[i00];
86 CRGB c10 = input[i10];
87 CRGB c01 = input[i01];
88 CRGB c11 = input[i11];
89
91 result.r =
92 bilinearInterpolatePowerOf2(c00.r, c10.r, c01.r, c11.r, dx, dy);
93 result.g =
94 bilinearInterpolatePowerOf2(c00.g, c10.g, c01.g, c11.g, dx, dy);
95 result.b =
96 bilinearInterpolatePowerOf2(c00.b, c10.b, c01.b, c11.b, dx, dy);
97
98 // Direct array access - no XY mapping overhead
99 u16 idx = y * outputWidth + x;
100 output[idx] = result;
101 }
102 }
103}

References bilinearInterpolatePowerOf2(), x, and y.

Referenced by upscale().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ utoa32()

int fl::utoa32 ( u32 value,
char * buffer,
int radix )

Convert unsigned 32-bit integer to string buffer in given radix.

Parameters
valueThe unsigned integer value to convert
bufferOutput buffer (must be at least 33 bytes for base 2, 11 for base 10, 9 for base 16)
radixNumber base (2-36, typically 10 for decimal, 16 for hex, 8 for octal)
Returns
Number of characters written (excluding null terminator)

Definition at line 138 of file charconv.cpp.hpp.

138 {
139 char tmp[16]; // be careful with the length of the buffer
140 char *tp = tmp;
141 int i;
142 u32 v = value;
143
144 while (v || tp == tmp) {
145 i = v % radix;
146 v = radix ? v / radix : 0;
147 if (i < 10)
148 *tp++ = i + '0';
149 else
150 *tp++ = i + 'a' - 10;
151 }
152
153 int len = tp - tmp;
154
155 while (tp > tmp)
156 *sp++ = *--tp;
157
158 *sp = '\0'; // Null-terminate the string
159 return len;
160}

References type_rank< T >::value.

Referenced by fl::sstream::appendFormatted(), fl::basic_string::appendHex(), fl::basic_string::appendOct(), fl::ostream::operator<<(), fl::ostream::operator<<(), fl::basic_string::write(), fl::basic_string::write(), and fl::basic_string::write().

+ Here is the caller graph for this function:

◆ utoa64()

int fl::utoa64 ( u64 value,
char * buffer,
int radix )

Convert unsigned 64-bit integer to string buffer in given radix.

Parameters
valueThe unsigned 64-bit integer value to convert
bufferOutput buffer (must be at least 65 bytes for base 2, 21 for base 10, 17 for base 16)
radixNumber base (2-36, typically 10 for decimal, 16 for hex, 8 for octal)
Returns
Number of characters written (excluding null terminator)

Definition at line 162 of file charconv.cpp.hpp.

162 {
163 char tmp[32]; // larger buffer for 64-bit values
164 char *tp = tmp;
165 int i;
166 u64 v = value;
167
168 while (v || tp == tmp) {
169 i = v % radix;
170 v = radix ? v / radix : 0;
171 if (i < 10)
172 *tp++ = i + '0';
173 else
174 *tp++ = i + 'a' - 10;
175 }
176
177 int len = tp - tmp;
178
179 while (tp > tmp)
180 *sp++ = *--tp;
181
182 *sp = '\0'; // Null-terminate the string
183 return len;
184}

References type_rank< T >::value.

Referenced by append_u64_decimal(), fl::sstream::appendFormatted(), fl::sstream::appendFormatted(), fl::basic_string::appendHex(), fl::basic_string::appendOct(), ieee754_format_decimal(), fl::SerialPort::print(), and fl::SerialPort::println().

+ Here is the caller graph for this function:

◆ vector_element_ops_for()

template<typename T>
const vector_element_ops * fl::vector_element_ops_for ( )

Generate a static ops table for type T.

Returns nullptr for trivially copyable types (fast path).

Definition at line 312 of file basic_vector.h.

312 {
313 // Trivially copyable types use the fast path (mOps == nullptr)
315 return nullptr;
316 }
317
318 static const vector_element_ops ops = {
319 detail::get_copy_construct_fn<T>(), // copy_construct
320 detail::get_move_construct_fn<T>(), // move_construct
321 [](void* ptr) { static_cast<T*>(ptr)->~T(); }, // destroy
322 detail::get_default_construct_fn<T>(), // default_construct
323 detail::get_swap_fn<T>(), // swap_elements
324 detail::get_uninitialized_move_n_fn<T>(), // uninitialized_move_n
325 // destroy_n
326 [](void* first, fl::size count) FL_NOEXCEPT {
327 T* p = static_cast<T*>(first);
328 for (fl::size i = 0; i < count; ++i) {
329 p[i].~T();
330 }
331 }
332 };
333 return &ops;
334}
fl::enable_if< is_swappable< T >::value, void(*)(void *, void *) FL_NOEXCEPT >::type get_swap_fn() FL_NOEXCEPT
fl::enable_if< has_move_ctor< T >::value, void(*)(void *, void *) FL_NOEXCEPT >::type get_move_construct_fn() FL_NOEXCEPT
fl::enable_if< has_copy_ctor< T >::value, void(*)(void *, constvoid *) FL_NOEXCEPT >::type get_copy_construct_fn() FL_NOEXCEPT
fl::enable_if< has_default_ctor< T >::value, void(*)(void *) FL_NOEXCEPT >::type get_default_construct_fn() FL_NOEXCEPT
fl::enable_if< has_move_ctor< T >::value, void(*)(void *, void *, fl::size) FL_NOEXCEPT >::type get_uninitialized_move_n_fn() FL_NOEXCEPT

References FL_NOEXCEPT, fl::detail::get_copy_construct_fn(), fl::detail::get_default_construct_fn(), fl::detail::get_move_construct_fn(), fl::detail::get_swap_fn(), fl::detail::get_uninitialized_move_n_fn(), and fl::fl::is_trivially_copyable< T >::value.

Referenced by fl::vector< fl::i16 >::vector(), fl::vector< fl::i16 >::vector(), fl::vector< fl::i16 >::vector(), fl::vector< fl::i16 >::vector(), fl::vector< fl::i16 >::vector(), fl::vector< fl::i16 >::vector(), fl::vector< fl::i16 >::vector(), fl::vector< fl::i16 >::vector(), fl::vector< fl::i16 >::vector(), fl::vector< fl::i16 >::vector(), fl::vector< fl::i16 >::vector(), and fl::vector< fl::i16 >::vector().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ wave3()

void fl::wave3 ( u8 lane,
const Wave3BitExpansionLut & lut,
u8(&) output[sizeof(Wave3Byte)] )

Convert byte to 3 wave3 bytes using nibble LUT.

Note
Inline implementation for ISR performance

Definition at line 190 of file wave3.hpp.

192 {
193 Wave3Byte wave3_output;
194 detail::wave3_convert_byte_to_wave3byte(lane, lut, &wave3_output);
195 output[0] = wave3_output.data[0];
196 output[1] = wave3_output.data[1];
197 output[2] = wave3_output.data[2];
198}
FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void wave3_convert_byte_to_wave3byte(u8 byte_value, const Wave3BitExpansionLut &lut, Wave3Byte *output)
Helper: Convert byte to Wave3Byte using nibble LUT (internal use only)
Definition wave3.hpp:27
u8 data[3]
Definition wave3.h:21
Type-safe container for 3-byte wave pulse pattern (wave3 encoding)
Definition wave3.h:20

References fl::Wave3Byte::data, FL_RESTRICT_PARAM, and fl::detail::wave3_convert_byte_to_wave3byte().

+ Here is the call graph for this function:

◆ wave3ClockFrequencyHz()

FL_OPTIMIZE_FUNCTION u32 fl::wave3ClockFrequencyHz ( const ChipsetTiming & timing)

Calculate the clock frequency for wave3 encoding.

Clock = 3,000,000,000 / total_period_ns, so that 3 ticks = 1 bit period.

Parameters
timingChipsetTiming struct with T1, T2, T3 in nanoseconds
Returns
Clock frequency in Hz (e.g., 2400000 for WS2812)

Definition at line 54 of file wave3.cpp.hpp.

54 {
55 const u32 period = timing.T1 + timing.T2 + timing.T3;
56 if (period == 0) {
57 return 0;
58 }
59 // clock_hz = 3,000,000,000 / total_period_ns
60 // Use u64 to avoid overflow
61 return static_cast<u32>(3000000000ULL / period);
62}

References fl::ChipsetTiming::T1, fl::ChipsetTiming::T2, and fl::ChipsetTiming::T3.

◆ wave3Transpose_16()

void fl::wave3Transpose_16 ( const u8(&) lanes[16],
const Wave3BitExpansionLut & lut,
u8(&) output[16 *sizeof(Wave3Byte)] )

Definition at line 152 of file wave3.cpp.hpp.

154 {
155 Wave3Byte laneWaveforms[16];
156 for (int lane = 0; lane < 16; lane++) {
157 detail::wave3_convert_byte_to_wave3byte(lanes[lane], lut, &laneWaveforms[lane]);
158 }
159 detail::wave3_transpose_16(laneWaveforms, output);
160}
FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void wave3_transpose_16(const Wave3Byte lane_waves[16], u8 output[16 *sizeof(Wave3Byte)])
Transpose 16 lanes of Wave3Byte data into interleaved format.
Definition wave3.hpp:170

References FL_RESTRICT_PARAM, fl::detail::wave3_convert_byte_to_wave3byte(), and fl::detail::wave3_transpose_16().

+ Here is the call graph for this function:

◆ wave3Transpose_2()

void fl::wave3Transpose_2 ( const u8(&) lanes[2],
const Wave3BitExpansionLut & lut,
u8(&) output[2 *sizeof(Wave3Byte)] )

Definition at line 120 of file wave3.cpp.hpp.

122 {
123 Wave3Byte laneWaveforms[2];
124 detail::wave3_convert_byte_to_wave3byte(lanes[0], lut, &laneWaveforms[0]);
125 detail::wave3_convert_byte_to_wave3byte(lanes[1], lut, &laneWaveforms[1]);
126 detail::wave3_transpose_2(laneWaveforms, output);
127}
FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void wave3_transpose_2(const Wave3Byte lane_waves[2], u8 output[2 *sizeof(Wave3Byte)])
Transpose 2 lanes of Wave3Byte data into interleaved format.
Definition wave3.hpp:51

References FL_RESTRICT_PARAM, fl::detail::wave3_convert_byte_to_wave3byte(), and fl::detail::wave3_transpose_2().

+ Here is the call graph for this function:

◆ wave3Transpose_4()

void fl::wave3Transpose_4 ( const u8(&) lanes[4],
const Wave3BitExpansionLut & lut,
u8(&) output[4 *sizeof(Wave3Byte)] )

Definition at line 130 of file wave3.cpp.hpp.

132 {
133 Wave3Byte laneWaveforms[4];
134 for (int lane = 0; lane < 4; lane++) {
135 detail::wave3_convert_byte_to_wave3byte(lanes[lane], lut, &laneWaveforms[lane]);
136 }
137 detail::wave3_transpose_4(laneWaveforms, output);
138}
FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void wave3_transpose_4(const Wave3Byte lane_waves[4], u8 output[4 *sizeof(Wave3Byte)])
Transpose 4 lanes of Wave3Byte data into interleaved format.
Definition wave3.hpp:84

References FL_RESTRICT_PARAM, fl::detail::wave3_convert_byte_to_wave3byte(), and fl::detail::wave3_transpose_4().

+ Here is the call graph for this function:

◆ wave3Transpose_8()

void fl::wave3Transpose_8 ( const u8(&) lanes[8],
const Wave3BitExpansionLut & lut,
u8(&) output[8 *sizeof(Wave3Byte)] )

Definition at line 141 of file wave3.cpp.hpp.

143 {
144 Wave3Byte laneWaveforms[8];
145 for (int lane = 0; lane < 8; lane++) {
146 detail::wave3_convert_byte_to_wave3byte(lanes[lane], lut, &laneWaveforms[lane]);
147 }
148 detail::wave3_transpose_8(laneWaveforms, output);
149}
FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void wave3_transpose_8(const Wave3Byte lane_waves[8], u8 output[8 *sizeof(Wave3Byte)])
Transpose 8 lanes of Wave3Byte data into interleaved format.
Definition wave3.hpp:147

References FL_RESTRICT_PARAM, fl::detail::wave3_convert_byte_to_wave3byte(), and fl::detail::wave3_transpose_8().

+ Here is the call graph for this function:

◆ wave3Untranspose_16()

void fl::wave3Untranspose_16 ( const u8(&) transposed[16 *sizeof(Wave3Byte)],
u8(&) output[16 *sizeof(Wave3Byte)] )

Definition at line 259 of file wave3.cpp.hpp.

260 {
261 Wave3Byte lane_waves[16];
262
263 for (int symbol_idx = 0; symbol_idx < 3; symbol_idx++) {
264 u8 lane_bytes[16] = {0};
265
266 for (int pulse_idx = 0; pulse_idx < 8; pulse_idx++) {
267 int pulse_bit = 7 - pulse_idx;
268 int input_offset = symbol_idx * 16 + pulse_idx * 2;
269 u16 input_word = (u16)transposed[input_offset] |
270 ((u16)transposed[input_offset + 1] << 8);
271
272 for (int lane = 0; lane < 16; lane++) {
273 u8 pulse = (input_word >> lane) & 1;
274 lane_bytes[lane] |= (pulse << pulse_bit);
275 }
276 }
277
278 for (int lane = 0; lane < 16; lane++) {
279 lane_waves[lane].data[symbol_idx] = lane_bytes[lane];
280 }
281 }
282
283 for (int lane = 0; lane < 16; lane++) {
284 fl::isr::memcpy(output + lane * sizeof(Wave3Byte), &lane_waves[lane], sizeof(Wave3Byte));
285 }
286}
FL_OPTIMIZE_FUNCTION FL_IRAM FASTLED_FORCE_INLINE void memcpy(void *FL_RESTRICT_PARAM dst, const void *FL_RESTRICT_PARAM src, size_t num_bytes)
ISR-optimized memcpy with alignment detection and switch dispatch.
Definition memcpy.h:75

References fl::Wave3Byte::data, FL_RESTRICT_PARAM, and fl::isr::memcpy().

+ Here is the call graph for this function:

◆ wave3Untranspose_2()

void fl::wave3Untranspose_2 ( const u8(&) transposed[2 *sizeof(Wave3Byte)],
u8(&) output[2 *sizeof(Wave3Byte)] )

Definition at line 167 of file wave3.cpp.hpp.

168 {
169 Wave3Byte lane_waves[2];
170
171 for (int symbol_idx = 0; symbol_idx < 3; symbol_idx++) {
172 u16 interleaved = ((u16)transposed[symbol_idx * 2] << 8) |
173 transposed[symbol_idx * 2 + 1];
174
175 u8 lane0_bits = 0;
176 u8 lane1_bits = 0;
177
178 for (int bit = 0; bit < 8; bit++) {
179 if (interleaved & (1 << (bit * 2 + 1))) {
180 lane0_bits |= (1 << bit);
181 }
182 if (interleaved & (1 << (bit * 2))) {
183 lane1_bits |= (1 << bit);
184 }
185 }
186
187 lane_waves[0].data[symbol_idx] = lane0_bits;
188 lane_waves[1].data[symbol_idx] = lane1_bits;
189 }
190
191 fl::isr::memcpy(output, &lane_waves[0], sizeof(Wave3Byte));
192 fl::isr::memcpy(output + sizeof(Wave3Byte), &lane_waves[1], sizeof(Wave3Byte));
193}

References fl::Wave3Byte::data, FL_RESTRICT_PARAM, and fl::isr::memcpy().

+ Here is the call graph for this function:

◆ wave3Untranspose_4()

void fl::wave3Untranspose_4 ( const u8(&) transposed[4 *sizeof(Wave3Byte)],
u8(&) output[4 *sizeof(Wave3Byte)] )

Definition at line 196 of file wave3.cpp.hpp.

197 {
198 Wave3Byte lane_waves[4];
199
200 for (int symbol_idx = 0; symbol_idx < 3; symbol_idx++) {
201 u8 lane_bytes[4] = {0, 0, 0, 0};
202
203 for (int byte_idx = 0; byte_idx < 4; byte_idx++) {
204 u8 input_byte = transposed[symbol_idx * 4 + byte_idx];
205
206 int pulse_bit_hi = 7 - (byte_idx * 2);
207 int pulse_bit_lo = pulse_bit_hi - 1;
208
209 for (int lane = 0; lane < 4; lane++) {
210 u8 pulse_hi = (input_byte >> (4 + lane)) & 1;
211 u8 pulse_lo = (input_byte >> lane) & 1;
212 lane_bytes[lane] |= (pulse_hi << pulse_bit_hi);
213 lane_bytes[lane] |= (pulse_lo << pulse_bit_lo);
214 }
215 }
216
217 for (int lane = 0; lane < 4; lane++) {
218 lane_waves[lane].data[symbol_idx] = lane_bytes[lane];
219 }
220 }
221
222 for (int lane = 0; lane < 4; lane++) {
223 fl::isr::memcpy(output + lane * sizeof(Wave3Byte), &lane_waves[lane], sizeof(Wave3Byte));
224 }
225}

References fl::Wave3Byte::data, FL_RESTRICT_PARAM, and fl::isr::memcpy().

+ Here is the call graph for this function:

◆ wave3Untranspose_8()

void fl::wave3Untranspose_8 ( const u8(&) transposed[8 *sizeof(Wave3Byte)],
u8(&) output[8 *sizeof(Wave3Byte)] )

Definition at line 228 of file wave3.cpp.hpp.

229 {
230 Wave3Byte lane_waves[8];
231
232 for (int symbol_idx = 0; symbol_idx < 3; symbol_idx++) {
233 u8 lane_bytes[8] = {0, 0, 0, 0, 0, 0, 0, 0};
234
235 // After transpose+reversal: byte 0 = bit 7 (first pulse, MSB),
236 // byte 7 = bit 0 (last pulse, LSB)
237 for (int byte_idx = 0; byte_idx < 8; byte_idx++) {
238 u8 input_byte = transposed[symbol_idx * 8 + byte_idx];
239 // byte 0 = bit 7, byte 7 = bit 0 (reversed order)
240 int pulse_bit = 7 - byte_idx;
241
242 for (int lane = 0; lane < 8; lane++) {
243 u8 pulse = (input_byte >> lane) & 1;
244 lane_bytes[lane] |= (pulse << pulse_bit);
245 }
246 }
247
248 for (int lane = 0; lane < 8; lane++) {
249 lane_waves[lane].data[symbol_idx] = lane_bytes[lane];
250 }
251 }
252
253 for (int lane = 0; lane < 8; lane++) {
254 fl::isr::memcpy(output + lane * sizeof(Wave3Byte), &lane_waves[lane], sizeof(Wave3Byte));
255 }
256}

References fl::Wave3Byte::data, FL_RESTRICT_PARAM, and fl::isr::memcpy().

+ Here is the call graph for this function:

◆ wave8()

void fl::wave8 ( u8 lane,
const Wave8BitExpansionLut & lut,
u8(&) output[sizeof(Wave8Byte)] )

Convert byte to 8 Wave8Bit structures using nibble LUT.

Note
Inline implementation for ISR performance (always_inline requires visible body)

Definition at line 514 of file wave8.hpp.

516 {
517 // Convert single lane byte to wave pulse symbols (8 bytes packed)
518 // Use properly aligned local variable to avoid alignment issues
519 Wave8Byte waveformSymbol;
520 detail::wave8_convert_byte_to_wave8byte(lane, lut, &waveformSymbol);
521
522 // ISR-optimized 32-bit copy: Copy 8 bytes as 2 x uint32_t words
523 // Wave8Byte is 8-byte aligned (FL_ALIGNAS(8)), guaranteeing 4-byte alignment
525 fl::bit_cast_ptr<const u32>(&waveformSymbol.symbols[0].data),
526 2); // 8 bytes = 2 x uint32_t
527}
FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void wave8_convert_byte_to_wave8byte(u8 byte_value, const Wave8BitExpansionLut &lut, Wave8Byte *output)
Helper: Convert byte to Wave8Byte using nibble LUT (internal use only)
Definition wave8.hpp:47
FL_OPTIMIZE_FUNCTION FL_IRAM FASTLED_FORCE_INLINE void memcpy_32(u32 *FL_RESTRICT_PARAM dst, const u32 *FL_RESTRICT_PARAM src, size_t count)
ISR-optimized 32-bit block copy for 4-byte aligned memory.
Definition memcpy.h:32

References bit_cast_ptr(), FL_RESTRICT_PARAM, fl::isr::memcpy_32(), and fl::detail::wave8_convert_byte_to_wave8byte().

+ Here is the call graph for this function:

◆ wave8Transpose_16() [1/2]

void fl::wave8Transpose_16 ( const u8(&) lanes[16],
const Wave8BitExpansionLut & lut,
u8(&) output[16 *sizeof(Wave8Byte)] )

Definition at line 73 of file wave8.cpp.hpp.

75 {
76 // Allocate waveform buffers on stack (128 Wave8Bit total: 8 packed bytes per lane × 16 lanes)
77 Wave8Byte laneWaveformSymbols[16];
78
79 // Convert each lane byte to wave pulse symbols (8 packed bytes each)
80 for (int lane = 0; lane < 16; lane++) {
81 detail::wave8_convert_byte_to_wave8byte(lanes[lane], lut, &laneWaveformSymbols[lane]);
82 }
83
84 // Transpose waveforms to DMA format (interleave 128 packed bytes to 128 bytes)
85 detail::wave8_transpose_16(laneWaveformSymbols, output);
86}
FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void wave8_transpose_16(const Wave8Byte lane_waves[16], u8 output[16 *sizeof(Wave8Byte)])
Transpose 16 lanes of Wave8Byte data into interleaved format.
Definition wave8.hpp:231

References FL_RESTRICT_PARAM, fl::detail::wave8_convert_byte_to_wave8byte(), and fl::detail::wave8_transpose_16().

+ Here is the call graph for this function:

◆ wave8Transpose_16() [2/2]

void fl::wave8Transpose_16 ( const u8(&) lanes[16],
const Wave8ByteExpansionLut & lut,
u8(&) output[16 *sizeof(Wave8Byte)] )

Definition at line 125 of file wave8.cpp.hpp.

127 {
128 Wave8Byte laneWaveformSymbols[16];
129 for (int lane = 0; lane < 16; lane++) {
130 detail::wave8_expand_byte(lanes[lane], lut, &laneWaveformSymbols[lane]);
131 }
132 detail::wave8_transpose_16(laneWaveformSymbols, output);
133}
FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void wave8_expand_byte(u8 byte_value, const Wave8ByteExpansionLut &lut, Wave8Byte *output)
Byte-indexed expansion (#2526): one indexed 8-byte copy.
Definition wave8.hpp:69

References FL_RESTRICT_PARAM, fl::detail::wave8_expand_byte(), and fl::detail::wave8_transpose_16().

+ Here is the call graph for this function:

◆ wave8Transpose_16_bf1()

FL_OPTIMIZE_FUNCTION FL_IRAM void fl::wave8Transpose_16_bf1 ( const u8(&) lanes[16],
const Wave8ByteExpansionLut & lut,
u8(&) output[16 *sizeof(Wave8Byte)] )

BF1: chipset-aware direct encode for 16-lane Wave8 (#2548 deep-dive).

Bypasses the byte_lut. Uses the algebraic identity output_bit(s, p, lane) = M0_p XOR (input_bit_(7-s) AND D_p) where W0/W1 are the bit-0/bit-1 waveform patterns extracted from the lut. Bit-identical to wave8Transpose_16 for ANY Wave8 chipset. The bit-transpose of input bytes is computed ONCE (not 8× per symbol). Measured 9 651 → 4 465 µs/frame (2.16×) vs baseline on P4 v1.3.

Definition at line 159 of file wave8.cpp.hpp.

161 {
162 // Extract W0/W1 chipset constants from the lut.
163 // byte_lut[0x00].symbols[0] = waveform for input bit 7 == 0 = W0
164 // byte_lut[0xFF].symbols[0] = waveform for input bit 7 == 1 = W1
165 const u8 W0 = lut.lut[0x00].symbols[0].data;
166 const u8 W1 = lut.lut[0xFF].symbols[0].data;
167 detail::wave8_transpose_16_bf1(lanes, W0, W1, output);
168}
FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void wave8_transpose_16_bf1(const u8 lanes[16], u8 W0, u8 W1, u8 output[16 *sizeof(Wave8Byte)])
BF1: chipset-aware direct encode for Wave8 16-lane (#2548 deep-dive).
Definition wave8.hpp:315
@ W1
White is second.
Definition eorder.h:26
@ W0
White is first.
Definition eorder.h:27

References FL_RESTRICT_PARAM, W0, W1, and fl::detail::wave8_transpose_16_bf1().

+ Here is the call graph for this function:

◆ wave8Transpose_16x2_pipe2()

FL_OPTIMIZE_FUNCTION FL_IRAM void fl::wave8Transpose_16x2_pipe2 ( const u8(&) lanes_a[16],
const u8(&) lanes_b[16],
const Wave8ByteExpansionLut & lut,
u8(&) output_a[16 *sizeof(Wave8Byte)],
u8(&) output_b[16 *sizeof(Wave8Byte)] )

Pipe2: transpose 16-lane × 2-byte-positions (#2548).

Bit-identical to two sequential wave8Transpose_16 calls. Internally interleaves the two independent OR-trees inside the symbol loop so the in-order RV32 P4 can fill load-use stalls from position A with ALU ops from position B. Measured 9655 → 7625 µs/frame (+26%) on P4 v1.3 (16-lane × 256-LED, byte-LUT path) — first variant to beat the 7680 µs WS2812B 16-lane TX target.

Definition at line 136 of file wave8.cpp.hpp.

140 {
141 // Expand both positions independently — compiler can interleave the two
142 // loops freely because they share no data.
143 Wave8Byte laneWaveformsA[16];
144 Wave8Byte laneWaveformsB[16];
145 for (int lane = 0; lane < 16; lane++) {
146 detail::wave8_expand_byte(lanes_a[lane], lut, &laneWaveformsA[lane]);
147 }
148 for (int lane = 0; lane < 16; lane++) {
149 detail::wave8_expand_byte(lanes_b[lane], lut, &laneWaveformsB[lane]);
150 }
151 // Symbol-major loop with both transposes inlined back-to-back: the two
152 // OR-trees share no dependencies, so the compiler can interleave them and
153 // fill the in-order pipeline bubbles. See #2548.
154 detail::wave8_transpose_16x2_pipe2(laneWaveformsA, laneWaveformsB,
155 output_a, output_b);
156}
FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void wave8_transpose_16x2_pipe2(const Wave8Byte lane_waves_a[16], const Wave8Byte lane_waves_b[16], u8 output_a[16 *sizeof(Wave8Byte)], u8 output_b[16 *sizeof(Wave8Byte)])
Pipe2: transpose 16-lane × 2-byte-positions in one fused call.
Definition wave8.hpp:249

References FL_RESTRICT_PARAM, fl::detail::wave8_expand_byte(), and fl::detail::wave8_transpose_16x2_pipe2().

+ Here is the call graph for this function:

◆ wave8Transpose_16x4_bf1_pipe4()

FL_OPTIMIZE_FUNCTION FL_IRAM void fl::wave8Transpose_16x4_bf1_pipe4 ( const u8(&) lanes_a[16],
const u8(&) lanes_b[16],
const u8(&) lanes_c[16],
const u8(&) lanes_d[16],
const Wave8ByteExpansionLut & lut,
u8(&) output_a[16 *sizeof(Wave8Byte)],
u8(&) output_b[16 *sizeof(Wave8Byte)],
u8(&) output_c[16 *sizeof(Wave8Byte)],
u8(&) output_d[16 *sizeof(Wave8Byte)] )

BF1 + pipe4: 4-position-pipelined direct encode (#2548 deep-dive).

Combines BF1's algorithmic reduction with pipe4 cross-position ILP. Empirical peak of all prototypes: 9 651 → 1 757 µs/frame = 5.49× speedup on P4 v1.3 16-lane × 256 LEDs. 4.4× faster than the 7 680 µs WS2812B 16-lane TX target — encode now has massive headroom for ISR-driven chunked streaming.

Definition at line 198 of file wave8.cpp.hpp.

206 {
207 const u8 W0 = lut.lut[0x00].symbols[0].data;
208 const u8 W1 = lut.lut[0xFF].symbols[0].data;
209 detail::wave8_transpose_16x4_bf1_pipe4(lanes_a, lanes_b, lanes_c, lanes_d,
210 W0, W1,
211 output_a, output_b, output_c, output_d);
212}
FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void wave8_transpose_16x4_bf1_pipe4(const u8 lanes_a[16], const u8 lanes_b[16], const u8 lanes_c[16], const u8 lanes_d[16], u8 W0, u8 W1, u8 output_a[16 *sizeof(Wave8Byte)], u8 output_b[16 *sizeof(Wave8Byte)], u8 output_c[16 *sizeof(Wave8Byte)], u8 output_d[16 *sizeof(Wave8Byte)])
BF1 + pipe4: 4-position software-pipelined BF1 (#2548 deep-dive).
Definition wave8.hpp:464

References FL_RESTRICT_PARAM, W0, W1, and fl::detail::wave8_transpose_16x4_bf1_pipe4().

+ Here is the call graph for this function:

◆ wave8Transpose_16x4_pipe4()

FL_OPTIMIZE_FUNCTION FL_IRAM void fl::wave8Transpose_16x4_pipe4 ( const u8(&) lanes_a[16],
const u8(&) lanes_b[16],
const u8(&) lanes_c[16],
const u8(&) lanes_d[16],
const Wave8ByteExpansionLut & lut,
u8(&) output_a[16 *sizeof(Wave8Byte)],
u8(&) output_b[16 *sizeof(Wave8Byte)],
u8(&) output_c[16 *sizeof(Wave8Byte)],
u8(&) output_d[16 *sizeof(Wave8Byte)] )

Pipe4: transpose 16-lane × 4-byte-positions (#2548).

Bit-identical to four sequential wave8Transpose_16 calls. Peak of the cross-position ILP curve on RV32 P4 — pipe2 = +26%, pipe3 = +36%, pipe4 = +41% vs baseline (9 651 → 6 822 µs/frame). pipe6 / pipe8 regress to 94% (32-GPR budget exceeded → compiler spills). Measured 11% UNDER the 7 680 µs WS2812B TX target — comfortable margin for ISR-chunked streaming.

Definition at line 215 of file wave8.cpp.hpp.

223 {
224 Wave8Byte laneWaveformsA[16];
225 Wave8Byte laneWaveformsB[16];
226 Wave8Byte laneWaveformsC[16];
227 Wave8Byte laneWaveformsD[16];
228 for (int lane = 0; lane < 16; lane++) {
229 detail::wave8_expand_byte(lanes_a[lane], lut, &laneWaveformsA[lane]);
230 }
231 for (int lane = 0; lane < 16; lane++) {
232 detail::wave8_expand_byte(lanes_b[lane], lut, &laneWaveformsB[lane]);
233 }
234 for (int lane = 0; lane < 16; lane++) {
235 detail::wave8_expand_byte(lanes_c[lane], lut, &laneWaveformsC[lane]);
236 }
237 for (int lane = 0; lane < 16; lane++) {
238 detail::wave8_expand_byte(lanes_d[lane], lut, &laneWaveformsD[lane]);
239 }
240 detail::wave8_transpose_16x4_pipe4(laneWaveformsA, laneWaveformsB,
241 laneWaveformsC, laneWaveformsD,
242 output_a, output_b, output_c, output_d);
243}
FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void wave8_transpose_16x4_pipe4(const Wave8Byte lane_waves_a[16], const Wave8Byte lane_waves_b[16], const Wave8Byte lane_waves_c[16], const Wave8Byte lane_waves_d[16], u8 output_a[16 *sizeof(Wave8Byte)], u8 output_b[16 *sizeof(Wave8Byte)], u8 output_c[16 *sizeof(Wave8Byte)], u8 output_d[16 *sizeof(Wave8Byte)])
Pipe4: transpose 16-lane × 4-byte-positions in one fused call.
Definition wave8.hpp:273

References FL_RESTRICT_PARAM, fl::detail::wave8_expand_byte(), and fl::detail::wave8_transpose_16x4_pipe4().

+ Here is the call graph for this function:

◆ wave8Transpose_2() [1/2]

void fl::wave8Transpose_2 ( const u8(&) lanes[2],
const Wave8BitExpansionLut & lut,
u8(&) output[2 *sizeof(Wave8Byte)] )

Definition at line 24 of file wave8.cpp.hpp.

26 {
27 // Allocate waveform buffers on stack (16 Wave8Bit total: 8 packed bytes per lane × 2 lanes)
28 // Each Wave8Byte is 8 bytes (8 Wave8Bit × 1 byte each)
29 // Layout: [Lane0_bit7, Lane0_bit6, ..., Lane0_bit0, Lane1_bit7, Lane1_bit6, ..., Lane1_bit0]
30 Wave8Byte laneWaveformSymbols[2];
31
32 // Convert each lane byte to wave pulse symbols (8 packed bytes each)
33 detail::wave8_convert_byte_to_wave8byte(lanes[0], lut, &laneWaveformSymbols[0]);
34 detail::wave8_convert_byte_to_wave8byte(lanes[1], lut, &laneWaveformSymbols[1]);
35
36 // Transpose waveforms to DMA format (interleave 8 packed bytes to 16 bytes)
37 detail::wave8_transpose_2(laneWaveformSymbols, output);
38}
FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void wave8_transpose_2(const Wave8Byte lane_waves[2], u8 output[2 *sizeof(Wave8Byte)])
Transpose 2 lanes of Wave8Byte data into interleaved format.
Definition wave8.hpp:103

References FL_RESTRICT_PARAM, fl::detail::wave8_convert_byte_to_wave8byte(), and fl::detail::wave8_transpose_2().

+ Here is the call graph for this function:

◆ wave8Transpose_2() [2/2]

void fl::wave8Transpose_2 ( const u8(&) lanes[2],
const Wave8ByteExpansionLut & lut,
u8(&) output[2 *sizeof(Wave8Byte)] )

Definition at line 93 of file wave8.cpp.hpp.

95 {
96 Wave8Byte laneWaveformSymbols[2];
97 detail::wave8_expand_byte(lanes[0], lut, &laneWaveformSymbols[0]);
98 detail::wave8_expand_byte(lanes[1], lut, &laneWaveformSymbols[1]);
99 detail::wave8_transpose_2(laneWaveformSymbols, output);
100}

References FL_RESTRICT_PARAM, fl::detail::wave8_expand_byte(), and fl::detail::wave8_transpose_2().

+ Here is the call graph for this function:

◆ wave8Transpose_2_bf1()

FL_OPTIMIZE_FUNCTION FL_IRAM void fl::wave8Transpose_2_bf1 ( const u8(&) lanes[2],
const Wave8ByteExpansionLut & lut,
u8(&) output[2 *sizeof(Wave8Byte)] )

BF1 for 2-lane Wave8 (#2548 deep-dive followup).

Definition at line 189 of file wave8.cpp.hpp.

191 {
192 const u8 W0 = lut.lut[0x00].symbols[0].data;
193 const u8 W1 = lut.lut[0xFF].symbols[0].data;
194 detail::wave8_transpose_2_bf1(lanes, W0, W1, output);
195}
FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void wave8_transpose_2_bf1(const u8 lanes[2], u8 W0, u8 W1, u8 output[2 *sizeof(Wave8Byte)])
BF1 for 2-lane Wave8.
Definition wave8.hpp:417

References FL_RESTRICT_PARAM, W0, W1, and fl::detail::wave8_transpose_2_bf1().

+ Here is the call graph for this function:

◆ wave8Transpose_4() [1/2]

void fl::wave8Transpose_4 ( const u8(&) lanes[4],
const Wave8BitExpansionLut & lut,
u8(&) output[4 *sizeof(Wave8Byte)] )

Definition at line 41 of file wave8.cpp.hpp.

43 {
44 // Allocate waveform buffers on stack (32 Wave8Bit total: 8 packed bytes per lane × 4 lanes)
45 Wave8Byte laneWaveformSymbols[4];
46
47 // Convert each lane byte to wave pulse symbols (8 packed bytes each)
48 for (int lane = 0; lane < 4; lane++) {
49 detail::wave8_convert_byte_to_wave8byte(lanes[lane], lut, &laneWaveformSymbols[lane]);
50 }
51
52 // Transpose waveforms to DMA format (interleave 32 packed bytes to 32 bytes)
53 detail::wave8_transpose_4(laneWaveformSymbols, output);
54}
FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void wave8_transpose_4(const Wave8Byte lane_waves[4], u8 output[4 *sizeof(Wave8Byte)])
Transpose 4 lanes of Wave8Byte data into interleaved format.
Definition wave8.hpp:126

References FL_RESTRICT_PARAM, fl::detail::wave8_convert_byte_to_wave8byte(), and fl::detail::wave8_transpose_4().

+ Here is the call graph for this function:

◆ wave8Transpose_4() [2/2]

void fl::wave8Transpose_4 ( const u8(&) lanes[4],
const Wave8ByteExpansionLut & lut,
u8(&) output[4 *sizeof(Wave8Byte)] )

Definition at line 103 of file wave8.cpp.hpp.

105 {
106 Wave8Byte laneWaveformSymbols[4];
107 for (int lane = 0; lane < 4; lane++) {
108 detail::wave8_expand_byte(lanes[lane], lut, &laneWaveformSymbols[lane]);
109 }
110 detail::wave8_transpose_4(laneWaveformSymbols, output);
111}

References FL_RESTRICT_PARAM, fl::detail::wave8_expand_byte(), and fl::detail::wave8_transpose_4().

+ Here is the call graph for this function:

◆ wave8Transpose_4_bf1()

FL_OPTIMIZE_FUNCTION FL_IRAM void fl::wave8Transpose_4_bf1 ( const u8(&) lanes[4],
const Wave8ByteExpansionLut & lut,
u8(&) output[4 *sizeof(Wave8Byte)] )

BF1 for 4-lane Wave8 (#2548 deep-dive followup).

Definition at line 180 of file wave8.cpp.hpp.

182 {
183 const u8 W0 = lut.lut[0x00].symbols[0].data;
184 const u8 W1 = lut.lut[0xFF].symbols[0].data;
185 detail::wave8_transpose_4_bf1(lanes, W0, W1, output);
186}
FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void wave8_transpose_4_bf1(const u8 lanes[4], u8 W0, u8 W1, u8 output[4 *sizeof(Wave8Byte)])
BF1 for 4-lane Wave8.
Definition wave8.hpp:370

References FL_RESTRICT_PARAM, W0, W1, and fl::detail::wave8_transpose_4_bf1().

+ Here is the call graph for this function:

◆ wave8Transpose_8() [1/2]

void fl::wave8Transpose_8 ( const u8(&) lanes[8],
const Wave8BitExpansionLut & lut,
u8(&) output[8 *sizeof(Wave8Byte)] )

Definition at line 57 of file wave8.cpp.hpp.

59 {
60 // Allocate waveform buffers on stack (64 Wave8Bit total: 8 packed bytes per lane × 8 lanes)
61 Wave8Byte laneWaveformSymbols[8];
62
63 // Convert each lane byte to wave pulse symbols (8 packed bytes each)
64 for (int lane = 0; lane < 8; lane++) {
65 detail::wave8_convert_byte_to_wave8byte(lanes[lane], lut, &laneWaveformSymbols[lane]);
66 }
67
68 // Transpose waveforms to DMA format (interleave 64 packed bytes to 64 bytes)
69 detail::wave8_transpose_8(laneWaveformSymbols, output);
70}
FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void wave8_transpose_8(const Wave8Byte lane_waves[8], u8 output[8 *sizeof(Wave8Byte)])
Transpose 8 lanes of Wave8Byte data into interleaved format.
Definition wave8.hpp:205

References FL_RESTRICT_PARAM, fl::detail::wave8_convert_byte_to_wave8byte(), and fl::detail::wave8_transpose_8().

+ Here is the call graph for this function:

◆ wave8Transpose_8() [2/2]

void fl::wave8Transpose_8 ( const u8(&) lanes[8],
const Wave8ByteExpansionLut & lut,
u8(&) output[8 *sizeof(Wave8Byte)] )

Definition at line 114 of file wave8.cpp.hpp.

116 {
117 Wave8Byte laneWaveformSymbols[8];
118 for (int lane = 0; lane < 8; lane++) {
119 detail::wave8_expand_byte(lanes[lane], lut, &laneWaveformSymbols[lane]);
120 }
121 detail::wave8_transpose_8(laneWaveformSymbols, output);
122}

References FL_RESTRICT_PARAM, fl::detail::wave8_expand_byte(), and fl::detail::wave8_transpose_8().

+ Here is the call graph for this function:

◆ wave8Transpose_8_bf1()

FL_OPTIMIZE_FUNCTION FL_IRAM void fl::wave8Transpose_8_bf1 ( const u8(&) lanes[8],
const Wave8ByteExpansionLut & lut,
u8(&) output[8 *sizeof(Wave8Byte)] )

BF1 for 8-lane Wave8 (#2548 deep-dive followup).

Definition at line 171 of file wave8.cpp.hpp.

173 {
174 const u8 W0 = lut.lut[0x00].symbols[0].data;
175 const u8 W1 = lut.lut[0xFF].symbols[0].data;
176 detail::wave8_transpose_8_bf1(lanes, W0, W1, output);
177}
FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void wave8_transpose_8_bf1(const u8 lanes[8], u8 W0, u8 W1, u8 output[8 *sizeof(Wave8Byte)])
BF1 for 8-lane Wave8 — same algebraic identity as 16-lane BF1.
Definition wave8.hpp:345

References FL_RESTRICT_PARAM, W0, W1, and fl::detail::wave8_transpose_8_bf1().

+ Here is the call graph for this function:

◆ wave8Untranspose_16()

void fl::wave8Untranspose_16 ( const u8(&) transposed[16 *sizeof(Wave8Byte)],
u8(&) output[16 *sizeof(Wave8Byte)] )

Definition at line 464 of file wave8.cpp.hpp.

465 {
466 // Reverse the 16-lane transposition
467 // Input: 128 bytes of interleaved data (16 bytes per symbol, 8 symbols)
468 // Output: 16 Wave8Byte structures (128 bytes total, de-interleaved)
469
470 Wave8Byte lane_waves[16];
471
472 // Process each of the 8 symbols
473 for (int symbol_idx = 0; symbol_idx < 8; symbol_idx++) {
474 u8 lane_bytes[16] = {0};
475
476 // Process 8 pulses (16 bytes total: 2 bytes per pulse)
477 for (int pulse_idx = 0; pulse_idx < 8; pulse_idx++) {
478 int pulse_bit = 7 - pulse_idx;
479
480 // Read 16-bit word for this pulse
481 int input_offset = symbol_idx * 16 + pulse_idx * 2;
482 u16 input_word = (u16)transposed[input_offset] |
483 ((u16)transposed[input_offset + 1] << 8);
484
485 // De-interleave 16 lanes from this word
486 // Bit layout: [L15, L14, L13, ..., L1, L0]
487 for (int lane = 0; lane < 16; lane++) {
488 // Extract bit for this lane (lane 0 = LSB, lane 15 = MSB)
489 u8 pulse = (input_word >> lane) & 1;
490
491 // Reconstruct lane byte
492 lane_bytes[lane] |= (pulse << pulse_bit);
493 }
494 }
495
496 // Store de-interleaved bytes
497 for (int lane = 0; lane < 16; lane++) {
498 lane_waves[lane].symbols[symbol_idx].data = lane_bytes[lane];
499 }
500 }
501
502 // Copy de-interleaved data to output
503 for (int lane = 0; lane < 16; lane++) {
504 fl::isr::memcpy(output + lane * sizeof(Wave8Byte), &lane_waves[lane], sizeof(Wave8Byte));
505 }
506}

References FL_RESTRICT_PARAM, and fl::isr::memcpy().

+ Here is the call graph for this function:

◆ wave8Untranspose_2()

void fl::wave8Untranspose_2 ( const u8(&) transposed[2 *sizeof(Wave8Byte)],
u8(&) output[2 *sizeof(Wave8Byte)] )

Definition at line 331 of file wave8.cpp.hpp.

332 {
333 // Reverse the 2-lane transposition
334 // Input: 16 bytes of interleaved data (2 bytes per symbol, 8 symbols)
335 // Output: 2 Wave8Byte structures (16 bytes total, de-interleaved)
336
337 Wave8Byte lane_waves[2];
338
339 // Process each of the 8 symbols
340 for (int symbol_idx = 0; symbol_idx < 8; symbol_idx++) {
341 // Read the 2 interleaved bytes for this symbol
342 u16 interleaved = ((u16)transposed[symbol_idx * 2] << 8) |
343 transposed[symbol_idx * 2 + 1];
344
345 // De-interleave bits back to lanes
346 u8 lane0_bits = 0;
347 u8 lane1_bits = 0;
348
349 // Extract bits: interleaved format has alternating bits [L0, L1, L0, L1, ...]
350 // Bits are ordered: [L1_b7, L0_b7, L1_b6, L0_b6, L1_b5, L0_b5, L1_b4, L0_b4, ...]
351 for (int bit = 0; bit < 8; bit++) {
352 // Lane 0 bits are at odd positions (shifted left by 1)
353 if (interleaved & (1 << (bit * 2 + 1))) {
354 lane0_bits |= (1 << bit);
355 }
356 // Lane 1 bits are at even positions
357 if (interleaved & (1 << (bit * 2))) {
358 lane1_bits |= (1 << bit);
359 }
360 }
361
362 lane_waves[0].symbols[symbol_idx].data = lane0_bits;
363 lane_waves[1].symbols[symbol_idx].data = lane1_bits;
364 }
365
366 // Copy de-interleaved data to output
367 fl::isr::memcpy(output, &lane_waves[0], sizeof(Wave8Byte));
368 fl::isr::memcpy(output + sizeof(Wave8Byte), &lane_waves[1], sizeof(Wave8Byte));
369}

References FL_RESTRICT_PARAM, and fl::isr::memcpy().

+ Here is the call graph for this function:

◆ wave8Untranspose_4()

void fl::wave8Untranspose_4 ( const u8(&) transposed[4 *sizeof(Wave8Byte)],
u8(&) output[4 *sizeof(Wave8Byte)] )

Definition at line 372 of file wave8.cpp.hpp.

373 {
374 // Reverse the 4-lane transposition
375 // Input: 32 bytes of interleaved data (4 bytes per symbol, 8 symbols)
376 // Output: 4 Wave8Byte structures (32 bytes total, de-interleaved)
377
378 Wave8Byte lane_waves[4];
379
380 // Process each of the 8 symbols
381 for (int symbol_idx = 0; symbol_idx < 8; symbol_idx++) {
382 u8 lane_bytes[4] = {0, 0, 0, 0};
383
384 // Process 4 input bytes (2 pulses per byte)
385 for (int byte_idx = 0; byte_idx < 4; byte_idx++) {
386 u8 input_byte = transposed[symbol_idx * 4 + byte_idx];
387
388 // Calculate which pulse bits these correspond to
389 int pulse_bit_hi = 7 - (byte_idx * 2);
390 int pulse_bit_lo = pulse_bit_hi - 1;
391
392 // De-interleave 4 lanes from this byte
393 // Bit layout: [L3_hi, L2_hi, L1_hi, L0_hi, L3_lo, L2_lo, L1_lo, L0_lo]
394 for (int lane = 0; lane < 4; lane++) {
395 // Extract bits for this lane
396 u8 pulse_hi = (input_byte >> (4 + lane)) & 1;
397 u8 pulse_lo = (input_byte >> lane) & 1;
398
399 // Reconstruct lane byte
400 lane_bytes[lane] |= (pulse_hi << pulse_bit_hi);
401 lane_bytes[lane] |= (pulse_lo << pulse_bit_lo);
402 }
403 }
404
405 // Store de-interleaved bytes
406 for (int lane = 0; lane < 4; lane++) {
407 lane_waves[lane].symbols[symbol_idx].data = lane_bytes[lane];
408 }
409 }
410
411 // Copy de-interleaved data to output
412 for (int lane = 0; lane < 4; lane++) {
413 fl::isr::memcpy(output + lane * sizeof(Wave8Byte), &lane_waves[lane], sizeof(Wave8Byte));
414 }
415}

References FL_RESTRICT_PARAM, and fl::isr::memcpy().

+ Here is the call graph for this function:

◆ wave8Untranspose_8()

void fl::wave8Untranspose_8 ( const u8(&) transposed[8 *sizeof(Wave8Byte)],
u8(&) output[8 *sizeof(Wave8Byte)] )

Definition at line 418 of file wave8.cpp.hpp.

419 {
420 // Reverse the 8-lane transposition
421 // Input: 64 bytes of interleaved data (8 bytes per symbol, 8 symbols)
422 // Output: 8 Wave8Byte structures (64 bytes total, de-interleaved)
423
424 Wave8Byte lane_waves[8];
425
426 // Process each of the 8 symbols
427 for (int symbol_idx = 0; symbol_idx < 8; symbol_idx++) {
428 u8 lane_bytes[8] = {0, 0, 0, 0, 0, 0, 0, 0};
429
430 // Process 8 input bytes (1 pulse per byte)
431 // After transpose+reversal: byte 0 = bit 7 (first pulse, MSB),
432 // byte 7 = bit 0 (last pulse, LSB)
433 for (int byte_idx = 0; byte_idx < 8; byte_idx++) {
434 u8 input_byte = transposed[symbol_idx * 8 + byte_idx];
435
436 // Calculate which pulse bit this corresponds to
437 // byte 0 = bit 7, byte 7 = bit 0 (reversed order)
438 int pulse_bit = 7 - byte_idx;
439
440 // De-interleave 8 lanes from this byte
441 // Bit layout: [L7, L6, L5, L4, L3, L2, L1, L0]
442 for (int lane = 0; lane < 8; lane++) {
443 // Extract bit for this lane (lane 0 = LSB, lane 7 = MSB)
444 u8 pulse = (input_byte >> lane) & 1;
445
446 // Reconstruct lane byte
447 lane_bytes[lane] |= (pulse << pulse_bit);
448 }
449 }
450
451 // Store de-interleaved bytes
452 for (int lane = 0; lane < 8; lane++) {
453 lane_waves[lane].symbols[symbol_idx].data = lane_bytes[lane];
454 }
455 }
456
457 // Copy de-interleaved data to output
458 for (int lane = 0; lane < 8; lane++) {
459 fl::isr::memcpy(output + lane * sizeof(Wave8Byte), &lane_waves[lane], sizeof(Wave8Byte));
460 }
461}

References FL_RESTRICT_PARAM, and fl::isr::memcpy().

+ Here is the call graph for this function:

◆ worley_noise_2d_q15()

i32 fl::worley_noise_2d_q15 ( i32 x,
i32 y )

Definition at line 34 of file noise_woryley.cpp.hpp.

34 {
35 i32 cell_x = x >> 15;
36 i32 cell_y = y >> 15;
37
38 // Use (max)() to prevent macro expansion by Arduino.h's max macro
39 i32 min_dist = (fl::numeric_limits<i32>::max)();
40
41 // Check surrounding 9 cells
42 for (int dy = -1; dy <= 1; ++dy) {
43 for (int dx = -1; dx <= 1; ++dx) {
44 i32 gx = cell_x + dx;
45 i32 gy = cell_y + dy;
46
47 i32 fx, fy;
48 feature_point(gx, gy, fx, fy);
49
50 i32 feature_x = (gx << 15) + fx;
51 i32 feature_y = (gy << 15) + fy;
52
53 i32 dx_q15 = x - feature_x;
54 i32 dy_q15 = y - feature_y;
55
56 // Approximate distance using Manhattan (faster) or Euclidean
57 // (costlier)
58 i32 dist =
59 q15_abs(dx_q15) + q15_abs(dy_q15); // Manhattan distance
60
61 if (dist < min_dist)
62 min_dist = dist;
63 }
64 }
65
66 // Normalize: maximum possible distance is roughly 2*Q15_ONE
67 return (min_dist << 15) / (2 * Q15_ONE);
68}

References fl::numeric_limits< T >::max(), x, and y.

+ Here is the call graph for this function:

◆ write_bytes()

size_t fl::write_bytes ( const u8 * buffer,
size_t size )

Definition at line 217 of file cstdio.cpp.hpp.

217 {
218 if (!buffer || size == 0) return 0;
219#ifdef FASTLED_TESTING
220 if (get_write_bytes_handler()) {
221 return get_write_bytes_handler()(buffer, size);
222 }
223#endif
224 return platforms::write_bytes(buffer, size);
225}

Referenced by fl::SerialPort::write().

+ Here is the caller graph for this function:

◆ writeSerialLine()

template<typename SerialOut>
void fl::writeSerialLine ( SerialOut & serial,
const fl::string & str )

Write a string with newline to a serial-like output.

Template Parameters
SerialOutType providing println() method
Parameters
serialSerial output destination
strString to write

Definition at line 245 of file serial.h.

245 {
246 serial.println(str.c_str());
247}

References fl::basic_string::c_str().

Referenced by createSerialResponseSink().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ x_linear()

FASTLED_FORCE_INLINE u16 fl::x_linear ( u16 x,
u16 length )

Definition at line 10 of file xmap.h.

10 {
11 (void)length;
12 return x;
13}
fl::UISlider length("Length", 1.0f, 0.0f, 1.0f, 0.01f)

References FASTLED_FORCE_INLINE, length(), and x.

Referenced by fl::XMap::mapToIndex().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ x_reverse()

FASTLED_FORCE_INLINE u16 fl::x_reverse ( u16 x,
u16 length )

Definition at line 15 of file xmap.h.

15 {
16 return length - 1 - x;
17}

References FASTLED_FORCE_INLINE, length(), and x.

Referenced by fl::XMap::mapToIndex().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ XY()

fl::u16 fl::XY ( fl::u16 x,
fl::u16 y )

Definition at line 28 of file Luminova.h.

28 {
29 if (x >= WIDTH || y >= HEIGHT)
30 return 0;
32 if (y & 1) {
33 // odd rows run right-to-left
34 return y * WIDTH + (WIDTH - 1 - x);
35 } else {
36 // even rows run left-to-right
37 return y * WIDTH + x;
38 }
39 } else {
40 return y * WIDTH + x;
41 }
42}
#define kMatrixSerpentineLayout
#define WIDTH
#define HEIGHT

References HEIGHT, kMatrixSerpentineLayout, WIDTH, x, and y.

Referenced by plotDot(), and xy_map_function().

+ Here is the caller graph for this function:

◆ xy_line_by_line()

FASTLED_FORCE_INLINE u16 fl::xy_line_by_line ( u16 x,
u16 y,
u16 width,
u16 height )

Definition at line 25 of file xymap.h.

26 {
27 (void)height;
28 return y * width + x;
29}

References FASTLED_FORCE_INLINE, FL_NOEXCEPT, height, width, x, and y.

Referenced by fl::XYMap::mapToIndex().

+ Here is the caller graph for this function:

◆ xy_serpentine()

FASTLED_FORCE_INLINE u16 fl::xy_serpentine ( u16 x,
u16 y,
u16 width,
u16 height )

Definition at line 15 of file xymap.h.

16 {
17 (void)height;
18 if (y & 1) // Even or odd row?
19 // reverse every second line for a serpentine lled layout
20 return (y + 1) * width - 1 - x;
21 else
22 return y * width + x;
23}

References FASTLED_FORCE_INLINE, FL_NOEXCEPT, height, width, x, and y.

Referenced by fl::XYMap::mapToIndex().

+ Here is the caller graph for this function:

◆ xyMapCallbackAdapter()

u16 fl::xyMapCallbackAdapter ( u16 x,
u16 y,
void * userData )
inline

Definition at line 207 of file animartrix.hpp.

207 {
208 Fx2d *self = static_cast<Fx2d *>(userData);
209 return self->xyMap(x, y);
210}
u16 xyMap(u16 x, u16 y) const
Definition fx2d.h:20

References x, fl::Fx2d::xyMap(), and y.

Referenced by fl::Animartrix::draw().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ yield()

void fl::yield ( )

Yield to the platform scheduler.

On ESP32 (FreeRTOS), this calls vTaskDelay(0) which yields to any equal-or-higher priority tasks waiting to run. This is important for cooperative multitasking on ESP32 where WiFi, Bluetooth, and other system tasks need CPU time.

On multithreaded host platforms, this calls std::this_thread::yield().

On single-threaded non-RTOS platforms, this is a no-op.

Safe to call from any thread or FreeRTOS task.

Definition at line 31 of file yield.cpp.hpp.

31 {
32 sys_yield();
33}
static void sys_yield()
Definition yield.cpp.hpp:21

References sys_yield().

Referenced by CFastLED::delay(), and fl::task::run().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Variable Documentation

◆ ActivePaletteList

const TProgmemRGBPalette16* fl::ActivePaletteList[]
Initial value:
= {
const TProgmemRGBPalette16 PartyColors_p
HSV color ramp: blue, purple, pink, red, orange, yellow (and back).
const TProgmemRGBPalette16 RainbowColors_p
HSV Rainbow.
const TProgmemRGBPalette16 Snow_p
Definition twinklefox.h:274
const TProgmemRGBPalette16 RetroC9_p
Definition twinklefox.h:279
const TProgmemRGBPalette16 BlueWhite_p
Definition twinklefox.h:251
const TProgmemRGBPalette16 RedGreenWhite_p
Definition twinklefox.h:236
const TProgmemRGBPalette16 RedWhite_p
Definition twinklefox.h:246
const TProgmemRGBPalette16 Ice_p
Definition twinklefox.h:284
const TProgmemRGBPalette16 FairyLight_p
Definition twinklefox.h:256
const TProgmemRGBPalette16 Holly_p
Definition twinklefox.h:241

Definition at line 291 of file twinklefox.h.

Referenced by fl::TwinkleFox::chooseNextColorPalette().

◆ allocator_traits< Allocator >::has_allocate_at_least_v

template<typename Allocator>
bool fl::allocator_traits< Allocator >::has_allocate_at_least_v
constexpr

Definition at line 34 of file allocator.cpp.hpp.

◆ allocator_traits< Allocator >::has_reallocate_v

template<typename Allocator>
bool fl::allocator_traits< Allocator >::has_reallocate_v
constexpr

Definition at line 31 of file allocator.cpp.hpp.

◆ ANIMATION_TABLE

const AnimartrixEntry fl::ANIMATION_TABLE[]
static

Definition at line 125 of file animartrix.hpp.

125 {
127 {AnimartrixAnim::RGB_BLOBS4, "RGB_BLOBS4", ANIMARTRIX_VIZ(RGB_Blobs4, RGB_Blobs4_FP)},
143 {AnimartrixAnim::CALEIDO1, "CALEIDO1", ANIMARTRIX_VIZ(Caleido3, Caleido3_FP)}, // Note: same as original - Caleido1 maps to Caleido3
178};
#define ANIMARTRIX_VIZ(FloatClass, FPClass)

Referenced by fl::Animartrix::createViz(), getAnimartrixInfo(), and getAnimartrixName().

◆ B

*u32 * fl::B
Initial value:
{
u32 x, y, t
Examples
/home/runner/work/FastLED/FastLED/src/fl/math/transposition.h.

Definition at line 19 of file transposition.cpp.hpp.

Referenced by fl::colorimetric_detail::barycentric_xy(), fl::third_party::vorbis::compute_twiddle_factors(), HSV16toRGB(), fl::third_party::vorbis::inverse_mdct(), fl::ChannelManager::operator=(), pnoise(), fl::perlin_i16_optimized::pnoise2d_raw(), fl::perlin_q16::pnoise2d_raw(), fl::perlin_s16x16::pnoise2d_raw(), fl::perlin_s8x8::pnoise2d_raw(), fl::perlin_s16x16_simd::pnoise2d_raw_simd4_vec(), fl::perlin_s16x16::pnoise3d_raw(), transpose8(), transpose8x1(), transpose8x1_MSB(), transpose8x1_noinline(), and fl::third_party::yuv_to_rgb().

◆ BlueWhite_p

const TProgmemRGBPalette16 fl::BlueWhite_p
Initial value:
= {
@ Blue
<div style='background:#0000FF;width:4em;height:4em;'></div>
Definition crgb.h:512
@ Gray
<div style='background:#808080;width:4em;height:4em;'></div>
Definition crgb.h:556

Definition at line 251 of file twinklefox.h.

◆ blur_amount

u8 u8 fract8 fl::blur_amount
Initial value:

Definition at line 186 of file blur.h.

Referenced by blur1d(), blur1d(), fl::gfx::blur1d(), fl::gfx::blur1d(), blur2d(), blur2d(), blur2d(), fl::gfx::blur2d(), fl::gfx::blur2d(), fl::gfx::blur2d(), fl::gfx::blur2d(), blurColumns(), blurColumns(), blurColumns(), fl::gfx::blurColumns(), fl::gfx::blurColumns(), fl::gfx::blurColumns(), blurRows(), blurRows(), blurRows(), fl::gfx::blurRows(), fl::gfx::blurRows(), fl::gfx::blurRows(), fl::Blend2d::draw(), fl::Luminova::setBlurAmount(), fl::Blend2d::setGlobalBlurAmount(), and fl::Blend2d::setParams().

◆ BYTES_PER_PIXEL_RGB

size_t fl::BYTES_PER_PIXEL_RGB = 3
constexpr

Number of bytes per RGB pixel (order-agnostic)

Definition at line 11 of file encoder_constants.h.

◆ BYTES_PER_PIXEL_RGBW

size_t fl::BYTES_PER_PIXEL_RGBW = 4
constexpr

Number of bytes per RGBW pixel (order-agnostic)

Definition at line 14 of file encoder_constants.h.

◆ BYTES_PER_PIXEL_RGBWW

size_t fl::BYTES_PER_PIXEL_RGBWW = 5
constexpr

Number of bytes per RGBWW pixel (order-agnostic, issue #2558).

Layout: R, G, B, warm-W, cool-W in EOrder + EOrderWW order.

Definition at line 18 of file encoder_constants.h.

◆ cin

istream fl::cin

Definition at line 126 of file istream.cpp.hpp.

◆ console_font_4x6

const unsigned char fl::console_font_4x6[]
static

Definition at line 7 of file console_font_4x6.h.

7 {
8
9// code points 0-31 and 127-255 are commented out to save memory, they contain extra characters (CP437),
10// which could be used with an UTF-8 to CP437 conversion
11
12 // /*
13 // * code=0, hex=0x00, ascii="^@"
14 // */
15 // 0x00, /* 0000 */
16 // 0x00, /* 0000 */
17 // 0x00, /* 0000 */
18 // 0x00, /* 0000 */
19 // 0x00, /* 0000 */
20 // 0x00, /* 0000 */
21
22 // /*
23 // * code=1, hex=0x01, ascii="^A"
24 // */
25 // 0x20, /* 0010 */
26 // 0x50, /* 0101 */
27 // 0x70, /* 0111 */
28 // 0x50, /* 0101 */
29 // 0x20, /* 0010 */
30 // 0x00, /* 0000 */
31
32 // /*
33 // * code=2, hex=0x02, ascii="^B"
34 // */
35 // 0x20, /* 0010 */
36 // 0x70, /* 0111 */
37 // 0x50, /* 0101 */
38 // 0x70, /* 0111 */
39 // 0x20, /* 0010 */
40 // 0x00, /* 0000 */
41
42 // /*
43 // * code=3, hex=0x03, ascii="^C"
44 // */
45 // 0x00, /* 0000 */
46 // 0x50, /* 0101 */
47 // 0x70, /* 0111 */
48 // 0x70, /* 0111 */
49 // 0x20, /* 0010 */
50 // 0x00, /* 0000 */
51
52 // /*
53 // * code=4, hex=0x04, ascii="^D"
54 // */
55 // 0x00, /* 0000 */
56 // 0x20, /* 0010 */
57 // 0x70, /* 0111 */
58 // 0x70, /* 0111 */
59 // 0x20, /* 0010 */
60 // 0x00, /* 0000 */
61
62 // /*
63 // * code=5, hex=0x05, ascii="^E"
64 // */
65 // 0x20, /* 0010 */
66 // 0x70, /* 0111 */
67 // 0x70, /* 0111 */
68 // 0x20, /* 0010 */
69 // 0x70, /* 0111 */
70 // 0x00, /* 0000 */
71
72 // /*
73 // * code=6, hex=0x06, ascii="^F"
74 // */
75 // 0x20, /* 0010 */
76 // 0x20, /* 0010 */
77 // 0x70, /* 0111 */
78 // 0x20, /* 0010 */
79 // 0x70, /* 0111 */
80 // 0x00, /* 0000 */
81
82 // /*
83 // * code=7, hex=0x07, ascii="^G"
84 // */
85 // 0x00, /* 0000 */
86 // 0x00, /* 0000 */
87 // 0x20, /* 0010 */
88 // 0x00, /* 0000 */
89 // 0x00, /* 0000 */
90 // 0x00, /* 0000 */
91
92 // /*
93 // * code=8, hex=0x08, ascii="^H"
94 // */
95 // 0xF0, /* 1111 */
96 // 0xF0, /* 1111 */
97 // 0xD0, /* 1101 */
98 // 0xF0, /* 1111 */
99 // 0xF0, /* 1111 */
100 // 0xF0, /* 1111 */
101
102 // /*
103 // * code=9, hex=0x09, ascii="^I"
104 // */
105 // 0x00, /* 0000 */
106 // 0x70, /* 0111 */
107 // 0x50, /* 0101 */
108 // 0x70, /* 0111 */
109 // 0x00, /* 0000 */
110 // 0x00, /* 0000 */
111
112 // /*
113 // * code=10, hex=0x0A, ascii="^J"
114 // */
115 // 0xF0, /* 1111 */
116 // 0x80, /* 1000 */
117 // 0xA0, /* 1010 */
118 // 0x80, /* 1000 */
119 // 0xF0, /* 1111 */
120 // 0xF0, /* 1111 */
121
122 // /*
123 // * code=11, hex=0x0B, ascii="^K"
124 // */
125 // 0x00, /* 0000 */
126 // 0x30, /* 0011 */
127 // 0x10, /* 0001 */
128 // 0x60, /* 0110 */
129 // 0x60, /* 0110 */
130 // 0x00, /* 0000 */
131
132 // /*
133 // * code=12, hex=0x0C, ascii="^L"
134 // */
135 // 0x20, /* 0010 */
136 // 0x50, /* 0101 */
137 // 0x20, /* 0010 */
138 // 0x70, /* 0111 */
139 // 0x20, /* 0010 */
140 // 0x00, /* 0000 */
141
142 // /*
143 // * code=13, hex=0x0D, ascii="^M"
144 // */
145 // 0x20, /* 0010 */
146 // 0x30, /* 0011 */
147 // 0x20, /* 0010 */
148 // 0x20, /* 0010 */
149 // 0x60, /* 0110 */
150 // 0x00, /* 0000 */
151
152 // /*
153 // * code=14, hex=0x0E, ascii="^N"
154 // */
155 // 0x20, /* 0010 */
156 // 0x30, /* 0011 */
157 // 0x50, /* 0101 */
158 // 0x10, /* 0001 */
159 // 0x20, /* 0010 */
160 // 0x00, /* 0000 */
161
162 // /*
163 // * code=15, hex=0x0F, ascii="^O"
164 // */
165 // 0x20, /* 0010 */
166 // 0x70, /* 0111 */
167 // 0x50, /* 0101 */
168 // 0x70, /* 0111 */
169 // 0x20, /* 0010 */
170 // 0x00, /* 0000 */
171
172 // /*
173 // * code=16, hex=0x10, ascii="^P"
174 // */
175 // 0x40, /* 0100 */
176 // 0x60, /* 0110 */
177 // 0x70, /* 0111 */
178 // 0x60, /* 0110 */
179 // 0x40, /* 0100 */
180 // 0x00, /* 0000 */
181
182 // /*
183 // * code=17, hex=0x11, ascii="^Q"
184 // */
185 // 0x10, /* 0001 */
186 // 0x30, /* 0011 */
187 // 0x70, /* 0111 */
188 // 0x30, /* 0011 */
189 // 0x10, /* 0001 */
190 // 0x00, /* 0000 */
191
192 // /*
193 // * code=18, hex=0x12, ascii="^R"
194 // */
195 // 0x20, /* 0010 */
196 // 0x70, /* 0111 */
197 // 0x20, /* 0010 */
198 // 0x70, /* 0111 */
199 // 0x20, /* 0010 */
200 // 0x00, /* 0000 */
201
202 // /*
203 // * code=19, hex=0x13, ascii="^S"
204 // */
205 // 0x50, /* 0101 */
206 // 0x50, /* 0101 */
207 // 0x50, /* 0101 */
208 // 0x00, /* 0000 */
209 // 0x50, /* 0101 */
210 // 0x00, /* 0000 */
211
212 // /*
213 // * code=20, hex=0x14, ascii="^T"
214 // */
215 // 0x70, /* 0111 */
216 // 0xD0, /* 1101 */
217 // 0xD0, /* 1101 */
218 // 0x50, /* 0101 */
219 // 0x50, /* 0101 */
220 // 0x00, /* 0000 */
221
222 // /*
223 // * code=21, hex=0x15, ascii="^U"
224 // */
225 // 0x30, /* 0011 */
226 // 0x60, /* 0110 */
227 // 0x50, /* 0101 */
228 // 0x30, /* 0011 */
229 // 0x60, /* 0110 */
230 // 0x00, /* 0000 */
231
232 // /*
233 // * code=22, hex=0x16, ascii="^V"
234 // */
235 // 0x00, /* 0000 */
236 // 0x00, /* 0000 */
237 // 0x00, /* 0000 */
238 // 0x00, /* 0000 */
239 // 0x70, /* 0111 */
240 // 0x00, /* 0000 */
241
242 // /*
243 // * code=23, hex=0x17, ascii="^W"
244 // */
245 // 0x20, /* 0010 */
246 // 0x70, /* 0111 */
247 // 0x20, /* 0010 */
248 // 0x70, /* 0111 */
249 // 0x20, /* 0010 */
250 // 0x70, /* 0111 */
251
252 // /*
253 // * code=24, hex=0x18, ascii="^X"
254 // */
255 // 0x20, /* 0010 */
256 // 0x70, /* 0111 */
257 // 0x20, /* 0010 */
258 // 0x20, /* 0010 */
259 // 0x20, /* 0010 */
260 // 0x00, /* 0000 */
261
262 // /*
263 // * code=25, hex=0x19, ascii="^Y"
264 // */
265 // 0x20, /* 0010 */
266 // 0x20, /* 0010 */
267 // 0x20, /* 0010 */
268 // 0x70, /* 0111 */
269 // 0x20, /* 0010 */
270 // 0x00, /* 0000 */
271
272 // /*
273 // * code=26, hex=0x1A, ascii="^Z"
274 // */
275 // 0x00, /* 0000 */
276 // 0x20, /* 0010 */
277 // 0xF0, /* 1111 */
278 // 0x20, /* 0010 */
279 // 0x00, /* 0000 */
280 // 0x00, /* 0000 */
281
282 // /*
283 // * code=27, hex=0x1B, ascii="^["
284 // */
285 // 0x00, /* 0000 */
286 // 0x40, /* 0100 */
287 // 0xF0, /* 1111 */
288 // 0x40, /* 0100 */
289 // 0x00, /* 0000 */
290 // 0x00, /* 0000 */
291
292 // /*
293 // * code=28, hex=0x1C, ascii="^\"
294 // */
295 // 0x00, /* 0000 */
296 // 0x00, /* 0000 */
297 // 0x40, /* 0100 */
298 // 0x70, /* 0111 */
299 // 0x00, /* 0000 */
300 // 0x00, /* 0000 */
301
302 // /*
303 // * code=29, hex=0x1D, ascii="^]"
304 // */
305 // 0x00, /* 0000 */
306 // 0x50, /* 0101 */
307 // 0x70, /* 0111 */
308 // 0x50, /* 0101 */
309 // 0x00, /* 0000 */
310 // 0x00, /* 0000 */
311
312 // /*
313 // * code=30, hex=0x1E, ascii="^^"
314 // */
315 // 0x00, /* 0000 */
316 // 0x20, /* 0010 */
317 // 0x70, /* 0111 */
318 // 0x70, /* 0111 */
319 // 0x00, /* 0000 */
320 // 0x00, /* 0000 */
321
322 // /*
323 // * code=31, hex=0x1F, ascii="^_"
324 // */
325 // 0x00, /* 0000 */
326 // 0x70, /* 0111 */
327 // 0x70, /* 0111 */
328 // 0x20, /* 0010 */
329 // 0x00, /* 0000 */
330 // 0x00, /* 0000 */
331
332 /*
333 * code=32, hex=0x20, ascii=" "
334 */
335 0x00, /* 0000 */
336 0x00, /* 0000 */
337 0x00, /* 0000 */
338 0x00, /* 0000 */
339 0x00, /* 0000 */
340 0x00, /* 0000 */
341
342 /*
343 * code=33, hex=0x21, ascii="!"
344 */
345 0x20, /* 0010 */
346 0x20, /* 0010 */
347 0x20, /* 0010 */
348 0x00, /* 0000 */
349 0x20, /* 0010 */
350 0x00, /* 0000 */
351
352 /*
353 * code=34, hex=0x22, ascii="""
354 */
355 0x50, /* 0101 */
356 0x50, /* 0101 */
357 0x00, /* 0000 */
358 0x00, /* 0000 */
359 0x00, /* 0000 */
360 0x00, /* 0000 */
361
362 /*
363 * code=35, hex=0x23, ascii="#"
364 */
365 0x50, /* 0101 */
366 0x70, /* 0111 */
367 0x50, /* 0101 */
368 0x70, /* 0111 */
369 0x50, /* 0101 */
370 0x00, /* 0000 */
371
372 /*
373 * code=36, hex=0x24, ascii="$"
374 */
375 0x20, /* 0010 */
376 0x30, /* 0011 */
377 0x60, /* 0110 */
378 0x30, /* 0011 */
379 0x60, /* 0110 */
380 0x20, /* 0010 */
381
382 /*
383 * code=37, hex=0x25, ascii="%"
384 */
385 0x40, /* 0100 */
386 0x10, /* 0001 */
387 0x20, /* 0010 */
388 0x40, /* 0100 */
389 0x10, /* 0001 */
390 0x00, /* 0000 */
391
392 /*
393 * code=38, hex=0x26, ascii="&"
394 */
395 0x20, /* 0010 */
396 0x50, /* 0101 */
397 0x30, /* 0011 */
398 0x50, /* 0101 */
399 0x70, /* 0111 */
400 0x00, /* 0000 */
401
402 /*
403 * code=39, hex=0x27, ascii="'"
404 */
405 0x60, /* 0110 */
406 0x40, /* 0100 */
407 0x00, /* 0000 */
408 0x00, /* 0000 */
409 0x00, /* 0000 */
410 0x00, /* 0000 */
411
412 /*
413 * code=40, hex=0x28, ascii="("
414 */
415 0x20, /* 0010 */
416 0x40, /* 0100 */
417 0x40, /* 0100 */
418 0x40, /* 0100 */
419 0x20, /* 0010 */
420 0x00, /* 0000 */
421
422 /*
423 * code=41, hex=0x29, ascii=")"
424 */
425 0x40, /* 0100 */
426 0x20, /* 0010 */
427 0x20, /* 0010 */
428 0x20, /* 0010 */
429 0x40, /* 0100 */
430 0x00, /* 0000 */
431
432 /*
433 * code=42, hex=0x2A, ascii="*"
434 */
435 0x50, /* 0101 */
436 0x20, /* 0010 */
437 0x70, /* 0111 */
438 0x20, /* 0010 */
439 0x50, /* 0101 */
440 0x00, /* 0000 */
441
442 /*
443 * code=43, hex=0x2B, ascii="+"
444 */
445 0x00, /* 0000 */
446 0x20, /* 0010 */
447 0x70, /* 0111 */
448 0x20, /* 0010 */
449 0x00, /* 0000 */
450 0x00, /* 0000 */
451
452 /*
453 * code=44, hex=0x2C, ascii=","
454 */
455 0x00, /* 0000 */
456 0x00, /* 0000 */
457 0x00, /* 0000 */
458 0x00, /* 0000 */
459 0x60, /* 0110 */
460 0x40, /* 0100 */
461
462 /*
463 * code=45, hex=0x2D, ascii="-"
464 */
465 0x00, /* 0000 */
466 0x00, /* 0000 */
467 0x70, /* 0111 */
468 0x00, /* 0000 */
469 0x00, /* 0000 */
470 0x00, /* 0000 */
471
472 /*
473 * code=46, hex=0x2E, ascii="."
474 */
475 0x00, /* 0000 */
476 0x00, /* 0000 */
477 0x00, /* 0000 */
478 0x00, /* 0000 */
479 0x20, /* 0010 */
480 0x00, /* 0000 */
481
482 /*
483 * code=47, hex=0x2F, ascii="/"
484 */
485 0x10, /* 0001 */
486 0x10, /* 0001 */
487 0x20, /* 0010 */
488 0x40, /* 0100 */
489 0x40, /* 0100 */
490 0x00, /* 0000 */
491
492 /*
493 * code=48, hex=0x30, ascii="0"
494 */
495 0x30, /* 0011 */
496 0x50, /* 0101 */
497 0x50, /* 0101 */
498 0x50, /* 0101 */
499 0x60, /* 0110 */
500 0x00, /* 0000 */
501
502 /*
503 * code=49, hex=0x31, ascii="1"
504 */
505 0x20, /* 0010 */
506 0x60, /* 0110 */
507 0x20, /* 0010 */
508 0x20, /* 0010 */
509 0x70, /* 0111 */
510 0x00, /* 0000 */
511
512 /*
513 * code=50, hex=0x32, ascii="2"
514 */
515 0x60, /* 0110 */
516 0x10, /* 0001 */
517 0x20, /* 0010 */
518 0x40, /* 0100 */
519 0x70, /* 0111 */
520 0x00, /* 0000 */
521
522 /*
523 * code=51, hex=0x33, ascii="3"
524 */
525 0x60, /* 0110 */
526 0x10, /* 0001 */
527 0x20, /* 0010 */
528 0x10, /* 0001 */
529 0x60, /* 0110 */
530 0x00, /* 0000 */
531
532 /*
533 * code=52, hex=0x34, ascii="4"
534 */
535 0x10, /* 0001 */
536 0x50, /* 0101 */
537 0x70, /* 0111 */
538 0x10, /* 0001 */
539 0x10, /* 0001 */
540 0x00, /* 0000 */
541
542 /*
543 * code=53, hex=0x35, ascii="5"
544 */
545 0x70, /* 0111 */
546 0x40, /* 0100 */
547 0x60, /* 0110 */
548 0x10, /* 0001 */
549 0x60, /* 0110 */
550 0x00, /* 0000 */
551
552 /*
553 * code=54, hex=0x36, ascii="6"
554 */
555 0x20, /* 0010 */
556 0x40, /* 0100 */
557 0x60, /* 0110 */
558 0x50, /* 0101 */
559 0x20, /* 0010 */
560 0x00, /* 0000 */
561
562 /*
563 * code=55, hex=0x37, ascii="7"
564 */
565 0x70, /* 0111 */
566 0x10, /* 0001 */
567 0x30, /* 0011 */
568 0x20, /* 0010 */
569 0x20, /* 0010 */
570 0x00, /* 0000 */
571
572 /*
573 * code=56, hex=0x38, ascii="8"
574 */
575 0x20, /* 0010 */
576 0x50, /* 0101 */
577 0x20, /* 0010 */
578 0x50, /* 0101 */
579 0x20, /* 0010 */
580 0x00, /* 0000 */
581
582 /*
583 * code=57, hex=0x39, ascii="9"
584 */
585 0x20, /* 0010 */
586 0x50, /* 0101 */
587 0x30, /* 0011 */
588 0x10, /* 0001 */
589 0x20, /* 0010 */
590 0x00, /* 0000 */
591
592 /*
593 * code=58, hex=0x3A, ascii=":"
594 */
595 0x00, /* 0000 */
596 0x00, /* 0000 */
597 0x20, /* 0010 */
598 0x00, /* 0000 */
599 0x20, /* 0010 */
600 0x00, /* 0000 */
601
602 /*
603 * code=59, hex=0x3B, ascii=";"
604 */
605 0x00, /* 0000 */
606 0x00, /* 0000 */
607 0x20, /* 0010 */
608 0x00, /* 0000 */
609 0x60, /* 0110 */
610 0x40, /* 0100 */
611
612 /*
613 * code=60, hex=0x3C, ascii="<"
614 */
615 0x10, /* 0001 */
616 0x20, /* 0010 */
617 0x40, /* 0100 */
618 0x20, /* 0010 */
619 0x10, /* 0001 */
620 0x00, /* 0000 */
621
622 /*
623 * code=61, hex=0x3D, ascii="="
624 */
625 0x00, /* 0000 */
626 0x00, /* 0000 */
627 0x70, /* 0111 */
628 0x00, /* 0000 */
629 0x70, /* 0111 */
630 0x00, /* 0000 */
631
632 /*
633 * code=62, hex=0x3E, ascii=">"
634 */
635 0x40, /* 0100 */
636 0x20, /* 0010 */
637 0x10, /* 0001 */
638 0x20, /* 0010 */
639 0x40, /* 0100 */
640 0x00, /* 0000 */
641
642 /*
643 * code=63, hex=0x3F, ascii="?"
644 */
645 0x60, /* 0110 */
646 0x10, /* 0001 */
647 0x20, /* 0010 */
648 0x00, /* 0000 */
649 0x20, /* 0010 */
650 0x00, /* 0000 */
651
652 /*
653 * code=64, hex=0x40, ascii="@"
654 */
655 0x70, /* 0111 */
656 0x50, /* 0101 */
657 0x50, /* 0101 */
658 0x40, /* 0100 */
659 0x70, /* 0111 */
660 0x00, /* 0000 */
661
662 /*
663 * code=65, hex=0x41, ascii="A"
664 */
665 0x20, /* 0010 */
666 0x50, /* 0101 */
667 0x70, /* 0111 */
668 0x50, /* 0101 */
669 0x50, /* 0101 */
670 0x00, /* 0000 */
671
672 /*
673 * code=66, hex=0x42, ascii="B"
674 */
675 0x60, /* 0110 */
676 0x50, /* 0101 */
677 0x60, /* 0110 */
678 0x50, /* 0101 */
679 0x60, /* 0110 */
680 0x00, /* 0000 */
681
682 /*
683 * code=67, hex=0x43, ascii="C"
684 */
685 0x30, /* 0011 */
686 0x40, /* 0100 */
687 0x40, /* 0100 */
688 0x40, /* 0100 */
689 0x30, /* 0011 */
690 0x00, /* 0000 */
691
692 /*
693 * code=68, hex=0x44, ascii="D"
694 */
695 0x60, /* 0110 */
696 0x50, /* 0101 */
697 0x50, /* 0101 */
698 0x50, /* 0101 */
699 0x60, /* 0110 */
700 0x00, /* 0000 */
701
702 /*
703 * code=69, hex=0x45, ascii="E"
704 */
705 0x70, /* 0111 */
706 0x40, /* 0100 */
707 0x60, /* 0110 */
708 0x40, /* 0100 */
709 0x70, /* 0111 */
710 0x00, /* 0000 */
711
712 /*
713 * code=70, hex=0x46, ascii="F"
714 */
715 0x70, /* 0111 */
716 0x40, /* 0100 */
717 0x60, /* 0110 */
718 0x40, /* 0100 */
719 0x40, /* 0100 */
720 0x00, /* 0000 */
721
722 /*
723 * code=71, hex=0x47, ascii="G"
724 */
725 0x30, /* 0011 */
726 0x40, /* 0100 */
727 0x50, /* 0101 */
728 0x50, /* 0101 */
729 0x30, /* 0011 */
730 0x00, /* 0000 */
731
732 /*
733 * code=72, hex=0x48, ascii="H"
734 */
735 0x50, /* 0101 */
736 0x50, /* 0101 */
737 0x70, /* 0111 */
738 0x50, /* 0101 */
739 0x50, /* 0101 */
740 0x00, /* 0000 */
741
742 /*
743 * code=73, hex=0x49, ascii="I"
744 */
745 0x70, /* 0111 */
746 0x20, /* 0010 */
747 0x20, /* 0010 */
748 0x20, /* 0010 */
749 0x70, /* 0111 */
750 0x00, /* 0000 */
751
752 /*
753 * code=74, hex=0x4A, ascii="J"
754 */
755 0x10, /* 0001 */
756 0x10, /* 0001 */
757 0x10, /* 0001 */
758 0x50, /* 0101 */
759 0x20, /* 0010 */
760 0x00, /* 0000 */
761
762 /*
763 * code=75, hex=0x4B, ascii="K"
764 */
765 0x50, /* 0101 */
766 0x50, /* 0101 */
767 0x60, /* 0110 */
768 0x50, /* 0101 */
769 0x50, /* 0101 */
770 0x00, /* 0000 */
771
772 /*
773 * code=76, hex=0x4C, ascii="L"
774 */
775 0x40, /* 0100 */
776 0x40, /* 0100 */
777 0x40, /* 0100 */
778 0x40, /* 0100 */
779 0x70, /* 0111 */
780 0x00, /* 0000 */
781
782 /*
783 * code=77, hex=0x4D, ascii="M"
784 */
785 0x50, /* 0101 */
786 0x70, /* 0111 */
787 0x70, /* 0111 */
788 0x50, /* 0101 */
789 0x50, /* 0101 */
790 0x00, /* 0000 */
791
792 /*
793 * code=78, hex=0x4E, ascii="N"
794 */
795 0x50, /* 0101 */
796 0x70, /* 0111 */
797 0x50, /* 0101 */
798 0x50, /* 0101 */
799 0x50, /* 0101 */
800 0x00, /* 0000 */
801
802 /*
803 * code=79, hex=0x4F, ascii="O"
804 */
805 0x20, /* 0010 */
806 0x50, /* 0101 */
807 0x50, /* 0101 */
808 0x50, /* 0101 */
809 0x20, /* 0010 */
810 0x00, /* 0000 */
811
812 /*
813 * code=80, hex=0x50, ascii="P"
814 */
815 0x60, /* 0110 */
816 0x50, /* 0101 */
817 0x60, /* 0110 */
818 0x40, /* 0100 */
819 0x40, /* 0100 */
820 0x00, /* 0000 */
821
822 /*
823 * code=81, hex=0x51, ascii="Q"
824 */
825 0x20, /* 0010 */
826 0x50, /* 0101 */
827 0x50, /* 0101 */
828 0x70, /* 0111 */
829 0x30, /* 0011 */
830 0x00, /* 0000 */
831
832 /*
833 * code=82, hex=0x52, ascii="R"
834 */
835 0x60, /* 0110 */
836 0x50, /* 0101 */
837 0x60, /* 0110 */
838 0x50, /* 0101 */
839 0x50, /* 0101 */
840 0x00, /* 0000 */
841
842 /*
843 * code=83, hex=0x53, ascii="S"
844 */
845 0x30, /* 0011 */
846 0x40, /* 0100 */
847 0x70, /* 0111 */
848 0x10, /* 0001 */
849 0x60, /* 0110 */
850 0x00, /* 0000 */
851
852 /*
853 * code=84, hex=0x54, ascii="T"
854 */
855 0x70, /* 0111 */
856 0x20, /* 0010 */
857 0x20, /* 0010 */
858 0x20, /* 0010 */
859 0x20, /* 0010 */
860 0x00, /* 0000 */
861
862 /*
863 * code=85, hex=0x55, ascii="U"
864 */
865 0x50, /* 0101 */
866 0x50, /* 0101 */
867 0x50, /* 0101 */
868 0x50, /* 0101 */
869 0x70, /* 0111 */
870 0x00, /* 0000 */
871
872 /*
873 * code=86, hex=0x56, ascii="V"
874 */
875 0x50, /* 0101 */
876 0x50, /* 0101 */
877 0x50, /* 0101 */
878 0x50, /* 0101 */
879 0x20, /* 0010 */
880 0x00, /* 0000 */
881
882 /*
883 * code=87, hex=0x57, ascii="W"
884 */
885 0x50, /* 0101 */
886 0x50, /* 0101 */
887 0x70, /* 0111 */
888 0x70, /* 0111 */
889 0x50, /* 0101 */
890 0x00, /* 0000 */
891
892 /*
893 * code=88, hex=0x58, ascii="X"
894 */
895 0x50, /* 0101 */
896 0x50, /* 0101 */
897 0x20, /* 0010 */
898 0x50, /* 0101 */
899 0x50, /* 0101 */
900 0x00, /* 0000 */
901
902 /*
903 * code=89, hex=0x59, ascii="Y"
904 */
905 0x50, /* 0101 */
906 0x50, /* 0101 */
907 0x20, /* 0010 */
908 0x20, /* 0010 */
909 0x20, /* 0010 */
910 0x00, /* 0000 */
911
912 /*
913 * code=90, hex=0x5A, ascii="Z"
914 */
915 0x70, /* 0111 */
916 0x10, /* 0001 */
917 0x20, /* 0010 */
918 0x40, /* 0100 */
919 0x70, /* 0111 */
920 0x00, /* 0000 */
921
922 /*
923 * code=91, hex=0x5B, ascii="["
924 */
925 0x60, /* 0110 */
926 0x40, /* 0100 */
927 0x40, /* 0100 */
928 0x40, /* 0100 */
929 0x60, /* 0110 */
930 0x00, /* 0000 */
931
932 /*
933 * code=92, hex=0x5C, ascii="\"
934 */
935 0x40, /* 0100 */
936 0x40, /* 0100 */
937 0x20, /* 0010 */
938 0x10, /* 0001 */
939 0x10, /* 0001 */
940 0x00, /* 0000 */
941
942 /*
943 * code=93, hex=0x5D, ascii="]"
944 */
945 0x60, /* 0110 */
946 0x20, /* 0010 */
947 0x20, /* 0010 */
948 0x20, /* 0010 */
949 0x60, /* 0110 */
950 0x00, /* 0000 */
951
952 /*
953 * code=94, hex=0x5E, ascii="^"
954 */
955 0x20, /* 0010 */
956 0x50, /* 0101 */
957 0x00, /* 0000 */
958 0x00, /* 0000 */
959 0x00, /* 0000 */
960 0x00, /* 0000 */
961
962 /*
963 * code=95, hex=0x5F, ascii="_"
964 */
965 0x00, /* 0000 */
966 0x00, /* 0000 */
967 0x00, /* 0000 */
968 0x00, /* 0000 */
969 0x00, /* 0000 */
970 0xF0, /* 1111 */
971
972 /*
973 * code=96, hex=0x60, ascii="`"
974 */
975 0x60, /* 0110 */
976 0x20, /* 0010 */
977 0x00, /* 0000 */
978 0x00, /* 0000 */
979 0x00, /* 0000 */
980 0x00, /* 0000 */
981
982 /*
983 * code=97, hex=0x61, ascii="a"
984 */
985 0x00, /* 0000 */
986 0x00, /* 0000 */
987 0x30, /* 0011 */
988 0x50, /* 0101 */
989 0x70, /* 0111 */
990 0x00, /* 0000 */
991
992 /*
993 * code=98, hex=0x62, ascii="b"
994 */
995 0x40, /* 0100 */
996 0x40, /* 0100 */
997 0x60, /* 0110 */
998 0x50, /* 0101 */
999 0x60, /* 0110 */
1000 0x00, /* 0000 */
1001
1002 /*
1003 * code=99, hex=0x63, ascii="c"
1004 */
1005 0x00, /* 0000 */
1006 0x00, /* 0000 */
1007 0x30, /* 0011 */
1008 0x40, /* 0100 */
1009 0x30, /* 0011 */
1010 0x00, /* 0000 */
1011
1012 /*
1013 * code=100, hex=0x64, ascii="d"
1014 */
1015 0x10, /* 0001 */
1016 0x10, /* 0001 */
1017 0x30, /* 0011 */
1018 0x50, /* 0101 */
1019 0x30, /* 0011 */
1020 0x00, /* 0000 */
1021
1022 /*
1023 * code=101, hex=0x65, ascii="e"
1024 */
1025 0x00, /* 0000 */
1026 0x00, /* 0000 */
1027 0x70, /* 0111 */
1028 0x60, /* 0110 */
1029 0x30, /* 0011 */
1030 0x00, /* 0000 */
1031
1032 /*
1033 * code=102, hex=0x66, ascii="f"
1034 */
1035 0x10, /* 0001 */
1036 0x20, /* 0010 */
1037 0x70, /* 0111 */
1038 0x20, /* 0010 */
1039 0x20, /* 0010 */
1040 0x00, /* 0000 */
1041
1042 /*
1043 * code=103, hex=0x67, ascii="g"
1044 */
1045 0x00, /* 0000 */
1046 0x00, /* 0000 */
1047 0x70, /* 0111 */
1048 0x50, /* 0101 */
1049 0x10, /* 0001 */
1050 0x70, /* 0111 */
1051
1052 /*
1053 * code=104, hex=0x68, ascii="h"
1054 */
1055 0x40, /* 0100 */
1056 0x40, /* 0100 */
1057 0x60, /* 0110 */
1058 0x50, /* 0101 */
1059 0x50, /* 0101 */
1060 0x00, /* 0000 */
1061
1062 /*
1063 * code=105, hex=0x69, ascii="i"
1064 */
1065 0x20, /* 0010 */
1066 0x00, /* 0000 */
1067 0x20, /* 0010 */
1068 0x20, /* 0010 */
1069 0x20, /* 0010 */
1070 0x00, /* 0000 */
1071
1072 /*
1073 * code=106, hex=0x6A, ascii="j"
1074 */
1075 0x20, /* 0010 */
1076 0x00, /* 0000 */
1077 0x20, /* 0010 */
1078 0x20, /* 0010 */
1079 0x20, /* 0010 */
1080 0x60, /* 0110 */
1081
1082 /*
1083 * code=107, hex=0x6B, ascii="k"
1084 */
1085 0x40, /* 0100 */
1086 0x40, /* 0100 */
1087 0x50, /* 0101 */
1088 0x60, /* 0110 */
1089 0x50, /* 0101 */
1090 0x00, /* 0000 */
1091
1092 /*
1093 * code=108, hex=0x6C, ascii="l"
1094 */
1095 0x20, /* 0010 */
1096 0x20, /* 0010 */
1097 0x20, /* 0010 */
1098 0x20, /* 0010 */
1099 0x20, /* 0010 */
1100 0x00, /* 0000 */
1101
1102 /*
1103 * code=109, hex=0x6D, ascii="m"
1104 */
1105 0x00, /* 0000 */
1106 0x00, /* 0000 */
1107 0x70, /* 0111 */
1108 0x70, /* 0111 */
1109 0x50, /* 0101 */
1110 0x00, /* 0000 */
1111
1112 /*
1113 * code=110, hex=0x6E, ascii="n"
1114 */
1115 0x00, /* 0000 */
1116 0x00, /* 0000 */
1117 0x60, /* 0110 */
1118 0x50, /* 0101 */
1119 0x50, /* 0101 */
1120 0x00, /* 0000 */
1121
1122 /*
1123 * code=111, hex=0x6F, ascii="o"
1124 */
1125 0x00, /* 0000 */
1126 0x00, /* 0000 */
1127 0x20, /* 0010 */
1128 0x50, /* 0101 */
1129 0x20, /* 0010 */
1130 0x00, /* 0000 */
1131
1132 /*
1133 * code=112, hex=0x70, ascii="p"
1134 */
1135 0x00, /* 0000 */
1136 0x00, /* 0000 */
1137 0x60, /* 0110 */
1138 0x50, /* 0101 */
1139 0x60, /* 0110 */
1140 0x40, /* 0100 */
1141
1142 /*
1143 * code=113, hex=0x71, ascii="q"
1144 */
1145 0x00, /* 0000 */
1146 0x00, /* 0000 */
1147 0x30, /* 0011 */
1148 0x50, /* 0101 */
1149 0x30, /* 0011 */
1150 0x10, /* 0001 */
1151
1152 /*
1153 * code=114, hex=0x72, ascii="r"
1154 */
1155 0x00, /* 0000 */
1156 0x00, /* 0000 */
1157 0x60, /* 0110 */
1158 0x40, /* 0100 */
1159 0x40, /* 0100 */
1160 0x00, /* 0000 */
1161
1162 /*
1163 * code=115, hex=0x73, ascii="s"
1164 */
1165 0x00, /* 0000 */
1166 0x00, /* 0000 */
1167 0x30, /* 0011 */
1168 0x20, /* 0010 */
1169 0x60, /* 0110 */
1170 0x00, /* 0000 */
1171
1172 /*
1173 * code=116, hex=0x74, ascii="t"
1174 */
1175 0x00, /* 0000 */
1176 0x20, /* 0010 */
1177 0x70, /* 0111 */
1178 0x20, /* 0010 */
1179 0x30, /* 0011 */
1180 0x00, /* 0000 */
1181
1182 /*
1183 * code=117, hex=0x75, ascii="u"
1184 */
1185 0x00, /* 0000 */
1186 0x00, /* 0000 */
1187 0x50, /* 0101 */
1188 0x50, /* 0101 */
1189 0x70, /* 0111 */
1190 0x00, /* 0000 */
1191
1192 /*
1193 * code=118, hex=0x76, ascii="v"
1194 */
1195 0x00, /* 0000 */
1196 0x00, /* 0000 */
1197 0x50, /* 0101 */
1198 0x50, /* 0101 */
1199 0x20, /* 0010 */
1200 0x00, /* 0000 */
1201
1202 /*
1203 * code=119, hex=0x77, ascii="w"
1204 */
1205 0x00, /* 0000 */
1206 0x00, /* 0000 */
1207 0x50, /* 0101 */
1208 0x70, /* 0111 */
1209 0x70, /* 0111 */
1210 0x00, /* 0000 */
1211
1212 /*
1213 * code=120, hex=0x78, ascii="x"
1214 */
1215 0x00, /* 0000 */
1216 0x00, /* 0000 */
1217 0x50, /* 0101 */
1218 0x20, /* 0010 */
1219 0x50, /* 0101 */
1220 0x00, /* 0000 */
1221
1222 /*
1223 * code=121, hex=0x79, ascii="y"
1224 */
1225 0x00, /* 0000 */
1226 0x00, /* 0000 */
1227 0x50, /* 0101 */
1228 0x50, /* 0101 */
1229 0x20, /* 0010 */
1230 0x40, /* 0100 */
1231
1232 /*
1233 * code=122, hex=0x7A, ascii="z"
1234 */
1235 0x00, /* 0000 */
1236 0x00, /* 0000 */
1237 0x60, /* 0110 */
1238 0x20, /* 0010 */
1239 0x30, /* 0011 */
1240 0x00, /* 0000 */
1241
1242 /*
1243 * code=123, hex=0x7B, ascii="{"
1244 */
1245 0x30, /* 0011 */
1246 0x20, /* 0010 */
1247 0x60, /* 0110 */
1248 0x20, /* 0010 */
1249 0x30, /* 0011 */
1250 0x00, /* 0000 */
1251
1252 /*
1253 * code=124, hex=0x7C, ascii="|"
1254 */
1255 0x20, /* 0010 */
1256 0x20, /* 0010 */
1257 0x20, /* 0010 */
1258 0x20, /* 0010 */
1259 0x20, /* 0010 */
1260 0x00, /* 0000 */
1261
1262 /*
1263 * code=125, hex=0x7D, ascii="}"
1264 */
1265 0x60, /* 0110 */
1266 0x20, /* 0010 */
1267 0x30, /* 0011 */
1268 0x20, /* 0010 */
1269 0x60, /* 0110 */
1270 0x00, /* 0000 */
1271
1272 /*
1273 * code=126, hex=0x7E, ascii="~"
1274 */
1275 0x50, /* 0101 */
1276 0xA0, /* 1010 */
1277 0x00, /* 0000 */
1278 0x00, /* 0000 */
1279 0x00, /* 0000 */
1280 0x00, /* 0000 */
1281
1282 // /*
1283 // * code=127, hex=0x7F, ascii="^?"
1284 // */
1285 // 0x00, /* 0000 */
1286 // 0x20, /* 0010 */
1287 // 0x50, /* 0101 */
1288 // 0x70, /* 0111 */
1289 // 0x00, /* 0000 */
1290 // 0x00, /* 0000 */
1291
1292 // /*
1293 // * code=128, hex=0x80, ascii="!^@"
1294 // */
1295 // 0x30, /* 0011 */
1296 // 0x40, /* 0100 */
1297 // 0x40, /* 0100 */
1298 // 0x70, /* 0111 */
1299 // 0x20, /* 0010 */
1300 // 0x40, /* 0100 */
1301
1302 // /*
1303 // * code=129, hex=0x81, ascii="!^A"
1304 // */
1305 // 0x50, /* 0101 */
1306 // 0x00, /* 0000 */
1307 // 0x50, /* 0101 */
1308 // 0x50, /* 0101 */
1309 // 0x30, /* 0011 */
1310 // 0x00, /* 0000 */
1311
1312 // /*
1313 // * code=130, hex=0x82, ascii="!^B"
1314 // */
1315 // 0x10, /* 0001 */
1316 // 0x20, /* 0010 */
1317 // 0x70, /* 0111 */
1318 // 0x60, /* 0110 */
1319 // 0x30, /* 0011 */
1320 // 0x00, /* 0000 */
1321
1322 // /*
1323 // * code=131, hex=0x83, ascii="!^C"
1324 // */
1325 // 0x20, /* 0010 */
1326 // 0x50, /* 0101 */
1327 // 0x30, /* 0011 */
1328 // 0x50, /* 0101 */
1329 // 0x70, /* 0111 */
1330 // 0x00, /* 0000 */
1331
1332 // /*
1333 // * code=132, hex=0x84, ascii="!^D"
1334 // */
1335 // 0x50, /* 0101 */
1336 // 0x00, /* 0000 */
1337 // 0x30, /* 0011 */
1338 // 0x50, /* 0101 */
1339 // 0x70, /* 0111 */
1340 // 0x00, /* 0000 */
1341
1342 // /*
1343 // * code=133, hex=0x85, ascii="!^E"
1344 // */
1345 // 0x40, /* 0100 */
1346 // 0x20, /* 0010 */
1347 // 0x30, /* 0011 */
1348 // 0x50, /* 0101 */
1349 // 0x70, /* 0111 */
1350 // 0x00, /* 0000 */
1351
1352 // /*
1353 // * code=134, hex=0x86, ascii="!^F"
1354 // */
1355 // 0x20, /* 0010 */
1356 // 0x00, /* 0000 */
1357 // 0x30, /* 0011 */
1358 // 0x50, /* 0101 */
1359 // 0x70, /* 0111 */
1360 // 0x00, /* 0000 */
1361
1362 // /*
1363 // * code=135, hex=0x87, ascii="!^G"
1364 // */
1365 // 0x00, /* 0000 */
1366 // 0x70, /* 0111 */
1367 // 0x40, /* 0100 */
1368 // 0x70, /* 0111 */
1369 // 0x20, /* 0010 */
1370 // 0x60, /* 0110 */
1371
1372 // /*
1373 // * code=136, hex=0x88, ascii="!^H"
1374 // */
1375 // 0x20, /* 0010 */
1376 // 0x50, /* 0101 */
1377 // 0x70, /* 0111 */
1378 // 0x60, /* 0110 */
1379 // 0x30, /* 0011 */
1380 // 0x00, /* 0000 */
1381
1382 // /*
1383 // * code=137, hex=0x89, ascii="!^I"
1384 // */
1385 // 0x50, /* 0101 */
1386 // 0x00, /* 0000 */
1387 // 0x70, /* 0111 */
1388 // 0x60, /* 0110 */
1389 // 0x30, /* 0011 */
1390 // 0x00, /* 0000 */
1391
1392 // /*
1393 // * code=138, hex=0x8A, ascii="!^J"
1394 // */
1395 // 0x40, /* 0100 */
1396 // 0x20, /* 0010 */
1397 // 0x70, /* 0111 */
1398 // 0x60, /* 0110 */
1399 // 0x30, /* 0011 */
1400 // 0x00, /* 0000 */
1401
1402 // /*
1403 // * code=139, hex=0x8B, ascii="!^K"
1404 // */
1405 // 0x50, /* 0101 */
1406 // 0x00, /* 0000 */
1407 // 0x20, /* 0010 */
1408 // 0x20, /* 0010 */
1409 // 0x20, /* 0010 */
1410 // 0x00, /* 0000 */
1411
1412 // /*
1413 // * code=140, hex=0x8C, ascii="!^L"
1414 // */
1415 // 0x20, /* 0010 */
1416 // 0x50, /* 0101 */
1417 // 0x00, /* 0000 */
1418 // 0x20, /* 0010 */
1419 // 0x20, /* 0010 */
1420 // 0x00, /* 0000 */
1421
1422 // /*
1423 // * code=141, hex=0x8D, ascii="!^M"
1424 // */
1425 // 0x40, /* 0100 */
1426 // 0x20, /* 0010 */
1427 // 0x00, /* 0000 */
1428 // 0x20, /* 0010 */
1429 // 0x20, /* 0010 */
1430 // 0x00, /* 0000 */
1431
1432 // /*
1433 // * code=142, hex=0x8E, ascii="!^N"
1434 // */
1435 // 0x50, /* 0101 */
1436 // 0x20, /* 0010 */
1437 // 0x50, /* 0101 */
1438 // 0x70, /* 0111 */
1439 // 0x50, /* 0101 */
1440 // 0x00, /* 0000 */
1441
1442 // /*
1443 // * code=143, hex=0x8F, ascii="!^O"
1444 // */
1445 // 0x20, /* 0010 */
1446 // 0x20, /* 0010 */
1447 // 0x50, /* 0101 */
1448 // 0x70, /* 0111 */
1449 // 0x50, /* 0101 */
1450 // 0x00, /* 0000 */
1451
1452 // /*
1453 // * code=144, hex=0x90, ascii="!^P"
1454 // */
1455 // 0x10, /* 0001 */
1456 // 0x20, /* 0010 */
1457 // 0x70, /* 0111 */
1458 // 0x60, /* 0110 */
1459 // 0x70, /* 0111 */
1460 // 0x00, /* 0000 */
1461
1462 // /*
1463 // * code=145, hex=0x91, ascii="!^Q"
1464 // */
1465 // 0x00, /* 0000 */
1466 // 0x00, /* 0000 */
1467 // 0x30, /* 0011 */
1468 // 0x70, /* 0111 */
1469 // 0x60, /* 0110 */
1470 // 0x00, /* 0000 */
1471
1472 // /*
1473 // * code=146, hex=0x92, ascii="!^R"
1474 // */
1475 // 0x30, /* 0011 */
1476 // 0x60, /* 0110 */
1477 // 0x70, /* 0111 */
1478 // 0x60, /* 0110 */
1479 // 0x70, /* 0111 */
1480 // 0x00, /* 0000 */
1481
1482 // /*
1483 // * code=147, hex=0x93, ascii="!^S"
1484 // */
1485 // 0x20, /* 0010 */
1486 // 0x50, /* 0101 */
1487 // 0x20, /* 0010 */
1488 // 0x50, /* 0101 */
1489 // 0x20, /* 0010 */
1490 // 0x00, /* 0000 */
1491
1492 // /*
1493 // * code=148, hex=0x94, ascii="!^T"
1494 // */
1495 // 0x50, /* 0101 */
1496 // 0x00, /* 0000 */
1497 // 0x20, /* 0010 */
1498 // 0x50, /* 0101 */
1499 // 0x20, /* 0010 */
1500 // 0x00, /* 0000 */
1501
1502 // /*
1503 // * code=149, hex=0x95, ascii="!^U"
1504 // */
1505 // 0x40, /* 0100 */
1506 // 0x20, /* 0010 */
1507 // 0x20, /* 0010 */
1508 // 0x50, /* 0101 */
1509 // 0x20, /* 0010 */
1510 // 0x00, /* 0000 */
1511
1512 // /*
1513 // * code=150, hex=0x96, ascii="!^V"
1514 // */
1515 // 0x20, /* 0010 */
1516 // 0x50, /* 0101 */
1517 // 0x00, /* 0000 */
1518 // 0x50, /* 0101 */
1519 // 0x70, /* 0111 */
1520 // 0x00, /* 0000 */
1521
1522 // /*
1523 // * code=151, hex=0x97, ascii="!^W"
1524 // */
1525 // 0x40, /* 0100 */
1526 // 0x20, /* 0010 */
1527 // 0x50, /* 0101 */
1528 // 0x50, /* 0101 */
1529 // 0x70, /* 0111 */
1530 // 0x00, /* 0000 */
1531
1532 // /*
1533 // * code=152, hex=0x98, ascii="!^X"
1534 // */
1535 // 0x50, /* 0101 */
1536 // 0x00, /* 0000 */
1537 // 0x50, /* 0101 */
1538 // 0x50, /* 0101 */
1539 // 0x20, /* 0010 */
1540 // 0x40, /* 0100 */
1541
1542 // /*
1543 // * code=153, hex=0x99, ascii="!^Y"
1544 // */
1545 // 0x50, /* 0101 */
1546 // 0x20, /* 0010 */
1547 // 0x50, /* 0101 */
1548 // 0x50, /* 0101 */
1549 // 0x20, /* 0010 */
1550 // 0x00, /* 0000 */
1551
1552 // /*
1553 // * code=154, hex=0x9A, ascii="!^Z"
1554 // */
1555 // 0x50, /* 0101 */
1556 // 0x00, /* 0000 */
1557 // 0x50, /* 0101 */
1558 // 0x50, /* 0101 */
1559 // 0x70, /* 0111 */
1560 // 0x00, /* 0000 */
1561
1562 // /*
1563 // * code=155, hex=0x9B, ascii="!^["
1564 // */
1565 // 0x20, /* 0010 */
1566 // 0x70, /* 0111 */
1567 // 0x40, /* 0100 */
1568 // 0x70, /* 0111 */
1569 // 0x20, /* 0010 */
1570 // 0x00, /* 0000 */
1571
1572 // /*
1573 // * code=156, hex=0x9C, ascii="!^\"
1574 // */
1575 // 0x10, /* 0001 */
1576 // 0x20, /* 0010 */
1577 // 0x70, /* 0111 */
1578 // 0x20, /* 0010 */
1579 // 0x70, /* 0111 */
1580 // 0x00, /* 0000 */
1581
1582 // /*
1583 // * code=157, hex=0x9D, ascii="!^]"
1584 // */
1585 // 0x50, /* 0101 */
1586 // 0x70, /* 0111 */
1587 // 0x20, /* 0010 */
1588 // 0x70, /* 0111 */
1589 // 0x20, /* 0010 */
1590 // 0x00, /* 0000 */
1591
1592 // /*
1593 // * code=158, hex=0x9E, ascii="!^^"
1594 // */
1595 // 0x00, /* 0000 */
1596 // 0x60, /* 0110 */
1597 // 0x60, /* 0110 */
1598 // 0x50, /* 0101 */
1599 // 0x50, /* 0101 */
1600 // 0x00, /* 0000 */
1601
1602 // /*
1603 // * code=159, hex=0x9F, ascii="!^_"
1604 // */
1605 // 0x30, /* 0011 */
1606 // 0x20, /* 0010 */
1607 // 0x30, /* 0011 */
1608 // 0x20, /* 0010 */
1609 // 0x60, /* 0110 */
1610 // 0x00, /* 0000 */
1611
1612 // /*
1613 // * code=160, hex=0xA0, ascii="! "
1614 // */
1615 // 0x10, /* 0001 */
1616 // 0x20, /* 0010 */
1617 // 0x30, /* 0011 */
1618 // 0x50, /* 0101 */
1619 // 0x70, /* 0111 */
1620 // 0x00, /* 0000 */
1621
1622 // /*
1623 // * code=161, hex=0xA1, ascii="!!"
1624 // */
1625 // 0x10, /* 0001 */
1626 // 0x20, /* 0010 */
1627 // 0x00, /* 0000 */
1628 // 0x20, /* 0010 */
1629 // 0x20, /* 0010 */
1630 // 0x00, /* 0000 */
1631
1632 // /*
1633 // * code=162, hex=0xA2, ascii="!""
1634 // */
1635 // 0x10, /* 0001 */
1636 // 0x20, /* 0010 */
1637 // 0x70, /* 0111 */
1638 // 0x50, /* 0101 */
1639 // 0x70, /* 0111 */
1640 // 0x00, /* 0000 */
1641
1642 // /*
1643 // * code=163, hex=0xA3, ascii="!#"
1644 // */
1645 // 0x10, /* 0001 */
1646 // 0x20, /* 0010 */
1647 // 0x00, /* 0000 */
1648 // 0x50, /* 0101 */
1649 // 0x70, /* 0111 */
1650 // 0x00, /* 0000 */
1651
1652 // /*
1653 // * code=164, hex=0xA4, ascii="!$"
1654 // */
1655 // 0x70, /* 0111 */
1656 // 0x00, /* 0000 */
1657 // 0x70, /* 0111 */
1658 // 0x50, /* 0101 */
1659 // 0x50, /* 0101 */
1660 // 0x00, /* 0000 */
1661
1662 // /*
1663 // * code=165, hex=0xA5, ascii="!%"
1664 // */
1665 // 0x70, /* 0111 */
1666 // 0x00, /* 0000 */
1667 // 0x50, /* 0101 */
1668 // 0x70, /* 0111 */
1669 // 0x50, /* 0101 */
1670 // 0x00, /* 0000 */
1671
1672 // /*
1673 // * code=166, hex=0xA6, ascii="!&"
1674 // */
1675 // 0x30, /* 0011 */
1676 // 0x50, /* 0101 */
1677 // 0x70, /* 0111 */
1678 // 0x00, /* 0000 */
1679 // 0x70, /* 0111 */
1680 // 0x00, /* 0000 */
1681
1682 // /*
1683 // * code=167, hex=0xA7, ascii="!'"
1684 // */
1685 // 0x20, /* 0010 */
1686 // 0x50, /* 0101 */
1687 // 0x20, /* 0010 */
1688 // 0x00, /* 0000 */
1689 // 0x70, /* 0111 */
1690 // 0x00, /* 0000 */
1691
1692 // /*
1693 // * code=168, hex=0xA8, ascii="!("
1694 // */
1695 // 0x20, /* 0010 */
1696 // 0x00, /* 0000 */
1697 // 0x20, /* 0010 */
1698 // 0x40, /* 0100 */
1699 // 0x30, /* 0011 */
1700 // 0x00, /* 0000 */
1701
1702 // /*
1703 // * code=169, hex=0xA9, ascii="!)"
1704 // */
1705 // 0x00, /* 0000 */
1706 // 0x70, /* 0111 */
1707 // 0x40, /* 0100 */
1708 // 0x40, /* 0100 */
1709 // 0x00, /* 0000 */
1710 // 0x00, /* 0000 */
1711
1712 // /*
1713 // * code=170, hex=0xAA, ascii="!*"
1714 // */
1715 // 0x00, /* 0000 */
1716 // 0xE0, /* 1110 */
1717 // 0x20, /* 0010 */
1718 // 0x20, /* 0010 */
1719 // 0x00, /* 0000 */
1720 // 0x00, /* 0000 */
1721
1722 // /*
1723 // * code=171, hex=0xAB, ascii="!+"
1724 // */
1725 // 0x40, /* 0100 */
1726 // 0x50, /* 0101 */
1727 // 0x20, /* 0010 */
1728 // 0x50, /* 0101 */
1729 // 0x30, /* 0011 */
1730 // 0x00, /* 0000 */
1731
1732 // /*
1733 // * code=172, hex=0xAC, ascii="!,"
1734 // */
1735 // 0x40, /* 0100 */
1736 // 0x50, /* 0101 */
1737 // 0x20, /* 0010 */
1738 // 0x70, /* 0111 */
1739 // 0x10, /* 0001 */
1740 // 0x00, /* 0000 */
1741
1742 // /*
1743 // * code=173, hex=0xAD, ascii="!-"
1744 // */
1745 // 0x20, /* 0010 */
1746 // 0x00, /* 0000 */
1747 // 0x20, /* 0010 */
1748 // 0x20, /* 0010 */
1749 // 0x20, /* 0010 */
1750 // 0x00, /* 0000 */
1751
1752 // /*
1753 // * code=174, hex=0xAE, ascii="!."
1754 // */
1755 // 0x00, /* 0000 */
1756 // 0x50, /* 0101 */
1757 // 0xA0, /* 1010 */
1758 // 0x50, /* 0101 */
1759 // 0x00, /* 0000 */
1760 // 0x00, /* 0000 */
1761
1762 // /*
1763 // * code=175, hex=0xAF, ascii="!/"
1764 // */
1765 // 0x00, /* 0000 */
1766 // 0xA0, /* 1010 */
1767 // 0x50, /* 0101 */
1768 // 0xA0, /* 1010 */
1769 // 0x00, /* 0000 */
1770 // 0x00, /* 0000 */
1771
1772 // /*
1773 // * code=176, hex=0xB0, ascii="!0"
1774 // */
1775 // 0x40, /* 0100 */
1776 // 0x10, /* 0001 */
1777 // 0x40, /* 0100 */
1778 // 0x10, /* 0001 */
1779 // 0x40, /* 0100 */
1780 // 0x10, /* 0001 */
1781
1782 // /*
1783 // * code=177, hex=0xB1, ascii="!1"
1784 // */
1785 // 0x50, /* 0101 */
1786 // 0xA0, /* 1010 */
1787 // 0x50, /* 0101 */
1788 // 0xA0, /* 1010 */
1789 // 0x50, /* 0101 */
1790 // 0xA0, /* 1010 */
1791
1792 // /*
1793 // * code=178, hex=0xB2, ascii="!2"
1794 // */
1795 // 0xB0, /* 1011 */
1796 // 0xE0, /* 1110 */
1797 // 0xB0, /* 1011 */
1798 // 0xE0, /* 1110 */
1799 // 0xB0, /* 1011 */
1800 // 0xE0, /* 1110 */
1801
1802 // /*
1803 // * code=179, hex=0xB3, ascii="!3"
1804 // */
1805 // 0x20, /* 0010 */
1806 // 0x20, /* 0010 */
1807 // 0x20, /* 0010 */
1808 // 0x20, /* 0010 */
1809 // 0x20, /* 0010 */
1810 // 0x20, /* 0010 */
1811
1812 // /*
1813 // * code=180, hex=0xB4, ascii="!4"
1814 // */
1815 // 0x20, /* 0010 */
1816 // 0x20, /* 0010 */
1817 // 0xE0, /* 1110 */
1818 // 0x20, /* 0010 */
1819 // 0x20, /* 0010 */
1820 // 0x20, /* 0010 */
1821
1822 // /*
1823 // * code=181, hex=0xB5, ascii="!5"
1824 // */
1825 // 0x20, /* 0010 */
1826 // 0xE0, /* 1110 */
1827 // 0x20, /* 0010 */
1828 // 0xE0, /* 1110 */
1829 // 0x20, /* 0010 */
1830 // 0x20, /* 0010 */
1831
1832 // /*
1833 // * code=182, hex=0xB6, ascii="!6"
1834 // */
1835 // 0x50, /* 0101 */
1836 // 0x50, /* 0101 */
1837 // 0xD0, /* 1101 */
1838 // 0x50, /* 0101 */
1839 // 0x50, /* 0101 */
1840 // 0x50, /* 0101 */
1841
1842 // /*
1843 // * code=183, hex=0xB7, ascii="!7"
1844 // */
1845 // 0x00, /* 0000 */
1846 // 0x00, /* 0000 */
1847 // 0xF0, /* 1111 */
1848 // 0x50, /* 0101 */
1849 // 0x50, /* 0101 */
1850 // 0x50, /* 0101 */
1851
1852 // /*
1853 // * code=184, hex=0xB8, ascii="!8"
1854 // */
1855 // 0x00, /* 0000 */
1856 // 0xE0, /* 1110 */
1857 // 0x20, /* 0010 */
1858 // 0xE0, /* 1110 */
1859 // 0x20, /* 0010 */
1860 // 0x20, /* 0010 */
1861
1862 // /*
1863 // * code=185, hex=0xB9, ascii="!9"
1864 // */
1865 // 0x50, /* 0101 */
1866 // 0xD0, /* 1101 */
1867 // 0x10, /* 0001 */
1868 // 0xD0, /* 1101 */
1869 // 0x50, /* 0101 */
1870 // 0x50, /* 0101 */
1871
1872 // /*
1873 // * code=186, hex=0xBA, ascii="!:"
1874 // */
1875 // 0x50, /* 0101 */
1876 // 0x50, /* 0101 */
1877 // 0x50, /* 0101 */
1878 // 0x50, /* 0101 */
1879 // 0x50, /* 0101 */
1880 // 0x50, /* 0101 */
1881
1882 // /*
1883 // * code=187, hex=0xBB, ascii="!;"
1884 // */
1885 // 0x00, /* 0000 */
1886 // 0xF0, /* 1111 */
1887 // 0x10, /* 0001 */
1888 // 0xD0, /* 1101 */
1889 // 0x50, /* 0101 */
1890 // 0x50, /* 0101 */
1891
1892 // /*
1893 // * code=188, hex=0xBC, ascii="!<"
1894 // */
1895 // 0x50, /* 0101 */
1896 // 0xD0, /* 1101 */
1897 // 0x10, /* 0001 */
1898 // 0xF0, /* 1111 */
1899 // 0x00, /* 0000 */
1900 // 0x00, /* 0000 */
1901
1902 // /*
1903 // * code=189, hex=0xBD, ascii="!="
1904 // */
1905 // 0x50, /* 0101 */
1906 // 0x50, /* 0101 */
1907 // 0xF0, /* 1111 */
1908 // 0x00, /* 0000 */
1909 // 0x00, /* 0000 */
1910 // 0x00, /* 0000 */
1911
1912 // /*
1913 // * code=190, hex=0xBE, ascii="!>"
1914 // */
1915 // 0x20, /* 0010 */
1916 // 0xE0, /* 1110 */
1917 // 0x20, /* 0010 */
1918 // 0xE0, /* 1110 */
1919 // 0x00, /* 0000 */
1920 // 0x00, /* 0000 */
1921
1922 // /*
1923 // * code=191, hex=0xBF, ascii="!?"
1924 // */
1925 // 0x00, /* 0000 */
1926 // 0x00, /* 0000 */
1927 // 0xE0, /* 1110 */
1928 // 0x20, /* 0010 */
1929 // 0x20, /* 0010 */
1930 // 0x20, /* 0010 */
1931
1932 // /*
1933 // * code=192, hex=0xC0, ascii="!@"
1934 // */
1935 // 0x20, /* 0010 */
1936 // 0x20, /* 0010 */
1937 // 0x30, /* 0011 */
1938 // 0x00, /* 0000 */
1939 // 0x00, /* 0000 */
1940 // 0x00, /* 0000 */
1941
1942 // /*
1943 // * code=193, hex=0xC1, ascii="!A"
1944 // */
1945 // 0x20, /* 0010 */
1946 // 0x20, /* 0010 */
1947 // 0xF0, /* 1111 */
1948 // 0x00, /* 0000 */
1949 // 0x00, /* 0000 */
1950 // 0x00, /* 0000 */
1951
1952 // /*
1953 // * code=194, hex=0xC2, ascii="!B"
1954 // */
1955 // 0x00, /* 0000 */
1956 // 0x00, /* 0000 */
1957 // 0xF0, /* 1111 */
1958 // 0x20, /* 0010 */
1959 // 0x20, /* 0010 */
1960 // 0x20, /* 0010 */
1961
1962 // /*
1963 // * code=195, hex=0xC3, ascii="!C"
1964 // */
1965 // 0x20, /* 0010 */
1966 // 0x20, /* 0010 */
1967 // 0x30, /* 0011 */
1968 // 0x20, /* 0010 */
1969 // 0x20, /* 0010 */
1970 // 0x20, /* 0010 */
1971
1972 // /*
1973 // * code=196, hex=0xC4, ascii="!D"
1974 // */
1975 // 0x00, /* 0000 */
1976 // 0x00, /* 0000 */
1977 // 0xF0, /* 1111 */
1978 // 0x00, /* 0000 */
1979 // 0x00, /* 0000 */
1980 // 0x00, /* 0000 */
1981
1982 // /*
1983 // * code=197, hex=0xC5, ascii="!E"
1984 // */
1985 // 0x20, /* 0010 */
1986 // 0x20, /* 0010 */
1987 // 0xF0, /* 1111 */
1988 // 0x20, /* 0010 */
1989 // 0x20, /* 0010 */
1990 // 0x20, /* 0010 */
1991
1992 // /*
1993 // * code=198, hex=0xC6, ascii="!F"
1994 // */
1995 // 0x20, /* 0010 */
1996 // 0x30, /* 0011 */
1997 // 0x20, /* 0010 */
1998 // 0x30, /* 0011 */
1999 // 0x20, /* 0010 */
2000 // 0x20, /* 0010 */
2001
2002 // /*
2003 // * code=199, hex=0xC7, ascii="!G"
2004 // */
2005 // 0x50, /* 0101 */
2006 // 0x50, /* 0101 */
2007 // 0x50, /* 0101 */
2008 // 0x50, /* 0101 */
2009 // 0x50, /* 0101 */
2010 // 0x50, /* 0101 */
2011
2012 // /*
2013 // * code=200, hex=0xC8, ascii="!H"
2014 // */
2015 // 0x50, /* 0101 */
2016 // 0x50, /* 0101 */
2017 // 0x40, /* 0100 */
2018 // 0x70, /* 0111 */
2019 // 0x00, /* 0000 */
2020 // 0x00, /* 0000 */
2021
2022 // /*
2023 // * code=201, hex=0xC9, ascii="!I"
2024 // */
2025 // 0x00, /* 0000 */
2026 // 0x70, /* 0111 */
2027 // 0x40, /* 0100 */
2028 // 0x50, /* 0101 */
2029 // 0x50, /* 0101 */
2030 // 0x50, /* 0101 */
2031
2032 // /*
2033 // * code=202, hex=0xCA, ascii="!J"
2034 // */
2035 // 0x50, /* 0101 */
2036 // 0xD0, /* 1101 */
2037 // 0x00, /* 0000 */
2038 // 0xF0, /* 1111 */
2039 // 0x00, /* 0000 */
2040 // 0x00, /* 0000 */
2041
2042 // /*
2043 // * code=203, hex=0xCB, ascii="!K"
2044 // */
2045 // 0x00, /* 0000 */
2046 // 0xF0, /* 1111 */
2047 // 0x00, /* 0000 */
2048 // 0xD0, /* 1101 */
2049 // 0x50, /* 0101 */
2050 // 0x50, /* 0101 */
2051
2052 // /*
2053 // * code=204, hex=0xCC, ascii="!L"
2054 // */
2055 // 0x50, /* 0101 */
2056 // 0x50, /* 0101 */
2057 // 0x40, /* 0100 */
2058 // 0x50, /* 0101 */
2059 // 0x50, /* 0101 */
2060 // 0x50, /* 0101 */
2061
2062 // /*
2063 // * code=205, hex=0xCD, ascii="!M"
2064 // */
2065 // 0x00, /* 0000 */
2066 // 0xF0, /* 1111 */
2067 // 0x00, /* 0000 */
2068 // 0xF0, /* 1111 */
2069 // 0x00, /* 0000 */
2070 // 0x00, /* 0000 */
2071
2072 // /*
2073 // * code=206, hex=0xCE, ascii="!N"
2074 // */
2075 // 0x50, /* 0101 */
2076 // 0xD0, /* 1101 */
2077 // 0x00, /* 0000 */
2078 // 0xD0, /* 1101 */
2079 // 0x50, /* 0101 */
2080 // 0x50, /* 0101 */
2081
2082 // /*
2083 // * code=207, hex=0xCF, ascii="!O"
2084 // */
2085 // 0x20, /* 0010 */
2086 // 0xF0, /* 1111 */
2087 // 0x00, /* 0000 */
2088 // 0xF0, /* 1111 */
2089 // 0x00, /* 0000 */
2090 // 0x00, /* 0000 */
2091
2092 // /*
2093 // * code=208, hex=0xD0, ascii="!P"
2094 // */
2095 // 0x50, /* 0101 */
2096 // 0x50, /* 0101 */
2097 // 0xF0, /* 1111 */
2098 // 0x00, /* 0000 */
2099 // 0x00, /* 0000 */
2100 // 0x00, /* 0000 */
2101
2102 // /*
2103 // * code=209, hex=0xD1, ascii="!Q"
2104 // */
2105 // 0x00, /* 0000 */
2106 // 0xF0, /* 1111 */
2107 // 0x00, /* 0000 */
2108 // 0xF0, /* 1111 */
2109 // 0x20, /* 0010 */
2110 // 0x20, /* 0010 */
2111
2112 // /*
2113 // * code=210, hex=0xD2, ascii="!R"
2114 // */
2115 // 0x00, /* 0000 */
2116 // 0x00, /* 0000 */
2117 // 0xF0, /* 1111 */
2118 // 0x50, /* 0101 */
2119 // 0x50, /* 0101 */
2120 // 0x50, /* 0101 */
2121
2122 // /*
2123 // * code=211, hex=0xD3, ascii="!S"
2124 // */
2125 // 0x50, /* 0101 */
2126 // 0x50, /* 0101 */
2127 // 0x70, /* 0111 */
2128 // 0x00, /* 0000 */
2129 // 0x00, /* 0000 */
2130 // 0x00, /* 0000 */
2131
2132 // /*
2133 // * code=212, hex=0xD4, ascii="!T"
2134 // */
2135 // 0x20, /* 0010 */
2136 // 0x30, /* 0011 */
2137 // 0x20, /* 0010 */
2138 // 0x30, /* 0011 */
2139 // 0x00, /* 0000 */
2140 // 0x00, /* 0000 */
2141
2142 // /*
2143 // * code=213, hex=0xD5, ascii="!U"
2144 // */
2145 // 0x00, /* 0000 */
2146 // 0x30, /* 0011 */
2147 // 0x20, /* 0010 */
2148 // 0x30, /* 0011 */
2149 // 0x20, /* 0010 */
2150 // 0x20, /* 0010 */
2151
2152 // /*
2153 // * code=214, hex=0xD6, ascii="!V"
2154 // */
2155 // 0x00, /* 0000 */
2156 // 0x00, /* 0000 */
2157 // 0x70, /* 0111 */
2158 // 0x50, /* 0101 */
2159 // 0x50, /* 0101 */
2160 // 0x50, /* 0101 */
2161
2162 // /*
2163 // * code=215, hex=0xD7, ascii="!W"
2164 // */
2165 // 0x50, /* 0101 */
2166 // 0x50, /* 0101 */
2167 // 0xD0, /* 1101 */
2168 // 0x50, /* 0101 */
2169 // 0x50, /* 0101 */
2170 // 0x50, /* 0101 */
2171
2172 // /*
2173 // * code=216, hex=0xD8, ascii="!X"
2174 // */
2175 // 0x20, /* 0010 */
2176 // 0xF0, /* 1111 */
2177 // 0x00, /* 0000 */
2178 // 0xF0, /* 1111 */
2179 // 0x20, /* 0010 */
2180 // 0x20, /* 0010 */
2181
2182 // /*
2183 // * code=217, hex=0xD9, ascii="!Y"
2184 // */
2185 // 0x20, /* 0010 */
2186 // 0x20, /* 0010 */
2187 // 0xE0, /* 1110 */
2188 // 0x00, /* 0000 */
2189 // 0x00, /* 0000 */
2190 // 0x00, /* 0000 */
2191
2192 // /*
2193 // * code=218, hex=0xDA, ascii="!Z"
2194 // */
2195 // 0x00, /* 0000 */
2196 // 0x00, /* 0000 */
2197 // 0x30, /* 0011 */
2198 // 0x20, /* 0010 */
2199 // 0x20, /* 0010 */
2200 // 0x20, /* 0010 */
2201
2202 // /*
2203 // * code=219, hex=0xDB, ascii="!["
2204 // */
2205 // 0xF0, /* 1111 */
2206 // 0xF0, /* 1111 */
2207 // 0xF0, /* 1111 */
2208 // 0xF0, /* 1111 */
2209 // 0xF0, /* 1111 */
2210 // 0xF0, /* 1111 */
2211
2212 // /*
2213 // * code=220, hex=0xDC, ascii="!\"
2214 // */
2215 // 0x00, /* 0000 */
2216 // 0x00, /* 0000 */
2217 // 0x00, /* 0000 */
2218 // 0xF0, /* 1111 */
2219 // 0xF0, /* 1111 */
2220 // 0xF0, /* 1111 */
2221
2222 // /*
2223 // * code=221, hex=0xDD, ascii="!]"
2224 // */
2225 // 0xC0, /* 1100 */
2226 // 0xC0, /* 1100 */
2227 // 0xC0, /* 1100 */
2228 // 0xC0, /* 1100 */
2229 // 0xC0, /* 1100 */
2230 // 0xC0, /* 1100 */
2231
2232 // /*
2233 // * code=222, hex=0xDE, ascii="!^"
2234 // */
2235 // 0x30, /* 0011 */
2236 // 0x30, /* 0011 */
2237 // 0x30, /* 0011 */
2238 // 0x30, /* 0011 */
2239 // 0x30, /* 0011 */
2240 // 0x30, /* 0011 */
2241
2242 // /*
2243 // * code=223, hex=0xDF, ascii="!_"
2244 // */
2245 // 0xF0, /* 1111 */
2246 // 0xF0, /* 1111 */
2247 // 0xF0, /* 1111 */
2248 // 0x00, /* 0000 */
2249 // 0x00, /* 0000 */
2250 // 0x00, /* 0000 */
2251
2252 // /*
2253 // * code=224, hex=0xE0, ascii="!`"
2254 // */
2255 // 0x00, /* 0000 */
2256 // 0x00, /* 0000 */
2257 // 0x70, /* 0111 */
2258 // 0x60, /* 0110 */
2259 // 0x70, /* 0111 */
2260 // 0x00, /* 0000 */
2261
2262 // /*
2263 // * code=225, hex=0xE1, ascii="!a"
2264 // */
2265 // 0x20, /* 0010 */
2266 // 0x50, /* 0101 */
2267 // 0x60, /* 0110 */
2268 // 0x50, /* 0101 */
2269 // 0x60, /* 0110 */
2270 // 0x40, /* 0100 */
2271
2272 // /*
2273 // * code=226, hex=0xE2, ascii="!b"
2274 // */
2275 // 0x70, /* 0111 */
2276 // 0x50, /* 0101 */
2277 // 0x40, /* 0100 */
2278 // 0x40, /* 0100 */
2279 // 0x40, /* 0100 */
2280 // 0x00, /* 0000 */
2281
2282 // /*
2283 // * code=227, hex=0xE3, ascii="!c"
2284 // */
2285 // 0x70, /* 0111 */
2286 // 0x50, /* 0101 */
2287 // 0x50, /* 0101 */
2288 // 0x50, /* 0101 */
2289 // 0x50, /* 0101 */
2290 // 0x00, /* 0000 */
2291
2292 // /*
2293 // * code=228, hex=0xE4, ascii="!d"
2294 // */
2295 // 0x70, /* 0111 */
2296 // 0x40, /* 0100 */
2297 // 0x20, /* 0010 */
2298 // 0x40, /* 0100 */
2299 // 0x70, /* 0111 */
2300 // 0x00, /* 0000 */
2301
2302 // /*
2303 // * code=229, hex=0xE5, ascii="!e"
2304 // */
2305 // 0x00, /* 0000 */
2306 // 0x00, /* 0000 */
2307 // 0x30, /* 0011 */
2308 // 0x50, /* 0101 */
2309 // 0x20, /* 0010 */
2310 // 0x00, /* 0000 */
2311
2312 // /*
2313 // * code=230, hex=0xE6, ascii="!f"
2314 // */
2315 // 0x00, /* 0000 */
2316 // 0x00, /* 0000 */
2317 // 0x50, /* 0101 */
2318 // 0x50, /* 0101 */
2319 // 0x70, /* 0111 */
2320 // 0x40, /* 0100 */
2321
2322 // /*
2323 // * code=231, hex=0xE7, ascii="!g"
2324 // */
2325 // 0x00, /* 0000 */
2326 // 0x10, /* 0001 */
2327 // 0x60, /* 0110 */
2328 // 0x20, /* 0010 */
2329 // 0x20, /* 0010 */
2330 // 0x00, /* 0000 */
2331
2332 // /*
2333 // * code=232, hex=0xE8, ascii="!h"
2334 // */
2335 // 0x70, /* 0111 */
2336 // 0x20, /* 0010 */
2337 // 0x50, /* 0101 */
2338 // 0x20, /* 0010 */
2339 // 0x70, /* 0111 */
2340 // 0x00, /* 0000 */
2341
2342 // /*
2343 // * code=233, hex=0xE9, ascii="!i"
2344 // */
2345 // 0x20, /* 0010 */
2346 // 0x50, /* 0101 */
2347 // 0x70, /* 0111 */
2348 // 0x50, /* 0101 */
2349 // 0x20, /* 0010 */
2350 // 0x00, /* 0000 */
2351
2352 // /*
2353 // * code=234, hex=0xEA, ascii="!j"
2354 // */
2355 // 0x00, /* 0000 */
2356 // 0x20, /* 0010 */
2357 // 0x50, /* 0101 */
2358 // 0x50, /* 0101 */
2359 // 0x50, /* 0101 */
2360 // 0x00, /* 0000 */
2361
2362 // /*
2363 // * code=235, hex=0xEB, ascii="!k"
2364 // */
2365 // 0x30, /* 0011 */
2366 // 0x40, /* 0100 */
2367 // 0x20, /* 0010 */
2368 // 0x50, /* 0101 */
2369 // 0x20, /* 0010 */
2370 // 0x00, /* 0000 */
2371
2372 // /*
2373 // * code=236, hex=0xEC, ascii="!l"
2374 // */
2375 // 0x00, /* 0000 */
2376 // 0x00, /* 0000 */
2377 // 0x70, /* 0111 */
2378 // 0x50, /* 0101 */
2379 // 0x70, /* 0111 */
2380 // 0x00, /* 0000 */
2381
2382 // /*
2383 // * code=237, hex=0xED, ascii="!m"
2384 // */
2385 // 0x20, /* 0010 */
2386 // 0x70, /* 0111 */
2387 // 0x50, /* 0101 */
2388 // 0x70, /* 0111 */
2389 // 0x20, /* 0010 */
2390 // 0x00, /* 0000 */
2391
2392 // /*
2393 // * code=238, hex=0xEE, ascii="!n"
2394 // */
2395 // 0x30, /* 0011 */
2396 // 0x40, /* 0100 */
2397 // 0x70, /* 0111 */
2398 // 0x40, /* 0100 */
2399 // 0x30, /* 0011 */
2400 // 0x00, /* 0000 */
2401
2402 // /*
2403 // * code=239, hex=0xEF, ascii="!o"
2404 // */
2405 // 0x20, /* 0010 */
2406 // 0x50, /* 0101 */
2407 // 0x50, /* 0101 */
2408 // 0x50, /* 0101 */
2409 // 0x50, /* 0101 */
2410 // 0x00, /* 0000 */
2411
2412 // /*
2413 // * code=240, hex=0xF0, ascii="!p"
2414 // */
2415 // 0x70, /* 0111 */
2416 // 0x00, /* 0000 */
2417 // 0x70, /* 0111 */
2418 // 0x00, /* 0000 */
2419 // 0x70, /* 0111 */
2420 // 0x00, /* 0000 */
2421
2422 // /*
2423 // * code=241, hex=0xF1, ascii="!q"
2424 // */
2425 // 0x20, /* 0010 */
2426 // 0x70, /* 0111 */
2427 // 0x20, /* 0010 */
2428 // 0x00, /* 0000 */
2429 // 0x70, /* 0111 */
2430 // 0x00, /* 0000 */
2431
2432 // /*
2433 // * code=242, hex=0xF2, ascii="!r"
2434 // */
2435 // 0x60, /* 0110 */
2436 // 0x10, /* 0001 */
2437 // 0x60, /* 0110 */
2438 // 0x00, /* 0000 */
2439 // 0x70, /* 0111 */
2440 // 0x00, /* 0000 */
2441
2442 // /*
2443 // * code=243, hex=0xF3, ascii="!s"
2444 // */
2445 // 0x30, /* 0011 */
2446 // 0x40, /* 0100 */
2447 // 0x30, /* 0011 */
2448 // 0x00, /* 0000 */
2449 // 0x70, /* 0111 */
2450 // 0x00, /* 0000 */
2451
2452 // /*
2453 // * code=244, hex=0xF4, ascii="!t"
2454 // */
2455 // 0x00, /* 0000 */
2456 // 0x10, /* 0001 */
2457 // 0x20, /* 0010 */
2458 // 0x20, /* 0010 */
2459 // 0x20, /* 0010 */
2460 // 0x20, /* 0010 */
2461
2462 // /*
2463 // * code=245, hex=0xF5, ascii="!u"
2464 // */
2465 // 0x20, /* 0010 */
2466 // 0x20, /* 0010 */
2467 // 0x20, /* 0010 */
2468 // 0x20, /* 0010 */
2469 // 0x40, /* 0100 */
2470 // 0x00, /* 0000 */
2471
2472 // /*
2473 // * code=246, hex=0xF6, ascii="!v"
2474 // */
2475 // 0x20, /* 0010 */
2476 // 0x00, /* 0000 */
2477 // 0x70, /* 0111 */
2478 // 0x00, /* 0000 */
2479 // 0x20, /* 0010 */
2480 // 0x00, /* 0000 */
2481
2482 // /*
2483 // * code=247, hex=0xF7, ascii="!w"
2484 // */
2485 // 0x00, /* 0000 */
2486 // 0x50, /* 0101 */
2487 // 0xA0, /* 1010 */
2488 // 0x50, /* 0101 */
2489 // 0xA0, /* 1010 */
2490 // 0x00, /* 0000 */
2491
2492 // /*
2493 // * code=248, hex=0xF8, ascii="!x"
2494 // */
2495 // 0x20, /* 0010 */
2496 // 0x50, /* 0101 */
2497 // 0x20, /* 0010 */
2498 // 0x00, /* 0000 */
2499 // 0x00, /* 0000 */
2500 // 0x00, /* 0000 */
2501
2502 // /*
2503 // * code=249, hex=0xF9, ascii="!y"
2504 // */
2505 // 0x00, /* 0000 */
2506 // 0x20, /* 0010 */
2507 // 0x70, /* 0111 */
2508 // 0x20, /* 0010 */
2509 // 0x00, /* 0000 */
2510 // 0x00, /* 0000 */
2511
2512 // /*
2513 // * code=250, hex=0xFA, ascii="!z"
2514 // */
2515 // 0x00, /* 0000 */
2516 // 0x00, /* 0000 */
2517 // 0x20, /* 0010 */
2518 // 0x00, /* 0000 */
2519 // 0x00, /* 0000 */
2520 // 0x00, /* 0000 */
2521
2522 // /*
2523 // * code=251, hex=0xFB, ascii="!{"
2524 // */
2525 // 0x30, /* 0011 */
2526 // 0x20, /* 0010 */
2527 // 0x20, /* 0010 */
2528 // 0x60, /* 0110 */
2529 // 0x20, /* 0010 */
2530 // 0x00, /* 0000 */
2531
2532 // /*
2533 // * code=252, hex=0xFC, ascii="!|"
2534 // */
2535 // 0x70, /* 0111 */
2536 // 0x50, /* 0101 */
2537 // 0x50, /* 0101 */
2538 // 0x00, /* 0000 */
2539 // 0x00, /* 0000 */
2540 // 0x00, /* 0000 */
2541
2542 // /*
2543 // * code=253, hex=0xFD, ascii="!}"
2544 // */
2545 // 0x60, /* 0110 */
2546 // 0x20, /* 0010 */
2547 // 0x40, /* 0100 */
2548 // 0x60, /* 0110 */
2549 // 0x00, /* 0000 */
2550 // 0x00, /* 0000 */
2551
2552 // /*
2553 // * code=254, hex=0xFE, ascii="!~"
2554 // */
2555 // 0x00, /* 0000 */
2556 // 0x00, /* 0000 */
2557 // 0x60, /* 0110 */
2558 // 0x60, /* 0110 */
2559 // 0x00, /* 0000 */
2560 // 0x00, /* 0000 */
2561
2562 // /*
2563 // * code=255, hex=0xFF, ascii="!^Ÿ"
2564 // */
2565 // 0x00, /* 0000 */
2566 // 0x00, /* 0000 */
2567 // 0x00, /* 0000 */
2568 // 0x00, /* 0000 */
2569 // 0x00, /* 0000 */
2570 // 0x00, /* 0000 */
2571};

◆ console_font_5x12

const unsigned char fl::console_font_5x12[]
static

Definition at line 7 of file console_font_5x12.h.

7 {
8
9// code points 0-31 and 127-255 are commented out to save memory, they contain extra characters (CP437),
10// which could be used with an UTF-8 to CP437 conversion
11
12 // /*
13 // * code=0, hex=0x00, ascii="^@"
14 // */
15 // 0x00, /* 00000 */
16 // 0x00, /* 00000 */
17 // 0x00, /* 00000 */
18 // 0x00, /* 00000 */
19 // 0x00, /* 00000 */
20 // 0x00, /* 00000 */
21 // 0x00, /* 00000 */
22 // 0x00, /* 00000 */
23 // 0x00, /* 00000 */
24 // 0x00, /* 00000 */
25 // 0x00, /* 00000 */
26 // 0x00, /* 00000 */
27
28 // /*
29 // * code=1, hex=0x01, ascii="^A"
30 // */
31 // 0x70, /* 01110 */
32 // 0x88, /* 10001 */
33 // 0x88, /* 10001 */
34 // 0xD8, /* 11011 */
35 // 0x88, /* 10001 */
36 // 0x88, /* 10001 */
37 // 0xD8, /* 11011 */
38 // 0xA8, /* 10101 */
39 // 0x88, /* 10001 */
40 // 0x70, /* 01110 */
41 // 0x00, /* 00000 */
42 // 0x00, /* 00000 */
43
44 // /*
45 // * code=2, hex=0x02, ascii="^B"
46 // */
47 // 0x70, /* 01110 */
48 // 0xF8, /* 11111 */
49 // 0xF8, /* 11111 */
50 // 0xA8, /* 10101 */
51 // 0xF8, /* 11111 */
52 // 0xF8, /* 11111 */
53 // 0xA8, /* 10101 */
54 // 0xD8, /* 11011 */
55 // 0xF8, /* 11111 */
56 // 0x70, /* 01110 */
57 // 0x00, /* 00000 */
58 // 0x00, /* 00000 */
59
60 // /*
61 // * code=3, hex=0x03, ascii="^C"
62 // */
63 // 0x00, /* 00000 */
64 // 0x50, /* 01010 */
65 // 0xD8, /* 11011 */
66 // 0xF8, /* 11111 */
67 // 0xF8, /* 11111 */
68 // 0xF8, /* 11111 */
69 // 0xF8, /* 11111 */
70 // 0x70, /* 01110 */
71 // 0x70, /* 01110 */
72 // 0x20, /* 00100 */
73 // 0x20, /* 00100 */
74 // 0x00, /* 00000 */
75
76 // /*
77 // * code=4, hex=0x04, ascii="^D"
78 // */
79 // 0x20, /* 00100 */
80 // 0x20, /* 00100 */
81 // 0x70, /* 01110 */
82 // 0x70, /* 01110 */
83 // 0xF8, /* 11111 */
84 // 0xF8, /* 11111 */
85 // 0xF8, /* 11111 */
86 // 0x70, /* 01110 */
87 // 0x70, /* 01110 */
88 // 0x20, /* 00100 */
89 // 0x20, /* 00100 */
90 // 0x00, /* 00000 */
91
92 // /*
93 // * code=5, hex=0x05, ascii="^E"
94 // */
95 // 0x20, /* 00100 */
96 // 0x70, /* 01110 */
97 // 0x70, /* 01110 */
98 // 0x70, /* 01110 */
99 // 0x20, /* 00100 */
100 // 0xF8, /* 11111 */
101 // 0xF8, /* 11111 */
102 // 0x70, /* 01110 */
103 // 0x20, /* 00100 */
104 // 0x70, /* 01110 */
105 // 0x00, /* 00000 */
106 // 0x00, /* 00000 */
107
108 // /*
109 // * code=6, hex=0x06, ascii="^F"
110 // */
111 // 0x20, /* 00100 */
112 // 0x20, /* 00100 */
113 // 0x70, /* 01110 */
114 // 0x70, /* 01110 */
115 // 0xF8, /* 11111 */
116 // 0xF8, /* 11111 */
117 // 0xF8, /* 11111 */
118 // 0x70, /* 01110 */
119 // 0x20, /* 00100 */
120 // 0x70, /* 01110 */
121 // 0x00, /* 00000 */
122 // 0x00, /* 00000 */
123
124 // /*
125 // * code=7, hex=0x07, ascii="^G"
126 // */
127 // 0x00, /* 00000 */
128 // 0x00, /* 00000 */
129 // 0x00, /* 00000 */
130 // 0x00, /* 00000 */
131 // 0x00, /* 00000 */
132 // 0x60, /* 01100 */
133 // 0x60, /* 01100 */
134 // 0x00, /* 00000 */
135 // 0x00, /* 00000 */
136 // 0x00, /* 00000 */
137 // 0x00, /* 00000 */
138 // 0x00, /* 00000 */
139
140 // /*
141 // * code=8, hex=0x08, ascii="^H"
142 // */
143 // 0xF8, /* 11111 */
144 // 0xF8, /* 11111 */
145 // 0xF8, /* 11111 */
146 // 0xF8, /* 11111 */
147 // 0xF8, /* 11111 */
148 // 0x98, /* 10011 */
149 // 0x98, /* 10011 */
150 // 0xF8, /* 11111 */
151 // 0xF8, /* 11111 */
152 // 0xF8, /* 11111 */
153 // 0xF8, /* 11111 */
154 // 0xF8, /* 11111 */
155
156 // /*
157 // * code=9, hex=0x09, ascii="^I"
158 // */
159 // 0x00, /* 00000 */
160 // 0x00, /* 00000 */
161 // 0x00, /* 00000 */
162 // 0x00, /* 00000 */
163 // 0x70, /* 01110 */
164 // 0x50, /* 01010 */
165 // 0x50, /* 01010 */
166 // 0x70, /* 01110 */
167 // 0x00, /* 00000 */
168 // 0x00, /* 00000 */
169 // 0x00, /* 00000 */
170 // 0x00, /* 00000 */
171
172 // /*
173 // * code=10, hex=0x0A, ascii="^J"
174 // */
175 // 0xF8, /* 11111 */
176 // 0xF8, /* 11111 */
177 // 0xF8, /* 11111 */
178 // 0xF8, /* 11111 */
179 // 0x88, /* 10001 */
180 // 0xA8, /* 10101 */
181 // 0xA8, /* 10101 */
182 // 0x88, /* 10001 */
183 // 0xF8, /* 11111 */
184 // 0xF8, /* 11111 */
185 // 0xF8, /* 11111 */
186 // 0xF8, /* 11111 */
187
188 // /*
189 // * code=11, hex=0x0B, ascii="^K"
190 // */
191 // 0x00, /* 00000 */
192 // 0x00, /* 00000 */
193 // 0x38, /* 00111 */
194 // 0x18, /* 00011 */
195 // 0x28, /* 00101 */
196 // 0x60, /* 01100 */
197 // 0x90, /* 10010 */
198 // 0x90, /* 10010 */
199 // 0x90, /* 10010 */
200 // 0x60, /* 01100 */
201 // 0x00, /* 00000 */
202 // 0x00, /* 00000 */
203
204 // /*
205 // * code=12, hex=0x0C, ascii="^L"
206 // */
207 // 0x00, /* 00000 */
208 // 0x60, /* 01100 */
209 // 0x90, /* 10010 */
210 // 0x90, /* 10010 */
211 // 0x90, /* 10010 */
212 // 0x60, /* 01100 */
213 // 0x40, /* 01000 */
214 // 0x40, /* 01000 */
215 // 0xE0, /* 11100 */
216 // 0x40, /* 01000 */
217 // 0x00, /* 00000 */
218 // 0x00, /* 00000 */
219
220 // /*
221 // * code=13, hex=0x0D, ascii="^M"
222 // */
223 // 0x00, /* 00000 */
224 // 0x00, /* 00000 */
225 // 0x20, /* 00100 */
226 // 0x30, /* 00110 */
227 // 0x30, /* 00110 */
228 // 0x20, /* 00100 */
229 // 0x20, /* 00100 */
230 // 0x20, /* 00100 */
231 // 0xE0, /* 11100 */
232 // 0xC0, /* 11000 */
233 // 0x00, /* 00000 */
234 // 0x00, /* 00000 */
235
236 // /*
237 // * code=14, hex=0x0E, ascii="^N"
238 // */
239 // 0x30, /* 00110 */
240 // 0x50, /* 01010 */
241 // 0x70, /* 01110 */
242 // 0x50, /* 01010 */
243 // 0x50, /* 01010 */
244 // 0x50, /* 01010 */
245 // 0x70, /* 01110 */
246 // 0x70, /* 01110 */
247 // 0xC0, /* 11000 */
248 // 0xC0, /* 11000 */
249 // 0x00, /* 00000 */
250 // 0x00, /* 00000 */
251
252 // /*
253 // * code=15, hex=0x0F, ascii="^O"
254 // */
255 // 0x00, /* 00000 */
256 // 0x00, /* 00000 */
257 // 0x00, /* 00000 */
258 // 0x00, /* 00000 */
259 // 0xA8, /* 10101 */
260 // 0x70, /* 01110 */
261 // 0x88, /* 10001 */
262 // 0x70, /* 01110 */
263 // 0xA8, /* 10101 */
264 // 0x00, /* 00000 */
265 // 0x00, /* 00000 */
266 // 0x00, /* 00000 */
267
268 // /*
269 // * code=16, hex=0x10, ascii="^P"
270 // */
271 // 0x00, /* 00000 */
272 // 0x00, /* 00000 */
273 // 0x80, /* 10000 */
274 // 0xC0, /* 11000 */
275 // 0xE0, /* 11100 */
276 // 0xF0, /* 11110 */
277 // 0xE0, /* 11100 */
278 // 0xC0, /* 11000 */
279 // 0x80, /* 10000 */
280 // 0x00, /* 00000 */
281 // 0x00, /* 00000 */
282 // 0x00, /* 00000 */
283
284 // /*
285 // * code=17, hex=0x11, ascii="^Q"
286 // */
287 // 0x00, /* 00000 */
288 // 0x00, /* 00000 */
289 // 0x10, /* 00010 */
290 // 0x30, /* 00110 */
291 // 0x70, /* 01110 */
292 // 0xF0, /* 11110 */
293 // 0x70, /* 01110 */
294 // 0x30, /* 00110 */
295 // 0x10, /* 00010 */
296 // 0x00, /* 00000 */
297 // 0x00, /* 00000 */
298 // 0x00, /* 00000 */
299
300 // /*
301 // * code=18, hex=0x12, ascii="^R"
302 // */
303 // 0x00, /* 00000 */
304 // 0x20, /* 00100 */
305 // 0x70, /* 01110 */
306 // 0xA8, /* 10101 */
307 // 0x20, /* 00100 */
308 // 0x20, /* 00100 */
309 // 0x20, /* 00100 */
310 // 0xA8, /* 10101 */
311 // 0x70, /* 01110 */
312 // 0x20, /* 00100 */
313 // 0x00, /* 00000 */
314 // 0x00, /* 00000 */
315
316 // /*
317 // * code=19, hex=0x13, ascii="^S"
318 // */
319 // 0x00, /* 00000 */
320 // 0x00, /* 00000 */
321 // 0x50, /* 01010 */
322 // 0x50, /* 01010 */
323 // 0x50, /* 01010 */
324 // 0x50, /* 01010 */
325 // 0x50, /* 01010 */
326 // 0x00, /* 00000 */
327 // 0x50, /* 01010 */
328 // 0x50, /* 01010 */
329 // 0x00, /* 00000 */
330 // 0x00, /* 00000 */
331
332 // /*
333 // * code=20, hex=0x14, ascii="^T"
334 // */
335 // 0x00, /* 00000 */
336 // 0x70, /* 01110 */
337 // 0xD0, /* 11010 */
338 // 0xD0, /* 11010 */
339 // 0xD0, /* 11010 */
340 // 0xD0, /* 11010 */
341 // 0x50, /* 01010 */
342 // 0x50, /* 01010 */
343 // 0x50, /* 01010 */
344 // 0x50, /* 01010 */
345 // 0x00, /* 00000 */
346 // 0x00, /* 00000 */
347
348 // /*
349 // * code=21, hex=0x15, ascii="^U"
350 // */
351 // 0x00, /* 00000 */
352 // 0x60, /* 01100 */
353 // 0x90, /* 10010 */
354 // 0x80, /* 10000 */
355 // 0x60, /* 01100 */
356 // 0x90, /* 10010 */
357 // 0x60, /* 01100 */
358 // 0x10, /* 00010 */
359 // 0x90, /* 10010 */
360 // 0x60, /* 01100 */
361 // 0x00, /* 00000 */
362 // 0x00, /* 00000 */
363
364 // /*
365 // * code=22, hex=0x16, ascii="^V"
366 // */
367 // 0x00, /* 00000 */
368 // 0x00, /* 00000 */
369 // 0x00, /* 00000 */
370 // 0x00, /* 00000 */
371 // 0x00, /* 00000 */
372 // 0x00, /* 00000 */
373 // 0x00, /* 00000 */
374 // 0x00, /* 00000 */
375 // 0xF0, /* 11110 */
376 // 0xF0, /* 11110 */
377 // 0x00, /* 00000 */
378 // 0x00, /* 00000 */
379
380 // /*
381 // * code=23, hex=0x17, ascii="^W"
382 // */
383 // 0x00, /* 00000 */
384 // 0x20, /* 00100 */
385 // 0x70, /* 01110 */
386 // 0xA8, /* 10101 */
387 // 0x20, /* 00100 */
388 // 0x20, /* 00100 */
389 // 0x20, /* 00100 */
390 // 0xA8, /* 10101 */
391 // 0x70, /* 01110 */
392 // 0x20, /* 00100 */
393 // 0xF8, /* 11111 */
394 // 0x00, /* 00000 */
395
396 // /*
397 // * code=24, hex=0x18, ascii="^X"
398 // */
399 // 0x00, /* 00000 */
400 // 0x20, /* 00100 */
401 // 0x70, /* 01110 */
402 // 0xA8, /* 10101 */
403 // 0x20, /* 00100 */
404 // 0x20, /* 00100 */
405 // 0x20, /* 00100 */
406 // 0x20, /* 00100 */
407 // 0x20, /* 00100 */
408 // 0x20, /* 00100 */
409 // 0x00, /* 00000 */
410 // 0x00, /* 00000 */
411
412 // /*
413 // * code=25, hex=0x19, ascii="^Y"
414 // */
415 // 0x00, /* 00000 */
416 // 0x00, /* 00000 */
417 // 0x20, /* 00100 */
418 // 0x20, /* 00100 */
419 // 0x20, /* 00100 */
420 // 0x20, /* 00100 */
421 // 0x20, /* 00100 */
422 // 0xA8, /* 10101 */
423 // 0x70, /* 01110 */
424 // 0x20, /* 00100 */
425 // 0x00, /* 00000 */
426 // 0x00, /* 00000 */
427
428 // /*
429 // * code=26, hex=0x1A, ascii="^Z"
430 // */
431 // 0x00, /* 00000 */
432 // 0x00, /* 00000 */
433 // 0x00, /* 00000 */
434 // 0x40, /* 01000 */
435 // 0x20, /* 00100 */
436 // 0xF0, /* 11110 */
437 // 0x20, /* 00100 */
438 // 0x40, /* 01000 */
439 // 0x00, /* 00000 */
440 // 0x00, /* 00000 */
441 // 0x00, /* 00000 */
442 // 0x00, /* 00000 */
443
444 // /*
445 // * code=27, hex=0x1B, ascii="^["
446 // */
447 // 0x00, /* 00000 */
448 // 0x00, /* 00000 */
449 // 0x00, /* 00000 */
450 // 0x20, /* 00100 */
451 // 0x40, /* 01000 */
452 // 0xF0, /* 11110 */
453 // 0x40, /* 01000 */
454 // 0x20, /* 00100 */
455 // 0x00, /* 00000 */
456 // 0x00, /* 00000 */
457 // 0x00, /* 00000 */
458 // 0x00, /* 00000 */
459
460 // /*
461 // * code=28, hex=0x1C, ascii="^\"
462 // */
463 // 0x00, /* 00000 */
464 // 0x00, /* 00000 */
465 // 0x00, /* 00000 */
466 // 0x00, /* 00000 */
467 // 0x00, /* 00000 */
468 // 0x80, /* 10000 */
469 // 0x80, /* 10000 */
470 // 0xF0, /* 11110 */
471 // 0x00, /* 00000 */
472 // 0x00, /* 00000 */
473 // 0x00, /* 00000 */
474 // 0x00, /* 00000 */
475
476 // /*
477 // * code=29, hex=0x1D, ascii="^]"
478 // */
479 // 0x00, /* 00000 */
480 // 0x00, /* 00000 */
481 // 0x00, /* 00000 */
482 // 0x50, /* 01010 */
483 // 0x50, /* 01010 */
484 // 0xF8, /* 11111 */
485 // 0x50, /* 01010 */
486 // 0x50, /* 01010 */
487 // 0x00, /* 00000 */
488 // 0x00, /* 00000 */
489 // 0x00, /* 00000 */
490 // 0x00, /* 00000 */
491
492 // /*
493 // * code=30, hex=0x1E, ascii="^^"
494 // */
495 // 0x00, /* 00000 */
496 // 0x00, /* 00000 */
497 // 0x00, /* 00000 */
498 // 0x20, /* 00100 */
499 // 0x20, /* 00100 */
500 // 0x70, /* 01110 */
501 // 0x70, /* 01110 */
502 // 0xF8, /* 11111 */
503 // 0x00, /* 00000 */
504 // 0x00, /* 00000 */
505 // 0x00, /* 00000 */
506 // 0x00, /* 00000 */
507
508 // /*
509 // * code=31, hex=0x1F, ascii="^_"
510 // */
511 // 0x00, /* 00000 */
512 // 0x00, /* 00000 */
513 // 0x00, /* 00000 */
514 // 0xF8, /* 11111 */
515 // 0x70, /* 01110 */
516 // 0x70, /* 01110 */
517 // 0x20, /* 00100 */
518 // 0x20, /* 00100 */
519 // 0x00, /* 00000 */
520 // 0x00, /* 00000 */
521 // 0x00, /* 00000 */
522 // 0x00, /* 00000 */
523
524 /*
525 * code=32, hex=0x20, ascii=" "
526 */
527 0x00, /* 00000 */
528 0x00, /* 00000 */
529 0x00, /* 00000 */
530 0x00, /* 00000 */
531 0x00, /* 00000 */
532 0x00, /* 00000 */
533 0x00, /* 00000 */
534 0x00, /* 00000 */
535 0x00, /* 00000 */
536 0x00, /* 00000 */
537 0x00, /* 00000 */
538 0x00, /* 00000 */
539
540 /*
541 * code=33, hex=0x21, ascii="!"
542 */
543 0x00, /* 00000 */
544 0x20, /* 00100 */
545 0x20, /* 00100 */
546 0x20, /* 00100 */
547 0x20, /* 00100 */
548 0x20, /* 00100 */
549 0x20, /* 00100 */
550 0x00, /* 00000 */
551 0x20, /* 00100 */
552 0x20, /* 00100 */
553 0x00, /* 00000 */
554 0x00, /* 00000 */
555
556 /*
557 * code=34, hex=0x22, ascii="""
558 */
559 0x50, /* 01010 */
560 0x50, /* 01010 */
561 0x50, /* 01010 */
562 0x50, /* 01010 */
563 0x00, /* 00000 */
564 0x00, /* 00000 */
565 0x00, /* 00000 */
566 0x00, /* 00000 */
567 0x00, /* 00000 */
568 0x00, /* 00000 */
569 0x00, /* 00000 */
570 0x00, /* 00000 */
571
572 /*
573 * code=35, hex=0x23, ascii="#"
574 */
575 0x00, /* 00000 */
576 0x50, /* 01010 */
577 0x50, /* 01010 */
578 0xF8, /* 11111 */
579 0x50, /* 01010 */
580 0x50, /* 01010 */
581 0xF8, /* 11111 */
582 0x50, /* 01010 */
583 0x50, /* 01010 */
584 0x00, /* 00000 */
585 0x00, /* 00000 */
586 0x00, /* 00000 */
587
588 /*
589 * code=36, hex=0x24, ascii="$"
590 */
591 0x00, /* 00000 */
592 0x40, /* 01000 */
593 0x60, /* 01100 */
594 0x90, /* 10010 */
595 0x80, /* 10000 */
596 0x40, /* 01000 */
597 0x20, /* 00100 */
598 0x10, /* 00010 */
599 0x90, /* 10010 */
600 0x60, /* 01100 */
601 0x20, /* 00100 */
602 0x00, /* 00000 */
603
604 /*
605 * code=37, hex=0x25, ascii="%"
606 */
607 0x00, /* 00000 */
608 0xD0, /* 11010 */
609 0xD0, /* 11010 */
610 0x20, /* 00100 */
611 0x20, /* 00100 */
612 0x40, /* 01000 */
613 0x40, /* 01000 */
614 0x40, /* 01000 */
615 0xB0, /* 10110 */
616 0xB0, /* 10110 */
617 0x00, /* 00000 */
618 0x00, /* 00000 */
619
620 /*
621 * code=38, hex=0x26, ascii="&"
622 */
623 0x00, /* 00000 */
624 0x40, /* 01000 */
625 0xA0, /* 10100 */
626 0xA0, /* 10100 */
627 0xA0, /* 10100 */
628 0x40, /* 01000 */
629 0xA8, /* 10101 */
630 0x90, /* 10010 */
631 0x90, /* 10010 */
632 0x68, /* 01101 */
633 0x00, /* 00000 */
634 0x00, /* 00000 */
635
636 /*
637 * code=39, hex=0x27, ascii="'"
638 */
639 0x30, /* 00110 */
640 0x30, /* 00110 */
641 0x10, /* 00010 */
642 0x20, /* 00100 */
643 0x00, /* 00000 */
644 0x00, /* 00000 */
645 0x00, /* 00000 */
646 0x00, /* 00000 */
647 0x00, /* 00000 */
648 0x00, /* 00000 */
649 0x00, /* 00000 */
650 0x00, /* 00000 */
651
652 /*
653 * code=40, hex=0x28, ascii="("
654 */
655 0x00, /* 00000 */
656 0x20, /* 00100 */
657 0x40, /* 01000 */
658 0x40, /* 01000 */
659 0x40, /* 01000 */
660 0x40, /* 01000 */
661 0x40, /* 01000 */
662 0x40, /* 01000 */
663 0x40, /* 01000 */
664 0x20, /* 00100 */
665 0x00, /* 00000 */
666 0x00, /* 00000 */
667
668 /*
669 * code=41, hex=0x29, ascii=")"
670 */
671 0x00, /* 00000 */
672 0x40, /* 01000 */
673 0x20, /* 00100 */
674 0x20, /* 00100 */
675 0x20, /* 00100 */
676 0x20, /* 00100 */
677 0x20, /* 00100 */
678 0x20, /* 00100 */
679 0x20, /* 00100 */
680 0x40, /* 01000 */
681 0x00, /* 00000 */
682 0x00, /* 00000 */
683
684 /*
685 * code=42, hex=0x2A, ascii="*"
686 */
687 0x00, /* 00000 */
688 0x00, /* 00000 */
689 0x20, /* 00100 */
690 0xA8, /* 10101 */
691 0x70, /* 01110 */
692 0x70, /* 01110 */
693 0xA8, /* 10101 */
694 0x20, /* 00100 */
695 0x00, /* 00000 */
696 0x00, /* 00000 */
697 0x00, /* 00000 */
698 0x00, /* 00000 */
699
700 /*
701 * code=43, hex=0x2B, ascii="+"
702 */
703 0x00, /* 00000 */
704 0x00, /* 00000 */
705 0x00, /* 00000 */
706 0x20, /* 00100 */
707 0x20, /* 00100 */
708 0xF8, /* 11111 */
709 0x20, /* 00100 */
710 0x20, /* 00100 */
711 0x00, /* 00000 */
712 0x00, /* 00000 */
713 0x00, /* 00000 */
714 0x00, /* 00000 */
715
716 /*
717 * code=44, hex=0x2C, ascii=","
718 */
719 0x00, /* 00000 */
720 0x00, /* 00000 */
721 0x00, /* 00000 */
722 0x00, /* 00000 */
723 0x00, /* 00000 */
724 0x00, /* 00000 */
725 0x00, /* 00000 */
726 0x00, /* 00000 */
727 0x60, /* 01100 */
728 0x60, /* 01100 */
729 0x20, /* 00100 */
730 0x40, /* 01000 */
731
732 /*
733 * code=45, hex=0x2D, ascii="-"
734 */
735 0x00, /* 00000 */
736 0x00, /* 00000 */
737 0x00, /* 00000 */
738 0x00, /* 00000 */
739 0x00, /* 00000 */
740 0xF0, /* 11110 */
741 0x00, /* 00000 */
742 0x00, /* 00000 */
743 0x00, /* 00000 */
744 0x00, /* 00000 */
745 0x00, /* 00000 */
746 0x00, /* 00000 */
747
748 /*
749 * code=46, hex=0x2E, ascii="."
750 */
751 0x00, /* 00000 */
752 0x00, /* 00000 */
753 0x00, /* 00000 */
754 0x00, /* 00000 */
755 0x00, /* 00000 */
756 0x00, /* 00000 */
757 0x00, /* 00000 */
758 0x00, /* 00000 */
759 0x60, /* 01100 */
760 0x60, /* 01100 */
761 0x00, /* 00000 */
762 0x00, /* 00000 */
763
764 /*
765 * code=47, hex=0x2F, ascii="/"
766 */
767 0x00, /* 00000 */
768 0x10, /* 00010 */
769 0x10, /* 00010 */
770 0x20, /* 00100 */
771 0x20, /* 00100 */
772 0x40, /* 01000 */
773 0x40, /* 01000 */
774 0x40, /* 01000 */
775 0x80, /* 10000 */
776 0x80, /* 10000 */
777 0x00, /* 00000 */
778 0x00, /* 00000 */
779
780 /*
781 * code=48, hex=0x30, ascii="0"
782 */
783 0x00, /* 00000 */
784 0x70, /* 01110 */
785 0x90, /* 10010 */
786 0x90, /* 10010 */
787 0x90, /* 10010 */
788 0x90, /* 10010 */
789 0x90, /* 10010 */
790 0x90, /* 10010 */
791 0x90, /* 10010 */
792 0xE0, /* 11100 */
793 0x00, /* 00000 */
794 0x00, /* 00000 */
795
796 /*
797 * code=49, hex=0x31, ascii="1"
798 */
799 0x00, /* 00000 */
800 0x20, /* 00100 */
801 0x60, /* 01100 */
802 0xA0, /* 10100 */
803 0x20, /* 00100 */
804 0x20, /* 00100 */
805 0x20, /* 00100 */
806 0x20, /* 00100 */
807 0x20, /* 00100 */
808 0xF0, /* 11110 */
809 0x00, /* 00000 */
810 0x00, /* 00000 */
811
812 /*
813 * code=50, hex=0x32, ascii="2"
814 */
815 0x00, /* 00000 */
816 0x60, /* 01100 */
817 0x90, /* 10010 */
818 0x90, /* 10010 */
819 0x10, /* 00010 */
820 0x20, /* 00100 */
821 0x40, /* 01000 */
822 0x80, /* 10000 */
823 0x80, /* 10000 */
824 0xF0, /* 11110 */
825 0x00, /* 00000 */
826 0x00, /* 00000 */
827
828 /*
829 * code=51, hex=0x33, ascii="3"
830 */
831 0x00, /* 00000 */
832 0x60, /* 01100 */
833 0x90, /* 10010 */
834 0x10, /* 00010 */
835 0x10, /* 00010 */
836 0x60, /* 01100 */
837 0x10, /* 00010 */
838 0x10, /* 00010 */
839 0x90, /* 10010 */
840 0x60, /* 01100 */
841 0x00, /* 00000 */
842 0x00, /* 00000 */
843
844 /*
845 * code=52, hex=0x34, ascii="4"
846 */
847 0x00, /* 00000 */
848 0x10, /* 00010 */
849 0x30, /* 00110 */
850 0x50, /* 01010 */
851 0x50, /* 01010 */
852 0x90, /* 10010 */
853 0xF0, /* 11110 */
854 0x10, /* 00010 */
855 0x10, /* 00010 */
856 0x10, /* 00010 */
857 0x00, /* 00000 */
858 0x00, /* 00000 */
859
860 /*
861 * code=53, hex=0x35, ascii="5"
862 */
863 0x00, /* 00000 */
864 0xF0, /* 11110 */
865 0x80, /* 10000 */
866 0x80, /* 10000 */
867 0x80, /* 10000 */
868 0xE0, /* 11100 */
869 0x10, /* 00010 */
870 0x10, /* 00010 */
871 0x90, /* 10010 */
872 0x60, /* 01100 */
873 0x00, /* 00000 */
874 0x00, /* 00000 */
875
876 /*
877 * code=54, hex=0x36, ascii="6"
878 */
879 0x00, /* 00000 */
880 0x30, /* 00110 */
881 0x40, /* 01000 */
882 0x80, /* 10000 */
883 0xE0, /* 11100 */
884 0x90, /* 10010 */
885 0x90, /* 10010 */
886 0x90, /* 10010 */
887 0x90, /* 10010 */
888 0x60, /* 01100 */
889 0x00, /* 00000 */
890 0x00, /* 00000 */
891
892 /*
893 * code=55, hex=0x37, ascii="7"
894 */
895 0x00, /* 00000 */
896 0xF0, /* 11110 */
897 0x10, /* 00010 */
898 0x10, /* 00010 */
899 0x10, /* 00010 */
900 0x20, /* 00100 */
901 0x20, /* 00100 */
902 0x40, /* 01000 */
903 0x40, /* 01000 */
904 0x40, /* 01000 */
905 0x00, /* 00000 */
906 0x00, /* 00000 */
907
908 /*
909 * code=56, hex=0x38, ascii="8"
910 */
911 0x00, /* 00000 */
912 0x60, /* 01100 */
913 0x90, /* 10010 */
914 0x90, /* 10010 */
915 0x90, /* 10010 */
916 0x60, /* 01100 */
917 0x90, /* 10010 */
918 0x90, /* 10010 */
919 0x90, /* 10010 */
920 0x60, /* 01100 */
921 0x00, /* 00000 */
922 0x00, /* 00000 */
923
924 /*
925 * code=57, hex=0x39, ascii="9"
926 */
927 0x00, /* 00000 */
928 0x60, /* 01100 */
929 0x90, /* 10010 */
930 0x90, /* 10010 */
931 0x90, /* 10010 */
932 0x90, /* 10010 */
933 0x70, /* 01110 */
934 0x10, /* 00010 */
935 0x20, /* 00100 */
936 0xC0, /* 11000 */
937 0x00, /* 00000 */
938 0x00, /* 00000 */
939
940 /*
941 * code=58, hex=0x3A, ascii=":"
942 */
943 0x00, /* 00000 */
944 0x00, /* 00000 */
945 0x00, /* 00000 */
946 0x00, /* 00000 */
947 0x60, /* 01100 */
948 0x60, /* 01100 */
949 0x00, /* 00000 */
950 0x00, /* 00000 */
951 0x60, /* 01100 */
952 0x60, /* 01100 */
953 0x00, /* 00000 */
954 0x00, /* 00000 */
955
956 /*
957 * code=59, hex=0x3B, ascii=";"
958 */
959 0x00, /* 00000 */
960 0x00, /* 00000 */
961 0x00, /* 00000 */
962 0x00, /* 00000 */
963 0x60, /* 01100 */
964 0x60, /* 01100 */
965 0x00, /* 00000 */
966 0x00, /* 00000 */
967 0x60, /* 01100 */
968 0x60, /* 01100 */
969 0x20, /* 00100 */
970 0x40, /* 01000 */
971
972 /*
973 * code=60, hex=0x3C, ascii="<"
974 */
975 0x00, /* 00000 */
976 0x00, /* 00000 */
977 0x10, /* 00010 */
978 0x20, /* 00100 */
979 0x40, /* 01000 */
980 0x80, /* 10000 */
981 0x80, /* 10000 */
982 0x40, /* 01000 */
983 0x20, /* 00100 */
984 0x10, /* 00010 */
985 0x00, /* 00000 */
986 0x00, /* 00000 */
987
988 /*
989 * code=61, hex=0x3D, ascii="="
990 */
991 0x00, /* 00000 */
992 0x00, /* 00000 */
993 0x00, /* 00000 */
994 0x00, /* 00000 */
995 0x00, /* 00000 */
996 0xF0, /* 11110 */
997 0x00, /* 00000 */
998 0xF0, /* 11110 */
999 0x00, /* 00000 */
1000 0x00, /* 00000 */
1001 0x00, /* 00000 */
1002 0x00, /* 00000 */
1003
1004 /*
1005 * code=62, hex=0x3E, ascii=">"
1006 */
1007 0x00, /* 00000 */
1008 0x00, /* 00000 */
1009 0x80, /* 10000 */
1010 0x40, /* 01000 */
1011 0x20, /* 00100 */
1012 0x10, /* 00010 */
1013 0x10, /* 00010 */
1014 0x20, /* 00100 */
1015 0x40, /* 01000 */
1016 0x80, /* 10000 */
1017 0x00, /* 00000 */
1018 0x00, /* 00000 */
1019
1020 /*
1021 * code=63, hex=0x3F, ascii="?"
1022 */
1023 0x00, /* 00000 */
1024 0x60, /* 01100 */
1025 0x90, /* 10010 */
1026 0x90, /* 10010 */
1027 0x10, /* 00010 */
1028 0x20, /* 00100 */
1029 0x20, /* 00100 */
1030 0x00, /* 00000 */
1031 0x20, /* 00100 */
1032 0x20, /* 00100 */
1033 0x00, /* 00000 */
1034 0x00, /* 00000 */
1035
1036 /*
1037 * code=64, hex=0x40, ascii="@"
1038 */
1039 0x00, /* 00000 */
1040 0x60, /* 01100 */
1041 0x90, /* 10010 */
1042 0x90, /* 10010 */
1043 0x90, /* 10010 */
1044 0xB0, /* 10110 */
1045 0xB0, /* 10110 */
1046 0x80, /* 10000 */
1047 0x80, /* 10000 */
1048 0x70, /* 01110 */
1049 0x00, /* 00000 */
1050 0x00, /* 00000 */
1051
1052 /*
1053 * code=65, hex=0x41, ascii="A"
1054 */
1055 0x00, /* 00000 */
1056 0x60, /* 01100 */
1057 0x90, /* 10010 */
1058 0x90, /* 10010 */
1059 0x90, /* 10010 */
1060 0xF0, /* 11110 */
1061 0x90, /* 10010 */
1062 0x90, /* 10010 */
1063 0x90, /* 10010 */
1064 0x90, /* 10010 */
1065 0x00, /* 00000 */
1066 0x00, /* 00000 */
1067
1068 /*
1069 * code=66, hex=0x42, ascii="B"
1070 */
1071 0x00, /* 00000 */
1072 0xE0, /* 11100 */
1073 0x90, /* 10010 */
1074 0x90, /* 10010 */
1075 0x90, /* 10010 */
1076 0xE0, /* 11100 */
1077 0x90, /* 10010 */
1078 0x90, /* 10010 */
1079 0x90, /* 10010 */
1080 0xE0, /* 11100 */
1081 0x00, /* 00000 */
1082 0x00, /* 00000 */
1083
1084 /*
1085 * code=67, hex=0x43, ascii="C"
1086 */
1087 0x00, /* 00000 */
1088 0x60, /* 01100 */
1089 0x90, /* 10010 */
1090 0x90, /* 10010 */
1091 0x80, /* 10000 */
1092 0x80, /* 10000 */
1093 0x80, /* 10000 */
1094 0x80, /* 10000 */
1095 0x90, /* 10010 */
1096 0x60, /* 01100 */
1097 0x00, /* 00000 */
1098 0x00, /* 00000 */
1099
1100 /*
1101 * code=68, hex=0x44, ascii="D"
1102 */
1103 0x00, /* 00000 */
1104 0xE0, /* 11100 */
1105 0x90, /* 10010 */
1106 0x90, /* 10010 */
1107 0x90, /* 10010 */
1108 0x90, /* 10010 */
1109 0x90, /* 10010 */
1110 0x90, /* 10010 */
1111 0x90, /* 10010 */
1112 0xE0, /* 11100 */
1113 0x00, /* 00000 */
1114 0x00, /* 00000 */
1115
1116 /*
1117 * code=69, hex=0x45, ascii="E"
1118 */
1119 0x00, /* 00000 */
1120 0xF0, /* 11110 */
1121 0x80, /* 10000 */
1122 0x80, /* 10000 */
1123 0x80, /* 10000 */
1124 0xF0, /* 11110 */
1125 0x80, /* 10000 */
1126 0x80, /* 10000 */
1127 0x80, /* 10000 */
1128 0xF0, /* 11110 */
1129 0x00, /* 00000 */
1130 0x00, /* 00000 */
1131
1132 /*
1133 * code=70, hex=0x46, ascii="F"
1134 */
1135 0x00, /* 00000 */
1136 0xF0, /* 11110 */
1137 0x80, /* 10000 */
1138 0x80, /* 10000 */
1139 0x80, /* 10000 */
1140 0xF0, /* 11110 */
1141 0x80, /* 10000 */
1142 0x80, /* 10000 */
1143 0x80, /* 10000 */
1144 0x80, /* 10000 */
1145 0x00, /* 00000 */
1146 0x00, /* 00000 */
1147
1148 /*
1149 * code=71, hex=0x47, ascii="G"
1150 */
1151 0x00, /* 00000 */
1152 0x60, /* 01100 */
1153 0x90, /* 10010 */
1154 0x90, /* 10010 */
1155 0x80, /* 10000 */
1156 0x80, /* 10000 */
1157 0xB0, /* 10110 */
1158 0x90, /* 10010 */
1159 0x90, /* 10010 */
1160 0x60, /* 01100 */
1161 0x00, /* 00000 */
1162 0x00, /* 00000 */
1163
1164 /*
1165 * code=72, hex=0x48, ascii="H"
1166 */
1167 0x00, /* 00000 */
1168 0x90, /* 10010 */
1169 0x90, /* 10010 */
1170 0x90, /* 10010 */
1171 0x90, /* 10010 */
1172 0xF0, /* 11110 */
1173 0x90, /* 10010 */
1174 0x90, /* 10010 */
1175 0x90, /* 10010 */
1176 0x90, /* 10010 */
1177 0x00, /* 00000 */
1178 0x00, /* 00000 */
1179
1180 /*
1181 * code=73, hex=0x49, ascii="I"
1182 */
1183 0x00, /* 00000 */
1184 0x70, /* 01110 */
1185 0x20, /* 00100 */
1186 0x20, /* 00100 */
1187 0x20, /* 00100 */
1188 0x20, /* 00100 */
1189 0x20, /* 00100 */
1190 0x20, /* 00100 */
1191 0x20, /* 00100 */
1192 0x70, /* 01110 */
1193 0x00, /* 00000 */
1194 0x00, /* 00000 */
1195
1196 /*
1197 * code=74, hex=0x4A, ascii="J"
1198 */
1199 0x00, /* 00000 */
1200 0x70, /* 01110 */
1201 0x20, /* 00100 */
1202 0x20, /* 00100 */
1203 0x20, /* 00100 */
1204 0x20, /* 00100 */
1205 0x20, /* 00100 */
1206 0xA0, /* 10100 */
1207 0xA0, /* 10100 */
1208 0x40, /* 01000 */
1209 0x00, /* 00000 */
1210 0x00, /* 00000 */
1211
1212 /*
1213 * code=75, hex=0x4B, ascii="K"
1214 */
1215 0x00, /* 00000 */
1216 0x90, /* 10010 */
1217 0x90, /* 10010 */
1218 0xA0, /* 10100 */
1219 0xA0, /* 10100 */
1220 0xC0, /* 11000 */
1221 0xA0, /* 10100 */
1222 0xA0, /* 10100 */
1223 0x90, /* 10010 */
1224 0x90, /* 10010 */
1225 0x00, /* 00000 */
1226 0x00, /* 00000 */
1227
1228 /*
1229 * code=76, hex=0x4C, ascii="L"
1230 */
1231 0x00, /* 00000 */
1232 0x80, /* 10000 */
1233 0x80, /* 10000 */
1234 0x80, /* 10000 */
1235 0x80, /* 10000 */
1236 0x80, /* 10000 */
1237 0x80, /* 10000 */
1238 0x80, /* 10000 */
1239 0x80, /* 10000 */
1240 0xF0, /* 11110 */
1241 0x00, /* 00000 */
1242 0x00, /* 00000 */
1243
1244 /*
1245 * code=77, hex=0x4D, ascii="M"
1246 */
1247 0x00, /* 00000 */
1248 0x90, /* 10010 */
1249 0x90, /* 10010 */
1250 0xF0, /* 11110 */
1251 0xF0, /* 11110 */
1252 0x90, /* 10010 */
1253 0x90, /* 10010 */
1254 0x90, /* 10010 */
1255 0x90, /* 10010 */
1256 0x90, /* 10010 */
1257 0x00, /* 00000 */
1258 0x00, /* 00000 */
1259
1260 /*
1261 * code=78, hex=0x4E, ascii="N"
1262 */
1263 0x00, /* 00000 */
1264 0x90, /* 10010 */
1265 0x90, /* 10010 */
1266 0xD0, /* 11010 */
1267 0xD0, /* 11010 */
1268 0xB0, /* 10110 */
1269 0xB0, /* 10110 */
1270 0x90, /* 10010 */
1271 0x90, /* 10010 */
1272 0x90, /* 10010 */
1273 0x00, /* 00000 */
1274 0x00, /* 00000 */
1275
1276 /*
1277 * code=79, hex=0x4F, ascii="O"
1278 */
1279 0x00, /* 00000 */
1280 0x60, /* 01100 */
1281 0x90, /* 10010 */
1282 0x90, /* 10010 */
1283 0x90, /* 10010 */
1284 0x90, /* 10010 */
1285 0x90, /* 10010 */
1286 0x90, /* 10010 */
1287 0x90, /* 10010 */
1288 0x60, /* 01100 */
1289 0x00, /* 00000 */
1290 0x00, /* 00000 */
1291
1292 /*
1293 * code=80, hex=0x50, ascii="P"
1294 */
1295 0x00, /* 00000 */
1296 0xE0, /* 11100 */
1297 0x90, /* 10010 */
1298 0x90, /* 10010 */
1299 0x90, /* 10010 */
1300 0xE0, /* 11100 */
1301 0x80, /* 10000 */
1302 0x80, /* 10000 */
1303 0x80, /* 10000 */
1304 0x80, /* 10000 */
1305 0x00, /* 00000 */
1306 0x00, /* 00000 */
1307
1308 /*
1309 * code=81, hex=0x51, ascii="Q"
1310 */
1311 0x00, /* 00000 */
1312 0x60, /* 01100 */
1313 0x90, /* 10010 */
1314 0x90, /* 10010 */
1315 0x90, /* 10010 */
1316 0x90, /* 10010 */
1317 0x90, /* 10010 */
1318 0x90, /* 10010 */
1319 0x90, /* 10010 */
1320 0x60, /* 01100 */
1321 0x20, /* 00100 */
1322 0x10, /* 00010 */
1323
1324 /*
1325 * code=82, hex=0x52, ascii="R"
1326 */
1327 0x00, /* 00000 */
1328 0xE0, /* 11100 */
1329 0x90, /* 10010 */
1330 0x90, /* 10010 */
1331 0x90, /* 10010 */
1332 0xE0, /* 11100 */
1333 0xC0, /* 11000 */
1334 0xA0, /* 10100 */
1335 0x90, /* 10010 */
1336 0x90, /* 10010 */
1337 0x00, /* 00000 */
1338 0x00, /* 00000 */
1339
1340 /*
1341 * code=83, hex=0x53, ascii="S"
1342 */
1343 0x00, /* 00000 */
1344 0x60, /* 01100 */
1345 0x90, /* 10010 */
1346 0x90, /* 10010 */
1347 0x80, /* 10000 */
1348 0x60, /* 01100 */
1349 0x10, /* 00010 */
1350 0x90, /* 10010 */
1351 0x90, /* 10010 */
1352 0x60, /* 01100 */
1353 0x00, /* 00000 */
1354 0x00, /* 00000 */
1355
1356 /*
1357 * code=84, hex=0x54, ascii="T"
1358 */
1359 0x00, /* 00000 */
1360 0xF8, /* 11111 */
1361 0x20, /* 00100 */
1362 0x20, /* 00100 */
1363 0x20, /* 00100 */
1364 0x20, /* 00100 */
1365 0x20, /* 00100 */
1366 0x20, /* 00100 */
1367 0x20, /* 00100 */
1368 0x20, /* 00100 */
1369 0x00, /* 00000 */
1370 0x00, /* 00000 */
1371
1372 /*
1373 * code=85, hex=0x55, ascii="U"
1374 */
1375 0x00, /* 00000 */
1376 0x90, /* 10010 */
1377 0x90, /* 10010 */
1378 0x90, /* 10010 */
1379 0x90, /* 10010 */
1380 0x90, /* 10010 */
1381 0x90, /* 10010 */
1382 0x90, /* 10010 */
1383 0x90, /* 10010 */
1384 0x60, /* 01100 */
1385 0x00, /* 00000 */
1386 0x00, /* 00000 */
1387
1388 /*
1389 * code=86, hex=0x56, ascii="V"
1390 */
1391 0x00, /* 00000 */
1392 0x90, /* 10010 */
1393 0x90, /* 10010 */
1394 0x90, /* 10010 */
1395 0x90, /* 10010 */
1396 0x90, /* 10010 */
1397 0x50, /* 01010 */
1398 0x50, /* 01010 */
1399 0x20, /* 00100 */
1400 0x20, /* 00100 */
1401 0x00, /* 00000 */
1402 0x00, /* 00000 */
1403
1404 /*
1405 * code=87, hex=0x57, ascii="W"
1406 */
1407 0x00, /* 00000 */
1408 0x90, /* 10010 */
1409 0x90, /* 10010 */
1410 0x90, /* 10010 */
1411 0x90, /* 10010 */
1412 0x90, /* 10010 */
1413 0x90, /* 10010 */
1414 0xF0, /* 11110 */
1415 0x90, /* 10010 */
1416 0x90, /* 10010 */
1417 0x00, /* 00000 */
1418 0x00, /* 00000 */
1419
1420 /*
1421 * code=88, hex=0x58, ascii="X"
1422 */
1423 0x00, /* 00000 */
1424 0x90, /* 10010 */
1425 0x90, /* 10010 */
1426 0x90, /* 10010 */
1427 0x60, /* 01100 */
1428 0x60, /* 01100 */
1429 0x60, /* 01100 */
1430 0x90, /* 10010 */
1431 0x90, /* 10010 */
1432 0x90, /* 10010 */
1433 0x00, /* 00000 */
1434 0x00, /* 00000 */
1435
1436 /*
1437 * code=89, hex=0x59, ascii="Y"
1438 */
1439 0x00, /* 00000 */
1440 0x88, /* 10001 */
1441 0x88, /* 10001 */
1442 0x88, /* 10001 */
1443 0x50, /* 01010 */
1444 0x50, /* 01010 */
1445 0x20, /* 00100 */
1446 0x20, /* 00100 */
1447 0x20, /* 00100 */
1448 0x20, /* 00100 */
1449 0x00, /* 00000 */
1450 0x00, /* 00000 */
1451
1452 /*
1453 * code=90, hex=0x5A, ascii="Z"
1454 */
1455 0x00, /* 00000 */
1456 0xF0, /* 11110 */
1457 0x10, /* 00010 */
1458 0x20, /* 00100 */
1459 0x20, /* 00100 */
1460 0x40, /* 01000 */
1461 0x40, /* 01000 */
1462 0x80, /* 10000 */
1463 0x80, /* 10000 */
1464 0xF0, /* 11110 */
1465 0x00, /* 00000 */
1466 0x00, /* 00000 */
1467
1468 /*
1469 * code=91, hex=0x5B, ascii="["
1470 */
1471 0x00, /* 00000 */
1472 0x60, /* 01100 */
1473 0x40, /* 01000 */
1474 0x40, /* 01000 */
1475 0x40, /* 01000 */
1476 0x40, /* 01000 */
1477 0x40, /* 01000 */
1478 0x40, /* 01000 */
1479 0x40, /* 01000 */
1480 0x60, /* 01100 */
1481 0x00, /* 00000 */
1482 0x00, /* 00000 */
1483
1484 /*
1485 * code=92, hex=0x5C, ascii="\"
1486 */
1487 0x00, /* 00000 */
1488 0x80, /* 10000 */
1489 0x80, /* 10000 */
1490 0x40, /* 01000 */
1491 0x40, /* 01000 */
1492 0x20, /* 00100 */
1493 0x20, /* 00100 */
1494 0x20, /* 00100 */
1495 0x10, /* 00010 */
1496 0x10, /* 00010 */
1497 0x00, /* 00000 */
1498 0x00, /* 00000 */
1499
1500 /*
1501 * code=93, hex=0x5D, ascii="]"
1502 */
1503 0x00, /* 00000 */
1504 0x60, /* 01100 */
1505 0x20, /* 00100 */
1506 0x20, /* 00100 */
1507 0x20, /* 00100 */
1508 0x20, /* 00100 */
1509 0x20, /* 00100 */
1510 0x20, /* 00100 */
1511 0x20, /* 00100 */
1512 0x60, /* 01100 */
1513 0x00, /* 00000 */
1514 0x00, /* 00000 */
1515
1516 /*
1517 * code=94, hex=0x5E, ascii="^"
1518 */
1519 0x00, /* 00000 */
1520 0x20, /* 00100 */
1521 0x50, /* 01010 */
1522 0x00, /* 00000 */
1523 0x00, /* 00000 */
1524 0x00, /* 00000 */
1525 0x00, /* 00000 */
1526 0x00, /* 00000 */
1527 0x00, /* 00000 */
1528 0x00, /* 00000 */
1529 0x00, /* 00000 */
1530 0x00, /* 00000 */
1531
1532 /*
1533 * code=95, hex=0x5F, ascii="_"
1534 */
1535 0x00, /* 00000 */
1536 0x00, /* 00000 */
1537 0x00, /* 00000 */
1538 0x00, /* 00000 */
1539 0x00, /* 00000 */
1540 0x00, /* 00000 */
1541 0x00, /* 00000 */
1542 0x00, /* 00000 */
1543 0x00, /* 00000 */
1544 0x00, /* 00000 */
1545 0x00, /* 00000 */
1546 0xF8, /* 11111 */
1547
1548 /*
1549 * code=96, hex=0x60, ascii="`"
1550 */
1551 0x60, /* 01100 */
1552 0x60, /* 01100 */
1553 0x40, /* 01000 */
1554 0x20, /* 00100 */
1555 0x00, /* 00000 */
1556 0x00, /* 00000 */
1557 0x00, /* 00000 */
1558 0x00, /* 00000 */
1559 0x00, /* 00000 */
1560 0x00, /* 00000 */
1561 0x00, /* 00000 */
1562 0x00, /* 00000 */
1563
1564 /*
1565 * code=97, hex=0x61, ascii="a"
1566 */
1567 0x00, /* 00000 */
1568 0x00, /* 00000 */
1569 0x00, /* 00000 */
1570 0x00, /* 00000 */
1571 0x60, /* 01100 */
1572 0x10, /* 00010 */
1573 0x70, /* 01110 */
1574 0x90, /* 10010 */
1575 0x90, /* 10010 */
1576 0x70, /* 01110 */
1577 0x00, /* 00000 */
1578 0x00, /* 00000 */
1579
1580 /*
1581 * code=98, hex=0x62, ascii="b"
1582 */
1583 0x00, /* 00000 */
1584 0x80, /* 10000 */
1585 0x80, /* 10000 */
1586 0x80, /* 10000 */
1587 0xE0, /* 11100 */
1588 0x90, /* 10010 */
1589 0x90, /* 10010 */
1590 0x90, /* 10010 */
1591 0x90, /* 10010 */
1592 0xE0, /* 11100 */
1593 0x00, /* 00000 */
1594 0x00, /* 00000 */
1595
1596 /*
1597 * code=99, hex=0x63, ascii="c"
1598 */
1599 0x00, /* 00000 */
1600 0x00, /* 00000 */
1601 0x00, /* 00000 */
1602 0x00, /* 00000 */
1603 0x70, /* 01110 */
1604 0x80, /* 10000 */
1605 0x80, /* 10000 */
1606 0x80, /* 10000 */
1607 0x80, /* 10000 */
1608 0x70, /* 01110 */
1609 0x00, /* 00000 */
1610 0x00, /* 00000 */
1611
1612 /*
1613 * code=100, hex=0x64, ascii="d"
1614 */
1615 0x00, /* 00000 */
1616 0x10, /* 00010 */
1617 0x10, /* 00010 */
1618 0x10, /* 00010 */
1619 0x70, /* 01110 */
1620 0x90, /* 10010 */
1621 0x90, /* 10010 */
1622 0x90, /* 10010 */
1623 0x90, /* 10010 */
1624 0x70, /* 01110 */
1625 0x00, /* 00000 */
1626 0x00, /* 00000 */
1627
1628 /*
1629 * code=101, hex=0x65, ascii="e"
1630 */
1631 0x00, /* 00000 */
1632 0x00, /* 00000 */
1633 0x00, /* 00000 */
1634 0x00, /* 00000 */
1635 0x60, /* 01100 */
1636 0x90, /* 10010 */
1637 0x90, /* 10010 */
1638 0xF0, /* 11110 */
1639 0x80, /* 10000 */
1640 0x70, /* 01110 */
1641 0x00, /* 00000 */
1642 0x00, /* 00000 */
1643
1644 /*
1645 * code=102, hex=0x66, ascii="f"
1646 */
1647 0x00, /* 00000 */
1648 0x20, /* 00100 */
1649 0x40, /* 01000 */
1650 0x40, /* 01000 */
1651 0xE0, /* 11100 */
1652 0x40, /* 01000 */
1653 0x40, /* 01000 */
1654 0x40, /* 01000 */
1655 0x40, /* 01000 */
1656 0x40, /* 01000 */
1657 0x00, /* 00000 */
1658 0x00, /* 00000 */
1659
1660 /*
1661 * code=103, hex=0x67, ascii="g"
1662 */
1663 0x00, /* 00000 */
1664 0x00, /* 00000 */
1665 0x00, /* 00000 */
1666 0x00, /* 00000 */
1667 0x70, /* 01110 */
1668 0x90, /* 10010 */
1669 0x90, /* 10010 */
1670 0x90, /* 10010 */
1671 0x90, /* 10010 */
1672 0x70, /* 01110 */
1673 0x10, /* 00010 */
1674 0x60, /* 01100 */
1675
1676 /*
1677 * code=104, hex=0x68, ascii="h"
1678 */
1679 0x00, /* 00000 */
1680 0x80, /* 10000 */
1681 0x80, /* 10000 */
1682 0x80, /* 10000 */
1683 0xE0, /* 11100 */
1684 0x90, /* 10010 */
1685 0x90, /* 10010 */
1686 0x90, /* 10010 */
1687 0x90, /* 10010 */
1688 0x90, /* 10010 */
1689 0x00, /* 00000 */
1690 0x00, /* 00000 */
1691
1692 /*
1693 * code=105, hex=0x69, ascii="i"
1694 */
1695 0x00, /* 00000 */
1696 0x00, /* 00000 */
1697 0x20, /* 00100 */
1698 0x00, /* 00000 */
1699 0x20, /* 00100 */
1700 0x20, /* 00100 */
1701 0x20, /* 00100 */
1702 0x20, /* 00100 */
1703 0x20, /* 00100 */
1704 0x70, /* 01110 */
1705 0x00, /* 00000 */
1706 0x00, /* 00000 */
1707
1708 /*
1709 * code=106, hex=0x6A, ascii="j"
1710 */
1711 0x00, /* 00000 */
1712 0x00, /* 00000 */
1713 0x20, /* 00100 */
1714 0x00, /* 00000 */
1715 0x20, /* 00100 */
1716 0x20, /* 00100 */
1717 0x20, /* 00100 */
1718 0x20, /* 00100 */
1719 0x20, /* 00100 */
1720 0x20, /* 00100 */
1721 0xA0, /* 10100 */
1722 0x40, /* 01000 */
1723
1724 /*
1725 * code=107, hex=0x6B, ascii="k"
1726 */
1727 0x00, /* 00000 */
1728 0x80, /* 10000 */
1729 0x80, /* 10000 */
1730 0x80, /* 10000 */
1731 0x90, /* 10010 */
1732 0xA0, /* 10100 */
1733 0xC0, /* 11000 */
1734 0xC0, /* 11000 */
1735 0xA0, /* 10100 */
1736 0x90, /* 10010 */
1737 0x00, /* 00000 */
1738 0x00, /* 00000 */
1739
1740 /*
1741 * code=108, hex=0x6C, ascii="l"
1742 */
1743 0x00, /* 00000 */
1744 0x60, /* 01100 */
1745 0x20, /* 00100 */
1746 0x20, /* 00100 */
1747 0x20, /* 00100 */
1748 0x20, /* 00100 */
1749 0x20, /* 00100 */
1750 0x20, /* 00100 */
1751 0x20, /* 00100 */
1752 0x70, /* 01110 */
1753 0x00, /* 00000 */
1754 0x00, /* 00000 */
1755
1756 /*
1757 * code=109, hex=0x6D, ascii="m"
1758 */
1759 0x00, /* 00000 */
1760 0x00, /* 00000 */
1761 0x00, /* 00000 */
1762 0x00, /* 00000 */
1763 0x90, /* 10010 */
1764 0xF0, /* 11110 */
1765 0x90, /* 10010 */
1766 0x90, /* 10010 */
1767 0x90, /* 10010 */
1768 0x90, /* 10010 */
1769 0x00, /* 00000 */
1770 0x00, /* 00000 */
1771
1772 /*
1773 * code=110, hex=0x6E, ascii="n"
1774 */
1775 0x00, /* 00000 */
1776 0x00, /* 00000 */
1777 0x00, /* 00000 */
1778 0x00, /* 00000 */
1779 0xA0, /* 10100 */
1780 0xD0, /* 11010 */
1781 0x90, /* 10010 */
1782 0x90, /* 10010 */
1783 0x90, /* 10010 */
1784 0x90, /* 10010 */
1785 0x00, /* 00000 */
1786 0x00, /* 00000 */
1787
1788 /*
1789 * code=111, hex=0x6F, ascii="o"
1790 */
1791 0x00, /* 00000 */
1792 0x00, /* 00000 */
1793 0x00, /* 00000 */
1794 0x00, /* 00000 */
1795 0x60, /* 01100 */
1796 0x90, /* 10010 */
1797 0x90, /* 10010 */
1798 0x90, /* 10010 */
1799 0x90, /* 10010 */
1800 0x60, /* 01100 */
1801 0x00, /* 00000 */
1802 0x00, /* 00000 */
1803
1804 /*
1805 * code=112, hex=0x70, ascii="p"
1806 */
1807 0x00, /* 00000 */
1808 0x00, /* 00000 */
1809 0x00, /* 00000 */
1810 0x00, /* 00000 */
1811 0xE0, /* 11100 */
1812 0x90, /* 10010 */
1813 0x90, /* 10010 */
1814 0x90, /* 10010 */
1815 0x90, /* 10010 */
1816 0xE0, /* 11100 */
1817 0x80, /* 10000 */
1818 0x80, /* 10000 */
1819
1820 /*
1821 * code=113, hex=0x71, ascii="q"
1822 */
1823 0x00, /* 00000 */
1824 0x00, /* 00000 */
1825 0x00, /* 00000 */
1826 0x00, /* 00000 */
1827 0x70, /* 01110 */
1828 0x90, /* 10010 */
1829 0x90, /* 10010 */
1830 0x90, /* 10010 */
1831 0x90, /* 10010 */
1832 0x70, /* 01110 */
1833 0x10, /* 00010 */
1834 0x10, /* 00010 */
1835
1836 /*
1837 * code=114, hex=0x72, ascii="r"
1838 */
1839 0x00, /* 00000 */
1840 0x00, /* 00000 */
1841 0x00, /* 00000 */
1842 0x00, /* 00000 */
1843 0xB0, /* 10110 */
1844 0x50, /* 01010 */
1845 0x40, /* 01000 */
1846 0x40, /* 01000 */
1847 0x40, /* 01000 */
1848 0x40, /* 01000 */
1849 0x00, /* 00000 */
1850 0x00, /* 00000 */
1851
1852 /*
1853 * code=115, hex=0x73, ascii="s"
1854 */
1855 0x00, /* 00000 */
1856 0x00, /* 00000 */
1857 0x00, /* 00000 */
1858 0x00, /* 00000 */
1859 0x60, /* 01100 */
1860 0x90, /* 10010 */
1861 0x40, /* 01000 */
1862 0x20, /* 00100 */
1863 0x90, /* 10010 */
1864 0x60, /* 01100 */
1865 0x00, /* 00000 */
1866 0x00, /* 00000 */
1867
1868 /*
1869 * code=116, hex=0x74, ascii="t"
1870 */
1871 0x00, /* 00000 */
1872 0x00, /* 00000 */
1873 0x40, /* 01000 */
1874 0x40, /* 01000 */
1875 0xE0, /* 11100 */
1876 0x40, /* 01000 */
1877 0x40, /* 01000 */
1878 0x40, /* 01000 */
1879 0x40, /* 01000 */
1880 0x60, /* 01100 */
1881 0x00, /* 00000 */
1882 0x00, /* 00000 */
1883
1884 /*
1885 * code=117, hex=0x75, ascii="u"
1886 */
1887 0x00, /* 00000 */
1888 0x00, /* 00000 */
1889 0x00, /* 00000 */
1890 0x00, /* 00000 */
1891 0x90, /* 10010 */
1892 0x90, /* 10010 */
1893 0x90, /* 10010 */
1894 0x90, /* 10010 */
1895 0x90, /* 10010 */
1896 0x70, /* 01110 */
1897 0x00, /* 00000 */
1898 0x00, /* 00000 */
1899
1900 /*
1901 * code=118, hex=0x76, ascii="v"
1902 */
1903 0x00, /* 00000 */
1904 0x00, /* 00000 */
1905 0x00, /* 00000 */
1906 0x00, /* 00000 */
1907 0x90, /* 10010 */
1908 0x90, /* 10010 */
1909 0x50, /* 01010 */
1910 0x50, /* 01010 */
1911 0x20, /* 00100 */
1912 0x20, /* 00100 */
1913 0x00, /* 00000 */
1914 0x00, /* 00000 */
1915
1916 /*
1917 * code=119, hex=0x77, ascii="w"
1918 */
1919 0x00, /* 00000 */
1920 0x00, /* 00000 */
1921 0x00, /* 00000 */
1922 0x00, /* 00000 */
1923 0x90, /* 10010 */
1924 0x90, /* 10010 */
1925 0x90, /* 10010 */
1926 0x90, /* 10010 */
1927 0xF0, /* 11110 */
1928 0x90, /* 10010 */
1929 0x00, /* 00000 */
1930 0x00, /* 00000 */
1931
1932 /*
1933 * code=120, hex=0x78, ascii="x"
1934 */
1935 0x00, /* 00000 */
1936 0x00, /* 00000 */
1937 0x00, /* 00000 */
1938 0x00, /* 00000 */
1939 0x90, /* 10010 */
1940 0x90, /* 10010 */
1941 0x60, /* 01100 */
1942 0x60, /* 01100 */
1943 0x90, /* 10010 */
1944 0x90, /* 10010 */
1945 0x00, /* 00000 */
1946 0x00, /* 00000 */
1947
1948 /*
1949 * code=121, hex=0x79, ascii="y"
1950 */
1951 0x00, /* 00000 */
1952 0x00, /* 00000 */
1953 0x00, /* 00000 */
1954 0x00, /* 00000 */
1955 0x90, /* 10010 */
1956 0x90, /* 10010 */
1957 0x90, /* 10010 */
1958 0x90, /* 10010 */
1959 0x90, /* 10010 */
1960 0x70, /* 01110 */
1961 0x10, /* 00010 */
1962 0xE0, /* 11100 */
1963
1964 /*
1965 * code=122, hex=0x7A, ascii="z"
1966 */
1967 0x00, /* 00000 */
1968 0x00, /* 00000 */
1969 0x00, /* 00000 */
1970 0x00, /* 00000 */
1971 0xF0, /* 11110 */
1972 0x10, /* 00010 */
1973 0x20, /* 00100 */
1974 0x40, /* 01000 */
1975 0x80, /* 10000 */
1976 0xF0, /* 11110 */
1977 0x00, /* 00000 */
1978 0x00, /* 00000 */
1979
1980 /*
1981 * code=123, hex=0x7B, ascii="{"
1982 */
1983 0x00, /* 00000 */
1984 0x20, /* 00100 */
1985 0x40, /* 01000 */
1986 0x40, /* 01000 */
1987 0x40, /* 01000 */
1988 0x80, /* 10000 */
1989 0x40, /* 01000 */
1990 0x40, /* 01000 */
1991 0x40, /* 01000 */
1992 0x20, /* 00100 */
1993 0x00, /* 00000 */
1994 0x00, /* 00000 */
1995
1996 /*
1997 * code=124, hex=0x7C, ascii="|"
1998 */
1999 0x20, /* 00100 */
2000 0x20, /* 00100 */
2001 0x20, /* 00100 */
2002 0x20, /* 00100 */
2003 0x00, /* 00000 */
2004 0x20, /* 00100 */
2005 0x20, /* 00100 */
2006 0x20, /* 00100 */
2007 0x20, /* 00100 */
2008 0x20, /* 00100 */
2009 0x00, /* 00000 */
2010 0x00, /* 00000 */
2011
2012 /*
2013 * code=125, hex=0x7D, ascii="}"
2014 */
2015 0x00, /* 00000 */
2016 0x40, /* 01000 */
2017 0x20, /* 00100 */
2018 0x20, /* 00100 */
2019 0x20, /* 00100 */
2020 0x10, /* 00010 */
2021 0x20, /* 00100 */
2022 0x20, /* 00100 */
2023 0x20, /* 00100 */
2024 0x40, /* 01000 */
2025 0x00, /* 00000 */
2026 0x00, /* 00000 */
2027
2028 /*
2029 * code=126, hex=0x7E, ascii="~"
2030 */
2031 0x00, /* 00000 */
2032 0x50, /* 01010 */
2033 0xA0, /* 10100 */
2034 0x00, /* 00000 */
2035 0x00, /* 00000 */
2036 0x00, /* 00000 */
2037 0x00, /* 00000 */
2038 0x00, /* 00000 */
2039 0x00, /* 00000 */
2040 0x00, /* 00000 */
2041 0x00, /* 00000 */
2042 0x00, /* 00000 */
2043
2044 // /*
2045 // * code=127, hex=0x7F, ascii="^?"
2046 // */
2047 // 0x00, /* 00000 */
2048 // 0x20, /* 00100 */
2049 // 0x20, /* 00100 */
2050 // 0x50, /* 01010 */
2051 // 0x50, /* 01010 */
2052 // 0x88, /* 10001 */
2053 // 0x88, /* 10001 */
2054 // 0x88, /* 10001 */
2055 // 0x88, /* 10001 */
2056 // 0xF8, /* 11111 */
2057 // 0x00, /* 00000 */
2058 // 0x00, /* 00000 */
2059
2060 // /*
2061 // * code=128, hex=0x80, ascii="!^@"
2062 // */
2063 // 0x00, /* 00000 */
2064 // 0x60, /* 01100 */
2065 // 0x90, /* 10010 */
2066 // 0x90, /* 10010 */
2067 // 0x80, /* 10000 */
2068 // 0x80, /* 10000 */
2069 // 0x80, /* 10000 */
2070 // 0x80, /* 10000 */
2071 // 0x90, /* 10010 */
2072 // 0x60, /* 01100 */
2073 // 0x20, /* 00100 */
2074 // 0x40, /* 01000 */
2075
2076 // /*
2077 // * code=129, hex=0x81, ascii="!^A"
2078 // */
2079 // 0x00, /* 00000 */
2080 // 0x00, /* 00000 */
2081 // 0x50, /* 01010 */
2082 // 0x00, /* 00000 */
2083 // 0x90, /* 10010 */
2084 // 0x90, /* 10010 */
2085 // 0x90, /* 10010 */
2086 // 0x90, /* 10010 */
2087 // 0x90, /* 10010 */
2088 // 0x70, /* 01110 */
2089 // 0x00, /* 00000 */
2090 // 0x00, /* 00000 */
2091
2092 // /*
2093 // * code=130, hex=0x82, ascii="!^B"
2094 // */
2095 // 0x00, /* 00000 */
2096 // 0x30, /* 00110 */
2097 // 0x40, /* 01000 */
2098 // 0x00, /* 00000 */
2099 // 0x60, /* 01100 */
2100 // 0x90, /* 10010 */
2101 // 0x90, /* 10010 */
2102 // 0xF0, /* 11110 */
2103 // 0x80, /* 10000 */
2104 // 0x70, /* 01110 */
2105 // 0x00, /* 00000 */
2106 // 0x00, /* 00000 */
2107
2108 // /*
2109 // * code=131, hex=0x83, ascii="!^C"
2110 // */
2111 // 0x00, /* 00000 */
2112 // 0x60, /* 01100 */
2113 // 0x90, /* 10010 */
2114 // 0x00, /* 00000 */
2115 // 0x60, /* 01100 */
2116 // 0x90, /* 10010 */
2117 // 0x10, /* 00010 */
2118 // 0x70, /* 01110 */
2119 // 0x90, /* 10010 */
2120 // 0x70, /* 01110 */
2121 // 0x00, /* 00000 */
2122 // 0x00, /* 00000 */
2123
2124 // /*
2125 // * code=132, hex=0x84, ascii="!^D"
2126 // */
2127 // 0x00, /* 00000 */
2128 // 0x00, /* 00000 */
2129 // 0x50, /* 01010 */
2130 // 0x00, /* 00000 */
2131 // 0x60, /* 01100 */
2132 // 0x90, /* 10010 */
2133 // 0x10, /* 00010 */
2134 // 0x70, /* 01110 */
2135 // 0x90, /* 10010 */
2136 // 0x70, /* 01110 */
2137 // 0x00, /* 00000 */
2138 // 0x00, /* 00000 */
2139
2140 // /*
2141 // * code=133, hex=0x85, ascii="!^E"
2142 // */
2143 // 0x00, /* 00000 */
2144 // 0xC0, /* 11000 */
2145 // 0x20, /* 00100 */
2146 // 0x00, /* 00000 */
2147 // 0x60, /* 01100 */
2148 // 0x90, /* 10010 */
2149 // 0x10, /* 00010 */
2150 // 0x70, /* 01110 */
2151 // 0x90, /* 10010 */
2152 // 0x70, /* 01110 */
2153 // 0x00, /* 00000 */
2154 // 0x00, /* 00000 */
2155
2156 // /*
2157 // * code=134, hex=0x86, ascii="!^F"
2158 // */
2159 // 0x00, /* 00000 */
2160 // 0x20, /* 00100 */
2161 // 0x50, /* 01010 */
2162 // 0x20, /* 00100 */
2163 // 0x60, /* 01100 */
2164 // 0x90, /* 10010 */
2165 // 0x10, /* 00010 */
2166 // 0x70, /* 01110 */
2167 // 0x90, /* 10010 */
2168 // 0x70, /* 01110 */
2169 // 0x00, /* 00000 */
2170 // 0x00, /* 00000 */
2171
2172 // /*
2173 // * code=135, hex=0x87, ascii="!^G"
2174 // */
2175 // 0x00, /* 00000 */
2176 // 0x00, /* 00000 */
2177 // 0x00, /* 00000 */
2178 // 0x00, /* 00000 */
2179 // 0x70, /* 01110 */
2180 // 0x80, /* 10000 */
2181 // 0x80, /* 10000 */
2182 // 0x80, /* 10000 */
2183 // 0x80, /* 10000 */
2184 // 0x70, /* 01110 */
2185 // 0x20, /* 00100 */
2186 // 0xC0, /* 11000 */
2187
2188 // /*
2189 // * code=136, hex=0x88, ascii="!^H"
2190 // */
2191 // 0x00, /* 00000 */
2192 // 0x60, /* 01100 */
2193 // 0x90, /* 10010 */
2194 // 0x00, /* 00000 */
2195 // 0x60, /* 01100 */
2196 // 0x90, /* 10010 */
2197 // 0x90, /* 10010 */
2198 // 0xF0, /* 11110 */
2199 // 0x80, /* 10000 */
2200 // 0x70, /* 01110 */
2201 // 0x00, /* 00000 */
2202 // 0x00, /* 00000 */
2203
2204 // /*
2205 // * code=137, hex=0x89, ascii="!^I"
2206 // */
2207 // 0x00, /* 00000 */
2208 // 0x00, /* 00000 */
2209 // 0x50, /* 01010 */
2210 // 0x00, /* 00000 */
2211 // 0x60, /* 01100 */
2212 // 0x90, /* 10010 */
2213 // 0x90, /* 10010 */
2214 // 0xF0, /* 11110 */
2215 // 0x80, /* 10000 */
2216 // 0x70, /* 01110 */
2217 // 0x00, /* 00000 */
2218 // 0x00, /* 00000 */
2219
2220 // /*
2221 // * code=138, hex=0x8A, ascii="!^J"
2222 // */
2223 // 0x00, /* 00000 */
2224 // 0xC0, /* 11000 */
2225 // 0x20, /* 00100 */
2226 // 0x00, /* 00000 */
2227 // 0x60, /* 01100 */
2228 // 0x90, /* 10010 */
2229 // 0x90, /* 10010 */
2230 // 0xF0, /* 11110 */
2231 // 0x80, /* 10000 */
2232 // 0x70, /* 01110 */
2233 // 0x00, /* 00000 */
2234 // 0x00, /* 00000 */
2235
2236 // /*
2237 // * code=139, hex=0x8B, ascii="!^K"
2238 // */
2239 // 0x00, /* 00000 */
2240 // 0x00, /* 00000 */
2241 // 0x50, /* 01010 */
2242 // 0x00, /* 00000 */
2243 // 0x60, /* 01100 */
2244 // 0x20, /* 00100 */
2245 // 0x20, /* 00100 */
2246 // 0x20, /* 00100 */
2247 // 0x20, /* 00100 */
2248 // 0x70, /* 01110 */
2249 // 0x00, /* 00000 */
2250 // 0x00, /* 00000 */
2251
2252 // /*
2253 // * code=140, hex=0x8C, ascii="!^L"
2254 // */
2255 // 0x00, /* 00000 */
2256 // 0x60, /* 01100 */
2257 // 0x90, /* 10010 */
2258 // 0x00, /* 00000 */
2259 // 0x60, /* 01100 */
2260 // 0x20, /* 00100 */
2261 // 0x20, /* 00100 */
2262 // 0x20, /* 00100 */
2263 // 0x20, /* 00100 */
2264 // 0x70, /* 01110 */
2265 // 0x00, /* 00000 */
2266 // 0x00, /* 00000 */
2267
2268 // /*
2269 // * code=141, hex=0x8D, ascii="!^M"
2270 // */
2271 // 0x00, /* 00000 */
2272 // 0x60, /* 01100 */
2273 // 0x10, /* 00010 */
2274 // 0x00, /* 00000 */
2275 // 0x60, /* 01100 */
2276 // 0x20, /* 00100 */
2277 // 0x20, /* 00100 */
2278 // 0x20, /* 00100 */
2279 // 0x20, /* 00100 */
2280 // 0x70, /* 01110 */
2281 // 0x00, /* 00000 */
2282 // 0x00, /* 00000 */
2283
2284 // /*
2285 // * code=142, hex=0x8E, ascii="!^N"
2286 // */
2287 // 0x50, /* 01010 */
2288 // 0x00, /* 00000 */
2289 // 0x60, /* 01100 */
2290 // 0x90, /* 10010 */
2291 // 0x90, /* 10010 */
2292 // 0x90, /* 10010 */
2293 // 0xF0, /* 11110 */
2294 // 0x90, /* 10010 */
2295 // 0x90, /* 10010 */
2296 // 0x90, /* 10010 */
2297 // 0x00, /* 00000 */
2298 // 0x00, /* 00000 */
2299
2300 // /*
2301 // * code=143, hex=0x8F, ascii="!^O"
2302 // */
2303 // 0x20, /* 00100 */
2304 // 0x50, /* 01010 */
2305 // 0x20, /* 00100 */
2306 // 0x60, /* 01100 */
2307 // 0x90, /* 10010 */
2308 // 0x90, /* 10010 */
2309 // 0xF0, /* 11110 */
2310 // 0x90, /* 10010 */
2311 // 0x90, /* 10010 */
2312 // 0x90, /* 10010 */
2313 // 0x00, /* 00000 */
2314 // 0x00, /* 00000 */
2315
2316 // /*
2317 // * code=144, hex=0x90, ascii="!^P"
2318 // */
2319 // 0x30, /* 00110 */
2320 // 0x40, /* 01000 */
2321 // 0x00, /* 00000 */
2322 // 0xF0, /* 11110 */
2323 // 0x80, /* 10000 */
2324 // 0x80, /* 10000 */
2325 // 0xF0, /* 11110 */
2326 // 0x80, /* 10000 */
2327 // 0x80, /* 10000 */
2328 // 0xF0, /* 11110 */
2329 // 0x00, /* 00000 */
2330 // 0x00, /* 00000 */
2331
2332 // /*
2333 // * code=145, hex=0x91, ascii="!^Q"
2334 // */
2335 // 0x00, /* 00000 */
2336 // 0x00, /* 00000 */
2337 // 0x00, /* 00000 */
2338 // 0x00, /* 00000 */
2339 // 0x70, /* 01110 */
2340 // 0x28, /* 00101 */
2341 // 0x28, /* 00101 */
2342 // 0x70, /* 01110 */
2343 // 0xA0, /* 10100 */
2344 // 0x50, /* 01010 */
2345 // 0x00, /* 00000 */
2346 // 0x00, /* 00000 */
2347
2348 // /*
2349 // * code=146, hex=0x92, ascii="!^R"
2350 // */
2351 // 0x00, /* 00000 */
2352 // 0x00, /* 00000 */
2353 // 0x70, /* 01110 */
2354 // 0xE0, /* 11100 */
2355 // 0xA0, /* 10100 */
2356 // 0xA0, /* 10100 */
2357 // 0xF0, /* 11110 */
2358 // 0xA0, /* 10100 */
2359 // 0xA0, /* 10100 */
2360 // 0xB0, /* 10110 */
2361 // 0x00, /* 00000 */
2362 // 0x00, /* 00000 */
2363
2364 // /*
2365 // * code=147, hex=0x93, ascii="!^S"
2366 // */
2367 // 0x00, /* 00000 */
2368 // 0x60, /* 01100 */
2369 // 0x90, /* 10010 */
2370 // 0x00, /* 00000 */
2371 // 0x60, /* 01100 */
2372 // 0x90, /* 10010 */
2373 // 0x90, /* 10010 */
2374 // 0x90, /* 10010 */
2375 // 0x90, /* 10010 */
2376 // 0x60, /* 01100 */
2377 // 0x00, /* 00000 */
2378 // 0x00, /* 00000 */
2379
2380 // /*
2381 // * code=148, hex=0x94, ascii="!^T"
2382 // */
2383 // 0x00, /* 00000 */
2384 // 0x00, /* 00000 */
2385 // 0x50, /* 01010 */
2386 // 0x00, /* 00000 */
2387 // 0x60, /* 01100 */
2388 // 0x90, /* 10010 */
2389 // 0x90, /* 10010 */
2390 // 0x90, /* 10010 */
2391 // 0x90, /* 10010 */
2392 // 0x60, /* 01100 */
2393 // 0x00, /* 00000 */
2394 // 0x00, /* 00000 */
2395
2396 // /*
2397 // * code=149, hex=0x95, ascii="!^U"
2398 // */
2399 // 0x00, /* 00000 */
2400 // 0x60, /* 01100 */
2401 // 0x10, /* 00010 */
2402 // 0x00, /* 00000 */
2403 // 0x60, /* 01100 */
2404 // 0x90, /* 10010 */
2405 // 0x90, /* 10010 */
2406 // 0x90, /* 10010 */
2407 // 0x90, /* 10010 */
2408 // 0x60, /* 01100 */
2409 // 0x00, /* 00000 */
2410 // 0x00, /* 00000 */
2411
2412 // /*
2413 // * code=150, hex=0x96, ascii="!^V"
2414 // */
2415 // 0x00, /* 00000 */
2416 // 0x60, /* 01100 */
2417 // 0x90, /* 10010 */
2418 // 0x00, /* 00000 */
2419 // 0x90, /* 10010 */
2420 // 0x90, /* 10010 */
2421 // 0x90, /* 10010 */
2422 // 0x90, /* 10010 */
2423 // 0x90, /* 10010 */
2424 // 0x70, /* 01110 */
2425 // 0x00, /* 00000 */
2426 // 0x00, /* 00000 */
2427
2428 // /*
2429 // * code=151, hex=0x97, ascii="!^W"
2430 // */
2431 // 0x00, /* 00000 */
2432 // 0xC0, /* 11000 */
2433 // 0x20, /* 00100 */
2434 // 0x00, /* 00000 */
2435 // 0x90, /* 10010 */
2436 // 0x90, /* 10010 */
2437 // 0x90, /* 10010 */
2438 // 0x90, /* 10010 */
2439 // 0x90, /* 10010 */
2440 // 0x70, /* 01110 */
2441 // 0x00, /* 00000 */
2442 // 0x00, /* 00000 */
2443
2444 // /*
2445 // * code=152, hex=0x98, ascii="!^X"
2446 // */
2447 // 0x00, /* 00000 */
2448 // 0x00, /* 00000 */
2449 // 0x50, /* 01010 */
2450 // 0x00, /* 00000 */
2451 // 0x90, /* 10010 */
2452 // 0x90, /* 10010 */
2453 // 0x90, /* 10010 */
2454 // 0x90, /* 10010 */
2455 // 0x90, /* 10010 */
2456 // 0x70, /* 01110 */
2457 // 0x10, /* 00010 */
2458 // 0xE0, /* 11100 */
2459
2460 // /*
2461 // * code=153, hex=0x99, ascii="!^Y"
2462 // */
2463 // 0x50, /* 01010 */
2464 // 0x00, /* 00000 */
2465 // 0x60, /* 01100 */
2466 // 0x90, /* 10010 */
2467 // 0x90, /* 10010 */
2468 // 0x90, /* 10010 */
2469 // 0x90, /* 10010 */
2470 // 0x90, /* 10010 */
2471 // 0x90, /* 10010 */
2472 // 0x60, /* 01100 */
2473 // 0x00, /* 00000 */
2474 // 0x00, /* 00000 */
2475
2476 // /*
2477 // * code=154, hex=0x9A, ascii="!^Z"
2478 // */
2479 // 0x50, /* 01010 */
2480 // 0x00, /* 00000 */
2481 // 0x90, /* 10010 */
2482 // 0x90, /* 10010 */
2483 // 0x90, /* 10010 */
2484 // 0x90, /* 10010 */
2485 // 0x90, /* 10010 */
2486 // 0x90, /* 10010 */
2487 // 0x90, /* 10010 */
2488 // 0x70, /* 01110 */
2489 // 0x00, /* 00000 */
2490 // 0x00, /* 00000 */
2491
2492 // /*
2493 // * code=155, hex=0x9B, ascii="!^["
2494 // */
2495 // 0x00, /* 00000 */
2496 // 0x00, /* 00000 */
2497 // 0x00, /* 00000 */
2498 // 0x20, /* 00100 */
2499 // 0x70, /* 01110 */
2500 // 0x88, /* 10001 */
2501 // 0x80, /* 10000 */
2502 // 0x88, /* 10001 */
2503 // 0x70, /* 01110 */
2504 // 0x20, /* 00100 */
2505 // 0x00, /* 00000 */
2506 // 0x00, /* 00000 */
2507
2508 // /*
2509 // * code=156, hex=0x9C, ascii="!^\"
2510 // */
2511 // 0x00, /* 00000 */
2512 // 0x20, /* 00100 */
2513 // 0x50, /* 01010 */
2514 // 0x40, /* 01000 */
2515 // 0x40, /* 01000 */
2516 // 0xE0, /* 11100 */
2517 // 0x40, /* 01000 */
2518 // 0x40, /* 01000 */
2519 // 0xD0, /* 11010 */
2520 // 0xF0, /* 11110 */
2521 // 0x00, /* 00000 */
2522 // 0x00, /* 00000 */
2523
2524 // /*
2525 // * code=157, hex=0x9D, ascii="!^]"
2526 // */
2527 // 0x00, /* 00000 */
2528 // 0x88, /* 10001 */
2529 // 0x50, /* 01010 */
2530 // 0x50, /* 01010 */
2531 // 0xF8, /* 11111 */
2532 // 0x20, /* 00100 */
2533 // 0xF8, /* 11111 */
2534 // 0x20, /* 00100 */
2535 // 0x20, /* 00100 */
2536 // 0x20, /* 00100 */
2537 // 0x00, /* 00000 */
2538 // 0x00, /* 00000 */
2539
2540 // /*
2541 // * code=158, hex=0x9E, ascii="!^^"
2542 // */
2543 // 0x00, /* 00000 */
2544 // 0xE0, /* 11100 */
2545 // 0x90, /* 10010 */
2546 // 0x90, /* 10010 */
2547 // 0xE0, /* 11100 */
2548 // 0x90, /* 10010 */
2549 // 0xB8, /* 10111 */
2550 // 0x90, /* 10010 */
2551 // 0x90, /* 10010 */
2552 // 0x90, /* 10010 */
2553 // 0x00, /* 00000 */
2554 // 0x00, /* 00000 */
2555
2556 // /*
2557 // * code=159, hex=0x9F, ascii="!^_"
2558 // */
2559 // 0x10, /* 00010 */
2560 // 0x20, /* 00100 */
2561 // 0x20, /* 00100 */
2562 // 0x20, /* 00100 */
2563 // 0x20, /* 00100 */
2564 // 0x70, /* 01110 */
2565 // 0x20, /* 00100 */
2566 // 0x20, /* 00100 */
2567 // 0x20, /* 00100 */
2568 // 0x20, /* 00100 */
2569 // 0xA0, /* 10100 */
2570 // 0x40, /* 01000 */
2571
2572 // /*
2573 // * code=160, hex=0xA0, ascii="! "
2574 // */
2575 // 0x00, /* 00000 */
2576 // 0x30, /* 00110 */
2577 // 0x40, /* 01000 */
2578 // 0x00, /* 00000 */
2579 // 0x60, /* 01100 */
2580 // 0x90, /* 10010 */
2581 // 0x10, /* 00010 */
2582 // 0x70, /* 01110 */
2583 // 0x90, /* 10010 */
2584 // 0x70, /* 01110 */
2585 // 0x00, /* 00000 */
2586 // 0x00, /* 00000 */
2587
2588 // /*
2589 // * code=161, hex=0xA1, ascii="!!"
2590 // */
2591 // 0x00, /* 00000 */
2592 // 0x30, /* 00110 */
2593 // 0x40, /* 01000 */
2594 // 0x00, /* 00000 */
2595 // 0x60, /* 01100 */
2596 // 0x20, /* 00100 */
2597 // 0x20, /* 00100 */
2598 // 0x20, /* 00100 */
2599 // 0x20, /* 00100 */
2600 // 0x70, /* 01110 */
2601 // 0x00, /* 00000 */
2602 // 0x00, /* 00000 */
2603
2604 // /*
2605 // * code=162, hex=0xA2, ascii="!""
2606 // */
2607 // 0x00, /* 00000 */
2608 // 0x30, /* 00110 */
2609 // 0x40, /* 01000 */
2610 // 0x00, /* 00000 */
2611 // 0x60, /* 01100 */
2612 // 0x90, /* 10010 */
2613 // 0x90, /* 10010 */
2614 // 0x90, /* 10010 */
2615 // 0x90, /* 10010 */
2616 // 0x60, /* 01100 */
2617 // 0x00, /* 00000 */
2618 // 0x00, /* 00000 */
2619
2620 // /*
2621 // * code=163, hex=0xA3, ascii="!#"
2622 // */
2623 // 0x00, /* 00000 */
2624 // 0x30, /* 00110 */
2625 // 0x40, /* 01000 */
2626 // 0x00, /* 00000 */
2627 // 0x90, /* 10010 */
2628 // 0x90, /* 10010 */
2629 // 0x90, /* 10010 */
2630 // 0x90, /* 10010 */
2631 // 0x90, /* 10010 */
2632 // 0x70, /* 01110 */
2633 // 0x00, /* 00000 */
2634 // 0x00, /* 00000 */
2635
2636 // /*
2637 // * code=164, hex=0xA4, ascii="!$"
2638 // */
2639 // 0x00, /* 00000 */
2640 // 0x50, /* 01010 */
2641 // 0xA0, /* 10100 */
2642 // 0x00, /* 00000 */
2643 // 0xA0, /* 10100 */
2644 // 0xD0, /* 11010 */
2645 // 0x90, /* 10010 */
2646 // 0x90, /* 10010 */
2647 // 0x90, /* 10010 */
2648 // 0x90, /* 10010 */
2649 // 0x00, /* 00000 */
2650 // 0x00, /* 00000 */
2651
2652 // /*
2653 // * code=165, hex=0xA5, ascii="!%"
2654 // */
2655 // 0x50, /* 01010 */
2656 // 0xA0, /* 10100 */
2657 // 0x00, /* 00000 */
2658 // 0x90, /* 10010 */
2659 // 0xD0, /* 11010 */
2660 // 0xF0, /* 11110 */
2661 // 0xB0, /* 10110 */
2662 // 0x90, /* 10010 */
2663 // 0x90, /* 10010 */
2664 // 0x90, /* 10010 */
2665 // 0x00, /* 00000 */
2666 // 0x00, /* 00000 */
2667
2668 // /*
2669 // * code=166, hex=0xA6, ascii="!&"
2670 // */
2671 // 0x00, /* 00000 */
2672 // 0x60, /* 01100 */
2673 // 0x10, /* 00010 */
2674 // 0x70, /* 01110 */
2675 // 0x90, /* 10010 */
2676 // 0x70, /* 01110 */
2677 // 0x00, /* 00000 */
2678 // 0xF0, /* 11110 */
2679 // 0x00, /* 00000 */
2680 // 0x00, /* 00000 */
2681 // 0x00, /* 00000 */
2682 // 0x00, /* 00000 */
2683
2684 // /*
2685 // * code=167, hex=0xA7, ascii="!'"
2686 // */
2687 // 0x00, /* 00000 */
2688 // 0x60, /* 01100 */
2689 // 0x90, /* 10010 */
2690 // 0x90, /* 10010 */
2691 // 0x90, /* 10010 */
2692 // 0x60, /* 01100 */
2693 // 0x00, /* 00000 */
2694 // 0xF0, /* 11110 */
2695 // 0x00, /* 00000 */
2696 // 0x00, /* 00000 */
2697 // 0x00, /* 00000 */
2698 // 0x00, /* 00000 */
2699
2700 // /*
2701 // * code=168, hex=0xA8, ascii="!("
2702 // */
2703 // 0x00, /* 00000 */
2704 // 0x40, /* 01000 */
2705 // 0x40, /* 01000 */
2706 // 0x00, /* 00000 */
2707 // 0x40, /* 01000 */
2708 // 0x40, /* 01000 */
2709 // 0x80, /* 10000 */
2710 // 0x80, /* 10000 */
2711 // 0x90, /* 10010 */
2712 // 0x60, /* 01100 */
2713 // 0x00, /* 00000 */
2714 // 0x00, /* 00000 */
2715
2716 // /*
2717 // * code=169, hex=0xA9, ascii="!)"
2718 // */
2719 // 0x00, /* 00000 */
2720 // 0x00, /* 00000 */
2721 // 0x00, /* 00000 */
2722 // 0x00, /* 00000 */
2723 // 0x00, /* 00000 */
2724 // 0x00, /* 00000 */
2725 // 0xF0, /* 11110 */
2726 // 0x80, /* 10000 */
2727 // 0x80, /* 10000 */
2728 // 0x00, /* 00000 */
2729 // 0x00, /* 00000 */
2730 // 0x00, /* 00000 */
2731
2732 // /*
2733 // * code=170, hex=0xAA, ascii="!*"
2734 // */
2735 // 0x00, /* 00000 */
2736 // 0x00, /* 00000 */
2737 // 0x00, /* 00000 */
2738 // 0x00, /* 00000 */
2739 // 0x00, /* 00000 */
2740 // 0x00, /* 00000 */
2741 // 0xF0, /* 11110 */
2742 // 0x10, /* 00010 */
2743 // 0x10, /* 00010 */
2744 // 0x00, /* 00000 */
2745 // 0x00, /* 00000 */
2746 // 0x00, /* 00000 */
2747
2748 // /*
2749 // * code=171, hex=0xAB, ascii="!+"
2750 // */
2751 // 0x00, /* 00000 */
2752 // 0x40, /* 01000 */
2753 // 0x50, /* 01010 */
2754 // 0x50, /* 01010 */
2755 // 0x20, /* 00100 */
2756 // 0x40, /* 01000 */
2757 // 0x70, /* 01110 */
2758 // 0x90, /* 10010 */
2759 // 0xA0, /* 10100 */
2760 // 0x30, /* 00110 */
2761 // 0x00, /* 00000 */
2762 // 0x00, /* 00000 */
2763
2764 // /*
2765 // * code=172, hex=0xAC, ascii="!,"
2766 // */
2767 // 0x00, /* 00000 */
2768 // 0x40, /* 01000 */
2769 // 0x50, /* 01010 */
2770 // 0x50, /* 01010 */
2771 // 0x20, /* 00100 */
2772 // 0x40, /* 01000 */
2773 // 0x50, /* 01010 */
2774 // 0xB0, /* 10110 */
2775 // 0xB0, /* 10110 */
2776 // 0x10, /* 00010 */
2777 // 0x00, /* 00000 */
2778 // 0x00, /* 00000 */
2779
2780 // /*
2781 // * code=173, hex=0xAD, ascii="!-"
2782 // */
2783 // 0x00, /* 00000 */
2784 // 0x00, /* 00000 */
2785 // 0x20, /* 00100 */
2786 // 0x00, /* 00000 */
2787 // 0x20, /* 00100 */
2788 // 0x20, /* 00100 */
2789 // 0x20, /* 00100 */
2790 // 0x20, /* 00100 */
2791 // 0x20, /* 00100 */
2792 // 0x20, /* 00100 */
2793 // 0x00, /* 00000 */
2794 // 0x00, /* 00000 */
2795
2796 // /*
2797 // * code=174, hex=0xAE, ascii="!."
2798 // */
2799 // 0x00, /* 00000 */
2800 // 0x00, /* 00000 */
2801 // 0x00, /* 00000 */
2802 // 0x50, /* 01010 */
2803 // 0x50, /* 01010 */
2804 // 0xA0, /* 10100 */
2805 // 0xA0, /* 10100 */
2806 // 0x50, /* 01010 */
2807 // 0x50, /* 01010 */
2808 // 0x00, /* 00000 */
2809 // 0x00, /* 00000 */
2810 // 0x00, /* 00000 */
2811
2812 // /*
2813 // * code=175, hex=0xAF, ascii="!/"
2814 // */
2815 // 0x00, /* 00000 */
2816 // 0x00, /* 00000 */
2817 // 0x00, /* 00000 */
2818 // 0xA0, /* 10100 */
2819 // 0xA0, /* 10100 */
2820 // 0x50, /* 01010 */
2821 // 0x50, /* 01010 */
2822 // 0xA0, /* 10100 */
2823 // 0xA0, /* 10100 */
2824 // 0x00, /* 00000 */
2825 // 0x00, /* 00000 */
2826 // 0x00, /* 00000 */
2827
2828 // /*
2829 // * code=176, hex=0xB0, ascii="!0"
2830 // */
2831 // 0x00, /* 00000 */
2832 // 0x00, /* 00000 */
2833 // 0xA8, /* 10101 */
2834 // 0x00, /* 00000 */
2835 // 0x00, /* 00000 */
2836 // 0x50, /* 01010 */
2837 // 0x00, /* 00000 */
2838 // 0x00, /* 00000 */
2839 // 0xA8, /* 10101 */
2840 // 0x00, /* 00000 */
2841 // 0x00, /* 00000 */
2842 // 0x50, /* 01010 */
2843
2844 // /*
2845 // * code=177, hex=0xB1, ascii="!1"
2846 // */
2847 // 0x00, /* 00000 */
2848 // 0x50, /* 01010 */
2849 // 0x00, /* 00000 */
2850 // 0xA8, /* 10101 */
2851 // 0x00, /* 00000 */
2852 // 0x50, /* 01010 */
2853 // 0x00, /* 00000 */
2854 // 0xA8, /* 10101 */
2855 // 0x00, /* 00000 */
2856 // 0x50, /* 01010 */
2857 // 0x00, /* 00000 */
2858 // 0xA8, /* 10101 */
2859
2860 // /*
2861 // * code=178, hex=0xB2, ascii="!2"
2862 // */
2863 // 0x50, /* 01010 */
2864 // 0xA8, /* 10101 */
2865 // 0x50, /* 01010 */
2866 // 0xA8, /* 10101 */
2867 // 0x50, /* 01010 */
2868 // 0xA8, /* 10101 */
2869 // 0x50, /* 01010 */
2870 // 0xA8, /* 10101 */
2871 // 0x50, /* 01010 */
2872 // 0xA8, /* 10101 */
2873 // 0x50, /* 01010 */
2874 // 0xA8, /* 10101 */
2875
2876 // /*
2877 // * code=179, hex=0xB3, ascii="!3"
2878 // */
2879 // 0x20, /* 00100 */
2880 // 0x20, /* 00100 */
2881 // 0x20, /* 00100 */
2882 // 0x20, /* 00100 */
2883 // 0x20, /* 00100 */
2884 // 0x20, /* 00100 */
2885 // 0x20, /* 00100 */
2886 // 0x20, /* 00100 */
2887 // 0x20, /* 00100 */
2888 // 0x20, /* 00100 */
2889 // 0x20, /* 00100 */
2890 // 0x20, /* 00100 */
2891
2892 // /*
2893 // * code=180, hex=0xB4, ascii="!4"
2894 // */
2895 // 0x20, /* 00100 */
2896 // 0x20, /* 00100 */
2897 // 0x20, /* 00100 */
2898 // 0x20, /* 00100 */
2899 // 0x20, /* 00100 */
2900 // 0xE0, /* 11100 */
2901 // 0x20, /* 00100 */
2902 // 0x20, /* 00100 */
2903 // 0x20, /* 00100 */
2904 // 0x20, /* 00100 */
2905 // 0x20, /* 00100 */
2906 // 0x20, /* 00100 */
2907
2908 // /*
2909 // * code=181, hex=0xB5, ascii="!5"
2910 // */
2911 // 0x20, /* 00100 */
2912 // 0x20, /* 00100 */
2913 // 0x20, /* 00100 */
2914 // 0x20, /* 00100 */
2915 // 0xE0, /* 11100 */
2916 // 0x20, /* 00100 */
2917 // 0xE0, /* 11100 */
2918 // 0x20, /* 00100 */
2919 // 0x20, /* 00100 */
2920 // 0x20, /* 00100 */
2921 // 0x20, /* 00100 */
2922 // 0x20, /* 00100 */
2923
2924 // /*
2925 // * code=182, hex=0xB6, ascii="!6"
2926 // */
2927 // 0x50, /* 01010 */
2928 // 0x50, /* 01010 */
2929 // 0x50, /* 01010 */
2930 // 0x50, /* 01010 */
2931 // 0x50, /* 01010 */
2932 // 0xD0, /* 11010 */
2933 // 0x50, /* 01010 */
2934 // 0x50, /* 01010 */
2935 // 0x50, /* 01010 */
2936 // 0x50, /* 01010 */
2937 // 0x50, /* 01010 */
2938 // 0x50, /* 01010 */
2939
2940 // /*
2941 // * code=183, hex=0xB7, ascii="!7"
2942 // */
2943 // 0x00, /* 00000 */
2944 // 0x00, /* 00000 */
2945 // 0x00, /* 00000 */
2946 // 0x00, /* 00000 */
2947 // 0x00, /* 00000 */
2948 // 0xF0, /* 11110 */
2949 // 0x50, /* 01010 */
2950 // 0x50, /* 01010 */
2951 // 0x50, /* 01010 */
2952 // 0x50, /* 01010 */
2953 // 0x50, /* 01010 */
2954 // 0x50, /* 01010 */
2955
2956 // /*
2957 // * code=184, hex=0xB8, ascii="!8"
2958 // */
2959 // 0x00, /* 00000 */
2960 // 0x00, /* 00000 */
2961 // 0x00, /* 00000 */
2962 // 0x00, /* 00000 */
2963 // 0xE0, /* 11100 */
2964 // 0x20, /* 00100 */
2965 // 0xE0, /* 11100 */
2966 // 0x20, /* 00100 */
2967 // 0x20, /* 00100 */
2968 // 0x20, /* 00100 */
2969 // 0x20, /* 00100 */
2970 // 0x20, /* 00100 */
2971
2972 // /*
2973 // * code=185, hex=0xB9, ascii="!9"
2974 // */
2975 // 0x50, /* 01010 */
2976 // 0x50, /* 01010 */
2977 // 0x50, /* 01010 */
2978 // 0x50, /* 01010 */
2979 // 0xD0, /* 11010 */
2980 // 0x10, /* 00010 */
2981 // 0xD0, /* 11010 */
2982 // 0x50, /* 01010 */
2983 // 0x50, /* 01010 */
2984 // 0x50, /* 01010 */
2985 // 0x50, /* 01010 */
2986 // 0x50, /* 01010 */
2987
2988 // /*
2989 // * code=186, hex=0xBA, ascii="!:"
2990 // */
2991 // 0x50, /* 01010 */
2992 // 0x50, /* 01010 */
2993 // 0x50, /* 01010 */
2994 // 0x50, /* 01010 */
2995 // 0x50, /* 01010 */
2996 // 0x50, /* 01010 */
2997 // 0x50, /* 01010 */
2998 // 0x50, /* 01010 */
2999 // 0x50, /* 01010 */
3000 // 0x50, /* 01010 */
3001 // 0x50, /* 01010 */
3002 // 0x50, /* 01010 */
3003
3004 // /*
3005 // * code=187, hex=0xBB, ascii="!;"
3006 // */
3007 // 0x00, /* 00000 */
3008 // 0x00, /* 00000 */
3009 // 0x00, /* 00000 */
3010 // 0x00, /* 00000 */
3011 // 0xF0, /* 11110 */
3012 // 0x10, /* 00010 */
3013 // 0xD0, /* 11010 */
3014 // 0x50, /* 01010 */
3015 // 0x50, /* 01010 */
3016 // 0x50, /* 01010 */
3017 // 0x50, /* 01010 */
3018 // 0x50, /* 01010 */
3019
3020 // /*
3021 // * code=188, hex=0xBC, ascii="!<"
3022 // */
3023 // 0x50, /* 01010 */
3024 // 0x50, /* 01010 */
3025 // 0x50, /* 01010 */
3026 // 0x50, /* 01010 */
3027 // 0xD0, /* 11010 */
3028 // 0x10, /* 00010 */
3029 // 0xF0, /* 11110 */
3030 // 0x00, /* 00000 */
3031 // 0x00, /* 00000 */
3032 // 0x00, /* 00000 */
3033 // 0x00, /* 00000 */
3034 // 0x00, /* 00000 */
3035
3036 // /*
3037 // * code=189, hex=0xBD, ascii="!="
3038 // */
3039 // 0x50, /* 01010 */
3040 // 0x50, /* 01010 */
3041 // 0x50, /* 01010 */
3042 // 0x50, /* 01010 */
3043 // 0x50, /* 01010 */
3044 // 0xF0, /* 11110 */
3045 // 0x00, /* 00000 */
3046 // 0x00, /* 00000 */
3047 // 0x00, /* 00000 */
3048 // 0x00, /* 00000 */
3049 // 0x00, /* 00000 */
3050 // 0x00, /* 00000 */
3051
3052 // /*
3053 // * code=190, hex=0xBE, ascii="!>"
3054 // */
3055 // 0x20, /* 00100 */
3056 // 0x20, /* 00100 */
3057 // 0x20, /* 00100 */
3058 // 0x20, /* 00100 */
3059 // 0xE0, /* 11100 */
3060 // 0x20, /* 00100 */
3061 // 0xE0, /* 11100 */
3062 // 0x00, /* 00000 */
3063 // 0x00, /* 00000 */
3064 // 0x00, /* 00000 */
3065 // 0x00, /* 00000 */
3066 // 0x00, /* 00000 */
3067
3068 // /*
3069 // * code=191, hex=0xBF, ascii="!?"
3070 // */
3071 // 0x00, /* 00000 */
3072 // 0x00, /* 00000 */
3073 // 0x00, /* 00000 */
3074 // 0x00, /* 00000 */
3075 // 0x00, /* 00000 */
3076 // 0xE0, /* 11100 */
3077 // 0x20, /* 00100 */
3078 // 0x20, /* 00100 */
3079 // 0x20, /* 00100 */
3080 // 0x20, /* 00100 */
3081 // 0x20, /* 00100 */
3082 // 0x20, /* 00100 */
3083
3084 // /*
3085 // * code=192, hex=0xC0, ascii="!@"
3086 // */
3087 // 0x20, /* 00100 */
3088 // 0x20, /* 00100 */
3089 // 0x20, /* 00100 */
3090 // 0x20, /* 00100 */
3091 // 0x20, /* 00100 */
3092 // 0x38, /* 00111 */
3093 // 0x00, /* 00000 */
3094 // 0x00, /* 00000 */
3095 // 0x00, /* 00000 */
3096 // 0x00, /* 00000 */
3097 // 0x00, /* 00000 */
3098 // 0x00, /* 00000 */
3099
3100 // /*
3101 // * code=193, hex=0xC1, ascii="!A"
3102 // */
3103 // 0x20, /* 00100 */
3104 // 0x20, /* 00100 */
3105 // 0x20, /* 00100 */
3106 // 0x20, /* 00100 */
3107 // 0x20, /* 00100 */
3108 // 0xF8, /* 11111 */
3109 // 0x00, /* 00000 */
3110 // 0x00, /* 00000 */
3111 // 0x00, /* 00000 */
3112 // 0x00, /* 00000 */
3113 // 0x00, /* 00000 */
3114 // 0x00, /* 00000 */
3115
3116 // /*
3117 // * code=194, hex=0xC2, ascii="!B"
3118 // */
3119 // 0x00, /* 00000 */
3120 // 0x00, /* 00000 */
3121 // 0x00, /* 00000 */
3122 // 0x00, /* 00000 */
3123 // 0x00, /* 00000 */
3124 // 0xF8, /* 11111 */
3125 // 0x20, /* 00100 */
3126 // 0x20, /* 00100 */
3127 // 0x20, /* 00100 */
3128 // 0x20, /* 00100 */
3129 // 0x20, /* 00100 */
3130 // 0x20, /* 00100 */
3131
3132 // /*
3133 // * code=195, hex=0xC3, ascii="!C"
3134 // */
3135 // 0x20, /* 00100 */
3136 // 0x20, /* 00100 */
3137 // 0x20, /* 00100 */
3138 // 0x20, /* 00100 */
3139 // 0x20, /* 00100 */
3140 // 0x38, /* 00111 */
3141 // 0x20, /* 00100 */
3142 // 0x20, /* 00100 */
3143 // 0x20, /* 00100 */
3144 // 0x20, /* 00100 */
3145 // 0x20, /* 00100 */
3146 // 0x20, /* 00100 */
3147
3148 // /*
3149 // * code=196, hex=0xC4, ascii="!D"
3150 // */
3151 // 0x00, /* 00000 */
3152 // 0x00, /* 00000 */
3153 // 0x00, /* 00000 */
3154 // 0x00, /* 00000 */
3155 // 0x00, /* 00000 */
3156 // 0xF8, /* 11111 */
3157 // 0x00, /* 00000 */
3158 // 0x00, /* 00000 */
3159 // 0x00, /* 00000 */
3160 // 0x00, /* 00000 */
3161 // 0x00, /* 00000 */
3162 // 0x00, /* 00000 */
3163
3164 // /*
3165 // * code=197, hex=0xC5, ascii="!E"
3166 // */
3167 // 0x20, /* 00100 */
3168 // 0x20, /* 00100 */
3169 // 0x20, /* 00100 */
3170 // 0x20, /* 00100 */
3171 // 0x20, /* 00100 */
3172 // 0xF8, /* 11111 */
3173 // 0x20, /* 00100 */
3174 // 0x20, /* 00100 */
3175 // 0x20, /* 00100 */
3176 // 0x20, /* 00100 */
3177 // 0x20, /* 00100 */
3178 // 0x20, /* 00100 */
3179
3180 // /*
3181 // * code=198, hex=0xC6, ascii="!F"
3182 // */
3183 // 0x20, /* 00100 */
3184 // 0x20, /* 00100 */
3185 // 0x20, /* 00100 */
3186 // 0x20, /* 00100 */
3187 // 0x38, /* 00111 */
3188 // 0x20, /* 00100 */
3189 // 0x38, /* 00111 */
3190 // 0x20, /* 00100 */
3191 // 0x20, /* 00100 */
3192 // 0x20, /* 00100 */
3193 // 0x20, /* 00100 */
3194 // 0x20, /* 00100 */
3195
3196 // /*
3197 // * code=199, hex=0xC7, ascii="!G"
3198 // */
3199 // 0x50, /* 01010 */
3200 // 0x50, /* 01010 */
3201 // 0x50, /* 01010 */
3202 // 0x50, /* 01010 */
3203 // 0x50, /* 01010 */
3204 // 0x58, /* 01011 */
3205 // 0x50, /* 01010 */
3206 // 0x50, /* 01010 */
3207 // 0x50, /* 01010 */
3208 // 0x50, /* 01010 */
3209 // 0x50, /* 01010 */
3210 // 0x50, /* 01010 */
3211
3212 // /*
3213 // * code=200, hex=0xC8, ascii="!H"
3214 // */
3215 // 0x50, /* 01010 */
3216 // 0x50, /* 01010 */
3217 // 0x50, /* 01010 */
3218 // 0x50, /* 01010 */
3219 // 0x58, /* 01011 */
3220 // 0x40, /* 01000 */
3221 // 0x78, /* 01111 */
3222 // 0x00, /* 00000 */
3223 // 0x00, /* 00000 */
3224 // 0x00, /* 00000 */
3225 // 0x00, /* 00000 */
3226 // 0x00, /* 00000 */
3227
3228 // /*
3229 // * code=201, hex=0xC9, ascii="!I"
3230 // */
3231 // 0x00, /* 00000 */
3232 // 0x00, /* 00000 */
3233 // 0x00, /* 00000 */
3234 // 0x00, /* 00000 */
3235 // 0x78, /* 01111 */
3236 // 0x40, /* 01000 */
3237 // 0x58, /* 01011 */
3238 // 0x50, /* 01010 */
3239 // 0x50, /* 01010 */
3240 // 0x50, /* 01010 */
3241 // 0x50, /* 01010 */
3242 // 0x50, /* 01010 */
3243
3244 // /*
3245 // * code=202, hex=0xCA, ascii="!J"
3246 // */
3247 // 0x50, /* 01010 */
3248 // 0x50, /* 01010 */
3249 // 0x50, /* 01010 */
3250 // 0x50, /* 01010 */
3251 // 0xD8, /* 11011 */
3252 // 0x00, /* 00000 */
3253 // 0xF8, /* 11111 */
3254 // 0x00, /* 00000 */
3255 // 0x00, /* 00000 */
3256 // 0x00, /* 00000 */
3257 // 0x00, /* 00000 */
3258 // 0x00, /* 00000 */
3259
3260 // /*
3261 // * code=203, hex=0xCB, ascii="!K"
3262 // */
3263 // 0x00, /* 00000 */
3264 // 0x00, /* 00000 */
3265 // 0x00, /* 00000 */
3266 // 0x00, /* 00000 */
3267 // 0xF8, /* 11111 */
3268 // 0x00, /* 00000 */
3269 // 0xD8, /* 11011 */
3270 // 0x50, /* 01010 */
3271 // 0x50, /* 01010 */
3272 // 0x50, /* 01010 */
3273 // 0x50, /* 01010 */
3274 // 0x50, /* 01010 */
3275
3276 // /*
3277 // * code=204, hex=0xCC, ascii="!L"
3278 // */
3279 // 0x50, /* 01010 */
3280 // 0x50, /* 01010 */
3281 // 0x50, /* 01010 */
3282 // 0x50, /* 01010 */
3283 // 0x58, /* 01011 */
3284 // 0x40, /* 01000 */
3285 // 0x58, /* 01011 */
3286 // 0x50, /* 01010 */
3287 // 0x50, /* 01010 */
3288 // 0x50, /* 01010 */
3289 // 0x50, /* 01010 */
3290 // 0x50, /* 01010 */
3291
3292 // /*
3293 // * code=205, hex=0xCD, ascii="!M"
3294 // */
3295 // 0x00, /* 00000 */
3296 // 0x00, /* 00000 */
3297 // 0x00, /* 00000 */
3298 // 0x00, /* 00000 */
3299 // 0xF8, /* 11111 */
3300 // 0x00, /* 00000 */
3301 // 0xF8, /* 11111 */
3302 // 0x00, /* 00000 */
3303 // 0x00, /* 00000 */
3304 // 0x00, /* 00000 */
3305 // 0x00, /* 00000 */
3306 // 0x00, /* 00000 */
3307
3308 // /*
3309 // * code=206, hex=0xCE, ascii="!N"
3310 // */
3311 // 0x50, /* 01010 */
3312 // 0x50, /* 01010 */
3313 // 0x50, /* 01010 */
3314 // 0x50, /* 01010 */
3315 // 0xD8, /* 11011 */
3316 // 0x00, /* 00000 */
3317 // 0xD8, /* 11011 */
3318 // 0x50, /* 01010 */
3319 // 0x50, /* 01010 */
3320 // 0x50, /* 01010 */
3321 // 0x50, /* 01010 */
3322 // 0x50, /* 01010 */
3323
3324 // /*
3325 // * code=207, hex=0xCF, ascii="!O"
3326 // */
3327 // 0x20, /* 00100 */
3328 // 0x20, /* 00100 */
3329 // 0x20, /* 00100 */
3330 // 0x20, /* 00100 */
3331 // 0xF8, /* 11111 */
3332 // 0x00, /* 00000 */
3333 // 0xF8, /* 11111 */
3334 // 0x00, /* 00000 */
3335 // 0x00, /* 00000 */
3336 // 0x00, /* 00000 */
3337 // 0x00, /* 00000 */
3338 // 0x00, /* 00000 */
3339
3340 // /*
3341 // * code=208, hex=0xD0, ascii="!P"
3342 // */
3343 // 0x50, /* 01010 */
3344 // 0x50, /* 01010 */
3345 // 0x50, /* 01010 */
3346 // 0x50, /* 01010 */
3347 // 0x50, /* 01010 */
3348 // 0xF8, /* 11111 */
3349 // 0x00, /* 00000 */
3350 // 0x00, /* 00000 */
3351 // 0x00, /* 00000 */
3352 // 0x00, /* 00000 */
3353 // 0x00, /* 00000 */
3354 // 0x00, /* 00000 */
3355
3356 // /*
3357 // * code=209, hex=0xD1, ascii="!Q"
3358 // */
3359 // 0x00, /* 00000 */
3360 // 0x00, /* 00000 */
3361 // 0x00, /* 00000 */
3362 // 0x00, /* 00000 */
3363 // 0xF8, /* 11111 */
3364 // 0x00, /* 00000 */
3365 // 0xF8, /* 11111 */
3366 // 0x20, /* 00100 */
3367 // 0x20, /* 00100 */
3368 // 0x20, /* 00100 */
3369 // 0x20, /* 00100 */
3370 // 0x20, /* 00100 */
3371
3372 // /*
3373 // * code=210, hex=0xD2, ascii="!R"
3374 // */
3375 // 0x00, /* 00000 */
3376 // 0x00, /* 00000 */
3377 // 0x00, /* 00000 */
3378 // 0x00, /* 00000 */
3379 // 0x00, /* 00000 */
3380 // 0xF8, /* 11111 */
3381 // 0x50, /* 01010 */
3382 // 0x50, /* 01010 */
3383 // 0x50, /* 01010 */
3384 // 0x50, /* 01010 */
3385 // 0x50, /* 01010 */
3386 // 0x50, /* 01010 */
3387
3388 // /*
3389 // * code=211, hex=0xD3, ascii="!S"
3390 // */
3391 // 0x50, /* 01010 */
3392 // 0x50, /* 01010 */
3393 // 0x50, /* 01010 */
3394 // 0x50, /* 01010 */
3395 // 0x50, /* 01010 */
3396 // 0x78, /* 01111 */
3397 // 0x00, /* 00000 */
3398 // 0x00, /* 00000 */
3399 // 0x00, /* 00000 */
3400 // 0x00, /* 00000 */
3401 // 0x00, /* 00000 */
3402 // 0x00, /* 00000 */
3403
3404 // /*
3405 // * code=212, hex=0xD4, ascii="!T"
3406 // */
3407 // 0x20, /* 00100 */
3408 // 0x20, /* 00100 */
3409 // 0x20, /* 00100 */
3410 // 0x20, /* 00100 */
3411 // 0x38, /* 00111 */
3412 // 0x20, /* 00100 */
3413 // 0x38, /* 00111 */
3414 // 0x00, /* 00000 */
3415 // 0x00, /* 00000 */
3416 // 0x00, /* 00000 */
3417 // 0x00, /* 00000 */
3418 // 0x00, /* 00000 */
3419
3420 // /*
3421 // * code=213, hex=0xD5, ascii="!U"
3422 // */
3423 // 0x00, /* 00000 */
3424 // 0x00, /* 00000 */
3425 // 0x00, /* 00000 */
3426 // 0x00, /* 00000 */
3427 // 0x38, /* 00111 */
3428 // 0x20, /* 00100 */
3429 // 0x38, /* 00111 */
3430 // 0x20, /* 00100 */
3431 // 0x20, /* 00100 */
3432 // 0x20, /* 00100 */
3433 // 0x20, /* 00100 */
3434 // 0x20, /* 00100 */
3435
3436 // /*
3437 // * code=214, hex=0xD6, ascii="!V"
3438 // */
3439 // 0x00, /* 00000 */
3440 // 0x00, /* 00000 */
3441 // 0x00, /* 00000 */
3442 // 0x00, /* 00000 */
3443 // 0x00, /* 00000 */
3444 // 0x78, /* 01111 */
3445 // 0x50, /* 01010 */
3446 // 0x50, /* 01010 */
3447 // 0x50, /* 01010 */
3448 // 0x50, /* 01010 */
3449 // 0x50, /* 01010 */
3450 // 0x50, /* 01010 */
3451
3452 // /*
3453 // * code=215, hex=0xD7, ascii="!W"
3454 // */
3455 // 0x50, /* 01010 */
3456 // 0x50, /* 01010 */
3457 // 0x50, /* 01010 */
3458 // 0x50, /* 01010 */
3459 // 0x50, /* 01010 */
3460 // 0xD8, /* 11011 */
3461 // 0x50, /* 01010 */
3462 // 0x50, /* 01010 */
3463 // 0x50, /* 01010 */
3464 // 0x50, /* 01010 */
3465 // 0x50, /* 01010 */
3466 // 0x50, /* 01010 */
3467
3468 // /*
3469 // * code=216, hex=0xD8, ascii="!X"
3470 // */
3471 // 0x20, /* 00100 */
3472 // 0x20, /* 00100 */
3473 // 0x20, /* 00100 */
3474 // 0x20, /* 00100 */
3475 // 0xF8, /* 11111 */
3476 // 0x00, /* 00000 */
3477 // 0xF8, /* 11111 */
3478 // 0x20, /* 00100 */
3479 // 0x20, /* 00100 */
3480 // 0x20, /* 00100 */
3481 // 0x20, /* 00100 */
3482 // 0x20, /* 00100 */
3483
3484 // /*
3485 // * code=217, hex=0xD9, ascii="!Y"
3486 // */
3487 // 0x20, /* 00100 */
3488 // 0x20, /* 00100 */
3489 // 0x20, /* 00100 */
3490 // 0x20, /* 00100 */
3491 // 0x20, /* 00100 */
3492 // 0xE0, /* 11100 */
3493 // 0x00, /* 00000 */
3494 // 0x00, /* 00000 */
3495 // 0x00, /* 00000 */
3496 // 0x00, /* 00000 */
3497 // 0x00, /* 00000 */
3498 // 0x00, /* 00000 */
3499
3500 // /*
3501 // * code=218, hex=0xDA, ascii="!Z"
3502 // */
3503 // 0x00, /* 00000 */
3504 // 0x00, /* 00000 */
3505 // 0x00, /* 00000 */
3506 // 0x00, /* 00000 */
3507 // 0x00, /* 00000 */
3508 // 0x38, /* 00111 */
3509 // 0x20, /* 00100 */
3510 // 0x20, /* 00100 */
3511 // 0x20, /* 00100 */
3512 // 0x20, /* 00100 */
3513 // 0x20, /* 00100 */
3514 // 0x20, /* 00100 */
3515
3516 // /*
3517 // * code=219, hex=0xDB, ascii="!["
3518 // */
3519 // 0xF8, /* 11111 */
3520 // 0xF8, /* 11111 */
3521 // 0xF8, /* 11111 */
3522 // 0xF8, /* 11111 */
3523 // 0xF8, /* 11111 */
3524 // 0xF8, /* 11111 */
3525 // 0xF8, /* 11111 */
3526 // 0xF8, /* 11111 */
3527 // 0xF8, /* 11111 */
3528 // 0xF8, /* 11111 */
3529 // 0xF8, /* 11111 */
3530 // 0xF8, /* 11111 */
3531
3532 // /*
3533 // * code=220, hex=0xDC, ascii="!\"
3534 // */
3535 // 0x00, /* 00000 */
3536 // 0x00, /* 00000 */
3537 // 0x00, /* 00000 */
3538 // 0x00, /* 00000 */
3539 // 0x00, /* 00000 */
3540 // 0x00, /* 00000 */
3541 // 0xF8, /* 11111 */
3542 // 0xF8, /* 11111 */
3543 // 0xF8, /* 11111 */
3544 // 0xF8, /* 11111 */
3545 // 0xF8, /* 11111 */
3546 // 0xF8, /* 11111 */
3547
3548 // /*
3549 // * code=221, hex=0xDD, ascii="!]"
3550 // */
3551 // 0xE0, /* 11100 */
3552 // 0xE0, /* 11100 */
3553 // 0xE0, /* 11100 */
3554 // 0xE0, /* 11100 */
3555 // 0xE0, /* 11100 */
3556 // 0xE0, /* 11100 */
3557 // 0xE0, /* 11100 */
3558 // 0xE0, /* 11100 */
3559 // 0xE0, /* 11100 */
3560 // 0xE0, /* 11100 */
3561 // 0xE0, /* 11100 */
3562 // 0xE0, /* 11100 */
3563
3564 // /*
3565 // * code=222, hex=0xDE, ascii="!^"
3566 // */
3567 // 0x38, /* 00111 */
3568 // 0x38, /* 00111 */
3569 // 0x38, /* 00111 */
3570 // 0x38, /* 00111 */
3571 // 0x38, /* 00111 */
3572 // 0x38, /* 00111 */
3573 // 0x38, /* 00111 */
3574 // 0x38, /* 00111 */
3575 // 0x38, /* 00111 */
3576 // 0x38, /* 00111 */
3577 // 0x38, /* 00111 */
3578 // 0x38, /* 00111 */
3579
3580 // /*
3581 // * code=223, hex=0xDF, ascii="!_"
3582 // */
3583 // 0xF8, /* 11111 */
3584 // 0xF8, /* 11111 */
3585 // 0xF8, /* 11111 */
3586 // 0xF8, /* 11111 */
3587 // 0xF8, /* 11111 */
3588 // 0xF8, /* 11111 */
3589 // 0x00, /* 00000 */
3590 // 0x00, /* 00000 */
3591 // 0x00, /* 00000 */
3592 // 0x00, /* 00000 */
3593 // 0x00, /* 00000 */
3594 // 0x00, /* 00000 */
3595
3596 // /*
3597 // * code=224, hex=0xE0, ascii="!`"
3598 // */
3599 // 0x00, /* 00000 */
3600 // 0x00, /* 00000 */
3601 // 0x00, /* 00000 */
3602 // 0x48, /* 01001 */
3603 // 0xB0, /* 10110 */
3604 // 0xA0, /* 10100 */
3605 // 0xA0, /* 10100 */
3606 // 0xB0, /* 10110 */
3607 // 0x48, /* 01001 */
3608 // 0x00, /* 00000 */
3609 // 0x00, /* 00000 */
3610 // 0x00, /* 00000 */
3611
3612 // /*
3613 // * code=225, hex=0xE1, ascii="!a"
3614 // */
3615 // 0x00, /* 00000 */
3616 // 0x60, /* 01100 */
3617 // 0x90, /* 10010 */
3618 // 0x90, /* 10010 */
3619 // 0xA0, /* 10100 */
3620 // 0xE0, /* 11100 */
3621 // 0x90, /* 10010 */
3622 // 0x90, /* 10010 */
3623 // 0x90, /* 10010 */
3624 // 0xE0, /* 11100 */
3625 // 0x80, /* 10000 */
3626 // 0x80, /* 10000 */
3627
3628 // /*
3629 // * code=226, hex=0xE2, ascii="!b"
3630 // */
3631 // 0x00, /* 00000 */
3632 // 0x00, /* 00000 */
3633 // 0x78, /* 01111 */
3634 // 0x48, /* 01001 */
3635 // 0x40, /* 01000 */
3636 // 0x40, /* 01000 */
3637 // 0x40, /* 01000 */
3638 // 0x40, /* 01000 */
3639 // 0x40, /* 01000 */
3640 // 0x40, /* 01000 */
3641 // 0x00, /* 00000 */
3642 // 0x00, /* 00000 */
3643
3644 // /*
3645 // * code=227, hex=0xE3, ascii="!c"
3646 // */
3647 // 0x00, /* 00000 */
3648 // 0x00, /* 00000 */
3649 // 0x00, /* 00000 */
3650 // 0x00, /* 00000 */
3651 // 0x00, /* 00000 */
3652 // 0xF8, /* 11111 */
3653 // 0x50, /* 01010 */
3654 // 0x50, /* 01010 */
3655 // 0x50, /* 01010 */
3656 // 0x50, /* 01010 */
3657 // 0x00, /* 00000 */
3658 // 0x00, /* 00000 */
3659
3660 // /*
3661 // * code=228, hex=0xE4, ascii="!d"
3662 // */
3663 // 0x00, /* 00000 */
3664 // 0x00, /* 00000 */
3665 // 0x00, /* 00000 */
3666 // 0xF8, /* 11111 */
3667 // 0x48, /* 01001 */
3668 // 0x20, /* 00100 */
3669 // 0x10, /* 00010 */
3670 // 0x20, /* 00100 */
3671 // 0x48, /* 01001 */
3672 // 0xF8, /* 11111 */
3673 // 0x00, /* 00000 */
3674 // 0x00, /* 00000 */
3675
3676 // /*
3677 // * code=229, hex=0xE5, ascii="!e"
3678 // */
3679 // 0x00, /* 00000 */
3680 // 0x00, /* 00000 */
3681 // 0x00, /* 00000 */
3682 // 0x00, /* 00000 */
3683 // 0xF8, /* 11111 */
3684 // 0xA0, /* 10100 */
3685 // 0xA0, /* 10100 */
3686 // 0xA0, /* 10100 */
3687 // 0x40, /* 01000 */
3688 // 0x00, /* 00000 */
3689 // 0x00, /* 00000 */
3690 // 0x00, /* 00000 */
3691
3692 // /*
3693 // * code=230, hex=0xE6, ascii="!f"
3694 // */
3695 // 0x00, /* 00000 */
3696 // 0x00, /* 00000 */
3697 // 0x00, /* 00000 */
3698 // 0x00, /* 00000 */
3699 // 0x90, /* 10010 */
3700 // 0x90, /* 10010 */
3701 // 0x90, /* 10010 */
3702 // 0x90, /* 10010 */
3703 // 0x90, /* 10010 */
3704 // 0xE0, /* 11100 */
3705 // 0x80, /* 10000 */
3706 // 0x80, /* 10000 */
3707
3708 // /*
3709 // * code=231, hex=0xE7, ascii="!g"
3710 // */
3711 // 0x00, /* 00000 */
3712 // 0x00, /* 00000 */
3713 // 0x00, /* 00000 */
3714 // 0x00, /* 00000 */
3715 // 0x00, /* 00000 */
3716 // 0x50, /* 01010 */
3717 // 0xA0, /* 10100 */
3718 // 0x20, /* 00100 */
3719 // 0x20, /* 00100 */
3720 // 0x20, /* 00100 */
3721 // 0x00, /* 00000 */
3722 // 0x00, /* 00000 */
3723
3724 // /*
3725 // * code=232, hex=0xE8, ascii="!h"
3726 // */
3727 // 0x00, /* 00000 */
3728 // 0x00, /* 00000 */
3729 // 0x00, /* 00000 */
3730 // 0x00, /* 00000 */
3731 // 0x70, /* 01110 */
3732 // 0x20, /* 00100 */
3733 // 0x50, /* 01010 */
3734 // 0x50, /* 01010 */
3735 // 0x20, /* 00100 */
3736 // 0x70, /* 01110 */
3737 // 0x00, /* 00000 */
3738 // 0x00, /* 00000 */
3739
3740 // /*
3741 // * code=233, hex=0xE9, ascii="!i"
3742 // */
3743 // 0x00, /* 00000 */
3744 // 0x00, /* 00000 */
3745 // 0x00, /* 00000 */
3746 // 0x20, /* 00100 */
3747 // 0x50, /* 01010 */
3748 // 0x88, /* 10001 */
3749 // 0xF8, /* 11111 */
3750 // 0x88, /* 10001 */
3751 // 0x50, /* 01010 */
3752 // 0x20, /* 00100 */
3753 // 0x00, /* 00000 */
3754 // 0x00, /* 00000 */
3755
3756 // /*
3757 // * code=234, hex=0xEA, ascii="!j"
3758 // */
3759 // 0x00, /* 00000 */
3760 // 0x00, /* 00000 */
3761 // 0x00, /* 00000 */
3762 // 0x20, /* 00100 */
3763 // 0x50, /* 01010 */
3764 // 0x88, /* 10001 */
3765 // 0x88, /* 10001 */
3766 // 0x50, /* 01010 */
3767 // 0x50, /* 01010 */
3768 // 0xD8, /* 11011 */
3769 // 0x00, /* 00000 */
3770 // 0x00, /* 00000 */
3771
3772 // /*
3773 // * code=235, hex=0xEB, ascii="!k"
3774 // */
3775 // 0x00, /* 00000 */
3776 // 0x00, /* 00000 */
3777 // 0x30, /* 00110 */
3778 // 0x40, /* 01000 */
3779 // 0x40, /* 01000 */
3780 // 0x20, /* 00100 */
3781 // 0x70, /* 01110 */
3782 // 0x90, /* 10010 */
3783 // 0x90, /* 10010 */
3784 // 0x60, /* 01100 */
3785 // 0x00, /* 00000 */
3786 // 0x00, /* 00000 */
3787
3788 // /*
3789 // * code=236, hex=0xEC, ascii="!l"
3790 // */
3791 // 0x00, /* 00000 */
3792 // 0x00, /* 00000 */
3793 // 0x00, /* 00000 */
3794 // 0x00, /* 00000 */
3795 // 0x50, /* 01010 */
3796 // 0xA8, /* 10101 */
3797 // 0xA8, /* 10101 */
3798 // 0x50, /* 01010 */
3799 // 0x00, /* 00000 */
3800 // 0x00, /* 00000 */
3801 // 0x00, /* 00000 */
3802 // 0x00, /* 00000 */
3803
3804 // /*
3805 // * code=237, hex=0xED, ascii="!m"
3806 // */
3807 // 0x00, /* 00000 */
3808 // 0x00, /* 00000 */
3809 // 0x20, /* 00100 */
3810 // 0x20, /* 00100 */
3811 // 0x70, /* 01110 */
3812 // 0xA8, /* 10101 */
3813 // 0xA8, /* 10101 */
3814 // 0x70, /* 01110 */
3815 // 0x20, /* 00100 */
3816 // 0x20, /* 00100 */
3817 // 0x00, /* 00000 */
3818 // 0x00, /* 00000 */
3819
3820 // /*
3821 // * code=238, hex=0xEE, ascii="!n"
3822 // */
3823 // 0x00, /* 00000 */
3824 // 0x00, /* 00000 */
3825 // 0x00, /* 00000 */
3826 // 0x70, /* 01110 */
3827 // 0x80, /* 10000 */
3828 // 0x80, /* 10000 */
3829 // 0xE0, /* 11100 */
3830 // 0x80, /* 10000 */
3831 // 0x80, /* 10000 */
3832 // 0x70, /* 01110 */
3833 // 0x00, /* 00000 */
3834 // 0x00, /* 00000 */
3835
3836 // /*
3837 // * code=239, hex=0xEF, ascii="!o"
3838 // */
3839 // 0x00, /* 00000 */
3840 // 0x00, /* 00000 */
3841 // 0x00, /* 00000 */
3842 // 0x60, /* 01100 */
3843 // 0x90, /* 10010 */
3844 // 0x90, /* 10010 */
3845 // 0x90, /* 10010 */
3846 // 0x90, /* 10010 */
3847 // 0x90, /* 10010 */
3848 // 0x00, /* 00000 */
3849 // 0x00, /* 00000 */
3850 // 0x00, /* 00000 */
3851
3852 // /*
3853 // * code=240, hex=0xF0, ascii="!p"
3854 // */
3855 // 0x00, /* 00000 */
3856 // 0x00, /* 00000 */
3857 // 0x00, /* 00000 */
3858 // 0xF0, /* 11110 */
3859 // 0x00, /* 00000 */
3860 // 0xF0, /* 11110 */
3861 // 0x00, /* 00000 */
3862 // 0xF0, /* 11110 */
3863 // 0x00, /* 00000 */
3864 // 0x00, /* 00000 */
3865 // 0x00, /* 00000 */
3866 // 0x00, /* 00000 */
3867
3868 // /*
3869 // * code=241, hex=0xF1, ascii="!q"
3870 // */
3871 // 0x00, /* 00000 */
3872 // 0x00, /* 00000 */
3873 // 0x00, /* 00000 */
3874 // 0x20, /* 00100 */
3875 // 0x20, /* 00100 */
3876 // 0xF8, /* 11111 */
3877 // 0x20, /* 00100 */
3878 // 0x20, /* 00100 */
3879 // 0x00, /* 00000 */
3880 // 0xF8, /* 11111 */
3881 // 0x00, /* 00000 */
3882 // 0x00, /* 00000 */
3883
3884 // /*
3885 // * code=242, hex=0xF2, ascii="!r"
3886 // */
3887 // 0x00, /* 00000 */
3888 // 0x80, /* 10000 */
3889 // 0x40, /* 01000 */
3890 // 0x20, /* 00100 */
3891 // 0x10, /* 00010 */
3892 // 0x20, /* 00100 */
3893 // 0x40, /* 01000 */
3894 // 0x80, /* 10000 */
3895 // 0x00, /* 00000 */
3896 // 0xF0, /* 11110 */
3897 // 0x00, /* 00000 */
3898 // 0x00, /* 00000 */
3899
3900 // /*
3901 // * code=243, hex=0xF3, ascii="!s"
3902 // */
3903 // 0x00, /* 00000 */
3904 // 0x10, /* 00010 */
3905 // 0x20, /* 00100 */
3906 // 0x40, /* 01000 */
3907 // 0x80, /* 10000 */
3908 // 0x40, /* 01000 */
3909 // 0x20, /* 00100 */
3910 // 0x10, /* 00010 */
3911 // 0x00, /* 00000 */
3912 // 0xF0, /* 11110 */
3913 // 0x00, /* 00000 */
3914 // 0x00, /* 00000 */
3915
3916 // /*
3917 // * code=244, hex=0xF4, ascii="!t"
3918 // */
3919 // 0x00, /* 00000 */
3920 // 0x00, /* 00000 */
3921 // 0x10, /* 00010 */
3922 // 0x28, /* 00101 */
3923 // 0x20, /* 00100 */
3924 // 0x20, /* 00100 */
3925 // 0x20, /* 00100 */
3926 // 0x20, /* 00100 */
3927 // 0x20, /* 00100 */
3928 // 0x20, /* 00100 */
3929 // 0x20, /* 00100 */
3930 // 0x20, /* 00100 */
3931
3932 // /*
3933 // * code=245, hex=0xF5, ascii="!u"
3934 // */
3935 // 0x20, /* 00100 */
3936 // 0x20, /* 00100 */
3937 // 0x20, /* 00100 */
3938 // 0x20, /* 00100 */
3939 // 0x20, /* 00100 */
3940 // 0x20, /* 00100 */
3941 // 0x20, /* 00100 */
3942 // 0x20, /* 00100 */
3943 // 0xA0, /* 10100 */
3944 // 0x40, /* 01000 */
3945 // 0x00, /* 00000 */
3946 // 0x00, /* 00000 */
3947
3948 // /*
3949 // * code=246, hex=0xF6, ascii="!v"
3950 // */
3951 // 0x00, /* 00000 */
3952 // 0x00, /* 00000 */
3953 // 0x20, /* 00100 */
3954 // 0x20, /* 00100 */
3955 // 0x00, /* 00000 */
3956 // 0xF8, /* 11111 */
3957 // 0x00, /* 00000 */
3958 // 0x20, /* 00100 */
3959 // 0x20, /* 00100 */
3960 // 0x00, /* 00000 */
3961 // 0x00, /* 00000 */
3962 // 0x00, /* 00000 */
3963
3964 // /*
3965 // * code=247, hex=0xF7, ascii="!w"
3966 // */
3967 // 0x00, /* 00000 */
3968 // 0x00, /* 00000 */
3969 // 0x00, /* 00000 */
3970 // 0x00, /* 00000 */
3971 // 0x50, /* 01010 */
3972 // 0xA0, /* 10100 */
3973 // 0x00, /* 00000 */
3974 // 0x50, /* 01010 */
3975 // 0xA0, /* 10100 */
3976 // 0x00, /* 00000 */
3977 // 0x00, /* 00000 */
3978 // 0x00, /* 00000 */
3979
3980 // /*
3981 // * code=248, hex=0xF8, ascii="!x"
3982 // */
3983 // 0x60, /* 01100 */
3984 // 0x90, /* 10010 */
3985 // 0x90, /* 10010 */
3986 // 0x60, /* 01100 */
3987 // 0x00, /* 00000 */
3988 // 0x00, /* 00000 */
3989 // 0x00, /* 00000 */
3990 // 0x00, /* 00000 */
3991 // 0x00, /* 00000 */
3992 // 0x00, /* 00000 */
3993 // 0x00, /* 00000 */
3994 // 0x00, /* 00000 */
3995
3996 // /*
3997 // * code=249, hex=0xF9, ascii="!y"
3998 // */
3999 // 0x00, /* 00000 */
4000 // 0x00, /* 00000 */
4001 // 0x00, /* 00000 */
4002 // 0x00, /* 00000 */
4003 // 0x20, /* 00100 */
4004 // 0x70, /* 01110 */
4005 // 0x20, /* 00100 */
4006 // 0x00, /* 00000 */
4007 // 0x00, /* 00000 */
4008 // 0x00, /* 00000 */
4009 // 0x00, /* 00000 */
4010 // 0x00, /* 00000 */
4011
4012 // /*
4013 // * code=250, hex=0xFA, ascii="!z"
4014 // */
4015 // 0x00, /* 00000 */
4016 // 0x00, /* 00000 */
4017 // 0x00, /* 00000 */
4018 // 0x00, /* 00000 */
4019 // 0x00, /* 00000 */
4020 // 0x20, /* 00100 */
4021 // 0x20, /* 00100 */
4022 // 0x00, /* 00000 */
4023 // 0x00, /* 00000 */
4024 // 0x00, /* 00000 */
4025 // 0x00, /* 00000 */
4026 // 0x00, /* 00000 */
4027
4028 // /*
4029 // * code=251, hex=0xFB, ascii="!{"
4030 // */
4031 // 0x00, /* 00000 */
4032 // 0x38, /* 00111 */
4033 // 0x20, /* 00100 */
4034 // 0x20, /* 00100 */
4035 // 0x20, /* 00100 */
4036 // 0x20, /* 00100 */
4037 // 0xA0, /* 10100 */
4038 // 0xA0, /* 10100 */
4039 // 0x60, /* 01100 */
4040 // 0x20, /* 00100 */
4041 // 0x00, /* 00000 */
4042 // 0x00, /* 00000 */
4043
4044 // /*
4045 // * code=252, hex=0xFC, ascii="!|"
4046 // */
4047 // 0xA0, /* 10100 */
4048 // 0xD0, /* 11010 */
4049 // 0x90, /* 10010 */
4050 // 0x90, /* 10010 */
4051 // 0x90, /* 10010 */
4052 // 0x90, /* 10010 */
4053 // 0x00, /* 00000 */
4054 // 0x00, /* 00000 */
4055 // 0x00, /* 00000 */
4056 // 0x00, /* 00000 */
4057 // 0x00, /* 00000 */
4058 // 0x00, /* 00000 */
4059
4060 // /*
4061 // * code=253, hex=0xFD, ascii="!}"
4062 // */
4063 // 0x60, /* 01100 */
4064 // 0x90, /* 10010 */
4065 // 0x10, /* 00010 */
4066 // 0x60, /* 01100 */
4067 // 0x80, /* 10000 */
4068 // 0xF0, /* 11110 */
4069 // 0x00, /* 00000 */
4070 // 0x00, /* 00000 */
4071 // 0x00, /* 00000 */
4072 // 0x00, /* 00000 */
4073 // 0x00, /* 00000 */
4074 // 0x00, /* 00000 */
4075
4076 // /*
4077 // * code=254, hex=0xFE, ascii="!~"
4078 // */
4079 // 0x00, /* 00000 */
4080 // 0x00, /* 00000 */
4081 // 0x00, /* 00000 */
4082 // 0x70, /* 01110 */
4083 // 0x70, /* 01110 */
4084 // 0x70, /* 01110 */
4085 // 0x70, /* 01110 */
4086 // 0x70, /* 01110 */
4087 // 0x00, /* 00000 */
4088 // 0x00, /* 00000 */
4089 // 0x00, /* 00000 */
4090 // 0x00, /* 00000 */
4091
4092 // /*
4093 // * code=255, hex=0xFF, ascii="!^Ÿ"
4094 // */
4095 // 0x00, /* 00000 */
4096 // 0x00, /* 00000 */
4097 // 0x00, /* 00000 */
4098 // 0x00, /* 00000 */
4099 // 0x00, /* 00000 */
4100 // 0x00, /* 00000 */
4101 // 0x00, /* 00000 */
4102 // 0x00, /* 00000 */
4103 // 0x00, /* 00000 */
4104 // 0x00, /* 00000 */
4105 // 0x00, /* 00000 */
4106 // 0x00, /* 00000 */
4107};

◆ console_font_5x8

const unsigned char fl::console_font_5x8[]
static

Definition at line 8 of file console_font_5x8.h.

8 {
9
10// code points 0-31 and 127-255 are commented out to save memory, they contain extra characters (CP437),
11// which could be used with an UTF-8 to CP437 conversion
12
13 // /*
14 // * code=0, hex=0x00, ascii="^@"
15 // */
16 // 0x00, /* 00000 */
17 // 0x00, /* 00000 */
18 // 0x00, /* 00000 */
19 // 0x00, /* 00000 */
20 // 0x00, /* 00000 */
21 // 0x00, /* 00000 */
22 // 0x00, /* 00000 */
23 // 0x00, /* 00000 */
24
25 // /*
26 // * code=1, hex=0x01, ascii="^A"
27 // */
28 // 0x00, /* 00000 */
29 // 0x00, /* 00000 */
30 // 0x70, /* 01110 */
31 // 0xA8, /* 10101 */
32 // 0xF8, /* 11111 */
33 // 0xD8, /* 11011 */
34 // 0x70, /* 01110 */
35 // 0x00, /* 00000 */
36
37 // /*
38 // * code=2, hex=0x02, ascii="^B"
39 // */
40 // 0x00, /* 00000 */
41 // 0x00, /* 00000 */
42 // 0x70, /* 01110 */
43 // 0xA8, /* 10101 */
44 // 0xF8, /* 11111 */
45 // 0xF8, /* 11111 */
46 // 0x70, /* 01110 */
47 // 0x00, /* 00000 */
48
49 // /*
50 // * code=3, hex=0x03, ascii="^C"
51 // */
52 // 0x00, /* 00000 */
53 // 0x00, /* 00000 */
54 // 0x50, /* 01010 */
55 // 0xF8, /* 11111 */
56 // 0xF8, /* 11111 */
57 // 0x70, /* 01110 */
58 // 0x20, /* 00100 */
59 // 0x00, /* 00000 */
60
61 // /*
62 // * code=4, hex=0x04, ascii="^D"
63 // */
64 // 0x00, /* 00000 */
65 // 0x00, /* 00000 */
66 // 0x20, /* 00100 */
67 // 0x70, /* 01110 */
68 // 0xF8, /* 11111 */
69 // 0x70, /* 01110 */
70 // 0x20, /* 00100 */
71 // 0x00, /* 00000 */
72
73 // /*
74 // * code=5, hex=0x05, ascii="^E"
75 // */
76 // 0x00, /* 00000 */
77 // 0x00, /* 00000 */
78 // 0x70, /* 01110 */
79 // 0xA8, /* 10101 */
80 // 0xF8, /* 11111 */
81 // 0x20, /* 00100 */
82 // 0x20, /* 00100 */
83 // 0x00, /* 00000 */
84
85 // /*
86 // * code=6, hex=0x06, ascii="^F"
87 // */
88 // 0x00, /* 00000 */
89 // 0x00, /* 00000 */
90 // 0x20, /* 00100 */
91 // 0x70, /* 01110 */
92 // 0xF8, /* 11111 */
93 // 0xA8, /* 10101 */
94 // 0x20, /* 00100 */
95 // 0x00, /* 00000 */
96
97 // /*
98 // * code=7, hex=0x07, ascii="^G"
99 // */
100 // 0x00, /* 00000 */
101 // 0x00, /* 00000 */
102 // 0x00, /* 00000 */
103 // 0x20, /* 00100 */
104 // 0x70, /* 01110 */
105 // 0x20, /* 00100 */
106 // 0x00, /* 00000 */
107 // 0x00, /* 00000 */
108
109 // /*
110 // * code=8, hex=0x08, ascii="^H"
111 // */
112 // 0x00, /* 00000 */
113 // 0xF8, /* 11111 */
114 // 0xF8, /* 11111 */
115 // 0xD8, /* 11011 */
116 // 0x88, /* 10001 */
117 // 0xD8, /* 11011 */
118 // 0xF8, /* 11111 */
119 // 0xF8, /* 11111 */
120
121 // /*
122 // * code=9, hex=0x09, ascii="^I"
123 // */
124 // 0x00, /* 00000 */
125 // 0x00, /* 00000 */
126 // 0x00, /* 00000 */
127 // 0x20, /* 00100 */
128 // 0x50, /* 01010 */
129 // 0x20, /* 00100 */
130 // 0x00, /* 00000 */
131 // 0x00, /* 00000 */
132
133 // /*
134 // * code=10, hex=0x0A, ascii="^J"
135 // */
136 // 0x00, /* 00000 */
137 // 0xF8, /* 11111 */
138 // 0xF8, /* 11111 */
139 // 0xD8, /* 11011 */
140 // 0x88, /* 10001 */
141 // 0xD8, /* 11011 */
142 // 0xF8, /* 11111 */
143 // 0xF8, /* 11111 */
144
145 // /*
146 // * code=11, hex=0x0B, ascii="^K"
147 // */
148 // 0x00, /* 00000 */
149 // 0x00, /* 00000 */
150 // 0x38, /* 00111 */
151 // 0x18, /* 00011 */
152 // 0x68, /* 01101 */
153 // 0xA0, /* 10100 */
154 // 0x40, /* 01000 */
155 // 0x00, /* 00000 */
156
157 // /*
158 // * code=12, hex=0x0C, ascii="^L"
159 // */
160 // 0x00, /* 00000 */
161 // 0x00, /* 00000 */
162 // 0x20, /* 00100 */
163 // 0x50, /* 01010 */
164 // 0x20, /* 00100 */
165 // 0x70, /* 01110 */
166 // 0x20, /* 00100 */
167 // 0x00, /* 00000 */
168
169 // /*
170 // * code=13, hex=0x0D, ascii="^M"
171 // */
172 // 0x00, /* 00000 */
173 // 0x00, /* 00000 */
174 // 0x20, /* 00100 */
175 // 0x50, /* 01010 */
176 // 0x40, /* 01000 */
177 // 0xC0, /* 11000 */
178 // 0x80, /* 10000 */
179 // 0x00, /* 00000 */
180
181 // /*
182 // * code=14, hex=0x0E, ascii="^N"
183 // */
184 // 0x00, /* 00000 */
185 // 0x00, /* 00000 */
186 // 0x38, /* 00111 */
187 // 0x48, /* 01001 */
188 // 0x58, /* 01011 */
189 // 0xD0, /* 11010 */
190 // 0x80, /* 10000 */
191 // 0x00, /* 00000 */
192
193 // /*
194 // * code=15, hex=0x0F, ascii="^O"
195 // */
196 // 0x00, /* 00000 */
197 // 0x00, /* 00000 */
198 // 0x00, /* 00000 */
199 // 0x20, /* 00100 */
200 // 0x50, /* 01010 */
201 // 0x20, /* 00100 */
202 // 0x00, /* 00000 */
203 // 0x00, /* 00000 */
204
205 // /*
206 // * code=16, hex=0x10, ascii="^P"
207 // */
208 // 0x00, /* 00000 */
209 // 0x00, /* 00000 */
210 // 0x40, /* 01000 */
211 // 0x60, /* 01100 */
212 // 0x70, /* 01110 */
213 // 0x60, /* 01100 */
214 // 0x40, /* 01000 */
215 // 0x00, /* 00000 */
216
217 // /*
218 // * code=17, hex=0x11, ascii="^Q"
219 // */
220 // 0x00, /* 00000 */
221 // 0x00, /* 00000 */
222 // 0x10, /* 00010 */
223 // 0x30, /* 00110 */
224 // 0x70, /* 01110 */
225 // 0x30, /* 00110 */
226 // 0x10, /* 00010 */
227 // 0x00, /* 00000 */
228
229 // /*
230 // * code=18, hex=0x12, ascii="^R"
231 // */
232 // 0x00, /* 00000 */
233 // 0x00, /* 00000 */
234 // 0x20, /* 00100 */
235 // 0x70, /* 01110 */
236 // 0x20, /* 00100 */
237 // 0x70, /* 01110 */
238 // 0x20, /* 00100 */
239 // 0x00, /* 00000 */
240
241 // /*
242 // * code=19, hex=0x13, ascii="^S"
243 // */
244 // 0x00, /* 00000 */
245 // 0x00, /* 00000 */
246 // 0x50, /* 01010 */
247 // 0x50, /* 01010 */
248 // 0x50, /* 01010 */
249 // 0x00, /* 00000 */
250 // 0x50, /* 01010 */
251 // 0x00, /* 00000 */
252
253 // /*
254 // * code=20, hex=0x14, ascii="^T"
255 // */
256 // 0x00, /* 00000 */
257 // 0x00, /* 00000 */
258 // 0x78, /* 01111 */
259 // 0xD0, /* 11010 */
260 // 0xD0, /* 11010 */
261 // 0x50, /* 01010 */
262 // 0x50, /* 01010 */
263 // 0x50, /* 01010 */
264
265 // /*
266 // * code=21, hex=0x15, ascii="^U"
267 // */
268 // 0x00, /* 00000 */
269 // 0x00, /* 00000 */
270 // 0x18, /* 00011 */
271 // 0x60, /* 01100 */
272 // 0x90, /* 10010 */
273 // 0x48, /* 01001 */
274 // 0x30, /* 00110 */
275 // 0xC0, /* 11000 */
276
277 // /*
278 // * code=22, hex=0x16, ascii="^V"
279 // */
280 // 0x00, /* 00000 */
281 // 0x00, /* 00000 */
282 // 0x00, /* 00000 */
283 // 0x00, /* 00000 */
284 // 0x00, /* 00000 */
285 // 0xF8, /* 11111 */
286 // 0xF8, /* 11111 */
287 // 0x00, /* 00000 */
288
289 // /*
290 // * code=23, hex=0x17, ascii="^W"
291 // */
292 // 0x00, /* 00000 */
293 // 0x00, /* 00000 */
294 // 0x20, /* 00100 */
295 // 0x70, /* 01110 */
296 // 0x20, /* 00100 */
297 // 0x70, /* 01110 */
298 // 0x20, /* 00100 */
299 // 0x70, /* 01110 */
300
301 // /*
302 // * code=24, hex=0x18, ascii="^X"
303 // */
304 // 0x00, /* 00000 */
305 // 0x00, /* 00000 */
306 // 0x20, /* 00100 */
307 // 0x70, /* 01110 */
308 // 0x20, /* 00100 */
309 // 0x20, /* 00100 */
310 // 0x20, /* 00100 */
311 // 0x00, /* 00000 */
312
313 // /*
314 // * code=25, hex=0x19, ascii="^Y"
315 // */
316 // 0x00, /* 00000 */
317 // 0x00, /* 00000 */
318 // 0x20, /* 00100 */
319 // 0x20, /* 00100 */
320 // 0x20, /* 00100 */
321 // 0x70, /* 01110 */
322 // 0x20, /* 00100 */
323 // 0x00, /* 00000 */
324
325 // /*
326 // * code=26, hex=0x1A, ascii="^Z"
327 // */
328 // 0x00, /* 00000 */
329 // 0x00, /* 00000 */
330 // 0x00, /* 00000 */
331 // 0x10, /* 00010 */
332 // 0xF8, /* 11111 */
333 // 0x10, /* 00010 */
334 // 0x00, /* 00000 */
335 // 0x00, /* 00000 */
336
337 // /*
338 // * code=27, hex=0x1B, ascii="^["
339 // */
340 // 0x00, /* 00000 */
341 // 0x00, /* 00000 */
342 // 0x00, /* 00000 */
343 // 0x40, /* 01000 */
344 // 0xF8, /* 11111 */
345 // 0x40, /* 01000 */
346 // 0x00, /* 00000 */
347 // 0x00, /* 00000 */
348
349 // /*
350 // * code=28, hex=0x1C, ascii="^\"
351 // */
352 // 0x00, /* 00000 */
353 // 0x00, /* 00000 */
354 // 0x00, /* 00000 */
355 // 0x00, /* 00000 */
356 // 0x80, /* 10000 */
357 // 0xF8, /* 11111 */
358 // 0x00, /* 00000 */
359 // 0x00, /* 00000 */
360
361 // /*
362 // * code=29, hex=0x1D, ascii="^]"
363 // */
364 // 0x00, /* 00000 */
365 // 0x00, /* 00000 */
366 // 0x00, /* 00000 */
367 // 0x50, /* 01010 */
368 // 0xF8, /* 11111 */
369 // 0x50, /* 01010 */
370 // 0x00, /* 00000 */
371 // 0x00, /* 00000 */
372
373 // /*
374 // * code=30, hex=0x1E, ascii="^^"
375 // */
376 // 0x00, /* 00000 */
377 // 0x00, /* 00000 */
378 // 0x00, /* 00000 */
379 // 0x00, /* 00000 */
380 // 0x20, /* 00100 */
381 // 0x70, /* 01110 */
382 // 0xF8, /* 11111 */
383 // 0x00, /* 00000 */
384
385 // /*
386 // * code=31, hex=0x1F, ascii="^_"
387 // */
388 // 0x00, /* 00000 */
389 // 0x00, /* 00000 */
390 // 0x00, /* 00000 */
391 // 0x00, /* 00000 */
392 // 0xF8, /* 11111 */
393 // 0x70, /* 01110 */
394 // 0x20, /* 00100 */
395 // 0x00, /* 00000 */
396
397 /*
398 * code=32, hex=0x20, ascii=" "
399 */
400 0x00, /* 00000 */
401 0x00, /* 00000 */
402 0x00, /* 00000 */
403 0x00, /* 00000 */
404 0x00, /* 00000 */
405 0x00, /* 00000 */
406 0x00, /* 00000 */
407 0x00, /* 00000 */
408
409 /*
410 * code=33, hex=0x21, ascii="!"
411 */
412 0x00, /* 00000 */
413 0x00, /* 00000 */
414 0x20, /* 00100 */
415 0x20, /* 00100 */
416 0x20, /* 00100 */
417 0x00, /* 00000 */
418 0x20, /* 00100 */
419 0x00, /* 00000 */
420
421 /*
422 * code=34, hex=0x22, ascii="""
423 */
424 0x00, /* 00000 */
425 0x00, /* 00000 */
426 0x50, /* 01010 */
427 0x50, /* 01010 */
428 0x00, /* 00000 */
429 0x00, /* 00000 */
430 0x00, /* 00000 */
431 0x00, /* 00000 */
432
433 /*
434 * code=35, hex=0x23, ascii="#"
435 */
436 0x00, /* 00000 */
437 0x00, /* 00000 */
438 0x50, /* 01010 */
439 0xF8, /* 11111 */
440 0x50, /* 01010 */
441 0xF8, /* 11111 */
442 0x50, /* 01010 */
443 0x00, /* 00000 */
444
445 /*
446 * code=36, hex=0x24, ascii="$"
447 */
448 0x00, /* 00000 */
449 0x00, /* 00000 */
450 0x20, /* 00100 */
451 0x30, /* 00110 */
452 0x40, /* 01000 */
453 0x30, /* 00110 */
454 0x60, /* 01100 */
455 0x20, /* 00100 */
456
457 /*
458 * code=37, hex=0x25, ascii="%"
459 */
460 0x00, /* 00000 */
461 0x40, /* 01000 */
462 0xA8, /* 10101 */
463 0x50, /* 01010 */
464 0x30, /* 00110 */
465 0x68, /* 01101 */
466 0x90, /* 10010 */
467 0x00, /* 00000 */
468
469 /*
470 * code=38, hex=0x26, ascii="&"
471 */
472 0x00, /* 00000 */
473 0x00, /* 00000 */
474 0x30, /* 00110 */
475 0x40, /* 01000 */
476 0x68, /* 01101 */
477 0x90, /* 10010 */
478 0x68, /* 01101 */
479 0x00, /* 00000 */
480
481 /*
482 * code=39, hex=0x27, ascii="'"
483 */
484 0x00, /* 00000 */
485 0x20, /* 00100 */
486 0x20, /* 00100 */
487 0x00, /* 00000 */
488 0x00, /* 00000 */
489 0x00, /* 00000 */
490 0x00, /* 00000 */
491 0x00, /* 00000 */
492
493 /*
494 * code=40, hex=0x28, ascii="("
495 */
496 0x00, /* 00000 */
497 0x00, /* 00000 */
498 0x20, /* 00100 */
499 0x40, /* 01000 */
500 0x40, /* 01000 */
501 0x40, /* 01000 */
502 0x20, /* 00100 */
503 0x00, /* 00000 */
504
505 /*
506 * code=41, hex=0x29, ascii=")"
507 */
508 0x00, /* 00000 */
509 0x00, /* 00000 */
510 0x40, /* 01000 */
511 0x20, /* 00100 */
512 0x20, /* 00100 */
513 0x20, /* 00100 */
514 0x40, /* 01000 */
515 0x00, /* 00000 */
516
517 /*
518 * code=42, hex=0x2A, ascii="*"
519 */
520 0x00, /* 00000 */
521 0x00, /* 00000 */
522 0x50, /* 01010 */
523 0x20, /* 00100 */
524 0x70, /* 01110 */
525 0x20, /* 00100 */
526 0x50, /* 01010 */
527 0x00, /* 00000 */
528
529 /*
530 * code=43, hex=0x2B, ascii="+"
531 */
532 0x00, /* 00000 */
533 0x00, /* 00000 */
534 0x00, /* 00000 */
535 0x20, /* 00100 */
536 0x70, /* 01110 */
537 0x20, /* 00100 */
538 0x00, /* 00000 */
539 0x00, /* 00000 */
540
541 /*
542 * code=44, hex=0x2C, ascii=","
543 */
544 0x00, /* 00000 */
545 0x00, /* 00000 */
546 0x00, /* 00000 */
547 0x00, /* 00000 */
548 0x00, /* 00000 */
549 0x00, /* 00000 */
550 0x20, /* 00100 */
551 0x40, /* 01000 */
552
553 /*
554 * code=45, hex=0x2D, ascii="-"
555 */
556 0x00, /* 00000 */
557 0x00, /* 00000 */
558 0x00, /* 00000 */
559 0xF0, /* 11110 */
560 0x00, /* 00000 */
561 0x00, /* 00000 */
562 0x00, /* 00000 */
563 0x00, /* 00000 */
564
565 /*
566 * code=46, hex=0x2E, ascii="."
567 */
568 0x00, /* 00000 */
569 0x00, /* 00000 */
570 0x00, /* 00000 */
571 0x00, /* 00000 */
572 0x00, /* 00000 */
573 0x00, /* 00000 */
574 0x20, /* 00100 */
575 0x00, /* 00000 */
576
577 /*
578 * code=47, hex=0x2F, ascii="/"
579 */
580 0x00, /* 00000 */
581 0x00, /* 00000 */
582 0x10, /* 00010 */
583 0x20, /* 00100 */
584 0x20, /* 00100 */
585 0x40, /* 01000 */
586 0x40, /* 01000 */
587 0x00, /* 00000 */
588
589 /*
590 * code=48, hex=0x30, ascii="0"
591 */
592 0x00, /* 00000 */
593 0x00, /* 00000 */
594 0x60, /* 01100 */
595 0x90, /* 10010 */
596 0x90, /* 10010 */
597 0x90, /* 10010 */
598 0x60, /* 01100 */
599 0x00, /* 00000 */
600
601 /*
602 * code=49, hex=0x31, ascii="1"
603 */
604 0x00, /* 00000 */
605 0x00, /* 00000 */
606 0x20, /* 00100 */
607 0x60, /* 01100 */
608 0x20, /* 00100 */
609 0x20, /* 00100 */
610 0x20, /* 00100 */
611 0x00, /* 00000 */
612
613 /*
614 * code=50, hex=0x32, ascii="2"
615 */
616 0x00, /* 00000 */
617 0x00, /* 00000 */
618 0x60, /* 01100 */
619 0x90, /* 10010 */
620 0x20, /* 00100 */
621 0x40, /* 01000 */
622 0xF0, /* 11110 */
623 0x00, /* 00000 */
624
625 /*
626 * code=51, hex=0x33, ascii="3"
627 */
628 0x00, /* 00000 */
629 0x00, /* 00000 */
630 0xE0, /* 11100 */
631 0x10, /* 00010 */
632 0x60, /* 01100 */
633 0x10, /* 00010 */
634 0xE0, /* 11100 */
635 0x00, /* 00000 */
636
637 /*
638 * code=52, hex=0x34, ascii="4"
639 */
640 0x00, /* 00000 */
641 0x00, /* 00000 */
642 0x10, /* 00010 */
643 0x30, /* 00110 */
644 0x50, /* 01010 */
645 0xF0, /* 11110 */
646 0x10, /* 00010 */
647 0x00, /* 00000 */
648
649 /*
650 * code=53, hex=0x35, ascii="5"
651 */
652 0x00, /* 00000 */
653 0x00, /* 00000 */
654 0xF0, /* 11110 */
655 0x80, /* 10000 */
656 0xE0, /* 11100 */
657 0x10, /* 00010 */
658 0xE0, /* 11100 */
659 0x00, /* 00000 */
660
661 /*
662 * code=54, hex=0x36, ascii="6"
663 */
664 0x00, /* 00000 */
665 0x00, /* 00000 */
666 0x60, /* 01100 */
667 0x80, /* 10000 */
668 0xE0, /* 11100 */
669 0x90, /* 10010 */
670 0x60, /* 01100 */
671 0x00, /* 00000 */
672
673 /*
674 * code=55, hex=0x37, ascii="7"
675 */
676 0x00, /* 00000 */
677 0x00, /* 00000 */
678 0xF0, /* 11110 */
679 0x10, /* 00010 */
680 0x20, /* 00100 */
681 0x40, /* 01000 */
682 0x40, /* 01000 */
683 0x00, /* 00000 */
684
685 /*
686 * code=56, hex=0x38, ascii="8"
687 */
688 0x00, /* 00000 */
689 0x00, /* 00000 */
690 0x60, /* 01100 */
691 0x90, /* 10010 */
692 0x60, /* 01100 */
693 0x90, /* 10010 */
694 0x60, /* 01100 */
695 0x00, /* 00000 */
696
697 /*
698 * code=57, hex=0x39, ascii="9"
699 */
700 0x00, /* 00000 */
701 0x00, /* 00000 */
702 0x60, /* 01100 */
703 0x90, /* 10010 */
704 0x70, /* 01110 */
705 0x10, /* 00010 */
706 0x60, /* 01100 */
707 0x00, /* 00000 */
708
709 /*
710 * code=58, hex=0x3A, ascii=":"
711 */
712 0x00, /* 00000 */
713 0x00, /* 00000 */
714 0x00, /* 00000 */
715 0x00, /* 00000 */
716 0x20, /* 00100 */
717 0x00, /* 00000 */
718 0x20, /* 00100 */
719 0x00, /* 00000 */
720
721 /*
722 * code=59, hex=0x3B, ascii=";"
723 */
724 0x00, /* 00000 */
725 0x00, /* 00000 */
726 0x00, /* 00000 */
727 0x00, /* 00000 */
728 0x20, /* 00100 */
729 0x00, /* 00000 */
730 0x20, /* 00100 */
731 0x40, /* 01000 */
732
733 /*
734 * code=60, hex=0x3C, ascii="<"
735 */
736 0x00, /* 00000 */
737 0x00, /* 00000 */
738 0x10, /* 00010 */
739 0x20, /* 00100 */
740 0x40, /* 01000 */
741 0x20, /* 00100 */
742 0x10, /* 00010 */
743 0x00, /* 00000 */
744
745 /*
746 * code=61, hex=0x3D, ascii="="
747 */
748 0x00, /* 00000 */
749 0x00, /* 00000 */
750 0x00, /* 00000 */
751 0x70, /* 01110 */
752 0x00, /* 00000 */
753 0x70, /* 01110 */
754 0x00, /* 00000 */
755 0x00, /* 00000 */
756
757 /*
758 * code=62, hex=0x3E, ascii=">"
759 */
760 0x00, /* 00000 */
761 0x00, /* 00000 */
762 0x40, /* 01000 */
763 0x20, /* 00100 */
764 0x10, /* 00010 */
765 0x20, /* 00100 */
766 0x40, /* 01000 */
767 0x00, /* 00000 */
768
769 /*
770 * code=63, hex=0x3F, ascii="?"
771 */
772 0x00, /* 00000 */
773 0x00, /* 00000 */
774 0x60, /* 01100 */
775 0x10, /* 00010 */
776 0x60, /* 01100 */
777 0x00, /* 00000 */
778 0x40, /* 01000 */
779 0x00, /* 00000 */
780
781 /*
782 * code=64, hex=0x40, ascii="@"
783 */
784 0x00, /* 00000 */
785 0x00, /* 00000 */
786 0x70, /* 01110 */
787 0x88, /* 10001 */
788 0xB0, /* 10110 */
789 0x80, /* 10000 */
790 0x70, /* 01110 */
791 0x00, /* 00000 */
792
793 /*
794 * code=65, hex=0x41, ascii="A"
795 */
796 0x00, /* 00000 */
797 0x00, /* 00000 */
798 0x60, /* 01100 */
799 0x90, /* 10010 */
800 0xF0, /* 11110 */
801 0x90, /* 10010 */
802 0x90, /* 10010 */
803 0x00, /* 00000 */
804
805 /*
806 * code=66, hex=0x42, ascii="B"
807 */
808 0x00, /* 00000 */
809 0x00, /* 00000 */
810 0xE0, /* 11100 */
811 0x90, /* 10010 */
812 0xE0, /* 11100 */
813 0x90, /* 10010 */
814 0xE0, /* 11100 */
815 0x00, /* 00000 */
816
817 /*
818 * code=67, hex=0x43, ascii="C"
819 */
820 0x00, /* 00000 */
821 0x00, /* 00000 */
822 0x70, /* 01110 */
823 0x80, /* 10000 */
824 0x80, /* 10000 */
825 0x80, /* 10000 */
826 0x70, /* 01110 */
827 0x00, /* 00000 */
828
829 /*
830 * code=68, hex=0x44, ascii="D"
831 */
832 0x00, /* 00000 */
833 0x00, /* 00000 */
834 0xE0, /* 11100 */
835 0x90, /* 10010 */
836 0x90, /* 10010 */
837 0x90, /* 10010 */
838 0xE0, /* 11100 */
839 0x00, /* 00000 */
840
841 /*
842 * code=69, hex=0x45, ascii="E"
843 */
844 0x00, /* 00000 */
845 0x00, /* 00000 */
846 0xF0, /* 11110 */
847 0x80, /* 10000 */
848 0xE0, /* 11100 */
849 0x80, /* 10000 */
850 0xF0, /* 11110 */
851 0x00, /* 00000 */
852
853 /*
854 * code=70, hex=0x46, ascii="F"
855 */
856 0x00, /* 00000 */
857 0x00, /* 00000 */
858 0xF0, /* 11110 */
859 0x80, /* 10000 */
860 0xE0, /* 11100 */
861 0x80, /* 10000 */
862 0x80, /* 10000 */
863 0x00, /* 00000 */
864
865 /*
866 * code=71, hex=0x47, ascii="G"
867 */
868 0x00, /* 00000 */
869 0x00, /* 00000 */
870 0x60, /* 01100 */
871 0x90, /* 10010 */
872 0x80, /* 10000 */
873 0x90, /* 10010 */
874 0x70, /* 01110 */
875 0x00, /* 00000 */
876
877 /*
878 * code=72, hex=0x48, ascii="H"
879 */
880 0x00, /* 00000 */
881 0x00, /* 00000 */
882 0x90, /* 10010 */
883 0x90, /* 10010 */
884 0xF0, /* 11110 */
885 0x90, /* 10010 */
886 0x90, /* 10010 */
887 0x00, /* 00000 */
888
889 /*
890 * code=73, hex=0x49, ascii="I"
891 */
892 0x00, /* 00000 */
893 0x00, /* 00000 */
894 0x70, /* 01110 */
895 0x20, /* 00100 */
896 0x20, /* 00100 */
897 0x20, /* 00100 */
898 0x70, /* 01110 */
899 0x00, /* 00000 */
900
901 /*
902 * code=74, hex=0x4A, ascii="J"
903 */
904 0x00, /* 00000 */
905 0x00, /* 00000 */
906 0x10, /* 00010 */
907 0x10, /* 00010 */
908 0x90, /* 10010 */
909 0x90, /* 10010 */
910 0x60, /* 01100 */
911 0x00, /* 00000 */
912
913 /*
914 * code=75, hex=0x4B, ascii="K"
915 */
916 0x00, /* 00000 */
917 0x00, /* 00000 */
918 0x90, /* 10010 */
919 0xA0, /* 10100 */
920 0xC0, /* 11000 */
921 0xA0, /* 10100 */
922 0x90, /* 10010 */
923 0x00, /* 00000 */
924
925 /*
926 * code=76, hex=0x4C, ascii="L"
927 */
928 0x00, /* 00000 */
929 0x00, /* 00000 */
930 0x80, /* 10000 */
931 0x80, /* 10000 */
932 0x80, /* 10000 */
933 0x80, /* 10000 */
934 0xF0, /* 11110 */
935 0x00, /* 00000 */
936
937 /*
938 * code=77, hex=0x4D, ascii="M"
939 */
940 0x00, /* 00000 */
941 0x00, /* 00000 */
942 0x90, /* 10010 */
943 0xF0, /* 11110 */
944 0x90, /* 10010 */
945 0x90, /* 10010 */
946 0x90, /* 10010 */
947 0x00, /* 00000 */
948
949 /*
950 * code=78, hex=0x4E, ascii="N"
951 */
952 0x00, /* 00000 */
953 0x00, /* 00000 */
954 0x90, /* 10010 */
955 0xD0, /* 11010 */
956 0xB0, /* 10110 */
957 0x90, /* 10010 */
958 0x90, /* 10010 */
959 0x00, /* 00000 */
960
961 /*
962 * code=79, hex=0x4F, ascii="O"
963 */
964 0x00, /* 00000 */
965 0x00, /* 00000 */
966 0x60, /* 01100 */
967 0x90, /* 10010 */
968 0x90, /* 10010 */
969 0x90, /* 10010 */
970 0x60, /* 01100 */
971 0x00, /* 00000 */
972
973 /*
974 * code=80, hex=0x50, ascii="P"
975 */
976 0x00, /* 00000 */
977 0x00, /* 00000 */
978 0xE0, /* 11100 */
979 0x90, /* 10010 */
980 0xE0, /* 11100 */
981 0x80, /* 10000 */
982 0x80, /* 10000 */
983 0x00, /* 00000 */
984
985 /*
986 * code=81, hex=0x51, ascii="Q"
987 */
988 0x00, /* 00000 */
989 0x00, /* 00000 */
990 0x60, /* 01100 */
991 0x90, /* 10010 */
992 0x90, /* 10010 */
993 0x90, /* 10010 */
994 0x60, /* 01100 */
995 0x10, /* 00010 */
996
997 /*
998 * code=82, hex=0x52, ascii="R"
999 */
1000 0x00, /* 00000 */
1001 0x00, /* 00000 */
1002 0xE0, /* 11100 */
1003 0x90, /* 10010 */
1004 0xE0, /* 11100 */
1005 0x90, /* 10010 */
1006 0x90, /* 10010 */
1007 0x00, /* 00000 */
1008
1009 /*
1010 * code=83, hex=0x53, ascii="S"
1011 */
1012 0x00, /* 00000 */
1013 0x00, /* 00000 */
1014 0x70, /* 01110 */
1015 0x80, /* 10000 */
1016 0x60, /* 01100 */
1017 0x10, /* 00010 */
1018 0xE0, /* 11100 */
1019 0x00, /* 00000 */
1020
1021 /*
1022 * code=84, hex=0x54, ascii="T"
1023 */
1024 0x00, /* 00000 */
1025 0x00, /* 00000 */
1026 0xF8, /* 11111 */
1027 0x20, /* 00100 */
1028 0x20, /* 00100 */
1029 0x20, /* 00100 */
1030 0x20, /* 00100 */
1031 0x00, /* 00000 */
1032
1033 /*
1034 * code=85, hex=0x55, ascii="U"
1035 */
1036 0x00, /* 00000 */
1037 0x00, /* 00000 */
1038 0x90, /* 10010 */
1039 0x90, /* 10010 */
1040 0x90, /* 10010 */
1041 0x90, /* 10010 */
1042 0x60, /* 01100 */
1043 0x00, /* 00000 */
1044
1045 /*
1046 * code=86, hex=0x56, ascii="V"
1047 */
1048 0x00, /* 00000 */
1049 0x00, /* 00000 */
1050 0x90, /* 10010 */
1051 0x90, /* 10010 */
1052 0x90, /* 10010 */
1053 0x60, /* 01100 */
1054 0x60, /* 01100 */
1055 0x00, /* 00000 */
1056
1057 /*
1058 * code=87, hex=0x57, ascii="W"
1059 */
1060 0x00, /* 00000 */
1061 0x00, /* 00000 */
1062 0x88, /* 10001 */
1063 0xA8, /* 10101 */
1064 0xA8, /* 10101 */
1065 0x50, /* 01010 */
1066 0x50, /* 01010 */
1067 0x00, /* 00000 */
1068
1069 /*
1070 * code=88, hex=0x58, ascii="X"
1071 */
1072 0x00, /* 00000 */
1073 0x00, /* 00000 */
1074 0x90, /* 10010 */
1075 0x90, /* 10010 */
1076 0x60, /* 01100 */
1077 0x50, /* 01010 */
1078 0x90, /* 10010 */
1079 0x00, /* 00000 */
1080
1081 /*
1082 * code=89, hex=0x59, ascii="Y"
1083 */
1084 0x00, /* 00000 */
1085 0x00, /* 00000 */
1086 0x50, /* 01010 */
1087 0x50, /* 01010 */
1088 0x50, /* 01010 */
1089 0x20, /* 00100 */
1090 0x20, /* 00100 */
1091 0x00, /* 00000 */
1092
1093 /*
1094 * code=90, hex=0x5A, ascii="Z"
1095 */
1096 0x00, /* 00000 */
1097 0x00, /* 00000 */
1098 0xF0, /* 11110 */
1099 0x20, /* 00100 */
1100 0x40, /* 01000 */
1101 0x80, /* 10000 */
1102 0xF0, /* 11110 */
1103 0x00, /* 00000 */
1104
1105 /*
1106 * code=91, hex=0x5B, ascii="["
1107 */
1108 0x00, /* 00000 */
1109 0x00, /* 00000 */
1110 0x60, /* 01100 */
1111 0x40, /* 01000 */
1112 0x40, /* 01000 */
1113 0x40, /* 01000 */
1114 0x60, /* 01100 */
1115 0x00, /* 00000 */
1116
1117 /*
1118 * code=92, hex=0x5C, ascii="\"
1119 */
1120 0x00, /* 00000 */
1121 0x00, /* 00000 */
1122 0x40, /* 01000 */
1123 0x40, /* 01000 */
1124 0x20, /* 00100 */
1125 0x20, /* 00100 */
1126 0x10, /* 00010 */
1127 0x00, /* 00000 */
1128
1129 /*
1130 * code=93, hex=0x5D, ascii="]"
1131 */
1132 0x00, /* 00000 */
1133 0x00, /* 00000 */
1134 0x60, /* 01100 */
1135 0x20, /* 00100 */
1136 0x20, /* 00100 */
1137 0x20, /* 00100 */
1138 0x60, /* 01100 */
1139 0x00, /* 00000 */
1140
1141 /*
1142 * code=94, hex=0x5E, ascii="^"
1143 */
1144 0x00, /* 00000 */
1145 0x00, /* 00000 */
1146 0x20, /* 00100 */
1147 0x50, /* 01010 */
1148 0x00, /* 00000 */
1149 0x00, /* 00000 */
1150 0x00, /* 00000 */
1151 0x00, /* 00000 */
1152
1153 /*
1154 * code=95, hex=0x5F, ascii="_"
1155 */
1156 0x00, /* 00000 */
1157 0x00, /* 00000 */
1158 0x00, /* 00000 */
1159 0x00, /* 00000 */
1160 0x00, /* 00000 */
1161 0x00, /* 00000 */
1162 0x00, /* 00000 */
1163 0xF8, /* 11111 */
1164
1165 /*
1166 * code=96, hex=0x60, ascii="`"
1167 */
1168 0x00, /* 00000 */
1169 0x00, /* 00000 */
1170 0x40, /* 01000 */
1171 0x20, /* 00100 */
1172 0x00, /* 00000 */
1173 0x00, /* 00000 */
1174 0x00, /* 00000 */
1175 0x00, /* 00000 */
1176
1177 /*
1178 * code=97, hex=0x61, ascii="a"
1179 */
1180 0x00, /* 00000 */
1181 0x00, /* 00000 */
1182 0x00, /* 00000 */
1183 0x60, /* 01100 */
1184 0x10, /* 00010 */
1185 0x70, /* 01110 */
1186 0x50, /* 01010 */
1187 0x00, /* 00000 */
1188
1189 /*
1190 * code=98, hex=0x62, ascii="b"
1191 */
1192 0x00, /* 00000 */
1193 0x80, /* 10000 */
1194 0x80, /* 10000 */
1195 0xE0, /* 11100 */
1196 0x90, /* 10010 */
1197 0x90, /* 10010 */
1198 0xE0, /* 11100 */
1199 0x00, /* 00000 */
1200
1201 /*
1202 * code=99, hex=0x63, ascii="c"
1203 */
1204 0x00, /* 00000 */
1205 0x00, /* 00000 */
1206 0x00, /* 00000 */
1207 0x30, /* 00110 */
1208 0x40, /* 01000 */
1209 0x40, /* 01000 */
1210 0x30, /* 00110 */
1211 0x00, /* 00000 */
1212
1213 /*
1214 * code=100, hex=0x64, ascii="d"
1215 */
1216 0x00, /* 00000 */
1217 0x00, /* 00000 */
1218 0x10, /* 00010 */
1219 0x70, /* 01110 */
1220 0x90, /* 10010 */
1221 0x90, /* 10010 */
1222 0x70, /* 01110 */
1223 0x00, /* 00000 */
1224
1225 /*
1226 * code=101, hex=0x65, ascii="e"
1227 */
1228 0x00, /* 00000 */
1229 0x00, /* 00000 */
1230 0x00, /* 00000 */
1231 0x60, /* 01100 */
1232 0xF0, /* 11110 */
1233 0x80, /* 10000 */
1234 0x70, /* 01110 */
1235 0x00, /* 00000 */
1236
1237 /*
1238 * code=102, hex=0x66, ascii="f"
1239 */
1240 0x00, /* 00000 */
1241 0x00, /* 00000 */
1242 0x30, /* 00110 */
1243 0x40, /* 01000 */
1244 0xE0, /* 11100 */
1245 0x40, /* 01000 */
1246 0x40, /* 01000 */
1247 0x00, /* 00000 */
1248
1249 /*
1250 * code=103, hex=0x67, ascii="g"
1251 */
1252 0x00, /* 00000 */
1253 0x00, /* 00000 */
1254 0x00, /* 00000 */
1255 0x70, /* 01110 */
1256 0x90, /* 10010 */
1257 0x70, /* 01110 */
1258 0x10, /* 00010 */
1259 0x60, /* 01100 */
1260
1261 /*
1262 * code=104, hex=0x68, ascii="h"
1263 */
1264 0x00, /* 00000 */
1265 0x00, /* 00000 */
1266 0x80, /* 10000 */
1267 0xE0, /* 11100 */
1268 0x90, /* 10010 */
1269 0x90, /* 10010 */
1270 0x90, /* 10010 */
1271 0x00, /* 00000 */
1272
1273 /*
1274 * code=105, hex=0x69, ascii="i"
1275 */
1276 0x00, /* 00000 */
1277 0x20, /* 00100 */
1278 0x00, /* 00000 */
1279 0x60, /* 01100 */
1280 0x20, /* 00100 */
1281 0x20, /* 00100 */
1282 0x70, /* 01110 */
1283 0x00, /* 00000 */
1284
1285 /*
1286 * code=106, hex=0x6A, ascii="j"
1287 */
1288 0x00, /* 00000 */
1289 0x10, /* 00010 */
1290 0x00, /* 00000 */
1291 0x10, /* 00010 */
1292 0x10, /* 00010 */
1293 0x10, /* 00010 */
1294 0x10, /* 00010 */
1295 0x60, /* 01100 */
1296
1297 /*
1298 * code=107, hex=0x6B, ascii="k"
1299 */
1300 0x00, /* 00000 */
1301 0x00, /* 00000 */
1302 0x80, /* 10000 */
1303 0xA0, /* 10100 */
1304 0xC0, /* 11000 */
1305 0xA0, /* 10100 */
1306 0x90, /* 10010 */
1307 0x00, /* 00000 */
1308
1309 /*
1310 * code=108, hex=0x6C, ascii="l"
1311 */
1312 0x00, /* 00000 */
1313 0x60, /* 01100 */
1314 0x20, /* 00100 */
1315 0x20, /* 00100 */
1316 0x20, /* 00100 */
1317 0x20, /* 00100 */
1318 0x70, /* 01110 */
1319 0x00, /* 00000 */
1320
1321 /*
1322 * code=109, hex=0x6D, ascii="m"
1323 */
1324 0x00, /* 00000 */
1325 0x00, /* 00000 */
1326 0x00, /* 00000 */
1327 0x90, /* 10010 */
1328 0xF0, /* 11110 */
1329 0x90, /* 10010 */
1330 0x90, /* 10010 */
1331 0x00, /* 00000 */
1332
1333 /*
1334 * code=110, hex=0x6E, ascii="n"
1335 */
1336 0x00, /* 00000 */
1337 0x00, /* 00000 */
1338 0x00, /* 00000 */
1339 0xE0, /* 11100 */
1340 0x90, /* 10010 */
1341 0x90, /* 10010 */
1342 0x90, /* 10010 */
1343 0x00, /* 00000 */
1344
1345 /*
1346 * code=111, hex=0x6F, ascii="o"
1347 */
1348 0x00, /* 00000 */
1349 0x00, /* 00000 */
1350 0x00, /* 00000 */
1351 0x60, /* 01100 */
1352 0x90, /* 10010 */
1353 0x90, /* 10010 */
1354 0x60, /* 01100 */
1355 0x00, /* 00000 */
1356
1357 /*
1358 * code=112, hex=0x70, ascii="p"
1359 */
1360 0x00, /* 00000 */
1361 0x00, /* 00000 */
1362 0x00, /* 00000 */
1363 0xE0, /* 11100 */
1364 0x90, /* 10010 */
1365 0x90, /* 10010 */
1366 0xE0, /* 11100 */
1367 0x80, /* 10000 */
1368
1369 /*
1370 * code=113, hex=0x71, ascii="q"
1371 */
1372 0x00, /* 00000 */
1373 0x00, /* 00000 */
1374 0x00, /* 00000 */
1375 0x70, /* 01110 */
1376 0x90, /* 10010 */
1377 0x90, /* 10010 */
1378 0x70, /* 01110 */
1379 0x10, /* 00010 */
1380
1381 /*
1382 * code=114, hex=0x72, ascii="r"
1383 */
1384 0x00, /* 00000 */
1385 0x00, /* 00000 */
1386 0x00, /* 00000 */
1387 0x50, /* 01010 */
1388 0x60, /* 01100 */
1389 0x40, /* 01000 */
1390 0x40, /* 01000 */
1391 0x00, /* 00000 */
1392
1393 /*
1394 * code=115, hex=0x73, ascii="s"
1395 */
1396 0x00, /* 00000 */
1397 0x00, /* 00000 */
1398 0x00, /* 00000 */
1399 0x70, /* 01110 */
1400 0xC0, /* 11000 */
1401 0x30, /* 00110 */
1402 0xE0, /* 11100 */
1403 0x00, /* 00000 */
1404
1405 /*
1406 * code=116, hex=0x74, ascii="t"
1407 */
1408 0x00, /* 00000 */
1409 0x00, /* 00000 */
1410 0x40, /* 01000 */
1411 0xF0, /* 11110 */
1412 0x40, /* 01000 */
1413 0x40, /* 01000 */
1414 0x30, /* 00110 */
1415 0x00, /* 00000 */
1416
1417 /*
1418 * code=117, hex=0x75, ascii="u"
1419 */
1420 0x00, /* 00000 */
1421 0x00, /* 00000 */
1422 0x00, /* 00000 */
1423 0x90, /* 10010 */
1424 0x90, /* 10010 */
1425 0x90, /* 10010 */
1426 0x70, /* 01110 */
1427 0x00, /* 00000 */
1428
1429 /*
1430 * code=118, hex=0x76, ascii="v"
1431 */
1432 0x00, /* 00000 */
1433 0x00, /* 00000 */
1434 0x00, /* 00000 */
1435 0x90, /* 10010 */
1436 0x90, /* 10010 */
1437 0x60, /* 01100 */
1438 0x60, /* 01100 */
1439 0x00, /* 00000 */
1440
1441 /*
1442 * code=119, hex=0x77, ascii="w"
1443 */
1444 0x00, /* 00000 */
1445 0x00, /* 00000 */
1446 0x00, /* 00000 */
1447 0x90, /* 10010 */
1448 0x90, /* 10010 */
1449 0xF0, /* 11110 */
1450 0x90, /* 10010 */
1451 0x00, /* 00000 */
1452
1453 /*
1454 * code=120, hex=0x78, ascii="x"
1455 */
1456 0x00, /* 00000 */
1457 0x00, /* 00000 */
1458 0x00, /* 00000 */
1459 0x90, /* 10010 */
1460 0x60, /* 01100 */
1461 0x60, /* 01100 */
1462 0x90, /* 10010 */
1463 0x00, /* 00000 */
1464
1465 /*
1466 * code=121, hex=0x79, ascii="y"
1467 */
1468 0x00, /* 00000 */
1469 0x00, /* 00000 */
1470 0x00, /* 00000 */
1471 0x90, /* 10010 */
1472 0x90, /* 10010 */
1473 0x70, /* 01110 */
1474 0x10, /* 00010 */
1475 0x60, /* 01100 */
1476
1477 /*
1478 * code=122, hex=0x7A, ascii="z"
1479 */
1480 0x00, /* 00000 */
1481 0x00, /* 00000 */
1482 0x00, /* 00000 */
1483 0xF0, /* 11110 */
1484 0x20, /* 00100 */
1485 0x40, /* 01000 */
1486 0xF0, /* 11110 */
1487 0x00, /* 00000 */
1488
1489 /*
1490 * code=123, hex=0x7B, ascii="{"
1491 */
1492 0x00, /* 00000 */
1493 0x10, /* 00010 */
1494 0x20, /* 00100 */
1495 0x40, /* 01000 */
1496 0x40, /* 01000 */
1497 0x20, /* 00100 */
1498 0x10, /* 00010 */
1499 0x00, /* 00000 */
1500
1501 /*
1502 * code=124, hex=0x7C, ascii="|"
1503 */
1504 0x00, /* 00000 */
1505 0x20, /* 00100 */
1506 0x20, /* 00100 */
1507 0x20, /* 00100 */
1508 0x20, /* 00100 */
1509 0x20, /* 00100 */
1510 0x20, /* 00100 */
1511 0x00, /* 00000 */
1512
1513 /*
1514 * code=125, hex=0x7D, ascii="}"
1515 */
1516 0x00, /* 00000 */
1517 0x40, /* 01000 */
1518 0x20, /* 00100 */
1519 0x10, /* 00010 */
1520 0x10, /* 00010 */
1521 0x20, /* 00100 */
1522 0x40, /* 01000 */
1523 0x00, /* 00000 */
1524
1525 /*
1526 * code=126, hex=0x7E, ascii="~"
1527 */
1528 0x00, /* 00000 */
1529 0x00, /* 00000 */
1530 0x00, /* 00000 */
1531 0x50, /* 01010 */
1532 0xA0, /* 10100 */
1533 0x00, /* 00000 */
1534 0x00, /* 00000 */
1535 0x00, /* 00000 */
1536
1537 // /*
1538 // * code=127, hex=0x7F, ascii="^?"
1539 // */
1540 // 0x00, /* 00000 */
1541 // 0x00, /* 00000 */
1542 // 0x00, /* 00000 */
1543 // 0x20, /* 00100 */
1544 // 0x50, /* 01010 */
1545 // 0x88, /* 10001 */
1546 // 0xF8, /* 11111 */
1547 // 0x00, /* 00000 */
1548
1549 // /*
1550 // * code=128, hex=0x80, ascii="!^@"
1551 // */
1552 // 0x00, /* 00000 */
1553 // 0x00, /* 00000 */
1554 // 0x70, /* 01110 */
1555 // 0x80, /* 10000 */
1556 // 0x80, /* 10000 */
1557 // 0x80, /* 10000 */
1558 // 0x70, /* 01110 */
1559 // 0x20, /* 00100 */
1560
1561 // /*
1562 // * code=129, hex=0x81, ascii="!^A"
1563 // */
1564 // 0x00, /* 00000 */
1565 // 0x50, /* 01010 */
1566 // 0x00, /* 00000 */
1567 // 0x90, /* 10010 */
1568 // 0x90, /* 10010 */
1569 // 0x90, /* 10010 */
1570 // 0x70, /* 01110 */
1571 // 0x00, /* 00000 */
1572
1573 // /*
1574 // * code=130, hex=0x82, ascii="!^B"
1575 // */
1576 // 0x10, /* 00010 */
1577 // 0x20, /* 00100 */
1578 // 0x00, /* 00000 */
1579 // 0x60, /* 01100 */
1580 // 0xF0, /* 11110 */
1581 // 0x80, /* 10000 */
1582 // 0x70, /* 01110 */
1583 // 0x00, /* 00000 */
1584
1585 // /*
1586 // * code=131, hex=0x83, ascii="!^C"
1587 // */
1588 // 0x20, /* 00100 */
1589 // 0x50, /* 01010 */
1590 // 0x00, /* 00000 */
1591 // 0xC0, /* 11000 */
1592 // 0x20, /* 00100 */
1593 // 0xA0, /* 10100 */
1594 // 0x50, /* 01010 */
1595 // 0x00, /* 00000 */
1596
1597 // /*
1598 // * code=132, hex=0x84, ascii="!^D"
1599 // */
1600 // 0x00, /* 00000 */
1601 // 0x50, /* 01010 */
1602 // 0x00, /* 00000 */
1603 // 0xC0, /* 11000 */
1604 // 0x20, /* 00100 */
1605 // 0x60, /* 01100 */
1606 // 0xB0, /* 10110 */
1607 // 0x00, /* 00000 */
1608
1609 // /*
1610 // * code=133, hex=0x85, ascii="!^E"
1611 // */
1612 // 0x40, /* 01000 */
1613 // 0x20, /* 00100 */
1614 // 0x00, /* 00000 */
1615 // 0xC0, /* 11000 */
1616 // 0x20, /* 00100 */
1617 // 0x60, /* 01100 */
1618 // 0xB0, /* 10110 */
1619 // 0x00, /* 00000 */
1620
1621 // /*
1622 // * code=134, hex=0x86, ascii="!^F"
1623 // */
1624 // 0x00, /* 00000 */
1625 // 0x20, /* 00100 */
1626 // 0x00, /* 00000 */
1627 // 0xC0, /* 11000 */
1628 // 0x20, /* 00100 */
1629 // 0x60, /* 01100 */
1630 // 0xB0, /* 10110 */
1631 // 0x00, /* 00000 */
1632
1633 // /*
1634 // * code=135, hex=0x87, ascii="!^G"
1635 // */
1636 // 0x00, /* 00000 */
1637 // 0x00, /* 00000 */
1638 // 0x00, /* 00000 */
1639 // 0x30, /* 00110 */
1640 // 0x40, /* 01000 */
1641 // 0x40, /* 01000 */
1642 // 0x30, /* 00110 */
1643 // 0x20, /* 00100 */
1644
1645 // /*
1646 // * code=136, hex=0x88, ascii="!^H"
1647 // */
1648 // 0x20, /* 00100 */
1649 // 0x50, /* 01010 */
1650 // 0x00, /* 00000 */
1651 // 0x60, /* 01100 */
1652 // 0xF0, /* 11110 */
1653 // 0x80, /* 10000 */
1654 // 0x70, /* 01110 */
1655 // 0x00, /* 00000 */
1656
1657 // /*
1658 // * code=137, hex=0x89, ascii="!^I"
1659 // */
1660 // 0x00, /* 00000 */
1661 // 0x50, /* 01010 */
1662 // 0x00, /* 00000 */
1663 // 0x60, /* 01100 */
1664 // 0xF0, /* 11110 */
1665 // 0x80, /* 10000 */
1666 // 0x70, /* 01110 */
1667 // 0x00, /* 00000 */
1668
1669 // /*
1670 // * code=138, hex=0x8A, ascii="!^J"
1671 // */
1672 // 0x40, /* 01000 */
1673 // 0x20, /* 00100 */
1674 // 0x00, /* 00000 */
1675 // 0x60, /* 01100 */
1676 // 0xF0, /* 11110 */
1677 // 0x80, /* 10000 */
1678 // 0x70, /* 01110 */
1679 // 0x00, /* 00000 */
1680
1681 // /*
1682 // * code=139, hex=0x8B, ascii="!^K"
1683 // */
1684 // 0x00, /* 00000 */
1685 // 0x50, /* 01010 */
1686 // 0x00, /* 00000 */
1687 // 0x60, /* 01100 */
1688 // 0x20, /* 00100 */
1689 // 0x20, /* 00100 */
1690 // 0x70, /* 01110 */
1691 // 0x00, /* 00000 */
1692
1693 // /*
1694 // * code=140, hex=0x8C, ascii="!^L"
1695 // */
1696 // 0x20, /* 00100 */
1697 // 0x50, /* 01010 */
1698 // 0x00, /* 00000 */
1699 // 0x60, /* 01100 */
1700 // 0x20, /* 00100 */
1701 // 0x20, /* 00100 */
1702 // 0x70, /* 01110 */
1703 // 0x00, /* 00000 */
1704
1705 // /*
1706 // * code=141, hex=0x8D, ascii="!^M"
1707 // */
1708 // 0x40, /* 01000 */
1709 // 0x20, /* 00100 */
1710 // 0x00, /* 00000 */
1711 // 0x60, /* 01100 */
1712 // 0x20, /* 00100 */
1713 // 0x20, /* 00100 */
1714 // 0x70, /* 01110 */
1715 // 0x00, /* 00000 */
1716
1717 // /*
1718 // * code=142, hex=0x8E, ascii="!^N"
1719 // */
1720 // 0xA0, /* 10100 */
1721 // 0x00, /* 00000 */
1722 // 0x60, /* 01100 */
1723 // 0x90, /* 10010 */
1724 // 0xF0, /* 11110 */
1725 // 0x90, /* 10010 */
1726 // 0x90, /* 10010 */
1727 // 0x00, /* 00000 */
1728
1729 // /*
1730 // * code=143, hex=0x8F, ascii="!^O"
1731 // */
1732 // 0x20, /* 00100 */
1733 // 0x00, /* 00000 */
1734 // 0x60, /* 01100 */
1735 // 0x90, /* 10010 */
1736 // 0xF0, /* 11110 */
1737 // 0x90, /* 10010 */
1738 // 0x90, /* 10010 */
1739 // 0x00, /* 00000 */
1740
1741 // /*
1742 // * code=144, hex=0x90, ascii="!^P"
1743 // */
1744 // 0x10, /* 00010 */
1745 // 0x20, /* 00100 */
1746 // 0xF0, /* 11110 */
1747 // 0x80, /* 10000 */
1748 // 0xE0, /* 11100 */
1749 // 0x80, /* 10000 */
1750 // 0xF0, /* 11110 */
1751 // 0x00, /* 00000 */
1752
1753 // /*
1754 // * code=145, hex=0x91, ascii="!^Q"
1755 // */
1756 // 0x00, /* 00000 */
1757 // 0x00, /* 00000 */
1758 // 0x00, /* 00000 */
1759 // 0xD8, /* 11011 */
1760 // 0x78, /* 01111 */
1761 // 0xE0, /* 11100 */
1762 // 0xB8, /* 10111 */
1763 // 0x00, /* 00000 */
1764
1765 // /*
1766 // * code=146, hex=0x92, ascii="!^R"
1767 // */
1768 // 0x00, /* 00000 */
1769 // 0x00, /* 00000 */
1770 // 0x70, /* 01110 */
1771 // 0xA0, /* 10100 */
1772 // 0xF0, /* 11110 */
1773 // 0xA0, /* 10100 */
1774 // 0xB0, /* 10110 */
1775 // 0x00, /* 00000 */
1776
1777 // /*
1778 // * code=147, hex=0x93, ascii="!^S"
1779 // */
1780 // 0x20, /* 00100 */
1781 // 0x50, /* 01010 */
1782 // 0x00, /* 00000 */
1783 // 0x60, /* 01100 */
1784 // 0x90, /* 10010 */
1785 // 0x90, /* 10010 */
1786 // 0x60, /* 01100 */
1787 // 0x00, /* 00000 */
1788
1789 // /*
1790 // * code=148, hex=0x94, ascii="!^T"
1791 // */
1792 // 0x00, /* 00000 */
1793 // 0x50, /* 01010 */
1794 // 0x00, /* 00000 */
1795 // 0x60, /* 01100 */
1796 // 0x90, /* 10010 */
1797 // 0x90, /* 10010 */
1798 // 0x60, /* 01100 */
1799 // 0x00, /* 00000 */
1800
1801 // /*
1802 // * code=149, hex=0x95, ascii="!^U"
1803 // */
1804 // 0x40, /* 01000 */
1805 // 0x20, /* 00100 */
1806 // 0x00, /* 00000 */
1807 // 0x60, /* 01100 */
1808 // 0x90, /* 10010 */
1809 // 0x90, /* 10010 */
1810 // 0x60, /* 01100 */
1811 // 0x00, /* 00000 */
1812
1813 // /*
1814 // * code=150, hex=0x96, ascii="!^V"
1815 // */
1816 // 0x20, /* 00100 */
1817 // 0x50, /* 01010 */
1818 // 0x00, /* 00000 */
1819 // 0x90, /* 10010 */
1820 // 0x90, /* 10010 */
1821 // 0x90, /* 10010 */
1822 // 0x70, /* 01110 */
1823 // 0x00, /* 00000 */
1824
1825 // /*
1826 // * code=151, hex=0x97, ascii="!^W"
1827 // */
1828 // 0x40, /* 01000 */
1829 // 0x20, /* 00100 */
1830 // 0x00, /* 00000 */
1831 // 0x90, /* 10010 */
1832 // 0x90, /* 10010 */
1833 // 0x90, /* 10010 */
1834 // 0x70, /* 01110 */
1835 // 0x00, /* 00000 */
1836
1837 // /*
1838 // * code=152, hex=0x98, ascii="!^X"
1839 // */
1840 // 0x00, /* 00000 */
1841 // 0x50, /* 01010 */
1842 // 0x00, /* 00000 */
1843 // 0x90, /* 10010 */
1844 // 0x90, /* 10010 */
1845 // 0x70, /* 01110 */
1846 // 0x10, /* 00010 */
1847 // 0x60, /* 01100 */
1848
1849 // /*
1850 // * code=153, hex=0x99, ascii="!^Y"
1851 // */
1852 // 0x00, /* 00000 */
1853 // 0x50, /* 01010 */
1854 // 0x00, /* 00000 */
1855 // 0x60, /* 01100 */
1856 // 0x90, /* 10010 */
1857 // 0x90, /* 10010 */
1858 // 0x60, /* 01100 */
1859 // 0x00, /* 00000 */
1860
1861 // /*
1862 // * code=154, hex=0x9A, ascii="!^Z"
1863 // */
1864 // 0x50, /* 01010 */
1865 // 0x00, /* 00000 */
1866 // 0x90, /* 10010 */
1867 // 0x90, /* 10010 */
1868 // 0x90, /* 10010 */
1869 // 0x90, /* 10010 */
1870 // 0x60, /* 01100 */
1871 // 0x00, /* 00000 */
1872
1873 // /*
1874 // * code=155, hex=0x9B, ascii="!^["
1875 // */
1876 // 0x00, /* 00000 */
1877 // 0x00, /* 00000 */
1878 // 0x20, /* 00100 */
1879 // 0x70, /* 01110 */
1880 // 0x80, /* 10000 */
1881 // 0x80, /* 10000 */
1882 // 0x70, /* 01110 */
1883 // 0x20, /* 00100 */
1884
1885 // /*
1886 // * code=156, hex=0x9C, ascii="!^\"
1887 // */
1888 // 0x00, /* 00000 */
1889 // 0x30, /* 00110 */
1890 // 0x50, /* 01010 */
1891 // 0x40, /* 01000 */
1892 // 0xE0, /* 11100 */
1893 // 0x40, /* 01000 */
1894 // 0xF0, /* 11110 */
1895 // 0x00, /* 00000 */
1896
1897 // /*
1898 // * code=157, hex=0x9D, ascii="!^]"
1899 // */
1900 // 0x00, /* 00000 */
1901 // 0xD8, /* 11011 */
1902 // 0x50, /* 01010 */
1903 // 0x50, /* 01010 */
1904 // 0x20, /* 00100 */
1905 // 0x70, /* 01110 */
1906 // 0x20, /* 00100 */
1907 // 0x00, /* 00000 */
1908
1909 // /*
1910 // * code=158, hex=0x9E, ascii="!^^"
1911 // */
1912 // 0x00, /* 00000 */
1913 // 0xC0, /* 11000 */
1914 // 0xA0, /* 10100 */
1915 // 0xB0, /* 10110 */
1916 // 0xF8, /* 11111 */
1917 // 0x90, /* 10010 */
1918 // 0x88, /* 10001 */
1919 // 0x00, /* 00000 */
1920
1921 // /*
1922 // * code=159, hex=0x9F, ascii="!^_"
1923 // */
1924 // 0x00, /* 00000 */
1925 // 0x30, /* 00110 */
1926 // 0x40, /* 01000 */
1927 // 0x40, /* 01000 */
1928 // 0xF0, /* 11110 */
1929 // 0x40, /* 01000 */
1930 // 0x40, /* 01000 */
1931 // 0x80, /* 10000 */
1932
1933 // /*
1934 // * code=160, hex=0xA0, ascii="! "
1935 // */
1936 // 0x20, /* 00100 */
1937 // 0x40, /* 01000 */
1938 // 0x00, /* 00000 */
1939 // 0xC0, /* 11000 */
1940 // 0x20, /* 00100 */
1941 // 0x60, /* 01100 */
1942 // 0xB0, /* 10110 */
1943 // 0x00, /* 00000 */
1944
1945 // /*
1946 // * code=161, hex=0xA1, ascii="!!"
1947 // */
1948 // 0x10, /* 00010 */
1949 // 0x20, /* 00100 */
1950 // 0x00, /* 00000 */
1951 // 0x60, /* 01100 */
1952 // 0x20, /* 00100 */
1953 // 0x20, /* 00100 */
1954 // 0x70, /* 01110 */
1955 // 0x00, /* 00000 */
1956
1957 // /*
1958 // * code=162, hex=0xA2, ascii="!""
1959 // */
1960 // 0x10, /* 00010 */
1961 // 0x20, /* 00100 */
1962 // 0x00, /* 00000 */
1963 // 0x60, /* 01100 */
1964 // 0x90, /* 10010 */
1965 // 0x90, /* 10010 */
1966 // 0x60, /* 01100 */
1967 // 0x00, /* 00000 */
1968
1969 // /*
1970 // * code=163, hex=0xA3, ascii="!#"
1971 // */
1972 // 0x10, /* 00010 */
1973 // 0x20, /* 00100 */
1974 // 0x00, /* 00000 */
1975 // 0x90, /* 10010 */
1976 // 0x90, /* 10010 */
1977 // 0x90, /* 10010 */
1978 // 0x70, /* 01110 */
1979 // 0x00, /* 00000 */
1980
1981 // /*
1982 // * code=164, hex=0xA4, ascii="!$"
1983 // */
1984 // 0x50, /* 01010 */
1985 // 0xA0, /* 10100 */
1986 // 0x00, /* 00000 */
1987 // 0xE0, /* 11100 */
1988 // 0x90, /* 10010 */
1989 // 0x90, /* 10010 */
1990 // 0x90, /* 10010 */
1991 // 0x00, /* 00000 */
1992
1993 // /*
1994 // * code=165, hex=0xA5, ascii="!%"
1995 // */
1996 // 0x50, /* 01010 */
1997 // 0xA0, /* 10100 */
1998 // 0x90, /* 10010 */
1999 // 0xD0, /* 11010 */
2000 // 0xD0, /* 11010 */
2001 // 0xB0, /* 10110 */
2002 // 0x90, /* 10010 */
2003 // 0x00, /* 00000 */
2004
2005 // /*
2006 // * code=166, hex=0xA6, ascii="!&"
2007 // */
2008 // 0x00, /* 00000 */
2009 // 0x20, /* 00100 */
2010 // 0x50, /* 01010 */
2011 // 0x30, /* 00110 */
2012 // 0x00, /* 00000 */
2013 // 0x70, /* 01110 */
2014 // 0x00, /* 00000 */
2015 // 0x00, /* 00000 */
2016
2017 // /*
2018 // * code=167, hex=0xA7, ascii="!'"
2019 // */
2020 // 0x00, /* 00000 */
2021 // 0x20, /* 00100 */
2022 // 0x50, /* 01010 */
2023 // 0x20, /* 00100 */
2024 // 0x00, /* 00000 */
2025 // 0x70, /* 01110 */
2026 // 0x00, /* 00000 */
2027 // 0x00, /* 00000 */
2028
2029 // /*
2030 // * code=168, hex=0xA8, ascii="!("
2031 // */
2032 // 0x00, /* 00000 */
2033 // 0x20, /* 00100 */
2034 // 0x00, /* 00000 */
2035 // 0x20, /* 00100 */
2036 // 0x40, /* 01000 */
2037 // 0x90, /* 10010 */
2038 // 0x60, /* 01100 */
2039 // 0x00, /* 00000 */
2040
2041 // /*
2042 // * code=169, hex=0xA9, ascii="!)"
2043 // */
2044 // 0x00, /* 00000 */
2045 // 0x00, /* 00000 */
2046 // 0x00, /* 00000 */
2047 // 0x00, /* 00000 */
2048 // 0x00, /* 00000 */
2049 // 0xF8, /* 11111 */
2050 // 0x80, /* 10000 */
2051 // 0x00, /* 00000 */
2052
2053 // /*
2054 // * code=170, hex=0xAA, ascii="!*"
2055 // */
2056 // 0x00, /* 00000 */
2057 // 0x00, /* 00000 */
2058 // 0x00, /* 00000 */
2059 // 0x00, /* 00000 */
2060 // 0x00, /* 00000 */
2061 // 0xF8, /* 11111 */
2062 // 0x08, /* 00001 */
2063 // 0x00, /* 00000 */
2064
2065 // /*
2066 // * code=171, hex=0xAB, ascii="!+"
2067 // */
2068 // 0x00, /* 00000 */
2069 // 0x80, /* 10000 */
2070 // 0x90, /* 10010 */
2071 // 0xA0, /* 10100 */
2072 // 0x58, /* 01011 */
2073 // 0x88, /* 10001 */
2074 // 0x38, /* 00111 */
2075 // 0x00, /* 00000 */
2076
2077 // /*
2078 // * code=172, hex=0xAC, ascii="!,"
2079 // */
2080 // 0x00, /* 00000 */
2081 // 0x88, /* 10001 */
2082 // 0x90, /* 10010 */
2083 // 0xA0, /* 10100 */
2084 // 0x48, /* 01001 */
2085 // 0x98, /* 10011 */
2086 // 0x38, /* 00111 */
2087 // 0x08, /* 00001 */
2088
2089 // /*
2090 // * code=173, hex=0xAD, ascii="!-"
2091 // */
2092 // 0x00, /* 00000 */
2093 // 0x20, /* 00100 */
2094 // 0x00, /* 00000 */
2095 // 0x20, /* 00100 */
2096 // 0x20, /* 00100 */
2097 // 0x70, /* 01110 */
2098 // 0x20, /* 00100 */
2099 // 0x00, /* 00000 */
2100
2101 // /*
2102 // * code=174, hex=0xAE, ascii="!."
2103 // */
2104 // 0x00, /* 00000 */
2105 // 0x00, /* 00000 */
2106 // 0x00, /* 00000 */
2107 // 0x00, /* 00000 */
2108 // 0x50, /* 01010 */
2109 // 0xA0, /* 10100 */
2110 // 0x50, /* 01010 */
2111 // 0x00, /* 00000 */
2112
2113 // /*
2114 // * code=175, hex=0xAF, ascii="!/"
2115 // */
2116 // 0x00, /* 00000 */
2117 // 0x00, /* 00000 */
2118 // 0x00, /* 00000 */
2119 // 0x00, /* 00000 */
2120 // 0xA0, /* 10100 */
2121 // 0x50, /* 01010 */
2122 // 0xA0, /* 10100 */
2123 // 0x00, /* 00000 */
2124
2125 // /*
2126 // * code=176, hex=0xB0, ascii="!0"
2127 // */
2128 // 0xA8, /* 10101 */
2129 // 0x50, /* 01010 */
2130 // 0xA8, /* 10101 */
2131 // 0x50, /* 01010 */
2132 // 0xA8, /* 10101 */
2133 // 0x50, /* 01010 */
2134 // 0xA8, /* 10101 */
2135 // 0x50, /* 01010 */
2136
2137 // /*
2138 // * code=177, hex=0xB1, ascii="!1"
2139 // */
2140 // 0xE8, /* 11101 */
2141 // 0x50, /* 01010 */
2142 // 0xB8, /* 10111 */
2143 // 0x50, /* 01010 */
2144 // 0xE8, /* 11101 */
2145 // 0x50, /* 01010 */
2146 // 0xB8, /* 10111 */
2147 // 0x50, /* 01010 */
2148
2149 // /*
2150 // * code=178, hex=0xB2, ascii="!2"
2151 // */
2152 // 0xD8, /* 11011 */
2153 // 0x70, /* 01110 */
2154 // 0xD8, /* 11011 */
2155 // 0x70, /* 01110 */
2156 // 0xD8, /* 11011 */
2157 // 0x70, /* 01110 */
2158 // 0xD8, /* 11011 */
2159 // 0x70, /* 01110 */
2160
2161 // /*
2162 // * code=179, hex=0xB3, ascii="!3"
2163 // */
2164 // 0x20, /* 00100 */
2165 // 0x20, /* 00100 */
2166 // 0x20, /* 00100 */
2167 // 0x20, /* 00100 */
2168 // 0x20, /* 00100 */
2169 // 0x20, /* 00100 */
2170 // 0x20, /* 00100 */
2171 // 0x20, /* 00100 */
2172
2173 // /*
2174 // * code=180, hex=0xB4, ascii="!4"
2175 // */
2176 // 0x20, /* 00100 */
2177 // 0x20, /* 00100 */
2178 // 0x20, /* 00100 */
2179 // 0xE0, /* 11100 */
2180 // 0x20, /* 00100 */
2181 // 0x20, /* 00100 */
2182 // 0x20, /* 00100 */
2183 // 0x20, /* 00100 */
2184
2185 // /*
2186 // * code=181, hex=0xB5, ascii="!5"
2187 // */
2188 // 0x20, /* 00100 */
2189 // 0x20, /* 00100 */
2190 // 0xE0, /* 11100 */
2191 // 0x20, /* 00100 */
2192 // 0xE0, /* 11100 */
2193 // 0x20, /* 00100 */
2194 // 0x20, /* 00100 */
2195 // 0x20, /* 00100 */
2196
2197 // /*
2198 // * code=182, hex=0xB6, ascii="!6"
2199 // */
2200 // 0x50, /* 01010 */
2201 // 0x50, /* 01010 */
2202 // 0x50, /* 01010 */
2203 // 0xD0, /* 11010 */
2204 // 0x50, /* 01010 */
2205 // 0x50, /* 01010 */
2206 // 0x50, /* 01010 */
2207 // 0x50, /* 01010 */
2208
2209 // /*
2210 // * code=183, hex=0xB7, ascii="!7"
2211 // */
2212 // 0x00, /* 00000 */
2213 // 0x00, /* 00000 */
2214 // 0x00, /* 00000 */
2215 // 0xF0, /* 11110 */
2216 // 0x50, /* 01010 */
2217 // 0x50, /* 01010 */
2218 // 0x50, /* 01010 */
2219 // 0x50, /* 01010 */
2220
2221 // /*
2222 // * code=184, hex=0xB8, ascii="!8"
2223 // */
2224 // 0x00, /* 00000 */
2225 // 0x00, /* 00000 */
2226 // 0xE0, /* 11100 */
2227 // 0x20, /* 00100 */
2228 // 0xE0, /* 11100 */
2229 // 0x20, /* 00100 */
2230 // 0x20, /* 00100 */
2231 // 0x20, /* 00100 */
2232
2233 // /*
2234 // * code=185, hex=0xB9, ascii="!9"
2235 // */
2236 // 0x50, /* 01010 */
2237 // 0x50, /* 01010 */
2238 // 0xD0, /* 11010 */
2239 // 0x10, /* 00010 */
2240 // 0xD0, /* 11010 */
2241 // 0x50, /* 01010 */
2242 // 0x50, /* 01010 */
2243 // 0x50, /* 01010 */
2244
2245 // /*
2246 // * code=186, hex=0xBA, ascii="!:"
2247 // */
2248 // 0x50, /* 01010 */
2249 // 0x50, /* 01010 */
2250 // 0x50, /* 01010 */
2251 // 0x50, /* 01010 */
2252 // 0x50, /* 01010 */
2253 // 0x50, /* 01010 */
2254 // 0x50, /* 01010 */
2255 // 0x50, /* 01010 */
2256
2257 // /*
2258 // * code=187, hex=0xBB, ascii="!;"
2259 // */
2260 // 0x00, /* 00000 */
2261 // 0x00, /* 00000 */
2262 // 0xF0, /* 11110 */
2263 // 0x10, /* 00010 */
2264 // 0xD0, /* 11010 */
2265 // 0x50, /* 01010 */
2266 // 0x50, /* 01010 */
2267 // 0x50, /* 01010 */
2268
2269 // /*
2270 // * code=188, hex=0xBC, ascii="!<"
2271 // */
2272 // 0x50, /* 01010 */
2273 // 0x50, /* 01010 */
2274 // 0xD0, /* 11010 */
2275 // 0x10, /* 00010 */
2276 // 0xF0, /* 11110 */
2277 // 0x00, /* 00000 */
2278 // 0x00, /* 00000 */
2279 // 0x00, /* 00000 */
2280
2281 // /*
2282 // * code=189, hex=0xBD, ascii="!="
2283 // */
2284 // 0x50, /* 01010 */
2285 // 0x50, /* 01010 */
2286 // 0x50, /* 01010 */
2287 // 0xF0, /* 11110 */
2288 // 0x00, /* 00000 */
2289 // 0x00, /* 00000 */
2290 // 0x00, /* 00000 */
2291 // 0x00, /* 00000 */
2292
2293 // /*
2294 // * code=190, hex=0xBE, ascii="!>"
2295 // */
2296 // 0x20, /* 00100 */
2297 // 0x20, /* 00100 */
2298 // 0xE0, /* 11100 */
2299 // 0x20, /* 00100 */
2300 // 0xE0, /* 11100 */
2301 // 0x00, /* 00000 */
2302 // 0x00, /* 00000 */
2303 // 0x00, /* 00000 */
2304
2305 // /*
2306 // * code=191, hex=0xBF, ascii="!?"
2307 // */
2308 // 0x00, /* 00000 */
2309 // 0x00, /* 00000 */
2310 // 0x00, /* 00000 */
2311 // 0xE0, /* 11100 */
2312 // 0x20, /* 00100 */
2313 // 0x20, /* 00100 */
2314 // 0x20, /* 00100 */
2315 // 0x20, /* 00100 */
2316
2317 // /*
2318 // * code=192, hex=0xC0, ascii="!@"
2319 // */
2320 // 0x20, /* 00100 */
2321 // 0x20, /* 00100 */
2322 // 0x20, /* 00100 */
2323 // 0x38, /* 00111 */
2324 // 0x00, /* 00000 */
2325 // 0x00, /* 00000 */
2326 // 0x00, /* 00000 */
2327 // 0x00, /* 00000 */
2328
2329 // /*
2330 // * code=193, hex=0xC1, ascii="!A"
2331 // */
2332 // 0x20, /* 00100 */
2333 // 0x20, /* 00100 */
2334 // 0x20, /* 00100 */
2335 // 0xF8, /* 11111 */
2336 // 0x00, /* 00000 */
2337 // 0x00, /* 00000 */
2338 // 0x00, /* 00000 */
2339 // 0x00, /* 00000 */
2340
2341 // /*
2342 // * code=194, hex=0xC2, ascii="!B"
2343 // */
2344 // 0x00, /* 00000 */
2345 // 0x00, /* 00000 */
2346 // 0x00, /* 00000 */
2347 // 0xF8, /* 11111 */
2348 // 0x20, /* 00100 */
2349 // 0x20, /* 00100 */
2350 // 0x20, /* 00100 */
2351 // 0x20, /* 00100 */
2352
2353 // /*
2354 // * code=195, hex=0xC3, ascii="!C"
2355 // */
2356 // 0x20, /* 00100 */
2357 // 0x20, /* 00100 */
2358 // 0x20, /* 00100 */
2359 // 0x38, /* 00111 */
2360 // 0x20, /* 00100 */
2361 // 0x20, /* 00100 */
2362 // 0x20, /* 00100 */
2363 // 0x20, /* 00100 */
2364
2365 // /*
2366 // * code=196, hex=0xC4, ascii="!D"
2367 // */
2368 // 0x00, /* 00000 */
2369 // 0x00, /* 00000 */
2370 // 0x00, /* 00000 */
2371 // 0xF8, /* 11111 */
2372 // 0x00, /* 00000 */
2373 // 0x00, /* 00000 */
2374 // 0x00, /* 00000 */
2375 // 0x00, /* 00000 */
2376
2377 // /*
2378 // * code=197, hex=0xC5, ascii="!E"
2379 // */
2380 // 0x20, /* 00100 */
2381 // 0x20, /* 00100 */
2382 // 0x20, /* 00100 */
2383 // 0xF8, /* 11111 */
2384 // 0x20, /* 00100 */
2385 // 0x20, /* 00100 */
2386 // 0x20, /* 00100 */
2387 // 0x20, /* 00100 */
2388
2389 // /*
2390 // * code=198, hex=0xC6, ascii="!F"
2391 // */
2392 // 0x20, /* 00100 */
2393 // 0x20, /* 00100 */
2394 // 0x38, /* 00111 */
2395 // 0x20, /* 00100 */
2396 // 0x38, /* 00111 */
2397 // 0x20, /* 00100 */
2398 // 0x20, /* 00100 */
2399 // 0x20, /* 00100 */
2400
2401 // /*
2402 // * code=199, hex=0xC7, ascii="!G"
2403 // */
2404 // 0x50, /* 01010 */
2405 // 0x50, /* 01010 */
2406 // 0x50, /* 01010 */
2407 // 0x58, /* 01011 */
2408 // 0x50, /* 01010 */
2409 // 0x50, /* 01010 */
2410 // 0x50, /* 01010 */
2411 // 0x50, /* 01010 */
2412
2413 // /*
2414 // * code=200, hex=0xC8, ascii="!H"
2415 // */
2416 // 0x50, /* 01010 */
2417 // 0x50, /* 01010 */
2418 // 0x58, /* 01011 */
2419 // 0x40, /* 01000 */
2420 // 0x78, /* 01111 */
2421 // 0x00, /* 00000 */
2422 // 0x00, /* 00000 */
2423 // 0x00, /* 00000 */
2424
2425 // /*
2426 // * code=201, hex=0xC9, ascii="!I"
2427 // */
2428 // 0x00, /* 00000 */
2429 // 0x00, /* 00000 */
2430 // 0x78, /* 01111 */
2431 // 0x40, /* 01000 */
2432 // 0x58, /* 01011 */
2433 // 0x50, /* 01010 */
2434 // 0x50, /* 01010 */
2435 // 0x50, /* 01010 */
2436
2437 // /*
2438 // * code=202, hex=0xCA, ascii="!J"
2439 // */
2440 // 0x50, /* 01010 */
2441 // 0x50, /* 01010 */
2442 // 0xD8, /* 11011 */
2443 // 0x00, /* 00000 */
2444 // 0xF8, /* 11111 */
2445 // 0x00, /* 00000 */
2446 // 0x00, /* 00000 */
2447 // 0x00, /* 00000 */
2448
2449 // /*
2450 // * code=203, hex=0xCB, ascii="!K"
2451 // */
2452 // 0x00, /* 00000 */
2453 // 0x00, /* 00000 */
2454 // 0xF8, /* 11111 */
2455 // 0x00, /* 00000 */
2456 // 0xD8, /* 11011 */
2457 // 0x50, /* 01010 */
2458 // 0x50, /* 01010 */
2459 // 0x50, /* 01010 */
2460
2461 // /*
2462 // * code=204, hex=0xCC, ascii="!L"
2463 // */
2464 // 0x50, /* 01010 */
2465 // 0x50, /* 01010 */
2466 // 0x58, /* 01011 */
2467 // 0x40, /* 01000 */
2468 // 0x58, /* 01011 */
2469 // 0x50, /* 01010 */
2470 // 0x50, /* 01010 */
2471 // 0x50, /* 01010 */
2472
2473 // /*
2474 // * code=205, hex=0xCD, ascii="!M"
2475 // */
2476 // 0x00, /* 00000 */
2477 // 0x00, /* 00000 */
2478 // 0xF8, /* 11111 */
2479 // 0x00, /* 00000 */
2480 // 0xF8, /* 11111 */
2481 // 0x00, /* 00000 */
2482 // 0x00, /* 00000 */
2483 // 0x00, /* 00000 */
2484
2485 // /*
2486 // * code=206, hex=0xCE, ascii="!N"
2487 // */
2488 // 0x50, /* 01010 */
2489 // 0x50, /* 01010 */
2490 // 0xD8, /* 11011 */
2491 // 0x00, /* 00000 */
2492 // 0xD8, /* 11011 */
2493 // 0x50, /* 01010 */
2494 // 0x50, /* 01010 */
2495 // 0x50, /* 01010 */
2496
2497 // /*
2498 // * code=207, hex=0xCF, ascii="!O"
2499 // */
2500 // 0x20, /* 00100 */
2501 // 0x20, /* 00100 */
2502 // 0xF8, /* 11111 */
2503 // 0x00, /* 00000 */
2504 // 0xF8, /* 11111 */
2505 // 0x00, /* 00000 */
2506 // 0x00, /* 00000 */
2507 // 0x00, /* 00000 */
2508
2509 // /*
2510 // * code=208, hex=0xD0, ascii="!P"
2511 // */
2512 // 0x50, /* 01010 */
2513 // 0x50, /* 01010 */
2514 // 0x50, /* 01010 */
2515 // 0xF8, /* 11111 */
2516 // 0x00, /* 00000 */
2517 // 0x00, /* 00000 */
2518 // 0x00, /* 00000 */
2519 // 0x00, /* 00000 */
2520
2521 // /*
2522 // * code=209, hex=0xD1, ascii="!Q"
2523 // */
2524 // 0x00, /* 00000 */
2525 // 0x00, /* 00000 */
2526 // 0xF8, /* 11111 */
2527 // 0x00, /* 00000 */
2528 // 0xF8, /* 11111 */
2529 // 0x20, /* 00100 */
2530 // 0x20, /* 00100 */
2531 // 0x20, /* 00100 */
2532
2533 // /*
2534 // * code=210, hex=0xD2, ascii="!R"
2535 // */
2536 // 0x00, /* 00000 */
2537 // 0x00, /* 00000 */
2538 // 0x00, /* 00000 */
2539 // 0xF8, /* 11111 */
2540 // 0x50, /* 01010 */
2541 // 0x50, /* 01010 */
2542 // 0x50, /* 01010 */
2543 // 0x50, /* 01010 */
2544
2545 // /*
2546 // * code=211, hex=0xD3, ascii="!S"
2547 // */
2548 // 0x50, /* 01010 */
2549 // 0x50, /* 01010 */
2550 // 0x50, /* 01010 */
2551 // 0x78, /* 01111 */
2552 // 0x00, /* 00000 */
2553 // 0x00, /* 00000 */
2554 // 0x00, /* 00000 */
2555 // 0x00, /* 00000 */
2556
2557 // /*
2558 // * code=212, hex=0xD4, ascii="!T"
2559 // */
2560 // 0x20, /* 00100 */
2561 // 0x20, /* 00100 */
2562 // 0x38, /* 00111 */
2563 // 0x20, /* 00100 */
2564 // 0x38, /* 00111 */
2565 // 0x00, /* 00000 */
2566 // 0x00, /* 00000 */
2567 // 0x00, /* 00000 */
2568
2569 // /*
2570 // * code=213, hex=0xD5, ascii="!U"
2571 // */
2572 // 0x00, /* 00000 */
2573 // 0x00, /* 00000 */
2574 // 0x38, /* 00111 */
2575 // 0x20, /* 00100 */
2576 // 0x38, /* 00111 */
2577 // 0x20, /* 00100 */
2578 // 0x20, /* 00100 */
2579 // 0x20, /* 00100 */
2580
2581 // /*
2582 // * code=214, hex=0xD6, ascii="!V"
2583 // */
2584 // 0x00, /* 00000 */
2585 // 0x00, /* 00000 */
2586 // 0x00, /* 00000 */
2587 // 0x78, /* 01111 */
2588 // 0x50, /* 01010 */
2589 // 0x50, /* 01010 */
2590 // 0x50, /* 01010 */
2591 // 0x50, /* 01010 */
2592
2593 // /*
2594 // * code=215, hex=0xD7, ascii="!W"
2595 // */
2596 // 0x50, /* 01010 */
2597 // 0x50, /* 01010 */
2598 // 0x50, /* 01010 */
2599 // 0xF8, /* 11111 */
2600 // 0x50, /* 01010 */
2601 // 0x50, /* 01010 */
2602 // 0x50, /* 01010 */
2603 // 0x50, /* 01010 */
2604
2605 // /*
2606 // * code=216, hex=0xD8, ascii="!X"
2607 // */
2608 // 0x20, /* 00100 */
2609 // 0x20, /* 00100 */
2610 // 0xF8, /* 11111 */
2611 // 0x20, /* 00100 */
2612 // 0xF8, /* 11111 */
2613 // 0x20, /* 00100 */
2614 // 0x20, /* 00100 */
2615 // 0x20, /* 00100 */
2616
2617 // /*
2618 // * code=217, hex=0xD9, ascii="!Y"
2619 // */
2620 // 0x20, /* 00100 */
2621 // 0x20, /* 00100 */
2622 // 0x20, /* 00100 */
2623 // 0xE0, /* 11100 */
2624 // 0x00, /* 00000 */
2625 // 0x00, /* 00000 */
2626 // 0x00, /* 00000 */
2627 // 0x00, /* 00000 */
2628
2629 // /*
2630 // * code=218, hex=0xDA, ascii="!Z"
2631 // */
2632 // 0x00, /* 00000 */
2633 // 0x00, /* 00000 */
2634 // 0x00, /* 00000 */
2635 // 0x38, /* 00111 */
2636 // 0x20, /* 00100 */
2637 // 0x20, /* 00100 */
2638 // 0x20, /* 00100 */
2639 // 0x20, /* 00100 */
2640
2641 // /*
2642 // * code=219, hex=0xDB, ascii="!["
2643 // */
2644 // 0xF8, /* 11111 */
2645 // 0xF8, /* 11111 */
2646 // 0xF8, /* 11111 */
2647 // 0xF8, /* 11111 */
2648 // 0xF8, /* 11111 */
2649 // 0xF8, /* 11111 */
2650 // 0xF8, /* 11111 */
2651 // 0xF8, /* 11111 */
2652
2653 // /*
2654 // * code=220, hex=0xDC, ascii="!\"
2655 // */
2656 // 0x00, /* 00000 */
2657 // 0x00, /* 00000 */
2658 // 0x00, /* 00000 */
2659 // 0x00, /* 00000 */
2660 // 0xF8, /* 11111 */
2661 // 0xF8, /* 11111 */
2662 // 0xF8, /* 11111 */
2663 // 0xF8, /* 11111 */
2664
2665 // /*
2666 // * code=221, hex=0xDD, ascii="!]"
2667 // */
2668 // 0xE0, /* 11100 */
2669 // 0xE0, /* 11100 */
2670 // 0xE0, /* 11100 */
2671 // 0xE0, /* 11100 */
2672 // 0xE0, /* 11100 */
2673 // 0xE0, /* 11100 */
2674 // 0xE0, /* 11100 */
2675 // 0xE0, /* 11100 */
2676
2677 // /*
2678 // * code=222, hex=0xDE, ascii="!^"
2679 // */
2680 // 0x18, /* 00011 */
2681 // 0x18, /* 00011 */
2682 // 0x18, /* 00011 */
2683 // 0x18, /* 00011 */
2684 // 0x18, /* 00011 */
2685 // 0x18, /* 00011 */
2686 // 0x18, /* 00011 */
2687 // 0x18, /* 00011 */
2688
2689 // /*
2690 // * code=223, hex=0xDF, ascii="!_"
2691 // */
2692 // 0xF8, /* 11111 */
2693 // 0xF8, /* 11111 */
2694 // 0xF8, /* 11111 */
2695 // 0xF8, /* 11111 */
2696 // 0x00, /* 00000 */
2697 // 0x00, /* 00000 */
2698 // 0x00, /* 00000 */
2699 // 0x00, /* 00000 */
2700
2701 // /*
2702 // * code=224, hex=0xE0, ascii="!`"
2703 // */
2704 // 0x00, /* 00000 */
2705 // 0x00, /* 00000 */
2706 // 0x00, /* 00000 */
2707 // 0x68, /* 01101 */
2708 // 0x90, /* 10010 */
2709 // 0x90, /* 10010 */
2710 // 0x68, /* 01101 */
2711 // 0x00, /* 00000 */
2712
2713 // /*
2714 // * code=225, hex=0xE1, ascii="!a"
2715 // */
2716 // 0x00, /* 00000 */
2717 // 0x60, /* 01100 */
2718 // 0x90, /* 10010 */
2719 // 0xF0, /* 11110 */
2720 // 0x90, /* 10010 */
2721 // 0x90, /* 10010 */
2722 // 0xE0, /* 11100 */
2723 // 0x80, /* 10000 */
2724
2725 // /*
2726 // * code=226, hex=0xE2, ascii="!b"
2727 // */
2728 // 0x00, /* 00000 */
2729 // 0x70, /* 01110 */
2730 // 0x40, /* 01000 */
2731 // 0x40, /* 01000 */
2732 // 0x40, /* 01000 */
2733 // 0x40, /* 01000 */
2734 // 0x40, /* 01000 */
2735 // 0x00, /* 00000 */
2736
2737 // /*
2738 // * code=227, hex=0xE3, ascii="!c"
2739 // */
2740 // 0x00, /* 00000 */
2741 // 0x00, /* 00000 */
2742 // 0x70, /* 01110 */
2743 // 0x50, /* 01010 */
2744 // 0x50, /* 01010 */
2745 // 0x50, /* 01010 */
2746 // 0x50, /* 01010 */
2747 // 0x00, /* 00000 */
2748
2749 // /*
2750 // * code=228, hex=0xE4, ascii="!d"
2751 // */
2752 // 0x00, /* 00000 */
2753 // 0xF8, /* 11111 */
2754 // 0x48, /* 01001 */
2755 // 0x20, /* 00100 */
2756 // 0x40, /* 01000 */
2757 // 0x88, /* 10001 */
2758 // 0xF8, /* 11111 */
2759 // 0x00, /* 00000 */
2760
2761 // /*
2762 // * code=229, hex=0xE5, ascii="!e"
2763 // */
2764 // 0x00, /* 00000 */
2765 // 0x00, /* 00000 */
2766 // 0x78, /* 01111 */
2767 // 0x90, /* 10010 */
2768 // 0x90, /* 10010 */
2769 // 0x90, /* 10010 */
2770 // 0x60, /* 01100 */
2771 // 0x00, /* 00000 */
2772
2773 // /*
2774 // * code=230, hex=0xE6, ascii="!f"
2775 // */
2776 // 0x00, /* 00000 */
2777 // 0x00, /* 00000 */
2778 // 0x00, /* 00000 */
2779 // 0x90, /* 10010 */
2780 // 0x90, /* 10010 */
2781 // 0x90, /* 10010 */
2782 // 0xE8, /* 11101 */
2783 // 0x80, /* 10000 */
2784
2785 // /*
2786 // * code=231, hex=0xE7, ascii="!g"
2787 // */
2788 // 0x00, /* 00000 */
2789 // 0x98, /* 10011 */
2790 // 0x50, /* 01010 */
2791 // 0x20, /* 00100 */
2792 // 0x20, /* 00100 */
2793 // 0x20, /* 00100 */
2794 // 0x20, /* 00100 */
2795 // 0x00, /* 00000 */
2796
2797 // /*
2798 // * code=232, hex=0xE8, ascii="!h"
2799 // */
2800 // 0x00, /* 00000 */
2801 // 0x20, /* 00100 */
2802 // 0x20, /* 00100 */
2803 // 0x70, /* 01110 */
2804 // 0x88, /* 10001 */
2805 // 0x70, /* 01110 */
2806 // 0x20, /* 00100 */
2807 // 0x20, /* 00100 */
2808
2809 // /*
2810 // * code=233, hex=0xE9, ascii="!i"
2811 // */
2812 // 0x00, /* 00000 */
2813 // 0x00, /* 00000 */
2814 // 0x70, /* 01110 */
2815 // 0x88, /* 10001 */
2816 // 0xF8, /* 11111 */
2817 // 0x88, /* 10001 */
2818 // 0x70, /* 01110 */
2819 // 0x00, /* 00000 */
2820
2821 // /*
2822 // * code=234, hex=0xEA, ascii="!j"
2823 // */
2824 // 0x00, /* 00000 */
2825 // 0x00, /* 00000 */
2826 // 0x70, /* 01110 */
2827 // 0x88, /* 10001 */
2828 // 0x88, /* 10001 */
2829 // 0x50, /* 01010 */
2830 // 0xD8, /* 11011 */
2831 // 0x00, /* 00000 */
2832
2833 // /*
2834 // * code=235, hex=0xEB, ascii="!k"
2835 // */
2836 // 0x60, /* 01100 */
2837 // 0x80, /* 10000 */
2838 // 0x40, /* 01000 */
2839 // 0x60, /* 01100 */
2840 // 0x90, /* 10010 */
2841 // 0x90, /* 10010 */
2842 // 0x60, /* 01100 */
2843 // 0x00, /* 00000 */
2844
2845 // /*
2846 // * code=236, hex=0xEC, ascii="!l"
2847 // */
2848 // 0x00, /* 00000 */
2849 // 0x00, /* 00000 */
2850 // 0x00, /* 00000 */
2851 // 0x70, /* 01110 */
2852 // 0xA8, /* 10101 */
2853 // 0xA8, /* 10101 */
2854 // 0x70, /* 01110 */
2855 // 0x00, /* 00000 */
2856
2857 // /*
2858 // * code=237, hex=0xED, ascii="!m"
2859 // */
2860 // 0x00, /* 00000 */
2861 // 0x00, /* 00000 */
2862 // 0x08, /* 00001 */
2863 // 0x70, /* 01110 */
2864 // 0xA8, /* 10101 */
2865 // 0x48, /* 01001 */
2866 // 0xB0, /* 10110 */
2867 // 0x00, /* 00000 */
2868
2869 // /*
2870 // * code=238, hex=0xEE, ascii="!n"
2871 // */
2872 // 0x00, /* 00000 */
2873 // 0x30, /* 00110 */
2874 // 0x40, /* 01000 */
2875 // 0x70, /* 01110 */
2876 // 0x40, /* 01000 */
2877 // 0x40, /* 01000 */
2878 // 0x30, /* 00110 */
2879 // 0x00, /* 00000 */
2880
2881 // /*
2882 // * code=239, hex=0xEF, ascii="!o"
2883 // */
2884 // 0x00, /* 00000 */
2885 // 0x60, /* 01100 */
2886 // 0x90, /* 10010 */
2887 // 0x90, /* 10010 */
2888 // 0x90, /* 10010 */
2889 // 0x90, /* 10010 */
2890 // 0x90, /* 10010 */
2891 // 0x00, /* 00000 */
2892
2893 // /*
2894 // * code=240, hex=0xF0, ascii="!p"
2895 // */
2896 // 0x00, /* 00000 */
2897 // 0x00, /* 00000 */
2898 // 0xF0, /* 11110 */
2899 // 0x00, /* 00000 */
2900 // 0xF0, /* 11110 */
2901 // 0x00, /* 00000 */
2902 // 0xF0, /* 11110 */
2903 // 0x00, /* 00000 */
2904
2905 // /*
2906 // * code=241, hex=0xF1, ascii="!q"
2907 // */
2908 // 0x00, /* 00000 */
2909 // 0x00, /* 00000 */
2910 // 0x20, /* 00100 */
2911 // 0xF8, /* 11111 */
2912 // 0x20, /* 00100 */
2913 // 0x00, /* 00000 */
2914 // 0xF8, /* 11111 */
2915 // 0x00, /* 00000 */
2916
2917 // /*
2918 // * code=242, hex=0xF2, ascii="!r"
2919 // */
2920 // 0x00, /* 00000 */
2921 // 0x40, /* 01000 */
2922 // 0x20, /* 00100 */
2923 // 0x10, /* 00010 */
2924 // 0x20, /* 00100 */
2925 // 0x40, /* 01000 */
2926 // 0xF0, /* 11110 */
2927 // 0x00, /* 00000 */
2928
2929 // /*
2930 // * code=243, hex=0xF3, ascii="!s"
2931 // */
2932 // 0x00, /* 00000 */
2933 // 0x10, /* 00010 */
2934 // 0x20, /* 00100 */
2935 // 0x40, /* 01000 */
2936 // 0x20, /* 00100 */
2937 // 0x10, /* 00010 */
2938 // 0x70, /* 01110 */
2939 // 0x00, /* 00000 */
2940
2941 // /*
2942 // * code=244, hex=0xF4, ascii="!t"
2943 // */
2944 // 0x00, /* 00000 */
2945 // 0x00, /* 00000 */
2946 // 0x18, /* 00011 */
2947 // 0x28, /* 00101 */
2948 // 0x20, /* 00100 */
2949 // 0x20, /* 00100 */
2950 // 0x20, /* 00100 */
2951 // 0x20, /* 00100 */
2952
2953 // /*
2954 // * code=245, hex=0xF5, ascii="!u"
2955 // */
2956 // 0x20, /* 00100 */
2957 // 0x20, /* 00100 */
2958 // 0x20, /* 00100 */
2959 // 0x20, /* 00100 */
2960 // 0xA0, /* 10100 */
2961 // 0xC0, /* 11000 */
2962 // 0x00, /* 00000 */
2963 // 0x00, /* 00000 */
2964
2965 // /*
2966 // * code=246, hex=0xF6, ascii="!v"
2967 // */
2968 // 0x00, /* 00000 */
2969 // 0x00, /* 00000 */
2970 // 0x60, /* 01100 */
2971 // 0x00, /* 00000 */
2972 // 0xF0, /* 11110 */
2973 // 0x00, /* 00000 */
2974 // 0x60, /* 01100 */
2975 // 0x00, /* 00000 */
2976
2977 // /*
2978 // * code=247, hex=0xF7, ascii="!w"
2979 // */
2980 // 0x00, /* 00000 */
2981 // 0x00, /* 00000 */
2982 // 0x50, /* 01010 */
2983 // 0xA0, /* 10100 */
2984 // 0x00, /* 00000 */
2985 // 0x50, /* 01010 */
2986 // 0xA0, /* 10100 */
2987 // 0x00, /* 00000 */
2988
2989 // /*
2990 // * code=248, hex=0xF8, ascii="!x"
2991 // */
2992 // 0x00, /* 00000 */
2993 // 0x00, /* 00000 */
2994 // 0x20, /* 00100 */
2995 // 0x50, /* 01010 */
2996 // 0x20, /* 00100 */
2997 // 0x00, /* 00000 */
2998 // 0x00, /* 00000 */
2999 // 0x00, /* 00000 */
3000
3001 // /*
3002 // * code=249, hex=0xF9, ascii="!y"
3003 // */
3004 // 0x00, /* 00000 */
3005 // 0x00, /* 00000 */
3006 // 0x00, /* 00000 */
3007 // 0x60, /* 01100 */
3008 // 0x60, /* 01100 */
3009 // 0x00, /* 00000 */
3010 // 0x00, /* 00000 */
3011 // 0x00, /* 00000 */
3012
3013 // /*
3014 // * code=250, hex=0xFA, ascii="!z"
3015 // */
3016 // 0x00, /* 00000 */
3017 // 0x00, /* 00000 */
3018 // 0x00, /* 00000 */
3019 // 0x20, /* 00100 */
3020 // 0x00, /* 00000 */
3021 // 0x00, /* 00000 */
3022 // 0x00, /* 00000 */
3023 // 0x00, /* 00000 */
3024
3025 // /*
3026 // * code=251, hex=0xFB, ascii="!{"
3027 // */
3028 // 0x00, /* 00000 */
3029 // 0x00, /* 00000 */
3030 // 0x18, /* 00011 */
3031 // 0x10, /* 00010 */
3032 // 0x20, /* 00100 */
3033 // 0xA0, /* 10100 */
3034 // 0x40, /* 01000 */
3035 // 0x00, /* 00000 */
3036
3037 // /*
3038 // * code=252, hex=0xFC, ascii="!|"
3039 // */
3040 // 0x00, /* 00000 */
3041 // 0x60, /* 01100 */
3042 // 0x50, /* 01010 */
3043 // 0x50, /* 01010 */
3044 // 0x00, /* 00000 */
3045 // 0x00, /* 00000 */
3046 // 0x00, /* 00000 */
3047 // 0x00, /* 00000 */
3048
3049 // /*
3050 // * code=253, hex=0xFD, ascii="!}"
3051 // */
3052 // 0x00, /* 00000 */
3053 // 0x60, /* 01100 */
3054 // 0x10, /* 00010 */
3055 // 0x20, /* 00100 */
3056 // 0x70, /* 01110 */
3057 // 0x00, /* 00000 */
3058 // 0x00, /* 00000 */
3059 // 0x00, /* 00000 */
3060
3061 // /*
3062 // * code=254, hex=0xFE, ascii="!~"
3063 // */
3064 // 0x00, /* 00000 */
3065 // 0x00, /* 00000 */
3066 // 0x00, /* 00000 */
3067 // 0x70, /* 01110 */
3068 // 0x70, /* 01110 */
3069 // 0x70, /* 01110 */
3070 // 0x00, /* 00000 */
3071 // 0x00, /* 00000 */
3072
3073 // /*
3074 // * code=255, hex=0xFF, ascii="!^Ÿ"
3075 // */
3076 // 0x00, /* 00000 */
3077 // 0x00, /* 00000 */
3078 // 0x00, /* 00000 */
3079 // 0x00, /* 00000 */
3080 // 0x00, /* 00000 */
3081 // 0x00, /* 00000 */
3082 // 0x00, /* 00000 */
3083 // 0x00, /* 00000 */
3084};

◆ console_font_6x8

const unsigned char fl::console_font_6x8[]
static

Definition at line 6 of file console_font_6x8.h.

6 {
7
8// code points 0-31 and 127-255 are commented out to save memory, they contain extra characters (CP437),
9// which could be used with an UTF-8 to CP437 conversion
10
11 // /*
12 // * code=0, hex=0x00, ascii="^@"
13 // */
14 // 0x00, /* 000000 */
15 // 0x00, /* 000000 */
16 // 0x00, /* 000000 */
17 // 0x00, /* 000000 */
18 // 0x00, /* 000000 */
19 // 0x00, /* 000000 */
20 // 0x00, /* 000000 */
21 // 0x00, /* 000000 */
22
23 // /*
24 // * code=1, hex=0x01, ascii="^A"
25 // */
26 // 0x38, /* 001110 */
27 // 0x44, /* 010001 */
28 // 0x6C, /* 011011 */
29 // 0x44, /* 010001 */
30 // 0x54, /* 010101 */
31 // 0x44, /* 010001 */
32 // 0x38, /* 001110 */
33 // 0x00, /* 000000 */
34
35 // /*
36 // * code=2, hex=0x02, ascii="^B"
37 // */
38 // 0x38, /* 001110 */
39 // 0x7C, /* 011111 */
40 // 0x54, /* 010101 */
41 // 0x7C, /* 011111 */
42 // 0x44, /* 010001 */
43 // 0x7C, /* 011111 */
44 // 0x38, /* 001110 */
45 // 0x00, /* 000000 */
46
47 // /*
48 // * code=3, hex=0x03, ascii="^C"
49 // */
50 // 0x00, /* 000000 */
51 // 0x28, /* 001010 */
52 // 0x7C, /* 011111 */
53 // 0x7C, /* 011111 */
54 // 0x7C, /* 011111 */
55 // 0x38, /* 001110 */
56 // 0x10, /* 000100 */
57 // 0x00, /* 000000 */
58
59 // /*
60 // * code=4, hex=0x04, ascii="^D"
61 // */
62 // 0x00, /* 000000 */
63 // 0x10, /* 000100 */
64 // 0x38, /* 001110 */
65 // 0x7C, /* 011111 */
66 // 0x7C, /* 011111 */
67 // 0x38, /* 001110 */
68 // 0x10, /* 000100 */
69 // 0x00, /* 000000 */
70
71 // /*
72 // * code=5, hex=0x05, ascii="^E"
73 // */
74 // 0x10, /* 000100 */
75 // 0x38, /* 001110 */
76 // 0x38, /* 001110 */
77 // 0x10, /* 000100 */
78 // 0x7C, /* 011111 */
79 // 0x7C, /* 011111 */
80 // 0x10, /* 000100 */
81 // 0x00, /* 000000 */
82
83 // /*
84 // * code=6, hex=0x06, ascii="^F"
85 // */
86 // 0x00, /* 000000 */
87 // 0x10, /* 000100 */
88 // 0x38, /* 001110 */
89 // 0x7C, /* 011111 */
90 // 0x7C, /* 011111 */
91 // 0x10, /* 000100 */
92 // 0x38, /* 001110 */
93 // 0x00, /* 000000 */
94
95 // /*
96 // * code=7, hex=0x07, ascii="^G"
97 // */
98 // 0x00, /* 000000 */
99 // 0x00, /* 000000 */
100 // 0x00, /* 000000 */
101 // 0x30, /* 001100 */
102 // 0x30, /* 001100 */
103 // 0x00, /* 000000 */
104 // 0x00, /* 000000 */
105 // 0x00, /* 000000 */
106
107 // /*
108 // * code=8, hex=0x08, ascii="^H"
109 // */
110 // 0xFC, /* 111111 */
111 // 0xFC, /* 111111 */
112 // 0xFC, /* 111111 */
113 // 0xCC, /* 110011 */
114 // 0xCC, /* 110011 */
115 // 0xFC, /* 111111 */
116 // 0xFC, /* 111111 */
117 // 0xFC, /* 111111 */
118
119 // /*
120 // * code=9, hex=0x09, ascii="^I"
121 // */
122 // 0x00, /* 000000 */
123 // 0x00, /* 000000 */
124 // 0x78, /* 011110 */
125 // 0x48, /* 010010 */
126 // 0x48, /* 010010 */
127 // 0x78, /* 011110 */
128 // 0x00, /* 000000 */
129 // 0x00, /* 000000 */
130
131 // /*
132 // * code=10, hex=0x0A, ascii="^J"
133 // */
134 // 0xFC, /* 111111 */
135 // 0xFC, /* 111111 */
136 // 0x84, /* 100001 */
137 // 0xB4, /* 101101 */
138 // 0xB4, /* 101101 */
139 // 0x84, /* 100001 */
140 // 0xFC, /* 111111 */
141 // 0xFC, /* 111111 */
142
143 // /*
144 // * code=11, hex=0x0B, ascii="^K"
145 // */
146 // 0x00, /* 000000 */
147 // 0x1C, /* 000111 */
148 // 0x0C, /* 000011 */
149 // 0x34, /* 001101 */
150 // 0x48, /* 010010 */
151 // 0x48, /* 010010 */
152 // 0x30, /* 001100 */
153 // 0x00, /* 000000 */
154
155 // /*
156 // * code=12, hex=0x0C, ascii="^L"
157 // */
158 // 0x38, /* 001110 */
159 // 0x44, /* 010001 */
160 // 0x44, /* 010001 */
161 // 0x38, /* 001110 */
162 // 0x10, /* 000100 */
163 // 0x38, /* 001110 */
164 // 0x10, /* 000100 */
165 // 0x00, /* 000000 */
166
167 // /*
168 // * code=13, hex=0x0D, ascii="^M"
169 // */
170 // 0x10, /* 000100 */
171 // 0x18, /* 000110 */
172 // 0x14, /* 000101 */
173 // 0x10, /* 000100 */
174 // 0x30, /* 001100 */
175 // 0x70, /* 011100 */
176 // 0x60, /* 011000 */
177 // 0x00, /* 000000 */
178
179 // /*
180 // * code=14, hex=0x0E, ascii="^N"
181 // */
182 // 0x0C, /* 000011 */
183 // 0x34, /* 001101 */
184 // 0x2C, /* 001011 */
185 // 0x34, /* 001101 */
186 // 0x2C, /* 001011 */
187 // 0x6C, /* 011011 */
188 // 0x60, /* 011000 */
189 // 0x00, /* 000000 */
190
191 // /*
192 // * code=15, hex=0x0F, ascii="^O"
193 // */
194 // 0x00, /* 000000 */
195 // 0x54, /* 010101 */
196 // 0x38, /* 001110 */
197 // 0x6C, /* 011011 */
198 // 0x38, /* 001110 */
199 // 0x54, /* 010101 */
200 // 0x00, /* 000000 */
201 // 0x00, /* 000000 */
202
203 // /*
204 // * code=16, hex=0x10, ascii="^P"
205 // */
206 // 0x20, /* 001000 */
207 // 0x30, /* 001100 */
208 // 0x38, /* 001110 */
209 // 0x3C, /* 001111 */
210 // 0x38, /* 001110 */
211 // 0x30, /* 001100 */
212 // 0x20, /* 001000 */
213 // 0x00, /* 000000 */
214
215 // /*
216 // * code=17, hex=0x11, ascii="^Q"
217 // */
218 // 0x08, /* 000010 */
219 // 0x18, /* 000110 */
220 // 0x38, /* 001110 */
221 // 0x78, /* 011110 */
222 // 0x38, /* 001110 */
223 // 0x18, /* 000110 */
224 // 0x08, /* 000010 */
225 // 0x00, /* 000000 */
226
227 // /*
228 // * code=18, hex=0x12, ascii="^R"
229 // */
230 // 0x10, /* 000100 */
231 // 0x38, /* 001110 */
232 // 0x7C, /* 011111 */
233 // 0x10, /* 000100 */
234 // 0x7C, /* 011111 */
235 // 0x38, /* 001110 */
236 // 0x10, /* 000100 */
237 // 0x00, /* 000000 */
238
239 // /*
240 // * code=19, hex=0x13, ascii="^S"
241 // */
242 // 0x28, /* 001010 */
243 // 0x28, /* 001010 */
244 // 0x28, /* 001010 */
245 // 0x28, /* 001010 */
246 // 0x28, /* 001010 */
247 // 0x00, /* 000000 */
248 // 0x28, /* 001010 */
249 // 0x00, /* 000000 */
250
251 // /*
252 // * code=20, hex=0x14, ascii="^T"
253 // */
254 // 0x3C, /* 001111 */
255 // 0x54, /* 010101 */
256 // 0x54, /* 010101 */
257 // 0x34, /* 001101 */
258 // 0x14, /* 000101 */
259 // 0x14, /* 000101 */
260 // 0x14, /* 000101 */
261 // 0x00, /* 000000 */
262
263 // /*
264 // * code=21, hex=0x15, ascii="^U"
265 // */
266 // 0x38, /* 001110 */
267 // 0x44, /* 010001 */
268 // 0x30, /* 001100 */
269 // 0x28, /* 001010 */
270 // 0x18, /* 000110 */
271 // 0x44, /* 010001 */
272 // 0x38, /* 001110 */
273 // 0x00, /* 000000 */
274
275 // /*
276 // * code=22, hex=0x16, ascii="^V"
277 // */
278 // 0x00, /* 000000 */
279 // 0x00, /* 000000 */
280 // 0x00, /* 000000 */
281 // 0x00, /* 000000 */
282 // 0x00, /* 000000 */
283 // 0x78, /* 011110 */
284 // 0x78, /* 011110 */
285 // 0x00, /* 000000 */
286
287 // /*
288 // * code=23, hex=0x17, ascii="^W"
289 // */
290 // 0x10, /* 000100 */
291 // 0x38, /* 001110 */
292 // 0x7C, /* 011111 */
293 // 0x10, /* 000100 */
294 // 0x7C, /* 011111 */
295 // 0x38, /* 001110 */
296 // 0x10, /* 000100 */
297 // 0x38, /* 001110 */
298
299 // /*
300 // * code=24, hex=0x18, ascii="^X"
301 // */
302 // 0x10, /* 000100 */
303 // 0x38, /* 001110 */
304 // 0x7C, /* 011111 */
305 // 0x10, /* 000100 */
306 // 0x10, /* 000100 */
307 // 0x10, /* 000100 */
308 // 0x10, /* 000100 */
309 // 0x00, /* 000000 */
310
311 // /*
312 // * code=25, hex=0x19, ascii="^Y"
313 // */
314 // 0x10, /* 000100 */
315 // 0x10, /* 000100 */
316 // 0x10, /* 000100 */
317 // 0x10, /* 000100 */
318 // 0x7C, /* 011111 */
319 // 0x38, /* 001110 */
320 // 0x10, /* 000100 */
321 // 0x00, /* 000000 */
322
323 // /*
324 // * code=26, hex=0x1A, ascii="^Z"
325 // */
326 // 0x00, /* 000000 */
327 // 0x10, /* 000100 */
328 // 0x18, /* 000110 */
329 // 0x7C, /* 011111 */
330 // 0x18, /* 000110 */
331 // 0x10, /* 000100 */
332 // 0x00, /* 000000 */
333 // 0x00, /* 000000 */
334
335 // /*
336 // * code=27, hex=0x1B, ascii="^["
337 // */
338 // 0x00, /* 000000 */
339 // 0x10, /* 000100 */
340 // 0x30, /* 001100 */
341 // 0x7C, /* 011111 */
342 // 0x30, /* 001100 */
343 // 0x10, /* 000100 */
344 // 0x00, /* 000000 */
345 // 0x00, /* 000000 */
346
347 // /*
348 // * code=28, hex=0x1C, ascii="^\"
349 // */
350 // 0x00, /* 000000 */
351 // 0x00, /* 000000 */
352 // 0x00, /* 000000 */
353 // 0x40, /* 010000 */
354 // 0x40, /* 010000 */
355 // 0x40, /* 010000 */
356 // 0x7C, /* 011111 */
357 // 0x00, /* 000000 */
358
359 // /*
360 // * code=29, hex=0x1D, ascii="^]"
361 // */
362 // 0x00, /* 000000 */
363 // 0x28, /* 001010 */
364 // 0x28, /* 001010 */
365 // 0x7C, /* 011111 */
366 // 0x28, /* 001010 */
367 // 0x28, /* 001010 */
368 // 0x00, /* 000000 */
369 // 0x00, /* 000000 */
370
371 // /*
372 // * code=30, hex=0x1E, ascii="^^"
373 // */
374 // 0x10, /* 000100 */
375 // 0x10, /* 000100 */
376 // 0x38, /* 001110 */
377 // 0x38, /* 001110 */
378 // 0x7C, /* 011111 */
379 // 0x7C, /* 011111 */
380 // 0x00, /* 000000 */
381 // 0x00, /* 000000 */
382
383 // /*
384 // * code=31, hex=0x1F, ascii="^_"
385 // */
386 // 0x7C, /* 011111 */
387 // 0x7C, /* 011111 */
388 // 0x38, /* 001110 */
389 // 0x38, /* 001110 */
390 // 0x10, /* 000100 */
391 // 0x10, /* 000100 */
392 // 0x00, /* 000000 */
393 // 0x00, /* 000000 */
394
395 /*
396 * code=32, hex=0x20, ascii=" "
397 */
398 0x00, /* 000000 */
399 0x00, /* 000000 */
400 0x00, /* 000000 */
401 0x00, /* 000000 */
402 0x00, /* 000000 */
403 0x00, /* 000000 */
404 0x00, /* 000000 */
405 0x00, /* 000000 */
406
407 /*
408 * code=33, hex=0x21, ascii="!"
409 */
410 0x10, /* 000100 */
411 0x38, /* 001110 */
412 0x38, /* 001110 */
413 0x10, /* 000100 */
414 0x10, /* 000100 */
415 0x00, /* 000000 */
416 0x10, /* 000100 */
417 0x00, /* 000000 */
418
419 /*
420 * code=34, hex=0x22, ascii="""
421 */
422 0x6C, /* 011011 */
423 0x6C, /* 011011 */
424 0x48, /* 010010 */
425 0x00, /* 000000 */
426 0x00, /* 000000 */
427 0x00, /* 000000 */
428 0x00, /* 000000 */
429 0x00, /* 000000 */
430
431 /*
432 * code=35, hex=0x23, ascii="#"
433 */
434 0x00, /* 000000 */
435 0x28, /* 001010 */
436 0x7C, /* 011111 */
437 0x28, /* 001010 */
438 0x28, /* 001010 */
439 0x7C, /* 011111 */
440 0x28, /* 001010 */
441 0x00, /* 000000 */
442
443 /*
444 * code=36, hex=0x24, ascii="$"
445 */
446 0x20, /* 001000 */
447 0x38, /* 001110 */
448 0x40, /* 010000 */
449 0x30, /* 001100 */
450 0x08, /* 000010 */
451 0x70, /* 011100 */
452 0x10, /* 000100 */
453 0x00, /* 000000 */
454
455 /*
456 * code=37, hex=0x25, ascii="%"
457 */
458 0x64, /* 011001 */
459 0x64, /* 011001 */
460 0x08, /* 000010 */
461 0x10, /* 000100 */
462 0x20, /* 001000 */
463 0x4C, /* 010011 */
464 0x4C, /* 010011 */
465 0x00, /* 000000 */
466
467 /*
468 * code=38, hex=0x26, ascii="&"
469 */
470 0x20, /* 001000 */
471 0x50, /* 010100 */
472 0x50, /* 010100 */
473 0x20, /* 001000 */
474 0x54, /* 010101 */
475 0x48, /* 010010 */
476 0x34, /* 001101 */
477 0x00, /* 000000 */
478
479 /*
480 * code=39, hex=0x27, ascii="'"
481 */
482 0x30, /* 001100 */
483 0x30, /* 001100 */
484 0x20, /* 001000 */
485 0x00, /* 000000 */
486 0x00, /* 000000 */
487 0x00, /* 000000 */
488 0x00, /* 000000 */
489 0x00, /* 000000 */
490
491 /*
492 * code=40, hex=0x28, ascii="("
493 */
494 0x10, /* 000100 */
495 0x20, /* 001000 */
496 0x20, /* 001000 */
497 0x20, /* 001000 */
498 0x20, /* 001000 */
499 0x20, /* 001000 */
500 0x10, /* 000100 */
501 0x00, /* 000000 */
502
503 /*
504 * code=41, hex=0x29, ascii=")"
505 */
506 0x20, /* 001000 */
507 0x10, /* 000100 */
508 0x10, /* 000100 */
509 0x10, /* 000100 */
510 0x10, /* 000100 */
511 0x10, /* 000100 */
512 0x20, /* 001000 */
513 0x00, /* 000000 */
514
515 /*
516 * code=42, hex=0x2A, ascii="*"
517 */
518 0x00, /* 000000 */
519 0x28, /* 001010 */
520 0x38, /* 001110 */
521 0x7C, /* 011111 */
522 0x38, /* 001110 */
523 0x28, /* 001010 */
524 0x00, /* 000000 */
525 0x00, /* 000000 */
526
527 /*
528 * code=43, hex=0x2B, ascii="+"
529 */
530 0x00, /* 000000 */
531 0x10, /* 000100 */
532 0x10, /* 000100 */
533 0x7C, /* 011111 */
534 0x10, /* 000100 */
535 0x10, /* 000100 */
536 0x00, /* 000000 */
537 0x00, /* 000000 */
538
539 /*
540 * code=44, hex=0x2C, ascii=","
541 */
542 0x00, /* 000000 */
543 0x00, /* 000000 */
544 0x00, /* 000000 */
545 0x00, /* 000000 */
546 0x00, /* 000000 */
547 0x30, /* 001100 */
548 0x30, /* 001100 */
549 0x20, /* 001000 */
550
551 /*
552 * code=45, hex=0x2D, ascii="-"
553 */
554 0x00, /* 000000 */
555 0x00, /* 000000 */
556 0x00, /* 000000 */
557 0x7C, /* 011111 */
558 0x00, /* 000000 */
559 0x00, /* 000000 */
560 0x00, /* 000000 */
561 0x00, /* 000000 */
562
563 /*
564 * code=46, hex=0x2E, ascii="."
565 */
566 0x00, /* 000000 */
567 0x00, /* 000000 */
568 0x00, /* 000000 */
569 0x00, /* 000000 */
570 0x00, /* 000000 */
571 0x30, /* 001100 */
572 0x30, /* 001100 */
573 0x00, /* 000000 */
574
575 /*
576 * code=47, hex=0x2F, ascii="/"
577 */
578 0x00, /* 000000 */
579 0x04, /* 000001 */
580 0x08, /* 000010 */
581 0x10, /* 000100 */
582 0x20, /* 001000 */
583 0x40, /* 010000 */
584 0x00, /* 000000 */
585 0x00, /* 000000 */
586
587 /*
588 * code=48, hex=0x30, ascii="0"
589 */
590 0x38, /* 001110 */
591 0x44, /* 010001 */
592 0x4C, /* 010011 */
593 0x54, /* 010101 */
594 0x64, /* 011001 */
595 0x44, /* 010001 */
596 0x38, /* 001110 */
597 0x00, /* 000000 */
598
599 /*
600 * code=49, hex=0x31, ascii="1"
601 */
602 0x10, /* 000100 */
603 0x30, /* 001100 */
604 0x10, /* 000100 */
605 0x10, /* 000100 */
606 0x10, /* 000100 */
607 0x10, /* 000100 */
608 0x38, /* 001110 */
609 0x00, /* 000000 */
610
611 /*
612 * code=50, hex=0x32, ascii="2"
613 */
614 0x38, /* 001110 */
615 0x44, /* 010001 */
616 0x04, /* 000001 */
617 0x18, /* 000110 */
618 0x20, /* 001000 */
619 0x40, /* 010000 */
620 0x7C, /* 011111 */
621 0x00, /* 000000 */
622
623 /*
624 * code=51, hex=0x33, ascii="3"
625 */
626 0x38, /* 001110 */
627 0x44, /* 010001 */
628 0x04, /* 000001 */
629 0x38, /* 001110 */
630 0x04, /* 000001 */
631 0x44, /* 010001 */
632 0x38, /* 001110 */
633 0x00, /* 000000 */
634
635 /*
636 * code=52, hex=0x34, ascii="4"
637 */
638 0x08, /* 000010 */
639 0x18, /* 000110 */
640 0x28, /* 001010 */
641 0x48, /* 010010 */
642 0x7C, /* 011111 */
643 0x08, /* 000010 */
644 0x08, /* 000010 */
645 0x00, /* 000000 */
646
647 /*
648 * code=53, hex=0x35, ascii="5"
649 */
650 0x7C, /* 011111 */
651 0x40, /* 010000 */
652 0x40, /* 010000 */
653 0x78, /* 011110 */
654 0x04, /* 000001 */
655 0x44, /* 010001 */
656 0x38, /* 001110 */
657 0x00, /* 000000 */
658
659 /*
660 * code=54, hex=0x36, ascii="6"
661 */
662 0x18, /* 000110 */
663 0x20, /* 001000 */
664 0x40, /* 010000 */
665 0x78, /* 011110 */
666 0x44, /* 010001 */
667 0x44, /* 010001 */
668 0x38, /* 001110 */
669 0x00, /* 000000 */
670
671 /*
672 * code=55, hex=0x37, ascii="7"
673 */
674 0x7C, /* 011111 */
675 0x04, /* 000001 */
676 0x08, /* 000010 */
677 0x10, /* 000100 */
678 0x20, /* 001000 */
679 0x20, /* 001000 */
680 0x20, /* 001000 */
681 0x00, /* 000000 */
682
683 /*
684 * code=56, hex=0x38, ascii="8"
685 */
686 0x38, /* 001110 */
687 0x44, /* 010001 */
688 0x44, /* 010001 */
689 0x38, /* 001110 */
690 0x44, /* 010001 */
691 0x44, /* 010001 */
692 0x38, /* 001110 */
693 0x00, /* 000000 */
694
695 /*
696 * code=57, hex=0x39, ascii="9"
697 */
698 0x38, /* 001110 */
699 0x44, /* 010001 */
700 0x44, /* 010001 */
701 0x3C, /* 001111 */
702 0x04, /* 000001 */
703 0x08, /* 000010 */
704 0x30, /* 001100 */
705 0x00, /* 000000 */
706
707 /*
708 * code=58, hex=0x3A, ascii=":"
709 */
710 0x00, /* 000000 */
711 0x00, /* 000000 */
712 0x30, /* 001100 */
713 0x30, /* 001100 */
714 0x00, /* 000000 */
715 0x30, /* 001100 */
716 0x30, /* 001100 */
717 0x00, /* 000000 */
718
719 /*
720 * code=59, hex=0x3B, ascii=";"
721 */
722 0x00, /* 000000 */
723 0x00, /* 000000 */
724 0x30, /* 001100 */
725 0x30, /* 001100 */
726 0x00, /* 000000 */
727 0x30, /* 001100 */
728 0x30, /* 001100 */
729 0x20, /* 001000 */
730
731 /*
732 * code=60, hex=0x3C, ascii="<"
733 */
734 0x08, /* 000010 */
735 0x10, /* 000100 */
736 0x20, /* 001000 */
737 0x40, /* 010000 */
738 0x20, /* 001000 */
739 0x10, /* 000100 */
740 0x08, /* 000010 */
741 0x00, /* 000000 */
742
743 /*
744 * code=61, hex=0x3D, ascii="="
745 */
746 0x00, /* 000000 */
747 0x00, /* 000000 */
748 0x7C, /* 011111 */
749 0x00, /* 000000 */
750 0x00, /* 000000 */
751 0x7C, /* 011111 */
752 0x00, /* 000000 */
753 0x00, /* 000000 */
754
755 /*
756 * code=62, hex=0x3E, ascii=">"
757 */
758 0x20, /* 001000 */
759 0x10, /* 000100 */
760 0x08, /* 000010 */
761 0x04, /* 000001 */
762 0x08, /* 000010 */
763 0x10, /* 000100 */
764 0x20, /* 001000 */
765 0x00, /* 000000 */
766
767 /*
768 * code=63, hex=0x3F, ascii="?"
769 */
770 0x38, /* 001110 */
771 0x44, /* 010001 */
772 0x04, /* 000001 */
773 0x18, /* 000110 */
774 0x10, /* 000100 */
775 0x00, /* 000000 */
776 0x10, /* 000100 */
777 0x00, /* 000000 */
778
779 /*
780 * code=64, hex=0x40, ascii="@"
781 */
782 0x38, /* 001110 */
783 0x44, /* 010001 */
784 0x5C, /* 010111 */
785 0x54, /* 010101 */
786 0x5C, /* 010111 */
787 0x40, /* 010000 */
788 0x38, /* 001110 */
789 0x00, /* 000000 */
790
791 /*
792 * code=65, hex=0x41, ascii="A"
793 */
794 0x38, /* 001110 */
795 0x44, /* 010001 */
796 0x44, /* 010001 */
797 0x44, /* 010001 */
798 0x7C, /* 011111 */
799 0x44, /* 010001 */
800 0x44, /* 010001 */
801 0x00, /* 000000 */
802
803 /*
804 * code=66, hex=0x42, ascii="B"
805 */
806 0x78, /* 011110 */
807 0x44, /* 010001 */
808 0x44, /* 010001 */
809 0x78, /* 011110 */
810 0x44, /* 010001 */
811 0x44, /* 010001 */
812 0x78, /* 011110 */
813 0x00, /* 000000 */
814
815 /*
816 * code=67, hex=0x43, ascii="C"
817 */
818 0x38, /* 001110 */
819 0x44, /* 010001 */
820 0x40, /* 010000 */
821 0x40, /* 010000 */
822 0x40, /* 010000 */
823 0x44, /* 010001 */
824 0x38, /* 001110 */
825 0x00, /* 000000 */
826
827 /*
828 * code=68, hex=0x44, ascii="D"
829 */
830 0x78, /* 011110 */
831 0x44, /* 010001 */
832 0x44, /* 010001 */
833 0x44, /* 010001 */
834 0x44, /* 010001 */
835 0x44, /* 010001 */
836 0x78, /* 011110 */
837 0x00, /* 000000 */
838
839 /*
840 * code=69, hex=0x45, ascii="E"
841 */
842 0x7C, /* 011111 */
843 0x40, /* 010000 */
844 0x40, /* 010000 */
845 0x78, /* 011110 */
846 0x40, /* 010000 */
847 0x40, /* 010000 */
848 0x7C, /* 011111 */
849 0x00, /* 000000 */
850
851 /*
852 * code=70, hex=0x46, ascii="F"
853 */
854 0x7C, /* 011111 */
855 0x40, /* 010000 */
856 0x40, /* 010000 */
857 0x78, /* 011110 */
858 0x40, /* 010000 */
859 0x40, /* 010000 */
860 0x40, /* 010000 */
861 0x00, /* 000000 */
862
863 /*
864 * code=71, hex=0x47, ascii="G"
865 */
866 0x38, /* 001110 */
867 0x44, /* 010001 */
868 0x40, /* 010000 */
869 0x5C, /* 010111 */
870 0x44, /* 010001 */
871 0x44, /* 010001 */
872 0x3C, /* 001111 */
873 0x00, /* 000000 */
874
875 /*
876 * code=72, hex=0x48, ascii="H"
877 */
878 0x44, /* 010001 */
879 0x44, /* 010001 */
880 0x44, /* 010001 */
881 0x7C, /* 011111 */
882 0x44, /* 010001 */
883 0x44, /* 010001 */
884 0x44, /* 010001 */
885 0x00, /* 000000 */
886
887 /*
888 * code=73, hex=0x49, ascii="I"
889 */
890 0x38, /* 001110 */
891 0x10, /* 000100 */
892 0x10, /* 000100 */
893 0x10, /* 000100 */
894 0x10, /* 000100 */
895 0x10, /* 000100 */
896 0x38, /* 001110 */
897 0x00, /* 000000 */
898
899 /*
900 * code=74, hex=0x4A, ascii="J"
901 */
902 0x04, /* 000001 */
903 0x04, /* 000001 */
904 0x04, /* 000001 */
905 0x04, /* 000001 */
906 0x44, /* 010001 */
907 0x44, /* 010001 */
908 0x38, /* 001110 */
909 0x00, /* 000000 */
910
911 /*
912 * code=75, hex=0x4B, ascii="K"
913 */
914 0x44, /* 010001 */
915 0x48, /* 010010 */
916 0x50, /* 010100 */
917 0x60, /* 011000 */
918 0x50, /* 010100 */
919 0x48, /* 010010 */
920 0x44, /* 010001 */
921 0x00, /* 000000 */
922
923 /*
924 * code=76, hex=0x4C, ascii="L"
925 */
926 0x40, /* 010000 */
927 0x40, /* 010000 */
928 0x40, /* 010000 */
929 0x40, /* 010000 */
930 0x40, /* 010000 */
931 0x40, /* 010000 */
932 0x7C, /* 011111 */
933 0x00, /* 000000 */
934
935 /*
936 * code=77, hex=0x4D, ascii="M"
937 */
938 0x44, /* 010001 */
939 0x6C, /* 011011 */
940 0x54, /* 010101 */
941 0x44, /* 010001 */
942 0x44, /* 010001 */
943 0x44, /* 010001 */
944 0x44, /* 010001 */
945 0x00, /* 000000 */
946
947 /*
948 * code=78, hex=0x4E, ascii="N"
949 */
950 0x44, /* 010001 */
951 0x64, /* 011001 */
952 0x54, /* 010101 */
953 0x4C, /* 010011 */
954 0x44, /* 010001 */
955 0x44, /* 010001 */
956 0x44, /* 010001 */
957 0x00, /* 000000 */
958
959 /*
960 * code=79, hex=0x4F, ascii="O"
961 */
962 0x38, /* 001110 */
963 0x44, /* 010001 */
964 0x44, /* 010001 */
965 0x44, /* 010001 */
966 0x44, /* 010001 */
967 0x44, /* 010001 */
968 0x38, /* 001110 */
969 0x00, /* 000000 */
970
971 /*
972 * code=80, hex=0x50, ascii="P"
973 */
974 0x78, /* 011110 */
975 0x44, /* 010001 */
976 0x44, /* 010001 */
977 0x78, /* 011110 */
978 0x40, /* 010000 */
979 0x40, /* 010000 */
980 0x40, /* 010000 */
981 0x00, /* 000000 */
982
983 /*
984 * code=81, hex=0x51, ascii="Q"
985 */
986 0x38, /* 001110 */
987 0x44, /* 010001 */
988 0x44, /* 010001 */
989 0x44, /* 010001 */
990 0x54, /* 010101 */
991 0x48, /* 010010 */
992 0x34, /* 001101 */
993 0x00, /* 000000 */
994
995 /*
996 * code=82, hex=0x52, ascii="R"
997 */
998 0x78, /* 011110 */
999 0x44, /* 010001 */
1000 0x44, /* 010001 */
1001 0x78, /* 011110 */
1002 0x48, /* 010010 */
1003 0x44, /* 010001 */
1004 0x44, /* 010001 */
1005 0x00, /* 000000 */
1006
1007 /*
1008 * code=83, hex=0x53, ascii="S"
1009 */
1010 0x38, /* 001110 */
1011 0x44, /* 010001 */
1012 0x40, /* 010000 */
1013 0x38, /* 001110 */
1014 0x04, /* 000001 */
1015 0x44, /* 010001 */
1016 0x38, /* 001110 */
1017 0x00, /* 000000 */
1018
1019 /*
1020 * code=84, hex=0x54, ascii="T"
1021 */
1022 0x7C, /* 011111 */
1023 0x10, /* 000100 */
1024 0x10, /* 000100 */
1025 0x10, /* 000100 */
1026 0x10, /* 000100 */
1027 0x10, /* 000100 */
1028 0x10, /* 000100 */
1029 0x00, /* 000000 */
1030
1031 /*
1032 * code=85, hex=0x55, ascii="U"
1033 */
1034 0x44, /* 010001 */
1035 0x44, /* 010001 */
1036 0x44, /* 010001 */
1037 0x44, /* 010001 */
1038 0x44, /* 010001 */
1039 0x44, /* 010001 */
1040 0x38, /* 001110 */
1041 0x00, /* 000000 */
1042
1043 /*
1044 * code=86, hex=0x56, ascii="V"
1045 */
1046 0x44, /* 010001 */
1047 0x44, /* 010001 */
1048 0x44, /* 010001 */
1049 0x44, /* 010001 */
1050 0x44, /* 010001 */
1051 0x28, /* 001010 */
1052 0x10, /* 000100 */
1053 0x00, /* 000000 */
1054
1055 /*
1056 * code=87, hex=0x57, ascii="W"
1057 */
1058 0x44, /* 010001 */
1059 0x44, /* 010001 */
1060 0x54, /* 010101 */
1061 0x54, /* 010101 */
1062 0x54, /* 010101 */
1063 0x54, /* 010101 */
1064 0x28, /* 001010 */
1065 0x00, /* 000000 */
1066
1067 /*
1068 * code=88, hex=0x58, ascii="X"
1069 */
1070 0x44, /* 010001 */
1071 0x44, /* 010001 */
1072 0x28, /* 001010 */
1073 0x10, /* 000100 */
1074 0x28, /* 001010 */
1075 0x44, /* 010001 */
1076 0x44, /* 010001 */
1077 0x00, /* 000000 */
1078
1079 /*
1080 * code=89, hex=0x59, ascii="Y"
1081 */
1082 0x44, /* 010001 */
1083 0x44, /* 010001 */
1084 0x44, /* 010001 */
1085 0x28, /* 001010 */
1086 0x10, /* 000100 */
1087 0x10, /* 000100 */
1088 0x10, /* 000100 */
1089 0x00, /* 000000 */
1090
1091 /*
1092 * code=90, hex=0x5A, ascii="Z"
1093 */
1094 0x78, /* 011110 */
1095 0x08, /* 000010 */
1096 0x10, /* 000100 */
1097 0x20, /* 001000 */
1098 0x40, /* 010000 */
1099 0x40, /* 010000 */
1100 0x78, /* 011110 */
1101 0x00, /* 000000 */
1102
1103 /*
1104 * code=91, hex=0x5B, ascii="["
1105 */
1106 0x38, /* 001110 */
1107 0x20, /* 001000 */
1108 0x20, /* 001000 */
1109 0x20, /* 001000 */
1110 0x20, /* 001000 */
1111 0x20, /* 001000 */
1112 0x38, /* 001110 */
1113 0x00, /* 000000 */
1114
1115 /*
1116 * code=92, hex=0x5C, ascii="\"
1117 */
1118 0x00, /* 000000 */
1119 0x40, /* 010000 */
1120 0x20, /* 001000 */
1121 0x10, /* 000100 */
1122 0x08, /* 000010 */
1123 0x04, /* 000001 */
1124 0x00, /* 000000 */
1125 0x00, /* 000000 */
1126
1127 /*
1128 * code=93, hex=0x5D, ascii="]"
1129 */
1130 0x38, /* 001110 */
1131 0x08, /* 000010 */
1132 0x08, /* 000010 */
1133 0x08, /* 000010 */
1134 0x08, /* 000010 */
1135 0x08, /* 000010 */
1136 0x38, /* 001110 */
1137 0x00, /* 000000 */
1138
1139 /*
1140 * code=94, hex=0x5E, ascii="^"
1141 */
1142 0x10, /* 000100 */
1143 0x28, /* 001010 */
1144 0x44, /* 010001 */
1145 0x00, /* 000000 */
1146 0x00, /* 000000 */
1147 0x00, /* 000000 */
1148 0x00, /* 000000 */
1149 0x00, /* 000000 */
1150
1151 /*
1152 * code=95, hex=0x5F, ascii="_"
1153 */
1154 0x00, /* 000000 */
1155 0x00, /* 000000 */
1156 0x00, /* 000000 */
1157 0x00, /* 000000 */
1158 0x00, /* 000000 */
1159 0x00, /* 000000 */
1160 0x00, /* 000000 */
1161 0xFC, /* 111111 */
1162
1163 /*
1164 * code=96, hex=0x60, ascii="`"
1165 */
1166 0x30, /* 001100 */
1167 0x30, /* 001100 */
1168 0x10, /* 000100 */
1169 0x00, /* 000000 */
1170 0x00, /* 000000 */
1171 0x00, /* 000000 */
1172 0x00, /* 000000 */
1173 0x00, /* 000000 */
1174
1175 /*
1176 * code=97, hex=0x61, ascii="a"
1177 */
1178 0x00, /* 000000 */
1179 0x00, /* 000000 */
1180 0x38, /* 001110 */
1181 0x04, /* 000001 */
1182 0x3C, /* 001111 */
1183 0x44, /* 010001 */
1184 0x3C, /* 001111 */
1185 0x00, /* 000000 */
1186
1187 /*
1188 * code=98, hex=0x62, ascii="b"
1189 */
1190 0x40, /* 010000 */
1191 0x40, /* 010000 */
1192 0x78, /* 011110 */
1193 0x44, /* 010001 */
1194 0x44, /* 010001 */
1195 0x44, /* 010001 */
1196 0x78, /* 011110 */
1197 0x00, /* 000000 */
1198
1199 /*
1200 * code=99, hex=0x63, ascii="c"
1201 */
1202 0x00, /* 000000 */
1203 0x00, /* 000000 */
1204 0x38, /* 001110 */
1205 0x44, /* 010001 */
1206 0x40, /* 010000 */
1207 0x44, /* 010001 */
1208 0x38, /* 001110 */
1209 0x00, /* 000000 */
1210
1211 /*
1212 * code=100, hex=0x64, ascii="d"
1213 */
1214 0x04, /* 000001 */
1215 0x04, /* 000001 */
1216 0x3C, /* 001111 */
1217 0x44, /* 010001 */
1218 0x44, /* 010001 */
1219 0x44, /* 010001 */
1220 0x3C, /* 001111 */
1221 0x00, /* 000000 */
1222
1223 /*
1224 * code=101, hex=0x65, ascii="e"
1225 */
1226 0x00, /* 000000 */
1227 0x00, /* 000000 */
1228 0x38, /* 001110 */
1229 0x44, /* 010001 */
1230 0x78, /* 011110 */
1231 0x40, /* 010000 */
1232 0x38, /* 001110 */
1233 0x00, /* 000000 */
1234
1235 /*
1236 * code=102, hex=0x66, ascii="f"
1237 */
1238 0x18, /* 000110 */
1239 0x20, /* 001000 */
1240 0x20, /* 001000 */
1241 0x78, /* 011110 */
1242 0x20, /* 001000 */
1243 0x20, /* 001000 */
1244 0x20, /* 001000 */
1245 0x00, /* 000000 */
1246
1247 /*
1248 * code=103, hex=0x67, ascii="g"
1249 */
1250 0x00, /* 000000 */
1251 0x00, /* 000000 */
1252 0x3C, /* 001111 */
1253 0x44, /* 010001 */
1254 0x44, /* 010001 */
1255 0x3C, /* 001111 */
1256 0x04, /* 000001 */
1257 0x38, /* 001110 */
1258
1259 /*
1260 * code=104, hex=0x68, ascii="h"
1261 */
1262 0x40, /* 010000 */
1263 0x40, /* 010000 */
1264 0x70, /* 011100 */
1265 0x48, /* 010010 */
1266 0x48, /* 010010 */
1267 0x48, /* 010010 */
1268 0x48, /* 010010 */
1269 0x00, /* 000000 */
1270
1271 /*
1272 * code=105, hex=0x69, ascii="i"
1273 */
1274 0x10, /* 000100 */
1275 0x00, /* 000000 */
1276 0x10, /* 000100 */
1277 0x10, /* 000100 */
1278 0x10, /* 000100 */
1279 0x10, /* 000100 */
1280 0x18, /* 000110 */
1281 0x00, /* 000000 */
1282
1283 /*
1284 * code=106, hex=0x6A, ascii="j"
1285 */
1286 0x08, /* 000010 */
1287 0x00, /* 000000 */
1288 0x18, /* 000110 */
1289 0x08, /* 000010 */
1290 0x08, /* 000010 */
1291 0x08, /* 000010 */
1292 0x48, /* 010010 */
1293 0x30, /* 001100 */
1294
1295 /*
1296 * code=107, hex=0x6B, ascii="k"
1297 */
1298 0x40, /* 010000 */
1299 0x40, /* 010000 */
1300 0x48, /* 010010 */
1301 0x50, /* 010100 */
1302 0x60, /* 011000 */
1303 0x50, /* 010100 */
1304 0x48, /* 010010 */
1305 0x00, /* 000000 */
1306
1307 /*
1308 * code=108, hex=0x6C, ascii="l"
1309 */
1310 0x10, /* 000100 */
1311 0x10, /* 000100 */
1312 0x10, /* 000100 */
1313 0x10, /* 000100 */
1314 0x10, /* 000100 */
1315 0x10, /* 000100 */
1316 0x18, /* 000110 */
1317 0x00, /* 000000 */
1318
1319 /*
1320 * code=109, hex=0x6D, ascii="m"
1321 */
1322 0x00, /* 000000 */
1323 0x00, /* 000000 */
1324 0x68, /* 011010 */
1325 0x54, /* 010101 */
1326 0x54, /* 010101 */
1327 0x44, /* 010001 */
1328 0x44, /* 010001 */
1329 0x00, /* 000000 */
1330
1331 /*
1332 * code=110, hex=0x6E, ascii="n"
1333 */
1334 0x00, /* 000000 */
1335 0x00, /* 000000 */
1336 0x70, /* 011100 */
1337 0x48, /* 010010 */
1338 0x48, /* 010010 */
1339 0x48, /* 010010 */
1340 0x48, /* 010010 */
1341 0x00, /* 000000 */
1342
1343 /*
1344 * code=111, hex=0x6F, ascii="o"
1345 */
1346 0x00, /* 000000 */
1347 0x00, /* 000000 */
1348 0x38, /* 001110 */
1349 0x44, /* 010001 */
1350 0x44, /* 010001 */
1351 0x44, /* 010001 */
1352 0x38, /* 001110 */
1353 0x00, /* 000000 */
1354
1355 /*
1356 * code=112, hex=0x70, ascii="p"
1357 */
1358 0x00, /* 000000 */
1359 0x00, /* 000000 */
1360 0x78, /* 011110 */
1361 0x44, /* 010001 */
1362 0x44, /* 010001 */
1363 0x44, /* 010001 */
1364 0x78, /* 011110 */
1365 0x40, /* 010000 */
1366
1367 /*
1368 * code=113, hex=0x71, ascii="q"
1369 */
1370 0x00, /* 000000 */
1371 0x00, /* 000000 */
1372 0x3C, /* 001111 */
1373 0x44, /* 010001 */
1374 0x44, /* 010001 */
1375 0x44, /* 010001 */
1376 0x3C, /* 001111 */
1377 0x04, /* 000001 */
1378
1379 /*
1380 * code=114, hex=0x72, ascii="r"
1381 */
1382 0x00, /* 000000 */
1383 0x00, /* 000000 */
1384 0x58, /* 010110 */
1385 0x24, /* 001001 */
1386 0x20, /* 001000 */
1387 0x20, /* 001000 */
1388 0x70, /* 011100 */
1389 0x00, /* 000000 */
1390
1391 /*
1392 * code=115, hex=0x73, ascii="s"
1393 */
1394 0x00, /* 000000 */
1395 0x00, /* 000000 */
1396 0x38, /* 001110 */
1397 0x40, /* 010000 */
1398 0x38, /* 001110 */
1399 0x04, /* 000001 */
1400 0x38, /* 001110 */
1401 0x00, /* 000000 */
1402
1403 /*
1404 * code=116, hex=0x74, ascii="t"
1405 */
1406 0x00, /* 000000 */
1407 0x20, /* 001000 */
1408 0x78, /* 011110 */
1409 0x20, /* 001000 */
1410 0x20, /* 001000 */
1411 0x28, /* 001010 */
1412 0x10, /* 000100 */
1413 0x00, /* 000000 */
1414
1415 /*
1416 * code=117, hex=0x75, ascii="u"
1417 */
1418 0x00, /* 000000 */
1419 0x00, /* 000000 */
1420 0x48, /* 010010 */
1421 0x48, /* 010010 */
1422 0x48, /* 010010 */
1423 0x58, /* 010110 */
1424 0x28, /* 001010 */
1425 0x00, /* 000000 */
1426
1427 /*
1428 * code=118, hex=0x76, ascii="v"
1429 */
1430 0x00, /* 000000 */
1431 0x00, /* 000000 */
1432 0x44, /* 010001 */
1433 0x44, /* 010001 */
1434 0x44, /* 010001 */
1435 0x28, /* 001010 */
1436 0x10, /* 000100 */
1437 0x00, /* 000000 */
1438
1439 /*
1440 * code=119, hex=0x77, ascii="w"
1441 */
1442 0x00, /* 000000 */
1443 0x00, /* 000000 */
1444 0x44, /* 010001 */
1445 0x44, /* 010001 */
1446 0x54, /* 010101 */
1447 0x7C, /* 011111 */
1448 0x28, /* 001010 */
1449 0x00, /* 000000 */
1450
1451 /*
1452 * code=120, hex=0x78, ascii="x"
1453 */
1454 0x00, /* 000000 */
1455 0x00, /* 000000 */
1456 0x48, /* 010010 */
1457 0x48, /* 010010 */
1458 0x30, /* 001100 */
1459 0x48, /* 010010 */
1460 0x48, /* 010010 */
1461 0x00, /* 000000 */
1462
1463 /*
1464 * code=121, hex=0x79, ascii="y"
1465 */
1466 0x00, /* 000000 */
1467 0x00, /* 000000 */
1468 0x48, /* 010010 */
1469 0x48, /* 010010 */
1470 0x48, /* 010010 */
1471 0x38, /* 001110 */
1472 0x10, /* 000100 */
1473 0x60, /* 011000 */
1474
1475 /*
1476 * code=122, hex=0x7A, ascii="z"
1477 */
1478 0x00, /* 000000 */
1479 0x00, /* 000000 */
1480 0x78, /* 011110 */
1481 0x08, /* 000010 */
1482 0x30, /* 001100 */
1483 0x40, /* 010000 */
1484 0x78, /* 011110 */
1485 0x00, /* 000000 */
1486
1487 /*
1488 * code=123, hex=0x7B, ascii="{"
1489 */
1490 0x18, /* 000110 */
1491 0x20, /* 001000 */
1492 0x20, /* 001000 */
1493 0x60, /* 011000 */
1494 0x20, /* 001000 */
1495 0x20, /* 001000 */
1496 0x18, /* 000110 */
1497 0x00, /* 000000 */
1498
1499 /*
1500 * code=124, hex=0x7C, ascii="|"
1501 */
1502 0x10, /* 000100 */
1503 0x10, /* 000100 */
1504 0x10, /* 000100 */
1505 0x00, /* 000000 */
1506 0x10, /* 000100 */
1507 0x10, /* 000100 */
1508 0x10, /* 000100 */
1509 0x00, /* 000000 */
1510
1511 /*
1512 * code=125, hex=0x7D, ascii="}"
1513 */
1514 0x30, /* 001100 */
1515 0x08, /* 000010 */
1516 0x08, /* 000010 */
1517 0x0C, /* 000011 */
1518 0x08, /* 000010 */
1519 0x08, /* 000010 */
1520 0x30, /* 001100 */
1521 0x00, /* 000000 */
1522
1523 /*
1524 * code=126, hex=0x7E, ascii="~"
1525 */
1526 0x28, /* 001010 */
1527 0x50, /* 010100 */
1528 0x00, /* 000000 */
1529 0x00, /* 000000 */
1530 0x00, /* 000000 */
1531 0x00, /* 000000 */
1532 0x00, /* 000000 */
1533 0x00, /* 000000 */
1534
1535 // /*
1536 // * code=127, hex=0x7F, ascii="^?"
1537 // */
1538 // 0x10, /* 000100 */
1539 // 0x38, /* 001110 */
1540 // 0x6C, /* 011011 */
1541 // 0x44, /* 010001 */
1542 // 0x44, /* 010001 */
1543 // 0x7C, /* 011111 */
1544 // 0x00, /* 000000 */
1545 // 0x00, /* 000000 */
1546
1547 // /*
1548 // * code=128, hex=0x80, ascii="!^@"
1549 // */
1550 // 0x38, /* 001110 */
1551 // 0x44, /* 010001 */
1552 // 0x40, /* 010000 */
1553 // 0x40, /* 010000 */
1554 // 0x44, /* 010001 */
1555 // 0x38, /* 001110 */
1556 // 0x10, /* 000100 */
1557 // 0x30, /* 001100 */
1558
1559 // /*
1560 // * code=129, hex=0x81, ascii="!^A"
1561 // */
1562 // 0x48, /* 010010 */
1563 // 0x00, /* 000000 */
1564 // 0x48, /* 010010 */
1565 // 0x48, /* 010010 */
1566 // 0x48, /* 010010 */
1567 // 0x58, /* 010110 */
1568 // 0x28, /* 001010 */
1569 // 0x00, /* 000000 */
1570
1571 // /*
1572 // * code=130, hex=0x82, ascii="!^B"
1573 // */
1574 // 0x0C, /* 000011 */
1575 // 0x00, /* 000000 */
1576 // 0x38, /* 001110 */
1577 // 0x44, /* 010001 */
1578 // 0x78, /* 011110 */
1579 // 0x40, /* 010000 */
1580 // 0x38, /* 001110 */
1581 // 0x00, /* 000000 */
1582
1583 // /*
1584 // * code=131, hex=0x83, ascii="!^C"
1585 // */
1586 // 0x38, /* 001110 */
1587 // 0x00, /* 000000 */
1588 // 0x38, /* 001110 */
1589 // 0x04, /* 000001 */
1590 // 0x3C, /* 001111 */
1591 // 0x44, /* 010001 */
1592 // 0x3C, /* 001111 */
1593 // 0x00, /* 000000 */
1594
1595 // /*
1596 // * code=132, hex=0x84, ascii="!^D"
1597 // */
1598 // 0x28, /* 001010 */
1599 // 0x00, /* 000000 */
1600 // 0x38, /* 001110 */
1601 // 0x04, /* 000001 */
1602 // 0x3C, /* 001111 */
1603 // 0x44, /* 010001 */
1604 // 0x3C, /* 001111 */
1605 // 0x00, /* 000000 */
1606
1607 // /*
1608 // * code=133, hex=0x85, ascii="!^E"
1609 // */
1610 // 0x30, /* 001100 */
1611 // 0x00, /* 000000 */
1612 // 0x38, /* 001110 */
1613 // 0x04, /* 000001 */
1614 // 0x3C, /* 001111 */
1615 // 0x44, /* 010001 */
1616 // 0x3C, /* 001111 */
1617 // 0x00, /* 000000 */
1618
1619 // /*
1620 // * code=134, hex=0x86, ascii="!^F"
1621 // */
1622 // 0x38, /* 001110 */
1623 // 0x28, /* 001010 */
1624 // 0x38, /* 001110 */
1625 // 0x04, /* 000001 */
1626 // 0x3C, /* 001111 */
1627 // 0x44, /* 010001 */
1628 // 0x3C, /* 001111 */
1629 // 0x00, /* 000000 */
1630
1631 // /*
1632 // * code=135, hex=0x87, ascii="!^G"
1633 // */
1634 // 0x00, /* 000000 */
1635 // 0x38, /* 001110 */
1636 // 0x44, /* 010001 */
1637 // 0x40, /* 010000 */
1638 // 0x44, /* 010001 */
1639 // 0x38, /* 001110 */
1640 // 0x10, /* 000100 */
1641 // 0x30, /* 001100 */
1642
1643 // /*
1644 // * code=136, hex=0x88, ascii="!^H"
1645 // */
1646 // 0x38, /* 001110 */
1647 // 0x00, /* 000000 */
1648 // 0x38, /* 001110 */
1649 // 0x44, /* 010001 */
1650 // 0x78, /* 011110 */
1651 // 0x40, /* 010000 */
1652 // 0x38, /* 001110 */
1653 // 0x00, /* 000000 */
1654
1655 // /*
1656 // * code=137, hex=0x89, ascii="!^I"
1657 // */
1658 // 0x28, /* 001010 */
1659 // 0x00, /* 000000 */
1660 // 0x38, /* 001110 */
1661 // 0x44, /* 010001 */
1662 // 0x78, /* 011110 */
1663 // 0x40, /* 010000 */
1664 // 0x38, /* 001110 */
1665 // 0x00, /* 000000 */
1666
1667 // /*
1668 // * code=138, hex=0x8A, ascii="!^J"
1669 // */
1670 // 0x30, /* 001100 */
1671 // 0x00, /* 000000 */
1672 // 0x38, /* 001110 */
1673 // 0x44, /* 010001 */
1674 // 0x78, /* 011110 */
1675 // 0x40, /* 010000 */
1676 // 0x38, /* 001110 */
1677 // 0x00, /* 000000 */
1678
1679 // /*
1680 // * code=139, hex=0x8B, ascii="!^K"
1681 // */
1682 // 0x28, /* 001010 */
1683 // 0x00, /* 000000 */
1684 // 0x10, /* 000100 */
1685 // 0x10, /* 000100 */
1686 // 0x10, /* 000100 */
1687 // 0x10, /* 000100 */
1688 // 0x18, /* 000110 */
1689 // 0x00, /* 000000 */
1690
1691 // /*
1692 // * code=140, hex=0x8C, ascii="!^L"
1693 // */
1694 // 0x10, /* 000100 */
1695 // 0x28, /* 001010 */
1696 // 0x00, /* 000000 */
1697 // 0x10, /* 000100 */
1698 // 0x10, /* 000100 */
1699 // 0x10, /* 000100 */
1700 // 0x18, /* 000110 */
1701 // 0x00, /* 000000 */
1702
1703 // /*
1704 // * code=141, hex=0x8D, ascii="!^M"
1705 // */
1706 // 0x20, /* 001000 */
1707 // 0x00, /* 000000 */
1708 // 0x10, /* 000100 */
1709 // 0x10, /* 000100 */
1710 // 0x10, /* 000100 */
1711 // 0x10, /* 000100 */
1712 // 0x18, /* 000110 */
1713 // 0x00, /* 000000 */
1714
1715 // /*
1716 // * code=142, hex=0x8E, ascii="!^N"
1717 // */
1718 // 0x28, /* 001010 */
1719 // 0x00, /* 000000 */
1720 // 0x10, /* 000100 */
1721 // 0x28, /* 001010 */
1722 // 0x44, /* 010001 */
1723 // 0x7C, /* 011111 */
1724 // 0x44, /* 010001 */
1725 // 0x00, /* 000000 */
1726
1727 // /*
1728 // * code=143, hex=0x8F, ascii="!^O"
1729 // */
1730 // 0x38, /* 001110 */
1731 // 0x28, /* 001010 */
1732 // 0x38, /* 001110 */
1733 // 0x6C, /* 011011 */
1734 // 0x44, /* 010001 */
1735 // 0x7C, /* 011111 */
1736 // 0x44, /* 010001 */
1737 // 0x00, /* 000000 */
1738
1739 // /*
1740 // * code=144, hex=0x90, ascii="!^P"
1741 // */
1742 // 0x0C, /* 000011 */
1743 // 0x00, /* 000000 */
1744 // 0x7C, /* 011111 */
1745 // 0x40, /* 010000 */
1746 // 0x78, /* 011110 */
1747 // 0x40, /* 010000 */
1748 // 0x7C, /* 011111 */
1749 // 0x00, /* 000000 */
1750
1751 // /*
1752 // * code=145, hex=0x91, ascii="!^Q"
1753 // */
1754 // 0x00, /* 000000 */
1755 // 0x00, /* 000000 */
1756 // 0x78, /* 011110 */
1757 // 0x14, /* 000101 */
1758 // 0x7C, /* 011111 */
1759 // 0x50, /* 010100 */
1760 // 0x3C, /* 001111 */
1761 // 0x00, /* 000000 */
1762
1763 // /*
1764 // * code=146, hex=0x92, ascii="!^R"
1765 // */
1766 // 0x3C, /* 001111 */
1767 // 0x50, /* 010100 */
1768 // 0x50, /* 010100 */
1769 // 0x7C, /* 011111 */
1770 // 0x50, /* 010100 */
1771 // 0x50, /* 010100 */
1772 // 0x5C, /* 010111 */
1773 // 0x00, /* 000000 */
1774
1775 // /*
1776 // * code=147, hex=0x93, ascii="!^S"
1777 // */
1778 // 0x38, /* 001110 */
1779 // 0x00, /* 000000 */
1780 // 0x30, /* 001100 */
1781 // 0x48, /* 010010 */
1782 // 0x48, /* 010010 */
1783 // 0x48, /* 010010 */
1784 // 0x30, /* 001100 */
1785 // 0x00, /* 000000 */
1786
1787 // /*
1788 // * code=148, hex=0x94, ascii="!^T"
1789 // */
1790 // 0x28, /* 001010 */
1791 // 0x00, /* 000000 */
1792 // 0x30, /* 001100 */
1793 // 0x48, /* 010010 */
1794 // 0x48, /* 010010 */
1795 // 0x48, /* 010010 */
1796 // 0x30, /* 001100 */
1797 // 0x00, /* 000000 */
1798
1799 // /*
1800 // * code=149, hex=0x95, ascii="!^U"
1801 // */
1802 // 0x60, /* 011000 */
1803 // 0x00, /* 000000 */
1804 // 0x30, /* 001100 */
1805 // 0x48, /* 010010 */
1806 // 0x48, /* 010010 */
1807 // 0x48, /* 010010 */
1808 // 0x30, /* 001100 */
1809 // 0x00, /* 000000 */
1810
1811 // /*
1812 // * code=150, hex=0x96, ascii="!^V"
1813 // */
1814 // 0x38, /* 001110 */
1815 // 0x00, /* 000000 */
1816 // 0x48, /* 010010 */
1817 // 0x48, /* 010010 */
1818 // 0x48, /* 010010 */
1819 // 0x58, /* 010110 */
1820 // 0x28, /* 001010 */
1821 // 0x00, /* 000000 */
1822
1823 // /*
1824 // * code=151, hex=0x97, ascii="!^W"
1825 // */
1826 // 0x60, /* 011000 */
1827 // 0x00, /* 000000 */
1828 // 0x48, /* 010010 */
1829 // 0x48, /* 010010 */
1830 // 0x48, /* 010010 */
1831 // 0x58, /* 010110 */
1832 // 0x28, /* 001010 */
1833 // 0x00, /* 000000 */
1834
1835 // /*
1836 // * code=152, hex=0x98, ascii="!^X"
1837 // */
1838 // 0x28, /* 001010 */
1839 // 0x00, /* 000000 */
1840 // 0x48, /* 010010 */
1841 // 0x48, /* 010010 */
1842 // 0x48, /* 010010 */
1843 // 0x38, /* 001110 */
1844 // 0x10, /* 000100 */
1845 // 0x60, /* 011000 */
1846
1847 // /*
1848 // * code=153, hex=0x99, ascii="!^Y"
1849 // */
1850 // 0x48, /* 010010 */
1851 // 0x30, /* 001100 */
1852 // 0x48, /* 010010 */
1853 // 0x48, /* 010010 */
1854 // 0x48, /* 010010 */
1855 // 0x48, /* 010010 */
1856 // 0x30, /* 001100 */
1857 // 0x00, /* 000000 */
1858
1859 // /*
1860 // * code=154, hex=0x9A, ascii="!^Z"
1861 // */
1862 // 0x28, /* 001010 */
1863 // 0x00, /* 000000 */
1864 // 0x48, /* 010010 */
1865 // 0x48, /* 010010 */
1866 // 0x48, /* 010010 */
1867 // 0x48, /* 010010 */
1868 // 0x30, /* 001100 */
1869 // 0x00, /* 000000 */
1870
1871 // /*
1872 // * code=155, hex=0x9B, ascii="!^["
1873 // */
1874 // 0x00, /* 000000 */
1875 // 0x10, /* 000100 */
1876 // 0x38, /* 001110 */
1877 // 0x40, /* 010000 */
1878 // 0x40, /* 010000 */
1879 // 0x38, /* 001110 */
1880 // 0x10, /* 000100 */
1881 // 0x00, /* 000000 */
1882
1883 // /*
1884 // * code=156, hex=0x9C, ascii="!^\"
1885 // */
1886 // 0x18, /* 000110 */
1887 // 0x24, /* 001001 */
1888 // 0x20, /* 001000 */
1889 // 0x78, /* 011110 */
1890 // 0x20, /* 001000 */
1891 // 0x24, /* 001001 */
1892 // 0x5C, /* 010111 */
1893 // 0x00, /* 000000 */
1894
1895 // /*
1896 // * code=157, hex=0x9D, ascii="!^]"
1897 // */
1898 // 0x44, /* 010001 */
1899 // 0x28, /* 001010 */
1900 // 0x10, /* 000100 */
1901 // 0x7C, /* 011111 */
1902 // 0x10, /* 000100 */
1903 // 0x7C, /* 011111 */
1904 // 0x10, /* 000100 */
1905 // 0x00, /* 000000 */
1906
1907 // /*
1908 // * code=158, hex=0x9E, ascii="!^^"
1909 // */
1910 // 0x60, /* 011000 */
1911 // 0x50, /* 010100 */
1912 // 0x50, /* 010100 */
1913 // 0x68, /* 011010 */
1914 // 0x5C, /* 010111 */
1915 // 0x48, /* 010010 */
1916 // 0x48, /* 010010 */
1917 // 0x00, /* 000000 */
1918
1919 // /*
1920 // * code=159, hex=0x9F, ascii="!^_"
1921 // */
1922 // 0x08, /* 000010 */
1923 // 0x14, /* 000101 */
1924 // 0x10, /* 000100 */
1925 // 0x38, /* 001110 */
1926 // 0x10, /* 000100 */
1927 // 0x10, /* 000100 */
1928 // 0x50, /* 010100 */
1929 // 0x20, /* 001000 */
1930
1931 // /*
1932 // * code=160, hex=0xA0, ascii="! "
1933 // */
1934 // 0x18, /* 000110 */
1935 // 0x00, /* 000000 */
1936 // 0x38, /* 001110 */
1937 // 0x04, /* 000001 */
1938 // 0x3C, /* 001111 */
1939 // 0x44, /* 010001 */
1940 // 0x3C, /* 001111 */
1941 // 0x00, /* 000000 */
1942
1943 // /*
1944 // * code=161, hex=0xA1, ascii="!!"
1945 // */
1946 // 0x18, /* 000110 */
1947 // 0x00, /* 000000 */
1948 // 0x10, /* 000100 */
1949 // 0x10, /* 000100 */
1950 // 0x10, /* 000100 */
1951 // 0x10, /* 000100 */
1952 // 0x18, /* 000110 */
1953 // 0x00, /* 000000 */
1954
1955 // /*
1956 // * code=162, hex=0xA2, ascii="!""
1957 // */
1958 // 0x18, /* 000110 */
1959 // 0x00, /* 000000 */
1960 // 0x30, /* 001100 */
1961 // 0x48, /* 010010 */
1962 // 0x48, /* 010010 */
1963 // 0x48, /* 010010 */
1964 // 0x30, /* 001100 */
1965 // 0x00, /* 000000 */
1966
1967 // /*
1968 // * code=163, hex=0xA3, ascii="!#"
1969 // */
1970 // 0x18, /* 000110 */
1971 // 0x00, /* 000000 */
1972 // 0x48, /* 010010 */
1973 // 0x48, /* 010010 */
1974 // 0x48, /* 010010 */
1975 // 0x58, /* 010110 */
1976 // 0x28, /* 001010 */
1977 // 0x00, /* 000000 */
1978
1979 // /*
1980 // * code=164, hex=0xA4, ascii="!$"
1981 // */
1982 // 0x28, /* 001010 */
1983 // 0x50, /* 010100 */
1984 // 0x00, /* 000000 */
1985 // 0x70, /* 011100 */
1986 // 0x48, /* 010010 */
1987 // 0x48, /* 010010 */
1988 // 0x48, /* 010010 */
1989 // 0x00, /* 000000 */
1990
1991 // /*
1992 // * code=165, hex=0xA5, ascii="!%"
1993 // */
1994 // 0x28, /* 001010 */
1995 // 0x50, /* 010100 */
1996 // 0x00, /* 000000 */
1997 // 0x48, /* 010010 */
1998 // 0x68, /* 011010 */
1999 // 0x58, /* 010110 */
2000 // 0x48, /* 010010 */
2001 // 0x00, /* 000000 */
2002
2003 // /*
2004 // * code=166, hex=0xA6, ascii="!&"
2005 // */
2006 // 0x38, /* 001110 */
2007 // 0x04, /* 000001 */
2008 // 0x3C, /* 001111 */
2009 // 0x44, /* 010001 */
2010 // 0x3C, /* 001111 */
2011 // 0x00, /* 000000 */
2012 // 0x3C, /* 001111 */
2013 // 0x00, /* 000000 */
2014
2015 // /*
2016 // * code=167, hex=0xA7, ascii="!'"
2017 // */
2018 // 0x30, /* 001100 */
2019 // 0x48, /* 010010 */
2020 // 0x48, /* 010010 */
2021 // 0x48, /* 010010 */
2022 // 0x30, /* 001100 */
2023 // 0x00, /* 000000 */
2024 // 0x78, /* 011110 */
2025 // 0x00, /* 000000 */
2026
2027 // /*
2028 // * code=168, hex=0xA8, ascii="!("
2029 // */
2030 // 0x10, /* 000100 */
2031 // 0x00, /* 000000 */
2032 // 0x10, /* 000100 */
2033 // 0x30, /* 001100 */
2034 // 0x40, /* 010000 */
2035 // 0x44, /* 010001 */
2036 // 0x38, /* 001110 */
2037 // 0x00, /* 000000 */
2038
2039 // /*
2040 // * code=169, hex=0xA9, ascii="!)"
2041 // */
2042 // 0x00, /* 000000 */
2043 // 0x00, /* 000000 */
2044 // 0x7C, /* 011111 */
2045 // 0x40, /* 010000 */
2046 // 0x40, /* 010000 */
2047 // 0x40, /* 010000 */
2048 // 0x00, /* 000000 */
2049 // 0x00, /* 000000 */
2050
2051 // /*
2052 // * code=170, hex=0xAA, ascii="!*"
2053 // */
2054 // 0x00, /* 000000 */
2055 // 0x00, /* 000000 */
2056 // 0xFC, /* 111111 */
2057 // 0x04, /* 000001 */
2058 // 0x04, /* 000001 */
2059 // 0x00, /* 000000 */
2060 // 0x00, /* 000000 */
2061 // 0x00, /* 000000 */
2062
2063 // /*
2064 // * code=171, hex=0xAB, ascii="!+"
2065 // */
2066 // 0x40, /* 010000 */
2067 // 0x48, /* 010010 */
2068 // 0x50, /* 010100 */
2069 // 0x38, /* 001110 */
2070 // 0x44, /* 010001 */
2071 // 0x08, /* 000010 */
2072 // 0x1C, /* 000111 */
2073 // 0x00, /* 000000 */
2074
2075 // /*
2076 // * code=172, hex=0xAC, ascii="!,"
2077 // */
2078 // 0x40, /* 010000 */
2079 // 0x48, /* 010010 */
2080 // 0x50, /* 010100 */
2081 // 0x2C, /* 001011 */
2082 // 0x54, /* 010101 */
2083 // 0x1C, /* 000111 */
2084 // 0x04, /* 000001 */
2085 // 0x00, /* 000000 */
2086
2087 // /*
2088 // * code=173, hex=0xAD, ascii="!-"
2089 // */
2090 // 0x10, /* 000100 */
2091 // 0x00, /* 000000 */
2092 // 0x10, /* 000100 */
2093 // 0x10, /* 000100 */
2094 // 0x38, /* 001110 */
2095 // 0x38, /* 001110 */
2096 // 0x10, /* 000100 */
2097 // 0x00, /* 000000 */
2098
2099 // /*
2100 // * code=174, hex=0xAE, ascii="!."
2101 // */
2102 // 0x00, /* 000000 */
2103 // 0x00, /* 000000 */
2104 // 0x24, /* 001001 */
2105 // 0x48, /* 010010 */
2106 // 0x24, /* 001001 */
2107 // 0x00, /* 000000 */
2108 // 0x00, /* 000000 */
2109 // 0x00, /* 000000 */
2110
2111 // /*
2112 // * code=175, hex=0xAF, ascii="!/"
2113 // */
2114 // 0x00, /* 000000 */
2115 // 0x00, /* 000000 */
2116 // 0x48, /* 010010 */
2117 // 0x24, /* 001001 */
2118 // 0x48, /* 010010 */
2119 // 0x00, /* 000000 */
2120 // 0x00, /* 000000 */
2121 // 0x00, /* 000000 */
2122
2123 // /*
2124 // * code=176, hex=0xB0, ascii="!0"
2125 // */
2126 // 0x54, /* 010101 */
2127 // 0x00, /* 000000 */
2128 // 0xA8, /* 101010 */
2129 // 0x00, /* 000000 */
2130 // 0x54, /* 010101 */
2131 // 0x00, /* 000000 */
2132 // 0xA8, /* 101010 */
2133 // 0x00, /* 000000 */
2134
2135 // /*
2136 // * code=177, hex=0xB1, ascii="!1"
2137 // */
2138 // 0x54, /* 010101 */
2139 // 0xA8, /* 101010 */
2140 // 0x54, /* 010101 */
2141 // 0xA8, /* 101010 */
2142 // 0x54, /* 010101 */
2143 // 0xA8, /* 101010 */
2144 // 0x54, /* 010101 */
2145 // 0xA8, /* 101010 */
2146
2147 // /*
2148 // * code=178, hex=0xB2, ascii="!2"
2149 // */
2150 // 0xA8, /* 101010 */
2151 // 0xFC, /* 111111 */
2152 // 0x54, /* 010101 */
2153 // 0xFC, /* 111111 */
2154 // 0xA8, /* 101010 */
2155 // 0xFC, /* 111111 */
2156 // 0x54, /* 010101 */
2157 // 0xFC, /* 111111 */
2158
2159 // /*
2160 // * code=179, hex=0xB3, ascii="!3"
2161 // */
2162 // 0x10, /* 000100 */
2163 // 0x10, /* 000100 */
2164 // 0x10, /* 000100 */
2165 // 0x10, /* 000100 */
2166 // 0x10, /* 000100 */
2167 // 0x10, /* 000100 */
2168 // 0x10, /* 000100 */
2169 // 0x10, /* 000100 */
2170
2171 // /*
2172 // * code=180, hex=0xB4, ascii="!4"
2173 // */
2174 // 0x10, /* 000100 */
2175 // 0x10, /* 000100 */
2176 // 0x10, /* 000100 */
2177 // 0xF0, /* 111100 */
2178 // 0x10, /* 000100 */
2179 // 0x10, /* 000100 */
2180 // 0x10, /* 000100 */
2181 // 0x10, /* 000100 */
2182
2183 // /*
2184 // * code=181, hex=0xB5, ascii="!5"
2185 // */
2186 // 0x10, /* 000100 */
2187 // 0xF0, /* 111100 */
2188 // 0x10, /* 000100 */
2189 // 0xF0, /* 111100 */
2190 // 0x10, /* 000100 */
2191 // 0x10, /* 000100 */
2192 // 0x10, /* 000100 */
2193 // 0x10, /* 000100 */
2194
2195 // /*
2196 // * code=182, hex=0xB6, ascii="!6"
2197 // */
2198 // 0x50, /* 010100 */
2199 // 0x50, /* 010100 */
2200 // 0x50, /* 010100 */
2201 // 0xD0, /* 110100 */
2202 // 0x50, /* 010100 */
2203 // 0x50, /* 010100 */
2204 // 0x50, /* 010100 */
2205 // 0x50, /* 010100 */
2206
2207 // /*
2208 // * code=183, hex=0xB7, ascii="!7"
2209 // */
2210 // 0x00, /* 000000 */
2211 // 0x00, /* 000000 */
2212 // 0x00, /* 000000 */
2213 // 0xF0, /* 111100 */
2214 // 0x50, /* 010100 */
2215 // 0x50, /* 010100 */
2216 // 0x50, /* 010100 */
2217 // 0x50, /* 010100 */
2218
2219 // /*
2220 // * code=184, hex=0xB8, ascii="!8"
2221 // */
2222 // 0x00, /* 000000 */
2223 // 0xF0, /* 111100 */
2224 // 0x10, /* 000100 */
2225 // 0xF0, /* 111100 */
2226 // 0x10, /* 000100 */
2227 // 0x10, /* 000100 */
2228 // 0x10, /* 000100 */
2229 // 0x10, /* 000100 */
2230
2231 // /*
2232 // * code=185, hex=0xB9, ascii="!9"
2233 // */
2234 // 0x50, /* 010100 */
2235 // 0xD0, /* 110100 */
2236 // 0x10, /* 000100 */
2237 // 0xD0, /* 110100 */
2238 // 0x50, /* 010100 */
2239 // 0x50, /* 010100 */
2240 // 0x50, /* 010100 */
2241 // 0x50, /* 010100 */
2242
2243 // /*
2244 // * code=186, hex=0xBA, ascii="!:"
2245 // */
2246 // 0x50, /* 010100 */
2247 // 0x50, /* 010100 */
2248 // 0x50, /* 010100 */
2249 // 0x50, /* 010100 */
2250 // 0x50, /* 010100 */
2251 // 0x50, /* 010100 */
2252 // 0x50, /* 010100 */
2253 // 0x50, /* 010100 */
2254
2255 // /*
2256 // * code=187, hex=0xBB, ascii="!;"
2257 // */
2258 // 0x00, /* 000000 */
2259 // 0xF0, /* 111100 */
2260 // 0x10, /* 000100 */
2261 // 0xD0, /* 110100 */
2262 // 0x50, /* 010100 */
2263 // 0x50, /* 010100 */
2264 // 0x50, /* 010100 */
2265 // 0x50, /* 010100 */
2266
2267 // /*
2268 // * code=188, hex=0xBC, ascii="!<"
2269 // */
2270 // 0x50, /* 010100 */
2271 // 0xD0, /* 110100 */
2272 // 0x10, /* 000100 */
2273 // 0xF0, /* 111100 */
2274 // 0x00, /* 000000 */
2275 // 0x00, /* 000000 */
2276 // 0x00, /* 000000 */
2277 // 0x00, /* 000000 */
2278
2279 // /*
2280 // * code=189, hex=0xBD, ascii="!="
2281 // */
2282 // 0x50, /* 010100 */
2283 // 0x50, /* 010100 */
2284 // 0x50, /* 010100 */
2285 // 0xF0, /* 111100 */
2286 // 0x00, /* 000000 */
2287 // 0x00, /* 000000 */
2288 // 0x00, /* 000000 */
2289 // 0x00, /* 000000 */
2290
2291 // /*
2292 // * code=190, hex=0xBE, ascii="!>"
2293 // */
2294 // 0x10, /* 000100 */
2295 // 0xF0, /* 111100 */
2296 // 0x10, /* 000100 */
2297 // 0xF0, /* 111100 */
2298 // 0x00, /* 000000 */
2299 // 0x00, /* 000000 */
2300 // 0x00, /* 000000 */
2301 // 0x00, /* 000000 */
2302
2303 // /*
2304 // * code=191, hex=0xBF, ascii="!?"
2305 // */
2306 // 0x00, /* 000000 */
2307 // 0x00, /* 000000 */
2308 // 0x00, /* 000000 */
2309 // 0xF0, /* 111100 */
2310 // 0x10, /* 000100 */
2311 // 0x10, /* 000100 */
2312 // 0x10, /* 000100 */
2313 // 0x10, /* 000100 */
2314
2315 // /*
2316 // * code=192, hex=0xC0, ascii="!@"
2317 // */
2318 // 0x10, /* 000100 */
2319 // 0x10, /* 000100 */
2320 // 0x10, /* 000100 */
2321 // 0x1C, /* 000111 */
2322 // 0x00, /* 000000 */
2323 // 0x00, /* 000000 */
2324 // 0x00, /* 000000 */
2325 // 0x00, /* 000000 */
2326
2327 // /*
2328 // * code=193, hex=0xC1, ascii="!A"
2329 // */
2330 // 0x10, /* 000100 */
2331 // 0x10, /* 000100 */
2332 // 0x10, /* 000100 */
2333 // 0xFC, /* 111111 */
2334 // 0x00, /* 000000 */
2335 // 0x00, /* 000000 */
2336 // 0x00, /* 000000 */
2337 // 0x00, /* 000000 */
2338
2339 // /*
2340 // * code=194, hex=0xC2, ascii="!B"
2341 // */
2342 // 0x00, /* 000000 */
2343 // 0x00, /* 000000 */
2344 // 0x00, /* 000000 */
2345 // 0xFC, /* 111111 */
2346 // 0x10, /* 000100 */
2347 // 0x10, /* 000100 */
2348 // 0x10, /* 000100 */
2349 // 0x10, /* 000100 */
2350
2351 // /*
2352 // * code=195, hex=0xC3, ascii="!C"
2353 // */
2354 // 0x10, /* 000100 */
2355 // 0x10, /* 000100 */
2356 // 0x10, /* 000100 */
2357 // 0x1C, /* 000111 */
2358 // 0x10, /* 000100 */
2359 // 0x10, /* 000100 */
2360 // 0x10, /* 000100 */
2361 // 0x10, /* 000100 */
2362
2363 // /*
2364 // * code=196, hex=0xC4, ascii="!D"
2365 // */
2366 // 0x00, /* 000000 */
2367 // 0x00, /* 000000 */
2368 // 0x00, /* 000000 */
2369 // 0xFC, /* 111111 */
2370 // 0x00, /* 000000 */
2371 // 0x00, /* 000000 */
2372 // 0x00, /* 000000 */
2373 // 0x00, /* 000000 */
2374
2375 // /*
2376 // * code=197, hex=0xC5, ascii="!E"
2377 // */
2378 // 0x10, /* 000100 */
2379 // 0x10, /* 000100 */
2380 // 0x10, /* 000100 */
2381 // 0xFC, /* 111111 */
2382 // 0x10, /* 000100 */
2383 // 0x10, /* 000100 */
2384 // 0x10, /* 000100 */
2385 // 0x10, /* 000100 */
2386
2387 // /*
2388 // * code=198, hex=0xC6, ascii="!F"
2389 // */
2390 // 0x10, /* 000100 */
2391 // 0x1C, /* 000111 */
2392 // 0x10, /* 000100 */
2393 // 0x1C, /* 000111 */
2394 // 0x10, /* 000100 */
2395 // 0x10, /* 000100 */
2396 // 0x10, /* 000100 */
2397 // 0x10, /* 000100 */
2398
2399 // /*
2400 // * code=199, hex=0xC7, ascii="!G"
2401 // */
2402 // 0x50, /* 010100 */
2403 // 0x50, /* 010100 */
2404 // 0x50, /* 010100 */
2405 // 0x5C, /* 010111 */
2406 // 0x50, /* 010100 */
2407 // 0x50, /* 010100 */
2408 // 0x50, /* 010100 */
2409 // 0x50, /* 010100 */
2410
2411 // /*
2412 // * code=200, hex=0xC8, ascii="!H"
2413 // */
2414 // 0x50, /* 010100 */
2415 // 0x5C, /* 010111 */
2416 // 0x40, /* 010000 */
2417 // 0x7C, /* 011111 */
2418 // 0x00, /* 000000 */
2419 // 0x00, /* 000000 */
2420 // 0x00, /* 000000 */
2421 // 0x00, /* 000000 */
2422
2423 // /*
2424 // * code=201, hex=0xC9, ascii="!I"
2425 // */
2426 // 0x00, /* 000000 */
2427 // 0x7C, /* 011111 */
2428 // 0x40, /* 010000 */
2429 // 0x5C, /* 010111 */
2430 // 0x50, /* 010100 */
2431 // 0x50, /* 010100 */
2432 // 0x50, /* 010100 */
2433 // 0x50, /* 010100 */
2434
2435 // /*
2436 // * code=202, hex=0xCA, ascii="!J"
2437 // */
2438 // 0x50, /* 010100 */
2439 // 0xDC, /* 110111 */
2440 // 0x00, /* 000000 */
2441 // 0xFC, /* 111111 */
2442 // 0x00, /* 000000 */
2443 // 0x00, /* 000000 */
2444 // 0x00, /* 000000 */
2445 // 0x00, /* 000000 */
2446
2447 // /*
2448 // * code=203, hex=0xCB, ascii="!K"
2449 // */
2450 // 0x00, /* 000000 */
2451 // 0xFC, /* 111111 */
2452 // 0x00, /* 000000 */
2453 // 0xDC, /* 110111 */
2454 // 0x50, /* 010100 */
2455 // 0x50, /* 010100 */
2456 // 0x50, /* 010100 */
2457 // 0x50, /* 010100 */
2458
2459 // /*
2460 // * code=204, hex=0xCC, ascii="!L"
2461 // */
2462 // 0x50, /* 010100 */
2463 // 0x5C, /* 010111 */
2464 // 0x40, /* 010000 */
2465 // 0x5C, /* 010111 */
2466 // 0x50, /* 010100 */
2467 // 0x50, /* 010100 */
2468 // 0x50, /* 010100 */
2469 // 0x50, /* 010100 */
2470
2471 // /*
2472 // * code=205, hex=0xCD, ascii="!M"
2473 // */
2474 // 0x00, /* 000000 */
2475 // 0xFC, /* 111111 */
2476 // 0x00, /* 000000 */
2477 // 0xFC, /* 111111 */
2478 // 0x00, /* 000000 */
2479 // 0x00, /* 000000 */
2480 // 0x00, /* 000000 */
2481 // 0x00, /* 000000 */
2482
2483 // /*
2484 // * code=206, hex=0xCE, ascii="!N"
2485 // */
2486 // 0x50, /* 010100 */
2487 // 0xDC, /* 110111 */
2488 // 0x00, /* 000000 */
2489 // 0xDC, /* 110111 */
2490 // 0x50, /* 010100 */
2491 // 0x50, /* 010100 */
2492 // 0x50, /* 010100 */
2493 // 0x50, /* 010100 */
2494
2495 // /*
2496 // * code=207, hex=0xCF, ascii="!O"
2497 // */
2498 // 0x10, /* 000100 */
2499 // 0xFC, /* 111111 */
2500 // 0x00, /* 000000 */
2501 // 0xFC, /* 111111 */
2502 // 0x00, /* 000000 */
2503 // 0x00, /* 000000 */
2504 // 0x00, /* 000000 */
2505 // 0x00, /* 000000 */
2506
2507 // /*
2508 // * code=208, hex=0xD0, ascii="!P"
2509 // */
2510 // 0x50, /* 010100 */
2511 // 0x50, /* 010100 */
2512 // 0x50, /* 010100 */
2513 // 0xFC, /* 111111 */
2514 // 0x00, /* 000000 */
2515 // 0x00, /* 000000 */
2516 // 0x00, /* 000000 */
2517 // 0x00, /* 000000 */
2518
2519 // /*
2520 // * code=209, hex=0xD1, ascii="!Q"
2521 // */
2522 // 0x00, /* 000000 */
2523 // 0xFC, /* 111111 */
2524 // 0x00, /* 000000 */
2525 // 0xFC, /* 111111 */
2526 // 0x10, /* 000100 */
2527 // 0x10, /* 000100 */
2528 // 0x10, /* 000100 */
2529 // 0x10, /* 000100 */
2530
2531 // /*
2532 // * code=210, hex=0xD2, ascii="!R"
2533 // */
2534 // 0x00, /* 000000 */
2535 // 0x00, /* 000000 */
2536 // 0x00, /* 000000 */
2537 // 0xFC, /* 111111 */
2538 // 0x50, /* 010100 */
2539 // 0x50, /* 010100 */
2540 // 0x50, /* 010100 */
2541 // 0x50, /* 010100 */
2542
2543 // /*
2544 // * code=211, hex=0xD3, ascii="!S"
2545 // */
2546 // 0x50, /* 010100 */
2547 // 0x50, /* 010100 */
2548 // 0x50, /* 010100 */
2549 // 0x7C, /* 011111 */
2550 // 0x00, /* 000000 */
2551 // 0x00, /* 000000 */
2552 // 0x00, /* 000000 */
2553 // 0x00, /* 000000 */
2554
2555 // /*
2556 // * code=212, hex=0xD4, ascii="!T"
2557 // */
2558 // 0x10, /* 000100 */
2559 // 0x1C, /* 000111 */
2560 // 0x10, /* 000100 */
2561 // 0x1C, /* 000111 */
2562 // 0x00, /* 000000 */
2563 // 0x00, /* 000000 */
2564 // 0x00, /* 000000 */
2565 // 0x00, /* 000000 */
2566
2567 // /*
2568 // * code=213, hex=0xD5, ascii="!U"
2569 // */
2570 // 0x00, /* 000000 */
2571 // 0x1C, /* 000111 */
2572 // 0x10, /* 000100 */
2573 // 0x1C, /* 000111 */
2574 // 0x10, /* 000100 */
2575 // 0x10, /* 000100 */
2576 // 0x10, /* 000100 */
2577 // 0x10, /* 000100 */
2578
2579 // /*
2580 // * code=214, hex=0xD6, ascii="!V"
2581 // */
2582 // 0x00, /* 000000 */
2583 // 0x00, /* 000000 */
2584 // 0x00, /* 000000 */
2585 // 0x7C, /* 011111 */
2586 // 0x50, /* 010100 */
2587 // 0x50, /* 010100 */
2588 // 0x50, /* 010100 */
2589 // 0x50, /* 010100 */
2590
2591 // /*
2592 // * code=215, hex=0xD7, ascii="!W"
2593 // */
2594 // 0x50, /* 010100 */
2595 // 0x50, /* 010100 */
2596 // 0x50, /* 010100 */
2597 // 0xDC, /* 110111 */
2598 // 0x50, /* 010100 */
2599 // 0x50, /* 010100 */
2600 // 0x50, /* 010100 */
2601 // 0x50, /* 010100 */
2602
2603 // /*
2604 // * code=216, hex=0xD8, ascii="!X"
2605 // */
2606 // 0x10, /* 000100 */
2607 // 0xFC, /* 111111 */
2608 // 0x00, /* 000000 */
2609 // 0xFC, /* 111111 */
2610 // 0x10, /* 000100 */
2611 // 0x10, /* 000100 */
2612 // 0x10, /* 000100 */
2613 // 0x10, /* 000100 */
2614
2615 // /*
2616 // * code=217, hex=0xD9, ascii="!Y"
2617 // */
2618 // 0x10, /* 000100 */
2619 // 0x10, /* 000100 */
2620 // 0x10, /* 000100 */
2621 // 0xF0, /* 111100 */
2622 // 0x00, /* 000000 */
2623 // 0x00, /* 000000 */
2624 // 0x00, /* 000000 */
2625 // 0x00, /* 000000 */
2626
2627 // /*
2628 // * code=218, hex=0xDA, ascii="!Z"
2629 // */
2630 // 0x00, /* 000000 */
2631 // 0x00, /* 000000 */
2632 // 0x00, /* 000000 */
2633 // 0x1C, /* 000111 */
2634 // 0x10, /* 000100 */
2635 // 0x10, /* 000100 */
2636 // 0x10, /* 000100 */
2637 // 0x10, /* 000100 */
2638
2639 // /*
2640 // * code=219, hex=0xDB, ascii="!["
2641 // */
2642 // 0xFC, /* 111111 */
2643 // 0xFC, /* 111111 */
2644 // 0xFC, /* 111111 */
2645 // 0xFC, /* 111111 */
2646 // 0xFC, /* 111111 */
2647 // 0xFC, /* 111111 */
2648 // 0xFC, /* 111111 */
2649 // 0xFC, /* 111111 */
2650
2651 // /*
2652 // * code=220, hex=0xDC, ascii="!\"
2653 // */
2654 // 0x00, /* 000000 */
2655 // 0x00, /* 000000 */
2656 // 0x00, /* 000000 */
2657 // 0x00, /* 000000 */
2658 // 0xFC, /* 111111 */
2659 // 0xFC, /* 111111 */
2660 // 0xFC, /* 111111 */
2661 // 0xFC, /* 111111 */
2662
2663 // /*
2664 // * code=221, hex=0xDD, ascii="!]"
2665 // */
2666 // 0xE0, /* 111000 */
2667 // 0xE0, /* 111000 */
2668 // 0xE0, /* 111000 */
2669 // 0xE0, /* 111000 */
2670 // 0xE0, /* 111000 */
2671 // 0xE0, /* 111000 */
2672 // 0xE0, /* 111000 */
2673 // 0xE0, /* 111000 */
2674
2675 // /*
2676 // * code=222, hex=0xDE, ascii="!^"
2677 // */
2678 // 0x1C, /* 000111 */
2679 // 0x1C, /* 000111 */
2680 // 0x1C, /* 000111 */
2681 // 0x1C, /* 000111 */
2682 // 0x1C, /* 000111 */
2683 // 0x1C, /* 000111 */
2684 // 0x1C, /* 000111 */
2685 // 0x1C, /* 000111 */
2686
2687 // /*
2688 // * code=223, hex=0xDF, ascii="!_"
2689 // */
2690 // 0xFC, /* 111111 */
2691 // 0xFC, /* 111111 */
2692 // 0xFC, /* 111111 */
2693 // 0xFC, /* 111111 */
2694 // 0x00, /* 000000 */
2695 // 0x00, /* 000000 */
2696 // 0x00, /* 000000 */
2697 // 0x00, /* 000000 */
2698
2699 // /*
2700 // * code=224, hex=0xE0, ascii="!`"
2701 // */
2702 // 0x00, /* 000000 */
2703 // 0x00, /* 000000 */
2704 // 0x34, /* 001101 */
2705 // 0x48, /* 010010 */
2706 // 0x48, /* 010010 */
2707 // 0x34, /* 001101 */
2708 // 0x00, /* 000000 */
2709 // 0x00, /* 000000 */
2710
2711 // /*
2712 // * code=225, hex=0xE1, ascii="!a"
2713 // */
2714 // 0x00, /* 000000 */
2715 // 0x70, /* 011100 */
2716 // 0x48, /* 010010 */
2717 // 0x70, /* 011100 */
2718 // 0x48, /* 010010 */
2719 // 0x48, /* 010010 */
2720 // 0x70, /* 011100 */
2721 // 0x40, /* 010000 */
2722
2723 // /*
2724 // * code=226, hex=0xE2, ascii="!b"
2725 // */
2726 // 0x78, /* 011110 */
2727 // 0x48, /* 010010 */
2728 // 0x40, /* 010000 */
2729 // 0x40, /* 010000 */
2730 // 0x40, /* 010000 */
2731 // 0x40, /* 010000 */
2732 // 0x40, /* 010000 */
2733 // 0x00, /* 000000 */
2734
2735 // /*
2736 // * code=227, hex=0xE3, ascii="!c"
2737 // */
2738 // 0x00, /* 000000 */
2739 // 0x7C, /* 011111 */
2740 // 0x28, /* 001010 */
2741 // 0x28, /* 001010 */
2742 // 0x28, /* 001010 */
2743 // 0x28, /* 001010 */
2744 // 0x28, /* 001010 */
2745 // 0x00, /* 000000 */
2746
2747 // /*
2748 // * code=228, hex=0xE4, ascii="!d"
2749 // */
2750 // 0x78, /* 011110 */
2751 // 0x48, /* 010010 */
2752 // 0x20, /* 001000 */
2753 // 0x10, /* 000100 */
2754 // 0x20, /* 001000 */
2755 // 0x48, /* 010010 */
2756 // 0x78, /* 011110 */
2757 // 0x00, /* 000000 */
2758
2759 // /*
2760 // * code=229, hex=0xE5, ascii="!e"
2761 // */
2762 // 0x00, /* 000000 */
2763 // 0x00, /* 000000 */
2764 // 0x3C, /* 001111 */
2765 // 0x48, /* 010010 */
2766 // 0x48, /* 010010 */
2767 // 0x30, /* 001100 */
2768 // 0x00, /* 000000 */
2769 // 0x00, /* 000000 */
2770
2771 // /*
2772 // * code=230, hex=0xE6, ascii="!f"
2773 // */
2774 // 0x00, /* 000000 */
2775 // 0x00, /* 000000 */
2776 // 0x48, /* 010010 */
2777 // 0x48, /* 010010 */
2778 // 0x48, /* 010010 */
2779 // 0x70, /* 011100 */
2780 // 0x40, /* 010000 */
2781 // 0x40, /* 010000 */
2782
2783 // /*
2784 // * code=231, hex=0xE7, ascii="!g"
2785 // */
2786 // 0x00, /* 000000 */
2787 // 0x00, /* 000000 */
2788 // 0x28, /* 001010 */
2789 // 0x50, /* 010100 */
2790 // 0x10, /* 000100 */
2791 // 0x10, /* 000100 */
2792 // 0x10, /* 000100 */
2793 // 0x00, /* 000000 */
2794
2795 // /*
2796 // * code=232, hex=0xE8, ascii="!h"
2797 // */
2798 // 0x38, /* 001110 */
2799 // 0x10, /* 000100 */
2800 // 0x38, /* 001110 */
2801 // 0x44, /* 010001 */
2802 // 0x38, /* 001110 */
2803 // 0x10, /* 000100 */
2804 // 0x38, /* 001110 */
2805 // 0x00, /* 000000 */
2806
2807 // /*
2808 // * code=233, hex=0xE9, ascii="!i"
2809 // */
2810 // 0x30, /* 001100 */
2811 // 0x48, /* 010010 */
2812 // 0x48, /* 010010 */
2813 // 0x78, /* 011110 */
2814 // 0x48, /* 010010 */
2815 // 0x48, /* 010010 */
2816 // 0x30, /* 001100 */
2817 // 0x00, /* 000000 */
2818
2819 // /*
2820 // * code=234, hex=0xEA, ascii="!j"
2821 // */
2822 // 0x00, /* 000000 */
2823 // 0x38, /* 001110 */
2824 // 0x44, /* 010001 */
2825 // 0x44, /* 010001 */
2826 // 0x28, /* 001010 */
2827 // 0x28, /* 001010 */
2828 // 0x6C, /* 011011 */
2829 // 0x00, /* 000000 */
2830
2831 // /*
2832 // * code=235, hex=0xEB, ascii="!k"
2833 // */
2834 // 0x30, /* 001100 */
2835 // 0x40, /* 010000 */
2836 // 0x20, /* 001000 */
2837 // 0x10, /* 000100 */
2838 // 0x38, /* 001110 */
2839 // 0x48, /* 010010 */
2840 // 0x30, /* 001100 */
2841 // 0x00, /* 000000 */
2842
2843 // /*
2844 // * code=236, hex=0xEC, ascii="!l"
2845 // */
2846 // 0x00, /* 000000 */
2847 // 0x00, /* 000000 */
2848 // 0x28, /* 001010 */
2849 // 0x54, /* 010101 */
2850 // 0x54, /* 010101 */
2851 // 0x28, /* 001010 */
2852 // 0x00, /* 000000 */
2853 // 0x00, /* 000000 */
2854
2855 // /*
2856 // * code=237, hex=0xED, ascii="!m"
2857 // */
2858 // 0x00, /* 000000 */
2859 // 0x10, /* 000100 */
2860 // 0x38, /* 001110 */
2861 // 0x54, /* 010101 */
2862 // 0x54, /* 010101 */
2863 // 0x38, /* 001110 */
2864 // 0x10, /* 000100 */
2865 // 0x00, /* 000000 */
2866
2867 // /*
2868 // * code=238, hex=0xEE, ascii="!n"
2869 // */
2870 // 0x00, /* 000000 */
2871 // 0x38, /* 001110 */
2872 // 0x40, /* 010000 */
2873 // 0x78, /* 011110 */
2874 // 0x40, /* 010000 */
2875 // 0x38, /* 001110 */
2876 // 0x00, /* 000000 */
2877 // 0x00, /* 000000 */
2878
2879 // /*
2880 // * code=239, hex=0xEF, ascii="!o"
2881 // */
2882 // 0x00, /* 000000 */
2883 // 0x30, /* 001100 */
2884 // 0x48, /* 010010 */
2885 // 0x48, /* 010010 */
2886 // 0x48, /* 010010 */
2887 // 0x48, /* 010010 */
2888 // 0x00, /* 000000 */
2889 // 0x00, /* 000000 */
2890
2891 // /*
2892 // * code=240, hex=0xF0, ascii="!p"
2893 // */
2894 // 0x00, /* 000000 */
2895 // 0x78, /* 011110 */
2896 // 0x00, /* 000000 */
2897 // 0x78, /* 011110 */
2898 // 0x00, /* 000000 */
2899 // 0x78, /* 011110 */
2900 // 0x00, /* 000000 */
2901 // 0x00, /* 000000 */
2902
2903 // /*
2904 // * code=241, hex=0xF1, ascii="!q"
2905 // */
2906 // 0x00, /* 000000 */
2907 // 0x10, /* 000100 */
2908 // 0x38, /* 001110 */
2909 // 0x10, /* 000100 */
2910 // 0x00, /* 000000 */
2911 // 0x38, /* 001110 */
2912 // 0x00, /* 000000 */
2913 // 0x00, /* 000000 */
2914
2915 // /*
2916 // * code=242, hex=0xF2, ascii="!r"
2917 // */
2918 // 0x40, /* 010000 */
2919 // 0x30, /* 001100 */
2920 // 0x08, /* 000010 */
2921 // 0x30, /* 001100 */
2922 // 0x40, /* 010000 */
2923 // 0x00, /* 000000 */
2924 // 0x78, /* 011110 */
2925 // 0x00, /* 000000 */
2926
2927 // /*
2928 // * code=243, hex=0xF3, ascii="!s"
2929 // */
2930 // 0x08, /* 000010 */
2931 // 0x30, /* 001100 */
2932 // 0x40, /* 010000 */
2933 // 0x30, /* 001100 */
2934 // 0x08, /* 000010 */
2935 // 0x00, /* 000000 */
2936 // 0x78, /* 011110 */
2937 // 0x00, /* 000000 */
2938
2939 // /*
2940 // * code=244, hex=0xF4, ascii="!t"
2941 // */
2942 // 0x00, /* 000000 */
2943 // 0x08, /* 000010 */
2944 // 0x14, /* 000101 */
2945 // 0x10, /* 000100 */
2946 // 0x10, /* 000100 */
2947 // 0x10, /* 000100 */
2948 // 0x10, /* 000100 */
2949 // 0x10, /* 000100 */
2950
2951 // /*
2952 // * code=245, hex=0xF5, ascii="!u"
2953 // */
2954 // 0x10, /* 000100 */
2955 // 0x10, /* 000100 */
2956 // 0x10, /* 000100 */
2957 // 0x10, /* 000100 */
2958 // 0x10, /* 000100 */
2959 // 0x50, /* 010100 */
2960 // 0x20, /* 001000 */
2961 // 0x00, /* 000000 */
2962
2963 // /*
2964 // * code=246, hex=0xF6, ascii="!v"
2965 // */
2966 // 0x00, /* 000000 */
2967 // 0x10, /* 000100 */
2968 // 0x00, /* 000000 */
2969 // 0x7C, /* 011111 */
2970 // 0x00, /* 000000 */
2971 // 0x10, /* 000100 */
2972 // 0x00, /* 000000 */
2973 // 0x00, /* 000000 */
2974
2975 // /*
2976 // * code=247, hex=0xF7, ascii="!w"
2977 // */
2978 // 0x00, /* 000000 */
2979 // 0x28, /* 001010 */
2980 // 0x50, /* 010100 */
2981 // 0x00, /* 000000 */
2982 // 0x28, /* 001010 */
2983 // 0x50, /* 010100 */
2984 // 0x00, /* 000000 */
2985 // 0x00, /* 000000 */
2986
2987 // /*
2988 // * code=248, hex=0xF8, ascii="!x"
2989 // */
2990 // 0x30, /* 001100 */
2991 // 0x48, /* 010010 */
2992 // 0x48, /* 010010 */
2993 // 0x30, /* 001100 */
2994 // 0x00, /* 000000 */
2995 // 0x00, /* 000000 */
2996 // 0x00, /* 000000 */
2997 // 0x00, /* 000000 */
2998
2999 // /*
3000 // * code=249, hex=0xF9, ascii="!y"
3001 // */
3002 // 0x00, /* 000000 */
3003 // 0x00, /* 000000 */
3004 // 0x00, /* 000000 */
3005 // 0x30, /* 001100 */
3006 // 0x30, /* 001100 */
3007 // 0x00, /* 000000 */
3008 // 0x00, /* 000000 */
3009 // 0x00, /* 000000 */
3010
3011 // /*
3012 // * code=250, hex=0xFA, ascii="!z"
3013 // */
3014 // 0x00, /* 000000 */
3015 // 0x00, /* 000000 */
3016 // 0x00, /* 000000 */
3017 // 0x20, /* 001000 */
3018 // 0x00, /* 000000 */
3019 // 0x00, /* 000000 */
3020 // 0x00, /* 000000 */
3021 // 0x00, /* 000000 */
3022
3023 // /*
3024 // * code=251, hex=0xFB, ascii="!{"
3025 // */
3026 // 0x00, /* 000000 */
3027 // 0x1C, /* 000111 */
3028 // 0x10, /* 000100 */
3029 // 0x10, /* 000100 */
3030 // 0x50, /* 010100 */
3031 // 0x50, /* 010100 */
3032 // 0x20, /* 001000 */
3033 // 0x00, /* 000000 */
3034
3035 // /*
3036 // * code=252, hex=0xFC, ascii="!|"
3037 // */
3038 // 0x50, /* 010100 */
3039 // 0x28, /* 001010 */
3040 // 0x28, /* 001010 */
3041 // 0x28, /* 001010 */
3042 // 0x00, /* 000000 */
3043 // 0x00, /* 000000 */
3044 // 0x00, /* 000000 */
3045 // 0x00, /* 000000 */
3046
3047 // /*
3048 // * code=253, hex=0xFD, ascii="!}"
3049 // */
3050 // 0x60, /* 011000 */
3051 // 0x10, /* 000100 */
3052 // 0x20, /* 001000 */
3053 // 0x70, /* 011100 */
3054 // 0x00, /* 000000 */
3055 // 0x00, /* 000000 */
3056 // 0x00, /* 000000 */
3057 // 0x00, /* 000000 */
3058
3059 // /*
3060 // * code=254, hex=0xFE, ascii="!~"
3061 // */
3062 // 0x00, /* 000000 */
3063 // 0x00, /* 000000 */
3064 // 0x78, /* 011110 */
3065 // 0x78, /* 011110 */
3066 // 0x78, /* 011110 */
3067 // 0x78, /* 011110 */
3068 // 0x00, /* 000000 */
3069 // 0x00, /* 000000 */
3070
3071 // /*
3072 // * code=255, hex=0xFF, ascii="!^ź"
3073 // */
3074 // 0x00, /* 000000 */
3075 // 0x00, /* 000000 */
3076 // 0x00, /* 000000 */
3077 // 0x00, /* 000000 */
3078 // 0x00, /* 000000 */
3079 // 0x00, /* 000000 */
3080 // 0x00, /* 000000 */
3081 // 0x00 /* 000000 */
3082};

◆ console_font_7x9

const unsigned char fl::console_font_7x9[]
static

Definition at line 8 of file console_font_7x9.h.

8 {
9
10// code points 0-31 and 127-255 are commented out to save memory, they contain extra characters (CP437),
11// which could be used with an UTF-8 to CP437 conversion
12
13 // /*
14 // * code=0, hex=0x00, ascii="^@"
15 // */
16 // 0x00, /* 0000000 */
17 // 0x00, /* 0000000 */
18 // 0x00, /* 0000000 */
19 // 0x00, /* 0000000 */
20 // 0x00, /* 0000000 */
21 // 0x00, /* 0000000 */
22 // 0x00, /* 0000000 */
23 // 0x00, /* 0000000 */
24 // 0x00, /* 0000000 */
25
26 // /*
27 // * code=1, hex=0x01, ascii="^A"
28 // */
29 // 0x38, /* 0011100 */
30 // 0x44, /* 0100010 */
31 // 0xAA, /* 1010101 */
32 // 0xAA, /* 1010101 */
33 // 0x82, /* 1000001 */
34 // 0xAA, /* 1010101 */
35 // 0x94, /* 1001010 */
36 // 0x78, /* 0111100 */
37 // 0x00, /* 0000000 */
38
39 // /*
40 // * code=2, hex=0x02, ascii="^B"
41 // */
42 // 0x38, /* 0011100 */
43 // 0x7C, /* 0111110 */
44 // 0xD6, /* 1101011 */
45 // 0xD6, /* 1101011 */
46 // 0xFE, /* 1111111 */
47 // 0xBA, /* 1011101 */
48 // 0xC6, /* 1100011 */
49 // 0x7C, /* 0111110 */
50 // 0x00, /* 0000000 */
51
52 // /*
53 // * code=3, hex=0x03, ascii="^C"
54 // */
55 // 0x00, /* 0000000 */
56 // 0x6C, /* 0110110 */
57 // 0xFE, /* 1111111 */
58 // 0xFE, /* 1111111 */
59 // 0xFE, /* 1111111 */
60 // 0x7C, /* 0111110 */
61 // 0x38, /* 0011100 */
62 // 0x10, /* 0001000 */
63 // 0x00, /* 0000000 */
64
65 // /*
66 // * code=4, hex=0x04, ascii="^D"
67 // */
68 // 0x00, /* 0000000 */
69 // 0x10, /* 0001000 */
70 // 0x38, /* 0011100 */
71 // 0x7C, /* 0111110 */
72 // 0xFE, /* 1111111 */
73 // 0x7C, /* 0111110 */
74 // 0x38, /* 0011100 */
75 // 0x10, /* 0001000 */
76 // 0x00, /* 0000000 */
77
78 // /*
79 // * code=5, hex=0x05, ascii="^E"
80 // */
81 // 0x38, /* 0011100 */
82 // 0x38, /* 0011100 */
83 // 0x10, /* 0001000 */
84 // 0xD6, /* 1101011 */
85 // 0xFE, /* 1111111 */
86 // 0xD6, /* 1101011 */
87 // 0x10, /* 0001000 */
88 // 0x7C, /* 0111110 */
89 // 0x00, /* 0000000 */
90
91 // /*
92 // * code=6, hex=0x06, ascii="^F"
93 // */
94 // 0x10, /* 0001000 */
95 // 0x38, /* 0011100 */
96 // 0x7C, /* 0111110 */
97 // 0xFE, /* 1111111 */
98 // 0xFE, /* 1111111 */
99 // 0x54, /* 0101010 */
100 // 0x10, /* 0001000 */
101 // 0x38, /* 0011100 */
102 // 0x00, /* 0000000 */
103
104 // /*
105 // * code=7, hex=0x07, ascii="^G"
106 // */
107 // 0x00, /* 0000000 */
108 // 0x00, /* 0000000 */
109 // 0x18, /* 0001100 */
110 // 0x3C, /* 0011110 */
111 // 0x3C, /* 0011110 */
112 // 0x18, /* 0001100 */
113 // 0x00, /* 0000000 */
114 // 0x00, /* 0000000 */
115 // 0x00, /* 0000000 */
116
117 // /*
118 // * code=8, hex=0x08, ascii="^H"
119 // */
120 // 0xFE, /* 1111111 */
121 // 0xFE, /* 1111111 */
122 // 0xE6, /* 1110011 */
123 // 0xC2, /* 1100001 */
124 // 0xC2, /* 1100001 */
125 // 0xE6, /* 1110011 */
126 // 0xFE, /* 1111111 */
127 // 0xFE, /* 1111111 */
128 // 0xFE, /* 1111111 */
129
130 // /*
131 // * code=9, hex=0x09, ascii="^I"
132 // */
133 // 0x00, /* 0000000 */
134 // 0x18, /* 0001100 */
135 // 0x3C, /* 0011110 */
136 // 0x66, /* 0110011 */
137 // 0x66, /* 0110011 */
138 // 0x3C, /* 0011110 */
139 // 0x18, /* 0001100 */
140 // 0x00, /* 0000000 */
141 // 0x00, /* 0000000 */
142
143 // /*
144 // * code=10, hex=0x0A, ascii="^J"
145 // */
146 // 0xFE, /* 1111111 */
147 // 0xE6, /* 1110011 */
148 // 0xC2, /* 1100001 */
149 // 0x98, /* 1001100 */
150 // 0x98, /* 1001100 */
151 // 0xC2, /* 1100001 */
152 // 0xE6, /* 1110011 */
153 // 0xFE, /* 1111111 */
154 // 0xFE, /* 1111111 */
155
156 // /*
157 // * code=11, hex=0x0B, ascii="^K"
158 // */
159 // 0x0E, /* 0000111 */
160 // 0x06, /* 0000011 */
161 // 0x0A, /* 0000101 */
162 // 0x18, /* 0001100 */
163 // 0x3C, /* 0011110 */
164 // 0x66, /* 0110011 */
165 // 0x66, /* 0110011 */
166 // 0x3C, /* 0011110 */
167 // 0x00, /* 0000000 */
168
169 // /*
170 // * code=12, hex=0x0C, ascii="^L"
171 // */
172 // 0x3C, /* 0011110 */
173 // 0x66, /* 0110011 */
174 // 0x66, /* 0110011 */
175 // 0x3C, /* 0011110 */
176 // 0x18, /* 0001100 */
177 // 0x3C, /* 0011110 */
178 // 0x18, /* 0001100 */
179 // 0x18, /* 0001100 */
180 // 0x00, /* 0000000 */
181
182 // /*
183 // * code=13, hex=0x0D, ascii="^M"
184 // */
185 // 0x00, /* 0000000 */
186 // 0x38, /* 0011100 */
187 // 0x2C, /* 0010110 */
188 // 0x20, /* 0010000 */
189 // 0x20, /* 0010000 */
190 // 0x20, /* 0010000 */
191 // 0x60, /* 0110000 */
192 // 0x60, /* 0110000 */
193 // 0x00, /* 0000000 */
194
195 // /*
196 // * code=14, hex=0x0E, ascii="^N"
197 // */
198 // 0x00, /* 0000000 */
199 // 0x3C, /* 0011110 */
200 // 0x24, /* 0010010 */
201 // 0x3C, /* 0011110 */
202 // 0x24, /* 0010010 */
203 // 0x24, /* 0010010 */
204 // 0x6C, /* 0110110 */
205 // 0x6C, /* 0110110 */
206 // 0x00, /* 0000000 */
207
208 // /*
209 // * code=15, hex=0x0F, ascii="^O"
210 // */
211 // 0x92, /* 1001001 */
212 // 0x54, /* 0101010 */
213 // 0x38, /* 0011100 */
214 // 0x28, /* 0010100 */
215 // 0xEE, /* 1110111 */
216 // 0x38, /* 0011100 */
217 // 0x54, /* 0101010 */
218 // 0x92, /* 1001001 */
219 // 0x00, /* 0000000 */
220
221 // /*
222 // * code=16, hex=0x10, ascii="^P"
223 // */
224 // 0x00, /* 0000000 */
225 // 0x20, /* 0010000 */
226 // 0x30, /* 0011000 */
227 // 0x38, /* 0011100 */
228 // 0x3C, /* 0011110 */
229 // 0x38, /* 0011100 */
230 // 0x30, /* 0011000 */
231 // 0x20, /* 0010000 */
232 // 0x00, /* 0000000 */
233
234 // /*
235 // * code=17, hex=0x11, ascii="^Q"
236 // */
237 // 0x00, /* 0000000 */
238 // 0x04, /* 0000010 */
239 // 0x0C, /* 0000110 */
240 // 0x1C, /* 0001110 */
241 // 0x3C, /* 0011110 */
242 // 0x1C, /* 0001110 */
243 // 0x0C, /* 0000110 */
244 // 0x04, /* 0000010 */
245 // 0x00, /* 0000000 */
246
247 // /*
248 // * code=18, hex=0x12, ascii="^R"
249 // */
250 // 0x10, /* 0001000 */
251 // 0x38, /* 0011100 */
252 // 0x7C, /* 0111110 */
253 // 0x10, /* 0001000 */
254 // 0x10, /* 0001000 */
255 // 0x7C, /* 0111110 */
256 // 0x38, /* 0011100 */
257 // 0x10, /* 0001000 */
258 // 0x00, /* 0000000 */
259
260 // /*
261 // * code=19, hex=0x13, ascii="^S"
262 // */
263 // 0x6C, /* 0110110 */
264 // 0x6C, /* 0110110 */
265 // 0x6C, /* 0110110 */
266 // 0x6C, /* 0110110 */
267 // 0x6C, /* 0110110 */
268 // 0x00, /* 0000000 */
269 // 0x6C, /* 0110110 */
270 // 0x6C, /* 0110110 */
271 // 0x00, /* 0000000 */
272
273 // /*
274 // * code=20, hex=0x14, ascii="^T"
275 // */
276 // 0x00, /* 0000000 */
277 // 0x3C, /* 0011110 */
278 // 0x54, /* 0101010 */
279 // 0x54, /* 0101010 */
280 // 0x3C, /* 0011110 */
281 // 0x14, /* 0001010 */
282 // 0x14, /* 0001010 */
283 // 0x14, /* 0001010 */
284 // 0x00, /* 0000000 */
285
286 // /*
287 // * code=21, hex=0x15, ascii="^U"
288 // */
289 // 0x3C, /* 0011110 */
290 // 0x66, /* 0110011 */
291 // 0x60, /* 0110000 */
292 // 0x3C, /* 0011110 */
293 // 0x66, /* 0110011 */
294 // 0x66, /* 0110011 */
295 // 0x3C, /* 0011110 */
296 // 0x06, /* 0000011 */
297 // 0x66, /* 0110011 */
298
299 // /*
300 // * code=22, hex=0x16, ascii="^V"
301 // */
302 // 0x00, /* 0000000 */
303 // 0x00, /* 0000000 */
304 // 0x00, /* 0000000 */
305 // 0x00, /* 0000000 */
306 // 0x00, /* 0000000 */
307 // 0x7C, /* 0111110 */
308 // 0x7C, /* 0111110 */
309 // 0x00, /* 0000000 */
310 // 0x00, /* 0000000 */
311
312 // /*
313 // * code=23, hex=0x17, ascii="^W"
314 // */
315 // 0x10, /* 0001000 */
316 // 0x38, /* 0011100 */
317 // 0x7C, /* 0111110 */
318 // 0x10, /* 0001000 */
319 // 0x10, /* 0001000 */
320 // 0x7C, /* 0111110 */
321 // 0x38, /* 0011100 */
322 // 0x10, /* 0001000 */
323 // 0x7C, /* 0111110 */
324
325 // /*
326 // * code=24, hex=0x18, ascii="^X"
327 // */
328 // 0x00, /* 0000000 */
329 // 0x18, /* 0001100 */
330 // 0x3C, /* 0011110 */
331 // 0x5A, /* 0101101 */
332 // 0x18, /* 0001100 */
333 // 0x18, /* 0001100 */
334 // 0x18, /* 0001100 */
335 // 0x18, /* 0001100 */
336 // 0x00, /* 0000000 */
337
338 // /*
339 // * code=25, hex=0x19, ascii="^Y"
340 // */
341 // 0x00, /* 0000000 */
342 // 0x18, /* 0001100 */
343 // 0x18, /* 0001100 */
344 // 0x18, /* 0001100 */
345 // 0x18, /* 0001100 */
346 // 0x5A, /* 0101101 */
347 // 0x3C, /* 0011110 */
348 // 0x18, /* 0001100 */
349 // 0x00, /* 0000000 */
350
351 // /*
352 // * code=26, hex=0x1A, ascii="^Z"
353 // */
354 // 0x00, /* 0000000 */
355 // 0x00, /* 0000000 */
356 // 0x18, /* 0001100 */
357 // 0x0C, /* 0000110 */
358 // 0x7E, /* 0111111 */
359 // 0x0C, /* 0000110 */
360 // 0x18, /* 0001100 */
361 // 0x00, /* 0000000 */
362 // 0x00, /* 0000000 */
363
364 // /*
365 // * code=27, hex=0x1B, ascii="^["
366 // */
367 // 0x00, /* 0000000 */
368 // 0x00, /* 0000000 */
369 // 0x18, /* 0001100 */
370 // 0x30, /* 0011000 */
371 // 0x7E, /* 0111111 */
372 // 0x30, /* 0011000 */
373 // 0x18, /* 0001100 */
374 // 0x00, /* 0000000 */
375 // 0x00, /* 0000000 */
376
377 // /*
378 // * code=28, hex=0x1C, ascii="^\"
379 // */
380 // 0x00, /* 0000000 */
381 // 0x00, /* 0000000 */
382 // 0x00, /* 0000000 */
383 // 0x00, /* 0000000 */
384 // 0x60, /* 0110000 */
385 // 0x60, /* 0110000 */
386 // 0x7C, /* 0111110 */
387 // 0x00, /* 0000000 */
388 // 0x00, /* 0000000 */
389
390 // /*
391 // * code=29, hex=0x1D, ascii="^]"
392 // */
393 // 0x00, /* 0000000 */
394 // 0x00, /* 0000000 */
395 // 0x24, /* 0010010 */
396 // 0x66, /* 0110011 */
397 // 0xFE, /* 1111111 */
398 // 0x66, /* 0110011 */
399 // 0x24, /* 0010010 */
400 // 0x00, /* 0000000 */
401 // 0x00, /* 0000000 */
402
403 // /*
404 // * code=30, hex=0x1E, ascii="^^"
405 // */
406 // 0x00, /* 0000000 */
407 // 0x00, /* 0000000 */
408 // 0x00, /* 0000000 */
409 // 0x10, /* 0001000 */
410 // 0x38, /* 0011100 */
411 // 0x7C, /* 0111110 */
412 // 0xFE, /* 1111111 */
413 // 0x00, /* 0000000 */
414 // 0x00, /* 0000000 */
415
416 // /*
417 // * code=31, hex=0x1F, ascii="^_"
418 // */
419 // 0x00, /* 0000000 */
420 // 0x00, /* 0000000 */
421 // 0x00, /* 0000000 */
422 // 0xFE, /* 1111111 */
423 // 0x7C, /* 0111110 */
424 // 0x38, /* 0011100 */
425 // 0x10, /* 0001000 */
426 // 0x00, /* 0000000 */
427 // 0x00, /* 0000000 */
428
429 /*
430 * code=32, hex=0x20, ascii=" "
431 */
432 0x00, /* 0000000 */
433 0x00, /* 0000000 */
434 0x00, /* 0000000 */
435 0x00, /* 0000000 */
436 0x00, /* 0000000 */
437 0x00, /* 0000000 */
438 0x00, /* 0000000 */
439 0x00, /* 0000000 */
440 0x00, /* 0000000 */
441
442 /*
443 * code=33, hex=0x21, ascii="!"
444 */
445 0x00, /* 0000000 */
446 0x18, /* 0001100 */
447 0x18, /* 0001100 */
448 0x18, /* 0001100 */
449 0x18, /* 0001100 */
450 0x00, /* 0000000 */
451 0x18, /* 0001100 */
452 0x18, /* 0001100 */
453 0x00, /* 0000000 */
454
455 /*
456 * code=34, hex=0x22, ascii="""
457 */
458 0x00, /* 0000000 */
459 0x6C, /* 0110110 */
460 0x6C, /* 0110110 */
461 0x44, /* 0100010 */
462 0x00, /* 0000000 */
463 0x00, /* 0000000 */
464 0x00, /* 0000000 */
465 0x00, /* 0000000 */
466 0x00, /* 0000000 */
467
468 /*
469 * code=35, hex=0x23, ascii="#"
470 */
471 0x00, /* 0000000 */
472 0x6C, /* 0110110 */
473 0x6C, /* 0110110 */
474 0xFE, /* 1111111 */
475 0x6C, /* 0110110 */
476 0xFE, /* 1111111 */
477 0x6C, /* 0110110 */
478 0x6C, /* 0110110 */
479 0x00, /* 0000000 */
480
481 /*
482 * code=36, hex=0x24, ascii="$"
483 */
484 0x08, /* 0000100 */
485 0x18, /* 0001100 */
486 0x3C, /* 0011110 */
487 0x60, /* 0110000 */
488 0x3C, /* 0011110 */
489 0x06, /* 0000011 */
490 0x7C, /* 0111110 */
491 0x18, /* 0001100 */
492 0x10, /* 0001000 */
493
494 /*
495 * code=37, hex=0x25, ascii="%"
496 */
497 0x70, /* 0111000 */
498 0x52, /* 0101001 */
499 0x76, /* 0111011 */
500 0x0C, /* 0000110 */
501 0x18, /* 0001100 */
502 0x3E, /* 0011111 */
503 0x6A, /* 0110101 */
504 0x0E, /* 0000111 */
505 0x00, /* 0000000 */
506
507 /*
508 * code=38, hex=0x26, ascii="&"
509 */
510 0x38, /* 0011100 */
511 0x6C, /* 0110110 */
512 0x6C, /* 0110110 */
513 0x38, /* 0011100 */
514 0x6E, /* 0110111 */
515 0x6C, /* 0110110 */
516 0x6C, /* 0110110 */
517 0x3E, /* 0011111 */
518 0x00, /* 0000000 */
519
520 /*
521 * code=39, hex=0x27, ascii="'"
522 */
523 0x00, /* 0000000 */
524 0x18, /* 0001100 */
525 0x18, /* 0001100 */
526 0x30, /* 0011000 */
527 0x30, /* 0011000 */
528 0x00, /* 0000000 */
529 0x00, /* 0000000 */
530 0x00, /* 0000000 */
531 0x00, /* 0000000 */
532
533 /*
534 * code=40, hex=0x28, ascii="("
535 */
536 0x00, /* 0000000 */
537 0x0C, /* 0000110 */
538 0x18, /* 0001100 */
539 0x30, /* 0011000 */
540 0x30, /* 0011000 */
541 0x30, /* 0011000 */
542 0x18, /* 0001100 */
543 0x0C, /* 0000110 */
544 0x00, /* 0000000 */
545
546 /*
547 * code=41, hex=0x29, ascii=")"
548 */
549 0x00, /* 0000000 */
550 0x30, /* 0011000 */
551 0x18, /* 0001100 */
552 0x0C, /* 0000110 */
553 0x0C, /* 0000110 */
554 0x0C, /* 0000110 */
555 0x18, /* 0001100 */
556 0x30, /* 0011000 */
557 0x00, /* 0000000 */
558
559 /*
560 * code=42, hex=0x2A, ascii="*"
561 */
562 0x00, /* 0000000 */
563 0x44, /* 0100010 */
564 0x6C, /* 0110110 */
565 0x38, /* 0011100 */
566 0xFE, /* 1111111 */
567 0x38, /* 0011100 */
568 0x6C, /* 0110110 */
569 0x44, /* 0100010 */
570 0x00, /* 0000000 */
571
572 /*
573 * code=43, hex=0x2B, ascii="+"
574 */
575 0x00, /* 0000000 */
576 0x00, /* 0000000 */
577 0x18, /* 0001100 */
578 0x18, /* 0001100 */
579 0x7E, /* 0111111 */
580 0x7E, /* 0111111 */
581 0x18, /* 0001100 */
582 0x18, /* 0001100 */
583 0x00, /* 0000000 */
584
585 /*
586 * code=44, hex=0x2C, ascii=","
587 */
588 0x00, /* 0000000 */
589 0x00, /* 0000000 */
590 0x00, /* 0000000 */
591 0x00, /* 0000000 */
592 0x00, /* 0000000 */
593 0x00, /* 0000000 */
594 0x30, /* 0011000 */
595 0x30, /* 0011000 */
596 0x60, /* 0110000 */
597
598 /*
599 * code=45, hex=0x2D, ascii="-"
600 */
601 0x00, /* 0000000 */
602 0x00, /* 0000000 */
603 0x00, /* 0000000 */
604 0x00, /* 0000000 */
605 0x7C, /* 0111110 */
606 0x7C, /* 0111110 */
607 0x00, /* 0000000 */
608 0x00, /* 0000000 */
609 0x00, /* 0000000 */
610
611 /*
612 * code=46, hex=0x2E, ascii="."
613 */
614 0x00, /* 0000000 */
615 0x00, /* 0000000 */
616 0x00, /* 0000000 */
617 0x00, /* 0000000 */
618 0x00, /* 0000000 */
619 0x00, /* 0000000 */
620 0x30, /* 0011000 */
621 0x30, /* 0011000 */
622 0x00, /* 0000000 */
623
624 /*
625 * code=47, hex=0x2F, ascii="/"
626 */
627 0x00, /* 0000000 */
628 0x0C, /* 0000110 */
629 0x0C, /* 0000110 */
630 0x18, /* 0001100 */
631 0x18, /* 0001100 */
632 0x30, /* 0011000 */
633 0x30, /* 0011000 */
634 0x60, /* 0110000 */
635 0x00, /* 0000000 */
636
637 /*
638 * code=48, hex=0x30, ascii="0"
639 */
640 0x00, /* 0000000 */
641 0x3C, /* 0011110 */
642 0x66, /* 0110011 */
643 0x6E, /* 0110111 */
644 0x76, /* 0111011 */
645 0x66, /* 0110011 */
646 0x66, /* 0110011 */
647 0x3C, /* 0011110 */
648 0x00, /* 0000000 */
649
650 /*
651 * code=49, hex=0x31, ascii="1"
652 */
653 0x00, /* 0000000 */
654 0x18, /* 0001100 */
655 0x78, /* 0111100 */
656 0x18, /* 0001100 */
657 0x18, /* 0001100 */
658 0x18, /* 0001100 */
659 0x18, /* 0001100 */
660 0x7E, /* 0111111 */
661 0x00, /* 0000000 */
662
663 /*
664 * code=50, hex=0x32, ascii="2"
665 */
666 0x00, /* 0000000 */
667 0x3C, /* 0011110 */
668 0x66, /* 0110011 */
669 0x46, /* 0100011 */
670 0x1C, /* 0001110 */
671 0x30, /* 0011000 */
672 0x66, /* 0110011 */
673 0x7E, /* 0111111 */
674 0x00, /* 0000000 */
675
676 /*
677 * code=51, hex=0x33, ascii="3"
678 */
679 0x00, /* 0000000 */
680 0x3C, /* 0011110 */
681 0x66, /* 0110011 */
682 0x06, /* 0000011 */
683 0x1C, /* 0001110 */
684 0x06, /* 0000011 */
685 0x66, /* 0110011 */
686 0x3C, /* 0011110 */
687 0x00, /* 0000000 */
688
689 /*
690 * code=52, hex=0x34, ascii="4"
691 */
692 0x00, /* 0000000 */
693 0x0C, /* 0000110 */
694 0x1C, /* 0001110 */
695 0x3C, /* 0011110 */
696 0x6C, /* 0110110 */
697 0x7E, /* 0111111 */
698 0x0C, /* 0000110 */
699 0x1E, /* 0001111 */
700 0x00, /* 0000000 */
701
702 /*
703 * code=53, hex=0x35, ascii="5"
704 */
705 0x00, /* 0000000 */
706 0x7E, /* 0111111 */
707 0x66, /* 0110011 */
708 0x60, /* 0110000 */
709 0x7C, /* 0111110 */
710 0x06, /* 0000011 */
711 0x66, /* 0110011 */
712 0x3C, /* 0011110 */
713 0x00, /* 0000000 */
714
715 /*
716 * code=54, hex=0x36, ascii="6"
717 */
718 0x00, /* 0000000 */
719 0x1C, /* 0001110 */
720 0x30, /* 0011000 */
721 0x60, /* 0110000 */
722 0x7C, /* 0111110 */
723 0x66, /* 0110011 */
724 0x66, /* 0110011 */
725 0x3C, /* 0011110 */
726 0x00, /* 0000000 */
727
728 /*
729 * code=55, hex=0x37, ascii="7"
730 */
731 0x00, /* 0000000 */
732 0x7E, /* 0111111 */
733 0x66, /* 0110011 */
734 0x06, /* 0000011 */
735 0x0C, /* 0000110 */
736 0x18, /* 0001100 */
737 0x18, /* 0001100 */
738 0x18, /* 0001100 */
739 0x00, /* 0000000 */
740
741 /*
742 * code=56, hex=0x38, ascii="8"
743 */
744 0x00, /* 0000000 */
745 0x3C, /* 0011110 */
746 0x66, /* 0110011 */
747 0x66, /* 0110011 */
748 0x3C, /* 0011110 */
749 0x66, /* 0110011 */
750 0x66, /* 0110011 */
751 0x3C, /* 0011110 */
752 0x00, /* 0000000 */
753
754 /*
755 * code=57, hex=0x39, ascii="9"
756 */
757 0x00, /* 0000000 */
758 0x3C, /* 0011110 */
759 0x66, /* 0110011 */
760 0x66, /* 0110011 */
761 0x3E, /* 0011111 */
762 0x06, /* 0000011 */
763 0x0C, /* 0000110 */
764 0x38, /* 0011100 */
765 0x00, /* 0000000 */
766
767 /*
768 * code=58, hex=0x3A, ascii=":"
769 */
770 0x00, /* 0000000 */
771 0x00, /* 0000000 */
772 0x30, /* 0011000 */
773 0x30, /* 0011000 */
774 0x00, /* 0000000 */
775 0x00, /* 0000000 */
776 0x30, /* 0011000 */
777 0x30, /* 0011000 */
778 0x00, /* 0000000 */
779
780 /*
781 * code=59, hex=0x3B, ascii=";"
782 */
783 0x00, /* 0000000 */
784 0x00, /* 0000000 */
785 0x30, /* 0011000 */
786 0x30, /* 0011000 */
787 0x00, /* 0000000 */
788 0x00, /* 0000000 */
789 0x30, /* 0011000 */
790 0x30, /* 0011000 */
791 0x60, /* 0110000 */
792
793 /*
794 * code=60, hex=0x3C, ascii="<"
795 */
796 0x00, /* 0000000 */
797 0x00, /* 0000000 */
798 0x18, /* 0001100 */
799 0x30, /* 0011000 */
800 0x60, /* 0110000 */
801 0x30, /* 0011000 */
802 0x18, /* 0001100 */
803 0x00, /* 0000000 */
804 0x00, /* 0000000 */
805
806 /*
807 * code=61, hex=0x3D, ascii="="
808 */
809 0x00, /* 0000000 */
810 0x00, /* 0000000 */
811 0x00, /* 0000000 */
812 0x7C, /* 0111110 */
813 0x00, /* 0000000 */
814 0x7C, /* 0111110 */
815 0x00, /* 0000000 */
816 0x00, /* 0000000 */
817 0x00, /* 0000000 */
818
819 /*
820 * code=62, hex=0x3E, ascii=">"
821 */
822 0x00, /* 0000000 */
823 0x00, /* 0000000 */
824 0x30, /* 0011000 */
825 0x18, /* 0001100 */
826 0x0C, /* 0000110 */
827 0x18, /* 0001100 */
828 0x30, /* 0011000 */
829 0x00, /* 0000000 */
830 0x00, /* 0000000 */
831
832 /*
833 * code=63, hex=0x3F, ascii="?"
834 */
835 0x00, /* 0000000 */
836 0x3C, /* 0011110 */
837 0x66, /* 0110011 */
838 0x06, /* 0000011 */
839 0x0C, /* 0000110 */
840 0x18, /* 0001100 */
841 0x00, /* 0000000 */
842 0x18, /* 0001100 */
843 0x00, /* 0000000 */
844
845 /*
846 * code=64, hex=0x40, ascii="@"
847 */
848 0x00, /* 0000000 */
849 0x3C, /* 0011110 */
850 0x62, /* 0110001 */
851 0x6E, /* 0110111 */
852 0x6A, /* 0110101 */
853 0x6C, /* 0110110 */
854 0x62, /* 0110001 */
855 0x3C, /* 0011110 */
856 0x00, /* 0000000 */
857
858 /*
859 * code=65, hex=0x41, ascii="A"
860 */
861 0x00, /* 0000000 */
862 0x10, /* 0001000 */
863 0x38, /* 0011100 */
864 0x28, /* 0010100 */
865 0x6C, /* 0110110 */
866 0x7C, /* 0111110 */
867 0xC6, /* 1100011 */
868 0xC6, /* 1100011 */
869 0x00, /* 0000000 */
870
871 /*
872 * code=66, hex=0x42, ascii="B"
873 */
874 0x00, /* 0000000 */
875 0x7C, /* 0111110 */
876 0x66, /* 0110011 */
877 0x66, /* 0110011 */
878 0x7C, /* 0111110 */
879 0x66, /* 0110011 */
880 0x66, /* 0110011 */
881 0x7C, /* 0111110 */
882 0x00, /* 0000000 */
883
884 /*
885 * code=67, hex=0x43, ascii="C"
886 */
887 0x00, /* 0000000 */
888 0x3C, /* 0011110 */
889 0x66, /* 0110011 */
890 0x60, /* 0110000 */
891 0x60, /* 0110000 */
892 0x60, /* 0110000 */
893 0x66, /* 0110011 */
894 0x3C, /* 0011110 */
895 0x00, /* 0000000 */
896
897 /*
898 * code=68, hex=0x44, ascii="D"
899 */
900 0x00, /* 0000000 */
901 0x7C, /* 0111110 */
902 0x66, /* 0110011 */
903 0x66, /* 0110011 */
904 0x66, /* 0110011 */
905 0x66, /* 0110011 */
906 0x66, /* 0110011 */
907 0x7C, /* 0111110 */
908 0x00, /* 0000000 */
909
910 /*
911 * code=69, hex=0x45, ascii="E"
912 */
913 0x00, /* 0000000 */
914 0x7E, /* 0111111 */
915 0x66, /* 0110011 */
916 0x60, /* 0110000 */
917 0x78, /* 0111100 */
918 0x60, /* 0110000 */
919 0x66, /* 0110011 */
920 0x7E, /* 0111111 */
921 0x00, /* 0000000 */
922
923 /*
924 * code=70, hex=0x46, ascii="F"
925 */
926 0x00, /* 0000000 */
927 0x7E, /* 0111111 */
928 0x66, /* 0110011 */
929 0x60, /* 0110000 */
930 0x7C, /* 0111110 */
931 0x60, /* 0110000 */
932 0x60, /* 0110000 */
933 0x60, /* 0110000 */
934 0x00, /* 0000000 */
935
936 /*
937 * code=71, hex=0x47, ascii="G"
938 */
939 0x00, /* 0000000 */
940 0x3C, /* 0011110 */
941 0x66, /* 0110011 */
942 0x60, /* 0110000 */
943 0x6E, /* 0110111 */
944 0x66, /* 0110011 */
945 0x66, /* 0110011 */
946 0x3E, /* 0011111 */
947 0x00, /* 0000000 */
948
949 /*
950 * code=72, hex=0x48, ascii="H"
951 */
952 0x00, /* 0000000 */
953 0x66, /* 0110011 */
954 0x66, /* 0110011 */
955 0x66, /* 0110011 */
956 0x7E, /* 0111111 */
957 0x66, /* 0110011 */
958 0x66, /* 0110011 */
959 0x66, /* 0110011 */
960 0x00, /* 0000000 */
961
962 /*
963 * code=73, hex=0x49, ascii="I"
964 */
965 0x00, /* 0000000 */
966 0x3C, /* 0011110 */
967 0x18, /* 0001100 */
968 0x18, /* 0001100 */
969 0x18, /* 0001100 */
970 0x18, /* 0001100 */
971 0x18, /* 0001100 */
972 0x3C, /* 0011110 */
973 0x00, /* 0000000 */
974
975 /*
976 * code=74, hex=0x4A, ascii="J"
977 */
978 0x00, /* 0000000 */
979 0x1E, /* 0001111 */
980 0x0C, /* 0000110 */
981 0x0C, /* 0000110 */
982 0x0C, /* 0000110 */
983 0x6C, /* 0110110 */
984 0x6C, /* 0110110 */
985 0x38, /* 0011100 */
986 0x00, /* 0000000 */
987
988 /*
989 * code=75, hex=0x4B, ascii="K"
990 */
991 0x00, /* 0000000 */
992 0x66, /* 0110011 */
993 0x6C, /* 0110110 */
994 0x6C, /* 0110110 */
995 0x78, /* 0111100 */
996 0x6C, /* 0110110 */
997 0x6C, /* 0110110 */
998 0x66, /* 0110011 */
999 0x00, /* 0000000 */
1000
1001 /*
1002 * code=76, hex=0x4C, ascii="L"
1003 */
1004 0x00, /* 0000000 */
1005 0x60, /* 0110000 */
1006 0x60, /* 0110000 */
1007 0x60, /* 0110000 */
1008 0x60, /* 0110000 */
1009 0x60, /* 0110000 */
1010 0x66, /* 0110011 */
1011 0x7E, /* 0111111 */
1012 0x00, /* 0000000 */
1013
1014 /*
1015 * code=77, hex=0x4D, ascii="M"
1016 */
1017 0x00, /* 0000000 */
1018 0xC6, /* 1100011 */
1019 0xC6, /* 1100011 */
1020 0xEE, /* 1110111 */
1021 0xFE, /* 1111111 */
1022 0xD6, /* 1101011 */
1023 0xD6, /* 1101011 */
1024 0xD6, /* 1101011 */
1025 0x00, /* 0000000 */
1026
1027 /*
1028 * code=78, hex=0x4E, ascii="N"
1029 */
1030 0x00, /* 0000000 */
1031 0x66, /* 0110011 */
1032 0x76, /* 0111011 */
1033 0x76, /* 0111011 */
1034 0x7E, /* 0111111 */
1035 0x6E, /* 0110111 */
1036 0x66, /* 0110011 */
1037 0x66, /* 0110011 */
1038 0x00, /* 0000000 */
1039
1040 /*
1041 * code=79, hex=0x4F, ascii="O"
1042 */
1043 0x00, /* 0000000 */
1044 0x3C, /* 0011110 */
1045 0x66, /* 0110011 */
1046 0x66, /* 0110011 */
1047 0x66, /* 0110011 */
1048 0x66, /* 0110011 */
1049 0x66, /* 0110011 */
1050 0x3C, /* 0011110 */
1051 0x00, /* 0000000 */
1052
1053 /*
1054 * code=80, hex=0x50, ascii="P"
1055 */
1056 0x00, /* 0000000 */
1057 0x7C, /* 0111110 */
1058 0x66, /* 0110011 */
1059 0x66, /* 0110011 */
1060 0x66, /* 0110011 */
1061 0x7C, /* 0111110 */
1062 0x60, /* 0110000 */
1063 0x60, /* 0110000 */
1064 0x00, /* 0000000 */
1065
1066 /*
1067 * code=81, hex=0x51, ascii="Q"
1068 */
1069 0x00, /* 0000000 */
1070 0x3C, /* 0011110 */
1071 0x66, /* 0110011 */
1072 0x66, /* 0110011 */
1073 0x66, /* 0110011 */
1074 0x76, /* 0111011 */
1075 0x6E, /* 0110111 */
1076 0x3C, /* 0011110 */
1077 0x06, /* 0000011 */
1078
1079 /*
1080 * code=82, hex=0x52, ascii="R"
1081 */
1082 0x00, /* 0000000 */
1083 0x7C, /* 0111110 */
1084 0x66, /* 0110011 */
1085 0x66, /* 0110011 */
1086 0x6C, /* 0110110 */
1087 0x78, /* 0111100 */
1088 0x6C, /* 0110110 */
1089 0x66, /* 0110011 */
1090 0x00, /* 0000000 */
1091
1092 /*
1093 * code=83, hex=0x53, ascii="S"
1094 */
1095 0x00, /* 0000000 */
1096 0x3C, /* 0011110 */
1097 0x66, /* 0110011 */
1098 0x60, /* 0110000 */
1099 0x3C, /* 0011110 */
1100 0x06, /* 0000011 */
1101 0x66, /* 0110011 */
1102 0x3C, /* 0011110 */
1103 0x00, /* 0000000 */
1104
1105 /*
1106 * code=84, hex=0x54, ascii="T"
1107 */
1108 0x00, /* 0000000 */
1109 0x7E, /* 0111111 */
1110 0x5A, /* 0101101 */
1111 0x18, /* 0001100 */
1112 0x18, /* 0001100 */
1113 0x18, /* 0001100 */
1114 0x18, /* 0001100 */
1115 0x3C, /* 0011110 */
1116 0x00, /* 0000000 */
1117
1118 /*
1119 * code=85, hex=0x55, ascii="U"
1120 */
1121 0x00, /* 0000000 */
1122 0x66, /* 0110011 */
1123 0x66, /* 0110011 */
1124 0x66, /* 0110011 */
1125 0x66, /* 0110011 */
1126 0x66, /* 0110011 */
1127 0x66, /* 0110011 */
1128 0x3C, /* 0011110 */
1129 0x00, /* 0000000 */
1130
1131 /*
1132 * code=86, hex=0x56, ascii="V"
1133 */
1134 0x00, /* 0000000 */
1135 0xC6, /* 1100011 */
1136 0xC6, /* 1100011 */
1137 0x6C, /* 0110110 */
1138 0x6C, /* 0110110 */
1139 0x38, /* 0011100 */
1140 0x38, /* 0011100 */
1141 0x10, /* 0001000 */
1142 0x00, /* 0000000 */
1143
1144 /*
1145 * code=87, hex=0x57, ascii="W"
1146 */
1147 0x00, /* 0000000 */
1148 0xC6, /* 1100011 */
1149 0xD6, /* 1101011 */
1150 0xD6, /* 1101011 */
1151 0xD6, /* 1101011 */
1152 0x7C, /* 0111110 */
1153 0x6C, /* 0110110 */
1154 0x44, /* 0100010 */
1155 0x00, /* 0000000 */
1156
1157 /*
1158 * code=88, hex=0x58, ascii="X"
1159 */
1160 0x00, /* 0000000 */
1161 0x66, /* 0110011 */
1162 0x66, /* 0110011 */
1163 0x3C, /* 0011110 */
1164 0x18, /* 0001100 */
1165 0x3C, /* 0011110 */
1166 0x66, /* 0110011 */
1167 0x66, /* 0110011 */
1168 0x00, /* 0000000 */
1169
1170 /*
1171 * code=89, hex=0x59, ascii="Y"
1172 */
1173 0x00, /* 0000000 */
1174 0x66, /* 0110011 */
1175 0x66, /* 0110011 */
1176 0x66, /* 0110011 */
1177 0x3C, /* 0011110 */
1178 0x18, /* 0001100 */
1179 0x18, /* 0001100 */
1180 0x3C, /* 0011110 */
1181 0x00, /* 0000000 */
1182
1183 /*
1184 * code=90, hex=0x5A, ascii="Z"
1185 */
1186 0x00, /* 0000000 */
1187 0x7E, /* 0111111 */
1188 0x66, /* 0110011 */
1189 0x0C, /* 0000110 */
1190 0x18, /* 0001100 */
1191 0x30, /* 0011000 */
1192 0x66, /* 0110011 */
1193 0x7E, /* 0111111 */
1194 0x00, /* 0000000 */
1195
1196 /*
1197 * code=91, hex=0x5B, ascii="["
1198 */
1199 0x00, /* 0000000 */
1200 0x3C, /* 0011110 */
1201 0x30, /* 0011000 */
1202 0x30, /* 0011000 */
1203 0x30, /* 0011000 */
1204 0x30, /* 0011000 */
1205 0x30, /* 0011000 */
1206 0x3C, /* 0011110 */
1207 0x00, /* 0000000 */
1208
1209 /*
1210 * code=92, hex=0x5C, ascii="\"
1211 */
1212 0x00, /* 0000000 */
1213 0x60, /* 0110000 */
1214 0x60, /* 0110000 */
1215 0x30, /* 0011000 */
1216 0x30, /* 0011000 */
1217 0x18, /* 0001100 */
1218 0x18, /* 0001100 */
1219 0x0C, /* 0000110 */
1220 0x00, /* 0000000 */
1221
1222 /*
1223 * code=93, hex=0x5D, ascii="]"
1224 */
1225 0x00, /* 0000000 */
1226 0x3C, /* 0011110 */
1227 0x0C, /* 0000110 */
1228 0x0C, /* 0000110 */
1229 0x0C, /* 0000110 */
1230 0x0C, /* 0000110 */
1231 0x0C, /* 0000110 */
1232 0x3C, /* 0011110 */
1233 0x00, /* 0000000 */
1234
1235 /*
1236 * code=94, hex=0x5E, ascii="^"
1237 */
1238 0x00, /* 0000000 */
1239 0x10, /* 0001000 */
1240 0x38, /* 0011100 */
1241 0x6C, /* 0110110 */
1242 0x00, /* 0000000 */
1243 0x00, /* 0000000 */
1244 0x00, /* 0000000 */
1245 0x00, /* 0000000 */
1246 0x00, /* 0000000 */
1247
1248 /*
1249 * code=95, hex=0x5F, ascii="_"
1250 */
1251 0x00, /* 0000000 */
1252 0x00, /* 0000000 */
1253 0x00, /* 0000000 */
1254 0x00, /* 0000000 */
1255 0x00, /* 0000000 */
1256 0x00, /* 0000000 */
1257 0x00, /* 0000000 */
1258 0x7C, /* 0111110 */
1259 0x7C, /* 0111110 */
1260
1261 /*
1262 * code=96, hex=0x60, ascii="`"
1263 */
1264 0x00, /* 0000000 */
1265 0x30, /* 0011000 */
1266 0x30, /* 0011000 */
1267 0x18, /* 0001100 */
1268 0x18, /* 0001100 */
1269 0x00, /* 0000000 */
1270 0x00, /* 0000000 */
1271 0x00, /* 0000000 */
1272 0x00, /* 0000000 */
1273
1274 /*
1275 * code=97, hex=0x61, ascii="a"
1276 */
1277 0x00, /* 0000000 */
1278 0x00, /* 0000000 */
1279 0x00, /* 0000000 */
1280 0x3C, /* 0011110 */
1281 0x06, /* 0000011 */
1282 0x3E, /* 0011111 */
1283 0x66, /* 0110011 */
1284 0x3A, /* 0011101 */
1285 0x00, /* 0000000 */
1286
1287 /*
1288 * code=98, hex=0x62, ascii="b"
1289 */
1290 0x00, /* 0000000 */
1291 0x60, /* 0110000 */
1292 0x60, /* 0110000 */
1293 0x7C, /* 0111110 */
1294 0x66, /* 0110011 */
1295 0x66, /* 0110011 */
1296 0x66, /* 0110011 */
1297 0x5C, /* 0101110 */
1298 0x00, /* 0000000 */
1299
1300 /*
1301 * code=99, hex=0x63, ascii="c"
1302 */
1303 0x00, /* 0000000 */
1304 0x00, /* 0000000 */
1305 0x00, /* 0000000 */
1306 0x3C, /* 0011110 */
1307 0x66, /* 0110011 */
1308 0x60, /* 0110000 */
1309 0x66, /* 0110011 */
1310 0x3C, /* 0011110 */
1311 0x00, /* 0000000 */
1312
1313 /*
1314 * code=100, hex=0x64, ascii="d"
1315 */
1316 0x00, /* 0000000 */
1317 0x06, /* 0000011 */
1318 0x06, /* 0000011 */
1319 0x3E, /* 0011111 */
1320 0x66, /* 0110011 */
1321 0x66, /* 0110011 */
1322 0x66, /* 0110011 */
1323 0x3A, /* 0011101 */
1324 0x00, /* 0000000 */
1325
1326 /*
1327 * code=101, hex=0x65, ascii="e"
1328 */
1329 0x00, /* 0000000 */
1330 0x00, /* 0000000 */
1331 0x00, /* 0000000 */
1332 0x3C, /* 0011110 */
1333 0x66, /* 0110011 */
1334 0x7E, /* 0111111 */
1335 0x60, /* 0110000 */
1336 0x3C, /* 0011110 */
1337 0x00, /* 0000000 */
1338
1339 /*
1340 * code=102, hex=0x66, ascii="f"
1341 */
1342 0x00, /* 0000000 */
1343 0x1C, /* 0001110 */
1344 0x36, /* 0011011 */
1345 0x30, /* 0011000 */
1346 0x7C, /* 0111110 */
1347 0x30, /* 0011000 */
1348 0x30, /* 0011000 */
1349 0x78, /* 0111100 */
1350 0x00, /* 0000000 */
1351
1352 /*
1353 * code=103, hex=0x67, ascii="g"
1354 */
1355 0x00, /* 0000000 */
1356 0x00, /* 0000000 */
1357 0x00, /* 0000000 */
1358 0x3A, /* 0011101 */
1359 0x66, /* 0110011 */
1360 0x66, /* 0110011 */
1361 0x3E, /* 0011111 */
1362 0x06, /* 0000011 */
1363 0x3C, /* 0011110 */
1364
1365 /*
1366 * code=104, hex=0x68, ascii="h"
1367 */
1368 0x00, /* 0000000 */
1369 0x60, /* 0110000 */
1370 0x60, /* 0110000 */
1371 0x6C, /* 0110110 */
1372 0x76, /* 0111011 */
1373 0x66, /* 0110011 */
1374 0x66, /* 0110011 */
1375 0x66, /* 0110011 */
1376 0x00, /* 0000000 */
1377
1378 /*
1379 * code=105, hex=0x69, ascii="i"
1380 */
1381 0x18, /* 0001100 */
1382 0x18, /* 0001100 */
1383 0x00, /* 0000000 */
1384 0x18, /* 0001100 */
1385 0x38, /* 0011100 */
1386 0x18, /* 0001100 */
1387 0x18, /* 0001100 */
1388 0x3C, /* 0011110 */
1389 0x00, /* 0000000 */
1390
1391 /*
1392 * code=106, hex=0x6A, ascii="j"
1393 */
1394 0x0C, /* 0000110 */
1395 0x0C, /* 0000110 */
1396 0x00, /* 0000000 */
1397 0x0C, /* 0000110 */
1398 0x3C, /* 0011110 */
1399 0x0C, /* 0000110 */
1400 0x4C, /* 0100110 */
1401 0x6C, /* 0110110 */
1402 0x38, /* 0011100 */
1403
1404 /*
1405 * code=107, hex=0x6B, ascii="k"
1406 */
1407 0x00, /* 0000000 */
1408 0x60, /* 0110000 */
1409 0x60, /* 0110000 */
1410 0x66, /* 0110011 */
1411 0x6C, /* 0110110 */
1412 0x78, /* 0111100 */
1413 0x6C, /* 0110110 */
1414 0x66, /* 0110011 */
1415 0x00, /* 0000000 */
1416
1417 /*
1418 * code=108, hex=0x6C, ascii="l"
1419 */
1420 0x00, /* 0000000 */
1421 0x18, /* 0001100 */
1422 0x18, /* 0001100 */
1423 0x18, /* 0001100 */
1424 0x18, /* 0001100 */
1425 0x18, /* 0001100 */
1426 0x18, /* 0001100 */
1427 0x3C, /* 0011110 */
1428 0x00, /* 0000000 */
1429
1430 /*
1431 * code=109, hex=0x6D, ascii="m"
1432 */
1433 0x00, /* 0000000 */
1434 0x00, /* 0000000 */
1435 0x00, /* 0000000 */
1436 0x6C, /* 0110110 */
1437 0xFE, /* 1111111 */
1438 0xD6, /* 1101011 */
1439 0xD6, /* 1101011 */
1440 0xD6, /* 1101011 */
1441 0x00, /* 0000000 */
1442
1443 /*
1444 * code=110, hex=0x6E, ascii="n"
1445 */
1446 0x00, /* 0000000 */
1447 0x00, /* 0000000 */
1448 0x00, /* 0000000 */
1449 0x6C, /* 0110110 */
1450 0x76, /* 0111011 */
1451 0x66, /* 0110011 */
1452 0x66, /* 0110011 */
1453 0x66, /* 0110011 */
1454 0x00, /* 0000000 */
1455
1456 /*
1457 * code=111, hex=0x6F, ascii="o"
1458 */
1459 0x00, /* 0000000 */
1460 0x00, /* 0000000 */
1461 0x00, /* 0000000 */
1462 0x3C, /* 0011110 */
1463 0x66, /* 0110011 */
1464 0x66, /* 0110011 */
1465 0x66, /* 0110011 */
1466 0x3C, /* 0011110 */
1467 0x00, /* 0000000 */
1468
1469 /*
1470 * code=112, hex=0x70, ascii="p"
1471 */
1472 0x00, /* 0000000 */
1473 0x00, /* 0000000 */
1474 0x00, /* 0000000 */
1475 0x7C, /* 0111110 */
1476 0x66, /* 0110011 */
1477 0x66, /* 0110011 */
1478 0x76, /* 0111011 */
1479 0x6C, /* 0110110 */
1480 0x60, /* 0110000 */
1481
1482 /*
1483 * code=113, hex=0x71, ascii="q"
1484 */
1485 0x00, /* 0000000 */
1486 0x00, /* 0000000 */
1487 0x00, /* 0000000 */
1488 0x3A, /* 0011101 */
1489 0x66, /* 0110011 */
1490 0x66, /* 0110011 */
1491 0x6E, /* 0110111 */
1492 0x36, /* 0011011 */
1493 0x06, /* 0000011 */
1494
1495 /*
1496 * code=114, hex=0x72, ascii="r"
1497 */
1498 0x00, /* 0000000 */
1499 0x00, /* 0000000 */
1500 0x00, /* 0000000 */
1501 0x26, /* 0010011 */
1502 0x7E, /* 0111111 */
1503 0x30, /* 0011000 */
1504 0x30, /* 0011000 */
1505 0x78, /* 0111100 */
1506 0x00, /* 0000000 */
1507
1508 /*
1509 * code=115, hex=0x73, ascii="s"
1510 */
1511 0x00, /* 0000000 */
1512 0x00, /* 0000000 */
1513 0x00, /* 0000000 */
1514 0x3C, /* 0011110 */
1515 0x60, /* 0110000 */
1516 0x3C, /* 0011110 */
1517 0x06, /* 0000011 */
1518 0x3C, /* 0011110 */
1519 0x00, /* 0000000 */
1520
1521 /*
1522 * code=116, hex=0x74, ascii="t"
1523 */
1524 0x00, /* 0000000 */
1525 0x10, /* 0001000 */
1526 0x30, /* 0011000 */
1527 0xFC, /* 1111110 */
1528 0x30, /* 0011000 */
1529 0x30, /* 0011000 */
1530 0x36, /* 0011011 */
1531 0x1C, /* 0001110 */
1532 0x00, /* 0000000 */
1533
1534 /*
1535 * code=117, hex=0x75, ascii="u"
1536 */
1537 0x00, /* 0000000 */
1538 0x00, /* 0000000 */
1539 0x00, /* 0000000 */
1540 0x66, /* 0110011 */
1541 0x66, /* 0110011 */
1542 0x66, /* 0110011 */
1543 0x6E, /* 0110111 */
1544 0x36, /* 0011011 */
1545 0x00, /* 0000000 */
1546
1547 /*
1548 * code=118, hex=0x76, ascii="v"
1549 */
1550 0x00, /* 0000000 */
1551 0x00, /* 0000000 */
1552 0x00, /* 0000000 */
1553 0xC6, /* 1100011 */
1554 0xC6, /* 1100011 */
1555 0x6C, /* 0110110 */
1556 0x38, /* 0011100 */
1557 0x10, /* 0001000 */
1558 0x00, /* 0000000 */
1559
1560 /*
1561 * code=119, hex=0x77, ascii="w"
1562 */
1563 0x00, /* 0000000 */
1564 0x00, /* 0000000 */
1565 0x00, /* 0000000 */
1566 0xD6, /* 1101011 */
1567 0xD6, /* 1101011 */
1568 0x7C, /* 0111110 */
1569 0x6C, /* 0110110 */
1570 0x44, /* 0100010 */
1571 0x00, /* 0000000 */
1572
1573 /*
1574 * code=120, hex=0x78, ascii="x"
1575 */
1576 0x00, /* 0000000 */
1577 0x00, /* 0000000 */
1578 0x00, /* 0000000 */
1579 0xC6, /* 1100011 */
1580 0x6C, /* 0110110 */
1581 0x38, /* 0011100 */
1582 0x6C, /* 0110110 */
1583 0xC6, /* 1100011 */
1584 0x00, /* 0000000 */
1585
1586 /*
1587 * code=121, hex=0x79, ascii="y"
1588 */
1589 0x00, /* 0000000 */
1590 0x00, /* 0000000 */
1591 0x00, /* 0000000 */
1592 0x66, /* 0110011 */
1593 0x66, /* 0110011 */
1594 0x36, /* 0011011 */
1595 0x1C, /* 0001110 */
1596 0x6C, /* 0110110 */
1597 0x38, /* 0011100 */
1598
1599 /*
1600 * code=122, hex=0x7A, ascii="z"
1601 */
1602 0x00, /* 0000000 */
1603 0x00, /* 0000000 */
1604 0x00, /* 0000000 */
1605 0x7E, /* 0111111 */
1606 0x06, /* 0000011 */
1607 0x18, /* 0001100 */
1608 0x30, /* 0011000 */
1609 0x7E, /* 0111111 */
1610 0x00, /* 0000000 */
1611
1612 /*
1613 * code=123, hex=0x7B, ascii="{"
1614 */
1615 0x00, /* 0000000 */
1616 0x1C, /* 0001110 */
1617 0x30, /* 0011000 */
1618 0x30, /* 0011000 */
1619 0x60, /* 0110000 */
1620 0x30, /* 0011000 */
1621 0x30, /* 0011000 */
1622 0x1C, /* 0001110 */
1623 0x00, /* 0000000 */
1624
1625 /*
1626 * code=124, hex=0x7C, ascii="|"
1627 */
1628 0x18, /* 0001100 */
1629 0x18, /* 0001100 */
1630 0x18, /* 0001100 */
1631 0x18, /* 0001100 */
1632 0x00, /* 0000000 */
1633 0x18, /* 0001100 */
1634 0x18, /* 0001100 */
1635 0x18, /* 0001100 */
1636 0x00, /* 0000000 */
1637
1638 /*
1639 * code=125, hex=0x7D, ascii="}"
1640 */
1641 0x00, /* 0000000 */
1642 0x70, /* 0111000 */
1643 0x18, /* 0001100 */
1644 0x18, /* 0001100 */
1645 0x0C, /* 0000110 */
1646 0x18, /* 0001100 */
1647 0x18, /* 0001100 */
1648 0x70, /* 0111000 */
1649 0x00, /* 0000000 */
1650
1651 /*
1652 * code=126, hex=0x7E, ascii="~"
1653 */
1654 0x00, /* 0000000 */
1655 0x10, /* 0001000 */
1656 0x3A, /* 0011101 */
1657 0x6E, /* 0110111 */
1658 0x04, /* 0000010 */
1659 0x00, /* 0000000 */
1660 0x00, /* 0000000 */
1661 0x00, /* 0000000 */
1662 0x00, /* 0000000 */
1663
1664 // /*
1665 // * code=127, hex=0x7F, ascii="^?"
1666 // */
1667 // 0x00, /* 0000000 */
1668 // 0x00, /* 0000000 */
1669 // 0x08, /* 0000100 */
1670 // 0x1C, /* 0001110 */
1671 // 0x36, /* 0011011 */
1672 // 0x62, /* 0110001 */
1673 // 0x7E, /* 0111111 */
1674 // 0x00, /* 0000000 */
1675 // 0x00, /* 0000000 */
1676
1677 // /*
1678 // * code=128, hex=0x80, ascii="!^@"
1679 // */
1680 // 0x00, /* 0000000 */
1681 // 0x3C, /* 0011110 */
1682 // 0x66, /* 0110011 */
1683 // 0x60, /* 0110000 */
1684 // 0x60, /* 0110000 */
1685 // 0x60, /* 0110000 */
1686 // 0x66, /* 0110011 */
1687 // 0x3C, /* 0011110 */
1688 // 0x78, /* 0111100 */
1689
1690 // /*
1691 // * code=129, hex=0x81, ascii="!^A"
1692 // */
1693 // 0x66, /* 0110011 */
1694 // 0x66, /* 0110011 */
1695 // 0x00, /* 0000000 */
1696 // 0x66, /* 0110011 */
1697 // 0x66, /* 0110011 */
1698 // 0x66, /* 0110011 */
1699 // 0x66, /* 0110011 */
1700 // 0x3A, /* 0011101 */
1701 // 0x00, /* 0000000 */
1702
1703 // /*
1704 // * code=130, hex=0x82, ascii="!^B"
1705 // */
1706 // 0x0C, /* 0000110 */
1707 // 0x18, /* 0001100 */
1708 // 0x00, /* 0000000 */
1709 // 0x3E, /* 0011111 */
1710 // 0x62, /* 0110001 */
1711 // 0x7E, /* 0111111 */
1712 // 0x60, /* 0110000 */
1713 // 0x3E, /* 0011111 */
1714 // 0x00, /* 0000000 */
1715
1716 // /*
1717 // * code=131, hex=0x83, ascii="!^C"
1718 // */
1719 // 0x1C, /* 0001110 */
1720 // 0x36, /* 0011011 */
1721 // 0x00, /* 0000000 */
1722 // 0x3C, /* 0011110 */
1723 // 0x06, /* 0000011 */
1724 // 0x3E, /* 0011111 */
1725 // 0x66, /* 0110011 */
1726 // 0x3E, /* 0011111 */
1727 // 0x00, /* 0000000 */
1728
1729 // /*
1730 // * code=132, hex=0x84, ascii="!^D"
1731 // */
1732 // 0x36, /* 0011011 */
1733 // 0x36, /* 0011011 */
1734 // 0x00, /* 0000000 */
1735 // 0x3C, /* 0011110 */
1736 // 0x06, /* 0000011 */
1737 // 0x3E, /* 0011111 */
1738 // 0x66, /* 0110011 */
1739 // 0x3E, /* 0011111 */
1740 // 0x00, /* 0000000 */
1741
1742 // /*
1743 // * code=133, hex=0x85, ascii="!^E"
1744 // */
1745 // 0x18, /* 0001100 */
1746 // 0x0C, /* 0000110 */
1747 // 0x00, /* 0000000 */
1748 // 0x3C, /* 0011110 */
1749 // 0x06, /* 0000011 */
1750 // 0x3E, /* 0011111 */
1751 // 0x66, /* 0110011 */
1752 // 0x3A, /* 0011101 */
1753 // 0x00, /* 0000000 */
1754
1755 // /*
1756 // * code=134, hex=0x86, ascii="!^F"
1757 // */
1758 // 0x1C, /* 0001110 */
1759 // 0x14, /* 0001010 */
1760 // 0x00, /* 0000000 */
1761 // 0x3C, /* 0011110 */
1762 // 0x06, /* 0000011 */
1763 // 0x3E, /* 0011111 */
1764 // 0x66, /* 0110011 */
1765 // 0x3A, /* 0011101 */
1766 // 0x00, /* 0000000 */
1767
1768 // /*
1769 // * code=135, hex=0x87, ascii="!^G"
1770 // */
1771 // 0x00, /* 0000000 */
1772 // 0x00, /* 0000000 */
1773 // 0x00, /* 0000000 */
1774 // 0x1C, /* 0001110 */
1775 // 0x36, /* 0011011 */
1776 // 0x60, /* 0110000 */
1777 // 0x36, /* 0011011 */
1778 // 0x1C, /* 0001110 */
1779 // 0x78, /* 0111100 */
1780
1781 // /*
1782 // * code=136, hex=0x88, ascii="!^H"
1783 // */
1784 // 0x08, /* 0000100 */
1785 // 0x1C, /* 0001110 */
1786 // 0x00, /* 0000000 */
1787 // 0x3C, /* 0011110 */
1788 // 0x66, /* 0110011 */
1789 // 0x7E, /* 0111111 */
1790 // 0x60, /* 0110000 */
1791 // 0x3E, /* 0011111 */
1792 // 0x00, /* 0000000 */
1793
1794 // /*
1795 // * code=137, hex=0x89, ascii="!^I"
1796 // */
1797 // 0x66, /* 0110011 */
1798 // 0x66, /* 0110011 */
1799 // 0x00, /* 0000000 */
1800 // 0x3C, /* 0011110 */
1801 // 0x66, /* 0110011 */
1802 // 0x7E, /* 0111111 */
1803 // 0x60, /* 0110000 */
1804 // 0x3E, /* 0011111 */
1805 // 0x00, /* 0000000 */
1806
1807 // /*
1808 // * code=138, hex=0x8A, ascii="!^J"
1809 // */
1810 // 0x18, /* 0001100 */
1811 // 0x0C, /* 0000110 */
1812 // 0x00, /* 0000000 */
1813 // 0x3C, /* 0011110 */
1814 // 0x66, /* 0110011 */
1815 // 0x7E, /* 0111111 */
1816 // 0x60, /* 0110000 */
1817 // 0x3E, /* 0011111 */
1818 // 0x00, /* 0000000 */
1819
1820 // /*
1821 // * code=139, hex=0x8B, ascii="!^K"
1822 // */
1823 // 0x66, /* 0110011 */
1824 // 0x66, /* 0110011 */
1825 // 0x00, /* 0000000 */
1826 // 0x38, /* 0011100 */
1827 // 0x18, /* 0001100 */
1828 // 0x18, /* 0001100 */
1829 // 0x18, /* 0001100 */
1830 // 0x3C, /* 0011110 */
1831 // 0x00, /* 0000000 */
1832
1833 // /*
1834 // * code=140, hex=0x8C, ascii="!^L"
1835 // */
1836 // 0x10, /* 0001000 */
1837 // 0x38, /* 0011100 */
1838 // 0x00, /* 0000000 */
1839 // 0x38, /* 0011100 */
1840 // 0x18, /* 0001100 */
1841 // 0x18, /* 0001100 */
1842 // 0x18, /* 0001100 */
1843 // 0x3C, /* 0011110 */
1844 // 0x00, /* 0000000 */
1845
1846 // /*
1847 // * code=141, hex=0x8D, ascii="!^M"
1848 // */
1849 // 0x30, /* 0011000 */
1850 // 0x18, /* 0001100 */
1851 // 0x00, /* 0000000 */
1852 // 0x38, /* 0011100 */
1853 // 0x18, /* 0001100 */
1854 // 0x18, /* 0001100 */
1855 // 0x18, /* 0001100 */
1856 // 0x3C, /* 0011110 */
1857 // 0x00, /* 0000000 */
1858
1859 // /*
1860 // * code=142, hex=0x8E, ascii="!^N"
1861 // */
1862 // 0xC6, /* 1100011 */
1863 // 0x10, /* 0001000 */
1864 // 0x38, /* 0011100 */
1865 // 0x28, /* 0010100 */
1866 // 0x6C, /* 0110110 */
1867 // 0x7C, /* 0111110 */
1868 // 0xC6, /* 1100011 */
1869 // 0xC6, /* 1100011 */
1870 // 0x00, /* 0000000 */
1871
1872 // /*
1873 // * code=143, hex=0x8F, ascii="!^O"
1874 // */
1875 // 0x38, /* 0011100 */
1876 // 0x28, /* 0010100 */
1877 // 0x38, /* 0011100 */
1878 // 0x28, /* 0010100 */
1879 // 0x6C, /* 0110110 */
1880 // 0x7C, /* 0111110 */
1881 // 0xC6, /* 1100011 */
1882 // 0xC6, /* 1100011 */
1883 // 0x00, /* 0000000 */
1884
1885 // /*
1886 // * code=144, hex=0x90, ascii="!^P"
1887 // */
1888 // 0x1C, /* 0001110 */
1889 // 0x30, /* 0011000 */
1890 // 0x7E, /* 0111111 */
1891 // 0x60, /* 0110000 */
1892 // 0x7C, /* 0111110 */
1893 // 0x60, /* 0110000 */
1894 // 0x60, /* 0110000 */
1895 // 0x7E, /* 0111111 */
1896 // 0x00, /* 0000000 */
1897
1898 // /*
1899 // * code=145, hex=0x91, ascii="!^Q"
1900 // */
1901 // 0x00, /* 0000000 */
1902 // 0x00, /* 0000000 */
1903 // 0x00, /* 0000000 */
1904 // 0x7C, /* 0111110 */
1905 // 0x1A, /* 0001101 */
1906 // 0x7E, /* 0111111 */
1907 // 0xD8, /* 1101100 */
1908 // 0x7E, /* 0111111 */
1909 // 0x00, /* 0000000 */
1910
1911 // /*
1912 // * code=146, hex=0x92, ascii="!^R"
1913 // */
1914 // 0x00, /* 0000000 */
1915 // 0x1E, /* 0001111 */
1916 // 0x38, /* 0011100 */
1917 // 0x58, /* 0101100 */
1918 // 0x5E, /* 0101111 */
1919 // 0xF8, /* 1111100 */
1920 // 0xD8, /* 1101100 */
1921 // 0xDE, /* 1101111 */
1922 // 0x00, /* 0000000 */
1923
1924 // /*
1925 // * code=147, hex=0x93, ascii="!^S"
1926 // */
1927 // 0x10, /* 0001000 */
1928 // 0x38, /* 0011100 */
1929 // 0x00, /* 0000000 */
1930 // 0x3C, /* 0011110 */
1931 // 0x66, /* 0110011 */
1932 // 0x66, /* 0110011 */
1933 // 0x66, /* 0110011 */
1934 // 0x3C, /* 0011110 */
1935 // 0x00, /* 0000000 */
1936
1937 // /*
1938 // * code=148, hex=0x94, ascii="!^T"
1939 // */
1940 // 0x66, /* 0110011 */
1941 // 0x66, /* 0110011 */
1942 // 0x00, /* 0000000 */
1943 // 0x3C, /* 0011110 */
1944 // 0x66, /* 0110011 */
1945 // 0x66, /* 0110011 */
1946 // 0x66, /* 0110011 */
1947 // 0x3C, /* 0011110 */
1948 // 0x00, /* 0000000 */
1949
1950 // /*
1951 // * code=149, hex=0x95, ascii="!^U"
1952 // */
1953 // 0x18, /* 0001100 */
1954 // 0x0C, /* 0000110 */
1955 // 0x00, /* 0000000 */
1956 // 0x3C, /* 0011110 */
1957 // 0x66, /* 0110011 */
1958 // 0x66, /* 0110011 */
1959 // 0x66, /* 0110011 */
1960 // 0x3C, /* 0011110 */
1961 // 0x00, /* 0000000 */
1962
1963 // /*
1964 // * code=150, hex=0x96, ascii="!^V"
1965 // */
1966 // 0x08, /* 0000100 */
1967 // 0x1C, /* 0001110 */
1968 // 0x00, /* 0000000 */
1969 // 0x66, /* 0110011 */
1970 // 0x66, /* 0110011 */
1971 // 0x66, /* 0110011 */
1972 // 0x66, /* 0110011 */
1973 // 0x3A, /* 0011101 */
1974 // 0x00, /* 0000000 */
1975
1976 // /*
1977 // * code=151, hex=0x97, ascii="!^W"
1978 // */
1979 // 0x18, /* 0001100 */
1980 // 0x0C, /* 0000110 */
1981 // 0x00, /* 0000000 */
1982 // 0x66, /* 0110011 */
1983 // 0x66, /* 0110011 */
1984 // 0x66, /* 0110011 */
1985 // 0x66, /* 0110011 */
1986 // 0x3A, /* 0011101 */
1987 // 0x00, /* 0000000 */
1988
1989 // /*
1990 // * code=152, hex=0x98, ascii="!^X"
1991 // */
1992 // 0x66, /* 0110011 */
1993 // 0x66, /* 0110011 */
1994 // 0x00, /* 0000000 */
1995 // 0x66, /* 0110011 */
1996 // 0x66, /* 0110011 */
1997 // 0x36, /* 0011011 */
1998 // 0x1C, /* 0001110 */
1999 // 0x6C, /* 0110110 */
2000 // 0x38, /* 0011100 */
2001
2002 // /*
2003 // * code=153, hex=0x99, ascii="!^Y"
2004 // */
2005 // 0x66, /* 0110011 */
2006 // 0x00, /* 0000000 */
2007 // 0x3C, /* 0011110 */
2008 // 0x66, /* 0110011 */
2009 // 0x66, /* 0110011 */
2010 // 0x66, /* 0110011 */
2011 // 0x66, /* 0110011 */
2012 // 0x3C, /* 0011110 */
2013 // 0x00, /* 0000000 */
2014
2015 // /*
2016 // * code=154, hex=0x9A, ascii="!^Z"
2017 // */
2018 // 0x66, /* 0110011 */
2019 // 0x00, /* 0000000 */
2020 // 0x66, /* 0110011 */
2021 // 0x66, /* 0110011 */
2022 // 0x66, /* 0110011 */
2023 // 0x66, /* 0110011 */
2024 // 0x66, /* 0110011 */
2025 // 0x3C, /* 0011110 */
2026 // 0x00, /* 0000000 */
2027
2028 // /*
2029 // * code=155, hex=0x9B, ascii="!^["
2030 // */
2031 // 0x08, /* 0000100 */
2032 // 0x08, /* 0000100 */
2033 // 0x3C, /* 0011110 */
2034 // 0x60, /* 0110000 */
2035 // 0x60, /* 0110000 */
2036 // 0x3C, /* 0011110 */
2037 // 0x10, /* 0001000 */
2038 // 0x10, /* 0001000 */
2039 // 0x00, /* 0000000 */
2040
2041 // /*
2042 // * code=156, hex=0x9C, ascii="!^\"
2043 // */
2044 // 0x1C, /* 0001110 */
2045 // 0x36, /* 0011011 */
2046 // 0x30, /* 0011000 */
2047 // 0x30, /* 0011000 */
2048 // 0x7C, /* 0111110 */
2049 // 0x30, /* 0011000 */
2050 // 0x3C, /* 0011110 */
2051 // 0x66, /* 0110011 */
2052 // 0x00, /* 0000000 */
2053
2054 // /*
2055 // * code=157, hex=0x9D, ascii="!^]"
2056 // */
2057 // 0x66, /* 0110011 */
2058 // 0x66, /* 0110011 */
2059 // 0x3C, /* 0011110 */
2060 // 0x18, /* 0001100 */
2061 // 0x7E, /* 0111111 */
2062 // 0x18, /* 0001100 */
2063 // 0x7E, /* 0111111 */
2064 // 0x18, /* 0001100 */
2065 // 0x00, /* 0000000 */
2066
2067 // /*
2068 // * code=158, hex=0x9E, ascii="!^^"
2069 // */
2070 // 0xE0, /* 1110000 */
2071 // 0xD0, /* 1101000 */
2072 // 0xD0, /* 1101000 */
2073 // 0xF4, /* 1111010 */
2074 // 0xCC, /* 1100110 */
2075 // 0xDE, /* 1101111 */
2076 // 0xCC, /* 1100110 */
2077 // 0x06, /* 0000011 */
2078 // 0x00, /* 0000000 */
2079
2080 // /*
2081 // * code=159, hex=0x9F, ascii="!^_"
2082 // */
2083 // 0x0E, /* 0000111 */
2084 // 0x18, /* 0001100 */
2085 // 0x18, /* 0001100 */
2086 // 0x18, /* 0001100 */
2087 // 0x7E, /* 0111111 */
2088 // 0x18, /* 0001100 */
2089 // 0x18, /* 0001100 */
2090 // 0x18, /* 0001100 */
2091 // 0x70, /* 0111000 */
2092
2093 // /*
2094 // * code=160, hex=0xA0, ascii="! "
2095 // */
2096 // 0x06, /* 0000011 */
2097 // 0x0C, /* 0000110 */
2098 // 0x00, /* 0000000 */
2099 // 0x3C, /* 0011110 */
2100 // 0x06, /* 0000011 */
2101 // 0x3E, /* 0011111 */
2102 // 0x66, /* 0110011 */
2103 // 0x3A, /* 0011101 */
2104 // 0x00, /* 0000000 */
2105
2106 // /*
2107 // * code=161, hex=0xA1, ascii="!!"
2108 // */
2109 // 0x0C, /* 0000110 */
2110 // 0x18, /* 0001100 */
2111 // 0x00, /* 0000000 */
2112 // 0x38, /* 0011100 */
2113 // 0x18, /* 0001100 */
2114 // 0x18, /* 0001100 */
2115 // 0x18, /* 0001100 */
2116 // 0x3C, /* 0011110 */
2117 // 0x00, /* 0000000 */
2118
2119 // /*
2120 // * code=162, hex=0xA2, ascii="!""
2121 // */
2122 // 0x0C, /* 0000110 */
2123 // 0x18, /* 0001100 */
2124 // 0x00, /* 0000000 */
2125 // 0x3C, /* 0011110 */
2126 // 0x66, /* 0110011 */
2127 // 0x66, /* 0110011 */
2128 // 0x66, /* 0110011 */
2129 // 0x3C, /* 0011110 */
2130 // 0x00, /* 0000000 */
2131
2132 // /*
2133 // * code=163, hex=0xA3, ascii="!#"
2134 // */
2135 // 0x0C, /* 0000110 */
2136 // 0x18, /* 0001100 */
2137 // 0x00, /* 0000000 */
2138 // 0x66, /* 0110011 */
2139 // 0x66, /* 0110011 */
2140 // 0x66, /* 0110011 */
2141 // 0x66, /* 0110011 */
2142 // 0x3A, /* 0011101 */
2143 // 0x00, /* 0000000 */
2144
2145 // /*
2146 // * code=164, hex=0xA4, ascii="!$"
2147 // */
2148 // 0x76, /* 0111011 */
2149 // 0xDC, /* 1101110 */
2150 // 0x00, /* 0000000 */
2151 // 0x6C, /* 0110110 */
2152 // 0x76, /* 0111011 */
2153 // 0x66, /* 0110011 */
2154 // 0x66, /* 0110011 */
2155 // 0x66, /* 0110011 */
2156 // 0x00, /* 0000000 */
2157
2158 // /*
2159 // * code=165, hex=0xA5, ascii="!%"
2160 // */
2161 // 0x76, /* 0111011 */
2162 // 0xDC, /* 1101110 */
2163 // 0x00, /* 0000000 */
2164 // 0x66, /* 0110011 */
2165 // 0x76, /* 0111011 */
2166 // 0x7E, /* 0111111 */
2167 // 0x6E, /* 0110111 */
2168 // 0x66, /* 0110011 */
2169 // 0x00, /* 0000000 */
2170
2171 // /*
2172 // * code=166, hex=0xA6, ascii="!&"
2173 // */
2174 // 0x38, /* 0011100 */
2175 // 0x0C, /* 0000110 */
2176 // 0x3C, /* 0011110 */
2177 // 0x6C, /* 0110110 */
2178 // 0x34, /* 0011010 */
2179 // 0x00, /* 0000000 */
2180 // 0x7C, /* 0111110 */
2181 // 0x00, /* 0000000 */
2182 // 0x00, /* 0000000 */
2183
2184 // /*
2185 // * code=167, hex=0xA7, ascii="!'"
2186 // */
2187 // 0x3C, /* 0011110 */
2188 // 0x66, /* 0110011 */
2189 // 0x66, /* 0110011 */
2190 // 0x3C, /* 0011110 */
2191 // 0x00, /* 0000000 */
2192 // 0x7E, /* 0111111 */
2193 // 0x00, /* 0000000 */
2194 // 0x00, /* 0000000 */
2195 // 0x00, /* 0000000 */
2196
2197 // /*
2198 // * code=168, hex=0xA8, ascii="!("
2199 // */
2200 // 0x00, /* 0000000 */
2201 // 0x18, /* 0001100 */
2202 // 0x00, /* 0000000 */
2203 // 0x18, /* 0001100 */
2204 // 0x30, /* 0011000 */
2205 // 0x60, /* 0110000 */
2206 // 0x66, /* 0110011 */
2207 // 0x3C, /* 0011110 */
2208 // 0x00, /* 0000000 */
2209
2210 // /*
2211 // * code=169, hex=0xA9, ascii="!)"
2212 // */
2213 // 0x00, /* 0000000 */
2214 // 0x00, /* 0000000 */
2215 // 0x00, /* 0000000 */
2216 // 0x3C, /* 0011110 */
2217 // 0x3C, /* 0011110 */
2218 // 0x30, /* 0011000 */
2219 // 0x30, /* 0011000 */
2220 // 0x00, /* 0000000 */
2221 // 0x00, /* 0000000 */
2222
2223 // /*
2224 // * code=170, hex=0xAA, ascii="!*"
2225 // */
2226 // 0x00, /* 0000000 */
2227 // 0x00, /* 0000000 */
2228 // 0x00, /* 0000000 */
2229 // 0x7C, /* 0111110 */
2230 // 0x7C, /* 0111110 */
2231 // 0x0C, /* 0000110 */
2232 // 0x0C, /* 0000110 */
2233 // 0x00, /* 0000000 */
2234 // 0x00, /* 0000000 */
2235
2236 // /*
2237 // * code=171, hex=0xAB, ascii="!+"
2238 // */
2239 // 0x60, /* 0110000 */
2240 // 0x60, /* 0110000 */
2241 // 0x60, /* 0110000 */
2242 // 0x6E, /* 0110111 */
2243 // 0x1A, /* 0001101 */
2244 // 0x04, /* 0000010 */
2245 // 0x18, /* 0001100 */
2246 // 0x1E, /* 0001111 */
2247 // 0x00, /* 0000000 */
2248
2249 // /*
2250 // * code=172, hex=0xAC, ascii="!,"
2251 // */
2252 // 0x60, /* 0110000 */
2253 // 0x60, /* 0110000 */
2254 // 0x60, /* 0110000 */
2255 // 0x6C, /* 0110110 */
2256 // 0x7C, /* 0111110 */
2257 // 0x2C, /* 0010110 */
2258 // 0x7C, /* 0111110 */
2259 // 0x0C, /* 0000110 */
2260 // 0x00, /* 0000000 */
2261
2262 // /*
2263 // * code=173, hex=0xAD, ascii="!-"
2264 // */
2265 // 0x00, /* 0000000 */
2266 // 0x18, /* 0001100 */
2267 // 0x00, /* 0000000 */
2268 // 0x18, /* 0001100 */
2269 // 0x18, /* 0001100 */
2270 // 0x3C, /* 0011110 */
2271 // 0x3C, /* 0011110 */
2272 // 0x18, /* 0001100 */
2273 // 0x00, /* 0000000 */
2274
2275 // /*
2276 // * code=174, hex=0xAE, ascii="!."
2277 // */
2278 // 0x00, /* 0000000 */
2279 // 0x00, /* 0000000 */
2280 // 0x32, /* 0011001 */
2281 // 0x66, /* 0110011 */
2282 // 0xCC, /* 1100110 */
2283 // 0x66, /* 0110011 */
2284 // 0x32, /* 0011001 */
2285 // 0x00, /* 0000000 */
2286 // 0x00, /* 0000000 */
2287
2288 // /*
2289 // * code=175, hex=0xAF, ascii="!/"
2290 // */
2291 // 0x00, /* 0000000 */
2292 // 0x00, /* 0000000 */
2293 // 0xCC, /* 1100110 */
2294 // 0x66, /* 0110011 */
2295 // 0x32, /* 0011001 */
2296 // 0x66, /* 0110011 */
2297 // 0xCC, /* 1100110 */
2298 // 0x00, /* 0000000 */
2299 // 0x00, /* 0000000 */
2300
2301 // /*
2302 // * code=176, hex=0xB0, ascii="!0"
2303 // */
2304 // 0x54, /* 0101010 */
2305 // 0x00, /* 0000000 */
2306 // 0xAA, /* 1010101 */
2307 // 0x00, /* 0000000 */
2308 // 0x54, /* 0101010 */
2309 // 0x00, /* 0000000 */
2310 // 0xAA, /* 1010101 */
2311 // 0x00, /* 0000000 */
2312 // 0x54, /* 0101010 */
2313
2314 // /*
2315 // * code=177, hex=0xB1, ascii="!1"
2316 // */
2317 // 0x92, /* 1001001 */
2318 // 0x48, /* 0100100 */
2319 // 0x24, /* 0010010 */
2320 // 0x92, /* 1001001 */
2321 // 0x48, /* 0100100 */
2322 // 0x24, /* 0010010 */
2323 // 0x92, /* 1001001 */
2324 // 0x48, /* 0100100 */
2325 // 0x24, /* 0010010 */
2326
2327 // /*
2328 // * code=178, hex=0xB2, ascii="!2"
2329 // */
2330 // 0xAA, /* 1010101 */
2331 // 0x54, /* 0101010 */
2332 // 0xAA, /* 1010101 */
2333 // 0x54, /* 0101010 */
2334 // 0xAA, /* 1010101 */
2335 // 0x54, /* 0101010 */
2336 // 0xAA, /* 1010101 */
2337 // 0x54, /* 0101010 */
2338 // 0xAA, /* 1010101 */
2339
2340 // /*
2341 // * code=179, hex=0xB3, ascii="!3"
2342 // */
2343 // 0x10, /* 0001000 */
2344 // 0x10, /* 0001000 */
2345 // 0x10, /* 0001000 */
2346 // 0x10, /* 0001000 */
2347 // 0x10, /* 0001000 */
2348 // 0x10, /* 0001000 */
2349 // 0x10, /* 0001000 */
2350 // 0x10, /* 0001000 */
2351 // 0x10, /* 0001000 */
2352
2353 // /*
2354 // * code=180, hex=0xB4, ascii="!4"
2355 // */
2356 // 0x10, /* 0001000 */
2357 // 0x10, /* 0001000 */
2358 // 0x10, /* 0001000 */
2359 // 0x10, /* 0001000 */
2360 // 0xF0, /* 1111000 */
2361 // 0x10, /* 0001000 */
2362 // 0x10, /* 0001000 */
2363 // 0x10, /* 0001000 */
2364 // 0x10, /* 0001000 */
2365
2366 // /*
2367 // * code=181, hex=0xB5, ascii="!5"
2368 // */
2369 // 0x10, /* 0001000 */
2370 // 0x10, /* 0001000 */
2371 // 0x10, /* 0001000 */
2372 // 0xF0, /* 1111000 */
2373 // 0x10, /* 0001000 */
2374 // 0xF0, /* 1111000 */
2375 // 0x10, /* 0001000 */
2376 // 0x10, /* 0001000 */
2377 // 0x10, /* 0001000 */
2378
2379 // /*
2380 // * code=182, hex=0xB6, ascii="!6"
2381 // */
2382 // 0x28, /* 0010100 */
2383 // 0x28, /* 0010100 */
2384 // 0x28, /* 0010100 */
2385 // 0x28, /* 0010100 */
2386 // 0xE8, /* 1110100 */
2387 // 0x28, /* 0010100 */
2388 // 0x28, /* 0010100 */
2389 // 0x28, /* 0010100 */
2390 // 0x28, /* 0010100 */
2391
2392 // /*
2393 // * code=183, hex=0xB7, ascii="!7"
2394 // */
2395 // 0x00, /* 0000000 */
2396 // 0x00, /* 0000000 */
2397 // 0x00, /* 0000000 */
2398 // 0x00, /* 0000000 */
2399 // 0xF8, /* 1111100 */
2400 // 0x28, /* 0010100 */
2401 // 0x28, /* 0010100 */
2402 // 0x28, /* 0010100 */
2403 // 0x28, /* 0010100 */
2404
2405 // /*
2406 // * code=184, hex=0xB8, ascii="!8"
2407 // */
2408 // 0x00, /* 0000000 */
2409 // 0x00, /* 0000000 */
2410 // 0x00, /* 0000000 */
2411 // 0xF0, /* 1111000 */
2412 // 0x10, /* 0001000 */
2413 // 0xF0, /* 1111000 */
2414 // 0x10, /* 0001000 */
2415 // 0x10, /* 0001000 */
2416 // 0x10, /* 0001000 */
2417
2418 // /*
2419 // * code=185, hex=0xB9, ascii="!9"
2420 // */
2421 // 0x28, /* 0010100 */
2422 // 0x28, /* 0010100 */
2423 // 0x28, /* 0010100 */
2424 // 0xE8, /* 1110100 */
2425 // 0x08, /* 0000100 */
2426 // 0xE8, /* 1110100 */
2427 // 0x28, /* 0010100 */
2428 // 0x28, /* 0010100 */
2429 // 0x28, /* 0010100 */
2430
2431 // /*
2432 // * code=186, hex=0xBA, ascii="!:"
2433 // */
2434 // 0x28, /* 0010100 */
2435 // 0x28, /* 0010100 */
2436 // 0x28, /* 0010100 */
2437 // 0x28, /* 0010100 */
2438 // 0x28, /* 0010100 */
2439 // 0x28, /* 0010100 */
2440 // 0x28, /* 0010100 */
2441 // 0x28, /* 0010100 */
2442 // 0x28, /* 0010100 */
2443
2444 // /*
2445 // * code=187, hex=0xBB, ascii="!;"
2446 // */
2447 // 0x00, /* 0000000 */
2448 // 0x00, /* 0000000 */
2449 // 0x00, /* 0000000 */
2450 // 0xF8, /* 1111100 */
2451 // 0x08, /* 0000100 */
2452 // 0xE8, /* 1110100 */
2453 // 0x28, /* 0010100 */
2454 // 0x28, /* 0010100 */
2455 // 0x28, /* 0010100 */
2456
2457 // /*
2458 // * code=188, hex=0xBC, ascii="!<"
2459 // */
2460 // 0x28, /* 0010100 */
2461 // 0x28, /* 0010100 */
2462 // 0x28, /* 0010100 */
2463 // 0xE8, /* 1110100 */
2464 // 0x08, /* 0000100 */
2465 // 0xF8, /* 1111100 */
2466 // 0x00, /* 0000000 */
2467 // 0x00, /* 0000000 */
2468 // 0x00, /* 0000000 */
2469
2470 // /*
2471 // * code=189, hex=0xBD, ascii="!="
2472 // */
2473 // 0x28, /* 0010100 */
2474 // 0x28, /* 0010100 */
2475 // 0x28, /* 0010100 */
2476 // 0x28, /* 0010100 */
2477 // 0xF8, /* 1111100 */
2478 // 0x00, /* 0000000 */
2479 // 0x00, /* 0000000 */
2480 // 0x00, /* 0000000 */
2481 // 0x00, /* 0000000 */
2482
2483 // /*
2484 // * code=190, hex=0xBE, ascii="!>"
2485 // */
2486 // 0x10, /* 0001000 */
2487 // 0x10, /* 0001000 */
2488 // 0x10, /* 0001000 */
2489 // 0xF0, /* 1111000 */
2490 // 0x10, /* 0001000 */
2491 // 0xF0, /* 1111000 */
2492 // 0x00, /* 0000000 */
2493 // 0x00, /* 0000000 */
2494 // 0x00, /* 0000000 */
2495
2496 // /*
2497 // * code=191, hex=0xBF, ascii="!?"
2498 // */
2499 // 0x00, /* 0000000 */
2500 // 0x00, /* 0000000 */
2501 // 0x00, /* 0000000 */
2502 // 0x00, /* 0000000 */
2503 // 0xF0, /* 1111000 */
2504 // 0x10, /* 0001000 */
2505 // 0x10, /* 0001000 */
2506 // 0x10, /* 0001000 */
2507 // 0x10, /* 0001000 */
2508
2509 // /*
2510 // * code=192, hex=0xC0, ascii="!@"
2511 // */
2512 // 0x10, /* 0001000 */
2513 // 0x10, /* 0001000 */
2514 // 0x10, /* 0001000 */
2515 // 0x10, /* 0001000 */
2516 // 0x1E, /* 0001111 */
2517 // 0x00, /* 0000000 */
2518 // 0x00, /* 0000000 */
2519 // 0x00, /* 0000000 */
2520 // 0x00, /* 0000000 */
2521
2522 // /*
2523 // * code=193, hex=0xC1, ascii="!A"
2524 // */
2525 // 0x10, /* 0001000 */
2526 // 0x10, /* 0001000 */
2527 // 0x10, /* 0001000 */
2528 // 0x10, /* 0001000 */
2529 // 0xFE, /* 1111111 */
2530 // 0x00, /* 0000000 */
2531 // 0x00, /* 0000000 */
2532 // 0x00, /* 0000000 */
2533 // 0x00, /* 0000000 */
2534
2535 // /*
2536 // * code=194, hex=0xC2, ascii="!B"
2537 // */
2538 // 0x00, /* 0000000 */
2539 // 0x00, /* 0000000 */
2540 // 0x00, /* 0000000 */
2541 // 0x00, /* 0000000 */
2542 // 0xFE, /* 1111111 */
2543 // 0x10, /* 0001000 */
2544 // 0x10, /* 0001000 */
2545 // 0x10, /* 0001000 */
2546 // 0x10, /* 0001000 */
2547
2548 // /*
2549 // * code=195, hex=0xC3, ascii="!C"
2550 // */
2551 // 0x10, /* 0001000 */
2552 // 0x10, /* 0001000 */
2553 // 0x10, /* 0001000 */
2554 // 0x10, /* 0001000 */
2555 // 0x1E, /* 0001111 */
2556 // 0x10, /* 0001000 */
2557 // 0x10, /* 0001000 */
2558 // 0x10, /* 0001000 */
2559 // 0x10, /* 0001000 */
2560
2561 // /*
2562 // * code=196, hex=0xC4, ascii="!D"
2563 // */
2564 // 0x00, /* 0000000 */
2565 // 0x00, /* 0000000 */
2566 // 0x00, /* 0000000 */
2567 // 0x00, /* 0000000 */
2568 // 0xFE, /* 1111111 */
2569 // 0x00, /* 0000000 */
2570 // 0x00, /* 0000000 */
2571 // 0x00, /* 0000000 */
2572 // 0x00, /* 0000000 */
2573
2574 // /*
2575 // * code=197, hex=0xC5, ascii="!E"
2576 // */
2577 // 0x10, /* 0001000 */
2578 // 0x10, /* 0001000 */
2579 // 0x10, /* 0001000 */
2580 // 0x10, /* 0001000 */
2581 // 0xFE, /* 1111111 */
2582 // 0x10, /* 0001000 */
2583 // 0x10, /* 0001000 */
2584 // 0x10, /* 0001000 */
2585 // 0x10, /* 0001000 */
2586
2587 // /*
2588 // * code=198, hex=0xC6, ascii="!F"
2589 // */
2590 // 0x10, /* 0001000 */
2591 // 0x10, /* 0001000 */
2592 // 0x10, /* 0001000 */
2593 // 0x1E, /* 0001111 */
2594 // 0x10, /* 0001000 */
2595 // 0x1E, /* 0001111 */
2596 // 0x10, /* 0001000 */
2597 // 0x10, /* 0001000 */
2598 // 0x10, /* 0001000 */
2599
2600 // /*
2601 // * code=199, hex=0xC7, ascii="!G"
2602 // */
2603 // 0x28, /* 0010100 */
2604 // 0x28, /* 0010100 */
2605 // 0x28, /* 0010100 */
2606 // 0x28, /* 0010100 */
2607 // 0x2E, /* 0010111 */
2608 // 0x28, /* 0010100 */
2609 // 0x28, /* 0010100 */
2610 // 0x28, /* 0010100 */
2611 // 0x28, /* 0010100 */
2612
2613 // /*
2614 // * code=200, hex=0xC8, ascii="!H"
2615 // */
2616 // 0x28, /* 0010100 */
2617 // 0x28, /* 0010100 */
2618 // 0x28, /* 0010100 */
2619 // 0x2E, /* 0010111 */
2620 // 0x20, /* 0010000 */
2621 // 0x3E, /* 0011111 */
2622 // 0x00, /* 0000000 */
2623 // 0x00, /* 0000000 */
2624 // 0x00, /* 0000000 */
2625
2626 // /*
2627 // * code=201, hex=0xC9, ascii="!I"
2628 // */
2629 // 0x00, /* 0000000 */
2630 // 0x00, /* 0000000 */
2631 // 0x00, /* 0000000 */
2632 // 0x3E, /* 0011111 */
2633 // 0x20, /* 0010000 */
2634 // 0x2E, /* 0010111 */
2635 // 0x28, /* 0010100 */
2636 // 0x28, /* 0010100 */
2637 // 0x28, /* 0010100 */
2638
2639 // /*
2640 // * code=202, hex=0xCA, ascii="!J"
2641 // */
2642 // 0x28, /* 0010100 */
2643 // 0x28, /* 0010100 */
2644 // 0x28, /* 0010100 */
2645 // 0xEE, /* 1110111 */
2646 // 0x00, /* 0000000 */
2647 // 0xFE, /* 1111111 */
2648 // 0x00, /* 0000000 */
2649 // 0x00, /* 0000000 */
2650 // 0x00, /* 0000000 */
2651
2652 // /*
2653 // * code=203, hex=0xCB, ascii="!K"
2654 // */
2655 // 0x00, /* 0000000 */
2656 // 0x00, /* 0000000 */
2657 // 0x00, /* 0000000 */
2658 // 0xFE, /* 1111111 */
2659 // 0x00, /* 0000000 */
2660 // 0xEE, /* 1110111 */
2661 // 0x28, /* 0010100 */
2662 // 0x28, /* 0010100 */
2663 // 0x28, /* 0010100 */
2664
2665 // /*
2666 // * code=204, hex=0xCC, ascii="!L"
2667 // */
2668 // 0x28, /* 0010100 */
2669 // 0x28, /* 0010100 */
2670 // 0x28, /* 0010100 */
2671 // 0x2E, /* 0010111 */
2672 // 0x20, /* 0010000 */
2673 // 0x2E, /* 0010111 */
2674 // 0x28, /* 0010100 */
2675 // 0x28, /* 0010100 */
2676 // 0x28, /* 0010100 */
2677
2678 // /*
2679 // * code=205, hex=0xCD, ascii="!M"
2680 // */
2681 // 0x00, /* 0000000 */
2682 // 0x00, /* 0000000 */
2683 // 0x00, /* 0000000 */
2684 // 0xFE, /* 1111111 */
2685 // 0x00, /* 0000000 */
2686 // 0xFE, /* 1111111 */
2687 // 0x00, /* 0000000 */
2688 // 0x00, /* 0000000 */
2689 // 0x00, /* 0000000 */
2690
2691 // /*
2692 // * code=206, hex=0xCE, ascii="!N"
2693 // */
2694 // 0x28, /* 0010100 */
2695 // 0x28, /* 0010100 */
2696 // 0x28, /* 0010100 */
2697 // 0xEE, /* 1110111 */
2698 // 0x00, /* 0000000 */
2699 // 0xEE, /* 1110111 */
2700 // 0x28, /* 0010100 */
2701 // 0x28, /* 0010100 */
2702 // 0x28, /* 0010100 */
2703
2704 // /*
2705 // * code=207, hex=0xCF, ascii="!O"
2706 // */
2707 // 0x10, /* 0001000 */
2708 // 0x10, /* 0001000 */
2709 // 0x10, /* 0001000 */
2710 // 0xFE, /* 1111111 */
2711 // 0x00, /* 0000000 */
2712 // 0xFE, /* 1111111 */
2713 // 0x00, /* 0000000 */
2714 // 0x00, /* 0000000 */
2715 // 0x00, /* 0000000 */
2716
2717 // /*
2718 // * code=208, hex=0xD0, ascii="!P"
2719 // */
2720 // 0x28, /* 0010100 */
2721 // 0x28, /* 0010100 */
2722 // 0x28, /* 0010100 */
2723 // 0x28, /* 0010100 */
2724 // 0xF8, /* 1111100 */
2725 // 0x00, /* 0000000 */
2726 // 0x00, /* 0000000 */
2727 // 0x00, /* 0000000 */
2728 // 0x00, /* 0000000 */
2729
2730 // /*
2731 // * code=209, hex=0xD1, ascii="!Q"
2732 // */
2733 // 0x00, /* 0000000 */
2734 // 0x00, /* 0000000 */
2735 // 0x00, /* 0000000 */
2736 // 0xFE, /* 1111111 */
2737 // 0x00, /* 0000000 */
2738 // 0xFE, /* 1111111 */
2739 // 0x10, /* 0001000 */
2740 // 0x10, /* 0001000 */
2741 // 0x10, /* 0001000 */
2742
2743 // /*
2744 // * code=210, hex=0xD2, ascii="!R"
2745 // */
2746 // 0x00, /* 0000000 */
2747 // 0x00, /* 0000000 */
2748 // 0x00, /* 0000000 */
2749 // 0x00, /* 0000000 */
2750 // 0xF8, /* 1111100 */
2751 // 0x28, /* 0010100 */
2752 // 0x28, /* 0010100 */
2753 // 0x28, /* 0010100 */
2754 // 0x28, /* 0010100 */
2755
2756 // /*
2757 // * code=211, hex=0xD3, ascii="!S"
2758 // */
2759 // 0x28, /* 0010100 */
2760 // 0x28, /* 0010100 */
2761 // 0x28, /* 0010100 */
2762 // 0x28, /* 0010100 */
2763 // 0x3E, /* 0011111 */
2764 // 0x00, /* 0000000 */
2765 // 0x00, /* 0000000 */
2766 // 0x00, /* 0000000 */
2767 // 0x00, /* 0000000 */
2768
2769 // /*
2770 // * code=212, hex=0xD4, ascii="!T"
2771 // */
2772 // 0x10, /* 0001000 */
2773 // 0x10, /* 0001000 */
2774 // 0x10, /* 0001000 */
2775 // 0x1E, /* 0001111 */
2776 // 0x10, /* 0001000 */
2777 // 0x1E, /* 0001111 */
2778 // 0x00, /* 0000000 */
2779 // 0x00, /* 0000000 */
2780 // 0x00, /* 0000000 */
2781
2782 // /*
2783 // * code=213, hex=0xD5, ascii="!U"
2784 // */
2785 // 0x00, /* 0000000 */
2786 // 0x00, /* 0000000 */
2787 // 0x00, /* 0000000 */
2788 // 0x1E, /* 0001111 */
2789 // 0x10, /* 0001000 */
2790 // 0x1E, /* 0001111 */
2791 // 0x10, /* 0001000 */
2792 // 0x10, /* 0001000 */
2793 // 0x10, /* 0001000 */
2794
2795 // /*
2796 // * code=214, hex=0xD6, ascii="!V"
2797 // */
2798 // 0x00, /* 0000000 */
2799 // 0x00, /* 0000000 */
2800 // 0x00, /* 0000000 */
2801 // 0x00, /* 0000000 */
2802 // 0x3E, /* 0011111 */
2803 // 0x28, /* 0010100 */
2804 // 0x28, /* 0010100 */
2805 // 0x28, /* 0010100 */
2806 // 0x28, /* 0010100 */
2807
2808 // /*
2809 // * code=215, hex=0xD7, ascii="!W"
2810 // */
2811 // 0x28, /* 0010100 */
2812 // 0x28, /* 0010100 */
2813 // 0x28, /* 0010100 */
2814 // 0x28, /* 0010100 */
2815 // 0xE8, /* 1110100 */
2816 // 0x28, /* 0010100 */
2817 // 0x28, /* 0010100 */
2818 // 0x28, /* 0010100 */
2819 // 0x28, /* 0010100 */
2820
2821 // /*
2822 // * code=216, hex=0xD8, ascii="!X"
2823 // */
2824 // 0x10, /* 0001000 */
2825 // 0x10, /* 0001000 */
2826 // 0x10, /* 0001000 */
2827 // 0xFE, /* 1111111 */
2828 // 0x10, /* 0001000 */
2829 // 0xFE, /* 1111111 */
2830 // 0x10, /* 0001000 */
2831 // 0x10, /* 0001000 */
2832 // 0x10, /* 0001000 */
2833
2834 // /*
2835 // * code=217, hex=0xD9, ascii="!Y"
2836 // */
2837 // 0x10, /* 0001000 */
2838 // 0x10, /* 0001000 */
2839 // 0x10, /* 0001000 */
2840 // 0x10, /* 0001000 */
2841 // 0xF0, /* 1111000 */
2842 // 0x00, /* 0000000 */
2843 // 0x00, /* 0000000 */
2844 // 0x00, /* 0000000 */
2845 // 0x00, /* 0000000 */
2846
2847 // /*
2848 // * code=218, hex=0xDA, ascii="!Z"
2849 // */
2850 // 0x00, /* 0000000 */
2851 // 0x00, /* 0000000 */
2852 // 0x00, /* 0000000 */
2853 // 0x00, /* 0000000 */
2854 // 0x1E, /* 0001111 */
2855 // 0x10, /* 0001000 */
2856 // 0x10, /* 0001000 */
2857 // 0x10, /* 0001000 */
2858 // 0x10, /* 0001000 */
2859
2860 // /*
2861 // * code=219, hex=0xDB, ascii="!["
2862 // */
2863 // 0xFE, /* 1111111 */
2864 // 0xFE, /* 1111111 */
2865 // 0xFE, /* 1111111 */
2866 // 0xFE, /* 1111111 */
2867 // 0xFE, /* 1111111 */
2868 // 0xFE, /* 1111111 */
2869 // 0xFE, /* 1111111 */
2870 // 0xFE, /* 1111111 */
2871 // 0xFE, /* 1111111 */
2872
2873 // /*
2874 // * code=220, hex=0xDC, ascii="!\"
2875 // */
2876 // 0x00, /* 0000000 */
2877 // 0x00, /* 0000000 */
2878 // 0x00, /* 0000000 */
2879 // 0x00, /* 0000000 */
2880 // 0x00, /* 0000000 */
2881 // 0xFE, /* 1111111 */
2882 // 0xFE, /* 1111111 */
2883 // 0xFE, /* 1111111 */
2884 // 0xFE, /* 1111111 */
2885
2886 // /*
2887 // * code=221, hex=0xDD, ascii="!]"
2888 // */
2889 // 0xF0, /* 1111000 */
2890 // 0xF0, /* 1111000 */
2891 // 0xF0, /* 1111000 */
2892 // 0xF0, /* 1111000 */
2893 // 0xF0, /* 1111000 */
2894 // 0xF0, /* 1111000 */
2895 // 0xF0, /* 1111000 */
2896 // 0xF0, /* 1111000 */
2897 // 0xF0, /* 1111000 */
2898
2899 // /*
2900 // * code=222, hex=0xDE, ascii="!^"
2901 // */
2902 // 0x0E, /* 0000111 */
2903 // 0x0E, /* 0000111 */
2904 // 0x0E, /* 0000111 */
2905 // 0x0E, /* 0000111 */
2906 // 0x0E, /* 0000111 */
2907 // 0x0E, /* 0000111 */
2908 // 0x0E, /* 0000111 */
2909 // 0x0E, /* 0000111 */
2910 // 0x0E, /* 0000111 */
2911
2912 // /*
2913 // * code=223, hex=0xDF, ascii="!_"
2914 // */
2915 // 0xFE, /* 1111111 */
2916 // 0xFE, /* 1111111 */
2917 // 0xFE, /* 1111111 */
2918 // 0xFE, /* 1111111 */
2919 // 0xFE, /* 1111111 */
2920 // 0x00, /* 0000000 */
2921 // 0x00, /* 0000000 */
2922 // 0x00, /* 0000000 */
2923 // 0x00, /* 0000000 */
2924
2925 // /*
2926 // * code=224, hex=0xE0, ascii="!`"
2927 // */
2928 // 0x00, /* 0000000 */
2929 // 0x34, /* 0011010 */
2930 // 0x68, /* 0110100 */
2931 // 0x68, /* 0110100 */
2932 // 0x68, /* 0110100 */
2933 // 0x34, /* 0011010 */
2934 // 0x00, /* 0000000 */
2935 // 0x00, /* 0000000 */
2936 // 0x00, /* 0000000 */
2937
2938 // /*
2939 // * code=225, hex=0xE1, ascii="!a"
2940 // */
2941 // 0x7C, /* 0111110 */
2942 // 0x66, /* 0110011 */
2943 // 0x66, /* 0110011 */
2944 // 0x6C, /* 0110110 */
2945 // 0x66, /* 0110011 */
2946 // 0x62, /* 0110001 */
2947 // 0x66, /* 0110011 */
2948 // 0x6C, /* 0110110 */
2949 // 0x08, /* 0000100 */
2950
2951 // /*
2952 // * code=226, hex=0xE2, ascii="!b"
2953 // */
2954 // 0x00, /* 0000000 */
2955 // 0x7E, /* 0111111 */
2956 // 0x62, /* 0110001 */
2957 // 0x60, /* 0110000 */
2958 // 0x60, /* 0110000 */
2959 // 0x60, /* 0110000 */
2960 // 0x60, /* 0110000 */
2961 // 0x60, /* 0110000 */
2962 // 0x00, /* 0000000 */
2963
2964 // /*
2965 // * code=227, hex=0xE3, ascii="!c"
2966 // */
2967 // 0x00, /* 0000000 */
2968 // 0x00, /* 0000000 */
2969 // 0x6C, /* 0110110 */
2970 // 0xFE, /* 1111111 */
2971 // 0xF6, /* 1111011 */
2972 // 0x66, /* 0110011 */
2973 // 0x6C, /* 0110110 */
2974 // 0x6C, /* 0110110 */
2975 // 0x00, /* 0000000 */
2976
2977 // /*
2978 // * code=228, hex=0xE4, ascii="!d"
2979 // */
2980 // 0x00, /* 0000000 */
2981 // 0xFE, /* 1111111 */
2982 // 0xC6, /* 1100011 */
2983 // 0x60, /* 0110000 */
2984 // 0x38, /* 0011100 */
2985 // 0x30, /* 0011000 */
2986 // 0x66, /* 0110011 */
2987 // 0xFE, /* 1111111 */
2988 // 0x00, /* 0000000 */
2989
2990 // /*
2991 // * code=229, hex=0xE5, ascii="!e"
2992 // */
2993 // 0x00, /* 0000000 */
2994 // 0x00, /* 0000000 */
2995 // 0x00, /* 0000000 */
2996 // 0x3E, /* 0011111 */
2997 // 0x6C, /* 0110110 */
2998 // 0x6C, /* 0110110 */
2999 // 0x6C, /* 0110110 */
3000 // 0x38, /* 0011100 */
3001 // 0x00, /* 0000000 */
3002
3003 // /*
3004 // * code=230, hex=0xE6, ascii="!f"
3005 // */
3006 // 0x00, /* 0000000 */
3007 // 0x00, /* 0000000 */
3008 // 0x00, /* 0000000 */
3009 // 0x36, /* 0011011 */
3010 // 0x36, /* 0011011 */
3011 // 0x36, /* 0011011 */
3012 // 0x3E, /* 0011111 */
3013 // 0x62, /* 0110001 */
3014 // 0x40, /* 0100000 */
3015
3016 // /*
3017 // * code=231, hex=0xE7, ascii="!g"
3018 // */
3019 // 0x00, /* 0000000 */
3020 // 0x00, /* 0000000 */
3021 // 0x7A, /* 0111101 */
3022 // 0x6A, /* 0110101 */
3023 // 0x0E, /* 0000111 */
3024 // 0x0C, /* 0000110 */
3025 // 0x18, /* 0001100 */
3026 // 0x18, /* 0001100 */
3027 // 0x00, /* 0000000 */
3028
3029 // /*
3030 // * code=232, hex=0xE8, ascii="!h"
3031 // */
3032 // 0x3C, /* 0011110 */
3033 // 0x18, /* 0001100 */
3034 // 0x3C, /* 0011110 */
3035 // 0x66, /* 0110011 */
3036 // 0x66, /* 0110011 */
3037 // 0x3C, /* 0011110 */
3038 // 0x18, /* 0001100 */
3039 // 0x3C, /* 0011110 */
3040 // 0x00, /* 0000000 */
3041
3042 // /*
3043 // * code=233, hex=0xE9, ascii="!i"
3044 // */
3045 // 0x00, /* 0000000 */
3046 // 0x3C, /* 0011110 */
3047 // 0x66, /* 0110011 */
3048 // 0x66, /* 0110011 */
3049 // 0x7E, /* 0111111 */
3050 // 0x66, /* 0110011 */
3051 // 0x66, /* 0110011 */
3052 // 0x3C, /* 0011110 */
3053 // 0x00, /* 0000000 */
3054
3055 // /*
3056 // * code=234, hex=0xEA, ascii="!j"
3057 // */
3058 // 0x00, /* 0000000 */
3059 // 0x3C, /* 0011110 */
3060 // 0x66, /* 0110011 */
3061 // 0x66, /* 0110011 */
3062 // 0x66, /* 0110011 */
3063 // 0x66, /* 0110011 */
3064 // 0x24, /* 0010010 */
3065 // 0x66, /* 0110011 */
3066 // 0x00, /* 0000000 */
3067
3068 // /*
3069 // * code=235, hex=0xEB, ascii="!k"
3070 // */
3071 // 0x00, /* 0000000 */
3072 // 0x3C, /* 0011110 */
3073 // 0x60, /* 0110000 */
3074 // 0x30, /* 0011000 */
3075 // 0x18, /* 0001100 */
3076 // 0x3C, /* 0011110 */
3077 // 0x66, /* 0110011 */
3078 // 0x3C, /* 0011110 */
3079 // 0x00, /* 0000000 */
3080
3081 // /*
3082 // * code=236, hex=0xEC, ascii="!l"
3083 // */
3084 // 0x00, /* 0000000 */
3085 // 0x00, /* 0000000 */
3086 // 0x00, /* 0000000 */
3087 // 0x34, /* 0011010 */
3088 // 0x4A, /* 0100101 */
3089 // 0x4A, /* 0100101 */
3090 // 0x4A, /* 0100101 */
3091 // 0x34, /* 0011010 */
3092 // 0x00, /* 0000000 */
3093
3094 // /*
3095 // * code=237, hex=0xED, ascii="!m"
3096 // */
3097 // 0x04, /* 0000010 */
3098 // 0x3C, /* 0011110 */
3099 // 0x66, /* 0110011 */
3100 // 0x6E, /* 0110111 */
3101 // 0x76, /* 0111011 */
3102 // 0x66, /* 0110011 */
3103 // 0x3C, /* 0011110 */
3104 // 0x10, /* 0001000 */
3105 // 0x20, /* 0010000 */
3106
3107 // /*
3108 // * code=238, hex=0xEE, ascii="!n"
3109 // */
3110 // 0x1E, /* 0001111 */
3111 // 0x30, /* 0011000 */
3112 // 0x60, /* 0110000 */
3113 // 0x60, /* 0110000 */
3114 // 0x7E, /* 0111111 */
3115 // 0x60, /* 0110000 */
3116 // 0x30, /* 0011000 */
3117 // 0x1E, /* 0001111 */
3118 // 0x00, /* 0000000 */
3119
3120 // /*
3121 // * code=239, hex=0xEF, ascii="!o"
3122 // */
3123 // 0x00, /* 0000000 */
3124 // 0x00, /* 0000000 */
3125 // 0x3C, /* 0011110 */
3126 // 0x66, /* 0110011 */
3127 // 0x66, /* 0110011 */
3128 // 0x66, /* 0110011 */
3129 // 0x66, /* 0110011 */
3130 // 0x66, /* 0110011 */
3131 // 0x00, /* 0000000 */
3132
3133 // /*
3134 // * code=240, hex=0xF0, ascii="!p"
3135 // */
3136 // 0x00, /* 0000000 */
3137 // 0x7C, /* 0111110 */
3138 // 0x00, /* 0000000 */
3139 // 0x00, /* 0000000 */
3140 // 0x7C, /* 0111110 */
3141 // 0x00, /* 0000000 */
3142 // 0x00, /* 0000000 */
3143 // 0x7C, /* 0111110 */
3144 // 0x00, /* 0000000 */
3145
3146 // /*
3147 // * code=241, hex=0xF1, ascii="!q"
3148 // */
3149 // 0x00, /* 0000000 */
3150 // 0x18, /* 0001100 */
3151 // 0x18, /* 0001100 */
3152 // 0x7E, /* 0111111 */
3153 // 0x18, /* 0001100 */
3154 // 0x18, /* 0001100 */
3155 // 0x00, /* 0000000 */
3156 // 0x7E, /* 0111111 */
3157 // 0x00, /* 0000000 */
3158
3159 // /*
3160 // * code=242, hex=0xF2, ascii="!r"
3161 // */
3162 // 0x00, /* 0000000 */
3163 // 0x30, /* 0011000 */
3164 // 0x18, /* 0001100 */
3165 // 0x0C, /* 0000110 */
3166 // 0x18, /* 0001100 */
3167 // 0x30, /* 0011000 */
3168 // 0x00, /* 0000000 */
3169 // 0x3C, /* 0011110 */
3170 // 0x00, /* 0000000 */
3171
3172 // /*
3173 // * code=243, hex=0xF3, ascii="!s"
3174 // */
3175 // 0x00, /* 0000000 */
3176 // 0x0C, /* 0000110 */
3177 // 0x18, /* 0001100 */
3178 // 0x30, /* 0011000 */
3179 // 0x18, /* 0001100 */
3180 // 0x0C, /* 0000110 */
3181 // 0x00, /* 0000000 */
3182 // 0x3C, /* 0011110 */
3183 // 0x00, /* 0000000 */
3184
3185 // /*
3186 // * code=244, hex=0xF4, ascii="!t"
3187 // */
3188 // 0x0C, /* 0000110 */
3189 // 0x1A, /* 0001101 */
3190 // 0x18, /* 0001100 */
3191 // 0x18, /* 0001100 */
3192 // 0x18, /* 0001100 */
3193 // 0x18, /* 0001100 */
3194 // 0x18, /* 0001100 */
3195 // 0x18, /* 0001100 */
3196 // 0x18, /* 0001100 */
3197
3198 // /*
3199 // * code=245, hex=0xF5, ascii="!u"
3200 // */
3201 // 0x18, /* 0001100 */
3202 // 0x18, /* 0001100 */
3203 // 0x18, /* 0001100 */
3204 // 0x18, /* 0001100 */
3205 // 0x18, /* 0001100 */
3206 // 0x18, /* 0001100 */
3207 // 0x18, /* 0001100 */
3208 // 0x58, /* 0101100 */
3209 // 0x30, /* 0011000 */
3210
3211 // /*
3212 // * code=246, hex=0xF6, ascii="!v"
3213 // */
3214 // 0x00, /* 0000000 */
3215 // 0x18, /* 0001100 */
3216 // 0x18, /* 0001100 */
3217 // 0x00, /* 0000000 */
3218 // 0x7E, /* 0111111 */
3219 // 0x00, /* 0000000 */
3220 // 0x18, /* 0001100 */
3221 // 0x18, /* 0001100 */
3222 // 0x00, /* 0000000 */
3223
3224 // /*
3225 // * code=247, hex=0xF7, ascii="!w"
3226 // */
3227 // 0x00, /* 0000000 */
3228 // 0x00, /* 0000000 */
3229 // 0x1A, /* 0001101 */
3230 // 0x76, /* 0111011 */
3231 // 0x00, /* 0000000 */
3232 // 0x1A, /* 0001101 */
3233 // 0x76, /* 0111011 */
3234 // 0x00, /* 0000000 */
3235 // 0x00, /* 0000000 */
3236
3237 // /*
3238 // * code=248, hex=0xF8, ascii="!x"
3239 // */
3240 // 0x00, /* 0000000 */
3241 // 0x3C, /* 0011110 */
3242 // 0x66, /* 0110011 */
3243 // 0x66, /* 0110011 */
3244 // 0x3C, /* 0011110 */
3245 // 0x00, /* 0000000 */
3246 // 0x00, /* 0000000 */
3247 // 0x00, /* 0000000 */
3248 // 0x00, /* 0000000 */
3249
3250 // /*
3251 // * code=249, hex=0xF9, ascii="!y"
3252 // */
3253 // 0x00, /* 0000000 */
3254 // 0x00, /* 0000000 */
3255 // 0x18, /* 0001100 */
3256 // 0x3C, /* 0011110 */
3257 // 0x3C, /* 0011110 */
3258 // 0x18, /* 0001100 */
3259 // 0x00, /* 0000000 */
3260 // 0x00, /* 0000000 */
3261 // 0x00, /* 0000000 */
3262
3263 // /*
3264 // * code=250, hex=0xFA, ascii="!z"
3265 // */
3266 // 0x00, /* 0000000 */
3267 // 0x00, /* 0000000 */
3268 // 0x00, /* 0000000 */
3269 // 0x18, /* 0001100 */
3270 // 0x18, /* 0001100 */
3271 // 0x00, /* 0000000 */
3272 // 0x00, /* 0000000 */
3273 // 0x00, /* 0000000 */
3274 // 0x00, /* 0000000 */
3275
3276 // /*
3277 // * code=251, hex=0xFB, ascii="!{"
3278 // */
3279 // 0x0E, /* 0000111 */
3280 // 0x0C, /* 0000110 */
3281 // 0x0C, /* 0000110 */
3282 // 0x0C, /* 0000110 */
3283 // 0x0C, /* 0000110 */
3284 // 0x6C, /* 0110110 */
3285 // 0x3C, /* 0011110 */
3286 // 0x0C, /* 0000110 */
3287 // 0x00, /* 0000000 */
3288
3289 // /*
3290 // * code=252, hex=0xFC, ascii="!|"
3291 // */
3292 // 0x00, /* 0000000 */
3293 // 0x78, /* 0111100 */
3294 // 0x6C, /* 0110110 */
3295 // 0x6C, /* 0110110 */
3296 // 0x6C, /* 0110110 */
3297 // 0x6C, /* 0110110 */
3298 // 0x00, /* 0000000 */
3299 // 0x00, /* 0000000 */
3300 // 0x00, /* 0000000 */
3301
3302 // /*
3303 // * code=253, hex=0xFD, ascii="!}"
3304 // */
3305 // 0x00, /* 0000000 */
3306 // 0x38, /* 0011100 */
3307 // 0x4C, /* 0100110 */
3308 // 0x18, /* 0001100 */
3309 // 0x30, /* 0011000 */
3310 // 0x7C, /* 0111110 */
3311 // 0x00, /* 0000000 */
3312 // 0x00, /* 0000000 */
3313 // 0x00, /* 0000000 */
3314
3315 // /*
3316 // * code=254, hex=0xFE, ascii="!~"
3317 // */
3318 // 0x00, /* 0000000 */
3319 // 0x7C, /* 0111110 */
3320 // 0x7C, /* 0111110 */
3321 // 0x7C, /* 0111110 */
3322 // 0x7C, /* 0111110 */
3323 // 0x00, /* 0000000 */
3324 // 0x00, /* 0000000 */
3325 // 0x00, /* 0000000 */
3326 // 0x00, /* 0000000 */
3327
3328 // /*
3329 // * code=255, hex=0xFF, ascii="!^Ÿ"
3330 // */
3331 // 0x00, /* 0000000 */
3332 // 0x00, /* 0000000 */
3333 // 0x00, /* 0000000 */
3334 // 0x00, /* 0000000 */
3335 // 0x00, /* 0000000 */
3336 // 0x00, /* 0000000 */
3337 // 0x00, /* 0000000 */
3338 // 0x00, /* 0000000 */
3339 // 0x00, /* 0000000 */
3340};

◆ cout

ostream fl::cout

Definition at line 7 of file ostream.cpp.hpp.

Referenced by SketchHalt::check(), and SketchHalt::error().

◆ dec

const dec_t fl::dec

Definition at line 7 of file ios.cpp.hpp.

Referenced by AutoResearchRemoteControl::registerFunctions(), and runMultiTest().

◆ dynamic_extent

fl::size fl::dynamic_extent = fl::size(-1)
constexpr

Definition at line 26 of file span.h.

Referenced by as_bytes(), as_writable_bytes(), fl::span< T, Extent >::subspan(), fl::span< T, Extent >::subspan(), fl::span< T, dynamic_extent >::subspan(), and fl::span< T, dynamic_extent >::subspan().

◆ endl

const endl_t fl::endl

Definition at line 10 of file ostream.cpp.hpp.

◆ FairyLight_p

const TProgmemRGBPalette16 fl::FairyLight_p
Initial value:

Definition at line 256 of file twinklefox.h.

◆ fl_serial

FL_MAYBE_UNUSED SerialPort fl::fl_serial

Definition at line 368 of file serial.cpp.hpp.

◆ FP_255

i32 fl::FP_255 = 255 * FP_ONE
staticconstexpr

Definition at line 485 of file flowfield.cpp.hpp.

◆ FP_ONE

i32 fl::FP_ONE = s16x16::SCALE
staticconstexpr

Definition at line 484 of file flowfield.cpp.hpp.

Referenced by fl::anonymous_namespace{chasing_spirals.cpp.hpp}::clampAndScale255(), fl::Center_Field_FP::draw(), fl::Complex_Kaleido_5_FP::draw(), fl::Module_Experiment10_FP::draw(), fl::Module_Experiment2_FP::draw(), fl::Module_Experiment3_FP::draw(), fl::Scaledemo1_FP::draw(), fl::SpiralMatrix4_FP::draw(), FL_DISABLE_WARNING(), render_value_fp(), traverseGridSegment16(), and traverseGridSegment32().

◆ g_json_max_stack_depth

volatile size_t fl::g_json_max_stack_depth
extern

◆ g_json_stack_base

volatile size_t fl::g_json_stack_base
extern

◆ GAMMA_2_8_LUT

const u16 fl::GAMMA_2_8_LUT[256]
extern

Referenced by five_bit_hd_gamma_bitshift(), five_bit_hd_gamma_bitshift(), FL_ALIGN_PROGMEM(), gamma_2_8(), and fl::Gamma8::getOrCreate().

◆ gLogLevel

u8 fl::gLogLevel = static_cast<u8>(LogLevel::FL_LOG_LEVEL_DEBUG)
static

Definition at line 26 of file cstdio.cpp.hpp.

Referenced by getLogLevel(), print(), println(), and setLogLevel().

◆ height

u8 u8 fl::height

Definition at line 186 of file blur.h.

Referenced by fl::Frame::Frame(), fl::anonymous_namespace{channel.cpp.hpp}::ReorderingPixelIteratorAny::ReorderingPixelIteratorAny(), fl::Tile2x2_u8_wrap::Tile2x2_u8_wrap(), fl::XYPathRenderer::~XYPathRenderer(), fl::gfx::addPixelToBuffer(), fl::third_party::TJpgInstanceDecoder::allocateFrameBuffer(), fl::third_party::SoftwareGifDecoder::bitmapCreate(), blur2d(), blur2d(), fl::gfx::blur2d(), fl::gfx::blur2d(), fl::gfx::blur2d(), blurColumns(), blurColumns(), fl::gfx::blurColumns(), fl::gfx::blurColumns(), blurRows(), blurRows(), fl::gfx::blurRows(), fl::gfx::blurRows(), fl::anonymous_namespace{corkscrew.cpp.hpp}::calculateDimensions(), fl::anonymous_namespace{corkscrew.cpp.hpp}::calculateLedPositionExtended(), fl::Blend2d::draw(), fl::RedSquare::draw(), fl::gfx::detail::drawDiscCore(), fl::gfx::detail::drawLineCore(), fl::gfx::detail::drawRingCore(), fl::gfx::detail::drawStrokeLineCore(), fl::Frame::drawXY(), fl::ScaleUp::expand(), fl::Transform16::From(), fl::WaveSimulation2D::init(), fl::third_party::TJpgInstanceDecoder::initializeDecoder(), fl::third_party::jd_decomp_progressive(), fl::WaveCrgbGradientMap::mapWaveToLEDs(), fl::WaveCrgbMapDefault::mapWaveToLEDs(), fl::XYPath::NewArchimedeanSpiralPath(), fl::XYPath::NewCatmullRomPath(), fl::XYPath::NewCirclePath(), fl::XYPath::NewGielisCurvePath(), fl::XYPath::NewHeartPath(), fl::XYPath::NewPhyllotaxisPath(), fl::XYPath::NewRosePath(), fl::ScaleUp::noExpand(), noiseCylinderCRGB(), noiseCylinderHSV16(), noiseCylinderHSV8(), fl::third_party::nsgif__decode(), fl::third_party::nsgif__decode_complex(), fl::third_party::nsgif__decode_simple(), fl::third_party::nsgif__deinterlace(), fl::third_party::nsgif__initialise_sprite(), fl::third_party::nsgif__next_row(), fl::third_party::nsgif__record_frame(), fl::third_party::nsgif__recover_frame(), fl::third_party::nsgif__restore_bg(), fl::Gif::parseGifInfo(), fl::Mpeg1::parseMpeg1Info(), fl::H264::parseSPS(), fl::Corkscrew::readFromMulti(), fl::XYPath::setDrawBounds(), fl::XYPathRenderer::setDrawBounds(), fl::Channel::setScreenMap(), fl::CLEDController::setScreenMap(), fl::third_party::truetype::stbtt_GetCodepointBitmap(), fl::third_party::truetype::stbtt_GetCodepointBitmapSubpixel(), fl::third_party::truetype::stbtt_GetCodepointSDF(), fl::third_party::truetype::stbtt_GetGlyphBitmap(), fl::third_party::truetype::stbtt_GetGlyphBitmapSubpixel(), fl::third_party::truetype::stbtt_GetGlyphSDF(), fl::third_party::truetype::stbtt_ScaleForPixelHeight(), upscalePowerOf2(), fl::anonymous_namespace{blur.cpp.hpp}::xy_legacy_wrapper(), xy_line_by_line(), xy_serpentine(), and fl::third_party::yuv_to_rgb().

◆ hex

const hex_t fl::hex

Definition at line 6 of file ios.cpp.hpp.

Referenced by fl::test::JSONReporter::escapeJson(), fl::third_party::hexwave::hexwave_change(), fl::third_party::hexwave::hexwave_create(), fl::third_party::hexwave::hexwave_create_legacy(), fl::third_party::hexwave::hexwave_generate_linesegs(), fl::third_party::hexwave::hexwave_generate_samples(), fl::wled::parseHexColor(), AutoResearchRemoteControl::registerFunctions(), fl::wled::rgbToHex(), runMultiTest(), and fl::platforms::writeHex().

◆ Holly_p

const TProgmemRGBPalette16 fl::Holly_p
Initial value:
= {
0x00580c, 0x00580c, 0x00580c, 0x00580c, 0x00580c, 0x00580c,
0x00580c, 0x00580c, 0x00580c, 0x00580c, 0x00580c, 0x00580c,
0x00580c, 0x00580c, 0x00580c, 0xB00402}

Definition at line 241 of file twinklefox.h.

241 {
242 0x00580c, 0x00580c, 0x00580c, 0x00580c, 0x00580c, 0x00580c,
243 0x00580c, 0x00580c, 0x00580c, 0x00580c, 0x00580c, 0x00580c,
244 0x00580c, 0x00580c, 0x00580c, 0xB00402};

◆ Ice_p

const TProgmemRGBPalette16 fl::Ice_p
Initial value:
= {
0x0C1040, 0x0C1040, 0x0C1040, 0x0C1040, 0x0C1040, 0x0C1040,
0x0C1040, 0x0C1040, 0x0C1040, 0x0C1040, 0x0C1040, 0x0C1040,
0x182080, 0x182080, 0x182080, 0x5080C0}

Definition at line 284 of file twinklefox.h.

284 {
285 0x0C1040, 0x0C1040, 0x0C1040, 0x0C1040, 0x0C1040, 0x0C1040,
286 0x0C1040, 0x0C1040, 0x0C1040, 0x0C1040, 0x0C1040, 0x0C1040,
287 0x182080, 0x182080, 0x182080, 0x5080C0};

◆ kRgbwDefaultProfile

const DiodeProfile fl::kRgbwDefaultProfile
Initial value:
= {
{ 0.700606f, 0.299300f },
{ 0.097940f, 0.831593f },
{ 0.129086f, 0.049450f },
{ 0.322080f, 0.338050f },
0.10f,
0.37f,
0.08f,
1.00f,
6000,
{ 0.700606f, 0.299300f },
{ 0.097940f, 0.831593f },
{ 0.129086f, 0.049450f },
{ 0.31272f, 0.32903f },
}

Definition at line 37 of file rgbw.cpp.hpp.

37 {
38 /* xy_r */ { 0.700606f, 0.299300f },
39 /* xy_g */ { 0.097940f, 0.831593f },
40 /* xy_b */ { 0.129086f, 0.049450f },
41 /* xy_w */ { 0.322080f, 0.338050f },
42 /* lum_r */ 0.10f,
43 /* lum_g */ 0.37f,
44 /* lum_b */ 0.08f,
45 /* lum_w */ 1.00f,
46 /* nominal_cct */ 6000,
47 /* input_xy_r */ { 0.700606f, 0.299300f }, // native LED R
48 /* input_xy_g */ { 0.097940f, 0.831593f }, // native LED G
49 /* input_xy_b */ { 0.129086f, 0.049450f }, // native LED B
50 /* input_xy_w */ { 0.31272f, 0.32903f }, // D65 white
51};

Referenced by get_rgbw_colorimetric_profile().

◆ kRgbwwDefaultProfile

const colorimetric_detail::RgbcctProfile fl::kRgbwwDefaultProfile

Definition at line 53 of file rgbww.cpp.hpp.

53 {
54 /* warm_path */ {
55 /* xy_r */ { 0.700606f, 0.299300f },
56 /* xy_g */ { 0.097940f, 0.831593f },
57 /* xy_b */ { 0.129086f, 0.049450f },
58 /* xy_w (2700) */ { 0.460000f, 0.410700f },
59 /* lum_r */ 0.10f,
60 /* lum_g */ 0.37f,
61 /* lum_b */ 0.08f,
62 /* lum_w */ 1.00f,
63 /* nominal_cct */ 2700,
64 /* input_xy_r */ { 0.700606f, 0.299300f }, // native LED R
65 /* input_xy_g */ { 0.097940f, 0.831593f }, // native LED G
66 /* input_xy_b */ { 0.129086f, 0.049450f }, // native LED B
67 /* input_xy_w */ { 0.31272f, 0.32903f }, // D65
68 },
69 /* cool_path */ {
70 /* xy_r */ { 0.700606f, 0.299300f },
71 /* xy_g */ { 0.097940f, 0.831593f },
72 /* xy_b */ { 0.129086f, 0.049450f },
73 /* xy_w (6500) */ { 0.313500f, 0.323700f },
74 /* lum_r */ 0.10f,
75 /* lum_g */ 0.37f,
76 /* lum_b */ 0.08f,
77 /* lum_w */ 1.00f,
78 /* nominal_cct */ 6500,
79 /* input_xy_r */ { 0.700606f, 0.299300f }, // native LED R
80 /* input_xy_g */ { 0.097940f, 0.831593f }, // native LED G
81 /* input_xy_b */ { 0.129086f, 0.049450f }, // native LED B
82 /* input_xy_w */ { 0.31272f, 0.32903f }, // D65
83 },
84};

Referenced by get_rgbww_colorimetric_profile().

◆ MAX_SPI_LANES

size_t fl::MAX_SPI_LANES = 32
constexpr

Maximum number of SPI lanes supported (hardware: 1-8, software: up to 32)

Definition at line 18 of file config.h.

Referenced by fl::spi::MultiLaneDevice::write().

◆ NOISE16_EXTENT_MAX

u16 fl::NOISE16_EXTENT_MAX = 59500
constexpr

Definition at line 23 of file noise.h.

Referenced by rescaleNoiseValue16().

◆ NOISE16_EXTENT_MIN

u16 fl::NOISE16_EXTENT_MIN = 9000
constexpr

Observed min/max extents for inoise16() output.

These values represent the practical range of the Perlin noise function across all radius and parameter combinations, optimized to maximize color coverage. Used for rescaling 16-bit noise output to span the full 16-bit range (0 to 65535).

Note
Determined by comprehensive stress testing with 100k+ random samples at radius=1.0 and 100k samples (10 trials × 10k each) at extreme radius=1000. Bounds [9000, 59500] capture ~98%+ hue coverage across all test conditions, ensuring no significant color bands are lost even at extreme radius values.
See also
noiseRingHSV16(), noiseRingCRGB(), noiseSphereHSV16(), noiseSphereCRGB()

Definition at line 22 of file noise.h.

Referenced by rescaleNoiseValue16().

◆ nullopt

nullopt_t fl::nullopt {}
constexpr

Definition at line 13 of file optional.h.

13{};

Referenced by fl::spi::Transaction::Impl::Impl(), fl::Server::Server(), fl::task::TimeTask::TimeTask(), fl::json_value::as_bool(), fl::json_value::as_bool(), fl::json_value::as_double(), fl::json::as_float(), fl::json_value::as_float(), fl::json_value::as_float(), fl::json::as_impl(), fl::json::as_int(), fl::json_value::as_int(), fl::json_value::as_int(), fl::json_value::as_string(), fl::json_value::as_string(), fl::spi::Device::begin(), fl::spi::MultiLaneDevice::begin(), fl::spi::ParallelDevice::begin(), fl::json_value::clone_array(), fl::json::clone_object(), fl::json_value::clone_object(), createSerialRequestSource(), fl::JpegDecoder::decode(), fl::HttpRequestParser::findCRLF(), fl::HttpResponseParser::findCRLF(), fl::json_value::get(), fl::json_value::get(), fl::net::http::Response::get_header(), fl::HttpRequestParser::getHeader(), fl::HttpResponseParser::getHeader(), fl::Rpc::handle_maybe(), fl::asio::http::Request::header(), fl::asio::http::Request::query(), readLine(), fl::net::http::HttpStreamTransport::readRequest(), readSerialLine(), readSerialStringUntil(), fl::spi::Device::setClockSpeed(), fl::WLED::stubRequestSource(), fl::spi::Device::transmit(), fl::json::try_as(), and fl::spi::Transaction::wait().

◆ numeric_limits< char >::digits

int fl::numeric_limits< char >::digits
constexpr

Definition at line 24 of file static_constexpr_defs.cpp.hpp.

Referenced by fl::format_detail::format_integer(), and fl::detail::hex().

◆ numeric_limits< char >::digits10

int fl::numeric_limits< char >::digits10
constexpr

Definition at line 25 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< char >::is_signed

bool fl::numeric_limits< char >::is_signed
constexpr

Definition at line 23 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< double >::max_digits10

int fl::numeric_limits< double >::max_digits10
constexpr

Definition at line 75 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< double >::max_exponent

int fl::numeric_limits< double >::max_exponent
constexpr

Definition at line 76 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< double >::max_exponent10

int fl::numeric_limits< double >::max_exponent10
constexpr

Definition at line 77 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< double >::min_exponent

int fl::numeric_limits< double >::min_exponent
constexpr

Definition at line 78 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< double >::min_exponent10

int fl::numeric_limits< double >::min_exponent10
constexpr

Definition at line 79 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< float >::max_digits10

int fl::numeric_limits< float >::max_digits10
constexpr

Definition at line 68 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< float >::max_exponent

int fl::numeric_limits< float >::max_exponent
constexpr

Definition at line 69 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< float >::max_exponent10

int fl::numeric_limits< float >::max_exponent10
constexpr

Definition at line 70 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< float >::min_exponent

int fl::numeric_limits< float >::min_exponent
constexpr

Definition at line 71 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< float >::min_exponent10

int fl::numeric_limits< float >::min_exponent10
constexpr

Definition at line 72 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< int >::digits

int fl::numeric_limits< int >::digits
constexpr

Definition at line 44 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< int >::digits10

int fl::numeric_limits< int >::digits10
constexpr

Definition at line 45 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< long >::digits

int fl::numeric_limits< long >::digits
constexpr

Definition at line 52 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< long >::digits10

int fl::numeric_limits< long >::digits10
constexpr

Definition at line 53 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< longlong >::digits

int fl::numeric_limits< longlong >::digits
constexpr

Definition at line 60 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< longlong >::digits10

int fl::numeric_limits< longlong >::digits10
constexpr

Definition at line 61 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< short >::digits

int fl::numeric_limits< short >::digits
constexpr

Definition at line 36 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< short >::digits10

int fl::numeric_limits< short >::digits10
constexpr

Definition at line 37 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< signedchar >::digits

int fl::numeric_limits< signedchar >::digits
constexpr

Definition at line 28 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< signedchar >::digits10

int fl::numeric_limits< signedchar >::digits10
constexpr

Definition at line 29 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< unsignedchar >::digits

int fl::numeric_limits< unsignedchar >::digits
constexpr

Definition at line 32 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< unsignedchar >::digits10

int fl::numeric_limits< unsignedchar >::digits10
constexpr

Definition at line 33 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< unsignedint >::digits

int fl::numeric_limits< unsignedint >::digits
constexpr

Definition at line 48 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< unsignedint >::digits10

int fl::numeric_limits< unsignedint >::digits10
constexpr

Definition at line 49 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< unsignedlong >::digits

int fl::numeric_limits< unsignedlong >::digits
constexpr

Definition at line 56 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< unsignedlong >::digits10

int fl::numeric_limits< unsignedlong >::digits10
constexpr

Definition at line 57 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< unsignedlonglong >::digits

int fl::numeric_limits< unsignedlonglong >::digits
constexpr

Definition at line 64 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< unsignedlonglong >::digits10

int fl::numeric_limits< unsignedlonglong >::digits10
constexpr

Definition at line 65 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< unsignedshort >::digits

int fl::numeric_limits< unsignedshort >::digits
constexpr

Definition at line 40 of file static_constexpr_defs.cpp.hpp.

◆ numeric_limits< unsignedshort >::digits10

int fl::numeric_limits< unsignedshort >::digits10
constexpr

Definition at line 41 of file static_constexpr_defs.cpp.hpp.

◆ oct

const oct_t fl::oct

Definition at line 8 of file ios.cpp.hpp.

Referenced by fl::audio::fft::Context::initOctaveWise(), and fl::audio::fft::Context::runOctaveWise().

◆ ProgmemLUT< Fn, N >::kData

template<typename Fn, fl::size N>
const detail::LutArray<u8, N> fl::ProgmemLUT< Fn, N >::kData
Initial value:
=
constexpr LutArray< u8, sizeof...(Is)> make_lut_u8(fl::index_sequence< Is... >) FL_NOEXCEPT
Definition gamma_lut.h:235
typename make_index_sequence_impl< N >::type make_index_sequence
Definition s16x16x4.h:1168

Definition at line 260 of file gamma_lut.h.

◆ RedGreenWhite_p

const TProgmemRGBPalette16 fl::RedGreenWhite_p
Initial value:
= {
@ Green
<div style='background:#008000;width:4em;height:4em;'></div>
Definition crgb.h:558
@ Red
<div style='background:#FF0000;width:4em;height:4em;'></div>
Definition crgb.h:622

Definition at line 236 of file twinklefox.h.

◆ RedWhite_p

const TProgmemRGBPalette16 fl::RedWhite_p
Initial value:

Definition at line 246 of file twinklefox.h.

◆ RetroC9_p

const TProgmemRGBPalette16 fl::RetroC9_p
Initial value:
= {
0xB80400, 0x902C02, 0xB80400, 0x902C02, 0x902C02, 0xB80400,
0x902C02, 0xB80400, 0x046002, 0x046002, 0x046002, 0x046002,
0x070758, 0x070758, 0x070758, 0x606820}

Definition at line 279 of file twinklefox.h.

279 {
280 0xB80400, 0x902C02, 0xB80400, 0x902C02, 0x902C02, 0xB80400,
281 0x902C02, 0xB80400, 0x046002, 0x046002, 0x046002, 0x046002,
282 0x070758, 0x070758, 0x070758, 0x606820};

◆ rgb565_5to8_table

const fl::u8 fl::rgb565_5to8_table[32]
Initial value:
= {
0, 8, 16, 25, 33, 41, 49, 58, 66, 74, 82, 90, 99, 107, 115, 123,
132, 140, 148, 156, 165, 173, 181, 189, 197, 206, 214, 222, 230, 239, 247, 255
}

Definition at line 9 of file pixel.cpp.hpp.

9 {
10 0, 8, 16, 25, 33, 41, 49, 58, 66, 74, 82, 90, 99, 107, 115, 123,
11 132, 140, 148, 156, 165, 173, 181, 189, 197, 206, 214, 222, 230, 239, 247, 255
12};

Referenced by rgb565ToRgb888().

◆ rgb565_6to8_table

const fl::u8 fl::rgb565_6to8_table[64]
Initial value:
= {
0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 45, 49, 53, 57, 61,
65, 69, 73, 77, 81, 85, 89, 93, 97, 101, 105, 109, 113, 117, 121, 125,
130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 170, 174, 178, 182, 186, 190,
194, 198, 202, 206, 210, 215, 219, 223, 227, 231, 235, 239, 243, 247, 251, 255
}

Definition at line 15 of file pixel.cpp.hpp.

15 {
16 0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 45, 49, 53, 57, 61,
17 65, 69, 73, 77, 81, 85, 89, 93, 97, 101, 105, 109, 113, 117, 121, 125,
18 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 170, 174, 178, 182, 186, 190,
19 194, 198, 202, 206, 210, 215, 219, 223, 227, 231, 235, 239, 243, 247, 251, 255
20};

Referenced by rgb565ToRgb888().

◆ sinCosPairedLut

const i32 fl::sinCosPairedLut[]
extern

Referenced by sin32_interp(), and sincos32_simd().

◆ Snow_p

const TProgmemRGBPalette16 fl::Snow_p
Initial value:
= {
0x304048, 0x304048, 0x304048, 0x304048, 0x304048, 0x304048,
0x304048, 0x304048, 0x304048, 0x304048, 0x304048, 0x304048,
0x304048, 0x304048, 0x304048, 0xE0F0FF}

Definition at line 274 of file twinklefox.h.

274 {
275 0x304048, 0x304048, 0x304048, 0x304048, 0x304048, 0x304048,
276 0x304048, 0x304048, 0x304048, 0x304048, 0x304048, 0x304048,
277 0x304048, 0x304048, 0x304048, 0xE0F0FF};

◆ t

fl::t = (x ^ (x >> 7)) & 0x00AA00AA

Definition at line 27 of file transposition.cpp.hpp.

Referenced by fl::AutoResearchConfig::AutoResearchConfig(), fl::audio::detector::Chord::Chord(), fl::Rpc::Config< Callable >::Config(), fl::RedBlackTree< T, Compare, Allocator >::const_iterator::const_iterator(), fl::RedBlackTree< T, Compare, Allocator >::const_reverse_iterator::const_reverse_iterator(), fl::printf_detail::FormatSpec::FormatSpec(), fl::printf_detail::FormatSpec::FormatSpec(), fl::RedBlackTree< T, Compare, Allocator >::iterator::iterator(), fl::RedBlackTree< T, Compare, Allocator >::reverse_iterator::reverse_iterator(), fl::tuple< Head, Tail... >::tuple(), fl::tuple< Head, Tail... >::tuple(), fl::task::Scheduler::add_task(), fl::task::after_frame(), fl::task::after_frame(), fl::Corkscrew::at_splat_extrapolate(), fl::fixed_point_base< Derived, IntBits, FracBits >::atan_unit(), fl::s12x4::atan_unit(), fl::s16x16::atan_unit(), fl::s24x8::atan_unit(), fl::s4x12::atan_unit(), fl::s8x24::atan_unit(), fl::s8x8::atan_unit(), fl::colorimetric_detail::barycentric_xy(), fl::filebuf::bytes_left(), fl::Engine::calculate_oscillators(), fl::CatmullRomPath::compute(), fl::CirclePath::compute(), fl::HeartPath::compute(), fl::audio::detector::ChordDetector::detectChord(), fl::line_xy< T >::distance_to_line_with_point(), fl::FlowFieldFloat::drawAALine(), fl::FlowFieldFP::drawAALine(), fl::FlowFieldFloat::drawFlowVectors(), fl::FlowFieldFP::drawFlowVectors(), fl::FlowFieldFloat::drawImpl(), fl::FlowFieldFP::drawImpl(), easeInOutQuad8(), fl::FlowFieldFloat::emitLissajousLine(), fl::FlowFieldFP::emitLissajousLine(), fl::FlowFieldFloat::emitOrbitalDots(), fl::FlowFieldFP::emitOrbitalDots(), fade(), fl::FlowFieldFloat::Perlin2D::fade(), fl::perlin_i16_optimized::fade(), fl::perlin_q16::fade(), fl::perlin_s16x16::fade(), fl::perlin_s8x8::fade(), fast_logf_approx(), fl::audio::fft::Context::fastDb(), fill_gradient(), fill_gradient_RGB(), fl::FlowFieldFloat::flowPrepare(), fl::FlowFieldFP::flowPrepare(), fmod_impl_double(), fmod_impl_float(), forward(), forward(), get(), get(), get(), fl::colorimetric_detail::hermite_basis(), fl::third_party::hexwave::hexwave_generate_linesegs(), fl::third_party::hexwave::hexwave_generate_samples(), fl::third_party::IMDCT36(), fl::perlin_i16_optimized::init_fade_lut(), fl::perlin_q16::init_fade_lut(), fl::perlin_s16x16::init_fade_lut(), fl::perlin_s8x8::init_fade_lut(), fl::Tile2x2_u8_wrap::Interpolate(), fl::CatmullRomPath::interpolate(), fl::gfx::detail::isqrt32_floor(), fl::fixed_point< IntBits, FracBits, Sign::SIGNED >< IntBits, FracBits >::lerp(), fl::fixed_point_base< Derived, IntBits, FracBits >::lerp(), fl::FlowFieldFloat::Perlin2D::lerp(), lerp(), lerp(), fl::perlin_i16_optimized::lerp(), fl::perlin_q16::lerp(), fl::perlin_s16x16::lerp(), fl::perlin_s8x8::lerp(), fl::s12x4::lerp(), fl::s16x16::lerp(), fl::s16x16x4::lerp(), fl::s24x8::lerp(), fl::s4x12::lerp(), fl::s8x24::lerp(), fl::s8x8::lerp(), fl::u12x4::lerp(), fl::u16x16::lerp(), fl::u24x8::lerp(), fl::u4x12::lerp(), fl::u8x24::lerp(), fl::u8x8::lerp(), fl::fixed_point_base< Derived, IntBits, FracBits >::log2_fp(), fl::s12x4::log2_fp(), fl::s16x16::log2_fp(), fl::s24x8::log2_fp(), fl::s4x12::log2_fp(), fl::s8x24::log2_fp(), fl::s8x8::log2_fp(), fl::u12x4::log2_fp(), fl::u16x16::log2_fp(), fl::u24x8::log2_fp(), fl::u4x12::log2_fp(), fl::u8x24::log2_fp(), fl::u8x8::log2_fp(), fl::detail::gamma_constexpr::log2_h0(), fl::detail::gamma_constexpr::log2_h1(), fl::detail::gamma_constexpr::log2_h2(), fl::detail::gamma_constexpr::log2_h3(), make_pair(), move(), fl::colorimetric_detail::nnls3(), fl::alpha16::operator++(), fl::alpha8::operator++(), fl::unordered_map_small< Key, Value, Equal >::const_iterator::operator++(), fl::unordered_map_small< Key, Value, Equal >::iterator::operator++(), fl::alpha16::operator--(), fl::alpha8::operator--(), fl::third_party::plm_video_decode_macroblock(), fl::detail::qsort_swap(), fl::FlowFieldFloat::rainbow(), fl::FlowFieldFP::rainbow(), fl::PerlinParticlePunch::renderMeteor(), fl::colorimetric_detail::rgbcct_eta_for_cct(), fl::circular_buffer_core< T >::setTail(), fl::Engine::setTime(), setTime(), sin32(), sin32_interp(), sincos32(), fl::fixed_point_base< Derived, IntBits, FracBits >::smoothstep(), fl::s12x4::smoothstep(), fl::s16x16::smoothstep(), fl::s24x8::smoothstep(), fl::s4x12::smoothstep(), fl::s8x24::smoothstep(), fl::s8x8::smoothstep(), fl::u12x4::smoothstep(), fl::u16x16::smoothstep(), fl::u24x8::smoothstep(), fl::u4x12::smoothstep(), fl::u8x24::smoothstep(), fl::u8x8::smoothstep(), fl::PerlinParticlePunch::spawnDebrisFromMeteor(), fl::third_party::truetype::stbtt__get_svg(), fl::third_party::truetype::stbtt__sort_edges_ins_sort(), fl::third_party::truetype::stbtt__sort_edges_quicksort(), fl::third_party::truetype::stbtt_GetGlyphSDF(), fl::third_party::truetype::stbtt_InitFont_internal(), fl::detail::MethodBuilder< Sig >::tags(), transpose8(), transpose8x1(), transpose8x1_MSB(), transpose_wave8byte_parlio_template(), traverseGridSegmentFloat(), fl::NoiseBias1D::trigger(), fl::task::Scheduler::update(), and fl::task::Scheduler::update_tasks_of_type().

◆ type_rank< bool >::value

int fl::type_rank< bool >::value
constexpr

Definition at line 83 of file static_constexpr_defs.cpp.hpp.

◆ type_rank< char >::value

int fl::type_rank< char >::value
constexpr

Definition at line 86 of file static_constexpr_defs.cpp.hpp.

◆ type_rank< double >::value

int fl::type_rank< double >::value
constexpr

Definition at line 96 of file static_constexpr_defs.cpp.hpp.

◆ type_rank< float >::value

int fl::type_rank< float >::value
constexpr

Definition at line 95 of file static_constexpr_defs.cpp.hpp.

◆ type_rank< int >::value

int fl::type_rank< int >::value
constexpr

Definition at line 89 of file static_constexpr_defs.cpp.hpp.

◆ type_rank< long >::value

int fl::type_rank< long >::value
constexpr

Definition at line 91 of file static_constexpr_defs.cpp.hpp.

◆ type_rank< longdouble >::value

int fl::type_rank< longdouble >::value
constexpr

Definition at line 97 of file static_constexpr_defs.cpp.hpp.

◆ type_rank< longlong >::value

int fl::type_rank< longlong >::value
constexpr

Definition at line 93 of file static_constexpr_defs.cpp.hpp.

◆ type_rank< short >::value

int fl::type_rank< short >::value
constexpr

Definition at line 87 of file static_constexpr_defs.cpp.hpp.

◆ type_rank< signedchar >::value

int fl::type_rank< signedchar >::value
constexpr

Definition at line 84 of file static_constexpr_defs.cpp.hpp.

◆ type_rank< T >::value

template<typename T>
int fl::type_rank< T >::value
constexpr

Definition at line 82 of file static_constexpr_defs.cpp.hpp.

Referenced by fl::AtomicFake< bool >::AtomicFake(), fl::task::CoroutineTask::CoroutineTask(), fl::deque< int >::deque(), fl::deque< int >::deque(), fl::test::ExpressionValue< T >::ExpressionValue(), fl::fixed_point< IntBits, FracBits, Sign::SIGNED >< IntBits, FracBits >::fixed_point(), fl::FixedVector< fl::u32, kMaxBatchSize >::FixedVector(), fl::list< T >::list(), fl::list< T >::list(), fl::list< T >::list(), fl::MapRedBlackTree< Key, T, Compare, fl::allocator_slab< char > >< Key, T, Compare >::MapRedBlackTree(), fl::MultiMapTree< Key, T, Compare, fl::allocator_slab< char > >::MultiMapTree(), fl::MultiSetTree< Key, Compare, fl::allocator_slab< char > >::MultiSetTree(), fl::asio::http::Response::Response(), fl::fl::s0x32::s0x32(), fl::span< T, dynamic_extent >::span(), fl::span< T, dynamic_extent >::span(), fl::vector< fl::i16 >::vector(), fl::vector< fl::i16 >::vector(), fl::vector< fl::i16 >::vector(), fl::vector_psram< T >::vector_psram(), fl::vector_psram< T >::vector_psram(), fl::VectorN< T, INLINED_SIZE >::VectorN(), fl::VectorN< T, INLINED_SIZE >::VectorN(), fl::WaveSimulation1D::~WaveSimulation1D(), abs(), fl::BoolConversionVisitor::accept(), fl::CopyToOutputIteratorVisitor< T, OutputIt >::accept(), fl::CopyToVisitor< T >::accept(), fl::default_value_visitor< T >::accept(), fl::detail::JsonToBoolVisitor::accept(), fl::detail::JsonToFloatVisitor< T >::accept(), fl::detail::JsonToIntegerVisitor< T >::accept(), fl::detail::JsonToStringVisitor::accept(), fl::float_conversion_visitor< FloatType >::accept(), fl::float_conversion_visitor< double >::accept(), fl::int_conversion_visitor< IntType >::accept(), fl::int_conversion_visitor< i64 >::accept(), fl::json_value::IsArrayVisitor::accept(), fl::NumericExtractVisitor< T >::accept(), fl::SizeVisitor::accept(), fl::StringConversionVisitor::accept(), acos(), acos(), acos_impl_double(), acos_impl_float(), acosf(), fl::WaveFx::addf(), append_u64_decimal(), fl::format_detail::apply_width_align(), fl::audio::SpectralEqualizer::applyCompression(), fl::audio::detector::anonymous_namespace{equalizer.cpp.hpp}::applyScaling(), fl::audio::Reactive::applyScaling(), asin(), asin(), asin_impl_double(), asin_impl_float(), asinf(), fl::bitset_dynamic::assign(), fl::deque< int >::assign(), fl::vector< fl::i16 >::assign(), fl::iterator<, u8 >::at(), fl::iterator<, u8 >::at(), atan(), atan(), atan_impl_double(), atan_impl_float(), atanf(), ceil(), ceil(), ceil_constexpr(), ceil_impl_double(), ceil_impl_float(), ceilf(), clamp(), fl::RedBlackTree< value_type, PairCompare, Allocator >::contains(), fl::detail::TypeToJson< T >::convert(), fl::detail::TypeToJson< fl::json >::convert(), fl::detail::TypeToJson< fl::string >::convert(), fl::detail::TypeToJson< fl::vector< fl::u8 > >::convert(), fl::detail::TypeToJson< fl::vector< T > >::convert(), cos(), cos(), cos_impl_double(), cos_impl_float(), cosf(), fl::RedBlackTree< value_type, PairCompare, Allocator >::count(), fl::list< T >::create_node(), fl::list< T >::create_node(), fl::Tile2x2_u8::draw(), fl::XYDrawComposited::draw(), fl::XYDrawGradient::draw(), fl::XYRasterU8Sparse::draw(), fl::flat_map< int, FxPtr >::emplace(), fl::flat_set< Key, Less >::emplace(), fl::RedBlackTree< value_type, PairCompare, Allocator >::emplace(), fl::flat_map< int, FxPtr >::emplace_hint(), fl::flat_set< Key, Less >::emplace_hint(), encoder_for(), fl::RedBlackTree< value_type, PairCompare, Allocator >::equal_range(), fl::RedBlackTree< value_type, PairCompare, Allocator >::equal_range(), fl::FixedVector< fl::u32, kMaxBatchSize >::erase(), fl::RedBlackTree< value_type, PairCompare, Allocator >::erase(), fl::SortedHeapVector< T, LessThan >::erase(), fl::vector< fl::i16 >::erase(), fl::AtomicFake< bool >::exchange(), exp(), exp(), exp_impl_double(), exp_impl_float(), expf(), fabs(), fabs(), fabs_impl_double(), fabs_impl_float(), fabsf(), fl::AtomicFake< bool >::fetch_add(), fl::AtomicFake< bool >::fetch_and(), fl::AtomicFake< bool >::fetch_or(), fl::AtomicFake< bool >::fetch_sub(), fl::AtomicFake< bool >::fetch_xor(), fl::array< u8, 3 >::fill(), fill(), fl::basic_string::find(), fl::basic_string::find(), find(), fl::FixedVector< fl::u32, kMaxBatchSize >::find(), fl::FixedVector< fl::u32, kMaxBatchSize >::find(), fl::list< T >::find(), fl::list< T >::find(), fl::RedBlackTree< value_type, PairCompare, Allocator >::find(), fl::RedBlackTree< value_type, PairCompare, Allocator >::find(), fl::SortedHeapVector< T, LessThan >::find(), fl::SortedHeapVector< T, LessThan >::find(), fl::span< T, dynamic_extent >::find(), fl::vector< fl::i16 >::find(), fl::vector< fl::i16 >::find(), fl::audio::detector::Pitch::findBestPeakLag(), fl::RedBlackTree< value_type, PairCompare, Allocator >::findNode(), FL_ALIGN_AS_T(), FL_DISABLE_WARNING(), FL_DISABLE_WARNING(), FL_DISABLE_WARNING(), fl::make_unsigned< T, Enable >::FL_STATIC_ASSERT(), floor(), floor(), floor_impl_double(), floor_impl_float(), floorf(), fl::format_detail::format_float(), fl::printf_detail::format_float(), fl::format_detail::format_integer(), fl::format_detail::format_string(), fl::audio::Reactive::frequencyToScale255(), ftoa(), gamma_2_8(), fl::unsorted_map_fixed< Key, Value, N >::get(), fl::WaveSimulation1D::getu8(), fl::WaveSimulation1D_Real::getu8(), fl::WaveSimulation2D::getu8(), fl::WaveSimulation2D_Real::getu8(), fl::FixedVector< fl::u32, kMaxBatchSize >::has(), fl::list< T >::has(), fl::SortedHeapVector< T, LessThan >::has(), fl::vector< fl::i16 >::has(), hd108GammaCorrect(), fl::net::http::FetchOptions::header(), fl::detail::hex(), fl::third_party::hexwave::hexwave_engine_create(), fl::net::http::HttpStreamTransport::idToString(), fl::deque< int >::insert(), fl::deque< int >::insert(), fl::deque< int >::insert(), fl::FixedVector< fl::u32, kMaxBatchSize >::insert(), fl::FixedVector< fl::u32, kMaxBatchSize >::insert(), fl::flat_map< int, FxPtr >::insert(), fl::flat_map< int, FxPtr >::insert(), fl::flat_map< int, FxPtr >::insert(), fl::flat_map< int, FxPtr >::insert(), fl::flat_map< int, FxPtr >::insert(), fl::flat_map< int, FxPtr >::insert(), fl::flat_set< Key, Less >::insert(), fl::flat_set< Key, Less >::insert(), fl::flat_set< Key, Less >::insert(), fl::flat_set< Key, Less >::insert(), fl::HashMapLru< Args, fl::shared_ptr< Impl > >::insert(), fl::iterator<, u8 >::insert(), fl::iterator<, u8 >::insert(), fl::list< T >::insert(), fl::list< T >::insert(), fl::MapRedBlackTree< Key, T, Compare, fl::allocator_slab< char > >< Key, T, Compare >::insert(), fl::MapRedBlackTree< Key, T, Compare, fl::allocator_slab< char > >< Key, T, Compare >::insert(), fl::MapRedBlackTree< Key, T, Compare, fl::allocator_slab< char > >< Key, T, Compare >::insert(), fl::MapRedBlackTree< Key, T, Compare, fl::allocator_slab< char > >< Key, T, Compare >::insert(), fl::MapRedBlackTree< Key, T, Compare, fl::allocator_slab< char > >< Key, T, Compare >::insert(), fl::MultiMapTree< Key, T, Compare, fl::allocator_slab< char > >::insert(), fl::MultiMapTree< Key, T, Compare, fl::allocator_slab< char > >::insert(), fl::MultiMapTree< Key, T, Compare, fl::allocator_slab< char > >::insert(), fl::MultiSetTree< Key, Compare, fl::allocator_slab< char > >::insert(), fl::MultiSetTree< Key, Compare, fl::allocator_slab< char > >::insert(), fl::MultiSetTree< Key, Compare, fl::allocator_slab< char > >::insert(), fl::RedBlackTree< value_type, PairCompare, Allocator >::insert(), fl::RedBlackTree< value_type, PairCompare, Allocator >::insert(), fl::SetRedBlackTree< Key, fl::less< Key >, Allocator >::insert(), fl::SetRedBlackTree< Key, fl::less< Key >, Allocator >::insert(), fl::SortedHeapVector< T, LessThan >::insert(), fl::unordered_map_small< Key, Value, Equal >::insert(), fl::unordered_map_small< Key, Value, Equal >::insert(), fl::unsorted_map_fixed< Key, Value, N >::insert(), fl::unsorted_map_fixed< Key, Value, N >::insert(), fl::vector< fl::i16 >::insert(), fl::vector< fl::i16 >::insert(), fl::iterator<, u8 >::insert_or_assign(), fl::iterator<, u8 >::insert_or_assign(), fl::flat_map< int, FxPtr >::insert_or_update(), fl::unordered_map_small< Key, Value, Equal >::insert_or_update(), fl::RedBlackTree< value_type, PairCompare, Allocator >::insertImpl(), fl::detail::insertion_sort(), int_to_ptr(), invoke(), invoke(), invoke(), itoa(), itoa64(), jsonArrayToFloatVector(), ldexp(), ldexp(), ldexp_impl_double(), ldexp_impl_float(), fl::detail::ldexp_loop_(), ldexpf(), log(), log(), log10(), log10(), log10_impl_double(), log10_impl_float(), log10f(), log2(), log2(), log2f(), log_impl_double(), log_impl_float(), fl::detail::log_natural_(), logf(), lower_bound(), lower_bound(), fl::RedBlackTree< value_type, PairCompare, Allocator >::lower_bound(), fl::RedBlackTree< value_type, PairCompare, Allocator >::lower_bound(), fl::SortedHeapVector< T, LessThan >::lower_bound(), fl::SortedHeapVector< T, LessThan >::lower_bound(), fl::detail::lower_bound_impl(), fl::RedBlackTree< value_type, PairCompare, Allocator >::lowerBoundNode(), lpd8806Encode(), lround(), lround(), lround_impl_double(), lround_impl_float(), lroundf(), make_optional(), make_optional(), fl::task::make_resolved_promise(), fl::task::make_success(), fl::task::make_success(), fl::map_range_detail::map_range_math< T, vec2< V > >::map(), map_range(), map_range_clamped(), fl::detail::merge_inplace(), fl::anonymous_namespace{json.cpp.hpp}::JsonBuilder::on_token(), fl::anonymous_namespace{json.cpp.hpp}::JsonValidator::on_token(), fl::anonymous_namespace{json.cpp.hpp}::JsonVisitor::on_token(), fl::AtomicFake< bool >::operator&=(), fl::BoolConversionVisitor::operator()(), fl::BoolConversionVisitor::operator()(), fl::BoolConversionVisitor::operator()(), fl::BoolConversionVisitor::operator()(), fl::default_value_visitor< T >::operator()(), fl::default_value_visitor< T >::operator()(), fl::float_conversion_visitor< FloatType >::operator()(), fl::float_conversion_visitor< FloatType >::operator()(), fl::float_conversion_visitor< FloatType >::operator()(), fl::float_conversion_visitor< FloatType >::operator()(), fl::float_conversion_visitor< FloatType >::operator()(), fl::float_conversion_visitor< double >::operator()(), fl::float_conversion_visitor< double >::operator()(), fl::float_conversion_visitor< double >::operator()(), fl::float_conversion_visitor< double >::operator()(), fl::int_conversion_visitor< IntType >::operator()(), fl::int_conversion_visitor< IntType >::operator()(), fl::int_conversion_visitor< IntType >::operator()(), fl::int_conversion_visitor< IntType >::operator()(), fl::int_conversion_visitor< IntType >::operator()(), fl::int_conversion_visitor< i64 >::operator()(), fl::int_conversion_visitor< i64 >::operator()(), fl::int_conversion_visitor< i64 >::operator()(), fl::int_conversion_visitor< i64 >::operator()(), fl::StringConversionVisitor::operator()(), fl::StringConversionVisitor::operator()(), fl::StringConversionVisitor::operator()(), fl::StringConversionVisitor::operator()(), fl::StringConversionVisitor::operator()(), fl::AtomicFake< bool >::operator+=(), fl::AtomicFake< bool >::operator-=(), fl::AtomicFake< bool >::operator=(), fl::back_insert_iterator< Container >::operator=(), fl::back_insert_iterator< Container >::operator=(), fl::json_value::operator=(), fl::list< T >::operator=(), fl::MapRedBlackTree< Key, T, Compare, fl::allocator_slab< char > >< Key, T, Compare >::operator=(), fl::XYDrawComposited::operator=(), fl::XYDrawGradient::operator=(), fl::AtomicFake< bool >::operator^=(), fl::AtomicFake< bool >::operator|=(), fl::test::outputCapture(), fl::anonymous_namespace{istream.cpp.hpp}::parse_i32(), parse_lnk_with_metadata(), fl::anonymous_namespace{istream.cpp.hpp}::parse_u32(), fl::SerialPort::parseFloat(), fl::HttpRequestParser::parseHeaders(), fl::HttpResponseParser::parseHeaders(), fl::anonymous_namespace{http_parser.cpp.hpp}::parseInt(), fl::SerialPort::parseInt(), fl::third_party::plm_buffer_read(), fl::third_party::plm_video_decode_block(), fl::circular_buffer< T, N >::pop(), fl::SerialPort::print(), fl::SerialPort::print(), fl::SerialPort::print(), fl::SerialPort::println(), fl::SerialPort::println(), fl::SerialPort::println(), fl::Remote::processRpc(), fl::circular_buffer< T, N >::push(), fl::priority_queue_stable< T, Compare >::push(), fl::PriorityQueue< T, Compare, VectorT >::push(), fl::PriorityQueue< T, Compare, VectorT >::push(), fl::queue< T, Container >::push(), fl::queue< T, Container >::push(), fl::circular_buffer< T, N >::push_back(), fl::circular_buffer_core< T >::push_back(), fl::deque< int >::push_back(), fl::deque< int >::push_back(), fl::FixedVector< fl::u32, kMaxBatchSize >::push_back(), fl::FixedVector< fl::u32, kMaxBatchSize >::push_back(), fl::list< T >::push_back(), fl::list< T >::push_back(), fl::vector< fl::i16 >::push_back(), fl::vector< fl::i16 >::push_back(), fl::circular_buffer< T, N >::push_front(), fl::circular_buffer_core< T >::push_front(), fl::deque< int >::push_front(), fl::deque< int >::push_front(), fl::list< T >::push_front(), fl::list< T >::push_front(), fl::XYRasterU8Sparse::rasterize(), fl::XYRasterU8Sparse::rasterize_internal(), fl::iterator<, u8 >::rehash_internal(), fl::list< T >::remove(), remove(), fl::deque< int >::resize(), fl::list< T >::resize(), fl::vector< fl::i16 >::resize(), fl::vector_basic::resize_value_impl(), fl::net::http::HttpStreamTransport::resolveRpc(), fl::net::http::HttpStreamTransport::resolveRpcStream(), round(), round< double >(), round_impl_double(), round_impl_float(), roundf(), fl::Tile2x2_u8::scale(), fl::SerializerVisitor::serialize_value(), serializeValue(), fl::bitset_dynamic::set(), fl::ThreadLocalFake< T >::set(), fl::WaveSimulation1D_Real::set(), fl::s0x32x4::set1(), fl::s16x16x4::set1(), set_errno(), fl::net::http::Response::set_header(), fl::WaveFx::setf(), fl::WaveSimulation1D::setf(), fl::WaveSimulation2D::setf(), fl::WaveSimulation2D_Real::setf(), fl::WaveSimulation2D_Real::seti16(), fl::CLEDController::setRgbw(), sin(), sin(), sin_impl_double(), sin_impl_float(), sinf(), fl::detail::singleton_registry_set(), sqrt(), sqrt(), sqrt(), sqrt_impl_double(), sqrt_impl_float(), fl::detail::sqrt_newton_(), sqrtf(), fl::AtomicFake< bool >::store(), tan(), tan(), tan_impl_double(), tan_impl_float(), tanf(), simd_test::test_set1_f32_4(), simd_test::test_set1_u32_4(), to_hex(), fl::printf_detail::to_octal(), to_string(), to_string(), fl::flat_map< int, FxPtr >::update(), fl::flat_map< int, FxPtr >::update(), fl::unordered_map_small< Key, Value, Equal >::update(), fl::unordered_map_small< Key, Value, Equal >::update(), fl::unsorted_map_fixed< Key, Value, N >::update(), fl::unsorted_map_fixed< Key, Value, N >::update(), fl::RedBlackTree< value_type, PairCompare, Allocator >::upper_bound(), fl::RedBlackTree< value_type, PairCompare, Allocator >::upper_bound(), fl::RedBlackTree< value_type, PairCompare, Allocator >::upperBoundNode(), utoa32(), utoa64(), fl::DigitalPinImpl::write(), fl::XYRasterU8Sparse::write(), and fl::platforms::writeHex().

◆ type_rank< unsignedchar >::value

int fl::type_rank< unsignedchar >::value
constexpr

Definition at line 85 of file static_constexpr_defs.cpp.hpp.

◆ type_rank< unsignedint >::value

int fl::type_rank< unsignedint >::value
constexpr

Definition at line 90 of file static_constexpr_defs.cpp.hpp.

◆ type_rank< unsignedlong >::value

int fl::type_rank< unsignedlong >::value
constexpr

Definition at line 92 of file static_constexpr_defs.cpp.hpp.

◆ type_rank< unsignedlonglong >::value

int fl::type_rank< unsignedlonglong >::value
constexpr

Definition at line 94 of file static_constexpr_defs.cpp.hpp.

◆ type_rank< unsignedshort >::value

int fl::type_rank< unsignedshort >::value
constexpr

Definition at line 88 of file static_constexpr_defs.cpp.hpp.

◆ width

u8 fl::width

Definition at line 186 of file blur.h.

Referenced by fl::Frame::Frame(), fl::anonymous_namespace{channel.cpp.hpp}::ReorderingPixelIteratorAny::ReorderingPixelIteratorAny(), fl::audio::SynthEngineImpl::SynthEngineImpl(), fl::Tile2x2_u8_wrap::Tile2x2_u8_wrap(), fl::Tile2x2_u8_wrap::Tile2x2_u8_wrap(), fl::XYPathRenderer::~XYPathRenderer(), fl::gfx::addPixelToBuffer(), fl::third_party::TJpgInstanceDecoder::allocateFrameBuffer(), fl::third_party::SoftwareGifDecoder::bitmapCreate(), blur2d(), blur2d(), fl::gfx::blur2d(), fl::gfx::blur2d(), fl::gfx::blur2d(), blurColumns(), blurColumns(), fl::gfx::blurColumns(), fl::gfx::blurColumns(), blurRows(), blurRows(), fl::gfx::blurRows(), fl::gfx::blurRows(), fl::anonymous_namespace{corkscrew.cpp.hpp}::calculateDimensions(), fl::anonymous_namespace{corkscrew.cpp.hpp}::calculateLedPositionExtended(), fl::audio::ISynthEngine::create(), fl::Blend2d::draw(), fl::RedSquare::draw(), fl::gfx::detail::drawDiscCore(), fl::gfx::detail::drawLineCore(), fl::gfx::detail::drawRingCore(), fl::gfx::detail::drawStrokeLineCore(), fl::Frame::drawXY(), fl::ScaleUp::expand(), fl::Transform16::From(), fl::detail::hex(), fl::third_party::hexwave::hexwave_engine_create(), fl::third_party::hexwave::hexwave_generate_samples(), fl::third_party::hexwave::hexwave_init(), fl::WaveSimulation2D::init(), fl::third_party::TJpgInstanceDecoder::initializeDecoder(), fl::third_party::jd_decomp_progressive(), fl::WaveCrgbGradientMap::mapWaveToLEDs(), fl::WaveCrgbMapDefault::mapWaveToLEDs(), fl::FontRenderer::measureString(), fl::XYPath::NewArchimedeanSpiralPath(), fl::XYPath::NewCatmullRomPath(), fl::XYPath::NewCirclePath(), fl::XYPath::NewGielisCurvePath(), fl::XYPath::NewHeartPath(), fl::XYPath::NewPhyllotaxisPath(), fl::XYPath::NewRosePath(), fl::ScaleUp::noExpand(), fl::FlowField::noisePunchX(), fl::FlowField::noisePunchY(), fl::third_party::nsgif__decode(), fl::third_party::nsgif__decode_complex(), fl::third_party::nsgif__initialise_sprite(), fl::third_party::nsgif__record_frame(), fl::third_party::nsgif__recover_frame(), fl::third_party::nsgif__restore_bg(), fl::Gif::parseGifInfo(), fl::Mpeg1::parseMpeg1Info(), fl::H264::parseSPS(), fl::Corkscrew::readFromMulti(), fl::XYPath::setDrawBounds(), fl::XYPathRenderer::setDrawBounds(), fl::Channel::setScreenMap(), fl::CLEDController::setScreenMap(), fl::third_party::truetype::stbtt_GetCodepointBitmap(), fl::third_party::truetype::stbtt_GetCodepointBitmapSubpixel(), fl::third_party::truetype::stbtt_GetCodepointSDF(), fl::third_party::truetype::stbtt_GetGlyphBitmap(), fl::third_party::truetype::stbtt_GetGlyphBitmapSubpixel(), fl::third_party::truetype::stbtt_GetGlyphSDF(), to_hex(), fl::NoiseBias1D::trigger(), upscalePowerOf2(), fl::anonymous_namespace{tile2x2.cpp.hpp}::wrap_x(), fl::anonymous_namespace{blur.cpp.hpp}::xy_legacy_wrapper(), xy_line_by_line(), xy_serpentine(), and fl::third_party::yuv_to_rgb().

◆ x

fl::x = *(u32*)(A+4)

Definition at line 24 of file transposition.cpp.hpp.

Referenced by fl::Gamma8Impl::Gamma8Impl(), fl::Leds::Leds(), fl::PointPath::PointPath(), fl::anonymous_namespace{channel.cpp.hpp}::ReorderingPixelIteratorAny::ReorderingPixelIteratorAny(), fl::ScreenMap::ScreenMap(), fl::ScreenMap::ScreenMap(), fl::WaveSimulation1D::~WaveSimulation1D(), fl::WaveSimulation2D_Real::~WaveSimulation2D_Real(), _isqrt32_start(), _isqrt32_step(), _isqrt64_start(), _isqrt64_step(), abs(), abs(), fl::fixed_point< IntBits, FracBits, Sign::SIGNED >< IntBits, FracBits >::abs(), fl::fixed_point_base< Derived, IntBits, FracBits >::abs(), fl::s0x32::abs(), fl::s12x4::abs(), fl::s16x16::abs(), fl::s24x8::abs(), fl::s4x12::abs(), fl::s8x24::abs(), fl::s8x8::abs(), fl::u12x4::abs(), fl::u24x8::abs(), fl::u4x12::abs(), fl::u8x8::abs(), fl::Grid< T >::access(), fl::Grid< T >::access(), acos(), fl::fixed_point< IntBits, FracBits, Sign::SIGNED >< IntBits, FracBits >::acos(), fl::fixed_point_base< Derived, IntBits, FracBits >::acos(), fl::s12x4::acos(), fl::s16x16::acos(), fl::s24x8::acos(), fl::s4x12::acos(), fl::s8x24::acos(), fl::s8x8::acos(), fl::Engine::add(), fl::WaveFx::addf(), fl::ScreenMap::addOffsetX(), fl::gfx::addPixelToBuffer(), fl::CatmullRomParams::addPoint(), fl::CatmullRomPath::addPoint(), fl::third_party::AntiAlias(), fl::gfx::blur_detail::interior_row< 0, RGB_T, acc_t >::apply(), fl::gfx::blur_detail::interior_row< 1, RGB_T, acc_t >::apply(), fl::gfx::blur_detail::interior_row< 2, RGB_T, acc_t >::apply(), fl::gfx::blur_detail::interior_row< 3, RGB_T, acc_t >::apply(), fl::gfx::blur_detail::interior_row< 4, RGB_T, acc_t >::apply(), fl::gfx::blur_detail::vpass_pixel_kernel< 0, RGB_T, acc_t >::apply(), fl::gfx::blur_detail::vpass_pixel_kernel< 1, RGB_T, acc_t >::apply(), fl::gfx::blur_detail::vpass_pixel_kernel< 2, RGB_T, acc_t >::apply(), fl::gfx::blur_detail::vpass_pixel_kernel< 3, RGB_T, acc_t >::apply(), fl::gfx::blur_detail::vpass_pixel_kernel< 4, RGB_T, acc_t >::apply(), applyGamma_video(), asin(), fl::fixed_point< IntBits, FracBits, Sign::SIGNED >< IntBits, FracBits >::asin(), fl::fixed_point_base< Derived, IntBits, FracBits >::asin(), fl::s12x4::asin(), fl::s16x16::asin(), fl::s24x8::asin(), fl::s4x12::asin(), fl::s8x24::asin(), fl::s8x8::asin(), fl::Canvas< RGB_T >::at(), fl::Canvas< RGB_T >::at(), fl::gfx::Canvas< RGB_T >::at(), fl::gfx::Canvas< RGB_T >::at(), fl::gfx::CanvasMapped< RGB_T >::at(), fl::gfx::CanvasMapped< RGB_T >::at(), fl::Grid< T >::at(), fl::Grid< T >::at(), fl::Leds::at(), fl::Leds::at(), fl::MatrixSlice< T >::at(), fl::MatrixSlice< T >::at(), fl::Tile2x2_u8::at(), fl::Tile2x2_u8::at(), fl::Tile2x2_u8_wrap::at(), fl::Tile2x2_u8_wrap::at(), fl::XYRasterSparse_RGB8::at(), fl::XYRasterU8Sparse::at(), atan(), fl::fixed_point< IntBits, FracBits, Sign::SIGNED >< IntBits, FracBits >::atan(), fl::fixed_point_base< Derived, IntBits, FracBits >::atan(), fl::s12x4::atan(), fl::s16x16::atan(), fl::s24x8::atan(), fl::s4x12::atan(), fl::s8x24::atan(), fl::s8x8::atan(), atan2(), atan2(), fl::fixed_point< IntBits, FracBits, Sign::SIGNED >< IntBits, FracBits >::atan2(), fl::fixed_point_base< Derived, IntBits, FracBits >::atan2(), fl::s12x4::atan2(), fl::s16x16::atan2(), fl::s24x8::atan2(), fl::s4x12::atan2(), fl::s8x24::atan2(), fl::s8x8::atan2(), fl::detail::atan2_full_(), atan2_impl_double(), atan2_impl_float(), atan2f(), fl::gfx::blurGaussianMappedImpl(), fl::Corkscrew::calculateTileAtWrap(), ceil(), fl::fixed_point< IntBits, FracBits, Sign::SIGNED >< IntBits, FracBits >::ceil(), fl::fixed_point_base< Derived, IntBits, FracBits >::ceil(), fl::s12x4::ceil(), fl::s16x16::ceil(), fl::s24x8::ceil(), fl::s4x12::ceil(), fl::s8x24::ceil(), fl::s8x8::ceil(), fl::u12x4::ceil(), fl::u16x16::ceil(), fl::u24x8::ceil(), fl::u4x12::ceil(), fl::u8x24::ceil(), fl::u8x8::ceil(), fl::ScreenMap::Circle(), fl::PerlinParticlePunch::circleNoiseGen(), clamp(), fl::fixed_point< IntBits, FracBits, Sign::SIGNED >< IntBits, FracBits >::clamp(), fl::fixed_point_base< Derived, IntBits, FracBits >::clamp(), fl::s12x4::clamp(), fl::s16x16::clamp(), fl::s24x8::clamp(), fl::s4x12::clamp(), fl::s8x24::clamp(), fl::s8x8::clamp(), fl::u12x4::clamp(), fl::u16x16::clamp(), fl::u24x8::clamp(), fl::u4x12::clamp(), fl::u8x24::clamp(), fl::u8x8::clamp(), fl::third_party::ClipToShort(), fl::third_party::CLZ(), fl::third_party::vorbis::codebook_decode_scalar_raw(), fl::Engine::colorburn(), fl::Engine::colordodge(), fl::ArchimedeanSpiralPath::compute(), fl::CatmullRomPath::compute(), fl::CirclePath::compute(), fl::GielisCurvePath::compute(), fl::HeartPath::compute(), fl::LinePath::compute(), fl::PhyllotaxisPath::compute(), fl::RosePath::compute(), fl::third_party::vorbis::compute_sorted_huffman(), fl::rect< T >::contains(), fl::XMap::convertToLookUpTable(), fl::XYMap::convertToLookUpTable(), fl::detail::cos_poly_quarterturn_(), fl::detail::cos_reduce_(), fl::audio::fft::Bins::db(), fl::third_party::DecodeHuffmanPairs(), fl::third_party::DecodeHuffmanQuads(), fl::RedBlackTree< value_type, PairCompare, Allocator >::deleteFixup(), fl::third_party::DequantBlock(), fl::anonymous_namespace{rgbw.cpp.hpp}::divide_by_3(), fl::Big_Caleido::draw(), fl::Big_Caleido_FP::draw(), fl::Caleido1::draw(), fl::Caleido1_FP::draw(), fl::Caleido2::draw(), fl::Caleido2_FP::draw(), fl::Caleido3::draw(), fl::Caleido3_FP::draw(), fl::Center_Field::draw(), fl::Chasing_Spirals_Float::draw(), fl::Complex_Kaleido::draw(), fl::Complex_Kaleido_2::draw(), fl::Complex_Kaleido_2_FP::draw(), fl::Complex_Kaleido_3::draw(), fl::Complex_Kaleido_3_FP::draw(), fl::Complex_Kaleido_4::draw(), fl::Complex_Kaleido_4_FP::draw(), fl::Complex_Kaleido_5::draw(), fl::Complex_Kaleido_6::draw(), fl::Complex_Kaleido_6_FP::draw(), fl::Complex_Kaleido_FP::draw(), fl::Corkscrew::draw(), fl::Distance_Experiment::draw(), fl::Distance_Experiment_FP::draw(), fl::Fluffy_Blobs::draw(), fl::Fluffy_Blobs_FP::draw(), fl::Hot_Blob::draw(), fl::Hot_Blob_FP::draw(), fl::Lava1::draw(), fl::Lava1_FP::draw(), fl::Module_Experiment10::draw(), fl::Module_Experiment1::draw(), fl::Module_Experiment1_FP::draw(), fl::Module_Experiment2::draw(), fl::Module_Experiment3::draw(), fl::Module_Experiment4::draw(), fl::Module_Experiment4_FP::draw(), fl::Module_Experiment5::draw(), fl::Module_Experiment5_FP::draw(), fl::Module_Experiment6::draw(), fl::Module_Experiment6_FP::draw(), fl::Module_Experiment7::draw(), fl::Module_Experiment7_FP::draw(), fl::Module_Experiment8::draw(), fl::Module_Experiment8_FP::draw(), fl::Module_Experiment9::draw(), fl::Module_Experiment9_FP::draw(), fl::Parametric_Water::draw(), fl::Parametric_Water_FP::draw(), fl::Polar_Waves::draw(), fl::Polar_Waves_FP::draw(), fl::RedSquare::draw(), fl::RGB_Blobs2::draw(), fl::RGB_Blobs2_FP::draw(), fl::RGB_Blobs3::draw(), fl::RGB_Blobs3_FP::draw(), fl::RGB_Blobs4::draw(), fl::RGB_Blobs4_FP::draw(), fl::RGB_Blobs5::draw(), fl::RGB_Blobs5_FP::draw(), fl::RGB_Blobs::draw(), fl::RGB_Blobs_FP::draw(), fl::Rings::draw(), fl::Rings_FP::draw(), fl::Rotating_Blob::draw(), fl::Rotating_Blob_FP::draw(), fl::Scaledemo1::draw(), fl::Slow_Fade::draw(), fl::Slow_Fade_FP::draw(), fl::SpiralMatrix10::draw(), fl::SpiralMatrix10_FP::draw(), fl::SpiralMatrix1::draw(), fl::SpiralMatrix1_FP::draw(), fl::SpiralMatrix2::draw(), fl::SpiralMatrix2_FP::draw(), fl::SpiralMatrix3::draw(), fl::SpiralMatrix3_FP::draw(), fl::SpiralMatrix4::draw(), fl::SpiralMatrix5::draw(), fl::SpiralMatrix5_FP::draw(), fl::SpiralMatrix6::draw(), fl::SpiralMatrix6_FP::draw(), fl::SpiralMatrix8::draw(), fl::SpiralMatrix8_FP::draw(), fl::SpiralMatrix9::draw(), fl::SpiralMatrix9_FP::draw(), fl::Spiralus2::draw(), fl::Spiralus2_FP::draw(), fl::Spiralus::draw(), fl::Spiralus_FP::draw(), fl::Tile2x2_u8::draw(), fl::Water::draw(), fl::Water_FP::draw(), fl::Waves::draw(), fl::Waves_FP::draw(), fl::Yves::draw(), fl::Yves_FP::draw(), fl::Zoom2::draw(), fl::Zoom2_FP::draw(), fl::Zoom::draw(), fl::Zoom_FP::draw(), fl::third_party::vorbis::draw_line(), fl::FlowFieldFloat::drawDot(), fl::FlowFieldFP::drawDot(), fl::FlowFieldFloat::drawFlowVectors(), fl::FlowFieldFP::drawFlowVectors(), fl::FlowFieldFloat::drawImpl(), fl::FlowFieldFP::drawImpl(), fl::third_party::TJpg_Decoder::drawJpg(), fl::gfx::detail::drawLineCore(), easeInOutCubic16(), easeInOutQuad16(), fl::RedBlackTree< value_type, PairCompare, Allocator >::erase(), fl::detail::gamma_constexpr::eval(), fl::detail::gamma_constexpr::eval16(), exp(), fl::detail::gamma_constexpr::exp2_fp(), fl::fixed_point_base< Derived, IntBits, FracBits >::exp2_fp(), fl::s12x4::exp2_fp(), fl::s16x16::exp2_fp(), fl::s24x8::exp2_fp(), fl::s4x12::exp2_fp(), fl::s8x24::exp2_fp(), fl::s8x8::exp2_fp(), fl::u12x4::exp2_fp(), fl::u16x16::exp2_fp(), fl::u24x8::exp2_fp(), fl::u4x12::exp2_fp(), fl::u8x24::exp2_fp(), fl::u8x8::exp2_fp(), fl::detail::gamma_constexpr::exp2_pos(), fl::rect< T >::expand(), expfp(), fast_hash32(), fast_hash64(), fast_logf_approx(), fl::third_party::FASTABS(), fl::audio::fft::Context::fastDb(), fl::third_party::vorbis::float32_unpack(), fl::fixed_point< IntBits, FracBits, Sign::SIGNED >< IntBits, FracBits >::floor(), fl::fixed_point_base< Derived, IntBits, FracBits >::floor(), floor(), fl::s12x4::floor(), fl::s16x16::floor(), fl::s24x8::floor(), fl::s4x12::floor(), fl::s8x24::floor(), fl::s8x8::floor(), fl::u12x4::floor(), fl::u16x16::floor(), fl::u24x8::floor(), fl::u4x12::floor(), fl::u8x24::floor(), fl::u8x8::floor(), fl::FlowFieldFloat::flowAdvect(), fl::FlowFieldFP::flowAdvect(), fmod(), fmod< double >(), fmod_impl_double(), fmod_impl_float(), fmodf(), fl::FlowFieldFloat::fmodPos(), fl::fixed_point< IntBits, FracBits, Sign::SIGNED >< IntBits, FracBits >::fract(), fl::fixed_point_base< Derived, IntBits, FracBits >::fract(), fract(), fl::s12x4::fract(), fl::s16x16::fract(), fl::s24x8::fract(), fl::s4x12::fract(), fl::s8x24::fract(), fl::s8x8::fract(), fl::u12x4::fract(), fl::u16x16::fract(), fl::u24x8::fract(), fl::u4x12::fract(), fl::u8x24::fract(), fl::u8x8::fract(), fl::third_party::vorbis::get32(), fl::third_party::vorbis::get32_packet(), fl::third_party::vorbis::get8_packet(), fl::WaveSimulation1D::getf(), fl::WaveSimulation1D_Real::getf(), fl::WaveSimulation2D::getf(), fl::WaveSimulation2D_Real::getf(), fl::WaveSimulation1D::geti16(), fl::WaveSimulation1D_Real::geti16(), fl::WaveSimulation2D::geti16(), fl::WaveSimulation2D_Real::geti16(), fl::WaveSimulation1D::geti16All(), fl::WaveSimulation2D::geti16All(), fl::WaveSimulation1D::geti16Previous(), fl::WaveSimulation1D_Real::geti16Previous(), fl::WaveSimulation2D::geti16Previous(), fl::WaveSimulation2D_Real::geti16Previous(), fl::WaveSimulation1D::geti8(), fl::WaveSimulation1D_Real::geti8(), fl::WaveSimulation2D::geti8(), fl::WaveSimulation2D_Real::geti8(), fl::GlyphBitmap::getPixel(), fl::WaveFx::getu8(), fl::WaveSimulation1D::getu8(), fl::WaveSimulation1D_Real::getu8(), fl::WaveSimulation2D::getu8(), fl::WaveSimulation2D_Real::getu8(), fl::FlowFieldFloat::Perlin2D::grad(), grad(), fl::perlin_q16::grad(), fl::perlin_s16x16::grad(), fl::perlin_s8x8::grad(), fl::perlin_s16x16::grad3d(), fl::perlin_i16_optimized::grad_i16(), fl::Canvas< RGB_T >::has(), fl::gfx::Canvas< RGB_T >::has(), fl::gfx::CanvasMapped< RGB_T >::has(), fl::WaveSimulation1D::has(), fl::WaveSimulation1D_Real::has(), fl::WaveSimulation2D::has(), fl::WaveSimulation2D_Real::has(), fl::XYMap::has(), fl::XYMap::has(), fl::anonymous_namespace{noise_woryley.cpp.hpp}::hash(), HSV16toRGB(), hypot(), hypot(), hypot_impl_double(), hypot_impl_float(), hypotf(), fl::third_party::idct9(), fl::FlowFieldFloat::idx(), fl::FlowFieldFP::idx(), fl::third_party::imdct12(), fl::third_party::IntensityProcMPEG1(), fl::third_party::IntensityProcMPEG2(), fl::Tile2x2_u8_wrap::Interpolate(), fl::CatmullRomPath::interpolate(), isqrt32(), fl::gfx::detail::isqrt32_ceil(), isqrt64(), fl::third_party::jd_decomp(), fl::third_party::jd_decomp_progressive(), fl::third_party::TJpg_Decoder::jd_output(), fl::fixed_point_base< Derived, IntBits, FracBits >::log2_fp(), fl::s12x4::log2_fp(), fl::s16x16::log2_fp(), fl::s24x8::log2_fp(), fl::s4x12::log2_fp(), fl::s8x24::log2_fp(), fl::s8x8::log2_fp(), fl::u12x4::log2_fp(), fl::u16x16::log2_fp(), fl::u24x8::log2_fp(), fl::u4x12::log2_fp(), fl::u8x24::log2_fp(), fl::u8x8::log2_fp(), fl::third_party::MADD64(), fl::map_range_detail::map_range_math< T, vec2< V > >::map(), map16_to_32(), map16_to_8(), map32_to_16(), map32_to_8(), map8_to_16(), map8_to_32(), map_float(), fl::PerlinParticlePunch::mapf(), fl::XYMap::mapPixels(), fl::ScreenMap::mapToIndex(), fl::XMap::mapToIndex(), fl::XYMap::mapToIndex(), fl::XYMap::mapToIndex(), fl::WaveCrgbGradientMap::mapWaveToLEDs(), fl::WaveCrgbMapDefault::mapWaveToLEDs(), fl::RedBlackTree< value_type, PairCompare, Allocator >::maximum(), fl::Tile2x2_u8::MaxTile(), fl::third_party::vorbis::maybe_start_packet(), fl::third_party::mcu_output(), fl::third_party::MidSideProc(), fl::RedBlackTree< value_type, PairCompare, Allocator >::minimum(), fl::third_party::MULSHIFT32(), fl::Engine::multiply(), fl::third_party::vorbis::neighbors(), fl::XYPath::NewPointPath(), fl::FlowFieldFloat::Perlin2D::noise(), noiseCylinderCRGB(), noiseCylinderHSV16(), noiseRingCRGB(), noiseRingHSV16(), noiseSphereCRGB(), noiseSphereHSV16(), fl::third_party::nsgif__decode_complex(), fl::third_party::nsgif__parse_image_descriptor(), fl::third_party::nsgif__restore_bg(), fl::FastHash< vec2< T > >::operator()(), fl::GammaEval16< GammaRaw >::operator()(), fl::GammaEval< GammaRaw >::operator()(), fl::Grid< T >::operator()(), fl::Grid< T >::operator()(), fl::Leds::operator()(), fl::Leds::operator()(), fl::MapRedBlackTree< Key, Value, Compare, Allocator >::value_compare::operator()(), fl::MatrixSlice< T >::operator()(), fl::MultiMapTree< Key, Value, Compare, Allocator >::value_compare::operator()(), fl::Tile2x2_u8::operator()(), fl::XMap::operator()(), fl::XYMap::operator()(), fl::CLEDController::operator[](), fl::CRGB::operator[](), fl::CRGB::operator[](), fl::hsv8::operator[](), fl::hsv8::operator[](), fl::ScreenMap::operator[](), fl::ScreenMap::operator[](), fl::third_party::TJpgInstanceDecoder::outputCallback(), P(), fl::Luminova::plotDot(), pnoise(), fl::perlin_q16::pnoise2d_raw(), fl::perlin_s16x16::pnoise2d_raw(), fl::perlin_s8x8::pnoise2d_raw(), fl::perlin_s16x16::pnoise3d_raw(), fl::RedBlackTree< T, Compare, Allocator >::const_iterator::predecessor(), fl::RedBlackTree< T, Compare, Allocator >::const_reverse_iterator::predecessor(), fl::RedBlackTree< T, Compare, Allocator >::iterator::predecessor(), fl::RedBlackTree< T, Compare, Allocator >::reverse_iterator::predecessor(), fl::third_party::vorbis::predict_point(), fl::XYRasterU8Sparse::rasterize_internal(), fl::Corkscrew::readFromMulti(), fl::FontImpl::renderGlyph(), fl::RedBlackTree< value_type, PairCompare, Allocator >::rotateLeft(), fl::RedBlackTree< value_type, PairCompare, Allocator >::rotateRight(), fl::fixed_point< IntBits, FracBits, Sign::SIGNED >< IntBits, FracBits >::rsqrt(), fl::fixed_point_base< Derived, IntBits, FracBits >::rsqrt(), rsqrt(), fl::s12x4::rsqrt(), fl::s16x16::rsqrt(), fl::s24x8::rsqrt(), fl::s4x12::rsqrt(), fl::s8x24::rsqrt(), fl::s8x8::rsqrt(), fl::u12x4::rsqrt(), fl::u16x16::rsqrt(), fl::u24x8::rsqrt(), fl::u4x12::rsqrt(), fl::u8x24::rsqrt(), fl::u8x8::rsqrt(), sample(), sampleBilinear(), sampleNearest(), fl::third_party::SAR64(), fl::Tile2x2_u8::scale(), scale8_to_16_accurate(), fl::Engine::screen(), fl::PointPath::set(), fl::WaveSimulation1D_Real::set(), fl::WaveFx::setf(), fl::WaveSimulation1D::setf(), fl::WaveSimulation2D::setf(), fl::WaveSimulation2D_Real::setf(), fl::WaveSimulation2D::seti16(), fl::WaveSimulation2D_Real::seti16(), fl::Tile2x2_u8::setOrigin(), fl::Engine::setPixelColorInternal(), fl::anonymous_namespace{chasing_spirals.cpp.hpp}::setupChasingSpiralFrame(), fl::third_party::SHL64(), fl::fixed_point< IntBits, FracBits, Sign::SIGNED >< IntBits, FracBits >::sign(), fl::fixed_point_base< Derived, IntBits, FracBits >::sign(), fl::s12x4::sign(), fl::s16x16::sign(), fl::s24x8::sign(), fl::s4x12::sign(), fl::s8x24::sign(), fl::s8x8::sign(), sign(), fl::detail::sin_poly_quarterturn_(), fl::detail::sin_reduce_(), fl::third_party::vorbis::skip(), smap16_to_32(), smap16_to_8(), smap32_to_16(), smap32_to_8(), smap8_to_16(), smap8_to_32(), fl::fixed_point< IntBits, FracBits, Sign::SIGNED >< IntBits, FracBits >::smoothstep(), fl::fixed_point_base< Derived, IntBits, FracBits >::smoothstep(), fl::s12x4::smoothstep(), fl::s16x16::smoothstep(), fl::s24x8::smoothstep(), fl::s4x12::smoothstep(), fl::s8x24::smoothstep(), fl::s8x8::smoothstep(), smoothstep(), fl::u12x4::smoothstep(), fl::u16x16::smoothstep(), fl::u24x8::smoothstep(), fl::u4x12::smoothstep(), fl::u8x24::smoothstep(), fl::u8x8::smoothstep(), splat(), fl::fixed_point< IntBits, FracBits, Sign::SIGNED >< IntBits, FracBits >::sqrt(), fl::fixed_point_base< Derived, IntBits, FracBits >::sqrt(), fl::s12x4::sqrt(), fl::s16x16::sqrt(), fl::s24x8::sqrt(), fl::s4x12::sqrt(), fl::s8x24::sqrt(), fl::s8x8::sqrt(), sqrt(), fl::u12x4::sqrt(), fl::u16x16::sqrt(), fl::u24x8::sqrt(), fl::u4x12::sqrt(), fl::u8x24::sqrt(), fl::u8x8::sqrt(), fl::fixed_point_base< Derived, IntBits, FracBits >::sqrt_impl(), fl::fixed_point_base< Derived, IntBits, FracBits >::sqrt_impl(), fl::detail::sqrt_newton_(), fl::third_party::vorbis::square(), fl::third_party::vorbis::start_decoder(), fl::third_party::truetype::stbtt__add_point(), fl::third_party::truetype::stbtt__compute_crossings_x(), fl::third_party::truetype::stbtt__csctx_v(), fl::third_party::truetype::stbtt__cuberoot(), fl::third_party::truetype::stbtt__GetGlyphShapeTT(), fl::third_party::truetype::stbtt__track_vertex(), fl::third_party::truetype::stbtt_BakeFontBitmap_internal(), fl::third_party::truetype::stbtt_FlattenCurves(), fl::third_party::truetype::stbtt_GetGlyphSDF(), fl::third_party::truetype::stbtt_GetPackedQuad(), fl::third_party::truetype::stbtt_setvertex(), fl::fixed_point< IntBits, FracBits, Sign::SIGNED >< IntBits, FracBits >::step(), fl::fixed_point_base< Derived, IntBits, FracBits >::step(), fl::s12x4::step(), fl::s16x16::step(), fl::s24x8::step(), fl::s4x12::step(), fl::s8x24::step(), fl::s8x8::step(), step(), fl::u12x4::step(), fl::u16x16::step(), fl::u24x8::step(), fl::u4x12::step(), fl::u8x24::step(), fl::u8x8::step(), fl::Engine::subtract(), fl::RedBlackTree< T, Compare, Allocator >::const_iterator::successor(), fl::RedBlackTree< T, Compare, Allocator >::const_reverse_iterator::successor(), fl::RedBlackTree< T, Compare, Allocator >::iterator::successor(), fl::RedBlackTree< T, Compare, Allocator >::reverse_iterator::successor(), fl::ScreenMap::toJson(), transpose8(), transpose8x1(), transpose8x1_MSB(), fl::third_party::vorbis::uint32_compare(), fl::WaveSimulation2D::update(), upscaleArbitrary(), upscaleArbitraryFloat(), upscaleFloat(), upscalePowerOf2(), upscaleRectangular(), upscaleRectangularPowerOf2(), fl::gfx::blur_detail::vpass_full(), fl::gfx::blur_detail::vpass_rowmajor_impl(), fl::third_party::WinPrevious(), worley_noise_2d_q15(), x_linear(), x_reverse(), fl::NoisePalette::XY(), XY(), fl::anonymous_namespace{blur.cpp.hpp}::xy_legacy_wrapper(), xy_line_by_line(), xy_serpentine(), fl::Engine::xyMap(), fl::Fx1d::xyMap(), fl::Fx2d::xyMap(), xyMapCallbackAdapter(), fl::colorimetric_detail::xyY_to_XYZ(), and fl::third_party::yuv_to_rgb().

◆ y

fl::y = *(u32*)(A)

Definition at line 23 of file transposition.cpp.hpp.

Referenced by fl::Leds::Leds(), fl::PointPath::PointPath(), fl::anonymous_namespace{channel.cpp.hpp}::ReorderingPixelIteratorAny::ReorderingPixelIteratorAny(), fl::WaveSimulation2D_Real::~WaveSimulation2D_Real(), fl::Grid< T >::access(), fl::Grid< T >::access(), fl::Engine::add(), fl::WaveFx::addf(), fl::ScreenMap::addOffsetY(), fl::gfx::addPixelToBuffer(), fl::CatmullRomParams::addPoint(), fl::CatmullRomPath::addPoint(), fl::Canvas< RGB_T >::at(), fl::Canvas< RGB_T >::at(), fl::gfx::Canvas< RGB_T >::at(), fl::gfx::Canvas< RGB_T >::at(), fl::gfx::CanvasMapped< RGB_T >::at(), fl::gfx::CanvasMapped< RGB_T >::at(), fl::Grid< T >::at(), fl::Grid< T >::at(), fl::Leds::at(), fl::Leds::at(), fl::MatrixSlice< T >::at(), fl::MatrixSlice< T >::at(), fl::Tile2x2_u8::at(), fl::Tile2x2_u8::at(), fl::Tile2x2_u8_wrap::at(), fl::Tile2x2_u8_wrap::at(), fl::XYRasterSparse_RGB8::at(), fl::XYRasterU8Sparse::at(), atan2(), atan2(), fl::fixed_point< IntBits, FracBits, Sign::SIGNED >< IntBits, FracBits >::atan2(), fl::fixed_point_base< Derived, IntBits, FracBits >::atan2(), fl::s12x4::atan2(), fl::s16x16::atan2(), fl::s24x8::atan2(), fl::s4x12::atan2(), fl::s8x24::atan2(), fl::s8x8::atan2(), fl::detail::atan2_full_(), atan2_impl_double(), atan2_impl_float(), atan2f(), fl::gfx::blurGaussianImpl(), fl::gfx::blurGaussianMappedImpl(), fl::Corkscrew::calculateTileAtWrap(), fl::ScreenMap::Circle(), fl::PerlinParticlePunch::circleNoiseGen(), fl::Engine::colorburn(), fl::Engine::colordodge(), fl::ArchimedeanSpiralPath::compute(), fl::CatmullRomPath::compute(), fl::CirclePath::compute(), fl::GielisCurvePath::compute(), fl::HeartPath::compute(), fl::LinePath::compute(), fl::PhyllotaxisPath::compute(), fl::RosePath::compute(), fl::third_party::vorbis::compute_codewords(), fl::rect< T >::contains(), fl::Frame::convertPixelsToRgb(), fl::XYMap::convertToLookUpTable(), fl::third_party::DecodeHuffmanPairs(), fl::third_party::DecodeHuffmanQuads(), fl::third_party::DequantBlock(), fl::anonymous_namespace{rgbw.cpp.hpp}::divide_by_3(), fl::Big_Caleido::draw(), fl::Big_Caleido_FP::draw(), fl::Caleido1::draw(), fl::Caleido1_FP::draw(), fl::Caleido2::draw(), fl::Caleido2_FP::draw(), fl::Caleido3::draw(), fl::Caleido3_FP::draw(), fl::Center_Field::draw(), fl::Chasing_Spirals_Float::draw(), fl::Complex_Kaleido::draw(), fl::Complex_Kaleido_2::draw(), fl::Complex_Kaleido_2_FP::draw(), fl::Complex_Kaleido_3::draw(), fl::Complex_Kaleido_3_FP::draw(), fl::Complex_Kaleido_4::draw(), fl::Complex_Kaleido_4_FP::draw(), fl::Complex_Kaleido_5::draw(), fl::Complex_Kaleido_6::draw(), fl::Complex_Kaleido_6_FP::draw(), fl::Complex_Kaleido_FP::draw(), fl::Corkscrew::draw(), fl::Distance_Experiment::draw(), fl::Distance_Experiment_FP::draw(), fl::Fire2012::draw(), fl::Fluffy_Blobs::draw(), fl::Fluffy_Blobs_FP::draw(), fl::Hot_Blob::draw(), fl::Hot_Blob_FP::draw(), fl::Lava1::draw(), fl::Lava1_FP::draw(), fl::Module_Experiment10::draw(), fl::Module_Experiment1::draw(), fl::Module_Experiment1_FP::draw(), fl::Module_Experiment2::draw(), fl::Module_Experiment3::draw(), fl::Module_Experiment4::draw(), fl::Module_Experiment4_FP::draw(), fl::Module_Experiment5::draw(), fl::Module_Experiment5_FP::draw(), fl::Module_Experiment6::draw(), fl::Module_Experiment6_FP::draw(), fl::Module_Experiment7::draw(), fl::Module_Experiment7_FP::draw(), fl::Module_Experiment8::draw(), fl::Module_Experiment8_FP::draw(), fl::Module_Experiment9::draw(), fl::Module_Experiment9_FP::draw(), fl::Parametric_Water::draw(), fl::Parametric_Water_FP::draw(), fl::Polar_Waves::draw(), fl::Polar_Waves_FP::draw(), fl::RedSquare::draw(), fl::RGB_Blobs2::draw(), fl::RGB_Blobs2_FP::draw(), fl::RGB_Blobs3::draw(), fl::RGB_Blobs3_FP::draw(), fl::RGB_Blobs4::draw(), fl::RGB_Blobs4_FP::draw(), fl::RGB_Blobs5::draw(), fl::RGB_Blobs5_FP::draw(), fl::RGB_Blobs::draw(), fl::RGB_Blobs_FP::draw(), fl::Rings::draw(), fl::Rings_FP::draw(), fl::Rotating_Blob::draw(), fl::Rotating_Blob_FP::draw(), fl::Scaledemo1::draw(), fl::Slow_Fade::draw(), fl::Slow_Fade_FP::draw(), fl::SpiralMatrix10::draw(), fl::SpiralMatrix10_FP::draw(), fl::SpiralMatrix1::draw(), fl::SpiralMatrix1_FP::draw(), fl::SpiralMatrix2::draw(), fl::SpiralMatrix2_FP::draw(), fl::SpiralMatrix3::draw(), fl::SpiralMatrix3_FP::draw(), fl::SpiralMatrix4::draw(), fl::SpiralMatrix5::draw(), fl::SpiralMatrix5_FP::draw(), fl::SpiralMatrix6::draw(), fl::SpiralMatrix6_FP::draw(), fl::SpiralMatrix8::draw(), fl::SpiralMatrix8_FP::draw(), fl::SpiralMatrix9::draw(), fl::SpiralMatrix9_FP::draw(), fl::Spiralus2::draw(), fl::Spiralus2_FP::draw(), fl::Spiralus::draw(), fl::Spiralus_FP::draw(), fl::Tile2x2_u8::draw(), fl::Water::draw(), fl::Water_FP::draw(), fl::Waves::draw(), fl::Waves_FP::draw(), fl::Yves::draw(), fl::Yves_FP::draw(), fl::Zoom2::draw(), fl::Zoom2_FP::draw(), fl::Zoom::draw(), fl::Zoom_FP::draw(), fl::third_party::vorbis::draw_line(), fl::FlowFieldFloat::drawDot(), fl::FlowFieldFP::drawDot(), fl::FlowFieldFloat::drawFlowVectors(), fl::FlowFieldFP::drawFlowVectors(), fl::FlowFieldFloat::drawImpl(), fl::FlowFieldFP::drawImpl(), fl::third_party::TJpg_Decoder::drawJpg(), fl::gfx::detail::drawLineCore(), fl::RedBlackTree< value_type, PairCompare, Allocator >::erase(), fl::rect< T >::expand(), fl::FlowFieldFloat::flowAdvect(), fl::FlowFieldFP::flowAdvect(), fmod(), fmod< double >(), fmod_impl_double(), fmod_impl_float(), fmodf(), fl::third_party::FreqInvertRescale(), fl::WaveSimulation2D::getf(), fl::WaveSimulation2D_Real::getf(), fl::WaveSimulation2D::geti16(), fl::WaveSimulation2D_Real::geti16(), fl::WaveSimulation2D::geti16All(), fl::WaveSimulation2D::geti16Previous(), fl::WaveSimulation2D_Real::geti16Previous(), fl::WaveSimulation2D::geti8(), fl::WaveSimulation2D_Real::geti8(), fl::GlyphBitmap::getPixel(), fl::WaveFx::getu8(), fl::WaveSimulation2D::getu8(), fl::WaveSimulation2D_Real::getu8(), fl::FlowFieldFloat::Perlin2D::grad(), grad(), fl::perlin_q16::grad(), fl::perlin_s16x16::grad(), fl::perlin_s8x8::grad(), fl::perlin_s16x16::grad3d(), fl::perlin_i16_optimized::grad_i16(), fl::Canvas< RGB_T >::has(), fl::gfx::Canvas< RGB_T >::has(), fl::gfx::CanvasMapped< RGB_T >::has(), fl::WaveSimulation2D::has(), fl::WaveSimulation2D_Real::has(), fl::XYMap::has(), fl::XYMap::has(), fl::anonymous_namespace{noise_woryley.cpp.hpp}::hash(), fl::third_party::HybridTransform(), hypot(), hypot(), hypot_impl_double(), hypot_impl_float(), hypotf(), fl::FlowFieldFloat::idx(), fl::FlowFieldFP::idx(), fl::third_party::IMDCT12x3(), fl::third_party::IMDCT36(), fl::RedBlackTree< value_type, PairCompare, Allocator >::insertFixup(), fl::Tile2x2_u8_wrap::Interpolate(), fl::CatmullRomPath::interpolate(), fl::third_party::jd_decomp(), fl::third_party::jd_decomp_progressive(), fl::third_party::TJpg_Decoder::jd_output(), fl::third_party::MADD64(), fl::map_range_detail::map_range_math< T, vec2< V > >::map(), fl::XYMap::mapPixels(), fl::XYMap::mapToIndex(), fl::XYMap::mapToIndex(), fl::WaveCrgbGradientMap::mapWaveToLEDs(), fl::WaveCrgbMapDefault::mapWaveToLEDs(), fl::Tile2x2_u8::MaxTile(), fl::third_party::mcu_output(), fl::third_party::MULSHIFT32(), fl::Engine::multiply(), fl::XYPath::NewPointPath(), fl::FlowFieldFloat::Perlin2D::noise(), noiseCylinderCRGB(), noiseCylinderHSV16(), noiseRingCRGB(), noiseRingHSV16(), noiseSphereCRGB(), noiseSphereHSV16(), fl::third_party::nsgif__decode_complex(), fl::third_party::nsgif__deinterlace(), fl::third_party::nsgif__next_row(), fl::third_party::nsgif__parse_image_descriptor(), fl::third_party::nsgif__restore_bg(), fl::Grid< T >::operator()(), fl::Grid< T >::operator()(), fl::Leds::operator()(), fl::Leds::operator()(), fl::MapRedBlackTree< Key, Value, Compare, Allocator >::value_compare::operator()(), fl::MatrixSlice< T >::operator()(), fl::MultiMapTree< Key, Value, Compare, Allocator >::value_compare::operator()(), fl::Tile2x2_u8::operator()(), fl::XYMap::operator()(), fl::Leds::operator[](), fl::Leds::operator[](), fl::third_party::TJpgInstanceDecoder::outputCallback(), fl::Luminova::plotDot(), pnoise(), fl::perlin_q16::pnoise2d_raw(), fl::perlin_s16x16::pnoise2d_raw(), fl::perlin_s8x8::pnoise2d_raw(), fl::perlin_s16x16::pnoise3d_raw(), fl::RedBlackTree< T, Compare, Allocator >::const_iterator::predecessor(), fl::RedBlackTree< T, Compare, Allocator >::const_reverse_iterator::predecessor(), fl::RedBlackTree< T, Compare, Allocator >::iterator::predecessor(), fl::RedBlackTree< T, Compare, Allocator >::reverse_iterator::predecessor(), fl::XYRasterU8Sparse::rasterize_internal(), fl::Corkscrew::readFromMulti(), fl::FontImpl::renderGlyph(), fl::RedBlackTree< value_type, PairCompare, Allocator >::rotateLeft(), fl::RedBlackTree< value_type, PairCompare, Allocator >::rotateRight(), sample(), sampleBilinear(), sampleNearest(), fl::Tile2x2_u8::scale(), fl::Engine::screen(), fl::PointPath::set(), fl::WaveFx::setf(), fl::WaveSimulation2D::setf(), fl::WaveSimulation2D_Real::setf(), fl::WaveSimulation2D::seti16(), fl::WaveSimulation2D_Real::seti16(), fl::Tile2x2_u8::setOrigin(), fl::Engine::setPixelColorInternal(), fl::anonymous_namespace{chasing_spirals.cpp.hpp}::setupChasingSpiralFrame(), splat(), fl::third_party::vorbis::start_decoder(), fl::third_party::truetype::stbtt__add_point(), fl::third_party::truetype::stbtt__compute_crossings_x(), fl::third_party::truetype::stbtt__csctx_v(), fl::third_party::truetype::stbtt__GetGlyphShapeTT(), fl::third_party::truetype::stbtt__rasterize(), fl::third_party::truetype::stbtt__track_vertex(), fl::third_party::truetype::stbtt_BakeFontBitmap_internal(), fl::third_party::truetype::stbtt_FlattenCurves(), fl::third_party::truetype::stbtt_GetGlyphSDF(), fl::third_party::truetype::stbtt_GetPackedQuad(), fl::third_party::truetype::stbtt_setvertex(), fl::Engine::subtract(), fl::RedBlackTree< T, Compare, Allocator >::const_iterator::successor(), fl::RedBlackTree< T, Compare, Allocator >::const_reverse_iterator::successor(), fl::RedBlackTree< T, Compare, Allocator >::iterator::successor(), fl::RedBlackTree< T, Compare, Allocator >::reverse_iterator::successor(), fl::ScreenMap::toJson(), transpose8(), transpose8x1(), transpose8x1_MSB(), fl::third_party::vorbis::uint32_compare(), fl::WaveSimulation2D::update(), upscaleArbitrary(), upscaleArbitraryFloat(), upscaleFloat(), upscalePowerOf2(), upscaleRectangular(), upscaleRectangularPowerOf2(), fl::gfx::blur_detail::vpass_rowmajor_impl(), worley_noise_2d_q15(), fl::NoisePalette::XY(), XY(), fl::anonymous_namespace{blur.cpp.hpp}::xy_legacy_wrapper(), xy_line_by_line(), xy_serpentine(), fl::Engine::xyMap(), fl::Fx2d::xyMap(), xyMapCallbackAdapter(), fl::colorimetric_detail::xyY_to_XYZ(), and fl::third_party::yuv_to_rgb().