0
0
Fork 0

screen: Show placeholder when no signal groups available

This commit is contained in:
Jannik Beyerstedt 2026-06-19 22:04:30 +02:00
commit 47bb1f1284
2 changed files with 23 additions and 17 deletions

View file

@ -384,5 +384,5 @@ fn log_screen_error<E>(error: &E)
where where
E: core::fmt::Debug, E: core::fmt::Debug,
{ {
error!("TODO: {error:?}"); error!("graphics failed: {error:?}");
} }

View file

@ -1,7 +1,5 @@
//! Screen Output //! Screen Output
use alloc::vec;
use embedded_graphics::prelude::*; use embedded_graphics::prelude::*;
use embedded_graphics::{geometry, mono_font, pixelcolor, primitives, text}; use embedded_graphics::{geometry, mono_font, pixelcolor, primitives, text};
@ -46,13 +44,6 @@ where
{ {
let num_signals = data.len(); let num_signals = data.len();
if num_signals == 0 {
return clear(target);
}
#[allow(clippy::cast_possible_truncation, clippy::cast_possible_wrap)]
let sig_width = (WIDTH as i32) / (num_signals as i32);
let text_style = let text_style =
mono_font::MonoTextStyle::new(&profont::PROFONT_24_POINT, pixelcolor::Rgb565::WHITE); mono_font::MonoTextStyle::new(&profont::PROFONT_24_POINT, pixelcolor::Rgb565::WHITE);
let blank_style = primitives::PrimitiveStyleBuilder::new() let blank_style = primitives::PrimitiveStyleBuilder::new()
@ -79,6 +70,21 @@ where
.into_styled(style) .into_styled(style)
.draw(target)?; .draw(target)?;
if num_signals == 0 {
text::Text::with_alignment(
"No upcoming SGs",
geometry::Point::new(i32::from(WIDTH) / 2, 130),
text_style,
text::Alignment::Center,
)
.draw(target)?;
return Ok(());
}
#[allow(clippy::cast_possible_truncation, clippy::cast_possible_wrap)]
let sig_width = i32::from(WIDTH) / (num_signals as i32);
for (idx, sig) in data.iter().enumerate() { for (idx, sig) in data.iter().enumerate() {
#[allow(clippy::cast_possible_truncation, clippy::cast_possible_wrap)] #[allow(clippy::cast_possible_truncation, clippy::cast_possible_wrap)]
let offset = (idx as i32) * sig_width; let offset = (idx as i32) * sig_width;
@ -96,7 +102,7 @@ where
}; };
primitives::Circle::new( primitives::Circle::new(
geometry::Point::new(offset + circle_margin, 10), geometry::Point::new(offset + circle_margin, 10),
circle_dia as u32, circle_dia.cast_unsigned(),
) )
.into_styled(style) .into_styled(style)
.draw(target)?; .draw(target)?;
@ -105,7 +111,7 @@ where
// draw maneuver // draw maneuver
text::Text::with_alignment( text::Text::with_alignment(
&alloc::format!("{}", maneuver_to_str(&sig.maneuver)), &maneuver_to_str(sig.maneuver),
geometry::Point::new(centerline, 130), geometry::Point::new(centerline, 130),
text_style, text_style,
text::Alignment::Center, text::Alignment::Center,
@ -149,24 +155,24 @@ where
clear(target)?; clear(target)?;
let sig_width = (WIDTH as i32) / 3; let sig_width = i32::from(WIDTH) / 3;
let circle_dia = 50; let circle_dia = 50;
let circle_margin = (sig_width - circle_dia) / 2; let circle_margin = (sig_width - circle_dia) / 2;
for (idx, style) in vec![rd_style, ye_style, gn_style].iter().enumerate() { for (idx, style) in [rd_style, ye_style, gn_style].iter().enumerate() {
#[allow(clippy::cast_possible_truncation, clippy::cast_possible_wrap)] #[allow(clippy::cast_possible_truncation, clippy::cast_possible_wrap)]
let offset = (idx as i32) * sig_width; let offset = (idx as i32) * sig_width;
primitives::Circle::new( primitives::Circle::new(
geometry::Point::new(offset + circle_margin, 10), geometry::Point::new(offset + circle_margin, 10),
circle_dia as u32, circle_dia.cast_unsigned(),
) )
.into_styled(*style) .into_styled(*style)
.draw(target)?; .draw(target)?;
} }
// draw welcome text // draw welcome text
let centerline = (WIDTH as i32) / 2; let centerline = i32::from(WIDTH) / 2;
text::Text::with_alignment( text::Text::with_alignment(
"C-ITS Signal Phase Display\nWaiting for GNSS fix...", "C-ITS Signal Phase Display\nWaiting for GNSS fix...",
geometry::Point::new(centerline, 130), geometry::Point::new(centerline, 130),
@ -178,7 +184,7 @@ where
Ok(()) Ok(())
} }
fn maneuver_to_str(value: &applogic::v2x::map::Maneuvers) -> alloc::string::String { fn maneuver_to_str(value: applogic::v2x::map::Maneuvers) -> alloc::string::String {
alloc::format!( alloc::format!(
"{}{}{}", "{}{}{}",
if value.left_allowed { "<" } else { " " }, if value.left_allowed { "<" } else { " " },