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":"3608d2b569a1974ac9faba475a48d695dfb953d9865cecb565c0bc7e6a378199","CHANGELOG.md":"7977ec69a123055be14c86f811b75f2fe88f9a9398a0a5650205d86b5170e870","Cargo.lock":"fe86adea3378e54f9f5437cb1445be8269d2fd8d5093baf22d1483665aeb0026","Cargo.toml":"b38702eb95f08710bd9136181d157a2b8e188271a3fbf0eb56f32ef2b7f561d2","Cargo.toml.orig":"1bde7b5bcf1294bc6eceafa90257325c04ae0cb8fba2c4027c6f09c9d9f2c92c","LICENSE":"8ea93490d74a5a1b1af3ff71d786271b3f1e5f0bea79ac16e02ec533cef040d6","README.md":"ec0726c60b89eb7c4a4c9265117dfaf2e3ab69a032158678893afb85f2a530aa","clippy.toml":"c5ef3489cce9d5ed7c766e6486a18a0a3dc0f4c677fcf05166e1d47104f6cd3f","compiletests.sh":"a5628eb53fa881733ede086c33a2d5751cb86fe41ca6fd8ee3c4892c6c800d68","examples/automatic_bounds.rs":"2950c8d33bb40f095decba1990d7d0bcd48dffc6e9b7cefce2fcb3818ecf1d18","examples/consume_fields.rs":"ce436936441f1f6734f47074e6625ebf64f15180b9c126a58e24aaa33613b59c","examples/expr_with.rs":"0a250af2118d85c44c0a6a079633b6913993f4aabf59b961a1411c6cef09ad5f","examples/fallible_read.rs":"a71e00798911c355cd63eddd3a08c24c5f752357c3246968167af958846b1e02","examples/from_word_and_expr.rs":"96774bf399df14a4928cb9591c5e377023911171350a48886aecac68f68c7204","examples/heterogeneous_enum_and_word.rs":"1c3b9dc2fa90e343d8ea4afa66751ce5687492b600ba4df3eb1e70ba2cf70a72","examples/shorthand_or_long_field.rs":"ec2e2b155fd0803c80f98d0ba94e8419dd7307012ccfb916b8f752925a295d55","examples/supports_struct.rs":"08c5cc46400a0e5cf811c0d254a37b42de94b34cd04ac801069105bc792051f6","src/lib.rs":"81bb4648beef113a7fc84737301f14e0116165ec8bb590df205471f82489b619","src/macros_public.rs":"7d2ce0c5026227ef7854db11d7a885ad891255438b2e49bbdfda56fa2f92feec","tests/accrue_errors.rs":"1777c14e82b5fc6c95e337f5cd02589690b8eb7b15ab29c0f1403fff2647bc6d","tests/attrs_with.rs":"81a24bfdbcd0f0797790cd38ee8093dce6b8b9a37354936a7b0c48121f4c7a74","tests/compile-fail/attr_forwarded_and_parsed.rs":"de9cdd2403dc7ea4d89b29d016d5a80608f9eab7d5cc7447121ed9284128c979","tests/compile-fail/attr_forwarded_and_parsed.stderr":"0b103deb1a077d17c126ff521f006cf8f9782cca88b86d46add4ae9f5c570c9b","tests/compile-fail/attrs_with_bad_fn.rs":"70ab2eee7619caaf9a05e0dc0f68ef41d396244dc373bf5a63b5756e754267cc","tests/compile-fail/attrs_with_bad_fn.stderr":"470bec1069cd9b230460a3b63ac5b003bf538220a427663ea41f886cf5e31180","tests/compile-fail/attrs_without_forward_attrs.rs":"b11c9d344e8e340509f7bd57f06dec7e18350c625ab48c17b4bebe137a71c0a8","tests/compile-fail/attrs_without_forward_attrs.stderr":"008e8e998749d18ece4c1d0e8a3cfce964a62f24149e290426da9c6d572a4f12","tests/compile-fail/default_expr_wrong_type.rs":"e09889ac3a243bd6096a0ef7076822b146f1481b70aae703e170ea6527071448","tests/compile-fail/default_expr_wrong_type.stderr":"9c7971d8aaf92e683fa5fa698d172fd735bda553f6e70303a6105b81800b53de","tests/compile-fail/duplicate_word_across_variants.rs":"741d879dfe4d1ba630d6c773a32a20135bb9d7e7aa0bc35a604d9a73db967872","tests/compile-fail/duplicate_word_across_variants.stderr":"e25d86df4bd5b558c6588688171767e234ffd3a859b942b6573cf74c0eafd2b8","tests/compile-fail/duplicate_word_on_variant.rs":"eac1353adb1e453f97e7f7014e0a6e3126ceb1650ca049d10a7fbaeaf0997c9e","tests/compile-fail/duplicate_word_on_variant.stderr":"8ba3499b81db67ac00b69b43572fa870fdfaa2b6831d47c0b611a00f1f563885","tests/compile-fail/flatten_meta_conflicts.rs":"daf9a4d71cf9aa079979b492dd0a2f0d98d58ff65aa512a40496faa40246231d","tests/compile-fail/flatten_meta_conflicts.stderr":"6278b76248c56ff41256b452acdab6be81c202f5d60e222a86f955eb4cbf664c","tests/compile-fail/flatten_multiple_fields.rs":"359291f3ddbcab89fd8cbe8f09bd7d03ad7c4bf77142027e9df8e6bbd6e400e7","tests/compile-fail/flatten_multiple_fields.stderr":"f9395a26eef518946d09d270fcff9fe8c7e209cb6168fb6d113837d447e04f60","tests/compile-fail/from_expr.rs":"d3d1450939b0c7516c3b9ecfe72162598c476dc024ecf27ed15861ebc64ccdae","tests/compile-fail/from_expr.stderr":"5ec4c6dbc7509000744caa71eb54526bac4a4618990d54d479efc15247161ee9","tests/compile-fail/from_word.rs":"7ea2e4bdc38ee1bbf8a76e9c0f7db246eab5635bc4b23f79b047302d211863ed","tests/compile-fail/from_word.stderr":"815d14d9dd2f6d1c4371f244848356e8cd3ada0effa1fa9a4844e4a42df6f339","tests/compile-fail/not_impl_from_meta.rs":"20ef167d88ea06967c26a05234d3b1787f0695d45b4ab1150bf9dc77625f9c74","tests/compile-fail/not_impl_from_meta.stderr":"d945e09111b290f2fa7227332da193fec99ad4ebdcb5f0a4364e3d0c9b0dffed","tests/compile-fail/skip_field_not_impl_default.rs":"5cb7e2e68d7dc42e6508eb0c170869179f127cf641b44f08f6403760f30c469b","tests/compile-fail/skip_field_not_impl_default.stderr":"9f66e34ce32cbab54776006fc03bb776ec4d4a6ed6310139ea66c7cf7ae9920e","tests/compile-fail/with_closure_capture.rs":"2d88094a83ef4bee3429a948d51e76bc5bd81865ddda58179a127a0ecb4be53c","tests/compile-fail/with_closure_capture.stderr":"496dbe3b4251e149d95c35c1cd816f6127b7129ba81bcb5d682912d082ce5111","tests/compile-fail/word_on_wrong_variant_type.rs":"1f83eaca4da3187d411926d2fef907e7d7000479c326012f8f9fc0ee5be264Line truncated