19#ifndef SRC_SUPLA_CONTROL_LIGHTING_PWM_BASE_H_
20#define SRC_SUPLA_CONTROL_LIGHTING_PWM_BASE_H_
24#include "../action_handler.h"
25#include "../actions.h"
26#include "../channel_element.h"
28#define RGBW_STATE_ON_INIT_RESTORE -1
29#define RGBW_STATE_ON_INIT_OFF 0
30#define RGBW_STATE_ON_INIT_ON 1
41 virtual int adjustBrightness(
int input) = 0;
42 virtual void setMaxHwValue(
int maxHwValue) = 0;
47 explicit GeometricBrightnessAdjuster(
double power = 1.505,
49 int maxHwValue = 1023);
50 void setMaxHwValue(
int maxHwValue)
override;
51 int adjustBrightness(
int input)
override;
56 int maxHwValue = 1023;
63 enum ButtonControlType : uint8_t {
70 enum class AutoIterateMode : uint8_t { OFF, DIMMER, RGB, ALL };
72 enum class LegacyChannelFunction : uint8_t { None, RGBW, RGB, Dimmer };
86 bool local =
false)
override;
87 void fillChannelConfig(
void *channelConfig,
89 uint8_t configType)
override;
91 virtual void setRGBCCTValueOnDevice(uint32_t output[5],
int usedOutputs) = 0;
93 virtual void setRGBW(
int red,
99 bool instant =
false);
101 virtual void setRGBCCT(
int red,
106 int whiteTemperature,
108 bool instant =
false);
111 virtual void turnOn();
112 virtual void turnOff();
113 virtual void toggle();
117 void handleAction(
int event,
int action)
override;
118 void setStep(
int step);
119 void setDefaultDimmedBrightness(
int dimmedBrightness);
120 void setFadeEffectTime(
int timeMs);
121 void setMinIterationBrightness(uint8_t minBright);
122 void setMinMaxIterationDelay(uint16_t delayMs);
166 int getCurrentDimmerBrightness()
const;
167 int getCurrentRGBBrightness()
const;
209 uint16_t minPwmFrequency,
210 uint16_t maxPwmFrequency,
211 uint16_t stepPwmFrequency);
288 void setMaxHwValue(
int newMaxHwValue);
290 void enableChannel();
291 void disableChannel();
292 void updateEnabledState();
294 uint8_t addWithLimit(
int value,
int addition,
int limit = 255);
295 virtual void iterateDimmerRGBW(
int rgbStep,
int wStep);
300 int adjustBrightness(
int value);
302 int getStep(
int step,
int target,
int current)
const;
303 bool calculateAndUpdate(
int targetValue,
306 uint32_t *lastChangeMs,
307 const uint32_t now)
const;
313 uint8_t colorBrightness = 0;
314 uint8_t whiteBrightness = 0;
315 uint8_t whiteTemperature = 0;
319 uint8_t colorBrightness = 100;
320 uint8_t whiteBrightness = 100;
327 int16_t colorBrightness = -1;
328 int16_t brightness = -1;
329 int16_t whiteTemperature = -1;
330 int16_t white1Brightness = -1;
331 int16_t white2Brightness = -1;
332 uint16_t redDistance = 0;
333 uint16_t greenDistance = 0;
334 uint16_t blueDistance = 0;
335 uint16_t colorBrightnessDistance = 0;
336 uint16_t brightnessDistance = 0;
337 uint16_t whiteTemperatureDistance = 0;
341 uint32_t lastTick = 0;
342 uint32_t lastChangeRedMs = 0;
343 uint32_t lastChangeGreenMs = 0;
344 uint32_t lastChangeBlueMs = 0;
345 uint32_t lastChangeColorBrightnessMs = 0;
346 uint32_t lastChangeBrightnessMs = 0;
347 uint32_t lastChangeWhiteTemperatureMs = 0;
348 uint32_t lastMsgReceivedMs = 0;
349 uint32_t lastIterateDimmerTimestamp = 0;
350 uint32_t iterationDelayTimestamp = 0;
351 uint32_t lastAutoIterateStartTimestamp = 0;
354 uint8_t buttonStep = 10;
355 uint8_t defaultDimmedBrightness = 20;
356 bool dimIterationDirection =
false;
357 bool resetDisance =
false;
358 bool instant =
false;
360 bool initDone =
false;
361 bool skipLegacyMigration =
false;
362 int8_t stateOnInit = RGBW_STATE_ON_INIT_RESTORE;
363 uint8_t minIterationBrightness = 1;
364 uint8_t maxTotalHwPower = 100;
365 uint8_t usedChannels = 0;
366 LegacyChannelFunction legacyChannelFunction = LegacyChannelFunction::None;
368 enum ButtonControlType buttonControlType = BUTTON_FOR_RGBW;
369 enum AutoIterateMode autoIterateMode = AutoIterateMode::OFF;
371 float minBrightnessRatio = 0.0f;
372 float maxBrightnessRatio = 1.0f;
373 float minColorBrightnessRatio = 0.0f;
374 float maxColorBrightnessRatio = 1.0f;
376 uint16_t minMaxIterationDelay = 750;
377 uint16_t fadeEffect = 500;
379 uint16_t minPwmFrequency = 100;
380 uint16_t maxPwmFrequency = 9000;
381 uint16_t pwmFrequency = 500;
382 uint16_t stepPwmFrequency = 1;
384 uint16_t maxHwValue = 1023;
385 uint8_t pwmResolutionBits = 10;
387 uint32_t previousChannelFunction = 0;
389 float warmWhiteGain = 1.0;
390 float coldWhiteGain = 1.0;
Definition SuplaDevice.h:163
Definition action_handler.h:21
Definition lighting_pwm_base.h:38
Definition lighting_pwm_base.h:61
int getAncestorCount() const
Returns number of ancestor instances (by parent).
Definition lighting_pwm_base.cpp:1631
void setMaxPwmFrequency(uint16_t maxPwmFrequency)
Sets maximum PWM frequency.
Definition lighting_pwm_base.cpp:1651
void setMinPwmFrequency(uint16_t minPwmFrequency)
Sets minimum PWM frequency.
Definition lighting_pwm_base.cpp:1647
LightingPwmBase(LightingPwmBase *parent=nullptr)
Constructor.
Definition lighting_pwm_base.cpp:103
uint16_t getMaxPwmFrequency() const
Returns maximum PWM frequency.
Definition lighting_pwm_base.cpp:1705
void setSkipLegacyMigration()
Disables storage conversion from legacy channel function to new.
Definition lighting_pwm_base.cpp:1643
void setStepPwmFrequency(uint16_t stepPwmFrequency)
Sets PWM frequency step.
Definition lighting_pwm_base.cpp:1655
static uint16_t normalizePwmFrequency(uint16_t pwmFrequency, uint16_t minPwmFrequency, uint16_t maxPwmFrequency, uint16_t stepPwmFrequency)
Applies the same PWM frequency validation as setPwmFrequency().
Definition lighting_pwm_base.cpp:1681
void setPwmResolutionBits(uint8_t pwmResolutionBits)
Sets PWM resolution bits and updates the remembered hardware max value.
Definition lighting_pwm_base.cpp:1659
void convertStorageFromLegacyChannel(LegacyChannelFunction channelFunction)
Enables storage conversion from legacy channel function to new.
Definition lighting_pwm_base.cpp:1562
uint16_t getPwmFrequency() const
Returns current PWM frequency.
Definition lighting_pwm_base.cpp:1709
int32_t handleNewValueFromServer(TSD_SuplaChannelNewValue *newValue) override
Handles "new value" request from server.
Definition lighting_pwm_base.cpp:244
bool isStateStorageMigrationNeeded() const override
Method called after onInit() to check if state storage migration is needed.
Definition lighting_pwm_base.cpp:1638
void onFastTimer() override
Method called on fast timer interupt.
Definition lighting_pwm_base.cpp:794
void onInit() override
Third method called on element in SuplaDevice.begin().
Definition lighting_pwm_base.cpp:1083
void setPwmFrequency(uint16_t pwmFrequency)
Sets PWM frequency and applies validation.
Definition lighting_pwm_base.cpp:1673
void onSaveState() override
Method called periodically during SuplaDevice iteration.
Definition lighting_pwm_base.cpp:1241
void purgeConfig() override
Removes all configration data related to the element from Storage::Config.
Definition lighting_pwm_base.cpp:1539
bool hasParent() const
Checks if this instance has parent.
Definition lighting_pwm_base.cpp:1627
void onLoadConfig(SuplaDeviceClass *) override
First method called on element in SuplaDevice.begin().
Definition lighting_pwm_base.cpp:1437
int getMissingGpioCount() const
Returns number of GPIO pins that are required to control this channel.
Definition lighting_pwm_base.cpp:1567
uint8_t getPwmResolutionBits() const
Returns current PWM resolution bits remembered by this lighting instance.
Definition lighting_pwm_base.cpp:1717
void iterateAlways() override
Method called on each SuplaDevice iteration.
Definition lighting_pwm_base.cpp:213
void fillSuplaChannelNewValue(TSD_SuplaChannelNewValue *value) override
Fills TSD_SuplaChannelNewValue based on current state.
Definition lighting_pwm_base.cpp:1498
void onLoadState() override
Second method called on element in SuplaDevice.begin().
Definition lighting_pwm_base.cpp:1316
uint16_t getStepPwmFrequency() const
Returns PWM frequency step.
Definition lighting_pwm_base.cpp:1713
uint16_t getMinPwmFrequency() const
Returns minimum PWM frequency.
Definition lighting_pwm_base.cpp:1701
Definition lighting_pwm_base.h:323
Definition lighting_pwm_base.h:318
Definition lighting_pwm_base.h:309
Definition lighting_pwm_base.h:340