timer face: fix problem with messed up durations for repeating timers / always beep when starting a timer

This commit is contained in:
TheOnePerson 2023-05-18 13:10:32 +02:00
parent 7331851c77
commit 45d9b97f07
2 changed files with 5 additions and 4 deletions

View File

@ -62,9 +62,9 @@ static void _start(timer_state_t *state, movement_settings_t *settings, bool wit
state->timers[state->current_timer].unit.seconds); state->timers[state->current_timer].unit.seconds);
watch_date_time target_dt = watch_utility_date_time_from_unix_time(state->target_ts, _get_tz_offset(settings)); watch_date_time target_dt = watch_utility_date_time_from_unix_time(state->target_ts, _get_tz_offset(settings));
state->mode = running; state->mode = running;
movement_schedule_background_task(target_dt); movement_schedule_background_task_for_face(state->watch_face_index, target_dt);
watch_set_indicator(WATCH_INDICATOR_BELL); watch_set_indicator(WATCH_INDICATOR_BELL);
if (settings->bit.button_should_sound && with_beep) watch_buzzer_play_sequence((int8_t *)_sound_seq_start, NULL); if (with_beep) watch_buzzer_play_sequence((int8_t *)_sound_seq_start, NULL);
} }
static void _draw(timer_state_t *state, uint8_t subsecond) { static void _draw(timer_state_t *state, uint8_t subsecond) {
@ -128,7 +128,7 @@ static void _draw(timer_state_t *state, uint8_t subsecond) {
static void _reset(timer_state_t *state) { static void _reset(timer_state_t *state) {
state->mode = waiting; state->mode = waiting;
movement_cancel_background_task(); movement_cancel_background_task_for_face(state->watch_face_index);
watch_clear_indicator(WATCH_INDICATOR_BELL); watch_clear_indicator(WATCH_INDICATOR_BELL);
} }
@ -193,12 +193,12 @@ static inline bool _check_for_signal() {
void timer_face_setup(movement_settings_t *settings, uint8_t watch_face_index, void ** context_ptr) { void timer_face_setup(movement_settings_t *settings, uint8_t watch_face_index, void ** context_ptr) {
(void) settings; (void) settings;
(void) watch_face_index;
if (*context_ptr == NULL) { if (*context_ptr == NULL) {
*context_ptr = malloc(sizeof(timer_state_t)); *context_ptr = malloc(sizeof(timer_state_t));
timer_state_t *state = (timer_state_t *)*context_ptr; timer_state_t *state = (timer_state_t *)*context_ptr;
memset(*context_ptr, 0, sizeof(timer_state_t)); memset(*context_ptr, 0, sizeof(timer_state_t));
state->watch_face_index = watch_face_index;
for (uint8_t i = 0; i < sizeof(_default_timer_values) / sizeof(uint16_t); i++) { for (uint8_t i = 0; i < sizeof(_default_timer_values) / sizeof(uint16_t); i++) {
state->timers[i].value = _default_timer_values[i]; state->timers[i].value = _default_timer_values[i];
} }

View File

@ -77,6 +77,7 @@ typedef struct {
uint32_t now_ts; uint32_t now_ts;
uint16_t paused_left; uint16_t paused_left;
uint8_t pausing_seconds; uint8_t pausing_seconds;
uint8_t watch_face_index;
timer_setting_t timers[TIMER_SLOTS]; timer_setting_t timers[TIMER_SLOTS];
uint8_t settings_state : 4; uint8_t settings_state : 4;
uint8_t current_timer : 4; uint8_t current_timer : 4;