Skip to content

drivers: Add Microsoft Intellimouse Classic & Pro support - #62

Closed
hmtheboy154 wants to merge 1 commit into
OpenMouse-Project:mainfrom
hmtheboy154:intellimouse
Closed

drivers: Add Microsoft Intellimouse Classic & Pro support#62
hmtheboy154 wants to merge 1 commit into
OpenMouse-Project:mainfrom
hmtheboy154:intellimouse

Conversation

@hmtheboy154

Copy link
Copy Markdown
Contributor

This PR adds full WebHID protocol support for the Microsoft Classic Intellimouse and Microsoft Pro Intellimouse.

Device Information & Scope:

  • Microsoft Pro Intellimouse: (VID 0x045E, PID 0x082A). Wired USB.
    • Supported: DPI, Tail Light color, Polling Rate (125/500/1000Hz), Lift-off Distance (Low/High).
  • Microsoft Classic Intellimouse: (VID 0x045E, PID 0x0823). Wired USB.
    • Supported: DPI.

Technical Details & Quirks:

  • Read Mechanism:
    • Pro Intellimouse: Functions reliably using standard WebHID feature reports. We trigger a read by sending a query payload via sendFeatureReport(0x24) and synchronously retrieve the device's response using receiveFeatureReport(0x27).
    • Classic Intellimouse: Completely ignores and times out on standard receiveFeatureReport transfers under WebHID. To fetch the device status on this model, we still query via sendFeatureReport(0x24), but we have to listen to the raw inputreport event to catch the hardware interrupt payload containing the response.
  • Payload Constraints & Padding Differences:
    • Pro Intellimouse: Expects strictly sized unpadded payloads for properties. Polling Rate and LOD take 1-byte payloads ([val]), DPI takes 2 bytes ([lsb, msb]), and Lighting takes 3 bytes ([r, g, b]). Sending 0x00 padding on a 1-byte command (e.g. [0x00, val]) silently writes 0x00 to the device (overwriting with 1000Hz / Low LOD).
    • Classic Intellimouse: Unlike the Pro model, the Classic model strictly requires a 0x00 padding byte on its DPI write payload (e.g., [0x00, lsb, msb]).
  • UI Configs: The supportedPollingRates limit is utilized to hide unsupported polling rates (e.g., 250Hz) from the dropdown since the Pro Intellimouse only supports exactly 125, 500, and 1000Hz. The Classic model is set to pollingReadOnly.

Evidence & Verification:

Unknowns / Assumptions:

  • Calibrated surfaces (Surface 1/2/3) for the Pro Intellimouse are currently omitted and marked as unsupported, as the calibration sequences remain complex and risky to map.

Matching OpenMouse PR:

Implement support for Microsoft Intellimouse Classic and Pro, adding reading
and writing of DPI, Lighting, Polling Rate, and Lift-off Distance (LOD).
The Pro model supports full configuration, while the Classic model is limited
to DPI control. The Classic model utilizes a raw hardware interrupt (Input Report)
for feature reads since it does not reply to standard control GET_REPORT transfers
under WebHID.
Credits for protocol reverse engineering and hardware research:
- xlanor/intellimouse
- madsl/Pro-IntelliMouse-Control-Panel
- namazso/ProIntelliColor
Assisted-by: Antigravity:gemini-3.1-pro
Sign up for freeto 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

@hmtheboy154