Phase 0: Repo-Gerüst und vier Verifikations-Spikes
Vier Annahmen des Plans vor jedem Implementierungscode geprüft:
A (SMC): Lüftersteuerung bestätigt — F0md/F1md (klein!) als Auto/Manuell-
Umschalter, F0Tg als Ziel, Grenzen aus F0Mn/F0Mx. SMC-Integer sind
little-endian, nicht big-endian wie im verbreiteten Intel-Beispielcode.
Ladelimit: CHWA/CH0B/CH0C/bfE0/bfF0 existieren auf Mac17,9 nicht.
Key noch nicht identifiziert, deshalb smc-diff.sh für eine
Differenzmessung ohne jeden Schreibzugriff.
B (Media): mediaremote-adapter läuft unter 26.6.1, aus dem Quellcode gebaut.
Liefert vollständige Metadaten inkl. Cover aus Google Chrome — der
Fall, den AppleScript nicht erreicht.
C (Audio): Process Tap + privates Aggregate-Device liefern echte Samples
(469 Callbacks/5 s, 0 stille Puffer). Konflikt gefunden: SoundSource
6.1.1 mit ARK.driver ist bereits installiert.
D (Group): App-Group-Container ist aus einem nicht-sandboxed Prozess erreichbar.
Damit trägt die Sandbox-Entscheidung, die Bridge-App entfällt.
Spikes sind Wegwerfcode zur Verifikation, kein Produktionscode.
This commit is contained in:
62
Spikes/smc-diff.sh
Executable file
62
Spikes/smc-diff.sh
Executable file
@@ -0,0 +1,62 @@
|
||||
#!/bin/bash
|
||||
# Spike A, Teil 2 — SMC-Differenzmessung
|
||||
#
|
||||
# Identifiziert den Ladelimit-Key, ohne je in den SMC zu schreiben: zwei
|
||||
# vollständige Dumps vergleichen, zwischen denen macOS selbst die Ladegrenze
|
||||
# umgestellt hat.
|
||||
#
|
||||
# Ablauf:
|
||||
# ./smc-diff.sh vorher # Ladegrenze AUS
|
||||
# (in den Systemeinstellungen umschalten, ~30 s warten)
|
||||
# ./smc-diff.sh nachher # Ladegrenze AN
|
||||
# ./smc-diff.sh vergleich
|
||||
#
|
||||
# Lesend. Dieses Skript ruft nur smc-dump auf, das keinen Schreibpfad besitzt.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
DIR="${TMPDIR:-/tmp}/onyx-smc-diff"
|
||||
DUMP="${DUMP:-/tmp/smc-dump}"
|
||||
mkdir -p "$DIR"
|
||||
|
||||
if [[ ! -x "$DUMP" ]]; then
|
||||
echo "smc-dump nicht gefunden unter $DUMP" >&2
|
||||
echo "Bauen mit: xcrun swiftc -O Spikes/smc-dump.swift -o /tmp/smc-dump" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Werte, die sich ohnehin ständig ändern — sie würden die Differenz zumüllen.
|
||||
# Temperaturen (T*), Lüfter (F*), Leistung (P*), Spannungen/Ströme und Zähler.
|
||||
RAUSCHEN='^ (T|F[0-9]|P[A-Z]|V|I|B0A|B0R|BRSC|CH0V|CHA|CHB|CHI[0-9]|CHNI|MSS|D[0-9])'
|
||||
|
||||
snapshot() {
|
||||
"$DUMP" --all | awk '/ALLE KEYS/,0' | grep -E '^ [A-Za-z#]' \
|
||||
| grep -vE "$RAUSCHEN" | sort > "$DIR/$1.txt"
|
||||
echo "→ $DIR/$1.txt ($(wc -l < "$DIR/$1.txt" | tr -d ' ') Keys nach Rauschfilter)"
|
||||
}
|
||||
|
||||
case "${1:-}" in
|
||||
vorher|nachher)
|
||||
echo "Nehme Snapshot '$1' auf …"
|
||||
snapshot "$1"
|
||||
[[ "$1" == "vorher" ]] && echo "Jetzt die Ladegrenze in den Systemeinstellungen umschalten, dann: $0 nachher"
|
||||
;;
|
||||
vergleich)
|
||||
for f in vorher nachher; do
|
||||
[[ -f "$DIR/$f.txt" ]] || { echo "Snapshot '$f' fehlt." >&2; exit 1; }
|
||||
done
|
||||
echo "Geänderte Keys zwischen 'vorher' und 'nachher':"
|
||||
echo "────────────────────────────────────────────────────────────────"
|
||||
if diff "$DIR/vorher.txt" "$DIR/nachher.txt" | grep -E '^[<>]'; then
|
||||
echo
|
||||
echo "Ein Key, der hier auftaucht und nach CH*/bf*/AC* aussieht, ist der Kandidat."
|
||||
else
|
||||
echo "Keine Unterschiede — wurde die Einstellung wirklich umgeschaltet?"
|
||||
echo "Manche Änderungen brauchen bis zu einer Minute, bis der SMC sie übernimmt."
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
sed -n '2,14p' "$0" | sed 's|^# \{0,1\}||'
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
Reference in New Issue
Block a user