diff --git a/src/main.rs b/src/main.rs index 5c23fe6..a05b447 100644 --- a/src/main.rs +++ b/src/main.rs @@ -177,6 +177,116 @@ async fn main(spawner: Spawner) -> ! { screen }; + { + let _ = screen + .update(screen::ScreenState::Initial) + .inspect_err(log_screen_error); + embassy_time::Timer::after(embassy_time::Duration::from_secs(2)).await; + + #[cfg(feature = "spat")] + { + let _ = screen + .update(screen::ScreenState::GlosaSearching( + applogic::GlosaSearching { + known_intersection_ids: alloc::vec![123], + }, + )) + .inspect_err(log_screen_error); + embassy_time::Timer::after(embassy_time::Duration::from_secs(2)).await; + let _ = screen + .update(screen::ScreenState::GlosaFound(applogic::GlosaFound { + intersection_id: 1234, + approach_id: Some(42), + })) + .inspect_err(log_screen_error); + embassy_time::Timer::after(embassy_time::Duration::from_secs(2)).await; + let _ = screen + .update(screen::ScreenState::GlosaLocked( + applogic::GlosaSignalInfo { + intersection_id: 1234, + signal_groups: alloc::vec![ + applogic::SignalGroupData { + phase: applogic::SignalPhase::Red, + maneuver: applogic::v2x::map::Maneuvers { + left_allowed: true, + staight_allowed: false, + right_allowed: false + }, + timing: Some(applogic::TimingData { + min_end_sec: 23, + likely_end_sec: None, + max_end_sec: None + }), + usages: alloc::vec![applogic::v2x::map::UsageType::Vehicle] + }, + applogic::SignalGroupData { + phase: applogic::SignalPhase::Red, + maneuver: applogic::v2x::map::Maneuvers { + left_allowed: true, + staight_allowed: false, + right_allowed: false + }, + timing: Some(applogic::TimingData { + min_end_sec: 23, + likely_end_sec: None, + max_end_sec: None + }), + usages: alloc::vec![applogic::v2x::map::UsageType::Vehicle] + } + ], + }, + )) + .inspect_err(log_screen_error); + embassy_time::Timer::after(embassy_time::Duration::from_secs(2)).await; + + let _ = screen + .update(screen::ScreenState::GlosaLocked( + applogic::GlosaSignalInfo { + intersection_id: 1234, + signal_groups: alloc::vec![applogic::SignalGroupData { + phase: applogic::SignalPhase::Red, + maneuver: applogic::v2x::map::Maneuvers { + left_allowed: true, + staight_allowed: false, + right_allowed: false + }, + timing: Some(applogic::TimingData { + min_end_sec: 23, + likely_end_sec: Some(24), + max_end_sec: Some(42) + }), + usages: alloc::vec![ + applogic::v2x::map::UsageType::Vehicle, + applogic::v2x::map::UsageType::Bike, + ] + }], + }, + )) + .inspect_err(log_screen_error); + embassy_time::Timer::after(embassy_time::Duration::from_secs(2)).await; + } + + #[cfg(feature = "denm")] + { + use c_its_parser::standards::cdd_2_2_1::etsi_its_cdd::EmergencyVehicleApproachingSubCauseCode; + let _ = screen + .update(screen::ScreenState::DenmWarning( + // c_its_parser::standards::cdd_2_2_1::etsi_its_cdd::CauseCodeChoice::emergencyVehicleApproaching95(0.into()), + c_its_parser::standards::cdd_2_2_1::etsi_its_cdd::etsi_its_cdd::CauseCodeChoice::emergencyVehicleApproaching95(EmergencyVehicleApproachingSubCauseCode(0)), + )) + .inspect_err(log_screen_error); + embassy_time::Timer::after(embassy_time::Duration::from_secs(2)).await; + + // try to reset screen for 4 more seconds + for _ in 0..4 { + let _ = screen + .update(screen::ScreenState::Initial) + .inspect_err(log_screen_error); + embassy_time::Timer::after(embassy_time::Duration::from_secs(1)).await; + } + } + } + // Setup UART I/O channel #[cfg(feature = "uart")] setup_uart0(