diff options
| author | Selene ToyKeeper | 2023-08-25 17:27:43 -0600 |
|---|---|---|
| committer | Selene ToyKeeper | 2023-08-25 17:27:43 -0600 |
| commit | 9e5f2dacebf880f61671974ddd8f604cf1782f37 (patch) | |
| tree | 49e3624babda4a9d646e1dd2026efedab658bab0 /spaghetti-monster/fsm-ramping.c | |
| parent | made custom 3H handler system work, added circular HSV ramping, (diff) | |
| download | anduril-9e5f2dacebf880f61671974ddd8f604cf1782f37.tar.gz anduril-9e5f2dacebf880f61671974ddd8f604cf1782f37.tar.bz2 anduril-9e5f2dacebf880f61671974ddd8f604cf1782f37.zip | |
started splitting set_level(0) into its own set_level_zero(), and
made USE_AUX_RGB_LEDS_WHILE_ON work more like the old indicator LEDs,
where it gets set automatically with set_level()
Using set_level_zero() reduces space used by channel modes, and simplifies
code for each mode's set_level_*() functions. I measured about 220 bytes
less in the emisar-d4k-3ch build this way, while also reducing the chance
of bugs.
Diffstat (limited to 'spaghetti-monster/fsm-ramping.c')
| -rw-r--r-- | spaghetti-monster/fsm-ramping.c | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/spaghetti-monster/fsm-ramping.c b/spaghetti-monster/fsm-ramping.c index a970f0e..89f540b 100644 --- a/spaghetti-monster/fsm-ramping.c +++ b/spaghetti-monster/fsm-ramping.c @@ -36,6 +36,25 @@ inline void set_level_aux_leds(uint8_t level) { } #endif // ifdef HAS_AUX_LEDS +#ifdef USE_AUX_RGB_LEDS_WHILE_ON +// TODO: maybe move this stuff into FSM +#include "anduril/aux-leds.h" // for rgb_led_voltage_readout() +inline void set_level_aux_rgb_leds(uint8_t level) { + if (! go_to_standby) { + if (level > 0) { + rgb_led_voltage_readout(level > USE_AUX_RGB_LEDS_WHILE_ON); + } else { + rgb_led_set(0); + } + // some drivers can be wired with RGB or single color to button + // ... so support both even though only one is connected + #ifdef USE_BUTTON_LED + button_led_set((level > 0) + (level > DEFAULT_LEVEL)); + #endif + } +} +#endif // ifdef USE_AUX_RGB_LEDS_WHILE_ON + void set_level(uint8_t level) { #ifdef USE_JUMP_START @@ -58,9 +77,17 @@ void set_level(uint8_t level) { set_level_aux_leds(level); #endif - // call the relevant hardware-specific set_level_*() - SetLevelFuncPtr set_level_func = channels[channel_mode].set_level; - set_level_func(level); + #ifdef USE_AUX_RGB_LEDS_WHILE_ON + set_level_aux_rgb_leds(level); + #endif + + if (0 == level) { + set_level_zero(); + } else { + // call the relevant hardware-specific set_level_*() + SetLevelFuncPtr set_level_func = channels[channel_mode].set_level; + set_level_func(level - 1); + } if (actual_level != level) prev_level = actual_level; actual_level = level; |
