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
@@ -0,0 +1 @@
|
||||
{"files":{".cargo_vcs_info.json":"5632fdbace3e06746bcdd555c8910e6c1003f803b51e22b3d53ddd48384b8520","Cargo.lock":"4fce5a7767aed1733a759c567dcc51cedac7d219767a1a4e98d6eabf074f4a5d","Cargo.toml":"b3e738adb3b693f2115fcb5afc7a407b2cd681005785d6a14de1bb4b0b02afc5","Cargo.toml.orig":"1be1d1539cf8f7729bd6a8e149c7969f1b876f07343d64da35d87ea83448c7fa","LICENSE":"8ea93490d74a5a1b1af3ff71d786271b3f1e5f0bea79ac16e02ec533cef040d6","src/lib.rs":"728be3bb12c9cdaaf0520bce87e489a0820e436c78fa3627e238fc1acc11dd7f"},"package":"fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"git": {
|
||||
"sha1": "82a51e0b65b158de02ffb5d753ea4cd03529743b"
|
||||
},
|
||||
"path_in_vcs": "macro"
|
||||
}
|
||||
+72
@@ -0,0 +1,72 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "darling_core"
|
||||
version = "0.20.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
|
||||
dependencies = [
|
||||
"fnv",
|
||||
"ident_case",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "darling_macro"
|
||||
version = "0.20.11"
|
||||
dependencies = [
|
||||
"darling_core",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fnv"
|
||||
version = "1.0.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
|
||||
|
||||
[[package]]
|
||||
name = "ident_case"
|
||||
version = "1.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.86"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.37"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.79"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
version = "1.0.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
# with all versions of Cargo and also rewrite `path` dependencies
|
||||
# to registry (e.g., crates.io) dependencies.
|
||||
#
|
||||
# If you are reading this file be aware that the original Cargo.toml
|
||||
# will likely look very different (and much more reasonable).
|
||||
# See Cargo.toml.orig for the original contents.
|
||||
|
||||
[package]
|
||||
edition = "2021"
|
||||
rust-version = "1.56"
|
||||
name = "darling_macro"
|
||||
version = "0.20.11"
|
||||
authors = ["Ted Driggs <ted.driggs@outlook.com>"]
|
||||
build = false
|
||||
autolib = false
|
||||
autobins = false
|
||||
autoexamples = false
|
||||
autotests = false
|
||||
autobenches = false
|
||||
description = """
|
||||
Internal support for a proc-macro library for reading attributes into structs when
|
||||
implementing custom derives. Use https://crates.io/crates/darling in your code.
|
||||
"""
|
||||
readme = false
|
||||
license = "MIT"
|
||||
repository = "https://github.com/TedDriggs/darling"
|
||||
|
||||
[lib]
|
||||
name = "darling_macro"
|
||||
path = "src/lib.rs"
|
||||
proc-macro = true
|
||||
|
||||
[dependencies.darling_core]
|
||||
version = "=0.20.11"
|
||||
|
||||
[dependencies.quote]
|
||||
version = "1.0.18"
|
||||
|
||||
[dependencies.syn]
|
||||
version = "2.0.15"
|
||||
Vendored
+21
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2017 Ted Driggs
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
use darling_core::{derive, Error};
|
||||
use proc_macro::TokenStream;
|
||||
use syn::parse_macro_input;
|
||||
|
||||
#[proc_macro_derive(FromMeta, attributes(darling))]
|
||||
pub fn derive_from_meta(input: TokenStream) -> TokenStream {
|
||||
derive::from_meta(&parse_macro_input!(input)).into()
|
||||
}
|
||||
|
||||
#[proc_macro_derive(FromMetaItem, attributes(darling))]
|
||||
pub fn derive_from_meta_item(_input: TokenStream) -> TokenStream {
|
||||
Error::custom("darling::FromMetaItem has been replaced by darling::FromMeta")
|
||||
.write_errors()
|
||||
.into()
|
||||
}
|
||||
|
||||
#[proc_macro_derive(FromAttributes, attributes(darling))]
|
||||
pub fn derive_from_attributes(input: TokenStream) -> TokenStream {
|
||||
derive::from_attributes(&parse_macro_input!(input)).into()
|
||||
}
|
||||
|
||||
#[proc_macro_derive(FromDeriveInput, attributes(darling))]
|
||||
pub fn derive_from_input(input: TokenStream) -> TokenStream {
|
||||
derive::from_derive_input(&parse_macro_input!(input)).into()
|
||||
}
|
||||
|
||||
#[proc_macro_derive(FromField, attributes(darling))]
|
||||
pub fn derive_field(input: TokenStream) -> TokenStream {
|
||||
derive::from_field(&parse_macro_input!(input)).into()
|
||||
}
|
||||
|
||||
#[proc_macro_derive(FromTypeParam, attributes(darling))]
|
||||
pub fn derive_type_param(input: TokenStream) -> TokenStream {
|
||||
derive::from_type_param(&parse_macro_input!(input)).into()
|
||||
}
|
||||
|
||||
#[proc_macro_derive(FromVariant, attributes(darling))]
|
||||
pub fn derive_variant(input: TokenStream) -> TokenStream {
|
||||
derive::from_variant(&parse_macro_input!(input)).into()
|
||||
}
|
||||
Reference in new issue
Block a user