478
478
if ((indicator_led_mode & 0b00000011) == 0b00000011) {
479
479
indicator_blink(arg);
481
return MISCHIEF_MANAGED;
481
return EVENT_HANDLED;
484
484
// hold (initially): go to lowest level (floor), but allow abort for regular click
485
485
else if (event == EV_click1_press) {
486
486
set_level(nearest_level(1));
487
return MISCHIEF_MANAGED;
487
return EVENT_HANDLED;
489
489
// hold: go to lowest level
490
490
else if (event == EV_click1_hold) {
500
500
if (arg >= (!ramp_style) * HOLD_TIMEOUT) { // more consistent
501
501
set_state(steady_state, 1);
503
return MISCHIEF_MANAGED;
503
return EVENT_HANDLED;
505
505
// hold, release quickly: go to lowest level (floor)
506
506
else if (event == EV_click1_hold_release) {
507
507
set_state(steady_state, 1);
508
return MISCHIEF_MANAGED;
508
return EVENT_HANDLED;
510
510
// 1 click (before timeout): go to memorized level, but allow abort for double click
511
511
else if (event == EV_click1_release) {
512
512
set_level(nearest_level(memorized_level));
513
return MISCHIEF_MANAGED;
513
return EVENT_HANDLED;
515
515
// 1 click: regular mode
516
516
else if (event == EV_1click) {
517
517
set_state(steady_state, memorized_level);
518
return MISCHIEF_MANAGED;
518
return EVENT_HANDLED;
520
520
// click, hold: go to highest level (ceiling) (for ramping down)
521
521
else if (event == EV_click2_hold) {
522
522
set_state(steady_state, MAX_LEVEL);
523
return MISCHIEF_MANAGED;
523
return EVENT_HANDLED;
525
525
// 2 clicks: highest mode (ceiling)
526
526
else if (event == EV_2clicks) {
527
527
set_state(steady_state, MAX_LEVEL);
528
return MISCHIEF_MANAGED;
528
return EVENT_HANDLED;
530
530
// 3 clicks (initial press): off, to prep for later events
531
531
else if (event == EV_click3_press) {
533
return MISCHIEF_MANAGED;
533
return EVENT_HANDLED;
535
535
#ifdef USE_BATTCHECK
536
536
// 3 clicks: battcheck mode / blinky mode group 1
537
537
else if (event == EV_3clicks) {
538
538
set_state(battcheck_state, 0);
539
return MISCHIEF_MANAGED;
539
return EVENT_HANDLED;
542
542
// click, click, long-click: strobe mode
543
543
#ifdef USE_STROBE_STATE
544
544
else if (event == EV_click3_hold) {
545
545
set_state(strobe_state, 0);
546
return MISCHIEF_MANAGED;
546
return EVENT_HANDLED;
548
548
#elif defined(USE_BORING_STROBE_STATE)
549
549
else if (event == EV_click3_hold) {
550
550
set_state(boring_strobe_state, 0);
551
return MISCHIEF_MANAGED;
551
return EVENT_HANDLED;
554
554
// 4 clicks: soft lockout
555
555
else if (event == EV_4clicks) {
556
556
blink_confirm(2);
557
557
set_state(lockout_state, 0);
558
return MISCHIEF_MANAGED;
558
return EVENT_HANDLED;
560
560
// 5 clicks: momentary mode
561
561
else if (event == EV_5clicks) {
562
562
blink_confirm(1);
563
563
set_state(momentary_state, 0);
564
return MISCHIEF_MANAGED;
564
return EVENT_HANDLED;
566
566
#ifdef USE_MUGGLE_MODE
567
567
// 6 clicks: muggle mode
568
568
else if (event == EV_6clicks) {
569
569
blink_confirm(1);
570
570
set_state(muggle_state, 0);
571
return MISCHIEF_MANAGED;
571
return EVENT_HANDLED;
574
574
#ifdef USE_INDICATOR_LED
586
586
indicator_led_mode = (indicator_led_mode & 0b11111100) | mode;
587
587
indicator_led(mode);
589
return MISCHIEF_MANAGED;
589
return EVENT_HANDLED;
592
592
// 8 clicks: temperature check
593
593
else if (event == EV_8clicks) {
594
594
set_state(tempcheck_state, 0);
595
return MISCHIEF_MANAGED;
595
return EVENT_HANDLED;
597
597
#ifdef USE_TENCLICK_THERMAL_CONFIG
598
598
// 10 clicks: thermal config mode
599
599
else if (event == EV_10clicks) {
600
600
push_state(thermal_config_state, 0);
601
return MISCHIEF_MANAGED;
601
return EVENT_HANDLED;
604
604
return EVENT_NOT_HANDLED;
679
679
set_level(memorized_level);
680
return MISCHIEF_MANAGED;
680
return EVENT_HANDLED;
682
682
#ifdef USE_RAMP_CONFIG
683
683
// 4 clicks: configure this ramp mode
684
684
else if (event == EV_4clicks) {
685
685
push_state(ramp_config_state, 0);
686
return MISCHIEF_MANAGED;
686
return EVENT_HANDLED;
689
689
// hold: change brightness (brighter)
690
690
else if (event == EV_click1_hold) {
691
691
// ramp slower in discrete mode
692
692
if (ramp_style && (arg % HOLD_TIMEOUT != 0)) {
693
return MISCHIEF_MANAGED;
693
return EVENT_HANDLED;
695
695
#ifdef USE_REVERSING
696
696
// fix ramp direction on first frame if necessary
806
806
set_level(memorized_level);
807
return MISCHIEF_MANAGED;
807
return EVENT_HANDLED;
809
809
#ifdef START_AT_MEMORIZED_LEVEL
810
810
// click, release, hold, release: save new ramp level (if necessary)
811
811
else if (event == EV_click2_hold_release) {
812
812
save_config_wl();
813
return MISCHIEF_MANAGED;
813
return EVENT_HANDLED;
816
816
#if defined(USE_SET_LEVEL_GRADUALLY) || defined(USE_REVERSING)
822
822
#ifdef USE_SET_LEVEL_GRADUALLY
823
823
// make thermal adjustment speed scale with magnitude
824
824
if ((arg & 1) && (actual_level < THERM_FASTER_LEVEL)) {
825
return MISCHIEF_MANAGED; // adjust slower when not a high mode
825
return EVENT_HANDLED; // adjust slower when not a high mode
827
827
#ifdef THERM_HARD_TURBO_DROP
828
828
else if ((! (actual_level < THERM_FASTER_LEVEL))
1004
1004
// init anything which needs to be initialized
1005
1005
else if (event == EV_enter_state) {
1006
1006
ramp_direction = 1;
1007
return MISCHIEF_MANAGED;
1007
return EVENT_HANDLED;
1009
1009
// 1 click: off
1010
1010
else if (event == EV_1click) {
1011
1011
set_state(off_state, 0);
1012
return MISCHIEF_MANAGED;
1012
return EVENT_HANDLED;
1014
1014
// 2 clicks: rotate through strobe/flasher modes
1015
1015
else if (event == EV_2clicks) {
1016
1016
strobe_type = (st + 1) % NUM_STROBES;
1018
return MISCHIEF_MANAGED;
1018
return EVENT_HANDLED;
1020
1020
// hold: change speed (go faster)
1021
1021
// or change brightness (brighter)
1055
return MISCHIEF_MANAGED;
1055
return EVENT_HANDLED;
1057
1057
// reverse ramp direction on hold release
1058
1058
// ... and save new strobe settings
1059
1059
else if (event == EV_click1_hold_release) {
1060
1060
ramp_direction = -ramp_direction;
1062
return MISCHIEF_MANAGED;
1062
return EVENT_HANDLED;
1064
1064
// click, hold: change speed (go slower)
1065
1065
// or change brightness (dimmer)
1223
1223
if (event == EV_enter_state) {
1224
1224
candle_mode_timer = 0; // in case any time was left over from earlier
1225
1225
ramp_direction = 1;
1226
return MISCHIEF_MANAGED;
1226
return EVENT_HANDLED;
1228
1228
// 2 clicks: cancel timer
1229
1229
else if (event == EV_2clicks) {
1230
1230
// parent state just rotated through strobe/flasher modes,
1231
1231
// so cancel timer... in case any time was left over from earlier
1232
1232
candle_mode_timer = 0;
1233
return MISCHIEF_MANAGED;
1233
return EVENT_HANDLED;
1235
1235
// hold: change brightness (brighter)
1236
1236
else if (event == EV_click1_hold) {
1243
1243
candle_mode_brightness += ramp_direction;
1244
1244
if (candle_mode_brightness < 1) candle_mode_brightness = 1;
1245
1245
else if (candle_mode_brightness > MAX_CANDLE_LEVEL) candle_mode_brightness = MAX_CANDLE_LEVEL;
1246
return MISCHIEF_MANAGED;
1246
return EVENT_HANDLED;
1248
1248
// reverse ramp direction on hold release
1249
1249
else if (event == EV_click1_hold_release) {
1250
1250
ramp_direction = -ramp_direction;
1251
return MISCHIEF_MANAGED;
1251
return EVENT_HANDLED;
1253
1253
// click, hold: change brightness (dimmer)
1254
1254
else if (event == EV_click2_hold) {
1255
1255
ramp_direction = 1;
1256
1256
if (candle_mode_brightness > 1)
1257
1257
candle_mode_brightness --;
1258
return MISCHIEF_MANAGED;
1258
return EVENT_HANDLED;
1260
1260
// 3 clicks: add 30m to candle timer
1261
1261
else if (event == EV_3clicks) {
1345
1345
momentary_mode = 1; // 0 = ramping, 1 = strobes
1347
1347
if (event == EV_enter_state) {
1348
return MISCHIEF_MANAGED;
1348
return EVENT_HANDLED;
1350
1350
// 1 click: off
1351
1351
else if (event == EV_1click) {
1352
1352
// reset to police strobe for next time
1353
1353
boring_strobe_type = 0;
1354
1354
set_state(off_state, 0);
1355
return MISCHIEF_MANAGED;
1355
return EVENT_HANDLED;
1357
1357
// 2 clicks: rotate through strobe/flasher modes
1358
1358
else if (event == EV_2clicks) {
1359
1359
boring_strobe_type = (st + 1) % NUM_BORING_STROBES;
1360
return MISCHIEF_MANAGED;
1360
return EVENT_HANDLED;
1362
1362
return EVENT_NOT_HANDLED;
1434
1434
// 1 click: off
1435
1435
if (event == EV_1click) {
1436
1436
set_state(off_state, 0);
1437
return MISCHIEF_MANAGED;
1437
return EVENT_HANDLED;
1439
1439
#if 0 // not part of a loop in this UI
1440
1440
// 2 clicks: battcheck mode
1441
1441
else if (event == EV_2clicks) {
1442
1442
set_state(battcheck_state, 0);
1443
return MISCHIEF_MANAGED;
1443
return EVENT_HANDLED;
1446
1446
// 4 clicks: thermal config mode
1447
1447
else if (event == EV_4clicks) {
1448
1448
push_state(thermal_config_state, 0);
1449
return MISCHIEF_MANAGED;
1449
return EVENT_HANDLED;
1451
1451
return EVENT_NOT_HANDLED;
1470
1470
set_state(battcheck_state, 0);
1472
return MISCHIEF_MANAGED;
1472
return EVENT_HANDLED;
1474
1474
// 4 clicks: beacon config mode
1475
1475
else if (event == EV_4clicks) {
1476
1476
push_state(beacon_config_state, 0);
1477
return MISCHIEF_MANAGED;
1477
return EVENT_HANDLED;
1479
1479
return EVENT_NOT_HANDLED;
1660
1660
if (momentary_mode == 0) {
1661
1661
set_level(memorized_level);
1663
return MISCHIEF_MANAGED;
1663
return EVENT_HANDLED;
1665
1665
// button was released
1666
1666
else if ((event & (B_CLICK | B_PRESS)) == (B_CLICK)) {
1667
1667
momentary_active = 0;
1669
1669
//go_to_standby = 1; // sleep while light is off
1670
return MISCHIEF_MANAGED;
1670
return EVENT_HANDLED;
1673
1673
// Sleep, dammit! (but wait a few seconds first)
1749
1749
set_level(memorized_level);
1752
return MISCHIEF_MANAGED;
1752
return EVENT_HANDLED;
1754
1754
// hold: change brightness
1755
1755
else if (event == EV_click1_hold) {
1756
1756
// ramp at half speed
1757
if (arg & 1) return MISCHIEF_MANAGED;
1757
if (arg & 1) return EVENT_HANDLED;
1759
1759
// if off, start at bottom
1760
1760
if (muggle_off_mode) {
1868
1868
//set_state(retstate, retval);
1871
return MISCHIEF_MANAGED;
1871
return EVENT_HANDLED;
1873
1873
// an option was set (return from number_entry_state)
1874
1874
else if (event == EV_reenter_state) {
1875
1875
config_state_values[config_step] = number_entry_value;
1876
1876
config_step ++;
1877
return MISCHIEF_MANAGED;
1877
return EVENT_HANDLED;
1879
1879
//return EVENT_NOT_HANDLED;
1880
1880
// eat all other events; don't pass any through to parent
2107
2107
#if defined(USE_INDICATOR_LED) && defined(TICK_DURING_STANDBY)
2108
2108
// beacon-like mode for the indicator LED
2109
2109
void indicator_blink(uint8_t arg) {
2110
#define USE_FANCIER_BLINKING_INDICATOR
2110
2111
#ifdef USE_FANCIER_BLINKING_INDICATOR
2112
2113
// fancy blink, set off/low/high levels here: