From 17bc61e02abae51862f3b495307f5bc2accc5906 Mon Sep 17 00:00:00 2001 From: lawtalker Date: Sat, 28 Nov 2020 09:19:12 -0800 Subject: [PATCH 1/6] Change scheduler logic to "keep awake" Switch scheduler from current "turn on / turn off" logic to "keep on / end keep on" logic --- de1plus/gui.tcl | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/de1plus/gui.tcl b/de1plus/gui.tcl index 401c98e2..c121e367 100644 --- a/de1plus/gui.tcl +++ b/de1plus/gui.tcl @@ -927,7 +927,7 @@ proc show_going_to_sleep_page {} { return } - if {[ifexists ::app_updating] == 1} { + if {[ifexists ::app_updating] == 1} { msg "delaying screen saver because tablet app is updating" delay_screen_saver return @@ -937,7 +937,16 @@ proc show_going_to_sleep_page {} { msg "delaying screen saver because firmware is updating" delay_screen_saver return - } + } + + # make scheduler work on "keep awake" logic + if {[ifexists ::scheduler_awake] == 1) { + msg "delaying screen saver 60 sec because of scheduler" + stop_screen_saver_timer + if {$::settings(screen_saver_delay) != 0 } { + set ::screen_saver_alarm_handle [after 60000 "show_going_to_sleep_page"] + return + } puts "show_going_to_sleep_page" if {$::de1(current_context) == "sleep" || $::de1(current_context) == "saver"} { From 266799dd307b9804bf1b488ee4b34585004d9b21 Mon Sep 17 00:00:00 2001 From: lawtalker Date: Sat, 28 Nov 2020 09:38:53 -0800 Subject: [PATCH 2/6] Update vars.tcl --- de1plus/vars.tcl | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/de1plus/vars.tcl b/de1plus/vars.tcl index 208d836a..e82e1819 100644 --- a/de1plus/vars.tcl +++ b/de1plus/vars.tcl @@ -200,18 +200,20 @@ proc set_alarms_for_de1_wake_sleep {} { } proc scheduler_wake {} { - msg "Scheduled wake occured at [clock format [clock seconds]]" + msg "Scheduled wake occurred at [clock format [clock seconds]]" + set ::scheduler_awake 1 start_idle - # after alarm has occured go ahead and set the alarm for tommorrow + # after alarm has occurred go ahead and set the alarm for tommorrow after 2000 set_alarms_for_de1_wake_sleep } proc scheduler_sleep {} { - msg "Scheduled sleep occured at [clock format [clock seconds]]" - start_sleep + msg "Scheduled end occurred at [clock format [clock seconds]]" + unset ::scheduler_awake + #start_sleep - # after alarm has occured go ahead and set the alarm for tommorrow + # after alarm has occurred go ahead and set the alarm for tommorrow after 2000 set_alarms_for_de1_wake_sleep } @@ -3814,4 +3816,4 @@ proc when_to_start_pour_tracking_advanced {} { } else { return [translate "Immediately"] } -} \ No newline at end of file +} From 3c0a9710ba05577355a72cc9618933f31fcc8fca Mon Sep 17 00:00:00 2001 From: lawtalker Date: Tue, 1 Dec 2020 20:08:54 -0800 Subject: [PATCH 3/6] Update gui.tcl fix typos --- de1plus/gui.tcl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/de1plus/gui.tcl b/de1plus/gui.tcl index c121e367..37057043 100644 --- a/de1plus/gui.tcl +++ b/de1plus/gui.tcl @@ -940,11 +940,12 @@ proc show_going_to_sleep_page {} { } # make scheduler work on "keep awake" logic - if {[ifexists ::scheduler_awake] == 1) { + if {[ifexists ::scheduler_awake] == 1} { msg "delaying screen saver 60 sec because of scheduler" stop_screen_saver_timer if {$::settings(screen_saver_delay) != 0 } { set ::screen_saver_alarm_handle [after 60000 "show_going_to_sleep_page"] + } return } From 4bc5a542a3f0809e6bc0512342cc0fec2a0fc09d Mon Sep 17 00:00:00 2001 From: lawtalker Date: Thu, 3 Dec 2020 09:24:16 -0800 Subject: [PATCH 4/6] Make new scheduler logic conditional Instead of making new scheduler logic active for all users, only use the new logic if schedule_logic is set (to 1) in settings.tdb --- de1plus/vars.tcl | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/de1plus/vars.tcl b/de1plus/vars.tcl index e82e1819..dd7e41b4 100644 --- a/de1plus/vars.tcl +++ b/de1plus/vars.tcl @@ -201,7 +201,12 @@ proc set_alarms_for_de1_wake_sleep {} { proc scheduler_wake {} { msg "Scheduled wake occurred at [clock format [clock seconds]]" - set ::scheduler_awake 1 + + # set "keep awake" flag if user has chosen new scheduler logic + if {[ifexists ::settings(scheduler_logic)] == 1} { + set ::scheduler_awake 1 + } + start_idle # after alarm has occurred go ahead and set the alarm for tommorrow @@ -210,9 +215,14 @@ proc scheduler_wake {} { proc scheduler_sleep {} { msg "Scheduled end occurred at [clock format [clock seconds]]" - unset ::scheduler_awake - #start_sleep - + + # if user has chosen new scheduler logic, clear "keep awake" flag (which will allow machine to sleep per idle timer), else immediately sleep + if {[ifexists ::settings(scheduler_logic)] == 1} { + unset ::scheduler_awake + } else { + start_sleep + } + # after alarm has occurred go ahead and set the alarm for tommorrow after 2000 set_alarms_for_de1_wake_sleep } From 59d1c1237105209a00da182ab78e6a07823783f0 Mon Sep 17 00:00:00 2001 From: lawtalker Date: Fri, 4 Dec 2020 10:21:42 -0800 Subject: [PATCH 5/6] use -nocomplain option for unset scheduler_awake On my machine today, my code threw an error on "unset ::scheduler_awake" because there was no such variable. I'm not sure how it got to that state, but am adding a -nocomplain option to the command to avoid the error. --- de1plus/vars.tcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/de1plus/vars.tcl b/de1plus/vars.tcl index dd7e41b4..3a4aa7f5 100644 --- a/de1plus/vars.tcl +++ b/de1plus/vars.tcl @@ -218,7 +218,7 @@ proc scheduler_sleep {} { # if user has chosen new scheduler logic, clear "keep awake" flag (which will allow machine to sleep per idle timer), else immediately sleep if {[ifexists ::settings(scheduler_logic)] == 1} { - unset ::scheduler_awake + unset -nocomplain ::scheduler_awake } else { start_sleep } From fa08bb897e083fe070113cad7f3b2b77722ce9d4 Mon Sep 17 00:00:00 2001 From: lawtalker Date: Fri, 4 Dec 2020 12:03:54 -0800 Subject: [PATCH 6/6] set awake flag if we are mid-schedule at startup This rolls back the last commit (adding the -nocomplain option) and fixes the problem properly. The issue is that at startup we might be in the middle of a scheduled period, and if so the awake flag should be set. This accomplishes two things: (1) it ensures the machine doesn't sleep until the schedule ends if we are mid-schedule at startup; and (2) it avoids the possibility that the awake flag isn't set when we get to the end of our scheduled time. --- de1plus/vars.tcl | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/de1plus/vars.tcl b/de1plus/vars.tcl index 3a4aa7f5..a521f373 100644 --- a/de1plus/vars.tcl +++ b/de1plus/vars.tcl @@ -193,6 +193,11 @@ proc set_alarms_for_de1_wake_sleep {} { set sleep_seconds [expr {[next_alarm_time $::settings(scheduler_sleep)] - [clock seconds]}] set ::alarms_for_de1_sleep [after [expr {1000 * $sleep_seconds}] scheduler_sleep] + + # if we are in the middle of the scheduled period at startup, set the awake flag if using new scheduler logic + if {[ifexists ::settings(scheduler_logic)] == 1 && $wake_seconds > $sleep_seconds} { + set ::scheduler_awake 1 + } #msg "Wake schedule set for [next_alarm_time $::settings(scheduler_wake)] in $wake_seconds seconds" #msg "Sleep schedule set for [next_alarm_time $::settings(scheduler_sleep)] in $sleep_seconds seconds" @@ -218,7 +223,7 @@ proc scheduler_sleep {} { # if user has chosen new scheduler logic, clear "keep awake" flag (which will allow machine to sleep per idle timer), else immediately sleep if {[ifexists ::settings(scheduler_logic)] == 1} { - unset -nocomplain ::scheduler_awake + unset ::scheduler_awake } else { start_sleep }