Repository navigation
The cable pairs itself now. Server and Mac app only — the APK is unchanged from
v1.17.0, attached
here so the newest release always carries a working one.
Autopair
This is the whole reason the watch loop exists rather than a button alone.
On the one occasion this phone did publish an adb interface, it was there for
less time than it takes to notice and click. The tunnel came up — armed was
populated — and the pairing went unused because nobody was fast enough. A human
cannot reliably catch a five-second window; a watchdog can.
The loop now arms the reverse mapping and fires the deep link on its own, once
per appearance. Once matters: am start every 5 s would keep yanking the app
to the foreground. A serial is forgotten when it disappears, so replugging pairs
again. --no-autopair turns it off.
--adb
Points at a different adb binary. Anyone whose SDK sits somewhere find_adb()
does not look needs it — and it is how the cable path finally got tested without
a phone at all: point it at a stub that reports one device, accepts reverse,
and refuses am start the way the real phone did.
That stub is what confirmed autopair fires exactly once across two ticks, clears
on unplug, re-fires on replug, and that the AM start: log line keeps the
refusal text while redacting the access key.
This does not make the cable work by itself
Being plain about it: the phone still has to publish an adb interface, and no
code here can influence that. What this removes is the human timing problem,
which was a real reason a working tunnel got wasted.
Also recorded this release: the phone re-enables USB tethering by itself, seen
three times returning to idProduct 4234 with live RNDIS nodes minutes after
being confirmed off at 4221. That is probably the whole explanation for the adb
interface never appearing — MagicOS looks to auto-enable tethering when a host
attaches, and the RNDIS composition it builds carries no adb interface. The one
adb sighting came seconds after a manual toggle: a transition window, not a
steady state. So the thing to hunt on the phone is whatever re-arms tethering on
connect, not the USB debugging switch alone.
Where both wired paths stand
Code complete, tested to the socket, and neither works on the hardware they were
built against:
| Path | Blocked by | What would unblock it |
|---|---|---|
adb reverse |
the phone never publishes the adb interface (255/66/1) | stopping whatever re-arms tethering on connect |
| USB tethering | macOS has no RNDIS driver, and never has | a phone that tethers over CDC ECM or NCM |
HANDOFF.md records this so nobody re-runs the exercise expecting a different
answer, and docs/handoffs/ now carries a session handoff with the open items.
Wifi remains the working transport and is not a consolation prize — it moved
this project's own 6.3 MB APK at 17.34 MB/s, against a cable that negotiates
USB 2.0 High Speed in every mode observed.
Versions
| Piece | Version |
|---|---|
| Server | 1.19.0 |
| Mac app | 1.19.0 |
| Android app | 1.13.0 (versionCode 16) — unchanged |
Debug-signed. Installs and upgrades in place, not Play Store distributable.