diff --git a/core/embed/rust/src/ui/component/base.rs b/core/embed/rust/src/ui/component/base.rs index 6703440b7..01dd84b1f 100644 --- a/core/embed/rust/src/ui/component/base.rs +++ b/core/embed/rust/src/ui/component/base.rs @@ -466,7 +466,7 @@ impl EventCtx { pub const ANIM_FRAME_TIMER: TimerToken = TimerToken(1); /// How long into the future we should schedule the animation frame timer. - const ANIM_FRAME_DEADLINE: Duration = Duration::from_millis(18); + const ANIM_FRAME_DURATION: Duration = Duration::from_millis(18); // 0 == `TimerToken::INVALID`, // 1 == `Self::ANIM_FRAME_TIMER`. @@ -508,10 +508,10 @@ impl EventCtx { self.paint_requested = true; } - /// Request a timer event to be delivered after `deadline` elapses. - pub fn request_timer(&mut self, deadline: Duration) -> TimerToken { + /// Request a timer event to be delivered after `duration` elapses. + pub fn request_timer(&mut self, duration: Duration) -> TimerToken { let token = self.next_timer_token(); - self.register_timer(token, deadline); + self.register_timer(token, duration); token } @@ -519,7 +519,7 @@ impl EventCtx { pub fn request_anim_frame(&mut self) { if !self.anim_frame_scheduled { self.anim_frame_scheduled = true; - self.register_timer(Self::ANIM_FRAME_TIMER, Self::ANIM_FRAME_DEADLINE); + self.register_timer(Self::ANIM_FRAME_TIMER, Self::ANIM_FRAME_DURATION); } } @@ -553,8 +553,8 @@ impl EventCtx { self.root_repaint_requested = false; } - fn register_timer(&mut self, token: TimerToken, deadline: Duration) { - if self.timers.push((token, deadline)).is_err() { + fn register_timer(&mut self, token: TimerToken, duration: Duration) { + if self.timers.push((token, duration)).is_err() { // The timer queue is full, this would be a development error in the layout // layer. Let's panic in the debug env. #[cfg(feature = "ui_debug")] diff --git a/core/embed/rust/src/ui/layout/obj.rs b/core/embed/rust/src/ui/layout/obj.rs index 9f7cb0e73..e6ed286e6 100644 --- a/core/embed/rust/src/ui/layout/obj.rs +++ b/core/embed/rust/src/ui/layout/obj.rs @@ -133,7 +133,7 @@ impl LayoutObj { } /// Timer callback is expected to be a callable object of the following - /// form: `def timer(token: int, deadline_in_ms: int)`. + /// form: `def timer(token: int, duration_ms: int)`. fn obj_set_timer_fn(&self, timer_fn: Obj) { self.inner.borrow_mut().timer_fn = timer_fn; } @@ -162,13 +162,13 @@ impl LayoutObj { // painting by now, and we're prepared for a paint pass. // Drain any pending timers into the callback. - while let Some((token, deadline)) = inner.event_ctx.pop_timer() { + while let Some((token, duration)) = inner.event_ctx.pop_timer() { let token = token.try_into(); - let deadline = deadline.try_into(); - if let (Ok(token), Ok(deadline)) = (token, deadline) { - inner.timer_fn.call_with_n_args(&[token, deadline])?; + let duration = duration.try_into(); + if let (Ok(token), Ok(duration)) = (token, duration) { + inner.timer_fn.call_with_n_args(&[token, duration])?; } else { - // Failed to convert token or deadline into `Obj`, skip. + // Failed to convert token or duration into `Obj`, skip. } } diff --git a/core/embed/rust/src/ui/model_tt/component/keyboard/common.rs b/core/embed/rust/src/ui/model_tt/component/keyboard/common.rs index 0220ad4f7..9137ca189 100644 --- a/core/embed/rust/src/ui/model_tt/component/keyboard/common.rs +++ b/core/embed/rust/src/ui/model_tt/component/keyboard/common.rs @@ -86,7 +86,7 @@ impl MultiTapKeyboard { // If the key has more then one character, we need to set it as pending, so we // can cycle through on the repeated clicks. We also request a timer so we can - // reset the pending state after a deadline. + // reset the pending state after it elapses. // // Note: It might seem that we should make sure to `request_paint` in case we // progress into a pending state (to display the pending marker), but such diff --git a/core/embed/rust/src/ui/model_tt/layout.rs b/core/embed/rust/src/ui/model_tt/layout.rs index 2bcb17728..8c29b60d7 100644 --- a/core/embed/rust/src/ui/model_tt/layout.rs +++ b/core/embed/rust/src/ui/model_tt/layout.rs @@ -1648,7 +1648,7 @@ pub static mp_module_trezorui2: Module = obj_module! { /// """Attach a timer setter function. /// /// The layout object can call the timer setter with two arguments, - /// `token` and `deadline`. When `deadline` is reached, the layout object + /// `token` and `duration`. When `duration` elapses, the layout object /// expects a callback to `self.timer(token)`. /// """ /// @@ -1670,7 +1670,7 @@ pub static mp_module_trezorui2: Module = obj_module! { /// """Callback for the timer set by `attach_timer_fn`. /// /// This function should be called by the executor after the corresponding - /// deadline is reached. + /// duration elapses. /// """ /// /// def paint(self) -> bool: diff --git a/core/mocks/generated/trezorui2.pyi b/core/mocks/generated/trezorui2.pyi index 00e6279a9..1d9b4917b 100644 --- a/core/mocks/generated/trezorui2.pyi +++ b/core/mocks/generated/trezorui2.pyi @@ -467,7 +467,7 @@ class LayoutObj(Generic[T]): def attach_timer_fn(self, fn: Callable[[int, int], None]) -> None: """Attach a timer setter function. The layout object can call the timer setter with two arguments, - `token` and `deadline`. When `deadline` is reached, the layout object + `token` and `duration`. When `duration` elapses, the layout object expects a callback to `self.timer(token)`. """ if utils.USE_TOUCH: @@ -483,7 +483,7 @@ class LayoutObj(Generic[T]): def timer(self, token: int) -> T | None: """Callback for the timer set by `attach_timer_fn`. This function should be called by the executor after the corresponding - deadline is reached. + duration elapses. """ def paint(self) -> bool: """Paint the layout object on screen. diff --git a/core/src/trezor/ui/__init__.py b/core/src/trezor/ui/__init__.py index 045fee742..418a0bde8 100644 --- a/core/src/trezor/ui/__init__.py +++ b/core/src/trezor/ui/__init__.py @@ -279,7 +279,7 @@ class Layout(Generic[T]): # Turn the brightness on. backlight_fade(self.BACKLIGHT_LEVEL) - def _set_timer(self, token: int, deadline: int) -> None: + def _set_timer(self, token: int, duration: int) -> None: """Timer callback for Rust layouts.""" async def timer_task() -> None: @@ -296,7 +296,8 @@ class Layout(Generic[T]): assert token not in self.timers task = timer_task() self.timers[token] = task - loop.schedule(task, token, deadline) + deadline = utime.ticks_add(utime.ticks_ms(), duration) + loop.schedule(task, deadline=deadline) def _emit_message(self, msg: Any) -> None: """Process a message coming out of the Rust layout. Set is as a result and shut diff --git a/core/src/trezor/ui/layouts/tr/__init__.py b/core/src/trezor/ui/layouts/tr/__init__.py index 54c548835..2ebc28abf 100644 --- a/core/src/trezor/ui/layouts/tr/__init__.py +++ b/core/src/trezor/ui/layouts/tr/__init__.py @@ -28,7 +28,7 @@ if __debug__: def draw_simple(layout: trezorui2.LayoutObj[Any]) -> None: # Simple drawing not supported for layouts that set timers. - def dummy_set_timer(token: int, deadline: int) -> None: + def dummy_set_timer(token: int, duration: int) -> None: raise RuntimeError layout.attach_timer_fn(dummy_set_timer) diff --git a/core/src/trezor/ui/layouts/tt/__init__.py b/core/src/trezor/ui/layouts/tt/__init__.py index 0568eb9e2..5ca492ba1 100644 --- a/core/src/trezor/ui/layouts/tt/__init__.py +++ b/core/src/trezor/ui/layouts/tt/__init__.py @@ -28,7 +28,7 @@ if __debug__: def draw_simple(layout: trezorui2.LayoutObj[Any]) -> None: # Simple drawing not supported for layouts that set timers. - def dummy_set_timer(token: int, deadline: int) -> None: + def dummy_set_timer(token: int, duration: int) -> None: raise RuntimeError layout.attach_timer_fn(dummy_set_timer)