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":"d1391caaf98f29365a75d3cccdd1474550f5d1673095c755466d27fda3c3b3d1","Cargo.toml":"70aef363bb8abc1aaaa8e7f21281c9fccc8da2d64ddac7873ecd7ff5dc944d00","Cargo.toml.orig":"e3a4e9ae28adc7ee76cb06044da659910dd949f68a8df70177e9f22c0c006098","README.md":"bac342a6d4e21c9e4934a414542d855f0f4a2ca6077b7efca5c04fa8df6d8869","build.rs":"0196fb21a218de974f9cbe9021ea542ebec1ec595b06328c35250742ee8d04f1","device.x":"a0f6c25ad8663373aa0012a63188bfc6155eb0d8ea00d5742c373d19ef4bb9e8","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":"015e28702c009e20549ba160660c20b68b5d915f405f27f46c3a14c1462c6ed1","src/aar/status.rs":"79c07d04aef566dbf6075a8deb54fa05cb48ae8dbfb4bfefdf36ddaabc29518b","src/aar/tasks_start.rs":"f0b4fe21c0c55a616f9275541aa16133f3d1c6ec0c570bb4cb36b6b1104cdaa8","src/aar/tasks_stop.rs":"3e76073acade3359d0f24ca5e9ca9f32579c94f00fd8b531a4b5510eaaf624e7","src/acl.rs":"cea7bb0f0e61f59d94ad26c3be098dafa0ac59924f3d53770b54bdb085331f44","src/acl/acl.rs":"2f01cc31eff4b8a5f976b4877f6456b3183040abb94d016d910692c099c7059d","src/acl/acl/addr.rs":"3aede366f5bb8f2025cdabaddf8918a3034da7284fdf0684a4773cd9e1425ede","src/acl/acl/perm.rs":"a0147939569cbffc745861d346e0af7b1f641db6086e5eef514b1b5903f343c4","src/acl/acl/size.rs":"e1f3c74c0533e05cb64caf5566ddb903c3ec0de67a4967ae1ec0c3dc557ecc4d","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":"5999db2692adffc4224dc7302ed0644f71346d60c4b1a10aaeea4754407633d2","src/clock/ctiv.rs":"cecbc54dc16c4788b006dc8293f4d3a91e346fc1e505eca8a7f2b217b10c38bc","src/clock/events_ctstarted.rs":"9b0d95fd9f193e912615d92feebc685e11e3ff364b6d37e5d80e3d0493d7e2a2","src/clock/events_ctstopped.rs":"078842758c8a9321d8802229f8d515fa6137a1eebf49a1915cb20e359397669a","src/clock/events_ctto.rs":"b6b7d23e782740ce8e45b74f9e038d6cd094085d80c2e1bf084dd209ca7f5cb7","src/clock/events_done.rs":"2ce659d37a8c5544497c6853e808cde6892a8c5368feec77f08470ef52e0cb67","src/clock/events_hfclkstarted.rs":"80ca51d2f9ec5854498ca4dc63d0c84636e76ef72a2bb38fbf5336b25abee3e9","src/clock/events_lfclkstarted.rs":"46c574c9e21b07ad69d5495815856a230e258146098cd51964f89bd511cab26d","src/clock/hfclkrun.rs":"ab621d0295a37c07a876d156102bac0c4790725864ec84c699422235157550b4","src/clock/hfclkstat.rs":"9510d5a4f5192854e976faaa33e47aa894d1e4b7931e3aa5265c3ae6b63db36b","src/clock/hfxodebounce.rs":"c633b35b522d04fc5d5020d5061037240c9222a5cLine truncated