diff options
| author | Selene ToyKeeper | 2023-05-02 23:44:22 -0600 |
|---|---|---|
| committer | Selene ToyKeeper | 2023-05-02 23:44:22 -0600 |
| commit | 00dbf2b76cdbad2dbf2fd3b960bcb09d77f932d1 (patch) | |
| tree | 0988a942a7dbec3eaad6724f2f4a2ca6c4ada5c8 | |
| parent | added Wurkkos FC13 and TS11 (diff) | |
| download | anduril-00dbf2b76cdbad2dbf2fd3b960bcb09d77f932d1.tar.gz anduril-00dbf2b76cdbad2dbf2fd3b960bcb09d77f932d1.tar.bz2 anduril-00dbf2b76cdbad2dbf2fd3b960bcb09d77f932d1.zip | |
post-off voltage display: use low brightness when torch was at moon level before,
and skip the voltage display after UI actions which didn't change the mode
(like "Off -> 7C" to change aux LED settings)
| -rw-r--r-- | spaghetti-monster/anduril/aux-leds.c | 9 | ||||
| -rw-r--r-- | spaghetti-monster/anduril/battcheck-mode-fsm.h | 4 | ||||
| -rw-r--r-- | spaghetti-monster/anduril/lockout-mode.c | 20 | ||||
| -rw-r--r-- | spaghetti-monster/anduril/off-mode.c | 3 | ||||
| -rw-r--r-- | spaghetti-monster/anduril/off-mode.h | 3 | ||||
| -rw-r--r-- | spaghetti-monster/fsm-ramping.c | 1 | ||||
| -rw-r--r-- | spaghetti-monster/fsm-ramping.h | 2 |
7 files changed, 30 insertions, 12 deletions
diff --git a/spaghetti-monster/anduril/aux-leds.c b/spaghetti-monster/anduril/aux-leds.c index d833d82..3ecbefd 100644 --- a/spaghetti-monster/anduril/aux-leds.c +++ b/spaghetti-monster/anduril/aux-leds.c @@ -106,8 +106,13 @@ void rgb_led_update(uint8_t mode, uint16_t arg) { #ifdef USE_POST_OFF_VOLTAGE // use voltage high mode for a few seconds after initial poweroff - else if (arg < (cfg.post_off_voltage * SLEEP_TICKS_PER_SECOND)) { - pattern = 2; + // (but not after changing aux LED settings and other similar actions) + else if ((arg < (cfg.post_off_voltage * SLEEP_TICKS_PER_SECOND)) + && (ticks_since_on < (cfg.post_off_voltage * SLEEP_TICKS_PER_SECOND)) + ) { + // use high mode unless prev_level was really low + pattern = 1 + (prev_level >= POST_OFF_VOLTAGE_BRIGHTNESS); + // voltage mode color = RGB_LED_NUM_COLORS - 1; } #endif diff --git a/spaghetti-monster/anduril/battcheck-mode-fsm.h b/spaghetti-monster/anduril/battcheck-mode-fsm.h index 35c657a..5f8e8ec 100644 --- a/spaghetti-monster/anduril/battcheck-mode-fsm.h +++ b/spaghetti-monster/anduril/battcheck-mode-fsm.h @@ -11,4 +11,8 @@ #ifndef DEFAULT_POST_OFF_VOLTAGE_SECONDS #define DEFAULT_POST_OFF_VOLTAGE_SECONDS 4 #endif + #ifndef POST_OFF_VOLTAGE_BRIGHTNESS + // level at which to switch from low to high aux brightness + #define POST_OFF_VOLTAGE_BRIGHTNESS (RAMP_SIZE/10) + #endif #endif diff --git a/spaghetti-monster/anduril/lockout-mode.c b/spaghetti-monster/anduril/lockout-mode.c index c755a61..ee78a19 100644 --- a/spaghetti-monster/anduril/lockout-mode.c +++ b/spaghetti-monster/anduril/lockout-mode.c @@ -39,18 +39,17 @@ uint8_t lockout_state(Event event, uint16_t arg) { // (allow staying awake long enough to exit, but otherwise // be persistent about going back to sleep every few seconds // even if the user keeps pressing the button) - #ifdef USE_INDICATOR_LED - // redundant, sleep tick does the same thing - //if (event == EV_enter_state) { - // indicator_led_update(cfg.indicator_led_mode >> 2, 0); - //} else - #elif defined(USE_AUX_RGB_LEDS) if (event == EV_enter_state) { - rgb_led_update(cfg.rgb_led_lockout_mode, 0); - } else - #endif + ticks_since_on = 0; + #ifdef USE_INDICATOR_LED + // redundant, sleep tick does the same thing + // indicator_led_update(cfg.indicator_led_mode >> 2, 0); + #elif defined(USE_AUX_RGB_LEDS) + rgb_led_update(cfg.rgb_led_lockout_mode, 0); + #endif + } - if (event == EV_tick) { + else if (event == EV_tick) { if (arg > HOLD_TIMEOUT) { go_to_standby = 1; #ifdef USE_INDICATOR_LED @@ -65,6 +64,7 @@ uint8_t lockout_state(Event event, uint16_t arg) { #if defined(TICK_DURING_STANDBY) && (defined(USE_INDICATOR_LED) || defined(USE_AUX_RGB_LEDS)) else if (event == EV_sleep_tick) { + if (ticks_since_on < 255) ticks_since_on ++; #ifdef USE_MANUAL_MEMORY_TIMER // reset to manual memory level when timer expires if (cfg.manual_memory && diff --git a/spaghetti-monster/anduril/off-mode.c b/spaghetti-monster/anduril/off-mode.c index 103e29d..c1ae2e4 100644 --- a/spaghetti-monster/anduril/off-mode.c +++ b/spaghetti-monster/anduril/off-mode.c @@ -15,6 +15,7 @@ uint8_t off_state(Event event, uint16_t arg) { // turn emitter off when entering state if (event == EV_enter_state) { set_level(0); + ticks_since_on = 0; #ifdef USE_INDICATOR_LED // redundant, sleep tick does the same thing //indicator_led_update(cfg.indicator_led_mode & 0x03, 0); @@ -47,6 +48,7 @@ uint8_t off_state(Event event, uint16_t arg) { #if defined(TICK_DURING_STANDBY) // blink the indicator LED, maybe else if (event == EV_sleep_tick) { + if (ticks_since_on < 255) ticks_since_on ++; #ifdef USE_MANUAL_MEMORY_TIMER // reset to manual memory level when timer expires if (cfg.manual_memory && @@ -141,6 +143,7 @@ uint8_t off_state(Event event, uint16_t arg) { // click, hold: momentary at ceiling or turbo else if (event == EV_click2_hold) { + ticks_since_on = 0; // momentary turbo is definitely "on" uint8_t turbo_level; // how bright is "turbo"? #if defined(USE_2C_STYLE_CONFIG) // user can choose 2C behavior diff --git a/spaghetti-monster/anduril/off-mode.h b/spaghetti-monster/anduril/off-mode.h index 71d45eb..d07fff1 100644 --- a/spaghetti-monster/anduril/off-mode.h +++ b/spaghetti-monster/anduril/off-mode.h @@ -4,6 +4,9 @@ #pragma once +// was the light in an "on" mode within the past second or so? +uint8_t ticks_since_on = 0; + // when the light is "off" or in standby uint8_t off_state(Event event, uint16_t arg); diff --git a/spaghetti-monster/fsm-ramping.c b/spaghetti-monster/fsm-ramping.c index 393c425..d4e2068 100644 --- a/spaghetti-monster/fsm-ramping.c +++ b/spaghetti-monster/fsm-ramping.c @@ -71,6 +71,7 @@ void set_level(uint8_t level) { SetLevelFuncPtr set_level_func = channel_modes[CH_MODE]; set_level_func(level); + if (actual_level != level) prev_level = actual_level; actual_level = level; #ifdef USE_SET_LEVEL_GRADUALLY diff --git a/spaghetti-monster/fsm-ramping.h b/spaghetti-monster/fsm-ramping.h index 3003ecb..8d5ed27 100644 --- a/spaghetti-monster/fsm-ramping.h +++ b/spaghetti-monster/fsm-ramping.h @@ -8,6 +8,8 @@ // actual_level: last ramp level set by set_level() uint8_t actual_level = 0; +// the level used before actual +uint8_t prev_level = 0; // TODO: size-optimize the case with only 1 channel mode // (the arrays and stuff shouldn't be needed) |
