From b34074f48e04c4b7d348053f68b96a9ff75776b5 Mon Sep 17 00:00:00 2001 From: Stefan Date: Sun, 9 Aug 2026 18:01:29 +0200 Subject: [PATCH] adb-wireless: erst verbinden, dann erst koppeln MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bisher begann jeder Aufruf beim Koppeln. Wer bereits gekoppelt war, wurde deshalb erneut nach einem Code gefragt — und weil die Kopplung ja schon bestand, führte das zu nichts. Von außen sah es wie eine Schleife aus. Der Fehler war eine falsche Annahme im Ablauf: die Kopplung bleibt dauerhaft bestehen, nur die Verbindung geht verloren und der Port wechselt bei jedem Einschalten. Ein zweiter Code wird also nie gebraucht. Der Ablauf prüft jetzt in dieser Reihenfolge: 1. steht schon eine Verbindung? 2. lässt sich per mDNS verbinden? (dann bestand die Kopplung bereits) 3. erst dann koppeln — und danach direkt wieder verbinden Nach dem Koppeln wird zusätzlich kurz gewartet: neuere adb-Fassungen verbinden von selbst über mDNS, dann ist der Rest überflüssig. Co-Authored-By: Claude Opus 5 (1M context) --- provision/adb-wireless.sh | 105 ++++++++++++++++++++++++++------------ 1 file changed, 72 insertions(+), 33 deletions(-) diff --git a/provision/adb-wireless.sh b/provision/adb-wireless.sh index 504bf55..ed24f5a 100755 --- a/provision/adb-wireless.sh +++ b/provision/adb-wireless.sh @@ -38,16 +38,59 @@ suche_dienst() { return 1 } +ist_verbunden() { adb devices | grep -qw 'device$'; } + +weiter_mit_provision() { + adb devices | grep -w 'device$' | sed 's/^/ /' + kopf "Fertig" + cat <<'TEXT' + Weiter mit: + + ./provision/provision.sh + + Gut zu wissen: ADB wird in diesem Projekt nur für die Ersteinrichtung + gebraucht. Im Dauerbetrieb kommt HPOS ohne Privilegienkanal aus. + Trennen mit: adb disconnect +TEXT +} + +# Versucht zu verbinden und meldet Erfolg. Die Adresse kommt per mDNS oder, +# wenn das Netz kein Multicast durchlässt, von Hand. +verbinden_versuchen() { + local wartezeit="${1:-8}" ziel + printf ' Suche Verbindungsdienst ' >&2 + if ziel=$(suche_dienst _adb-tls-connect._tcp "$wartezeit"); then + printf '\n' >&2 + ok "gefunden: $ziel" + else + printf '\n' >&2 + return 1 + fi + adb connect "$ziel" >/dev/null 2>&1 + sleep 2 + ist_verbunden +} + # ── Schon verbunden? ───────────────────────────────────────────────────────── kopf "Aktueller Stand" -VERBUNDEN=$(adb devices | grep -w 'device$' | wc -l) -if [ "$VERBUNDEN" -gt 0 ]; then - adb devices | grep -w 'device$' | sed 's/^/ /' +if ist_verbunden; then ok "Es ist bereits ein Gerät verbunden." - hinweis "Weiter mit: ./provision/provision.sh" + weiter_mit_provision exit 0 fi -hinweis "Kein Gerät verbunden — Kopplung wird eingerichtet." + +# ── Erst verbinden, dann erst koppeln ──────────────────────────────────────── +# Die Kopplung bleibt dauerhaft bestehen — nur die Verbindung geht verloren, und +# der Port ändert sich bei jedem Einschalten. Wer schon einmal gekoppelt hat, +# braucht deshalb keinen neuen Code, sondern nur ein neues connect. Ohne diesen +# Schritt landet man bei jedem Aufruf wieder im Kopplungsdialog. +hinweis "Kein Gerät verbunden. Prüfe zuerst, ob schon eine Kopplung besteht …" +if verbinden_versuchen 8; then + ok "Bereits gekoppelt — es war nur die Verbindung weg." + weiter_mit_provision + exit 0 +fi +hinweis "Keine bestehende Kopplung nutzbar — richte eine neue ein." # ── Anleitung ──────────────────────────────────────────────────────────────── kopf "Auf dem Telefon" @@ -97,22 +140,35 @@ fi # Hauptseite von "Drahtloses Debugging" unter "IP-Adresse und Port". kopf "Verbinden" hinweis "Das Kopplungsfenster kann jetzt geschlossen werden." -printf ' Suche Verbindungsdienst ' -if CONNECT_ZIEL=$(suche_dienst _adb-tls-connect._tcp 20); then - printf '\n'; ok "gefunden: $CONNECT_ZIEL" -else - printf '\n'; warn "Nichts per mDNS gefunden." - hinweis "Adresse steht auf der Hauptseite von 'Drahtloses Debugging'." - printf ' Adresse eintippen (IP:PORT) > ' - read -r CONNECT_ZIEL ' +read -r CONNECT_ZIEL