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
+82
@@ -0,0 +1,82 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright 2025 The Fuchsia Authors
|
||||
#
|
||||
# Licensed under a BSD-style license <LICENSE-BSD>, Apache License, Version 2.0
|
||||
# <LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0>, or the MIT
|
||||
# license <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your option.
|
||||
# This file may not be copied, modified, or distributed except according to
|
||||
# those terms.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# This allows us to leave XODO comments in this file and have them still be
|
||||
# picked up by this script without having the script itself trigger false
|
||||
# positives. The alternative would be to exclude this script entirely, which
|
||||
# would mean that we couldn't use XODO comments in this script.
|
||||
KEYWORD=$(echo XODO | sed -e 's/X/T/')
|
||||
|
||||
# Make sure `rg` is installed (if this fails, `set -e` above will cause the
|
||||
# script to exit).
|
||||
rg --version >/dev/null
|
||||
|
||||
# -H: Print filename (default for multiple files/recursive)
|
||||
# -n: Print line number
|
||||
# -w: Match whole words
|
||||
# Match TODO, TODO-check-disable, and TODO-check-enable
|
||||
PATTERN="$KEYWORD|$KEYWORD-check-disable|$KEYWORD-check-enable"
|
||||
output=$(rg -H -n -w "$PATTERN" "$@" || true)
|
||||
|
||||
commit_output=$(git log -1 --pretty=%B 2>/dev/null | rg -n -w "$PATTERN" || true)
|
||||
if [ -n "$commit_output" ]; then
|
||||
commit_output=$(echo "$commit_output" | sed "s/^/COMMIT_MESSAGE:/")
|
||||
output="$commit_output${output:+$'\n'$output}"
|
||||
fi
|
||||
|
||||
if [ -z "$output" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Track the disabled state for each file. Since we process lines in order for
|
||||
# each file, we can maintain state. However, rg output might interleave files if
|
||||
# not sorted, but usually it's grouped. To be safe, we sort the output by
|
||||
# filename and line number.
|
||||
sorted_output=$(echo "$output" | sort -t: -k1,1 -k2,2n)
|
||||
|
||||
exit_code=0
|
||||
current_file=""
|
||||
disabled=0
|
||||
|
||||
while IFS= read -r line; do
|
||||
if [[ "$line" =~ ^(.*):([0-9]+):(.*)$ ]]; then
|
||||
file="${BASH_REMATCH[1]}"
|
||||
content="${BASH_REMATCH[3]}"
|
||||
else
|
||||
echo "Error: could not parse rg output line: $line" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$file" != "$current_file" ]; then
|
||||
current_file="$file"
|
||||
disabled=0
|
||||
fi
|
||||
|
||||
if [[ "$content" == *"$KEYWORD-check-disable"* ]]; then
|
||||
disabled=1
|
||||
elif [[ "$content" == *"$KEYWORD-check-enable"* ]]; then
|
||||
disabled=0
|
||||
elif [[ "$content" == *"$KEYWORD"* ]]; then
|
||||
if [ "$disabled" -eq 0 ]; then
|
||||
if [ "$exit_code" -eq 0 ]; then
|
||||
echo "Found $KEYWORD markers in the codebase." >&2
|
||||
echo "$KEYWORD is used for tasks that should be done before merging a PR; if you want to leave a message in the codebase, use FIXME." >&2
|
||||
echo "If you need to allow a $KEYWORD, wrap it in $KEYWORD-check-disable and $KEYWORD-check-enable." >&2
|
||||
echo "" >&2
|
||||
exit_code=1
|
||||
fi
|
||||
echo "$line" >&2
|
||||
fi
|
||||
fi
|
||||
done <<< "$sorted_output"
|
||||
|
||||
exit $exit_code
|
||||
Reference in new issue
Block a user