aboutsummaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorSelene ToyKeeper2023-04-19 00:48:20 -0600
committerSelene ToyKeeper2023-04-19 00:48:20 -0600
commitd64358060b99ebb5b6703a89034d885f1e3f1122 (patch)
treec59ee46e2803473fc30f737f6d3358fcebe2744a /hw
parentmade "Ramp 3H" do momentary turbo if current channel mode has no args (diff)
downloadanduril-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 '')
-rw-r--r--hwdef-Sofirn_LT1S-Pro.c58
-rw-r--r--hwdef-Sofirn_LT1S-Pro.h29
2 files changed, 73 insertions, 14 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;
diff --git a/hwdef-Sofirn_LT1S-Pro.h b/hwdef-Sofirn_LT1S-Pro.h
index d59e7bc..af0e6f0 100644
--- a/hwdef-Sofirn_LT1S-Pro.h
+++ b/hwdef-Sofirn_LT1S-Pro.h
@@ -20,20 +20,21 @@
// channel modes:
// * 0. warm/cool white blend
-// * 1. auto 3ch blend (red -> warm -> cool by ramp level)
-// * 2. red only
-// * 3. red + white blend
-#define NUM_CHANNEL_MODES 4
-//#define CHANNEL_MODES_ENABLED 1,1,1,1
+// * 1. auto 2ch white blend (warm -> cool by ramp level)
+// * 2. auto 3ch blend (red -> warm -> cool by ramp level)
+// * 3. red only
+// * 4. red + white blend
+#define NUM_CHANNEL_MODES 5
#define CM_WHITE 0
-#define CM_AUTO 1
-#define CM_RED 2
-#define CM_WHITE_RED 3
+#define CM_AUTO2 1
+#define CM_AUTO3 2
+#define CM_RED 3
+#define CM_WHITE_RED 4
-#define CHANNEL_MODES_ENABLED 0b00001111
-#define CHANNEL_HAS_ARGS 0b00001001
-// 128=middle CCT, N/A, N/A, 255=100% red
-#define CHANNEL_MODE_ARGS 128,0,0,255
+#define CHANNEL_MODES_ENABLED 0b00011111
+#define CHANNEL_HAS_ARGS 0b00010001
+// 128=middle CCT, _, _, _, 255=100% red
+#define CHANNEL_MODE_ARGS 128,0,0,0,255
// TODO: blend mode should enable this automatically?
#define USE_CHANNEL_MODES
@@ -41,11 +42,13 @@
#define USE_CHANNEL_MODE_ARGS
// TODO: or maybe if args are defined, the USE_ should be auto-set?
#define SET_LEVEL_MODES set_level_white_blend, \
+ set_level_auto_2ch_blend, \
set_level_auto_3ch_blend, \
set_level_red, \
set_level_red_white_blend
// gradual ticking for thermal regulation
#define GRADUAL_TICK_MODES gradual_tick_white_blend, \
+ gradual_tick_auto_2ch_blend, \
gradual_tick_auto_3ch_blend, \
gradual_tick_red, \
gradual_tick_red_white_blend
@@ -108,11 +111,13 @@
// custom channel modes
void set_level_red(uint8_t level);
void set_level_white_blend(uint8_t level);
+void set_level_auto_2ch_blend(uint8_t level);
void set_level_auto_3ch_blend(uint8_t level);
void set_level_red_white_blend(uint8_t level);
void gradual_tick_red();
void gradual_tick_white_blend();
+void gradual_tick_auto_2ch_blend();
void gradual_tick_auto_3ch_blend();
void gradual_tick_red_white_blend();
If you find this content useful please consider a small donation via bitcoin: bitcoin:1mxKyQsHHugqRxPKgwaA7wUwJEGCNthn2?amount=0.001&message=Donation Scraping git contents via cgit is very resource intensive. The continued hosting of these git repositories is entirely financed by your bitcoin contributions. For donations of a least 1 mBTC you include your IP address in the message of your bitcoin donation. This will remove this message in the future for requests from your IP, which will significantly reduce token usage. In any case, any contributions to bitcoin address 1mxKyQsHHugqRxPKgwaA7wUwJEGCNthn2 are very welcome. Thanks in advance for you contribution to a self-sustaining ecosystem.