feat: add display UI with splash screen, dashboard, and RSSI sparkline
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>
This commit is contained in:
17624 files changed
+4564928
-38
No files matched your search
+58
@@ -0,0 +1,58 @@
|
||||
use object::read::{Object, ObjectSection};
|
||||
use object::{read, write};
|
||||
use object::{
|
||||
Architecture, BinaryFormat, Endianness, RelocationEncoding, RelocationFlags, RelocationKind,
|
||||
SymbolFlags, SymbolKind, SymbolScope,
|
||||
};
|
||||
|
||||
#[test]
|
||||
fn reloc_overflow() {
|
||||
let mut object =
|
||||
write::Object::new(BinaryFormat::Coff, Architecture::X86_64, Endianness::Little);
|
||||
let text = object.section_id(write::StandardSection::Text);
|
||||
object.append_section_data(text, &[0; 4], 4);
|
||||
let symbol = object.add_symbol(write::Symbol {
|
||||
name: b"f".to_vec(),
|
||||
value: 0,
|
||||
size: 4,
|
||||
kind: SymbolKind::Text,
|
||||
scope: SymbolScope::Linkage,
|
||||
weak: false,
|
||||
section: write::SymbolSection::Section(text),
|
||||
flags: SymbolFlags::None,
|
||||
});
|
||||
for i in 0..0x10000 {
|
||||
object
|
||||
.add_relocation(
|
||||
text,
|
||||
write::Relocation {
|
||||
offset: i,
|
||||
symbol,
|
||||
addend: 0,
|
||||
flags: RelocationFlags::Generic {
|
||||
kind: RelocationKind::Absolute,
|
||||
encoding: RelocationEncoding::Generic,
|
||||
size: 64,
|
||||
},
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
}
|
||||
let bytes = object.write().unwrap();
|
||||
|
||||
//std::fs::write(&"reloc_overflow.o", &bytes).unwrap();
|
||||
|
||||
let object = read::File::parse(&*bytes).unwrap();
|
||||
assert_eq!(object.format(), BinaryFormat::Coff);
|
||||
assert_eq!(object.architecture(), Architecture::X86_64);
|
||||
|
||||
let section = object.sections().next().unwrap();
|
||||
assert_eq!(section.name(), Ok(".text"));
|
||||
|
||||
let mut i = 0;
|
||||
for (offset, _relocation) in section.relocations() {
|
||||
assert_eq!(offset, i);
|
||||
i += 1;
|
||||
}
|
||||
assert_eq!(i, 0x10000);
|
||||
}
|
||||
Reference in new issue
Block a user