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:
swaitsandClaude Opus 4.6 committed 2026-03-29 20:42:54 -06:00
1 parent 7064110293
commit 3102fc747a
17624 files changed
+4564928 -38

No files matched your search

+1
View File
@@ -0,0 +1 @@
{"files":{".cargo_vcs_info.json":"5964ffb6a366f55e31eff0e190c17ac30c103b1048f7433ca3ef79dafd7a7517","CHANGELOG.md":"dab6c04e69d4b17ddd7e7616b8a4eeba9415d51c857fe92ed09759740aca3f44","Cargo.toml":"875bbd91edcad1f119f8e1c213a6a2bfccc14d0b95e93ebb3fd82bf332b5dfd7","Cargo.toml.orig":"054b01dad5cfbae78bce93d62e6e778dae9bb0ac29838962d1e6e06a97caa177","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"0b74dfa0bcee5c420c6b7f67b4b2658f9ab8388c97b8e733975f2cecbdd668a6","README.md":"59a3ce4c55e0429024d583218dc13a6dd67025913916e991788c6614db820499","build.rs":"ba7ab1735d3642c53562d1223a6eb54c2392e619ade3005e0deee3fc4229feea","src/archive.rs":"d6cead723242c26db2967b63385b79ed2008980a8c64b123a5eecffd7ed388fc","src/build/bytes.rs":"3c3ac3bed7e61914509358922baf72729dab6ae47207f6bc83380b4a85ecf711","src/build/elf.rs":"3f5a80731ea2ad6f0c40dab2dd888f33808ee22e75bed5ac7b9926a6920d5383","src/build/error.rs":"6b1f4325478559dd6de8d94e7d2f59cface6eac10b3d4a7d08ccbafb2b7a3810","src/build/mod.rs":"beac0a3fb3a479b7948f2a0235e6872a547401baecd1e92320cf373e5db05a07","src/build/table.rs":"20348b635d8855b78b5c12e3cc91f804cb09b6cb38e78473ba7a300594398dbd","src/common.rs":"c92a8c1507d93009068b5672bada35148f4e5c3e8642a8516fb7832aecb08c26","src/elf.rs":"8919d917dbddd2a596fa27be69e44d4ab61d6d002a825591aa5ea10851e4a79e","src/endian.rs":"90c88685dc9c1d503e30d3c934639e72ae460f6e371b475ba853d26db0bc525a","src/lib.rs":"423f6c080744179671eb8a403dd60ea6c8ebbcff357c1f27687f0b31de3b6fc9","src/macho.rs":"991b77798570fbed7a989481c945f62a5d4df89380a2508e198e707f213f2e46","src/pe.rs":"ee0e600ee36f1ebe98a5bf3f314d20b14caeebb02ad32b60d261d1b8834d1771","src/pod.rs":"235ab16a4bea8f2a52a3edda78f1b893bd8166ae14f86dfedcce817005bec15f","src/read/any.rs":"4b94010f43a79af321f3c1d51f8a741dd18004f5f049b18676588bb629c2bff6","src/read/archive.rs":"6a60469f97d710164998ed81ca7fbbebfcd0db392e65afd0b621e52269683210","src/read/coff/comdat.rs":"2c5a1b0b69c7b10b79f2ec305480942b9e0dd693b8f1790b0f3e9d918d805560","src/read/coff/file.rs":"2c4fe0ad41236f5d3cb9d5f6c77a4718984f9a6f73a7d3a6dc820cabced6dd4a","src/read/coff/import.rs":"3b7cf82936e989aba71d3f4aea9edeffe314e0e729a57fad93be37287abc8ddb","src/read/coff/mod.rs":"c3b0c4f09993b07a85fda3dd2de9c80258aaadce6c0598eb25e55fab4c6bbf1c","src/read/coff/relocation.rs":"9d203a15fdf0c4a7a5e4085ff8561bffc58ad897c6a0e30cb477bb01cdcbd419","src/read/coff/section.rs":"0311f810d0a23496895d2506aab9c04fe13837ec589e787cfb93e44a82e3e4f3","src/read/coff/symbol.rs":"30275b6a1ad2b86b9bdef26efe0ba49cd16cc9434696361d16876adbe2f80536","src/read/elf/attributes.rs":"f758e0f9a8b906947f911259d8c3b924da4a457c3a0c46340bda48e97937ac8a","src/read/elf/comdat.rs":"1390d60a405d97bcd05a5ceb01d32f1285d649fd438732686a50cb69380be4a9","src/read/elf/compression.rs":"726bb1ca96a480ac2a0c8ccaa4c2291d62ca6c4af2b1a2e43b74ae7be17f6d75","src/read/elf/dynamic.rs":"c934f8b72d71ed39ff129ce37a8177b5bf12fba93695914eae48112bf89702b4","src/read/elf/file.rs":"e4a9f2a461fedef285c2eef78a1402e4435929aedfb81177a67dac6bc47eb2f0","src/read/elf/hash.rs":"c167aab3a9d1baa1ae915bd7bf4e4b97320dd758f8691372f9ecd518af9dcb1c","src/read/elf/mod.rs":"7c0d4d10c1055f57184f470aa014e6358394ec95019a74da8d5079d275437d0b","src/read/elf/note.rs":"9fedb1f0446c751e544b51c334e32271bb9f993474e1573bb342d26726205f82","src/read/elf/relocation.rs":"13419b61568787780a7ff99b4828a69ecd64503c51af1595d989a784a84583a4","src/read/elf/section.rs":"4ed91bd4f4340f4b98e6683d2e10aee222403191bd722ef9562f2c73400a26d2","src/read/elf/segment.rs":"3fbfada9cdf09920235068607a1c2d4daf61889aa16aa36a242c9b908886ab02","src/read/elf/symbol.rs":"70d39f5088e53394d6c7ef9fa0c5329e69ad48f4019ae86a8dbba3097e72e9eb","src/read/elf/version.rs":"7fe8f1b59b52f4a9e9cd6be28307149f6ac87bdc0c657e8c4a1579afe2251d49","src/read/gnu_compression.rs":"793af03a626ce1be0de9554c224ccbcd0eda9e4dc1378d70317da9c285d6aa99","src/read/macho/dyld_cache.rs":"ecc361b38cea542b4578dabd08cc0540e0619f32f5a7fef8b977ba972b13178d","src/read/macho/fat.rs":"79c48ff8492b6b721a8b965278d3f789262d20c53d5d1fe318a1ce2da59e73fc","src/read/macho/file.rs":"97ba21d942fa11cdca2ad8e2386af1a1485e9d809d2c20dd4a9ee565167a9c38","src/read/macho/load_command.rs":"b212708f552ab47b06aabe036665d844c5e7b210b741692da2ad0d442f812271","src/read/macho/mod.rs":"0e97e28f379766511f33d8ccb97eaa690a352f9180080a376a86516249b1bdd8","src/read/macho/relocation.rs":"f5ee46cfe6d852e7d09f11610fb0a8f94d473f7e443037f97ff8d8fa9ffa6efc","src/read/macho/section.rs":"aa6c5fcb0d9c5f63c8f59cc69e0d20bc3aea5904776fe4a0be0635dc780c84c4","src/read/macho/segment.rs":"5a1d893c2fdae83baf7769e629eacae68142e99ded55b70153d25950006914f2","src/read/macho/symbol.rs":"c2f86418e4923425e8ae819f700a3985151cb47522b8fad676dd48eebcb00bea","src/read/mod.rs":"b713d5d41f1145368335db2e05905c23d3596ea072a5d67073e2e2158c27dee3","src/read/pe/data_directory.rs":"bf83c1ae0a71fd9908c1aa0cafb8718fece85d6977adc105130b45033928a355","src/read/pe/export.rs":"3e9c8f6b5409fc205ccf183f9b65446ce54b948ac00bc1a0481542Line truncated