Improve raise-to-wake algorithm

From <https://github.com/InfiniTimeOrg/InfiniTime/pull/826>, with
constants tuned a bit for my personal preference.
This commit is contained in:
Peter Cai 2022-06-14 18:36:07 -04:00
parent 244230bad9
commit bb8f651481
1 changed files with 25 additions and 17 deletions

View File

@ -26,6 +26,12 @@ from apps.launcher import LauncherApp
from apps.pager import PagerApp, CrashApp, NotificationApp
from apps.steps import StepCounterApp
RAISE_WAKE_Y_SWITCH_THRESHOLD = -1536
RAISE_WAKE_SPEED_MODIFIER = 8
RAISE_WAKE_X_THRESHOLD = 512
RAISE_WAKE_Y_THRESHOLD = 0
RAISE_WAKE_REQUIRED_SPEED = 512
class EventType():
"""Enumerated interface actions.
@ -115,7 +121,8 @@ class Manager():
self.weatherinfo = {}
self.units = "Metric"
self.raise_wake = False
self.last_raise_y = 0
self.raise_wake_last_y = sys.maxsize
self.raise_wake_last_z = sys.maxsize
self.accel_poll_ms = 100
self.accel_poll_expiry = 0
@ -510,23 +517,24 @@ class Manager():
y = -y
if (x + 335) <= 670 and z < 0:
if self.sleep_at:
if y <= 0:
return False
else:
self.last_raise_y = 0
return False
if y >= 0:
self.last_raise_y = 0
return False
if y + 230 < self.last_raise_y:
self.last_raise_y = y
return True
if self.raise_wake_last_y == sys.maxsize:
self.raise_wake_last_y = y
self.raise_wake_last_z = z
return False
delta_y = y - self.raise_wake_last_y
delta_z = z - self.raise_wake_last_z
self.raise_wake_last_y = y
self.raise_wake_last_z = z
if y < RAISE_WAKE_Y_SWITCH_THRESHOLD:
return delta_z > RAISE_WAKE_REQUIRED_SPEED
if z > 0:
return delta_y > (RAISE_WAKE_REQUIRED_SPEED + (y - delta_y / 2) / RAISE_WAKE_SPEED_MODIFIER)
return delta_y < (-RAISE_WAKE_REQUIRED_SPEED - (y - delta_y / 2) / RAISE_WAKE_SPEED_MODIFIER)
def run(self, no_except=True):
"""Run the system manager synchronously.