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
Vendored
+164
@@ -0,0 +1,164 @@
|
||||
targets := "arm-unknown-linux-gnueabi armv7-unknown-linux-gnueabihf x86_64-unknown-linux-gnu x86_64-unknown-linux-musl thumbv6m-none-eabi thumbv7em-none-eabi thumbv7em-none-eabihf thumbv7m-none-eabi"
|
||||
|
||||
all_features := "nalgebra fixed defmt"
|
||||
|
||||
target_dir := "target"
|
||||
|
||||
doc_dir := "doc"
|
||||
doc_assets_dir := doc_dir + "/assets"
|
||||
|
||||
#----------
|
||||
# Building
|
||||
#----------
|
||||
|
||||
build: check-formatting check-drawing-examples build-without-fmt-check
|
||||
|
||||
build-without-fmt-check: test check-readmes check-links build-benches
|
||||
|
||||
# Build the benches
|
||||
build-benches:
|
||||
cargo bench --workspace --no-run
|
||||
|
||||
# Run the benches
|
||||
bench *args:
|
||||
cargo bench --workspace {{args}}
|
||||
|
||||
# Run cargo test
|
||||
test:
|
||||
cargo test --workspace
|
||||
|
||||
# Run cargo test with all features enabled
|
||||
test-all:
|
||||
cargo test --workspace --all-features
|
||||
|
||||
# Run cargo test with all features except defmt enabled
|
||||
test-all-except-defmt:
|
||||
cargo test --workspace --features "{{all_features}}"
|
||||
|
||||
# Check the formatting
|
||||
check-formatting:
|
||||
cargo fmt --all -- --check
|
||||
|
||||
# Cross compiles embedded-graphics for a target
|
||||
build-target target *args:
|
||||
cargo build --workspace --target {{target}} {{args}}
|
||||
cargo build --workspace --target {{target}} --features "{{all_features}}" {{args}}
|
||||
|
||||
# Cross compiles embedded-graphics for all targets
|
||||
build-targets *args:
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
for target in {{targets}}; do just build-target $target {{args}}; done
|
||||
|
||||
# Install all targets used in the `build-targets` command
|
||||
install-targets:
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
sysroot=$(rustc --print sysroot)
|
||||
|
||||
for target in {{targets}}; do
|
||||
if [[ ! "$sysroot" =~ "$target" ]]; then
|
||||
rustup target add $target
|
||||
else
|
||||
echo "Target $target is already installed"
|
||||
fi
|
||||
done
|
||||
|
||||
#------
|
||||
# Docs
|
||||
#------
|
||||
|
||||
# Generates the docs
|
||||
generate-docs:
|
||||
cargo clean --doc
|
||||
cargo doc --workspace --all-features --no-deps
|
||||
|
||||
# Checks for broken links in cargo docs and readmes
|
||||
check-links: generate-docs generate-readmes
|
||||
cargo deadlinks --ignore-fragments --dir target/doc/embedded_graphics
|
||||
cargo deadlinks --ignore-fragments --dir target/doc/embedded_graphics_core
|
||||
|
||||
cd tools/check-md-refs && cargo run -- '../../core/README.md'
|
||||
cd tools/check-md-refs && cargo run -- '../../README.md'
|
||||
|
||||
lychee --exclude=circleci.com --verbose --exclude='LICENSE*' -- './**/README.md'
|
||||
|
||||
# Generate drawing examples in the doc directory
|
||||
generate-drawing-examples:
|
||||
cd tools/generate-drawing-examples && cargo run
|
||||
rustfmt src/examples.rs
|
||||
|
||||
# Checks if drawing examples are up to date
|
||||
check-drawing-examples: generate-drawing-examples
|
||||
git diff --quiet doc/ || ( \
|
||||
echo "src/examples.rs is not up to date" \
|
||||
echo "Try running 'just generate-drawing-examples'." \
|
||||
echo "If any images have changed, run 'just generate-drawing-examples-montage' to update the collage image too" \
|
||||
)
|
||||
|
||||
# Generate a collage of all drawing example screenshots
|
||||
generate-drawing-examples-montage:
|
||||
# `imagemagick` must be installed for this to work.
|
||||
montage \
|
||||
{{doc_assets_dir}}/draw*.png \
|
||||
-tile 6x2 -background none -geometry 128x128+4+4 miff:- | \
|
||||
convert - -trim {{doc_assets_dir}}/all_drawing_ops.png
|
||||
|
||||
#----------------------
|
||||
# README.md generation
|
||||
#----------------------
|
||||
|
||||
# Generate README.md for a single crate
|
||||
generate-readme crate: (_build-readme crate)
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
CRATE_DIR=$(dirname $(find . -name Cargo.toml -exec grep -l 'name = "{{crate}}"' {} \;))
|
||||
cp "{{target_dir}}/README-{{crate}}.md" "$CRATE_DIR/README.md"
|
||||
|
||||
# Check README.md for a single crate
|
||||
@check-readme crate: (_build-readme crate)
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
CRATE_DIR=$(dirname $(find . -name Cargo.toml -exec grep -l 'name = "{{crate}}"' {} \;))
|
||||
diff -q "{{target_dir}}/README-{{crate}}.md" "$CRATE_DIR/README.md" || ( \
|
||||
echo -e "\033[1;31mError:\033[0m README.md for {{crate}} needs to be regenerated."; \
|
||||
echo -e " Run 'just generate-readmes' to regenerate.\n"; \
|
||||
exit 1 \
|
||||
)
|
||||
|
||||
# Generate README.md for all crates
|
||||
generate-readmes: (generate-readme "embedded-graphics") (generate-readme "embedded-graphics-core")
|
||||
|
||||
# Checks README.md for all crates
|
||||
check-readmes: (check-readme "embedded-graphics") (check-readme "embedded-graphics-core")
|
||||
|
||||
# Builds README.md for a single crate
|
||||
_build-readme crate:
|
||||
#!/usr/bin/env bash
|
||||
set -e -o pipefail
|
||||
mkdir -p {{target_dir}}
|
||||
echo "Building README.md for {{crate}}"
|
||||
CRATE_DIR=$(dirname $(find . -name Cargo.toml -exec grep -l 'name = "{{crate}}"' {} \;))
|
||||
cargo readme -r "$CRATE_DIR" | sed -E -f "filter-readme.sed" > "{{target_dir}}/README-{{crate}}.md"
|
||||
|
||||
#----------------
|
||||
# Font conversion
|
||||
#----------------
|
||||
|
||||
convert-fonts:
|
||||
cd tools/convert-fonts && cargo run --release
|
||||
find src/mono_font/ -name generated.rs -exec rustfmt {} \;
|
||||
|
||||
#--------
|
||||
# Release
|
||||
#--------
|
||||
|
||||
# Release embedded-graphics-core
|
||||
release-core +args:
|
||||
cargo release --workspace --exclude embedded-graphics --dependent-version fix {{args}}
|
||||
|
||||
# Release embedded-graphics
|
||||
release-e-g +args:
|
||||
cargo release --package embedded-graphics --dependent-version fix {{args}}
|
||||
Reference in new issue
Block a user