Build with colors :)
This commit is contained in:
parent
2835249614
commit
491a35888a
2 changed files with 129 additions and 1 deletions
|
|
@ -28,7 +28,9 @@ Flags:
|
|||
- `SWITCH_PICO_LOG`: enable/disable UART logging on the Pico.
|
||||
|
||||
### Changing controller colours
|
||||
Edit `controller_color_config.h` (RGB values) and rebuild; the Switch will show the new colours on reconnect.
|
||||
`./build.sh` now writes a random colour into `controller_color_config.h` before building so the Switch shows a fresh colour when you flash.
|
||||
- Use `./build.sh --color FF00AA` (or `--color 12,34,56`) to pick a specific colour applied to the body/buttons/grips.
|
||||
- Use `./build.sh --keep-color` if you want to build without touching `controller_color_config.h`.
|
||||
|
||||
## Python bridge (recommended)
|
||||
Works on macOS, Windows, Linux. Uses SDL2 + pyserial.
|
||||
|
|
|
|||
126
build.sh
Executable file
126
build.sh
Executable file
|
|
@ -0,0 +1,126 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd -- "$(dirname "$0")" && pwd)"
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
CONFIG_FILE="$SCRIPT_DIR/controller_color_config.h"
|
||||
|
||||
usage() {
|
||||
cat <<'EOF'
|
||||
Usage: build.sh [--random-grip-color | --grip-color RRGGBB]
|
||||
--random-grip-color Randomize both grip colors before building.
|
||||
--grip-color RRGGBB Set both grip colors to the provided hex value.
|
||||
--help Show this help message.
|
||||
|
||||
Default behavior leaves controller_color_config.h unchanged.
|
||||
EOF
|
||||
}
|
||||
|
||||
ensure_single_color_mode() {
|
||||
local current_mode="$1"
|
||||
local new_mode="$2"
|
||||
if [[ "$current_mode" != "none" && "$current_mode" != "$new_mode" ]]; then
|
||||
echo "Error: Choose either --random-grip-color or --grip-color, not both." >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
update_grip_colors() {
|
||||
local rgb_hex="$1"
|
||||
local r="${rgb_hex:0:2}"
|
||||
local g="${rgb_hex:2:2}"
|
||||
local b="${rgb_hex:4:2}"
|
||||
|
||||
if [[ ! -f "$CONFIG_FILE" ]]; then
|
||||
echo "Error: Cannot find $CONFIG_FILE" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
python - "$CONFIG_FILE" "$r" "$g" "$b" <<'PY'
|
||||
import re
|
||||
import sys
|
||||
path, r, g, b = sys.argv[1:5]
|
||||
|
||||
try:
|
||||
with open(path, "r", encoding="utf-8") as f:
|
||||
text = f.read()
|
||||
except OSError as exc:
|
||||
sys.stderr.write(f"Error reading {path}: {exc}\n")
|
||||
sys.exit(1)
|
||||
|
||||
def replace(name, val, data):
|
||||
pattern = rf"(?m)^(#define\s+{name}\s+)0x[0-9A-Fa-f]{{2}}"
|
||||
updated, count = re.subn(pattern, rf"\g<1>0x{val.upper()}", data)
|
||||
if count == 0:
|
||||
sys.stderr.write(f"Error: Could not find {name} in {path}\n")
|
||||
sys.exit(1)
|
||||
return updated
|
||||
|
||||
for macro, val in [
|
||||
("SWITCH_COLOR_LEFT_GRIP_R", r),
|
||||
("SWITCH_COLOR_LEFT_GRIP_G", g),
|
||||
("SWITCH_COLOR_LEFT_GRIP_B", b),
|
||||
("SWITCH_COLOR_RIGHT_GRIP_R", r),
|
||||
("SWITCH_COLOR_RIGHT_GRIP_G", g),
|
||||
("SWITCH_COLOR_RIGHT_GRIP_B", b),
|
||||
]:
|
||||
text = replace(macro, val, text)
|
||||
|
||||
try:
|
||||
with open(path, "w", encoding="utf-8") as f:
|
||||
f.write(text)
|
||||
except OSError as exc:
|
||||
sys.stderr.write(f"Error writing {path}: {exc}\n")
|
||||
sys.exit(1)
|
||||
PY
|
||||
}
|
||||
|
||||
GRIP_MODE="none"
|
||||
CUSTOM_COLOR=""
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--random-grip-color)
|
||||
ensure_single_color_mode "$GRIP_MODE" "random"
|
||||
GRIP_MODE="random"
|
||||
shift
|
||||
;;
|
||||
--grip-color)
|
||||
ensure_single_color_mode "$GRIP_MODE" "custom"
|
||||
GRIP_MODE="custom"
|
||||
CUSTOM_COLOR="${2-}"
|
||||
if [[ -z "$CUSTOM_COLOR" ]]; then
|
||||
echo "Error: --grip-color requires a hex value like FF8800." >&2
|
||||
exit 1
|
||||
fi
|
||||
shift 2
|
||||
;;
|
||||
-h|--help)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo "Unknown option: $1" >&2
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ "$GRIP_MODE" == "random" ]]; then
|
||||
CUSTOM_COLOR="$(printf "%02X%02X%02X" $((RANDOM % 256)) $((RANDOM % 256)) $((RANDOM % 256)))"
|
||||
elif [[ "$GRIP_MODE" == "custom" ]]; then
|
||||
if ! [[ "$CUSTOM_COLOR" =~ ^[0-9A-Fa-f]{6}$ ]]; then
|
||||
echo "Error: Color must be a 6-digit hex value like FF8800." >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ "$GRIP_MODE" != "none" ]]; then
|
||||
update_grip_colors "$CUSTOM_COLOR"
|
||||
echo "Grip color set to #$CUSTOM_COLOR in controller_color_config.h"
|
||||
fi
|
||||
|
||||
cmake -S . -B build -DSWITCH_PICO_AUTOTEST=OFF -DSWITCH_PICO_LOG=OFF && cmake --build build
|
||||
/Users/joey/.pico-sdk/picotool/2.2.0-a4/picotool/picotool load /Users/joey/Projects/switch-pico/build/switch-pico.elf -fx
|
||||
Loading…
Add table
Add a link
Reference in a new issue