Skip to content

Expose the eject button over gRPC and carry it on the Indigo transport - #16

Merged
rubu merged 1 commit into
sync/01-framebuffer-streamfrom
sync/02-eject-button
Sep 28, 2026
Merged

rubu merged 1 commit into
sync/01-framebuffer-streamfrom
sync/02-eject-button

Conversation

@rubu

@rubu rubu commented Sep 28, 2026

Copy link
Copy Markdown

SimulatorHIDButton.eject already carries Consumer usage 0x0C/0xB8, but it was unreachable over the wire — HIDButtonType had no value for it and HidMethodHandler no mapping. This adds both, and gives the identity the legacy Indigo source alongside the usage so the button works on either transport.

What the usage does. iOS toggles the software keyboard on it, the same as a hardware keyboard's eject key. Confirmed by tracing DeviceHub's "Toggle Software Keyboard" menu item: it emits 0xC/0xB8 as a Button event to keyboard focus, and UIKeyboard setMinimized: flips immediately after.

Worth knowing: the toggle changes whether the keyboard is minimized, but the resting state depends on whether iOS has a keyboard device registered. idb injects key events into dtuhidd's existing virtual service without registering a device, so typing does not dismiss the keyboard the way it does under DeviceHub. That is out of scope here — it would need HID service registration over com.apple.coredevice.feature.remote.universalhidservice.

Stacked on #15.

🤖 Generated with Claude Code

@rubu

rubu commented Sep 28, 2026

Copy link
Copy Markdown
Author

Supersedes #1 — add soft keyboard hid button.

Much smaller than the original: upstream independently landed the same Consumer usage 0x0C/0xB8 as SimulatorHIDButton.eject, so all that remains is exposing it over gRPC and giving it the legacy Indigo source.

@rubu
rubu marked this pull request as ready for review September 28, 2026 14:48
@rubu

rubu commented Sep 28, 2026

Copy link
Copy Markdown
Author

https://github.com/appetizeio/idb/pull/1/changes was what I reverse engineered from the Simulator.app, Xcode 27 has an alternative transport and button handling for this as pointed out by Claud in the first comment, but we still need this while we transition from Xcode 26 to Xcode 27, this maybe can be dropped afterwards once we fully transition to Xcode 27.

iOS toggles the software keyboard on HID Consumer usage 0xB8, which the button
table already describes, but it was not reachable over the wire: HIDButtonType
had no value for it and the HID handler no mapping. The legacy Indigo source is
given alongside the usage so the button works on either transport.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@rubu
rubu force-pushed the sync/01-framebuffer-stream branch from a21c4ec to e1a8968 Compare September 28, 2026 15:31
@rubu
rubu force-pushed the sync/02-eject-button branch from 4fd7639 to 5d66beb Compare September 28, 2026 15:31
@rubu
rubu deleted the branch sync/01-framebuffer-stream September 28, 2026 18:30
@rubu rubu closed this Sep 28, 2026
@rubu
rubu deleted the sync/02-eject-button branch September 28, 2026 18:30
@rubu
rubu restored the sync/02-eject-button branch September 28, 2026 18:31
@rubu rubu reopened this Sep 28, 2026
@rubu
rubu merged commit 54653bd into sync/01-framebuffer-stream Sep 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants