From 83e572614d83e20f1135fefaa7269a6f47a7b4ed Mon Sep 17 00:00:00 2001 From: Jannik Beyerstedt Date: Mon, 7 Sep 2026 12:36:25 +0200 Subject: [PATCH] TMP: Show common screens at startup --- Cargo.lock | 18 ++++++++- Cargo.toml | 2 +- src/main.rs | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 125 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 72f63c0..c01e7ec 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -218,6 +218,20 @@ name = "c-its-parser" version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e94d9990b20498f621f164f23ae198c4365115eb4191ae106352ec74d4a4110" +dependencies = [ + "chrono", + "etherparse", + "geo-types", + "geonetworking", + "nom", + "num-traits", + "wasm-bindgen", +] + +[[package]] +name = "c-its-parser" +version = "2.4.1" +source = "git+https://github.com/consider-it/c-its-parser.git?branch=feat%2Fdenm-cc-from-u8#01fbf45932a8e276e1df4ba8cbf5bb29f8749786" dependencies = [ "chrono", "etherparse", @@ -1186,7 +1200,7 @@ version = "0.1.0" dependencies = [ "assert_float_eq", "bt-hci", - "c-its-parser", + "c-its-parser 2.4.1 (git+https://github.com/consider-it/c-its-parser.git?branch=feat%2Fdenm-cc-from-u8)", "chrono", "critical-section", "crossbeam-queue", @@ -1226,7 +1240,7 @@ name = "esp32-cits-core" version = "0.1.0" source = "git+https://git.hamburg.ccc.de/jtbx/esp32-cits-core?branch=main#a6d0ea6ca2da130fde2b84060a34ef45e772a459" dependencies = [ - "c-its-parser", + "c-its-parser 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "chrono", "esp-hal", "esp-radio", diff --git a/Cargo.toml b/Cargo.toml index eaa2c22..a240e49 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -110,7 +110,7 @@ esp32-cits-core = { version = "0.1.0", default-features = false, git = "https:// embedded-hal-bus = { version = "0.3.0", optional = true } embedded-graphics = { version = "0.8.2", optional = true } # needs newer GN with removed bitvec dependency -c-its-parser = { version = "2.4.0", default-features = false, features = [ +c-its-parser = { version = "2.4.0", git = "https://github.com/consider-it/c-its-parser.git", branch = "feat/denm-cc-from-u8", default-features = false, features = [ "time", "geo", "libm", diff --git a/src/main.rs b/src/main.rs index ef0313a..27c9bd8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -177,6 +177,114 @@ 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")] + { + let _ = screen + .update(screen::ScreenState::DenmWarning( + c_its_parser::standards::cdd_2_2_1::etsi_its_cdd::CauseCodeChoice::emergencyVehicleApproaching95(0.into()), + )) + .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(