]> git.earman.xyz Git - sensor-watch.git/commitdiff
Merge PR #293 - add instant LED duration
authorMatheus Afonso Martins Moreira <matheus@matheusmoreira.com>
Tue, 3 Sep 2024 22:02:21 +0000 (19:02 -0300)
committerMatheus Afonso Martins Moreira <matheus@matheusmoreira.com>
Tue, 3 Sep 2024 22:06:40 +0000 (19:06 -0300)
Adds an instant LED duration preference that only keeps the LED lit
while the LIGHT button remains held down.

Matches the behavior of the original watch.

Reviewed-by: Matheus Afonso Martins Moreira <matheus@matheusmoreira.com>
Tested-on-hardware-by: Wesley Aptekar-Cassels <me@wesleyac.com>
Tested-on-hardware-by: 814d3 (GitHub)
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/293

1  2 
movement/movement.c
movement/movement.h
movement/watch_faces/settings/preferences_face.c

index 0f7be193381d0d5b93e76d4b5cc334a306664734,577f1995f391ef30d641f77ed53721385f925203..39eebaa7d95e9505b3bd72464c7ac9bde2554fb5
@@@ -296,8 -241,13 +306,13 @@@ bool movement_default_loop_handler(move
          case EVENT_LIGHT_BUTTON_DOWN:
              movement_illuminate_led();
              break;
+         case EVENT_LIGHT_BUTTON_UP:
+             if (movement_state.settings.bit.led_duration == 0) {
+                 _movement_led_off();
+             }
+             break;
          case EVENT_MODE_LONG_PRESS:
 -            if (MOVEMENT_SECONDARY_FACE_INDEX && movement_state.current_watch_face == 0) {
 +            if (MOVEMENT_SECONDARY_FACE_INDEX && movement_state.current_face_idx == 0) {
                  movement_move_to_face(MOVEMENT_SECONDARY_FACE_INDEX);
              } else {
                  movement_move_to_face(0);
@@@ -689,52 -611,10 +702,52 @@@ static movement_event_type_t _figure_ou
      }
  }
  
 -void cb_light_btn_interrupt(void) {
 -    bool pin_level = watch_get_pin_level(BTN_LIGHT);
 +static movement_event_type_t btn_action(bool pin_level, int code, uint16_t *timestamp) {
-     _movement_reset_inactivity_countdown(); 
+     _movement_reset_inactivity_countdown();
 -    event.event_type = _figure_out_button_event(pin_level, EVENT_LIGHT_BUTTON_DOWN, &movement_state.light_down_timestamp);
 +    return _figure_out_button_event(pin_level, code, timestamp);
 +}
 +
 +static void light_btn_action(bool pin_level) {
 +    event.event_type = btn_action(pin_level, EVENT_LIGHT_BUTTON_DOWN, &movement_state.light_down_timestamp);
 +}
 +
 +static void mode_btn_action(bool pin_level) {
 +    event.event_type = btn_action(pin_level, EVENT_MODE_BUTTON_DOWN, &movement_state.mode_down_timestamp);
 +}
 +
 +static void alarm_btn_action(bool pin_level) {
 +    uint8_t event_type = btn_action(pin_level, EVENT_ALARM_BUTTON_DOWN, &movement_state.alarm_down_timestamp);
 +    if  (movement_state.ignore_alarm_btn_after_sleep){
 +        if (event_type == EVENT_ALARM_BUTTON_UP || event_type == EVENT_ALARM_LONG_UP) movement_state.ignore_alarm_btn_after_sleep = false;
 +        return;
 +    }
 +    event.event_type = event_type;
 +}
 +
 +static void debounce_btn_press(uint8_t pin, uint8_t *debounce_ticks, uint16_t *down_timestamp, void (*function)(bool)) {
 +    if (*debounce_ticks == 0) {
 +        bool pin_level = watch_get_pin_level(pin);
 +        function(pin_level);
 +        *debounce_ticks = pin_level ? DEBOUNCE_TICKS_DOWN : DEBOUNCE_TICKS_UP;
 +        if (*debounce_ticks != 0) _movement_enable_fast_tick_if_needed();
 +    }
 +    else
 +        *down_timestamp = 0;
 +}
 +
 +static void disable_if_needed(uint8_t *ticks) {
 +    if (*ticks > 0 && --*ticks == 0)
 +        _movement_disable_fast_tick_if_possible();
 +}
 +
 +static void movement_disable_if_debounce_complete(void) {
 +    disable_if_needed(&movement_state.debounce_ticks_light);
 +    disable_if_needed(&movement_state.debounce_ticks_alarm);
 +    disable_if_needed(&movement_state.debounce_ticks_mode);
 +}
 +
 +void cb_light_btn_interrupt(void) {
 +    debounce_btn_press(BTN_LIGHT, &movement_state.debounce_ticks_light, &movement_state.light_down_timestamp, light_btn_action);
  }
  
  void cb_mode_btn_interrupt(void) {
Simple merge