aboutsummaryrefslogtreecommitdiff
path: root/spaghetti-monster
diff options
context:
space:
mode:
authorSelene ToyKeeper2021-12-16 11:23:58 -0700
committerSelene ToyKeeper2021-12-16 11:23:58 -0700
commitc1e1313bd4fc33563ac42ec565a55a90f1c9f35a (patch)
tree3b5ab88695dc45fa39a5d532012cd188ebd4eecc /spaghetti-monster
parentfixed SP10 ramp flickering properly, using double-buffered registers (diff)
parentfixed bug where tint-ramping could end up 1 brightness ramp step different th... (diff)
downloadanduril-c1e1313bd4fc33563ac42ec565a55a90f1c9f35a.tar.gz
anduril-c1e1313bd4fc33563ac42ec565a55a90f1c9f35a.tar.bz2
anduril-c1e1313bd4fc33563ac42ec565a55a90f1c9f35a.zip
merged anduril2 branch for upstream changes
Diffstat (limited to 'spaghetti-monster')
-rw-r--r--spaghetti-monster/anduril/MODELS3
-rw-r--r--spaghetti-monster/anduril/anduril-manual.txt4
-rw-r--r--spaghetti-monster/anduril/cfg-blf-gt-mini.h8
-rw-r--r--spaghetti-monster/anduril/cfg-blf-q8.h7
-rw-r--r--spaghetti-monster/anduril/cfg-ff-rot66.h8
-rw-r--r--spaghetti-monster/anduril/cfg-mateminco-mf01-mini.h8
-rw-r--r--spaghetti-monster/anduril/cfg-noctigon-dm11-12v.h74
-rw-r--r--spaghetti-monster/anduril/cfg-noctigon-dm11-nofet.h42
-rw-r--r--spaghetti-monster/anduril/cfg-noctigon-dm11.h73
-rw-r--r--spaghetti-monster/anduril/config-default.h8
-rw-r--r--spaghetti-monster/anduril/lockout-mode.c10
-rw-r--r--spaghetti-monster/anduril/ramp-mode.c5
-rw-r--r--spaghetti-monster/anduril/tint-ramping.c4
-rw-r--r--spaghetti-monster/fsm-adc.c22
-rw-r--r--spaghetti-monster/fsm-standby.c2
15 files changed, 272 insertions, 6 deletions
diff --git a/spaghetti-monster/anduril/MODELS b/spaghetti-monster/anduril/MODELS
index c6fe6be..3256b43 100644
--- a/spaghetti-monster/anduril/MODELS
+++ b/spaghetti-monster/anduril/MODELS
@@ -30,6 +30,9 @@ Model Name MCU
0265 noctigon-k9.3-tintramp-nofet attiny1634
0266 noctigon-k9.3-tintramp-fet attiny1634
0267 noctigon-k9.3-tintramp-219 attiny1634
+0271 noctigon-dm11 attiny1634
+0272 noctigon-dm11-nofet attiny1634
+0273 noctigon-dm11-12v attiny1634
0311 fw3a attiny85
0312 fw3a-219 attiny85
0313 fw3a-nofet attiny85
diff --git a/spaghetti-monster/anduril/anduril-manual.txt b/spaghetti-monster/anduril/anduril-manual.txt
index 8d6ad75..1873b8d 100644
--- a/spaghetti-monster/anduril/anduril-manual.txt
+++ b/spaghetti-monster/anduril/anduril-manual.txt
@@ -75,6 +75,7 @@ In Lockout mode with Simple UI, there are a few functions:
- 1H: Momentary moon
- 2H: Momentary low
+ - 3C: Unlock and turn off
- 4C: Unlock and turn on
- 4H: Unlock and turn on at low level
- 5C: Unlock and turn on at high level
@@ -296,6 +297,8 @@ To exit lockout mode, click 4 times. The light should blink briefly and
then turn on at the memorized level. Or hold the final press to turn on
at the floor level instead:
+ - 3C: Unlock and go to "Off" mode
+
- 4C: Go to ramp mode (memorized level).
(uses manual mem level if there is one)
@@ -788,6 +791,7 @@ Ramp Full 10H Ramp Extras config menu:
Lockout Any 1C/1H Momentary moon (lowest floor)
Lockout Any 2C/2H Momentary moon (highest floor, or manual mem level)
+Lockout Any 3C Unlock (go to "Off" mode)
Lockout Any 4C On (ramp mode, memorized level)
Lockout Any 4H On (ramp mode, floor level)
Lockout Any 5C On (ramp mode, ceiling level)
diff --git a/spaghetti-monster/anduril/cfg-blf-gt-mini.h b/spaghetti-monster/anduril/cfg-blf-gt-mini.h
index af16f2c..a647ea5 100644
--- a/spaghetti-monster/anduril/cfg-blf-gt-mini.h
+++ b/spaghetti-monster/anduril/cfg-blf-gt-mini.h
@@ -10,3 +10,11 @@
// the button is visible while main LEDs are on
#define USE_INDICATOR_LED_WHILE_RAMPING
+// too big, remove stuff to make room
+#undef USE_SOS_MODE
+//#undef USE_RAMP_AFTER_MOON_CONFIG
+//#undef USE_RAMP_SPEED_CONFIG
+//#undef USE_VOLTAGE_CORRECTION
+//#undef USE_2C_STYLE_CONFIG
+//#undef USE_TACTICAL_STROBE_MODE
+
diff --git a/spaghetti-monster/anduril/cfg-blf-q8.h b/spaghetti-monster/anduril/cfg-blf-q8.h
index 6a5055c..f657adb 100644
--- a/spaghetti-monster/anduril/cfg-blf-q8.h
+++ b/spaghetti-monster/anduril/cfg-blf-q8.h
@@ -46,3 +46,10 @@
// stop panicking at ~75% power or ~3000 lm, this light has high thermal mass
#define THERM_FASTER_LEVEL (RAMP_SIZE*9/10) // throttle back faster when high
+// too big, remove stuff to make room
+#undef USE_SOS_MODE
+//#undef USE_RAMP_AFTER_MOON_CONFIG
+//#undef USE_RAMP_SPEED_CONFIG
+//#undef USE_VOLTAGE_CORRECTION
+//#undef USE_2C_STYLE_CONFIG
+//#undef USE_TACTICAL_STROBE_MODE
diff --git a/spaghetti-monster/anduril/cfg-ff-rot66.h b/spaghetti-monster/anduril/cfg-ff-rot66.h
index 48541a7..481808a 100644
--- a/spaghetti-monster/anduril/cfg-ff-rot66.h
+++ b/spaghetti-monster/anduril/cfg-ff-rot66.h
@@ -42,6 +42,14 @@
#undef BLINK_AT_RAMP_CEIL
// too big, remove stuff to make room
+#undef USE_SOS_MODE
#undef USE_RAMP_AFTER_MOON_CONFIG
#undef USE_RAMP_SPEED_CONFIG
+#undef USE_VOLTAGE_CORRECTION
//#undef USE_2C_STYLE_CONFIG
+//#undef USE_TACTICAL_STROBE_MODE
+
+// reduce size a bit
+#ifdef USE_LOWPASS_WHILE_ASLEEP
+#undef USE_LOWPASS_WHILE_ASLEEP
+#endif
diff --git a/spaghetti-monster/anduril/cfg-mateminco-mf01-mini.h b/spaghetti-monster/anduril/cfg-mateminco-mf01-mini.h
index 86e8c26..83b2614 100644
--- a/spaghetti-monster/anduril/cfg-mateminco-mf01-mini.h
+++ b/spaghetti-monster/anduril/cfg-mateminco-mf01-mini.h
@@ -53,6 +53,14 @@
// too big, remove stuff to make room
+#undef USE_SOS_MODE
#undef USE_RAMP_AFTER_MOON_CONFIG
#undef USE_RAMP_SPEED_CONFIG
+#undef USE_VOLTAGE_CORRECTION
//#undef USE_2C_STYLE_CONFIG
+
+// reduce size a bit
+#ifdef USE_LOWPASS_WHILE_ASLEEP
+#undef USE_LOWPASS_WHILE_ASLEEP
+#endif
+
diff --git a/spaghetti-monster/anduril/cfg-noctigon-dm11-12v.h b/spaghetti-monster/anduril/cfg-noctigon-dm11-12v.h
new file mode 100644
index 0000000..3e7c1d3
--- /dev/null
+++ b/spaghetti-monster/anduril/cfg-noctigon-dm11-12v.h
@@ -0,0 +1,74 @@
+// Noctigon DM11 (12V) config options for Anduril
+#define MODEL_NUMBER "0273"
+#include "hwdef-Noctigon_DM11-12V.h"
+#include "hank-cfg.h"
+// ATTINY: 1634
+
+// this light has three aux LED channels: R, G, B
+#define USE_AUX_RGB_LEDS
+// ... and a single LED in the button
+#define USE_BUTTON_LED
+// don't use aux LEDs while main LED is on
+#ifdef USE_INDICATOR_LED_WHILE_RAMPING
+#undef USE_INDICATOR_LED_WHILE_RAMPING
+#endif
+
+
+// power channels:
+// - linear: 5A?
+// - DD FET: none (can't do DD on a boost driver)
+#define RAMP_LENGTH 150
+#define USE_DYN_PWM
+
+// level_calc.py 5.01 1 149 7135 1 0.3 1740 --pwm dyn:78:16384:255
+// (plus a 0 at the beginning for moon)
+#define PWM1_LEVELS 0,1,1,1,2,3,3,4,5,6,7,8,9,10,11,13,14,16,17,19,21,23,25,27,29,31,34,36,39,42,44,47,50,53,57,60,63,67,70,74,77,81,85,88,92,96,99,103,107,110,113,117,120,123,126,128,130,133,134,136,137,137,137,137,136,135,133,130,126,122,117,111,104,96,87,76,65,52,38,22,23,25,26,27,28,29,30,32,33,34,36,37,39,40,42,43,45,47,49,51,53,55,57,59,61,63,66,68,70,73,76,78,81,84,87,90,93,96,99,103,106,110,113,117,121,125,129,133,137,142,146,151,155,160,165,170,175,181,186,192,197,203,209,215,222,228,234,241,248,255
+#define PWM_TOPS 16383,16383,12404,8140,11462,14700,11041,12947,13795,14111,14124,13946,13641,13248,12791,13418,12808,13057,12385,12428,12358,12209,12000,11746,11459,11147,11158,10793,10708,10576,10173,9998,9800,9585,9527,9278,9023,8901,8634,8486,8216,8053,7881,7615,7440,7261,7009,6832,6656,6422,6196,6031,5819,5615,5419,5190,4973,4803,4571,4386,4179,3955,3745,3549,3340,3145,2940,2729,2513,2312,2109,1903,1697,1491,1286,1070,871,662,459,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
+
+#define DEFAULT_LEVEL 70
+#define MAX_1x7135 150
+#define HALFSPEED_LEVEL 12
+#define QUARTERSPEED_LEVEL 4
+
+// don't blink halfway up
+#ifdef BLINK_AT_RAMP_MIDDLE
+#undef BLINK_AT_RAMP_MIDDLE
+#endif
+
+#define RAMP_SMOOTH_FLOOR 10 // low levels may be unreliable
+#define RAMP_SMOOTH_CEIL 130
+// 10, 30, 50, [70], 90, 110, 130
+// Nichia B35 model: (0.56), 1.4, 8.4, 34.5, [102], 250, 500, 860, (1300) lm
+#define RAMP_DISCRETE_FLOOR 10
+#define RAMP_DISCRETE_CEIL RAMP_SMOOTH_CEIL
+#define RAMP_DISCRETE_STEPS 7
+
+// safe limit ~75% power
+#define SIMPLE_UI_FLOOR RAMP_DISCRETE_FLOOR
+#define SIMPLE_UI_CEIL RAMP_DISCRETE_CEIL
+#define SIMPLE_UI_STEPS 5
+
+// make candle mode wobble more
+#define CANDLE_AMPLITUDE 33
+
+// stop panicking at ~70% power or ~600 lm
+#define THERM_FASTER_LEVEL 130
+#define MIN_THERM_STEPDOWN 80 // must be > end of dynamic PWM range
+
+//#define THERM_RESPONSE_MAGNITUDE 32 // smaller adjustments, this host changes temperature slowly
+//#define THERM_NEXT_WARNING_THRESHOLD 32 // more error tolerance before adjusting
+
+// slow down party strobe; this driver can't pulse for 2ms or less
+#define PARTY_STROBE_ONTIME 3
+
+#define THERM_CAL_OFFSET 5
+
+// the power regulator seems to "jump start" the LEDs all on its own,
+// so the firmware doesn't have to
+// (and unfortunately the power regulator jumps it a bit too hard)
+#define DEFAULT_JUMP_START_LEVEL 1
+#define BLINK_BRIGHTNESS 50
+#define BLINK_ONCE_TIME 12
+
+// added for convenience
+#define USE_SOFT_FACTORY_RESET
diff --git a/spaghetti-monster/anduril/cfg-noctigon-dm11-nofet.h b/spaghetti-monster/anduril/cfg-noctigon-dm11-nofet.h
new file mode 100644
index 0000000..5a828d6
--- /dev/null
+++ b/spaghetti-monster/anduril/cfg-noctigon-dm11-nofet.h
@@ -0,0 +1,42 @@
+// Noctigon DM11-noFET config options for Anduril
+#include "cfg-noctigon-dm11.h"
+#undef MODEL_NUMBER
+#define MODEL_NUMBER "0272"
+// ATTINY: 1634
+
+// turn off the DD FET
+#undef PWM_CHANNELS
+#define PWM_CHANNELS 1
+
+// level_calc.py 5.01 1 149 7135 1 0.3 1740 --pwm dyn:78:16384:255
+#undef PWM1_LEVELS
+#define PWM1_LEVELS 0,1,1,1,2,3,3,4,5,6,7,8,9,10,11,13,14,16,17,19,21,23,25,27,29,31,34,36,39,42,44,47,50,53,57,60,63,67,70,74,77,81,85,88,92,96,99,103,107,110,113,117,120,123,126,128,130,133,134,136,137,137,137,137,136,135,133,130,126,122,117,111,104,96,87,76,65,52,38,22,23,25,26,27,28,29,30,32,33,34,36,37,39,40,42,43,45,47,49,51,53,55,57,59,61,63,66,68,70,73,76,78,81,84,87,90,93,96,99,103,106,110,113,117,121,125,129,133,137,142,146,151,155,160,165,170,175,181,186,192,197,203,209,215,222,228,234,241,248,255
+#undef PWM2_LEVELS
+#undef PWM_TOPS
+#define PWM_TOPS 16383,16383,12404,8140,11462,14700,11041,12947,13795,14111,14124,13946,13641,13248,12791,13418,12808,13057,12385,12428,12358,12209,12000,11746,11459,11147,11158,10793,10708,10576,10173,9998,9800,9585,9527,9278,9023,8901,8634,8486,8216,8053,7881,7615,7440,7261,7009,6832,6656,6422,6196,6031,5819,5615,5419,5190,4973,4803,4571,4386,4179,3955,3745,3549,3340,3145,2940,2729,2513,2312,2109,1903,1697,1491,1286,1070,871,662,459,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
+#undef DEFAULT_LEVEL
+#define DEFAULT_LEVEL 70
+#undef MAX_1x7135
+#define MAX_1x7135 150
+
+// make candle mode wobble more
+#ifdef CANDLE_AMPLITUDE
+#undef CANDLE_AMPLITUDE
+#endif
+#define CANDLE_AMPLITUDE 33
+
+
+// slow down party strobe; this driver can't pulse for 1ms or less
+// (only needed on no-FET build)
+#define PARTY_STROBE_ONTIME 2
+
+// jump start a bit higher than base driver
+#undef DEFAULT_JUMP_START_LEVEL
+#define DEFAULT_JUMP_START_LEVEL 25
+
+// stop panicking at ~70% power or ~600 lm
+#undef THERM_FASTER_LEVEL
+#define THERM_FASTER_LEVEL 130
+#undef MIN_THERM_STEPDOWN
+#define MIN_THERM_STEPDOWN 80 // must be > end of dynamic PWM range
+
diff --git a/spaghetti-monster/anduril/cfg-noctigon-dm11.h b/spaghetti-monster/anduril/cfg-noctigon-dm11.h
new file mode 100644
index 0000000..794ae2b
--- /dev/null
+++ b/spaghetti-monster/anduril/cfg-noctigon-dm11.h
@@ -0,0 +1,73 @@
+// Noctigon DM11 config options for Anduril
+#define MODEL_NUMBER "0271"
+#include "hwdef-Noctigon_DM11.h"
+#include "hank-cfg.h"
+// ATTINY: 1634
+
+// this light has three aux LED channels: R, G, B
+#define USE_AUX_RGB_LEDS
+// ... and a single LED in the button
+#define USE_BUTTON_LED
+// don't use aux LEDs while main LED is on
+#ifdef USE_INDICATOR_LED_WHILE_RAMPING
+#undef USE_INDICATOR_LED_WHILE_RAMPING
+#endif
+
+
+// power channels:
+// - linear: 5A?
+// - FET: DD
+#define RAMP_LENGTH 150
+#define USE_DYN_PWM
+
+// maxreg at 130, dynamic PWM: level_calc.py 5.01 2 149 7135 1 0.3 1740 FET 1 10 3190 --pwm dyn:64:16384:255
+// (plus one extra level at the beginning for moon)
+#define PWM1_LEVELS 0,1,1,2,2,3,4,5,6,7,8,9,11,12,14,16,17,19,22,24,26,29,31,34,37,40,43,46,49,53,56,60,63,67,71,74,78,82,86,89,93,96,99,103,105,108,110,112,114,115,116,116,115,114,112,109,106,101,95,89,81,71,60,48,34,19,20,21,22,23,24,26,27,28,30,31,32,34,36,37,39,41,43,45,47,49,51,53,56,58,61,63,66,69,72,75,78,81,84,88,91,95,99,103,107,111,115,119,124,129,133,138,143,149,154,159,165,171,177,183,189,196,203,210,217,224,231,239,247,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0
+#define PWM2_LEVELS 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,20,30,41,52,63,75,87,99,112,125,138,151,165,179,194,208,224,239,255
+#define PWM_TOPS 16383,16383,11750,14690,9183,12439,13615,13955,13877,13560,13093,12529,13291,12513,12756,12769,11893,11747,12085,11725,11329,11316,10851,10713,10518,10282,10016,9729,9428,9298,8971,8794,8459,8257,8043,7715,7497,7275,7052,6753,6538,6260,5994,5798,5501,5271,5006,4758,4525,4268,4030,3775,3508,3263,3010,2752,2517,2256,1998,1763,1512,1249,994,749,497,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
+
+#define DEFAULT_LEVEL 70
+#define MAX_1x7135 130
+#define HALFSPEED_LEVEL 12
+#define QUARTERSPEED_LEVEL 4
+
+// don't blink halfway up
+#ifdef BLINK_AT_RAMP_MIDDLE
+#undef BLINK_AT_RAMP_MIDDLE
+#endif
+
+#define RAMP_SMOOTH_FLOOR 10 // low levels may be unreliable
+#define RAMP_SMOOTH_CEIL 130
+// 10, 30, 50, [70], 90, 110, 130
+#define RAMP_DISCRETE_FLOOR 10
+#define RAMP_DISCRETE_CEIL RAMP_SMOOTH_CEIL
+#define RAMP_DISCRETE_STEPS 7
+
+// safe limit ~75% power
+#define SIMPLE_UI_FLOOR RAMP_DISCRETE_FLOOR
+#define SIMPLE_UI_CEIL RAMP_DISCRETE_CEIL
+#define SIMPLE_UI_STEPS 5
+
+// make candle mode wobble more
+#define CANDLE_AMPLITUDE 30
+
+// stop panicking at ~70% power or ~600 lm
+#define THERM_FASTER_LEVEL 130
+#define MIN_THERM_STEPDOWN 66 // must be > end of dynamic PWM range
+
+//#define THERM_RESPONSE_MAGNITUDE 32 // smaller adjustments, this host changes temperature slowly
+//#define THERM_NEXT_WARNING_THRESHOLD 32 // more error tolerance before adjusting
+
+// slow down party strobe; this driver can't pulse for 1ms or less
+// (only needed on no-FET build)
+//#define PARTY_STROBE_ONTIME 2
+
+#define THERM_CAL_OFFSET 5
+
+// the power regulator is a bit slow, so push it harder for a quick response from off
+#define DEFAULT_JUMP_START_LEVEL 21
+#define BLINK_BRIGHTNESS 50
+#define BLINK_ONCE_TIME 12
+
+// added for convenience
+#define USE_SOFT_FACTORY_RESET
diff --git a/spaghetti-monster/anduril/config-default.h b/spaghetti-monster/anduril/config-default.h
index 406e98b..0e70347 100644
--- a/spaghetti-monster/anduril/config-default.h
+++ b/spaghetti-monster/anduril/config-default.h
@@ -166,9 +166,9 @@
// (these replace the fun strobe group,
// so don't enable them at the same time as any of the above strobes)
//#define USE_POLICE_STROBE_MODE
-//#define USE_SOS_MODE
+#define USE_SOS_MODE
//#define USE_SOS_MODE_IN_FF_GROUP // put SOS in the "boring strobes" mode
-//#define USE_SOS_MODE_IN_BLINKY_GROUP // put SOS in the blinkies mode group
+#define USE_SOS_MODE_IN_BLINKY_GROUP // put SOS in the blinkies mode group
// enable a mode for locking the light for safe carry
#define USE_LOCKOUT_MODE
@@ -189,5 +189,9 @@
// (defined here so config files can override it)
#define USE_DYNAMIC_UNDERCLOCKING
+// if the aux LEDs oscillate between "full battery" and "empty battery"
+// while in "voltage" mode, enable this to reduce the amplitude of
+// those oscillations
+//#define USE_LOWPASS_WHILE_ASLEEP
#endif
diff --git a/spaghetti-monster/anduril/lockout-mode.c b/spaghetti-monster/anduril/lockout-mode.c
index 8c83cff..e3e3fed 100644
--- a/spaghetti-monster/anduril/lockout-mode.c
+++ b/spaghetti-monster/anduril/lockout-mode.c
@@ -88,9 +88,16 @@ uint8_t lockout_state(Event event, uint16_t arg) {
}
#endif
+ // 3 clicks: exit and turn off
+ else if (event == EV_3clicks) {
+ blink_once();
+ set_state(off_state, 0);
+ return MISCHIEF_MANAGED;
+ }
// 4 clicks: exit and turn on
else if (event == EV_4clicks) {
#ifdef USE_MANUAL_MEMORY
+ // FIXME: memory timer is totally ignored
if (manual_memory)
set_state(steady_state, manual_memory);
else
@@ -100,7 +107,8 @@ uint8_t lockout_state(Event event, uint16_t arg) {
}
// 4 clicks, but hold last: exit and start at floor
else if (event == EV_click4_hold) {
- blink_once();
+ //blink_once();
+ blip();
// reset button sequence to avoid activating anything in ramp mode
current_event = 0;
// ... and back to ramp mode
diff --git a/spaghetti-monster/anduril/ramp-mode.c b/spaghetti-monster/anduril/ramp-mode.c
index 6f51f1f..6e8ba88 100644
--- a/spaghetti-monster/anduril/ramp-mode.c
+++ b/spaghetti-monster/anduril/ramp-mode.c
@@ -404,7 +404,12 @@ uint8_t steady_state(Event event, uint16_t arg) {
// 3H: momentary turbo (on lights with no tint ramping)
else if (event == EV_click3_hold) {
if (! arg) { // first frame only, to allow thermal regulation to work
+ #ifdef USE_2C_STYLE_CONFIG
+ uint8_t tl = style_2c ? MAX_LEVEL : turbo_level;
+ set_level_and_therm_target(tl);
+ #else
set_level_and_therm_target(turbo_level);
+ #endif
}
return MISCHIEF_MANAGED;
}
diff --git a/spaghetti-monster/anduril/tint-ramping.c b/spaghetti-monster/anduril/tint-ramping.c
index 6cc0616..d270d9d 100644
--- a/spaghetti-monster/anduril/tint-ramping.c
+++ b/spaghetti-monster/anduril/tint-ramping.c
@@ -22,7 +22,6 @@
#include "tint-ramping.h"
-
uint8_t tint_ramping_state(Event event, uint16_t arg) {
static int8_t tint_ramp_direction = 1;
static uint8_t prev_tint = 0;
@@ -92,6 +91,9 @@ uint8_t tint_ramping_state(Event event, uint16_t arg) {
else if (tint >= 254) tint_ramp_direction = -1;
// remember tint after battery change
save_config();
+ // bug?: for some reason, brightness can seemingly change
+ // from 1/150 to 2/150 without this next line... not sure why
+ set_level(actual_level);
return EVENT_HANDLED;
}
diff --git a/spaghetti-monster/fsm-adc.c b/spaghetti-monster/fsm-adc.c
index 975d12e..c5401ea 100644
--- a/spaghetti-monster/fsm-adc.c
+++ b/spaghetti-monster/fsm-adc.c
@@ -306,10 +306,28 @@ static inline void ADC_voltage_handler() {
uint16_t measurement;
// latest ADC value
- if (adc_reset) { // while asleep, or just after waking, don't lowpass
+ if (adc_reset) { // just after waking, don't lowpass
measurement = adc_raw[0];
- adc_smooth[0] = measurement; // no lowpass while asleep
+ adc_smooth[0] = measurement; // no lowpass, just use the latest value
}
+ #ifdef USE_LOWPASS_WHILE_ASLEEP
+ else if (go_to_standby) { // weaker lowpass while asleep
+ // occasionally the aux LED color can oscillate during standby,
+ // while using "voltage" mode ... so try to reduce the oscillation
+ uint16_t m = adc_raw[0];
+ uint16_t v = adc_smooth[0];
+ #if 0
+ // fixed-rate lowpass, slow, more stable but takes longer to settle
+ if (m < v) { v -= 64; }
+ if (m > v) { v += 64; }
+ #else
+ // weighted lowpass, faster but less stable
+ v = (m>>1) + (v>>1);
+ #endif
+ adc_smooth[0] = v;
+ measurement = v;
+ }
+ #endif
else measurement = adc_smooth[0];
// values stair-step between intervals of 64, with random variations
diff --git a/spaghetti-monster/fsm-standby.c b/spaghetti-monster/fsm-standby.c
index c450bca..0ae6a2f 100644
--- a/spaghetti-monster/fsm-standby.c
+++ b/spaghetti-monster/fsm-standby.c
@@ -73,7 +73,9 @@ void sleep_until_eswitch_pressed()
go_to_standby = 0;
}
if (irq_adc) { // ADC done measuring
+ #ifndef USE_LOWPASS_WHILE_ASLEEP
adc_reset = 1; // don't lowpass while asleep
+ #endif
adc_deferred_enable = 1;
adc_deferred();
//ADC_off(); // takes care of itself