diff options
| author | Selene ToyKeeper | 2023-04-19 00:48:20 -0600 |
|---|---|---|
| committer | Selene ToyKeeper | 2023-04-19 00:48:20 -0600 |
| commit | d64358060b99ebb5b6703a89034d885f1e3f1122 (patch) | |
| tree | c59ee46e2803473fc30f737f6d3358fcebe2744a /hwdef-Sofirn_LT1S-Pro.c | |
| parent | made "Ramp 3H" do momentary turbo if current channel mode has no args (diff) | |
| download | anduril-d64358060b99ebb5b6703a89034d885f1e3f1122.tar.gz anduril-d64358060b99ebb5b6703a89034d885f1e3f1122.tar.bz2 anduril-d64358060b99ebb5b6703a89034d885f1e3f1122.zip | |
LT1S Pro: added white-only auto-tint mode, at gchart's request
Diffstat (limited to 'hwdef-Sofirn_LT1S-Pro.c')
| -rw-r--r-- | hwdef-Sofirn_LT1S-Pro.c | 58 |
1 files changed, 56 insertions, 2 deletions
diff --git a/hwdef-Sofirn_LT1S-Pro.c b/hwdef-Sofirn_LT1S-Pro.c index 8e2163f..dd93f93 100644 --- a/hwdef-Sofirn_LT1S-Pro.c +++ b/hwdef-Sofirn_LT1S-Pro.c @@ -64,8 +64,33 @@ void set_level_white_blend(uint8_t level) { PWM_DATATYPE warm_PWM, cool_PWM; PWM_DATATYPE brightness = PWM_GET(pwm1_levels, level); - PWM_DATATYPE top = PWM_GET(pwm_tops, level); - uint8_t blend = cfg.channel_mode_args[cfg.channel_mode]; + PWM_DATATYPE top = PWM_GET(pwm_tops, level); + uint8_t blend = cfg.channel_mode_args[cfg.channel_mode]; + + calc_2ch_blend(&warm_PWM, &cool_PWM, brightness, top, blend); + + WARM_PWM_LVL = warm_PWM; + COOL_PWM_LVL = cool_PWM; + PWM_TOP = top; + if (! actual_level) PWM_CNT = 0; // reset phase +} + + +// same as white blend, but tint is calculated from the ramp level +void set_level_auto_2ch_blend(uint8_t level) { + if (level == 0) { + WARM_PWM_LVL = 0; + COOL_PWM_LVL = 0; + PWM_CNT = 0; // reset phase + return; + } + + level --; // PWM array index = level - 1 + + PWM_DATATYPE warm_PWM, cool_PWM; + PWM_DATATYPE brightness = PWM_GET(pwm1_levels, level); + PWM_DATATYPE top = PWM_GET(pwm_tops, level); + uint8_t blend = 255 * (uint16_t)level / RAMP_SIZE; calc_2ch_blend(&warm_PWM, &cool_PWM, brightness, top, blend); @@ -170,6 +195,35 @@ void gradual_tick_white_blend() { } +// same as white blend, but tint is calculated from the ramp level +void gradual_tick_auto_2ch_blend() { + uint8_t gt = gradual_target; + if (gt < actual_level) gt = actual_level - 1; + else if (gt > actual_level) gt = actual_level + 1; + gt --; + + // figure out what exact PWM levels we're aiming for + PWM_DATATYPE warm_PWM, cool_PWM; + PWM_DATATYPE brightness = PWM_GET(pwm1_levels, gt); + PWM_DATATYPE top = PWM_GET(pwm_tops, gt); + uint8_t blend = 255 * (uint16_t)gt / RAMP_SIZE; + + calc_2ch_blend(&warm_PWM, &cool_PWM, brightness, top, blend); + + // move up/down if necessary + GRADUAL_ADJUST_SIMPLE(warm_PWM, WARM_PWM_LVL); + GRADUAL_ADJUST_SIMPLE(cool_PWM, COOL_PWM_LVL); + + // check for completion + if ( (WARM_PWM_LVL == warm_PWM) + && (COOL_PWM_LVL == cool_PWM) + ) + { + GRADUAL_IS_ACTUAL(); + } +} + + void gradual_tick_auto_3ch_blend() { uint8_t gt = gradual_target; if (gt < actual_level) gt = actual_level - 1; |
