aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSelene ToyKeeper2020-08-05 20:51:36 -0600
committerSelene ToyKeeper2020-08-05 20:51:36 -0600
commit3c46926f5685e9c2b8dea39d176322905e2015b5 (patch)
treeeec837ad82624c7a2e08f98885687c7a023dd2fe
parentreduced ROM 10 bytes by cleaning up blink_confirm() calls (diff)
downloadanduril-3c46926f5685e9c2b8dea39d176322905e2015b5.tar.gz
anduril-3c46926f5685e9c2b8dea39d176322905e2015b5.tar.bz2
anduril-3c46926f5685e9c2b8dea39d176322905e2015b5.zip
reduced rom 34 bytes by merging ramp-up code with ramp-down code
(also removed USE_REVERSING option)
-rw-r--r--spaghetti-monster/anduril/config-default.h5
-rw-r--r--spaghetti-monster/anduril/ramp-mode.c84
2 files changed, 10 insertions, 79 deletions
diff --git a/spaghetti-monster/anduril/config-default.h b/spaghetti-monster/anduril/config-default.h
index 0957a29..21e345b 100644
--- a/spaghetti-monster/anduril/config-default.h
+++ b/spaghetti-monster/anduril/config-default.h
@@ -59,11 +59,6 @@
#define BLINK_AT_RAMP_CEIL
//#define BLINK_AT_STEPS // whenever a discrete ramp mode is passed in smooth mode
-// ramp down via regular button hold if a ramp-up ended <1s ago
-// ("hold, release, hold" ramps down instead of up)
-// TODO: remove this setting; nobody ever changes it)
-#define USE_REVERSING
-
// Include a simplified UI for non-enthusiasts?
#define USE_SIMPLE_UI
diff --git a/spaghetti-monster/anduril/ramp-mode.c b/spaghetti-monster/anduril/ramp-mode.c
index 23f2ad4..7ca63cf 100644
--- a/spaghetti-monster/anduril/ramp-mode.c
+++ b/spaghetti-monster/anduril/ramp-mode.c
@@ -27,9 +27,7 @@
#endif
uint8_t steady_state(Event event, uint16_t arg) {
- #ifdef USE_REVERSING
static int8_t ramp_direction = 1;
- #endif
#if (B_TIMING_OFF == B_RELEASE_T)
// if the user double clicks, we need to abort turning off,
// and this stores the level to return to
@@ -79,9 +77,7 @@ uint8_t steady_state(Event event, uint16_t arg) {
// use the requested level even if not memorized
arg = nearest_level(arg);
set_level_and_therm_target(arg);
- #ifdef USE_REVERSING
ramp_direction = 1;
- #endif
return MISCHIEF_MANAGED;
}
#if (B_TIMING_OFF == B_RELEASE_T)
@@ -123,13 +119,14 @@ uint8_t steady_state(Event event, uint16_t arg) {
#endif
return MISCHIEF_MANAGED;
}
- // hold: change brightness (brighter)
- else if (event == EV_click1_hold) {
+
+ // hold: change brightness (brighter, dimmer)
+ // click, hold: change brightness (dimmer)
+ else if ((event == EV_click1_hold) || (event == EV_click2_hold)) {
// ramp slower in discrete mode
if (ramp_style && (arg % HOLD_TIMEOUT != 0)) {
return MISCHIEF_MANAGED;
}
- #ifdef USE_REVERSING
// fix ramp direction on first frame if necessary
if (!arg) {
// make it ramp down instead, if already at max
@@ -137,6 +134,8 @@ uint8_t steady_state(Event event, uint16_t arg) {
// make it ramp up if already at min
// (off->hold->stepped_min->release causes this state)
else if (actual_level <= mode_min) { ramp_direction = 1; }
+ // click, hold should always go down if possible
+ else if (event == EV_click2_hold) { ramp_direction = -1; }
}
// if the button is stuck, err on the side of safety and ramp down
else if ((arg > TICKS_PER_SECOND * 5) && (actual_level >= mode_max)) {
@@ -145,15 +144,12 @@ uint8_t steady_state(Event event, uint16_t arg) {
#ifdef USE_LOCKOUT_MODE
// if the button is still stuck, lock the light
else if ((arg > TICKS_PER_SECOND * 10) && (actual_level <= mode_min)) {
- blip();
+ blink_once();
set_state(lockout_state, 0);
}
#endif
memorized_level = nearest_level((int16_t)actual_level \
+ (step_size * ramp_direction));
- #else
- memorized_level = nearest_level((int16_t)actual_level + step_size);
- #endif
#if defined(BLINK_AT_RAMP_CEIL) || defined(BLINK_AT_RAMP_MIDDLE)
// only blink once for each threshold
if ((memorized_level != actual_level) && (
@@ -167,7 +163,7 @@ uint8_t steady_state(Event event, uint16_t arg) {
#ifdef BLINK_AT_RAMP_CEIL
|| (memorized_level == mode_max)
#endif
- #if defined(USE_REVERSING) && defined(BLINK_AT_RAMP_FLOOR)
+ #ifdef BLINK_AT_RAMP_FLOOR
|| (memorized_level == mode_min)
#endif
)) {
@@ -194,73 +190,15 @@ uint8_t steady_state(Event event, uint16_t arg) {
#endif
return MISCHIEF_MANAGED;
}
- #if defined(USE_REVERSING) || defined(START_AT_MEMORIZED_LEVEL)
// reverse ramp direction on hold release
- else if (event == EV_click1_hold_release) {
- #ifdef USE_REVERSING
+ else if ((event == EV_click1_hold_release)
+ || (event == EV_click2_hold_release)) {
ramp_direction = -ramp_direction;
- #endif
#ifdef START_AT_MEMORIZED_LEVEL
save_config_wl();
#endif
return MISCHIEF_MANAGED;
}
- #endif
- // click, hold: change brightness (dimmer)
- else if (event == EV_click2_hold) {
- #ifdef USE_REVERSING
- ramp_direction = 1;
- #endif
- // ramp slower in discrete mode
- if (ramp_style && (arg % HOLD_TIMEOUT != 0)) {
- return MISCHIEF_MANAGED;
- }
- // TODO? make it ramp up instead, if already at min?
- memorized_level = nearest_level((int16_t)actual_level - step_size);
- #if defined(BLINK_AT_RAMP_FLOOR) || defined(BLINK_AT_RAMP_MIDDLE)
- // only blink once for each threshold
- if ((memorized_level != actual_level) && (
- 0 // for easier syntax below
- #ifdef BLINK_AT_RAMP_MIDDLE_1
- || (memorized_level == BLINK_AT_RAMP_MIDDLE_1)
- #endif
- #ifdef BLINK_AT_RAMP_MIDDLE_2
- || (memorized_level == BLINK_AT_RAMP_MIDDLE_2)
- #endif
- #ifdef BLINK_AT_RAMP_FLOOR
- || (memorized_level == mode_min)
- #endif
- )) {
- blip();
- }
- #endif
- #if defined(BLINK_AT_STEPS)
- uint8_t foo = ramp_style;
- ramp_style = 1;
- uint8_t nearest = nearest_level((int16_t)actual_level);
- ramp_style = foo;
- // only blink once for each threshold
- if ((memorized_level != actual_level) &&
- (ramp_style == 0) &&
- (memorized_level == nearest)
- )
- {
- blip();
- }
- #endif
- set_level_and_therm_target(memorized_level);
- #ifdef USE_SUNSET_TIMER
- timer_orig_level = actual_level;
- #endif
- return MISCHIEF_MANAGED;
- }
- #ifdef START_AT_MEMORIZED_LEVEL
- // click, release, hold, release: save new ramp level (if necessary)
- else if (event == EV_click2_hold_release) {
- save_config_wl();
- return MISCHIEF_MANAGED;
- }
- #endif
else if (event == EV_tick) {
#ifdef USE_SUNSET_TIMER
@@ -276,10 +214,8 @@ uint8_t steady_state(Event event, uint16_t arg) {
#endif
}
#endif
- #ifdef USE_REVERSING
// un-reverse after 1 second
if (arg == TICKS_PER_SECOND) ramp_direction = 1;
- #endif
#ifdef USE_SET_LEVEL_GRADUALLY
int16_t diff = gradual_target - actual_level;
static uint16_t ticks_since_adjust = 0;