diff options
| author | Selene ToyKeeper | 2020-07-12 18:59:55 -0600 |
|---|---|---|
| committer | Selene ToyKeeper | 2020-07-12 18:59:55 -0600 |
| commit | 01d646c2f82ee2126a2d1d3cbd182fb8c6471386 (patch) | |
| tree | c68b814d886218ad4ba6442072e59569d1ac1354 /spaghetti-monster | |
| parent | made lighted button go low/high based on DEFAULT_LEVEL instead of MAX_1x7135, (diff) | |
| download | anduril-01d646c2f82ee2126a2d1d3cbd182fb8c6471386.tar.gz anduril-01d646c2f82ee2126a2d1d3cbd182fb8c6471386.tar.bz2 anduril-01d646c2f82ee2126a2d1d3cbd182fb8c6471386.zip | |
removed muggle mode, replaced it with simple mode (first pass, incomplete)
Diffstat (limited to 'spaghetti-monster')
| -rw-r--r-- | spaghetti-monster/anduril/anduril.c | 388 |
1 files changed, 136 insertions, 252 deletions
diff --git a/spaghetti-monster/anduril/anduril.c b/spaghetti-monster/anduril/anduril.c index 085f4a3..48b32e8 100644 --- a/spaghetti-monster/anduril/anduril.c +++ b/spaghetti-monster/anduril/anduril.c @@ -82,8 +82,8 @@ // enable momentary mode #define USE_MOMENTARY_MODE -//Muggle mode for easy UI -#define USE_MUGGLE_MODE +// Include a simplified UI for non-enthusiasts? +#define USE_SIMPLE_UI // make the ramps configurable by the user #define USE_RAMP_CONFIG @@ -135,7 +135,11 @@ #define MAX_BIKING_LEVEL 120 // should be 127 or less #define USE_BATTCHECK -#if defined(USE_MUGGLE_MODE) +#if defined(USE_SIMPLE_UI) +// start in the simple UI after each factory reset? +#ifndef DEFAULT_SIMPLE_UI_ACTIVE +#define DEFAULT_SIMPLE_UI_ACTIVE 1 +#endif #ifndef MUGGLE_FLOOR #define MUGGLE_FLOOR 22 #endif @@ -143,6 +147,7 @@ #define MUGGLE_CEILING (MAX_1x7135+20) #endif #endif + #define USE_IDLE_MODE // reduce power use while awake and no tasks are pending // full FET strobe can be a bit much... use max regulated level instead, @@ -193,8 +198,8 @@ typedef enum { #ifdef USE_BEACON_MODE beacon_seconds_e, #endif - #ifdef USE_MUGGLE_MODE - muggle_mode_active_e, + #ifdef USE_SIMPLE_UI + simple_mode_active_e, #endif #ifdef USE_THERMAL_REGULATION therm_ceil_e, @@ -311,10 +316,8 @@ uint8_t momentary_state(Event event, uint16_t arg); uint8_t momentary_mode = 0; // 0 = ramping, 1 = strobe uint8_t momentary_active = 0; // boolean, true if active *right now* #endif -#ifdef USE_MUGGLE_MODE -// muggle mode, super-simple, hard to exit -uint8_t muggle_state(Event event, uint16_t arg); -uint8_t muggle_mode_active = 0; +#ifdef USE_SIMPLE_UI +uint8_t simple_mode_active = DEFAULT_SIMPLE_UI_ACTIVE; #endif // general helper function for config modes @@ -638,6 +641,47 @@ uint8_t off_state(Event event, uint16_t arg) { return MISCHIEF_MANAGED; } #endif + // 4 clicks: soft lockout + else if (event == EV_4clicks) { + blink_confirm(2); + set_state(lockout_state, 0); + return MISCHIEF_MANAGED; + } + #if defined(USE_FACTORY_RESET) && defined(USE_SOFT_FACTORY_RESET) + // 13 clicks and hold the last click: invoke factory reset (reboot) + else if (event == EV_click13_hold) { + reboot(); + return MISCHIEF_MANAGED; + } + #endif + #ifdef USE_VERSION_CHECK + // 15+ clicks: show the version number + else if (event == EV_15clicks) { + set_state(version_check_state, 0); + return MISCHIEF_MANAGED; + } + #endif + + #ifdef USE_SIMPLE_UI + // 8 clicks, but hold last click: turn simple UI off + else if ((event == EV_click8_hold) && (!arg)) { + blink_confirm(1); + simple_mode_active = 0; + return MISCHIEF_MANAGED; + } + + ////////// Every action below here is blocked in the simple UI ////////// + if (simple_mode_active) { + return EVENT_NOT_HANDLED; + } + // 8 clicks: enable simple UI + else if (event == EV_8clicks) { + blink_confirm(1); + simple_mode_active = 1; + return MISCHIEF_MANAGED; + } + #endif + // click, click, long-click: strobe mode #ifdef USE_STROBE_STATE else if (event == EV_click3_hold) { @@ -650,12 +694,6 @@ uint8_t off_state(Event event, uint16_t arg) { return MISCHIEF_MANAGED; } #endif - // 4 clicks: soft lockout - else if (event == EV_4clicks) { - blink_confirm(2); - set_state(lockout_state, 0); - return MISCHIEF_MANAGED; - } #ifdef USE_MOMENTARY_MODE // 5 clicks: momentary mode else if (event == EV_5clicks) { @@ -664,14 +702,6 @@ uint8_t off_state(Event event, uint16_t arg) { return MISCHIEF_MANAGED; } #endif - #ifdef USE_MUGGLE_MODE - // 6 clicks: muggle mode - else if (event == EV_6clicks) { - blink_confirm(1); - set_state(muggle_state, 0); - return MISCHIEF_MANAGED; - } - #endif #ifdef USE_INDICATOR_LED // 7 clicks: change indicator LED mode else if (event == EV_7clicks) { @@ -725,20 +755,6 @@ uint8_t off_state(Event event, uint16_t arg) { return MISCHIEF_MANAGED; } #endif - #ifdef USE_VERSION_CHECK - // 15+ clicks: show the version number - else if (event == EV_15clicks) { - set_state(version_check_state, 0); - return MISCHIEF_MANAGED; - } - #endif - #if defined(USE_FACTORY_RESET) && defined(USE_SOFT_FACTORY_RESET) - // 13 clicks and hold the last click: invoke factory reset (reboot) - else if (event == EV_click13_hold) { - reboot(); - return MISCHIEF_MANAGED; - } - #endif return EVENT_NOT_HANDLED; } @@ -760,6 +776,7 @@ uint8_t steady_state(Event event, uint16_t arg) { mode_max = ramp_discrete_ceil; ramp_step_size = ramp_discrete_step_size; } + // TODO: if (simple_mode_active) { mode_min / max = simple floor/ceil } // turn LED on when we first enter the mode if ((event == EV_enter_state) || (event == EV_reenter_state)) { @@ -801,34 +818,22 @@ uint8_t steady_state(Event event, uint16_t arg) { } // 2 clicks: go to/from highest level else if (event == EV_2clicks) { - if (actual_level < MAX_LEVEL) { + uint8_t turbo_level; + #ifdef USE_SIMPLE_UI + if (simple_mode_active) { turbo_level = mode_max; } + else + #endif + turbo_level = MAX_LEVEL; + + if (actual_level < turbo_level) { // true turbo, not the mode-specific ceiling - set_level_and_therm_target(MAX_LEVEL); + set_level_and_therm_target(turbo_level); } else { set_level_and_therm_target(memorized_level); } return MISCHIEF_MANAGED; } - // 3 clicks: toggle smooth vs discrete ramping - else if (event == EV_3clicks) { - ramp_style = !ramp_style; - save_config(); - #ifdef START_AT_MEMORIZED_LEVEL - save_config_wl(); - #endif - blip(); - memorized_level = nearest_level(actual_level); - set_level_and_therm_target(memorized_level); - return MISCHIEF_MANAGED; - } - #ifdef USE_RAMP_CONFIG - // 4 clicks: configure this ramp mode - else if (event == EV_4clicks) { - push_state(ramp_config_state, 0); - return MISCHIEF_MANAGED; - } - #endif // hold: change brightness (brighter) else if (event == EV_click1_hold) { // ramp slower in discrete mode @@ -959,20 +964,7 @@ uint8_t steady_state(Event event, uint16_t arg) { return MISCHIEF_MANAGED; } #endif - #ifdef USE_MANUAL_MEMORY - else if (event == EV_5clicks) { - manual_memory = actual_level; - save_config(); - blip(); - } - else if (event == EV_click5_hold) { - if (0 == arg) { - manual_memory = 0; - save_config(); - blip(); - } - } - #endif + #if defined(USE_SET_LEVEL_GRADUALLY) || defined(USE_REVERSING) else if (event == EV_tick) { #ifdef USE_REVERSING @@ -1073,6 +1065,48 @@ uint8_t steady_state(Event event, uint16_t arg) { } #endif // ifdef USE_SET_LEVEL_GRADUALLY #endif // ifdef USE_THERMAL_REGULATION + + ////////// Every action below here is blocked in the simple UI ////////// + #ifdef USE_SIMPLE_UI + if (simple_mode_active) { + return EVENT_NOT_HANDLED; + } + #endif + + // 3 clicks: toggle smooth vs discrete ramping + else if (event == EV_3clicks) { + ramp_style = !ramp_style; + save_config(); + #ifdef START_AT_MEMORIZED_LEVEL + save_config_wl(); + #endif + blip(); + memorized_level = nearest_level(actual_level); + set_level_and_therm_target(memorized_level); + return MISCHIEF_MANAGED; + } + #ifdef USE_RAMP_CONFIG + // 4 clicks: configure this ramp mode + else if (event == EV_4clicks) { + push_state(ramp_config_state, 0); + return MISCHIEF_MANAGED; + } + #endif + + #ifdef USE_MANUAL_MEMORY + else if (event == EV_5clicks) { + manual_memory = actual_level; + save_config(); + blip(); + } + else if (event == EV_click5_hold) { + if (0 == arg) { + manual_memory = 0; + save_config(); + blip(); + } + } + #endif return EVENT_NOT_HANDLED; } @@ -1591,6 +1625,13 @@ inline void sos_mode_iter() { #ifdef USE_BATTCHECK uint8_t battcheck_state(Event event, uint16_t arg) { + ////////// Every action below here is blocked in the simple UI ////////// + #ifdef USE_SIMPLE_UI + if (simple_mode_active) { + return EVENT_NOT_HANDLED; + } + #endif + // 1 click: off if (event == EV_1click) { set_state(off_state, 0); @@ -1791,6 +1832,20 @@ uint8_t lockout_state(Event event, uint16_t arg) { return MISCHIEF_MANAGED; } #endif + // 4 clicks: exit + else if (event == EV_4clicks) { + blink_confirm(1); + set_state(off_state, 0); + return MISCHIEF_MANAGED; + } + + ////////// Every action below here is blocked in the simple UI ////////// + #ifdef USE_SIMPLE_UI + if (simple_mode_active) { + return EVENT_NOT_HANDLED; + } + #endif + #if defined(USE_INDICATOR_LED) // 3 clicks: rotate through indicator LED modes (lockout mode) else if (event == EV_3clicks) { @@ -1841,12 +1896,6 @@ uint8_t lockout_state(Event event, uint16_t arg) { return MISCHIEF_MANAGED; } #endif - // 4 clicks: exit - else if (event == EV_4clicks) { - blink_confirm(1); - set_state(off_state, 0); - return MISCHIEF_MANAGED; - } return EVENT_NOT_HANDLED; } @@ -1916,165 +1965,6 @@ uint8_t momentary_state(Event event, uint16_t arg) { #endif -#ifdef USE_MUGGLE_MODE -uint8_t muggle_state(Event event, uint16_t arg) { - static int8_t ramp_direction; - static int8_t muggle_off_mode; - - // turn LED off when we first enter the mode - if (event == EV_enter_state) { - ramp_direction = 1; - - #ifdef START_AT_MEMORIZED_LEVEL - memorized_level = arg; - muggle_off_mode = 0; - set_level(memorized_level); - - if (! muggle_mode_active) { // don't write eeprom at every boot - muggle_mode_active = 1; - save_config(); - } - #else - muggle_mode_active = 1; - save_config(); - - muggle_off_mode = 1; - //memorized_level = MAX_1x7135; - memorized_level = (MUGGLE_FLOOR + MUGGLE_CEILING) / 2; - #endif - return MISCHIEF_MANAGED; - } - // initial press: moon hint - else if (event == EV_click1_press) { - if (muggle_off_mode) - set_level(MUGGLE_FLOOR); - } - // initial release: direct to memorized level - else if (event == EV_click1_release) { - if (muggle_off_mode) - set_level(memorized_level); - } - // if the user keeps pressing, turn off - else if (event == EV_click2_press) { - muggle_off_mode = 1; - set_level(0); - } - // 1 click: on/off - else if (event == EV_1click) { - muggle_off_mode ^= 1; - if (muggle_off_mode) { - set_level(0); - } - /* - else { - set_level(memorized_level); - } - */ - return MISCHIEF_MANAGED; - } - // hold: change brightness - else if (event == EV_click1_hold) { - // ramp at half speed - if (arg & 1) return MISCHIEF_MANAGED; - - // if off, start at bottom - if (muggle_off_mode) { - muggle_off_mode = 0; - ramp_direction = 1; - set_level(MUGGLE_FLOOR); - } - else { - uint8_t m; - m = actual_level; - // ramp down if already at ceiling - if ((arg <= 1) && (m >= MUGGLE_CEILING)) ramp_direction = -1; - // ramp - m += ramp_direction; - if (m < MUGGLE_FLOOR) - m = MUGGLE_FLOOR; - if (m > MUGGLE_CEILING) - m = MUGGLE_CEILING; - memorized_level = m; - set_level(m); - } - return MISCHIEF_MANAGED; - } - // reverse ramp direction on hold release - else if (event == EV_click1_hold_release) { - ramp_direction = -ramp_direction; - #ifdef START_AT_MEMORIZED_LEVEL - save_config_wl(); // momentary use should retain brightness level - #endif - return MISCHIEF_MANAGED; - } - /* - // click, hold: change brightness (dimmer) - else if (event == EV_click2_hold) { - ramp_direction = 1; - if (memorized_level > MUGGLE_FLOOR) - memorized_level = actual_level - 1; - set_level(memorized_level); - return MISCHIEF_MANAGED; - } - */ - // 6 clicks: exit muggle mode - else if (event == EV_6clicks) { - blink_confirm(1); - muggle_mode_active = 0; - save_config(); - set_state(off_state, 0); - return MISCHIEF_MANAGED; - } - // tick: housekeeping - else if (event == EV_tick) { - // un-reverse after 1 second - if (arg == TICKS_PER_SECOND) ramp_direction = 1; - - // turn off, but don't go to the main "off" state - if (muggle_off_mode) { - if (arg > TICKS_PER_SECOND*1) { // sleep after 1 second - #ifdef USE_AUX_RGB_LEDS_WHILE_ON - rgb_led_set(0); - #endif - go_to_standby = 1; // sleep while light is off - } - } - return MISCHIEF_MANAGED; - } - #ifdef USE_THERMAL_REGULATION - // overheating is handled specially in muggle mode - else if(event == EV_temperature_high) { - #if 0 - blip(); - #endif - // ignore warnings while off - if (! muggle_off_mode) { - // step down proportional to the amount of overheating - int16_t new = actual_level - arg; - if (new < MUGGLE_FLOOR) { new = MUGGLE_FLOOR; } - set_level(new); - } - return MISCHIEF_MANAGED; - } - #endif - #ifdef USE_LVP - // low voltage is handled specially in muggle mode - else if(event == EV_voltage_low) { - uint8_t lvl = (actual_level >> 1) + (actual_level >> 2); - if (lvl >= MUGGLE_FLOOR) { - set_level(lvl); - } else { - muggle_off_mode = 1; - } - return MISCHIEF_MANAGED; - } - #endif - - return EVENT_NOT_HANDLED; -} -#endif - - #ifdef USE_VERSION_CHECK uint8_t version_check_state(Event event, uint16_t arg) { return EVENT_NOT_HANDLED; @@ -2569,8 +2459,8 @@ void load_config() { #ifdef USE_BEACON_MODE beacon_seconds = eeprom[beacon_seconds_e]; #endif - #ifdef USE_MUGGLE_MODE - muggle_mode_active = eeprom[muggle_mode_active_e]; + #ifdef USE_SIMPLE_UI + simple_mode_active = eeprom[simple_mode_active_e]; #endif #ifdef USE_THERMAL_REGULATION therm_ceil = eeprom[therm_ceil_e]; @@ -2617,8 +2507,8 @@ void save_config() { #ifdef USE_BEACON_MODE eeprom[beacon_seconds_e] = beacon_seconds; #endif - #ifdef USE_MUGGLE_MODE - eeprom[muggle_mode_active_e] = muggle_mode_active; + #ifdef USE_SIMPLE_UI + eeprom[simple_mode_active_e] = simple_mode_active; #endif #ifdef USE_THERMAL_REGULATION eeprom[therm_ceil_e] = therm_ceil; @@ -2681,11 +2571,6 @@ void setup() { // power clicky acts as a momentary mode load_config(); - #ifdef USE_MUGGLE_MODE - if (muggle_mode_active) - push_state(muggle_state, memorized_level); - else - #endif if (button_is_pressed()) // hold button to go to moon push_state(steady_state, 1); @@ -2712,12 +2597,7 @@ void setup() { push_state(tint_ramping_state, 0); #endif // ifdef USE_TINT_RAMPING - #ifdef USE_MUGGLE_MODE - if (muggle_mode_active) - push_state(muggle_state, (MUGGLE_FLOOR+MUGGLE_CEILING)/2); - else - #endif - push_state(off_state, 1); + push_state(off_state, 1); #endif // ifdef START_AT_MEMORIZED_LEVEL } @@ -2807,6 +2687,10 @@ void loop() { #ifdef USE_BATTCHECK else if (state == battcheck_state) { battcheck(); + #ifdef USE_SIMPLE_UI + // in simple mode, turn off after one readout + if (simple_mode_active) set_state(off_state, 0); + #endif } #endif |
