fix: invert only RX/TX letters, not surrounding spaces in display
This commit is contained in:
2 files changed
+42
-18
No files matched your search
Binary file not shown.
+42
-18
@@ -27,17 +27,18 @@ const RSSI_MIN: i16 = -120;
|
|||||||
const RSSI_MAX: i16 = 0;
|
const RSSI_MAX: i16 = 0;
|
||||||
|
|
||||||
/// Render the boot splash screen.
|
/// Render the boot splash screen.
|
||||||
pub fn splash(
|
pub fn splash(target: &mut impl DrawTarget<Color = BinaryColor>, board_name: &str, version: &str) {
|
||||||
target: &mut impl DrawTarget<Color = BinaryColor>,
|
|
||||||
board_name: &str,
|
|
||||||
version: &str,
|
|
||||||
) {
|
|
||||||
let _ = target.clear(BinaryColor::Off);
|
let _ = target.clear(BinaryColor::Off);
|
||||||
|
|
||||||
let title_style = MonoTextStyle::new(&FONT_9X15_BOLD, BinaryColor::On);
|
let title_style = MonoTextStyle::new(&FONT_9X15_BOLD, BinaryColor::On);
|
||||||
let sub_style = MonoTextStyle::new(&FONT_6X10, BinaryColor::On);
|
let sub_style = MonoTextStyle::new(&FONT_6X10, BinaryColor::On);
|
||||||
|
|
||||||
Text::with_alignment("DongLoRa", Point::new(W / 2, 24), title_style, Alignment::Center)
|
Text::with_alignment(
|
||||||
|
"DongLoRa",
|
||||||
|
Point::new(W / 2, 24),
|
||||||
|
title_style,
|
||||||
|
Alignment::Center,
|
||||||
|
)
|
||||||
.draw(target)
|
.draw(target)
|
||||||
.ok();
|
.ok();
|
||||||
|
|
||||||
@@ -45,7 +46,12 @@ pub fn splash(
|
|||||||
.draw(target)
|
.draw(target)
|
||||||
.ok();
|
.ok();
|
||||||
|
|
||||||
Text::with_alignment(board_name, Point::new(W / 2, 54), sub_style, Alignment::Center)
|
Text::with_alignment(
|
||||||
|
board_name,
|
||||||
|
Point::new(W / 2, 54),
|
||||||
|
sub_style,
|
||||||
|
Alignment::Center,
|
||||||
|
)
|
||||||
.draw(target)
|
.draw(target)
|
||||||
.ok();
|
.ok();
|
||||||
}
|
}
|
||||||
@@ -64,31 +70,49 @@ pub fn dashboard(
|
|||||||
Some(cfg) => {
|
Some(cfg) => {
|
||||||
// Row 0: state + frequency (full precision)
|
// Row 0: state + frequency (full precision)
|
||||||
let mut buf: String<32> = String::new();
|
let mut buf: String<32> = String::new();
|
||||||
let state_str = match status.state {
|
|
||||||
RadioState::Idle => "IDLE",
|
|
||||||
RadioState::Receiving => "RX",
|
|
||||||
RadioState::Transmitting => "TX",
|
|
||||||
};
|
|
||||||
let freq_mhz = cfg.freq_hz / 1_000_000;
|
let freq_mhz = cfg.freq_hz / 1_000_000;
|
||||||
let freq_khz = (cfg.freq_hz % 1_000_000) / 1_000;
|
let freq_khz = (cfg.freq_hz % 1_000_000) / 1_000;
|
||||||
let _ = write!(buf, "{:<4} {}.{:03}MHz", state_str, freq_mhz, freq_khz);
|
let _ = write!(buf, " {}.{:03}MHz", freq_mhz, freq_khz);
|
||||||
Text::new(&buf, Point::new(0, FONT_H - 1), style)
|
Text::new(&buf, Point::new(0, FONT_H - 1), style)
|
||||||
.draw(target)
|
.draw(target)
|
||||||
.ok();
|
.ok();
|
||||||
|
|
||||||
// Inverted state indicator when active
|
// State indicator: inverted "RX" or "TX", plain "IDLE"
|
||||||
if status.state != RadioState::Idle {
|
match status.state {
|
||||||
let state_w = state_str.len() as i32 * 6;
|
RadioState::Idle => {
|
||||||
|
Text::new("IDLE", Point::new(0, FONT_H - 1), style)
|
||||||
|
.draw(target)
|
||||||
|
.ok();
|
||||||
|
}
|
||||||
|
RadioState::Receiving => {
|
||||||
|
let x = 0;
|
||||||
|
let char_w = 6;
|
||||||
|
let text_w = 2 * char_w; // "RX" = 2 chars
|
||||||
let mut inv_style = MonoTextStyle::new(&FONT_6X10, BinaryColor::Off);
|
let mut inv_style = MonoTextStyle::new(&FONT_6X10, BinaryColor::Off);
|
||||||
inv_style.set_background_color(Some(BinaryColor::On));
|
inv_style.set_background_color(Some(BinaryColor::On));
|
||||||
Rectangle::new(Point::new(0, 0), Size::new(state_w as u32, FONT_H as u32))
|
Rectangle::new(Point::new(x, 0), Size::new(text_w as u32, FONT_H as u32))
|
||||||
.into_styled(PrimitiveStyle::with_fill(BinaryColor::On))
|
.into_styled(PrimitiveStyle::with_fill(BinaryColor::On))
|
||||||
.draw(target)
|
.draw(target)
|
||||||
.ok();
|
.ok();
|
||||||
Text::new(state_str, Point::new(0, FONT_H - 1), inv_style)
|
Text::new("RX", Point::new(x, FONT_H - 1), inv_style)
|
||||||
.draw(target)
|
.draw(target)
|
||||||
.ok();
|
.ok();
|
||||||
}
|
}
|
||||||
|
RadioState::Transmitting => {
|
||||||
|
let char_w = 6;
|
||||||
|
let x = 2 * char_w; // start at column 2 (third character position)
|
||||||
|
let text_w = 2 * char_w; // "TX" = 2 chars
|
||||||
|
let mut inv_style = MonoTextStyle::new(&FONT_6X10, BinaryColor::Off);
|
||||||
|
inv_style.set_background_color(Some(BinaryColor::On));
|
||||||
|
Rectangle::new(Point::new(x, 0), Size::new(text_w as u32, FONT_H as u32))
|
||||||
|
.into_styled(PrimitiveStyle::with_fill(BinaryColor::On))
|
||||||
|
.draw(target)
|
||||||
|
.ok();
|
||||||
|
Text::new("TX", Point::new(x, FONT_H - 1), inv_style)
|
||||||
|
.draw(target)
|
||||||
|
.ok();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Row 1: BW (full) SF CR
|
// Row 1: BW (full) SF CR
|
||||||
buf.clear();
|
buf.clear();
|
||||||
|
|||||||
Reference in new issue
Block a user