From a1ee228d7200298835075be27dcf1564aa1c9f27 Mon Sep 17 00:00:00 2001 From: Jannik Beyerstedt Date: Fri, 25 Sep 2026 11:32:45 +0200 Subject: [PATCH 1/3] screen: More verbose "searching" text --- src/screen.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/screen.rs b/src/screen.rs index ea32dc1..bd3d11b 100644 --- a/src/screen.rs +++ b/src/screen.rs @@ -356,7 +356,7 @@ where self.clear()?; text::Text::with_alignment( - "Searching...", + "Searching\nupcoming\nintersection...", geometry::Point::new(i32::from(self.size.width) / 2, 130 + self.size.offset_top), Self::DEFAULT_TEXT_STYLE, text::Alignment::Center, From b079b509ae006007c023c2323e050637ca2d333c Mon Sep 17 00:00:00 2001 From: Jannik Beyerstedt Date: Fri, 25 Sep 2026 13:09:54 +0200 Subject: [PATCH 2/3] ble: Move feature listing to own module --- src/ble.rs | 12 +----------- src/util.rs | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 11 deletions(-) create mode 100644 src/util.rs diff --git a/src/ble.rs b/src/ble.rs index bdb32be..1094569 100644 --- a/src/ble.rs +++ b/src/ble.rs @@ -120,17 +120,7 @@ pub async fn run( .. } = stack.build(); - let mut features = alloc::vec![]; - if cfg!(feature = "cam") { - features.push("cam"); - } - if cfg!(feature = "denm") { - features.push("denm"); - } - if cfg!(feature = "spat") { - features.push("mapem"); - features.push("spatem"); - } + let mut features = crate::util::get_rx_feature_list(); info!( "Starting advertising and GATT service for {}", features.join(",") diff --git a/src/util.rs b/src/util.rs new file mode 100644 index 0000000..aef0cf3 --- /dev/null +++ b/src/util.rs @@ -0,0 +1,32 @@ +//! Some stuff used at several places + +use alloc::vec::Vec; + +#[allow(unused)] +pub(crate) fn get_rx_feature_list() -> Vec<&'static str> { + let mut features = alloc::vec![]; + if cfg!(feature = "cam") { + features.push("cam"); + } + if cfg!(feature = "denm") { + features.push("denm"); + } + if cfg!(feature = "spat") { + features.push("mapem"); + features.push("spatem"); + } + + features +} + +pub(crate) fn get_tx_feature_list() -> Vec<&'static str> { + let mut features = alloc::vec![]; + if cfg!(feature = "cam_tx") { + features.push("cam-tx"); + } + if cfg!(feature = "uart") { + features.push("uart-tx"); + } + + features +} From 95c2376caf7c50ce983c33e7d64f3a67222f9562 Mon Sep 17 00:00:00 2001 From: Jannik Beyerstedt Date: Fri, 25 Sep 2026 13:11:50 +0200 Subject: [PATCH 3/3] WIP screen: Different slash screen for --- src/main.rs | 1 + src/screen.rs | 65 ++++++++++++++++++++++++++++----------------------- 2 files changed, 37 insertions(+), 29 deletions(-) diff --git a/src/main.rs b/src/main.rs index add051f..ef0313a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -58,6 +58,7 @@ mod io; mod screen; #[cfg(feature = "gnss_ubx")] mod ubx; +mod util; const WIFI_CHANNEL: radio::Channel = 180; const WIFI_TXPOWER: i8 = 10; // dBm, 2..20 diff --git a/src/screen.rs b/src/screen.rs index bd3d11b..ea7c675 100644 --- a/src/screen.rs +++ b/src/screen.rs @@ -614,41 +614,48 @@ where self.clear_all()?; - let sig_width = i32::from(self.size.width) / 3; - let circle_dia = 50; - let circle_margin = (sig_width - circle_dia) / 2; - - for (idx, style) in [Self::RD_STYLE, Self::YE_STYLE, Self::GN_STYLE] - .iter() - .enumerate() + #[cfg(feature = "spat")] { - #[allow(clippy::cast_possible_truncation, clippy::cast_possible_wrap)] - let offset = (idx as i32) * sig_width; + let sig_width = i32::from(self.size.width) / 3; + let circle_dia = 50; + let circle_margin = (sig_width - circle_dia) / 2; - primitives::Circle::new( - geometry::Point::new(offset + circle_margin, 15 + self.size.offset_top), - circle_dia.cast_unsigned(), + for (idx, style) in [Self::RD_STYLE, Self::YE_STYLE, Self::GN_STYLE] + .iter() + .enumerate() + { + #[allow(clippy::cast_possible_truncation, clippy::cast_possible_wrap)] + let offset = (idx as i32) * sig_width; + + primitives::Circle::new( + geometry::Point::new(offset + circle_margin, 15 + self.size.offset_top), + circle_dia.cast_unsigned(), + ) + .into_styled(*style) + .draw(&mut self.target)?; + } + + // draw welcome text + let centerline = i32::from(self.size.width) / 2; + + embedded_graphics::image::Image::new( + &self.bike_image, + geometry::Point::new(centerline - (45 / 2) + 1, 75 + self.size.offset_top), + ) + .draw(&mut self.target)?; + + text::Text::with_alignment( + "C-ITS Signal Phase\nWaiting for GNSS...", + geometry::Point::new(centerline, 130 + self.size.offset_top), + text_style, + text::Alignment::Center, ) - .into_styled(*style) .draw(&mut self.target)?; } - // draw welcome text - let centerline = i32::from(self.size.width) / 2; - - embedded_graphics::image::Image::new( - &self.bike_image, - geometry::Point::new(centerline - (45 / 2) + 1, 75 + self.size.offset_top), - ) - .draw(&mut self.target)?; - - text::Text::with_alignment( - "C-ITS Signal Phase\nWaiting for GNSS...", - geometry::Point::new(centerline, 130 + self.size.offset_top), - text_style, - text::Alignment::Center, - ) - .draw(&mut self.target)?; + // show features + let enabled_features = crate::util::get_rx_feature_list(); + let enabled_tx_features = crate::util::get_tx_feature_list(); Ok(()) }