diff options
author | joeycastillo <joeycastillo@utexas.edu> | 2022-10-22 13:22:46 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-22 13:22:46 -0500 |
commit | f8f0ce479d94f445c98fe9ec8a5de7ab6fb3c67a (patch) | |
tree | c3eb9d6e8698d626faef89336ef785e60b3fe73d | |
parent | dfb928b9d6d1cf62d09c48f54b57d3e6fc970245 (diff) | |
parent | b56c60868e84d729a4fd76ff5739a08b87153728 (diff) | |
download | Sensor-Watch-f8f0ce479d94f445c98fe9ec8a5de7ab6fb3c67a.tar.gz Sensor-Watch-f8f0ce479d94f445c98fe9ec8a5de7ab6fb3c67a.tar.bz2 Sensor-Watch-f8f0ce479d94f445c98fe9ec8a5de7ab6fb3c67a.zip |
Merge pull request #105 from niclashoyer/fix_schedule
Fix scheduled tasks scheduling another task
-rw-r--r-- | movement/movement.c | 18 | ||||
-rw-r--r-- | movement/movement.h | 4 |
2 files changed, 19 insertions, 3 deletions
diff --git a/movement/movement.c b/movement/movement.c index 8c58b202..09ebf0c2 100644 --- a/movement/movement.c +++ b/movement/movement.c @@ -159,6 +159,10 @@ static void _movement_handle_scheduled_tasks(void) { scheduled_tasks[i].reg = 0; movement_event_t background_event = { EVENT_BACKGROUND_TASK, 0 }; watch_faces[i].loop(background_event, &movement_state.settings, watch_face_contexts[i]); + // check if loop scheduled a new task + if (scheduled_tasks[i].reg) { + num_active_tasks++; + } } else { num_active_tasks++; } @@ -207,15 +211,23 @@ void movement_move_to_next_face(void) { } void movement_schedule_background_task(watch_date_time date_time) { + movement_schedule_background_task_for_face(movement_state.current_watch_face, date_time); +} + +void movement_cancel_background_task(void) { + movement_cancel_background_task_for_face(movement_state.current_watch_face); +} + +void movement_schedule_background_task_for_face(uint8_t watch_face_index, watch_date_time date_time) { watch_date_time now = watch_rtc_get_date_time(); if (date_time.reg > now.reg) { movement_state.has_scheduled_background_task = true; - scheduled_tasks[movement_state.current_watch_face].reg = date_time.reg; + scheduled_tasks[watch_face_index].reg = date_time.reg; } } -void movement_cancel_background_task(void) { - scheduled_tasks[movement_state.current_watch_face].reg = 0; +void movement_cancel_background_task_for_face(uint8_t watch_face_index) { + scheduled_tasks[watch_face_index].reg = 0; bool other_tasks_scheduled = false; for(uint8_t i = 0; i < MOVEMENT_NUM_FACES; i++) { if (scheduled_tasks[i].reg != 0) { diff --git a/movement/movement.h b/movement/movement.h index a013a861..79222e8c 100644 --- a/movement/movement.h +++ b/movement/movement.h @@ -292,6 +292,10 @@ void movement_schedule_background_task(watch_date_time date_time); // movement will associate the scheduled task with the currently active face. void movement_cancel_background_task(void); +// these functions should work around the limitation of the above functions, which will be deprecated. +void movement_schedule_background_task_for_face(uint8_t watch_face_index, watch_date_time date_time); +void movement_cancel_background_task_for_face(uint8_t watch_face_index); + void movement_request_wake(void); void movement_play_signal(void); |