#!/usr/bin/env bash # SPDX-FileCopyrightText: 2026 Echolot contributors # SPDX-License-Identifier: GPL-3.0-or-later # # PC-side connector for the wireless-adb beacon. Polls the fmr beacon map and # ensures each device has a working adb connection. # # Existing adb connections SURVIVE wireless-debug port rotation, so once a # device's IP is connected we leave it ALONE even if the beacon now reports a # different port. Chasing the new port would tear down the working link and # spam the phone with "wireless debugging connected" notifications. We only # (re)connect when NO working entry exists for that IP. BEACON="${ECHOLOT_BEACON_URL:-http://89.185.109.150:443/beacon}" while true; do curl -s --max-time 5 "$BEACON" 2>/dev/null | python -c ' import json,sys,time try: d=json.load(sys.stdin) except: d={} now=int(time.time()) for dev,v in (d or {}).items(): if now-v.get("seen_at",0) < 150: print(dev, v["ip"], v["port"]) ' 2>/dev/null | while read dev ip port; do if adb devices | awk -v ip="$ip" '$1 ~ ("^"ip":") && $2=="device"{f=1} END{exit !f}'; then continue fi adb devices | awk -v ip="$ip" '$1 ~ ("^"ip":"){print $1}' | while read stale; do adb disconnect "$stale" >/dev/null 2>&1 done r=$(adb connect "$ip:$port" 2>&1) echo "$(date +%H:%M:%S) [$dev] $ip:$port -> $r" done sleep 8 done