adb-wireless: erst verbinden, dann erst koppeln
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) <noreply@anthropic.com>
This commit is contained in:
+72
-33
@@ -38,16 +38,59 @@ suche_dienst() {
|
|||||||
return 1
|
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? ─────────────────────────────────────────────────────────
|
# ── Schon verbunden? ─────────────────────────────────────────────────────────
|
||||||
kopf "Aktueller Stand"
|
kopf "Aktueller Stand"
|
||||||
VERBUNDEN=$(adb devices | grep -w 'device$' | wc -l)
|
if ist_verbunden; then
|
||||||
if [ "$VERBUNDEN" -gt 0 ]; then
|
|
||||||
adb devices | grep -w 'device$' | sed 's/^/ /'
|
|
||||||
ok "Es ist bereits ein Gerät verbunden."
|
ok "Es ist bereits ein Gerät verbunden."
|
||||||
hinweis "Weiter mit: ./provision/provision.sh"
|
weiter_mit_provision
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
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 ────────────────────────────────────────────────────────────────
|
# ── Anleitung ────────────────────────────────────────────────────────────────
|
||||||
kopf "Auf dem Telefon"
|
kopf "Auf dem Telefon"
|
||||||
@@ -97,22 +140,35 @@ fi
|
|||||||
# Hauptseite von "Drahtloses Debugging" unter "IP-Adresse und Port".
|
# Hauptseite von "Drahtloses Debugging" unter "IP-Adresse und Port".
|
||||||
kopf "Verbinden"
|
kopf "Verbinden"
|
||||||
hinweis "Das Kopplungsfenster kann jetzt geschlossen werden."
|
hinweis "Das Kopplungsfenster kann jetzt geschlossen werden."
|
||||||
printf ' Suche Verbindungsdienst '
|
|
||||||
if CONNECT_ZIEL=$(suche_dienst _adb-tls-connect._tcp 20); then
|
# Neuere adb-Fassungen verbinden nach dem Koppeln von selbst über mDNS.
|
||||||
printf '\n'; ok "gefunden: $CONNECT_ZIEL"
|
sleep 3
|
||||||
else
|
if ist_verbunden; then
|
||||||
printf '\n'; warn "Nichts per mDNS gefunden."
|
ok "Verbindung stand bereits nach dem Koppeln"
|
||||||
hinweis "Adresse steht auf der Hauptseite von 'Drahtloses Debugging'."
|
weiter_mit_provision
|
||||||
printf ' Adresse eintippen (IP:PORT) > '
|
exit 0
|
||||||
read -r CONNECT_ZIEL </dev/tty
|
|
||||||
[ -n "$CONNECT_ZIEL" ] || { fehl "Ohne Adresse geht es nicht."; exit 1; }
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if verbinden_versuchen 20; then
|
||||||
|
ok "Verbunden"
|
||||||
|
weiter_mit_provision
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
warn "Nichts per mDNS gefunden."
|
||||||
|
hinweis "Manche Netze blockieren Multicast. Die Adresse steht auf der Hauptseite"
|
||||||
|
hinweis "von 'Drahtloses Debugging' unter 'IP-Adresse und Port'."
|
||||||
|
hinweis "Achtung: das ist ein ANDERER Port als der aus dem Kopplungsfenster."
|
||||||
|
printf ' Adresse eintippen (IP:PORT) > '
|
||||||
|
read -r CONNECT_ZIEL </dev/tty
|
||||||
|
[ -n "$CONNECT_ZIEL" ] || { fehl "Ohne Adresse geht es nicht."; exit 1; }
|
||||||
|
|
||||||
if adb connect "$CONNECT_ZIEL"; then
|
if adb connect "$CONNECT_ZIEL"; then
|
||||||
sleep 2
|
sleep 2
|
||||||
if adb devices | grep -qw 'device$'; then
|
if ist_verbunden; then
|
||||||
ok "Verbunden"
|
ok "Verbunden"
|
||||||
adb devices | grep -w 'device$' | sed 's/^/ /'
|
weiter_mit_provision
|
||||||
|
exit 0
|
||||||
else
|
else
|
||||||
fehl "Verbindung kam nicht zustande."
|
fehl "Verbindung kam nicht zustande."
|
||||||
adb devices | sed 's/^/ /'
|
adb devices | sed 's/^/ /'
|
||||||
@@ -123,20 +179,3 @@ else
|
|||||||
fehl "adb connect fehlgeschlagen."
|
fehl "adb connect fehlgeschlagen."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ── Weiter ───────────────────────────────────────────────────────────────────
|
|
||||||
kopf "Fertig"
|
|
||||||
cat <<TEXT
|
|
||||||
Jetzt läuft die Einrichtung wie mit Kabel:
|
|
||||||
|
|
||||||
./provision/provision.sh
|
|
||||||
|
|
||||||
Gut zu wissen für später:
|
|
||||||
|
|
||||||
· Die Kopplung bleibt bestehen. Nach einem Neustart des Telefons oder
|
|
||||||
nach dem Aus- und Einschalten von "Drahtloses Debugging" ändert sich
|
|
||||||
aber der Port — dann genügt dieses Skript erneut, ohne neuen Code.
|
|
||||||
· ADB wird in diesem Projekt nur für die Ersteinrichtung gebraucht.
|
|
||||||
Im Dauerbetrieb kommt HPOS ohne Privilegienkanal aus.
|
|
||||||
· Trennen mit: adb disconnect
|
|
||||||
TEXT
|
|
||||||
|
|||||||
Reference in New Issue
Block a user