265
265
if ((indicator_led_mode & 0b00000011) == 0b00000011) {
266
266
indicator_blink(arg);
268
return MISCHIEF_MANAGED;
268
return EVENT_HANDLED;
271
271
// hold (initially): go to lowest level (floor), but allow abort for regular click
272
272
else if (event == EV_click1_press) {
273
273
set_level(nearest_level(1));
274
return MISCHIEF_MANAGED;
274
return EVENT_HANDLED;
276
276
// hold: go to lowest level
277
277
else if (event == EV_click1_hold) {
290
290
if (arg >= (!ramp_style) * HOLD_TIMEOUT) { // more consistent
291
291
set_state(steady_state, 1);
293
return MISCHIEF_MANAGED;
293
return EVENT_HANDLED;
295
295
// hold, release quickly: go to lowest level (floor)
296
296
else if (event == EV_click1_hold_release) {
297
297
set_state(steady_state, 1);
298
return MISCHIEF_MANAGED;
298
return EVENT_HANDLED;
300
300
// 1 click (before timeout): go to memorized level, but allow abort for double click
301
301
else if (event == EV_click1_release) {
302
302
set_level(nearest_level(memorized_level));
303
return MISCHIEF_MANAGED;
303
return EVENT_HANDLED;
305
305
// 1 click: regular mode
306
306
else if (event == EV_1click) {
307
307
set_state(steady_state, memorized_level);
308
return MISCHIEF_MANAGED;
308
return EVENT_HANDLED;
310
310
// click, hold: go to highest level (ceiling) (for ramping down)
311
311
else if (event == EV_click2_hold) {
312
312
set_state(steady_state, MAX_LEVEL);
313
return MISCHIEF_MANAGED;
313
return EVENT_HANDLED;
315
315
// 2 clicks: highest mode (ceiling)
316
316
else if (event == EV_2clicks) {
317
317
set_state(steady_state, MAX_LEVEL);
318
return MISCHIEF_MANAGED;
318
return EVENT_HANDLED;
320
320
// 3 clicks (initial press): off, to prep for later events
321
321
else if (event == EV_click3_press) {
323
return MISCHIEF_MANAGED;
323
return EVENT_HANDLED;
325
325
#ifdef USE_BATTCHECK
326
326
// 3 clicks: battcheck mode / blinky mode group 1
327
327
else if (event == EV_3clicks) {
328
328
set_state(battcheck_state, 0);
329
return MISCHIEF_MANAGED;
329
return EVENT_HANDLED;
332
332
// 4 clicks: momentary
333
333
else if (event == EV_4clicks) {
334
334
blink_confirm(1);
335
335
set_state(momentary_state, 0);
336
return MISCHIEF_MANAGED;
336
return EVENT_HANDLED;
338
338
// 6 clicks: lockout mode
339
339
else if (event == EV_6clicks) {
340
340
blink_confirm(2);
341
341
set_state(lockout_state, 0);
342
return MISCHIEF_MANAGED;
342
return EVENT_HANDLED;
344
344
#ifdef USE_INDICATOR_LED
345
345
// 7 clicks: next aux LED mode
357
357
indicator_led_mode = (indicator_led_mode & 0b11111100) | mode;
358
358
indicator_led(mode);
360
return MISCHIEF_MANAGED;
360
return EVENT_HANDLED;
363
363
// 8 clicks: beacon mode
364
364
else if (event == EV_8clicks) {
365
365
set_state(beacon_state, 0);
366
return MISCHIEF_MANAGED;
366
return EVENT_HANDLED;
368
368
#ifdef USE_TENCLICK_THERMAL_CONFIG
369
369
// 10 clicks: thermal config mode
370
370
else if (event == EV_10clicks) {
371
371
push_state(thermal_config_state, 0);
372
return MISCHIEF_MANAGED;
372
return EVENT_HANDLED;
375
375
return EVENT_NOT_HANDLED;
447
447
set_level(memorized_level);
448
return MISCHIEF_MANAGED;
448
return EVENT_HANDLED;
450
450
#ifdef USE_RAMP_CONFIG
451
451
// 4 clicks: configure this ramp mode
452
452
else if (event == EV_4clicks) {
453
453
push_state(ramp_config_state, 0);
454
return MISCHIEF_MANAGED;
454
return EVENT_HANDLED;
457
457
// hold: change brightness (brighter)
458
458
else if (event == EV_click1_hold) {
459
459
// ramp slower in discrete mode
460
460
if (ramp_style && (arg % HOLD_TIMEOUT != 0)) {
461
return MISCHIEF_MANAGED;
461
return EVENT_HANDLED;
463
463
#ifdef USE_REVERSING
464
464
// make it ramp down instead, if already at max
529
529
// ramp slower in discrete mode
530
530
if (ramp_style && (arg % HOLD_TIMEOUT != 0)) {
531
return MISCHIEF_MANAGED;
531
return EVENT_HANDLED;
533
533
// TODO? make it ramp up instead, if already at min?
534
534
memorized_level = nearest_level((int16_t)actual_level - ramp_step_size);
580
580
#ifdef USE_SET_LEVEL_GRADUALLY
581
581
// make thermal adjustment speed scale with magnitude
582
582
if ((arg & 1) && (actual_level < THERM_FASTER_LEVEL)) {
583
return MISCHIEF_MANAGED; // adjust slower when not a high mode
583
return EVENT_HANDLED; // adjust slower when not a high mode
585
585
#ifdef THERM_HARD_TURBO_DROP
586
586
else if ((! (actual_level < THERM_FASTER_LEVEL))
689
689
if (event == EV_1click) {
690
690
set_state(off_state, 0);
691
return MISCHIEF_MANAGED;
691
return EVENT_HANDLED;
693
693
// 2 clicks: tempcheck mode
694
694
else if (event == EV_2clicks) {
695
695
set_state(tempcheck_state, 0);
696
return MISCHIEF_MANAGED;
696
return EVENT_HANDLED;
698
698
return EVENT_NOT_HANDLED;
706
706
if (event == EV_1click) {
707
707
set_state(off_state, 0);
708
return MISCHIEF_MANAGED;
708
return EVENT_HANDLED;
710
710
// 4 clicks: thermal config mode
711
711
else if (event == EV_4clicks) {
712
712
push_state(thermal_config_state, 0);
713
return MISCHIEF_MANAGED;
713
return EVENT_HANDLED;
715
715
return EVENT_NOT_HANDLED;
723
723
if (event == EV_1click) {
724
724
set_state(off_state, 0);
725
return MISCHIEF_MANAGED;
725
return EVENT_HANDLED;
727
727
// TODO: use sleep ticks to measure time between pulses,
729
729
// 4 clicks: beacon config mode
730
730
else if (event == EV_4clicks) {
731
731
push_state(beacon_config_state, 0);
732
return MISCHIEF_MANAGED;
732
return EVENT_HANDLED;
734
734
return EVENT_NOT_HANDLED;
827
827
// button is being held
828
828
if ((event & (B_CLICK | B_PRESS)) == (B_CLICK | B_PRESS)) {
829
829
set_level(memorized_level);
830
return MISCHIEF_MANAGED;
830
return EVENT_HANDLED;
832
832
// button was released
833
833
else if ((event & (B_CLICK | B_PRESS)) == (B_CLICK)) {
835
835
//go_to_standby = 1; // sleep while light is off
836
return MISCHIEF_MANAGED;
836
return EVENT_HANDLED;
839
839
// Sleep, dammit! (but wait a few seconds first)
875
875
//set_state(retstate, retval);
878
return MISCHIEF_MANAGED;
878
return EVENT_HANDLED;
880
880
// an option was set (return from number_entry_state)
881
881
else if (event == EV_reenter_state) {
882
882
config_state_values[config_step] = number_entry_value;
884
return MISCHIEF_MANAGED;
884
return EVENT_HANDLED;
886
886
//return EVENT_NOT_HANDLED;
887
887
// eat all other events; don't pass any through to parent
1106
1106
#if defined(USE_INDICATOR_LED) && defined(TICK_DURING_STANDBY)
1107
1107
// beacon-like mode for the indicator LED
1108
1108
void indicator_blink(uint8_t arg) {
1109
#define USE_FANCIER_BLINKING_INDICATOR
1109
1110
#ifdef USE_FANCIER_BLINKING_INDICATOR
1111
1112
// fancy blink, set off/low/high levels here: