summaryrefslogtreecommitdiffstats
path: root/movement/movement.c
diff options
context:
space:
mode:
authorjoeycastillo <joeycastillo@utexas.edu>2022-10-22 13:22:46 -0500
committerGitHub <noreply@github.com>2022-10-22 13:22:46 -0500
commitf8f0ce479d94f445c98fe9ec8a5de7ab6fb3c67a (patch)
treec3eb9d6e8698d626faef89336ef785e60b3fe73d /movement/movement.c
parentdfb928b9d6d1cf62d09c48f54b57d3e6fc970245 (diff)
parentb56c60868e84d729a4fd76ff5739a08b87153728 (diff)
downloadSensor-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
Diffstat (limited to 'movement/movement.c')
-rw-r--r--movement/movement.c18
1 files changed, 15 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) {