aboutsummaryrefslogtreecommitdiff
path: root/spaghetti-monster
diff options
context:
space:
mode:
Diffstat (limited to 'spaghetti-monster')
-rw-r--r--spaghetti-monster/anduril/MODELS1
-rw-r--r--spaghetti-monster/anduril/anduril.c5
-rw-r--r--spaghetti-monster/anduril/cfg-noctigon-k9.3-nofet.h54
-rw-r--r--spaghetti-monster/anduril/cfg-noctigon-k9.3.c105
-rw-r--r--spaghetti-monster/anduril/cfg-noctigon-k9.3.h86
-rw-r--r--spaghetti-monster/anduril/misc.c5
-rw-r--r--spaghetti-monster/anduril/off-mode.c3
-rw-r--r--spaghetti-monster/anduril/ramp-mode.h10
-rw-r--r--spaghetti-monster/anduril/tint-ramping.c28
-rw-r--r--spaghetti-monster/fsm-eeprom.c8
-rw-r--r--spaghetti-monster/fsm-ramping.c17
-rw-r--r--spaghetti-monster/fsm-ramping.h4
12 files changed, 314 insertions, 12 deletions
diff --git a/spaghetti-monster/anduril/MODELS b/spaghetti-monster/anduril/MODELS
index 84d6795..173620a 100644
--- a/spaghetti-monster/anduril/MODELS
+++ b/spaghetti-monster/anduril/MODELS
@@ -18,6 +18,7 @@ Model numbers:
0251 noctigon-k1
0252 noctigon-k1-sbt90
0253 noctigon-k1-12v
+0261 noctigon-k9.3
0311 fw3a
0312 fw3a-219
0313 fw3a-nofet
diff --git a/spaghetti-monster/anduril/anduril.c b/spaghetti-monster/anduril/anduril.c
index f632229..de9b332 100644
--- a/spaghetti-monster/anduril/anduril.c
+++ b/spaghetti-monster/anduril/anduril.c
@@ -91,6 +91,11 @@
#include "spaghetti-monster.h"
+/********* does this build target have special code to include? *********/
+#ifdef OVERRIDES_FILE
+#include incfile(OVERRIDES_FILE)
+#endif
+
/********* Include all the regular app headers *********/
diff --git a/spaghetti-monster/anduril/cfg-noctigon-k9.3-nofet.h b/spaghetti-monster/anduril/cfg-noctigon-k9.3-nofet.h
new file mode 100644
index 0000000..e91ebc4
--- /dev/null
+++ b/spaghetti-monster/anduril/cfg-noctigon-k9.3-nofet.h
@@ -0,0 +1,54 @@
+// Noctigon K9.3 (noFET) config options for Anduril
+#include "cfg-noctigon-k9.3.h"
+#undef MODEL_NUMBER
+#define MODEL_NUMBER "0262"
+// ATTINY: 1634
+
+// don't use the highest power channel
+#define K93_NO_FET
+
+// main LEDs
+#undef PWM1_LEVELS
+#undef PWM2_LEVELS
+#define PWM1_LEVELS 0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9,10,11,12,13,15,16,17,18,20,21,23,24,26,27,29,31,33,35,37,39,41,43,45,48,50,53,55,58,61,63,66,69,72,75,79,82,85,89,92,96,100,104,108,112,116,120,125,129,134,138,143,148,153,158,163,169,174,180,185,191,197,203,209,215,222,228,235,242,248,255,263,270,277,285,292,300,308,316,324,333,341,350,359,368,377,386,395,405,414,424,434,444,454,465,475,486,497,508,519,531,542,554,566,578,590,603,615,628,641,654,667,680,694,708,722,736,750,765,779,794,809,825,840,856,872,888,904,920,937,954,971,988,1005,1023
+// FET channel: unused, all zeroes
+#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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+// 2nd LEDs
+#undef PWM3_LEVELS
+#define PWM3_LEVELS 0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9,10,11,12,13,15,16,17,18,20,21,23,24,26,27,29,31,33,35,37,39,41,43,45,48,50,53,55,58,61,63,66,69,72,75,79,82,85,89,92,96,100,104,108,112,116,120,125,129,134,138,143,148,153,158,163,169,174,180,185,191,197,203,209,215,222,228,235,242,248,255,263,270,277,285,292,300,308,316,324,333,341,350,359,368,377,386,395,405,414,424,434,444,454,465,475,486,497,508,519,531,542,554,566,578,590,603,615,628,641,654,667,680,694,708,722,736,750,765,779,794,809,825,840,856,872,888,904,920,937,954,971,988,1005,1023
+#undef DEFAULT_LEVEL
+#define DEFAULT_LEVEL 50
+#undef MAX_1x7135
+#undef MAX_Nx7135
+#define MAX_1x7135 150
+#define MAX_Nx7135 MAX_1x7135
+
+#undef RAMP_SMOOTH_FLOOR
+#undef RAMP_SMOOTH_CEIL
+#undef RAMP_DISCRETE_FLOOR
+#undef RAMP_DISCRETE_CEIL
+#undef RAMP_DISCRETE_STEPS
+
+#define RAMP_SMOOTH_FLOOR 3 // level 1 is unreliable(?)
+#define RAMP_SMOOTH_CEIL 130
+// 10, 30, [50], 70, 90, 110, 130 (plus [150] on turbo)
+#define RAMP_DISCRETE_FLOOR 10
+#define RAMP_DISCRETE_CEIL RAMP_SMOOTH_CEIL
+#define RAMP_DISCRETE_STEPS 7
+
+// safe limit same as full UI
+#undef SIMPLE_UI_FLOOR
+#undef SIMPLE_UI_CEIL
+#define SIMPLE_UI_FLOOR RAMP_DISCRETE_FLOOR
+#define SIMPLE_UI_CEIL RAMP_DISCRETE_CEIL
+
+
+// make candle mode wobble more
+#define CANDLE_AMPLITUDE 32
+
+// stop panicking at ~90% power or ~1600 lm
+#undef THERM_FASTER_LEVEL
+#define THERM_FASTER_LEVEL 143
+#undef MIN_THERM_STEPDOWN
+#define MIN_THERM_STEPDOWN DEFAULT_LEVEL
+
diff --git a/spaghetti-monster/anduril/cfg-noctigon-k9.3.c b/spaghetti-monster/anduril/cfg-noctigon-k9.3.c
new file mode 100644
index 0000000..5cb027a
--- /dev/null
+++ b/spaghetti-monster/anduril/cfg-noctigon-k9.3.c
@@ -0,0 +1,105 @@
+/*
+ * K9.3 has unusual power channels, so it must override some of FSM's code.
+ * There are two sets of LEDs:
+ * 1. Main LEDs: (9 x white LEDs)
+ * PWM1 (10-bit, linear)
+ * PWM2 (8-bit, FET, only used on some K9.3 models)
+ * 2. 2nd LEDs: (3 x white or color LEDs)
+ * PWM3 (10-bit, linear)
+ *
+ * The two sets are not used at the same time... just one or the other,
+ * depending on the "tint" variable. (0 = main LEDs, other value = 2nd LEDs)
+ */
+// if the gradual adjustment mechanism doesn't work, disable it here:
+//#ifdef USE_SET_LEVEL_GRADUALLY
+//#undef USE_SET_LEVEL_GRADUALLY
+//#endif
+
+// this is inserted into fsm-ramping.c :: set_level()
+// (it overrides part of the function, but not all of it)
+inline void set_level_override(uint8_t level) {
+ if (level == 0) { // off
+ PWM1_LVL = 0;
+ PWM2_LVL = 0;
+ PWM3_LVL = 0;
+ // disable both power channels
+ LED_ENABLE_PORT &= ~(1 << LED_ENABLE_PIN);
+ LED2_ENABLE_PORT &= ~(1 << LED2_ENABLE_PIN);
+ } else {
+ level --;
+
+ if (! tint) { // main LEDs
+ // enable this power channel
+ LED_ENABLE_PORT |= (1 << LED_ENABLE_PIN);
+ // disable other power channel
+ LED2_ENABLE_PORT &= ~(1 << LED2_ENABLE_PIN);
+ // set levels
+ PWM1_LVL = PWM_GET(pwm1_levels, level);
+ #ifndef K93_NO_FET
+ PWM2_LVL = (uint8_t)(PWM_GET(pwm2_levels, level) >> 2); // 8 bits
+ #endif
+ PWM3_LVL = 0;
+ } else { // 2nd LEDs
+ // disable other power channel
+ LED_ENABLE_PORT &= ~(1 << LED_ENABLE_PIN);
+ // enable this power channel
+ LED2_ENABLE_PORT |= (1 << LED2_ENABLE_PIN);
+ // set levels
+ PWM1_LVL = 0;
+ PWM2_LVL = 0;
+ PWM3_LVL = PWM_GET(pwm3_levels, level);
+ }
+ }
+}
+
+// override fsm-ramping.c :: gradual_tick()
+// (because the power handling on this light is weird)
+// call this every frame or every few frames to change brightness very smoothly
+void gradual_tick() {
+ // go by only one ramp level at a time instead of directly to the target
+ uint8_t gt = gradual_target;
+ if (gt < actual_level) gt = actual_level - 1;
+ else if (gt > actual_level) gt = actual_level + 1;
+
+ gt --; // convert 1-based number to 0-based
+
+ PWM_DATATYPE target;
+
+ if (! tint) { // main LED channel
+ target = PWM_GET(pwm1_levels, gt);
+ if ((gt < actual_level) // special case for FET-only turbo
+ && (PWM1_LVL == 0) // (bypass adjustment period for first step)
+ && (target == PWM_TOP)) PWM1_LVL = PWM_TOP;
+ else if (PWM1_LVL < target) PWM1_LVL ++;
+ else if (PWM1_LVL > target) PWM1_LVL --;
+
+ #ifndef K93_NO_FET // skip this on E21A model
+ target = PWM_GET(pwm2_levels, gt) >> 2; // 8 bits, not 10
+ if (PWM2_LVL < target) PWM2_LVL ++;
+ else if (PWM2_LVL > target) PWM2_LVL --;
+ #endif
+
+ // did we go far enough to hit the next defined ramp level?
+ // if so, update the main ramp level tracking var
+ if ((PWM1_LVL == PWM_GET(pwm1_levels, gt))
+ #ifndef K93_NO_FET
+ && (PWM2_LVL == (PWM_GET(pwm2_levels, gt) >> 2))
+ #endif
+ )
+ { actual_level = gt + 1; }
+ } else { // 2nd LED channel
+ target = PWM_GET(pwm3_levels, gt);
+ if (PWM3_LVL < target) PWM3_LVL ++;
+ else if (PWM3_LVL > target) PWM3_LVL --;
+
+ // did we go far enough to hit the next defined ramp level?
+ // if so, update the main ramp level tracking var
+ if ( PWM3_LVL == PWM_GET(pwm3_levels, gt) )
+ { actual_level = gt + 1; }
+ }
+
+ #ifdef USE_DYNAMIC_UNDERCLOCKING
+ auto_clock_speed();
+ #endif
+}
+
diff --git a/spaghetti-monster/anduril/cfg-noctigon-k9.3.h b/spaghetti-monster/anduril/cfg-noctigon-k9.3.h
new file mode 100644
index 0000000..4d3d3d9
--- /dev/null
+++ b/spaghetti-monster/anduril/cfg-noctigon-k9.3.h
@@ -0,0 +1,86 @@
+// Noctigon K9.3 config options for Anduril
+#define MODEL_NUMBER "0261"
+#include "hwdef-Noctigon_K9.3.h"
+// ATTINY: 1634
+// this model requires some special code
+#define OVERRIDES_FILE cfg-noctigon-k9.3.c
+#define OVERRIDE_SET_LEVEL
+#define OVERRIDE_GRADUAL_TICK
+inline void set_level_override(uint8_t level);
+
+
+// this light has three aux LED channels: R, G, B
+#define USE_AUX_RGB_LEDS
+#define RGB_LED_OFF_DEFAULT 0x18 // low, rainbow
+// the aux LEDs are front-facing, so turn them off while main LEDs are on
+//#define USE_AUX_RGB_LEDS_WHILE_ON
+// it also has an independent LED in the button
+#define USE_BUTTON_LED
+// TODO: the whole "indicator LED" thing needs to be refactored into
+// "aux LED(s)" and "button LED(s)" since they work a bit differently
+// enabling this option breaks the button LED on D4v2.5
+#ifdef USE_INDICATOR_LED_WHILE_RAMPING
+#undef USE_INDICATOR_LED_WHILE_RAMPING
+#endif
+
+// enable blinking aux LEDs
+#define TICK_DURING_STANDBY
+#define STANDBY_TICK_SPEED 3 // every 0.128 s
+
+// has two channels of independent LEDs
+#define USE_TINT_RAMPING
+// ... but it doesn't make sense to ramp between; only toggle
+#define TINT_RAMP_TOGGLE_ONLY
+
+// main LEDs
+// max regulated: ~1750 lm
+// FET: ~8000 lm
+// 2nd LEDs
+// max regulated: ~1500 lm
+// maxreg at 120: level_calc.py cube 2 150 7135 0 2.5 1740 FET 1 10 3190
+#define RAMP_LENGTH 150
+// main LEDs
+#define PWM1_LEVELS 0,0,1,1,2,2,3,3,4,4,5,6,7,8,9,10,11,13,14,15,17,19,20,22,24,26,28,30,33,35,38,40,43,46,49,52,55,59,62,66,70,74,78,82,86,91,96,100,105,111,116,121,127,133,139,145,151,158,165,172,179,186,193,201,209,217,225,234,243,251,261,270,280,289,299,310,320,331,342,353,364,376,388,400,412,425,438,451,464,478,492,506,521,536,551,566,582,597,614,630,647,664,681,699,717,735,754,772,792,811,831,851,871,892,913,935,956,978,1001,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,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,22,51,79,109,138,168,198,229,260,292,324,357,390,423,457,492,527,562,598,634,671,708,746,784,822,861,901,941,982,1023
+// 2nd LEDs
+#define PWM3_LEVELS 0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9,10,11,12,13,15,16,17,18,20,21,23,24,26,27,29,31,33,35,37,39,41,43,45,48,50,53,55,58,61,63,66,69,72,75,79,82,85,89,92,96,100,104,108,112,116,120,125,129,134,138,143,148,153,158,163,169,174,180,185,191,197,203,209,215,222,228,235,242,248,255,263,270,277,285,292,300,308,316,324,333,341,350,359,368,377,386,395,405,414,424,434,444,454,465,475,486,497,508,519,531,542,554,566,578,590,603,615,628,641,654,667,680,694,708,722,736,750,765,779,794,809,825,840,856,872,888,904,920,937,954,971,988,1005,1023
+#define DEFAULT_LEVEL 46
+#define MAX_1x7135 120
+#define MAX_Nx7135 MAX_1x7135
+#define HALFSPEED_LEVEL 10
+#define QUARTERSPEED_LEVEL 2
+
+#define USE_MANUAL_MEMORY_TIMER_FOR_TINT
+//#define DEFAULT_MANUAL_MEMORY DEFAULT_LEVEL
+//#define DEFAULT_MANUAL_MEMORY_TIMER 10
+
+#define RAMP_SMOOTH_FLOOR 3 // level 1 is unreliable (?)
+#define RAMP_SMOOTH_CEIL 120
+// 10, 28, [46], 65, 83, 101, [120]
+#define RAMP_DISCRETE_FLOOR 10
+#define RAMP_DISCRETE_CEIL RAMP_SMOOTH_CEIL
+#define RAMP_DISCRETE_STEPS 7
+
+// safe limit highest regulated power (no FET or turbo)
+#define SIMPLE_UI_FLOOR RAMP_DISCRETE_FLOOR
+#define SIMPLE_UI_CEIL RAMP_DISCRETE_CEIL
+#define SIMPLE_UI_STEPS 5
+
+// stop panicking at ~25% power or ~1000 lm
+#define THERM_FASTER_LEVEL 100
+#define MIN_THERM_STEPDOWN DEFAULT_LEVEL
+//#define THERM_NEXT_WARNING_THRESHOLD 16 // accumulate less error before adjusting
+//#define THERM_RESPONSE_MAGNITUDE 128 // bigger adjustments
+
+// use the brightest setting for strobe
+#define STROBE_BRIGHTNESS MAX_LEVEL
+// slow down party strobe; this driver can't pulse for 1ms or less
+#define PARTY_STROBE_ONTIME 2
+
+#define BLINK_ONCE_TIME 12 // longer blink, since main LEDs are slow
+
+#define THERM_CAL_OFFSET 5
+
+// for consistency with KR4 (not otherwise necessary though)
+#define USE_SOFT_FACTORY_RESET
+
diff --git a/spaghetti-monster/anduril/misc.c b/spaghetti-monster/anduril/misc.c
index 63b8f48..523bbf0 100644
--- a/spaghetti-monster/anduril/misc.c
+++ b/spaghetti-monster/anduril/misc.c
@@ -38,13 +38,16 @@ void blink_confirm(uint8_t num) {
// make a short, visible pulse
// (either brighter or darker, depending on current brightness)
+#ifndef BLINK_ONCE_TIME
+#define BLINK_ONCE_TIME 10
+#endif
void blink_once() {
uint8_t brightness = actual_level;
uint8_t bump = brightness + (MAX_LEVEL/6);
if (bump > MAX_LEVEL) bump = 0;
set_level(bump);
- delay_4ms(10/4);
+ delay_4ms(BLINK_ONCE_TIME/4);
set_level(brightness);
}
diff --git a/spaghetti-monster/anduril/off-mode.c b/spaghetti-monster/anduril/off-mode.c
index 5ebaa1d..34d9e6d 100644
--- a/spaghetti-monster/anduril/off-mode.c
+++ b/spaghetti-monster/anduril/off-mode.c
@@ -133,6 +133,9 @@ uint8_t off_state(Event event, uint16_t arg) {
&& (off_time >= (manual_memory_timer * SLEEP_TICKS_PER_MINUTE))
#endif
) {
+ #if defined(USE_MANUAL_MEMORY_TIMER_FOR_TINT) && defined(USE_TINT_RAMPING) && defined(TINT_RAMP_TOGGLE_ONLY)
+ tint = 0;
+ #endif
set_level(nearest_level(manual_memory));
} else
#endif
diff --git a/spaghetti-monster/anduril/ramp-mode.h b/spaghetti-monster/anduril/ramp-mode.h
index b772407..ed806bd 100644
--- a/spaghetti-monster/anduril/ramp-mode.h
+++ b/spaghetti-monster/anduril/ramp-mode.h
@@ -148,9 +148,15 @@ void set_level_and_therm_target(uint8_t level);
// brightness control
uint8_t memorized_level = DEFAULT_LEVEL;
#ifdef USE_MANUAL_MEMORY
-uint8_t manual_memory = 0;
+#ifndef DEFAULT_MANUAL_MEMORY
+#define DEFAULT_MANUAL_MEMORY 0
+#endif
+uint8_t manual_memory = DEFAULT_MANUAL_MEMORY;
#ifdef USE_MANUAL_MEMORY_TIMER
-uint8_t manual_memory_timer = 0;
+#ifndef DEFAULT_MANUAL_MEMORY_TIMER
+#define DEFAULT_MANUAL_MEMORY_TIMER 0
+#endif
+uint8_t manual_memory_timer = DEFAULT_MANUAL_MEMORY_TIMER;
#endif
#endif
#ifdef USE_SIMPLE_UI
diff --git a/spaghetti-monster/anduril/tint-ramping.c b/spaghetti-monster/anduril/tint-ramping.c
index 0196bc7..0b077ef 100644
--- a/spaghetti-monster/anduril/tint-ramping.c
+++ b/spaghetti-monster/anduril/tint-ramping.c
@@ -22,6 +22,32 @@
#include "tint-ramping.h"
+#ifdef TINT_RAMP_TOGGLE_ONLY
+
+uint8_t tint_ramping_state(Event event, uint16_t arg) {
+ // click, click, hold: change the tint
+ if (event == EV_click3_hold) {
+ // toggle once on first frame; ignore other frames
+ if (! arg) {
+ tint = !tint;
+ set_level(actual_level);
+ blink_once();
+ }
+ return EVENT_HANDLED;
+ }
+
+ // click, click, hold, release: save config
+ else if (event == EV_click3_hold_release) {
+ // remember tint after battery change
+ save_config();
+ return EVENT_HANDLED;
+ }
+
+ return EVENT_NOT_HANDLED;
+}
+
+#else // no TINT_RAMP_TOGGLE_ONLY
+
uint8_t tint_ramping_state(Event event, uint16_t arg) {
static int8_t tint_ramp_direction = 1;
static uint8_t prev_tint = 0;
@@ -82,6 +108,8 @@ uint8_t tint_ramping_state(Event event, uint16_t arg) {
return EVENT_NOT_HANDLED;
}
+#endif // ifdef TINT_RAMP_TOGGLE_ONLY
+
#endif
diff --git a/spaghetti-monster/fsm-eeprom.c b/spaghetti-monster/fsm-eeprom.c
index 0de7e05..4c734a2 100644
--- a/spaghetti-monster/fsm-eeprom.c
+++ b/spaghetti-monster/fsm-eeprom.c
@@ -30,7 +30,7 @@ uint8_t eeprom[EEPROM_BYTES];
#endif
uint8_t load_eeprom() {
- #ifdef LED_ENABLE_PIN
+ #if defined(LED_ENABLE_PIN) || defined(LED2_ENABLE_PIN)
delay_4ms(2); // wait for power to stabilize
#endif
@@ -48,7 +48,7 @@ uint8_t load_eeprom() {
}
void save_eeprom() {
- #ifdef LED_ENABLE_PIN
+ #if defined(LED_ENABLE_PIN) || defined(LED2_ENABLE_PIN)
delay_4ms(2); // wait for power to stabilize
#endif
@@ -70,7 +70,7 @@ uint8_t eeprom_wl[EEPROM_WL_BYTES];
uint8_t * eep_wl_prev_offset;
uint8_t load_eeprom_wl() {
- #ifdef LED_ENABLE_PIN
+ #if defined(LED_ENABLE_PIN) || defined(LED2_ENABLE_PIN)
delay_4ms(2); // wait for power to stabilize
#endif
@@ -99,7 +99,7 @@ uint8_t load_eeprom_wl() {
}
void save_eeprom_wl() {
- #ifdef LED_ENABLE_PIN
+ #if defined(LED_ENABLE_PIN) || defined(LED2_ENABLE_PIN)
delay_4ms(2); // wait for power to stabilize
#endif
diff --git a/spaghetti-monster/fsm-ramping.c b/spaghetti-monster/fsm-ramping.c
index 8ad4b65..0768f8d 100644
--- a/spaghetti-monster/fsm-ramping.c
+++ b/spaghetti-monster/fsm-ramping.c
@@ -54,6 +54,10 @@ void set_level(uint8_t level) {
#endif
#endif
+ #ifdef OVERRIDE_SET_LEVEL
+ set_level_override(level);
+ #else
+
//TCCR0A = PHASE;
if (level == 0) {
#if PWM_CHANNELS >= 1
@@ -72,8 +76,8 @@ void set_level(uint8_t level) {
#ifdef LED_ENABLE_PIN
LED_ENABLE_PORT &= ~(1 << LED_ENABLE_PIN);
#endif
- #ifdef LED_ENABLE2_PIN
- LED_ENABLE2_PORT &= ~(1 << LED_ENABLE2_PIN);
+ #ifdef LED2_ENABLE_PIN
+ LED2_ENABLE_PORT &= ~(1 << LED2_ENABLE_PIN);
#endif
} else {
// enable the power channel, if relevant
@@ -89,8 +93,8 @@ void set_level(uint8_t level) {
LED_ENABLE_PORT &= ~(1 << LED_ENABLE_PIN);
#endif
#endif
- #ifdef LED_ENABLE2_PIN
- LED_ENABLE2_PORT |= (1 << LED_ENABLE2_PIN);
+ #ifdef LED2_ENABLE_PIN
+ LED2_ENABLE_PORT |= (1 << LED2_ENABLE_PIN);
#endif
level --;
@@ -148,6 +152,7 @@ void set_level(uint8_t level) {
#endif // ifdef USE_TINT_RAMPING
}
+ #endif // ifdef OVERRIDE_SET_LEVEL
#ifdef USE_DYNAMIC_UNDERCLOCKING
auto_clock_speed();
#endif
@@ -158,6 +163,7 @@ inline void set_level_gradually(uint8_t lvl) {
gradual_target = lvl;
}
+#ifndef OVERRIDE_GRADUAL_TICK
// call this every frame or every few frames to change brightness very smoothly
void gradual_tick() {
// go by only one ramp level at a time instead of directly to the target
@@ -222,7 +228,8 @@ void gradual_tick() {
auto_clock_speed();
#endif
}
-#endif
+#endif // ifdef OVERRIDE_GRADUAL_TICK
+#endif // ifdef USE_SET_LEVEL_GRADUALLY
#endif // ifdef USE_RAMPING
#endif
diff --git a/spaghetti-monster/fsm-ramping.h b/spaghetti-monster/fsm-ramping.h
index f177db9..8fd89c7 100644
--- a/spaghetti-monster/fsm-ramping.h
+++ b/spaghetti-monster/fsm-ramping.h
@@ -27,7 +27,11 @@
uint8_t actual_level = 0;
#ifdef USE_TINT_RAMPING
+#ifdef TINT_RAMP_TOGGLE_ONLY
+uint8_t tint = 0;
+#else
uint8_t tint = 128;
+#endif
#define USE_TRIANGLE_WAVE
#endif