Same, for a strip driven through the RGBW conversion.
The overloads above read the source CRGB triple, which is what the sketch wrote – not what the strip is driven with. A controller in RGBW mode converts every pixel with rgb_2_rgbw before latching, and the resulting four drives are neither bounded by nor proportional to the source triple. Measured on the shipped default PowerModelRGBW at full white, in units of the sum below: source-triple 249 against a true 348 under kRGBWMaxBrightness, 266 under kRGBWBoostedWhite, 99 under kRGBWExactColors. The first two are the budget being under-spent against; the third is a strip dimmed for no reason.
This runs the same conversion the encoder will and charges all four emitters. It needs white_mW, so it falls back to the three-emitter figure – and says so once – when the caller declared only an RGB model.
- Parameters
-
| leds | span of LED data to check |
| rgbw | the controller's RGBW setting; an inactive one delegates to the three-emitter overload |
Definition at line 310 of file power_mgt.cpp.hpp.
310 {
312
313
314
315
316
317
318
319
320
321 if (!
rgbw.active() || white_mW == 0) {
323 FL_WARN_ONCE(
"power: controller is in RGBW mode but the power model "
324 "declares no white emitter, so the budget covers three "
325 "of its four diodes. Call "
326 "FastLED.setPowerModel(PowerModelRGBW(...)) to fix it.");
327 }
329 }
330
331 fl::u32 red32 = 0, green32 = 0, blue32 = 0, white32 = 0;
332 for (fl::size i = 0; i <
leds.size(); i++) {
333 fl::u8 r = 0,
g = 0, b = 0, w = 0;
335 &r, &g, &b, &w);
340 }
341
345 white32 *= white_mW;
346
347 red32 >>= 8;
348 green32 >>= 8;
349 blue32 >>= 8;
350 white32 >>= 8;
351
352 return red32 + green32 + blue32 + white32 +
354}
fl::u32 calculate_unscaled_power_mW(fl::span< const CRGB > leds)
Determines how many milliwatts the current LED data would draw at max brightness (255)
#define FL_WARN_ONCE(...)
FASTLED_FORCE_INLINE void rgb_2_rgbw(const Rgbw &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_w) FL_NO_EXCEPT
Converts RGB to RGBW using one of the functions.
static WhiteEmitterPower & gWhiteEmitterPower()
static fl::u8 map_power_value(fl::u8 brightness)
static PowerModelRGB & gPowerModel()
Global RGB power model (initialized to WS2812 @ 5V defaults, linear response)
fl::u8 blue_mW
Blue channel power at full brightness (255), in milliwatts.
fl::u8 dark_mW
Dark LED baseline power consumption, in milliwatts.
fl::u8 red_mW
Red channel power at full brightness (255), in milliwatts.
fl::u8 green_mW
Green channel power at full brightness (255), in milliwatts.
References PowerModelRGB::blue_mW, calculate_unscaled_power_mW(), PowerModelRGB::dark_mW, FL_WARN_ONCE, gPowerModel(), PowerModelRGB::green_mW, gWhiteEmitterPower(), leds, map_power_value(), WhiteEmitterPower::mW, PowerModelRGB::red_mW, fl::rgb_2_rgbw(), and rgbw.