Watch
0
0
Fork
You've already forked esp32-c_its-companion
0

screen: Show lane types

This commit is contained in:
Jannik Beyerstedt 2026-08-28 21:23:06 +02:00 • committed by Jannik Beyerstedt
commit 7bbdae9243
8 changed files with 172 additions and 40 deletions

View file

@ -23,6 +23,10 @@ where
prev_state: ScreenState,
hb_state: bool,
gnss_hb_state: bool,
// assets
#[cfg(feature = "spat")]
bike_image: tinytga::Tga<'static, pixelcolor::Rgb565>,
}
#[derive(Debug, Default, PartialEq, Eq)]
@ -94,12 +98,19 @@ where
const BIG_HEIGHT_THLD: u16 = 172;
pub fn new(target: D, display_size: DisplaySize) -> Self {
#[cfg(feature = "spat")]
let data = include_bytes!("../graphics/Sinnbild_Radfahrer_StVO_1992-25px-white.tga");
#[cfg(feature = "spat")]
let bike_image = tinytga::Tga::from_slice(data).expect("Failed to parse TGA image");
Self {
target,
size: display_size,
prev_state: ScreenState::Uninitialized,
hb_state: false,
gnss_hb_state: false,
#[cfg(feature = "spat")]
bike_image,
}
}
@ -307,7 +318,7 @@ where
// clear everything if number of signals has changed
self.clear();
} else {
// only clear maneuver and timing area otherwise
// only clear maneuver and timing area otherwise (lane type will clear itself)
let sig_total_height = 67 + if is_big_height { 20 } else { 0 };
primitives::Rectangle::new(
geometry::Point::new(0, 105 + self.size.offset_top),
@ -355,7 +366,38 @@ where
.into_styled(style)
.draw(&mut self.target)?;
// TODO: draw lane type?
// mark bike lanes which are not a vehicle lane, too
let lane_symbol_y_pos = 75;
if sig.usages.contains(&applogic::v2x::map::UsageType::Vehicle) {
// clear area
primitives::Rectangle::new(
geometry::Point::new(
centerline - (45 / 2),
lane_symbol_y_pos + self.size.offset_top,
),
geometry::Size::new(45, 25),
)
.into_styled(Self::BK_STYLE)
.draw(&mut self.target)?;
} else if sig.usages.contains(&applogic::v2x::map::UsageType::Bike) {
// bike symbol (45x25px)
embedded_graphics::image::Image::new(
&self.bike_image,
geometry::Point::new(
centerline - (45 / 2) + 1,
lane_symbol_y_pos + self.size.offset_top,
),
)
.draw(&mut self.target)?;
} else {
text::Text::with_alignment(
"?",
geometry::Point::new(centerline, lane_symbol_y_pos + 24 + self.size.offset_top),
Self::DEFAULT_TEXT_STYLE,
text::Alignment::Center,
)
.draw(&mut self.target)?;
};
// draw maneuver
text::Text::with_alignment(
@ -434,6 +476,13 @@ where
// 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),