AssistiveTouch eye tracker HID over USB-C/iAP2 accepted by iPadOS, but gaze point mapping is wrong

I’m implementing an Apple AssistiveTouch eye tracker accessory for iPad over USB-C using iAP2 plus native HID Gaze Point reports.

Current state:

  • iAP2 authentication succeeds
  • identification succeeds
  • StartNativeHID is received
  • AssistiveTouchInformation(IsEnabled=true) is received
  • iPadOS enumerates the HID interface and consumes the interrupt IN reports

The remaining issue is that the gaze-point behavior is not interpreted as direct screen coordinates. Repeated fixed gaze inputs produce deterministic but incorrect cursor motion, often appearing like orbiting or projection around a locus rather than stable placement.

I have tested:

  • the 119-byte Apple example HID descriptor from the Accessory Interface Specification
  • two report-1 layouts:
    • timestamp + x + y
    • status + timestamp + x + y
  • normalized and physical coordinate scaling
  • verified on the wire that the intended report bytes are sent and consumed

iPad console logs show internal model point (HID r) values and multiple derived Pointer positions for a single commanded point, which suggests the device is accepted but the gaze report semantics are still not what iPadOS expects.

Questions:

  1. Is the example Gaze Point HID descriptor in the Apple Accessory Interface Specification sufficient as-is for iPadOS?
  2. What exact payload layout is expected for the Gaze Point report?
  3. Is a per-sample status byte required in the gaze input report?
  4. Are additional HID feature/input reports required for correct interpretation?

I can provide:

  • the exact HID descriptor bytes
  • sample report payloads
  • USB analyzer traces
  • iPad console excerpts showing the resulting model-point and pointer projections

I found out that by switching the AssistiveTouch off and back on in iPadOS settings the issue disappears. Not sure why this is required. Seems like some internal iPadOS HID gaze point state issue.

Hello, thank you for all these details! To further debug the issue, it would be great if you could file a Feedback Assistant report and attach a sysdiagnose, along with all the HID descriptor bytes, sample report payloads, and the iPad console excerpts. Please feel free to post the feedback report ID here

Thank you for checking this. Turns out that my initial HID reports from the gadget to iPad had wrong size causing the issue. After fixing that it works as expected on the iPad Built-In Display.

However, on the external monitor in the Extended Display mode there appears to be another issue, this time with the coordinate mapping. I have filed a feedback FB22950930.

AssistiveTouch eye tracker HID over USB-C/iAP2 accepted by iPadOS, but gaze point mapping is wrong
 
 
Q