From 22d1b4d077ae50721a58fd2ccd9c6ad6d16e6d98 Mon Sep 17 00:00:00 2001 From: Victoria Fischer Date: Sat, 28 Feb 2026 16:54:44 +0100 Subject: [PATCH] tasks: more Fract8 update --- src/tasks/safetyui.rs | 18 +++++++++--------- src/tasks/simulation.rs | 3 ++- src/tasks/ui.rs | 22 +++++++++++----------- 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/src/tasks/safetyui.rs b/src/tasks/safetyui.rs index f7bd6af..6df4578 100644 --- a/src/tasks/safetyui.rs +++ b/src/tasks/safetyui.rs @@ -31,13 +31,13 @@ impl = Animation::new().duration(Duration::from_secs(1)).from(Fract8::MIN).to(Fract8::MAX); +const TURN_OFF: Animation = Animation::new().duration(Duration::from_secs(1)).from(Fract8::MAX).to(Fract8::MIN); #[embassy_executor::task] pub async fn safety_ui_main(mut events: DynSubscriber<'static, Prediction>, mut ui: SafetyUi<>::Surface>) { diff --git a/src/tasks/simulation.rs b/src/tasks/simulation.rs index a8e53ec..b4e77f7 100644 --- a/src/tasks/simulation.rs +++ b/src/tasks/simulation.rs @@ -3,6 +3,7 @@ use embassy_time::{Duration, Timer}; use embedded_storage::ReadStorage; use esp_bootloader_esp_idf::partitions::PartitionTable; use esp_storage::FlashStorage; +use figments::liber8tion::interpolate::Fract8; use nalgebra::{Vector2, Vector3}; use log::*; use rmp::decode::ValueReadError; @@ -176,7 +177,7 @@ pub async fn simulation_task(mut reader: SimDataReader let pct = (idx as f32) / (reader.event_count as f32); idx_breaker.set((pct * 255.0) as u8); if let Some(pct) = idx_breaker.read_tripped() { - events.send(Measurement::SimulationProgress(reader.srcid(), reader.runtime, pct)).await; + events.send(Measurement::SimulationProgress(reader.srcid(), reader.runtime, Fract8::from_raw(pct))).await; } idx += 1; }, diff --git a/src/tasks/ui.rs b/src/tasks/ui.rs index 67d5a3a..20eaff9 100644 --- a/src/tasks/ui.rs +++ b/src/tasks/ui.rs @@ -54,10 +54,10 @@ impl) { - let fade_in = Animation::default().from(0).to(255).duration(Duration::from_millis(30)); - let pulse_out = Animation::default().from(255).to(60).duration(Duration::from_millis(100)); - let pulse_in = Animation::default().from(0).to(255).duration(Duration::from_millis(100)); - let fade_out = Animation::default().from(255).to(0).duration(Duration::from_secs(2)); + let fade_in = Animation::default().from(Fract8::MIN).to(Fract8::MAX).duration(Duration::from_millis(30)); + let pulse_out = Animation::default().from(Fract8::MAX).to(Fract8::from_raw(60)).duration(Duration::from_millis(100)); + let pulse_in = Animation::default().from(Fract8::MIN).to(Fract8::MAX).duration(Duration::from_millis(100)); + let fade_out = Animation::default().from(Fract8::MAX).to(Fract8::MIN).duration(Duration::from_secs(2)); info!("Flashing notification {color}"); self.notification.set_visible(true); @@ -95,10 +95,10 @@ impl { - let tail = Animation::default().duration(Duration::from_millis(300)).to(96); - let panels = Animation::default().duration(Duration::from_millis(300)).to(128); - let bg = Animation::default().duration(Duration::from_millis(300)).to(32); - let motion = Animation::default().duration(Duration::from_secs(1)).to(0); + let tail = Animation::default().duration(Duration::from_millis(300)).to(Fract8::from_raw(96)); + let panels = Animation::default().duration(Duration::from_millis(300)).to(Fract8::from_raw(128)); + let bg = Animation::default().duration(Duration::from_millis(300)).to(Fract8::from_raw(32)); + let motion = Animation::default().duration(Duration::from_secs(1)).to(Fract8::MIN); embassy_futures::join::join4( tail.apply(&mut self.tail), panels.apply(&mut self.panels), @@ -110,8 +110,8 @@ impl { // FIXME: The safety UI task should handle setting the display brightness to 50% here self.background.set_shader(Thinking::default()); - let fg_fade = Animation::default().duration(Duration::from_millis(300)).to(0); - let bg_fade = Animation::default().duration(Duration::from_millis(300)).to(128); + let fg_fade = Animation::default().duration(Duration::from_millis(300)).to(Fract8::MIN); + let bg_fade = Animation::default().duration(Duration::from_millis(300)).to(Fract8::from_raw(128)); // FIXME: The scenes shouldn't be touching the brake/headlights at all here. In fact, they should be dealt with in a whole separate task from the main UI, maybe running on the motion prediction executor embassy_futures::join::join4( @@ -180,7 +180,7 @@ impl