19#ifndef SRC_SUPLA_CONTROL_RGB_CCT_BASE_H_
20#define SRC_SUPLA_CONTROL_RGB_CCT_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
38 virtual int adjustBrightness(
int input) = 0;
39 virtual void setMaxHwValue(
int maxHwValue) = 0;
44 explicit GeometricBrightnessAdjuster(
double power = 1.505,
46 int maxHwValue = 1023);
47 void setMaxHwValue(
int maxHwValue)
override;
48 int adjustBrightness(
int input)
override;
53 int maxHwValue = 1023;
60 enum ButtonControlType : uint8_t {
67 enum class AutoIterateMode : uint8_t { OFF, DIMMER, RGB, ALL };
69 enum class LegacyChannelFunction : uint8_t { None, RGBW, RGB, Dimmer };
83 bool local =
false)
override;
84 void fillChannelConfig(
void *channelConfig,
86 uint8_t configType)
override;
88 virtual void setRGBCCTValueOnDevice(uint32_t output[5],
int usedOutputs) = 0;
90 virtual void setRGBW(
int red,
96 bool instant =
false);
98 virtual void setRGBCCT(
int red,
103 int whiteTemperature,
105 bool instant =
false);
108 virtual void turnOn();
109 virtual void turnOff();
110 virtual void toggle();
114 void handleAction(
int event,
int action)
override;
115 void setStep(
int step);
116 void setDefaultDimmedBrightness(
int dimmedBrightness);
117 void setFadeEffectTime(
int timeMs);
118 void setMinIterationBrightness(uint8_t minBright);
119 void setMinMaxIterationDelay(uint16_t delayMs);
157 virtual RGBCCTBase &setBrightnessLimits(
int min,
int max);
160 virtual RGBCCTBase &setColorBrightnessLimits(
int min,
int max);
163 int getCurrentDimmerBrightness()
const;
164 int getCurrentRGBBrightness()
const;
165 void setMaxHwValue(
int newMaxHwValue);
259 void enableChannel();
260 void disableChannel();
261 void updateEnabledState();
263 uint8_t addWithLimit(
int value,
int addition,
int limit = 255);
264 virtual void iterateDimmerRGBW(
int rgbStep,
int wStep);
269 int adjustBrightness(
int value);
271 int getStep(
int step,
int target,
int current)
const;
272 bool calculateAndUpdate(
int targetValue,
275 uint32_t *lastChangeMs,
276 const uint32_t now)
const;
278 uint8_t buttonStep = 10;
280 uint8_t curGreen = 255;
282 uint8_t curColorBrightness = 0;
283 uint8_t curWhiteBrightness = 0;
284 uint8_t curWhiteTemperature = 0;
285 uint8_t lastColorBrightness = 100;
286 uint8_t lastWhiteBrightness = 100;
287 uint8_t defaultDimmedBrightness = 20;
288 bool dimIterationDirection =
false;
289 bool resetDisance =
false;
290 bool instant =
false;
292 bool initDone =
false;
293 bool skipLegacyMigration =
false;
294 int8_t stateOnInit = RGBW_STATE_ON_INIT_RESTORE;
295 uint8_t minIterationBrightness = 1;
296 uint8_t maxTotalHwPower = 100;
297 uint8_t usedChannels = 0;
298 LegacyChannelFunction legacyChannelFunction = LegacyChannelFunction::None;
300 enum ButtonControlType buttonControlType = BUTTON_FOR_RGBW;
301 enum AutoIterateMode autoIterateMode = AutoIterateMode::OFF;
303 uint16_t maxHwValue = 1023;
305 int16_t hwGreen = -1;
307 int16_t hwColorBrightness = -1;
308 int16_t hwBrightness = -1;
309 int16_t hwWhiteTemperature = -1;
310 int16_t hwWhite1Brightness = -1;
311 int16_t hwWhite2Brightness = -1;
312 uint16_t minBrightness = 1;
313 uint16_t maxBrightness = 1023;
314 uint16_t minColorBrightness = 1;
315 uint16_t maxColorBrightness = 1023;
316 uint16_t redDistance = 0;
317 uint16_t greenDistance = 0;
318 uint16_t blueDistance = 0;
319 uint16_t colorBrightnessDistance = 0;
320 uint16_t brightnessDistance = 0;
321 uint16_t whiteTemperatureDistance = 0;
323 uint16_t minMaxIterationDelay = 750;
324 uint16_t fadeEffect = 500;
326 uint16_t minPwmFrequency = 100;
327 uint16_t maxPwmFrequency = 9000;
328 uint16_t pwmFrequency = 500;
329 uint16_t stepPwmFrequency = 1;
331 uint32_t lastTick = 0;
332 uint32_t lastChangeRedMs = 0;
333 uint32_t lastChangeGreenMs = 0;
334 uint32_t lastChangeBlueMs = 0;
335 uint32_t lastChangeColorBrightnessMs = 0;
336 uint32_t lastChangeBrightnessMs = 0;
337 uint32_t lastChangeWhiteTemperatureMs = 0;
338 uint32_t lastMsgReceivedMs = 0;
339 uint32_t lastIterateDimmerTimestamp = 0;
340 uint32_t iterationDelayTimestamp = 0;
341 uint32_t lastAutoIterateStartTimestamp = 0;
342 uint32_t previousChannelFunction = 0;
344 float warmWhiteGain = 1.0;
345 float coldWhiteGain = 1.0;
Definition SuplaDevice.h:162
Definition action_handler.h:21
Definition rgb_cct_base.h:35
void setPwmFrequency(uint16_t pwmFrequency)
Sets PWM frequency and applies validation.
Definition rgb_cct_base.cpp:1530
uint16_t getStepPwmFrequency() const
Returns PWM frequency step.
Definition rgb_cct_base.cpp:1560
void onFastTimer() override
Method called on fast timer interupt.
Definition rgb_cct_base.cpp:713
RGBCCTBase(RGBCCTBase *parent=nullptr)
Constructor.
Definition rgb_cct_base.cpp:69
void setSkipLegacyMigration()
Disables storage conversion from legacy channel function to new.
Definition rgb_cct_base.cpp:1514
int getAncestorCount() const
Returns number of ancestor instances (by parent).
Definition rgb_cct_base.cpp:1502
void purgeConfig() override
Removes all configration data related to the element from Storage::Config.
Definition rgb_cct_base.cpp:1414
int32_t handleNewValueFromServer(TSD_SuplaChannelNewValue *newValue) override
Handles "new value" request from server.
Definition rgb_cct_base.cpp:188
void convertStorageFromLegacyChannel(LegacyChannelFunction channelFunction)
Enables storage conversion from legacy channel function to new.
Definition rgb_cct_base.cpp:1437
uint16_t getMaxPwmFrequency() const
Returns maximum PWM frequency.
Definition rgb_cct_base.cpp:1552
void onLoadState() override
Second method called on element in SuplaDevice.begin().
Definition rgb_cct_base.cpp:1200
int getMissingGpioCount() const
Returns number of GPIO pins that are required to control this channel.
Definition rgb_cct_base.cpp:1442
void setStepPwmFrequency(uint16_t stepPwmFrequency)
Sets PWM frequency step.
Definition rgb_cct_base.cpp:1526
void iterateAlways() override
Method called on each SuplaDevice iteration.
Definition rgb_cct_base.cpp:166
uint16_t getMinPwmFrequency() const
Returns minimum PWM frequency.
Definition rgb_cct_base.cpp:1548
bool hasParent() const
Checks if this instance has parent.
Definition rgb_cct_base.cpp:1498
void onSaveState() override
Method called periodically during SuplaDevice iteration.
Definition rgb_cct_base.cpp:1134
void onLoadConfig(SuplaDeviceClass *) override
First method called on element in SuplaDevice.begin().
Definition rgb_cct_base.cpp:1318
bool isStateStorageMigrationNeeded() const override
Method called after onInit() to check if state storage migration is needed.
Definition rgb_cct_base.cpp:1509
void setMinPwmFrequency(uint16_t minPwmFrequency)
Sets minimum PWM frequency.
Definition rgb_cct_base.cpp:1518
void onInit() override
Third method called on element in SuplaDevice.begin().
Definition rgb_cct_base.cpp:976
uint16_t getPwmFrequency() const
Returns current PWM frequency.
Definition rgb_cct_base.cpp:1556
void setMaxPwmFrequency(uint16_t maxPwmFrequency)
Sets maximum PWM frequency.
Definition rgb_cct_base.cpp:1522
void fillSuplaChannelNewValue(TSD_SuplaChannelNewValue *value) override
Fills TSD_SuplaChannelNewValue based on current state.
Definition rgb_cct_base.cpp:1379