Merge pull request #105 from niclashoyer/fix_schedule

Fix scheduled tasks scheduling another task
This commit is contained in:
joeycastillo 2022-10-22 13:22:46 -05:00 committed by GitHub
commit f8f0ce479d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 6 deletions

View file

@ -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) {
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;
}
movement_schedule_background_task_for_face(movement_state.current_watch_face, date_time);
}
void movement_cancel_background_task(void) {
scheduled_tasks[movement_state.current_watch_face].reg = 0;
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[watch_face_index].reg = date_time.reg;
}
}
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) {

View file

@ -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);