diff --git a/README.md b/README.md new file mode 100644 index 0000000..ac375f1 --- /dev/null +++ b/README.md @@ -0,0 +1,57 @@ +# ninlight + +Lokale Firmware für die alten Klyqa-Lampen mit WinnerMicro W600 (E27/E14/GU10 RGB+CW, E27/E14/GU10 CW, G95 Vintage) und das W600-EVK. + +## Voraussetzungen + +- **Docker Desktop** (primärer Build-Pfad, erste Ausführung baut das Image `ninlight-build`) +- **CMake ≥ 3.20**, Ninja, host C compiler (für Host-Tests) +- **uv** (für die serielle Konsole) +- ARM GNU Toolchain mit newlib: `brew install --cask gcc-arm-embedded` (nur Fallback für nativen Build) + +## Bauen + +Docker (empfohlen – kein lokaler ARM-Compiler nötig): + + tools/docker.sh cmake -S . -B build/evk -G Ninja -DCMAKE_TOOLCHAIN_FILE=cmake/arm-none-eabi.cmake -DNINLIGHT_DEVICE=evk + tools/docker.sh cmake --build build/evk + tools/docker.sh tools/build_all.sh # alle 8 Geräte + +Native Builds (mit lokal installierter ARM-Toolchain): + + cmake -S . -B build/evk -G Ninja -DCMAKE_TOOLCHAIN_FILE=cmake/arm-none-eabi.cmake -DNINLIGHT_DEVICE=evk + cmake --build build/evk + +**Geräte:** evk, e27_rgb, e14_rgb, gu10_rgb, e27_cw, e14_cw, gu10_cw, g95_cw. + +**Lokale Einstellungen** (Token, später WLAN): `config.local.cmake.example` → `config.local.cmake`. + +## Tests + +Host-basierte Unit-Tests (laufen nativ auf dem Mac): + + tools/test_host.sh + +## Flashen und Konsole + +Verfügbare Ports anzeigen: + + build/host-tools/wm_tool -l + +Firmware flashen: + + tools/flash.sh + +Serielle Konsole (115200 8N1, lokales Echo): + + tools/monitor.sh /dev/cu. + +Verfügbare Befehle in der Konsole: `help`. + +## Werksreset + +Gerät 5× hintereinander einschalten, jeweils kürzer als 5 Sekunden. + +## Hardwaretests + +Manuelle Checkliste: `docs/hardware-checklist.md`. diff --git a/tools/build_all.sh b/tools/build_all.sh new file mode 100755 index 0000000..b0a65bf --- /dev/null +++ b/tools/build_all.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +# Builds the firmware for all devices. BUILD_ROOT overrides the output directory (default: build). +set -euo pipefail +ROOT=$(cd "$(dirname "$0")/.." && pwd) +OUT=${BUILD_ROOT:-$ROOT/build} +DEVICES=(evk e27_rgb e14_rgb gu10_rgb e27_cw e14_cw gu10_cw g95_cw) +for d in "${DEVICES[@]}"; do + echo "== $d" + cmake -S "$ROOT" -B "$OUT/$d" -G Ninja \ + -DCMAKE_TOOLCHAIN_FILE="$ROOT/cmake/arm-none-eabi.cmake" -DNINLIGHT_DEVICE="$d" >/dev/null + cmake --build "$OUT/$d" +done +ls -1 "$OUT"/*/ninlight_*.fls