Files
renderbug-bike/src/tasks/demo.rs
2026-02-28 17:00:30 +01:00

28 lines
1.4 KiB
Rust

use embassy_sync::pubsub::DynPublisher;
use embassy_time::Timer;
use crate::{ego::engine::MotionState, events::{Personality, Prediction, SensorSource, SensorState}};
#[embassy_executor::task]
pub async fn demo_task(ui: DynPublisher<'static, Prediction>) {
ui.publish(Prediction::SensorStatus(SensorSource::Demo, SensorState::AcquiringFix)).await;
Timer::after_secs(10).await;
ui.publish(Prediction::SetPersonality(crate::events::Personality::Active)).await;
Timer::after_secs(10).await;
ui.publish(Prediction::SensorStatus(SensorSource::Demo, SensorState::Online)).await;
loop {
for personality in [Personality::Active, Personality::Parked] {
ui.publish(Prediction::SetPersonality(personality)).await;
for state in [SensorState::Offline, SensorState::AcquiringFix, SensorState::Degraded, SensorState::Offline] {
for motion in [MotionState::Accelerating, MotionState::Steady, MotionState::Decelerating, MotionState::Stationary] {
ui.publish(Prediction::Motion { prev: motion, next: motion }).await;
for sensor in [SensorSource::MotionFrame, SensorSource::GPS, SensorSource::IMU, SensorSource::Location] {
ui.publish(Prediction::SensorStatus(sensor, state)).await;
}
Timer::after_secs(1).await;
}
}
}
}
}