Implement full SSD1306 OLED display support: - Splash screen on boot (1.5s) with project name, version, board - Dashboard showing radio state, config, counters, RSSI/SNR - RSSI history sparkline (64-sample ring buffer, 2px-wide bars) - DisplayOn/DisplayOff host commands routed via dedicated channel - Pure render functions against generic DrawTarget (no hardware coupling) - Display on/off control bypasses radio task entirely Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
37 lines
1004 B
Rust
37 lines
1004 B
Rust
use embedded_graphics::{
|
|
image::ImageRaw,
|
|
mock_display::MockDisplay,
|
|
mono_font::{mapping::StrGlyphMapping, DecorationDimensions, MonoFont, MonoTextStyle},
|
|
pixelcolor::BinaryColor,
|
|
prelude::*,
|
|
text::{Baseline, Text},
|
|
};
|
|
|
|
const DATA: &[u8] = &[0xAA, 0x55];
|
|
|
|
#[test]
|
|
fn custom_font() {
|
|
let mapping = StrGlyphMapping::new("01", 0);
|
|
|
|
let font = MonoFont {
|
|
image: ImageRaw::new(DATA, 8),
|
|
character_size: Size::new(2, 2),
|
|
character_spacing: 0,
|
|
baseline: 0,
|
|
strikethrough: DecorationDimensions::default_strikethrough(2),
|
|
underline: DecorationDimensions::default_underline(2),
|
|
glyph_mapping: &mapping,
|
|
};
|
|
|
|
let character_style = MonoTextStyle::new(&font, BinaryColor::On);
|
|
|
|
let mut display = MockDisplay::new();
|
|
Text::with_baseline("01", Point::zero(), character_style, Baseline::Top)
|
|
.draw(&mut display)
|
|
.unwrap();
|
|
display.assert_pattern(&[
|
|
"# # ", //
|
|
" # #", //
|
|
]);
|
|
}
|