aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSelene ToyKeeper2025-07-06 01:44:52 -0600
committerSelene ToyKeeper2025-07-06 01:44:52 -0600
commitde6318629ceda3be38063238639241e7263c7f36 (patch)
tree5ba7d4e4f2f2dcbade9b34b47035e207d65cc882
parentlockout mode now only does momentary moon/low on 1st and 2nd presses, (diff)
parentmade new settings apply to all button LEDs on lights bigger than 8K ROM (diff)
downloadanduril-de6318629ceda3be38063238639241e7263c7f36.tar.gz
anduril-de6318629ceda3be38063238639241e7263c7f36.tar.bz2
anduril-de6318629ceda3be38063238639241e7263c7f36.zip
Merge branch 'pr10-SiteRelEnby-rgb-voltage-configurable' into trunk
Added config options to control brightness of button LEDs and post-off voltage display, based on the ramp level of the main LEDs. Affects all lights with aux LEDs and more than 8 KiB of ROM. The new options are in Battcheck -> 7H -> options 3+4, to control the low and high ramp levels where the button LEDs turn on at low or high brightness. Set to 0 to disable the button LED during ramping, or 1+ to set a specific ramp level. Closes #10: https://github.com/ToyKeeper/anduril/pull/10 * pr10-SiteRelEnby-rgb-voltage-configurable: made new settings apply to all button LEDs on lights bigger than 8K ROM Add a feature to make RGB voltage configurable
-rw-r--r--docs/anduril-manual.md32
-rw-r--r--fsm/ramping.c30
-rw-r--r--ui/anduril/anduril.c14
-rw-r--r--ui/anduril/aux-leds.c13
-rw-r--r--ui/anduril/battcheck-mode.c38
-rw-r--r--ui/anduril/battcheck-mode.h17
-rw-r--r--ui/anduril/config-default.h8
-rw-r--r--ui/anduril/load-save-config-fsm.h4
-rw-r--r--ui/anduril/load-save-config.h25
9 files changed, 152 insertions, 29 deletions
diff --git a/docs/anduril-manual.md b/docs/anduril-manual.md
index cdf0dd1..2b7ea30 100644
--- a/docs/anduril-manual.md
+++ b/docs/anduril-manual.md
@@ -449,12 +449,24 @@ The voltage config menu has these settings:
`12C`: +0.25V
`13C`: +0.30V
- 2. Post-off voltage display timeout. (only on lights with RGB aux)
+ 2. Post-off voltage display timeout. (only on lights with RGB aux)
This setting determines how many seconds the RGB aux LEDs
display the voltage color after the torch goes to sleep. Click
once per desired second, or zero times to turn this function
off.
+ 3. Aux low ramp level. Controls behavior of aux button LEDs while the main
+ LEDs are on. Below this ramp level, button LEDs will not be lit up while
+ the main LEDs are on. At or above this level, button LEDs light up at the
+ "low" brightness level. Setting it to 0 keeps the button LEDs off
+ completely while the main LEDs are on.
+ Also controls brightness of post-off voltage display.
+
+ 4. Aux high ramp level. At or above this ramp level, button LEDs light up at
+ the "high" brightness level. Setting it to 0 disables button's high aux
+ mode while the main LEDs are on.
+ Also controls brightness of post-off voltage display.
+
### Temperature check:
Blinks out the current temperature in degrees C. This number should
@@ -1065,14 +1077,18 @@ This is a table of all button mappings in Anduril, in one place:
| Batt check | Full | `3C` | Next channel mode (for number blinks only)
| Batt check | Full | `7H` | Voltage config menu
| | | | 1: voltage correction factor
-| | | | ...
-| | | | 5: -0.10V
-| | | | 6: -0.05V
-| | | | 7: no correction
-| | | | 8: +0.05V
-| | | | 9: +0.10V
-| | | | ...
+| | | | ... 5: -0.10V
+| | | | ... 6: -0.05V
+| | | | ... 7: no correction
+| | | | ... 8: +0.05V
+| | | | ... 9: +0.10V
| | | | 2: post-off voltage display seconds
+| | | | 3: aux low ramp level
+| | | | ... 0: disabled
+| | | | ... 1+: light up at this ramp level
+| | | | 4: aux high ramp level
+| | | | ... 0: disabled
+| | | | ... 1+: brighter at this ramp level
| Mode | UI | Button | Action
| :--- | :-- | ------: | :-----
diff --git a/fsm/ramping.c b/fsm/ramping.c
index 743e619..f8ca4ec 100644
--- a/fsm/ramping.c
+++ b/fsm/ramping.c
@@ -8,14 +8,20 @@
#ifdef HAS_AUX_LEDS
inline void set_level_aux_leds(uint8_t level) {
+ #ifdef USE_AUX_THRESHOLD_CONFIG
+ #define AUX_BRIGHTNESS ((level > cfg.button_led_low_ramp_level) \
+ << (level > cfg.button_led_high_ramp_level))
+ #else
+ #define AUX_BRIGHTNESS ((level > 0) + (level > DEFAULT_LEVEL))
+ #endif
#ifdef USE_INDICATOR_LED_WHILE_RAMPING
// use side-facing aux LEDs while main LEDs are on
if (! go_to_standby) {
#ifdef USE_INDICATOR_LED
- indicator_led((level > 0) + (level > DEFAULT_LEVEL));
+ indicator_led(AUX_BRIGHTNESS);
#endif
#ifdef USE_BUTTON_LED
- button_led_set((level > 0) + (level > DEFAULT_LEVEL));
+ button_led_set(AUX_BRIGHTNESS);
#endif
}
#else // turn off front-facing aux LEDs while main LEDs are on
@@ -27,12 +33,15 @@ inline void set_level_aux_leds(uint8_t level) {
#ifdef USE_AUX_RGB_LEDS
rgb_led_set(0);
#ifdef USE_BUTTON_LED
- button_led_set((level > 0) + (level > DEFAULT_LEVEL));
+ button_led_set(AUX_BRIGHTNESS);
#endif
#endif
}
#endif
#endif
+ #ifdef AUX_BRIGHTNESS
+ #undef AUX_BRIGHTNESS
+ #endif
}
#endif // ifdef HAS_AUX_LEDS
@@ -41,15 +50,28 @@ inline void set_level_aux_leds(uint8_t level) {
#include "anduril/aux-leds.h" // for rgb_led_voltage_readout()
inline void set_level_aux_rgb_leds(uint8_t level) {
if (! go_to_standby) {
+ #ifdef USE_AUX_THRESHOLD_CONFIG
+ if (level > cfg.button_led_low_ramp_level) {
+ rgb_led_voltage_readout(level > cfg.button_led_high_ramp_level);
+ }
+ #else
if (level > 0) {
rgb_led_voltage_readout(level > USE_AUX_RGB_LEDS_WHILE_ON);
- } else {
+ }
+ #endif
+ 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
+ #ifdef USE_AUX_THRESHOLD_CONFIG
+ button_led_set(
+ (level > cfg.button_led_low_ramp_level)
+ << (level > cfg.button_led_high_ramp_level));
+ #else
button_led_set((level > 0) + (level > DEFAULT_LEVEL));
+ #endif
#endif
}
}
diff --git a/ui/anduril/anduril.c b/ui/anduril/anduril.c
index 383acbc..a17ecf2 100644
--- a/ui/anduril/anduril.c
+++ b/ui/anduril/anduril.c
@@ -286,9 +286,17 @@ void loop() {
StatePtr state = current_state;
#ifdef USE_AUX_RGB_LEDS_WHILE_ON
- // display battery charge on RGB button during use
- if (state == steady_state)
- rgb_led_voltage_readout(actual_level > USE_AUX_RGB_LEDS_WHILE_ON);
+ // display battery charge on RGB button during use
+ if (state == steady_state) {
+ #ifdef USE_AUX_THRESHOLD_CONFIG
+ // only show voltage if feature is enabled and
+ // we are above the configured minimum ramp level
+ if (actual_level > cfg.button_led_low_ramp_level)
+ rgb_led_voltage_readout(actual_level > cfg.button_led_high_ramp_level);
+ #else
+ rgb_led_voltage_readout(actual_level > USE_AUX_RGB_LEDS_WHILE_ON);
+ #endif
+ }
#endif
if (0) {} // placeholder
diff --git a/ui/anduril/aux-leds.c b/ui/anduril/aux-leds.c
index 7356666..50ce5c5 100644
--- a/ui/anduril/aux-leds.c
+++ b/ui/anduril/aux-leds.c
@@ -125,7 +125,18 @@ void rgb_led_update(uint8_t mode, uint16_t arg) {
&& (ticks_since_on > 0) // don't blink red on 1st frame
) {
// use high mode if regular aux level is high or prev level was high
- pattern = 1 + ((2 == pattern) | (prev_level >= POST_OFF_VOLTAGE_BRIGHTNESS));
+ #ifdef USE_AUX_THRESHOLD_CONFIG
+ // always high if configured for high aux
+ // otherwise 0/1/2 depending on recent main LED brightness
+ // (using >= makes it off by 1, but allows POVD at boot time)
+ if (pattern != 2)
+ pattern = (prev_level >= cfg.button_led_low_ramp_level)
+ << (prev_level > cfg.button_led_high_ramp_level);
+ #else
+ pattern = 1
+ + ((2 == pattern)
+ | (prev_level >= POST_OFF_VOLTAGE_BRIGHTNESS));
+ #endif
// voltage mode
color = RGB_LED_NUM_COLORS - 1;
}
diff --git a/ui/anduril/battcheck-mode.c b/ui/anduril/battcheck-mode.c
index c7c80dd..460c58a 100644
--- a/ui/anduril/battcheck-mode.c
+++ b/ui/anduril/battcheck-mode.c
@@ -51,7 +51,7 @@ uint8_t battcheck_state(Event event, uint16_t arg) {
return EVENT_NOT_HANDLED;
}
-#ifdef USE_VOLTAGE_CORRECTION
+#if defined(USE_VOLTAGE_CORRECTION) || defined(USE_POST_OFF_VOLTAGE) || defined(USE_AUX_THRESHOLD_CONFIG)
// the user can adjust the battery measurements... on a scale of 1 to 13
// 1 = subtract 0.30V
// 2 = subtract 0.25V
@@ -61,21 +61,35 @@ uint8_t battcheck_state(Event event, uint16_t arg) {
// ...
// 13 = add 0.30V
void voltage_config_save(uint8_t step, uint8_t value) {
- #ifdef USE_POST_OFF_VOLTAGE
- if (2 == step) cfg.post_off_voltage = value;
- else
- #endif
- if (value) cfg.voltage_correction = value;
+ switch (step) {
+ #if defined(USE_AUX_THRESHOLD_CONFIG)
+ case button_led_low_ramp_level_step:
+ // 0 clicks = 255 = never turn on
+ cfg.button_led_low_ramp_level = value - 1;
+ break;
+ case button_led_high_ramp_level_step:
+ // 0 clicks = 255 = never turn on
+ cfg.button_led_high_ramp_level = value - 1;
+ break;
+ #endif
+
+ #ifdef USE_POST_OFF_VOLTAGE
+ case post_off_voltage_config_step:
+ cfg.post_off_voltage = value;
+ break;
+ #endif
+
+ #ifdef USE_VOLTAGE_CORRECTION
+ default:
+ if (value) cfg.voltage_correction = value;
+ break;
+ #endif
+ }
}
uint8_t voltage_config_state(Event event, uint16_t arg) {
- #ifdef USE_POST_OFF_VOLTAGE
- #define VOLTAGE_CONFIG_STEPS 2
- #else
- #define VOLTAGE_CONFIG_STEPS 1
- #endif
return config_state_base(event, arg,
- VOLTAGE_CONFIG_STEPS,
+ voltage_config_num_steps - 1,
voltage_config_save);
}
#endif // #ifdef USE_VOLTAGE_CORRECTION
diff --git a/ui/anduril/battcheck-mode.h b/ui/anduril/battcheck-mode.h
index b505b68..2ff7c81 100644
--- a/ui/anduril/battcheck-mode.h
+++ b/ui/anduril/battcheck-mode.h
@@ -5,8 +5,23 @@
uint8_t battcheck_state(Event event, uint16_t arg);
-#ifdef USE_VOLTAGE_CORRECTION
+#if defined(USE_VOLTAGE_CORRECTION) || defined(USE_POST_OFF_VOLTAGE) || defined(USE_AUX_THRESHOLD_CONFIG)
void voltage_config_save(uint8_t step, uint8_t value);
uint8_t voltage_config_state(Event event, uint16_t arg);
#endif
+typedef enum {
+ voltage_cfg_zero = 0,
+ #ifdef USE_VOLTAGE_CORRECTION
+ voltage_correction_config_step,
+ #endif
+ #ifdef USE_POST_OFF_VOLTAGE
+ post_off_voltage_config_step,
+ #endif
+ #if defined(USE_AUX_THRESHOLD_CONFIG)
+ button_led_low_ramp_level_step,
+ button_led_high_ramp_level_step,
+ #endif
+ voltage_config_num_steps
+} voltage_config_steps_e;
+
diff --git a/ui/anduril/config-default.h b/ui/anduril/config-default.h
index 1b34e8c..51249f6 100644
--- a/ui/anduril/config-default.h
+++ b/ui/anduril/config-default.h
@@ -199,6 +199,14 @@
#define USE_LOWPASS_WHILE_ASLEEP
#endif
+// if the light has aux LEDs and enough ROM, let the user choose whether
+// the aux LEDs should be on while the main LEDs are on
+#if (ROM_SIZE > 10000)
+// can be enabled even if no aux LEDs exist,
+// will simply do nothing in that case
+#define USE_AUX_THRESHOLD_CONFIG
+#endif
+
// if there's tint ramping, allow user to set it smooth or stepped
#define USE_STEPPED_TINT_RAMPING
#define DEFAULT_TINT_RAMP_STYLE 0 // smooth
diff --git a/ui/anduril/load-save-config-fsm.h b/ui/anduril/load-save-config-fsm.h
index d189d3a..a69d1b1 100644
--- a/ui/anduril/load-save-config-fsm.h
+++ b/ui/anduril/load-save-config-fsm.h
@@ -97,6 +97,10 @@ typedef struct Config {
uint8_t therm_ceil;
int8_t therm_cal_offset;
#endif
+ #ifdef USE_AUX_THRESHOLD_CONFIG
+ uint8_t button_led_low_ramp_level;
+ uint8_t button_led_high_ramp_level;
+ #endif
///// aux LEDs
#ifdef USE_INDICATOR_LED
diff --git a/ui/anduril/load-save-config.h b/ui/anduril/load-save-config.h
index 3ad477c..f5afb29 100644
--- a/ui/anduril/load-save-config.h
+++ b/ui/anduril/load-save-config.h
@@ -169,5 +169,30 @@ Config cfg = {
.jump_start_level = DEFAULT_JUMP_START_LEVEL,
#endif
+ #if defined(USE_AUX_THRESHOLD_CONFIG)
+ // config for RGB voltage. We need to check these here rather than
+ // setting defaults in `config-default.h` as we only know *after*
+ // defaults are loaded if `USE_AUX_RGB_LEDS_WHILE_ON` is set or unset
+ // (in `CFG_H`).
+ #ifdef USE_AUX_LEDS_WHILE_ON_INITIAL_MINIMUM_LEVEL
+ .button_led_low_ramp_level = USE_AUX_LEDS_WHILE_ON_INITIAL_MINIMUM_LEVEL,
+ #else
+ .button_led_low_ramp_level = 0, // default
+ #endif
+ #if (USE_AUX_RGB_LEDS_WHILE_ON + 0)
+ // if USE_AUX_RGB_LEDS_WHILE_ON is an int, passes. If blank (undefined
+ // or defined with no value), evaluates to `(+0)` which evaluates to
+ // false.
+ .button_led_high_ramp_level = USE_AUX_RGB_LEDS_WHILE_ON,
+ #else
+ #ifdef USE_AUX_RGB_LEDS
+ //#warning "USE_AUX_RGB_LEDS_WHILE_ON defined but has no value. Setting to default value."
+ .button_led_high_ramp_level = 25 - 1, // default
+ #else
+ .button_led_high_ramp_level = DEFAULT_LEVEL - 1, // default
+ #endif
+ #endif
+ #endif
+
};