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":"16e617b67378d8e31c2b70a71e4d87dcd1dc3210949c6d9ee38161607c2014cb","Cargo.toml":"fd37c4bcf27005e40b801a5e508c7b3008e9d4d07f409723adaa5f21400fe83d","Cargo.toml.orig":"8e52e03142c3a6ff3bfbadf17537f86b9a94219a3b5c5e0d9920df08b87f5878","README.md":"bac342a6d4e21c9e4934a414542d855f0f4a2ca6077b7efca5c04fa8df6d8869","build.rs":"0196fb21a218de974f9cbe9021ea542ebec1ec595b06328c35250742ee8d04f1","device.x":"dd23fbd88c82117deac640fa1d9aef3cdd684b9b8924ae5aa4cc44be38a25a51","src/aar.rs":"07daf4da00ce62fe2a81ce1fe6f8cc98eb183cdcf5814cab8f9bdb81fb27171a","src/aar/addrptr.rs":"c4db69c10af1585e7d727d5cb9826af237dc51882c3fe29a3f63adb13fadd482","src/aar/enable.rs":"9a5cb63951239ee2437587972eb4a98aef61e5bbb2b3b796bbcd682f28714ce1","src/aar/events_end.rs":"203c732cbe0d85c49066a4a175ee32d26041c215b5a5676a1d307c21b331a77f","src/aar/events_notresolved.rs":"1c2968218d6e9ba5d9a60efd74cd3fcf5aeaaf3efeb75d8e22d33c1b64869e21","src/aar/events_resolved.rs":"691e1aa1f7eadb280cc2691a6053ff4a304adc66435e34b0c3ee3ca9fff40bd9","src/aar/intenclr.rs":"8bc3c4e00d8d638969c998b3dcb15fcf1799cb8f36b7f85f1046e984b1d16124","src/aar/intenset.rs":"bff6068cb34fc8cc4864f905efd2252cfa6a47e68ac430c995572670afac283f","src/aar/irkptr.rs":"1fa88b9a29496c36f8f78ad499e10c1c05456943d5bfb7cfe3d63f031f14bd0a","src/aar/nirk.rs":"4232a823cf677d3958bb190cee7e9af11b5f41df101578283b83a0d2ad22eff1","src/aar/scratchptr.rs":"f4d0da4a538968bc3fb3dc5c85e544dfcbb267fc02849d9dfe9460053263a462","src/aar/status.rs":"79c07d04aef566dbf6075a8deb54fa05cb48ae8dbfb4bfefdf36ddaabc29518b","src/aar/tasks_start.rs":"f0b4fe21c0c55a616f9275541aa16133f3d1c6ec0c570bb4cb36b6b1104cdaa8","src/aar/tasks_stop.rs":"3e76073acade3359d0f24ca5e9ca9f32579c94f00fd8b531a4b5510eaaf624e7","src/bprot.rs":"c5e7b7d6da06ddc69493a34311c84c94b11c92e17e6af4375cf4626902cfdf24","src/bprot/config0.rs":"9fa80e418aeded59ca28f9cc8110fefa92d52ed94793caed584525f1cc25716f","src/bprot/config1.rs":"3b4781166ef7691cf9275c89e1cf06bfe16560a3c92b540a779bc827353ad3f8","src/bprot/disableindebug.rs":"087723f06d32a00445edf694056b24981c01fe1bf31016ae9db463fc3b5671e4","src/ccm.rs":"a2c77adb5c2d6eedb5b34ff420d86adc023fe48e790475657c6c6527a2fa7730","src/ccm/cnfptr.rs":"8e10303b2019438bf8ad5b9b115ee875c13679655d17da6e7eacb6d1ec50bd10","src/ccm/enable.rs":"32ee95dd3e53bfc9ec46d385b66ee3cfbe540b9115993550e0b63f5904d63c21","src/ccm/events_endcrypt.rs":"7d6adf8db87e2158cbbb00e6b23d17e8ac488170ae33f8fa24125b503fa6d719","src/ccm/events_endksgen.rs":"37b71d583b2af9d6811b6fc469fb1ca5cd7a22ff0c12ecf2ee536dd44a735d51","src/ccm/events_error.rs":"51ecdaace2ea663fe6d8ebe3ceacaccd419f13e6007505957fa16fa473a71330","src/ccm/inptr.rs":"ff037087779f66ee364abefe58291fbb38a78859c835efd5c8e7ae5b5792f016","src/ccm/intenclr.rs":"bf8a1f24fcf21c017c503e574c5896a61a0b2e1d40e46ec8755cfd5586d32ed8","src/ccm/intenset.rs":"ef13b66eacc822ee4b8321dfa4ce2ee89f137c5629667600a7fa8d416764d14f","src/ccm/maxpacketsize.rs":"28ad81df6d39907709bb4a9131646f070e11d2856a6fdd753ecf019418886f12","src/ccm/micstatus.rs":"3278103acbb4e8a092c28bb1b4df52e9a7a56b956977e62a65d628fe65b5443b","src/ccm/mode.rs":"5bfd662f031f70aef8d3032f9e576183802580f9dc917bbf439823a639453b19","src/ccm/outptr.rs":"769df1e86004fd76f381a344d467356529a7f309d2191c3601532fff299e11ce","src/ccm/rateoverride.rs":"9b20240a123bab4b989a7daf42034aaf080f8e893f4b9aaaeb1b2c817d8f4772","src/ccm/scratchptr.rs":"e9dad5a681f2e06c86069bfd89079fd2b74881521d5eed6198352921dd45bca4","src/ccm/shorts.rs":"eee1daf215943602937cb7c922a74c3d454fce44669900ac7835409c3e816711","src/ccm/tasks_crypt.rs":"4cb266d24b5a25ccbe45e93c744ce4151b25062a67d818cbcc088b10086dcf4d","src/ccm/tasks_ksgen.rs":"f4e04f33f784fb298f1d0fbacbe53397b26b1f7e5a9c88703f960ccc772479ee","src/ccm/tasks_rateoverride.rs":"f34a685786be857b56416623640927f582b687a4051b2bdce4aae6b5074df0f0","src/ccm/tasks_stop.rs":"bcf624bb3d46fca75c11c02bf6e22a07c1f716c7a6f0d0d91254530dfd75fb1c","src/clock.rs":"18baafe7aa0a5650aafcbc63bfb4c366f561d262f8db5df54ed3702ff0ab1e07","src/clock/ctiv.rs":"cecbc54dc16c4788b006dc8293f4d3a91e346fc1e505eca8a7f2b217b10c38bc","src/clock/events_ctto.rs":"b6b7d23e782740ce8e45b74f9e038d6cd094085d80c2e1bf084dd209ca7f5cb7","src/clock/events_done.rs":"d47961393cba099a75558b4a28de8ad6d21ebe62b3628b95995a3010b627cc93","src/clock/events_hfclkstarted.rs":"1416a98df250265e3543a6b881b300a18325c72ff7e388207d529ba56c7c61d1","src/clock/events_lfclkstarted.rs":"46c574c9e21b07ad69d5495815856a230e258146098cd51964f89bd511cab26d","src/clock/hfclkrun.rs":"ab621d0295a37c07a876d156102bac0c4790725864ec84c699422235157550b4","src/clock/hfclkstat.rs":"9510d5a4f5192854e976faaa33e47aa894d1e4b7931e3aa5265c3ae6b63db36b","src/clock/intenclr.rs":"56c63500182ad846c4dfd6c43a08bbd2cd29ec3c327bb3e63fa0ad19d054587c","src/clock/intenset.rs":"c5e49c667f86aa173796a63598b4f688f6dc345b550117a8b53dc2b1af25946b","src/clock/lfclkrun.rs":"ba062438e43618deaa8e834875a15b1a535469393e9796f6d85281129af2c397","src/clock/lfclksrc.rs":"445d5ffb5e1ea2e1ea3d1f1847442dbc3b96569313Line truncated