aboutsummaryrefslogtreecommitdiff
path: root/spaghetti-monster
diff options
context:
space:
mode:
authorSelene ToyKeeper2021-07-11 13:58:41 -0600
committerSelene ToyKeeper2021-07-11 13:58:41 -0600
commit1549e246f83fe132315d8a51ea9b1cb1a5a583ba (patch)
treecfc360864b0021a520f49fc38e3c5a75b8710b1b /spaghetti-monster
parentadded Emisar D18 Nichia 219 build target (same as normal but reduced FET power) (diff)
downloadanduril-1549e246f83fe132315d8a51ea9b1cb1a5a583ba.tar.gz
anduril-1549e246f83fe132315d8a51ea9b1cb1a5a583ba.tar.bz2
anduril-1549e246f83fe132315d8a51ea9b1cb1a5a583ba.zip
rewrote hybrid memory (manual memory timer) to eliminate corner cases
Old method: - at 1-click power-on, choose a brightness based on off-time (manual level or last-ramped level) New method: - when off longer than the timer, set last-ramped level to manual level This fixes a bug: - turn light off - wait for timer - turn light on with a shortcut to moon - turn light off - turn light on - pre-patch, light went to last-ramped level instead of manual level This change also reduces the ROM size slightly.
Diffstat (limited to 'spaghetti-monster')
-rw-r--r--spaghetti-monster/anduril/off-mode.c29
1 files changed, 14 insertions, 15 deletions
diff --git a/spaghetti-monster/anduril/off-mode.c b/spaghetti-monster/anduril/off-mode.c
index 094cca8..ae54f60 100644
--- a/spaghetti-monster/anduril/off-mode.c
+++ b/spaghetti-monster/anduril/off-mode.c
@@ -27,11 +27,6 @@
#endif
uint8_t off_state(Event event, uint16_t arg) {
- #ifdef USE_MANUAL_MEMORY_TIMER
- // keep track of how long the light was off,
- // so we can do different things on waking, depending on how long asleep
- static uint16_t off_time = 0;
- #endif
// turn emitter off when entering state
if (event == EV_enter_state) {
@@ -65,7 +60,14 @@ uint8_t off_state(Event event, uint16_t arg) {
// blink the indicator LED, maybe
else if (event == EV_sleep_tick) {
#ifdef USE_MANUAL_MEMORY_TIMER
- off_time = arg;
+ // reset to manual memory level when timer expires
+ if (manual_memory &&
+ (arg >= (manual_memory_timer * SLEEP_TICKS_PER_MINUTE))) {
+ memorized_level = manual_memory;
+ #ifdef USE_TINT_RAMPING
+ tint = manual_memory_tint;
+ #endif
+ }
#endif
#ifdef USE_INDICATOR_LED
if ((indicator_led_mode & 0b00000011) == 0b00000011) {
@@ -126,18 +128,15 @@ uint8_t off_state(Event event, uint16_t arg) {
#if (B_TIMING_ON != B_TIMEOUT_T)
// 1 click (before timeout): go to memorized level, but allow abort for double click
else if (event == EV_click1_release) {
- #ifdef USE_MANUAL_MEMORY
- // for full manual memory, set manual_memory_timer to 0
- if (manual_memory
- #ifdef USE_MANUAL_MEMORY_TIMER
- && (off_time >= (manual_memory_timer * SLEEP_TICKS_PER_MINUTE))
- #endif
- ) {
+ #if defined(USE_MANUAL_MEMORY) && !defined(USE_MANUAL_MEMORY_TIMER)
+ // this clause probably isn't used by any configs any more
+ // but is included just in case someone configures it this way
+ if (manual_memory) {
+ memorized_level = manual_memory;
#ifdef USE_TINT_RAMPING
tint = manual_memory_tint;
#endif
- set_level(nearest_level(manual_memory));
- } else
+ }
#endif
set_level(nearest_level(memorized_level));
return MISCHIEF_MANAGED;
If you find this content useful please consider a small donation via bitcoin: bitcoin:1mxKyQsHHugqRxPKgwaA7wUwJEGCNthn2?amount=0.001&message=Donation Scraping git contents via cgit is very resource intensive. The continued hosting of these git repositories is entirely financed by your bitcoin contributions. For donations of a least 1 mBTC you include your IP address in the message of your bitcoin donation. This will remove this message in the future for requests from your IP, which will significantly reduce token usage. In any case, any contributions to bitcoin address 1mxKyQsHHugqRxPKgwaA7wUwJEGCNthn2 are very welcome. Thanks in advance for you contribution to a self-sustaining ecosystem.