aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSelene ToyKeeper2023-10-23 05:24:28 -0600
committerSelene ToyKeeper2023-10-23 05:24:28 -0600
commitf3302fae9366d36ad01bea57be87c55438900f24 (patch)
tree61858d5c428f96e935dca2c288f5825135194679
parentrewrote emisar-d4k-3ch to use delta-sigma modulation (PWM + DSM), (diff)
downloadanduril-f3302fae9366d36ad01bea57be87c55438900f24.tar.gz
anduril-f3302fae9366d36ad01bea57be87c55438900f24.tar.bz2
anduril-f3302fae9366d36ad01bea57be87c55438900f24.zip
fixed bug: smooth ramp from turbo down to ceiling caused flickering
when smooth_steps was enabled
-rw-r--r--spaghetti-monster/anduril/ramp-mode.c26
1 files changed, 19 insertions, 7 deletions
diff --git a/spaghetti-monster/anduril/ramp-mode.c b/spaghetti-monster/anduril/ramp-mode.c
index 019fa2a..4611b4f 100644
--- a/spaghetti-monster/anduril/ramp-mode.c
+++ b/spaghetti-monster/anduril/ramp-mode.c
@@ -153,15 +153,21 @@ uint8_t steady_state(Event event, uint16_t arg) {
// hold: change brightness (brighter, dimmer)
// click, hold: change brightness (dimmer)
else if ((event == EV_click1_hold) || (event == EV_click2_hold)) {
- // ramp slower in discrete mode
- if (cfg.ramp_style && (arg % HOLD_TIMEOUT != 0)) {
+ // ramp infrequently in stepped mode
+ if (cfg.ramp_style && (arg % HOLD_TIMEOUT != 0))
return EVENT_HANDLED;
- }
#ifdef USE_RAMP_SPEED_CONFIG
- // ramp slower if user configured things that way
- if ((! cfg.ramp_style) && (arg % ramp_speed)) {
- return EVENT_HANDLED;
- }
+ // ramp slower if user configured things that way
+ if ((! cfg.ramp_style) && (arg % ramp_speed))
+ return EVENT_HANDLED;
+ #endif
+ #ifdef USE_SMOOTH_STEPS
+ // if a brightness transition is already happening,
+ // don't interrupt it
+ // (like 2C for full turbo then 1H to smooth ramp down
+ // ... without this clause, it flickers because it trips
+ // the "blink at ramp ceil" clause below, over and over)
+ if (smooth_steps_in_progress) return EVENT_HANDLED;
#endif
// fix ramp direction on first frame if necessary
if (!arg) {
@@ -200,6 +206,11 @@ uint8_t steady_state(Event event, uint16_t arg) {
+ (step_size * ramp_direction));
#if defined(BLINK_AT_RAMP_CEIL) || defined(BLINK_AT_RAMP_MIDDLE)
// only blink once for each threshold
+ // FIXME: blinks at beginning of smooth_steps animation instead
+ // of the end, so it should blink when actual_level reaches a
+ // threshold, instead of when memorized_level does
+ // (one possible fix is to just remove mid-ramp blinks entirely,
+ // and just blink only when it hits the top while going up)
if ((memorized_level != actual_level) && (
0 // for easier syntax below
#ifdef BLINK_AT_RAMP_MIDDLE_1
@@ -209,6 +220,7 @@ uint8_t steady_state(Event event, uint16_t arg) {
|| (memorized_level == BLINK_AT_RAMP_MIDDLE_2)
#endif
#ifdef BLINK_AT_RAMP_CEIL
+ // FIXME: only blink at top when going up, not down
|| (memorized_level == mode_max)
#endif
#ifdef BLINK_AT_RAMP_FLOOR
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.