FastLED 3.9.15
Loading...
Searching...
No Matches

◆ 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}
A fixed-size array implementation similar to std::array.
Definition array.h:27
unsigned char u8
Definition stdint.h:131
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: