aboutsummaryrefslogtreecommitdiff
path: root/spaghetti-monster/fsm-ramping.c
diff options
context:
space:
mode:
authorSelene ToyKeeper2023-08-25 17:27:43 -0600
committerSelene ToyKeeper2023-08-25 17:27:43 -0600
commit9e5f2dacebf880f61671974ddd8f604cf1782f37 (patch)
tree49e3624babda4a9d646e1dd2026efedab658bab0 /spaghetti-monster/fsm-ramping.c
parentmade custom 3H handler system work, added circular HSV ramping, (diff)
downloadanduril-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.c33
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;