Skip to content

fix(hid): improve composite keyboard and mouse support on iPadOS - #2

Open
s-qin wants to merge 1 commit into
Divisionless:mainfrom
s-qin:fix/ipados-composite-hid-pointer
Open

fix(hid): improve composite keyboard and mouse support on iPadOS#2
s-qin wants to merge 1 commit into
Divisionless:mainfrom
s-qin:fix/ipados-composite-hid-pointer

Conversation

@s-qin

@s-qin s-qin commented Sep 7, 2026

Copy link
Copy Markdown

fix(hid): improve composite keyboard and mouse support on iPadOS

Problem

The BLE advertisement classified the peripheral as a plain HID keyboard (Appearance 0x03C1, HID Keyboard) while the device is actually a keyboard + mouse composite HID peripheral. iPadOS then did not expose its native pointer unless AssistiveTouch was enabled.

Observed behavior (before the fix, real hardware)

  • kbd_subscribed=true, mouse_subscribed=true — both HID report subscriptions active
  • keyboard reports delivered (typed text worked on iPad)
  • mouse report command acknowledged by the daemon
  • AssistiveTouch OFF: no iPadOS pointer
  • AssistiveTouch ON: pointer appeared immediately

Fix

guest/openspan_ble.py: change the advertisement Appearance from 0x03C1 (HID Keyboard) to 0x03C0 (Generic HID) — the peripheral is a keyboard + mouse composite, so it is advertised as generic human interface. No report-map / HID descriptor / GATT changes: mouse reports already worked; this is a compatibility classification fix made as a single-point minimal change.

Validation

Manually tested on real hardware (fresh BLE re-pair after the change):

  • AssistiveTouch OFF
  • native iPadOS pointer appears
  • movement works
  • click works
  • scroll wheel works
  • keyboard still works
  • no dependence on AssistiveTouch

Note: the wording describes observed iPadOS compatibility behavior on real hardware tests, not internal iPadOS behavior claims.

No CI pipeline configured in this repository (no .github/workflows); static checks passed (python -m py_compile, git diff --check).

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.

1 participant