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
+1
@@ -0,0 +1 @@
|
||||
{"files":{".cargo_vcs_info.json":"87a6f8fdbe2379aa96eeb8fe5ec2f57cd5588f04da398af1e3ba2c65ac74d1d7","Cargo.lock":"81b9dc513c238552785697a5f9668ae3125d443273cb2bfff5a8bd7db7810acb","Cargo.toml":"d2582220b85c3e2032734ad775d06e3014ef3c0b3d4516873ed335b98339dedc","Cargo.toml.orig":"98039498c82250f0315884a448c0533e1c164344274c430e486283004ccf68e4","LICENSE":"8ea93490d74a5a1b1af3ff71d786271b3f1e5f0bea79ac16e02ec533cef040d6","src/lib.rs":"728be3bb12c9cdaaf0520bce87e489a0820e436c78fa3627e238fc1acc11dd7f"},"package":"d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81"}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"git": {
|
||||
"sha1": "f21aa2c5ccd002f978a18758815bd7e7cdba4741"
|
||||
},
|
||||
"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.21.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4"
|
||||
dependencies = [
|
||||
"fnv",
|
||||
"ident_case",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "darling_macro"
|
||||
version = "0.21.3"
|
||||
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.97"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d61789d7719defeb74ea5fe81f2fdfdbd28a803847077cecce2ff14e1472f6f1"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.40"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.56"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6e2415488199887523e74fd9a5f7be804dfd42d868ae0eca382e3917094d210e"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
version = "1.0.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
|
||||
Vendored
+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.21.3"
|
||||
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.21.3"
|
||||
|
||||
[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.
|
||||
Vendored
+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