aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSelene ToyKeeper2020-09-24 21:42:25 -0600
committerSelene ToyKeeper2020-09-24 21:42:25 -0600
commitbbe87164f56c91769896cafe953397f87f434561 (patch)
tree568ecd5e0487ab3c3cac9bbdd11bc954f0748cb0
parentfixed bug: zero clicks in ceiling config set ceiling to nonsense value (diff)
downloadanduril-bbe87164f56c91769896cafe953397f87f434561.tar.gz
anduril-bbe87164f56c91769896cafe953397f87f434561.tar.bz2
anduril-bbe87164f56c91769896cafe953397f87f434561.zip
reduced ROM another 24 bytes by refactoring config-mode.c
(also fixed a corner case bug with calling savefunc() with a config step of 0 if the user has frame-perfect timing) (and a bug which could have affected later revisions, calling savefunc(0,N) when invoked via click instead of hold) Patch contributed by SammysHP: https://gist.github.com/SammysHP/78af437c6723112ddfdc6b6d6b5e3022
-rw-r--r--spaghetti-monster/anduril/config-mode.c20
1 files changed, 4 insertions, 16 deletions
diff --git a/spaghetti-monster/anduril/config-mode.c b/spaghetti-monster/anduril/config-mode.c
index f5bfbc2..f62924a 100644
--- a/spaghetti-monster/anduril/config-mode.c
+++ b/spaghetti-monster/anduril/config-mode.c
@@ -42,16 +42,14 @@ uint8_t config_state_base(Event event, uint16_t arg,
uint8_t num_config_steps,
void (*savefunc)(uint8_t step, uint8_t value)) {
static uint8_t config_step;
- static uint8_t config_state_done;
if (event == EV_enter_state) {
config_step = 0;
- config_state_done = 0;
set_level(0);
// if button isn't held, configure first menu item
if (! button_last_state) {
+ config_step ++;
push_state(number_entry_state, 0);
}
- return MISCHIEF_MANAGED;
}
// if initial "hold" event still active
@@ -79,16 +77,13 @@ uint8_t config_state_base(Event event, uint16_t arg,
// button release: activate number entry for one menu item
else if ((event & B_CLICK_FLAGS) == B_ANY_HOLD_RELEASE) {
- // let user know we noticed what they did
- set_level(0);
-
// ask the user for a number, if they selected a menu item
- if (config_step <= num_config_steps) {
+ if (config_step && config_step <= num_config_steps) {
push_state(number_entry_state, 0);
}
// exit after falling out of end of menu
else {
- config_state_done = 1;
+ pop_state();
}
}
@@ -98,13 +93,6 @@ uint8_t config_state_base(Event event, uint16_t arg,
savefunc(config_step, number_entry_value);
// make changes persist in eeprom
save_config();
- config_state_done = 1;
- return MISCHIEF_MANAGED;
- }
-
- // all finished
- else if (config_state_done) {
- config_state_done = 0; // ensure this only happens once
pop_state();
}
@@ -118,7 +106,7 @@ uint8_t number_entry_state(Event event, uint16_t arg) {
if (event == EV_enter_state) {
number_entry_value = 0;
entry_step = 0;
- return MISCHIEF_MANAGED;
+ set_level(0); // initial pause should be dark
}
// advance through the process: