Skip to content

Wyrm 0.2: one app for all your mice - #1

Merged
Maxwegy merged 3 commits into
mainfrom
universal-mice
Oct 12, 2026
Merged

Maxwegy merged 3 commits into
mainfrom
universal-mice

Conversation

@Maxwegy

@Maxwegy Maxwegy commented Oct 11, 2026

Copy link
Copy Markdown
Owner

Turns Wyrm from a Redragon M811 PRO tool into a brand-neutral app for every mouse, with profiles that cover all your mice.

What changes

  • Driver framework (wyrm/drivers). A registry offers each hid.enumerate() listing to the drivers in priority order. Any mouse no driver handles is still shown by the generic driver.
  • SinoWealth: the existing code, moved behind the driver interface. The model comes from the settings block's marker and per-model JSON files:
    • M811 PRO: full support.
    • M690 PRO: detected only.
    • Unknown markers: shown, never written.
  • Logitech HID++ 2.0 (basic): name, battery, DPI and polling rate, with an allow-list. Receivers can hold up to six mice. Mice running from an on-board profile are only read unless experimental writes are on. Tested against a simulated device only.
  • Universal profiles (schema 2): settings per mouse model. A mouse a profile doesn't set follows the default profile. v0.1 data migrates automatically, with a backup-v1 copy.
  • UI:
    • Home shows a card per mouse with a live In use badge (Raw Input).
    • A sidebar mouse list, and a mouse picker on the editing pages.
    • Pages are driven by each mouse's capabilities.
    • Hints when another vendor app that fights over the same mouse is running.
    • Neutral branding.
  • Docs: README, supported mice, adding a mouse, protocol notes, CONTRIBUTING, issue templates.
  • Fix: device-state handling now runs on the main thread. It was a plain function, which PySide6 ran on the device thread. A regression test covers it.

Test plan

  • python -m pytest: 75 tests. They cover codecs, the SinoWealth and Logitech drivers against simulated devices, the registry, v1 to v2 migration, profiles across several mice and the device thread.
  • tools/screenshot.py renders every page against two simulated mice.
  • Real M811 PRO on its receiver: detected and named, battery read, Default seeded, "In use" lit by real movement. The only write it plans is the Profile button, checked with writes refused and dry run on.
  • The built Wyrm.exe starts, loads the model files and seeds both demo mice.
  • Logitech on real hardware: not available here.

🤖 Generated with Claude Code

Maxwegy and others added 3 commits October 11, 2026 17:04
…al profiles

- wyrm/drivers: a small driver interface (discover without I/O, open, sessions) and a
  registry that offers one hid.enumerate() listing to each driver in turn. Devices that fail
  to open fall back to a generic driver that shows any mouse by name and is retried later.
- SinoWealth: the old wyrm/hid code moved behind the interface. The model is picked by the
  settings block's marker from per-model JSON files: M811 PRO (full), M690 PRO (detected),
  unknown markers shown and never written.
- Logitech: HID++ 2.0 with an allow-list (name, battery, DPI, report rate, on-board mode),
  receivers with up to six mice, on-board profiles left alone unless experimental writes are
  on, and a simulated device for tests and --demo.
- Profiles hold settings per mouse model (schema 2). A mouse a profile doesn't set follows the
  default profile. v0.1 profiles and config migrate to the M811 PRO, with a backup-v1 copy.
- The device hub polls every mouse, saves per-model snapshots, queues writes for sleeping mice
  and asks write permission once per model.
- UI: mouse cards on Home, a sidebar list, a mouse picker on the editing pages, pages driven
  by each mouse's capabilities, a live "In use" badge from Raw Input, hints when a vendor app
  that fights over the same mouse is running, neutral branding.
- Device-state handling runs on the main thread (it was a plain function, which PySide6 ran on
  the device thread), with a regression test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e, protocols

- README: one open-source, offline app for all your mice; a supported-mice table with support
  levels; safety and what's verified per driver; how to add a mouse.
- docs/devices.md, docs/adding-a-device.md (driver interface, model files, safety rules,
  simulated devices), docs/protocols/sinowealth-wireless.md (was protocol-m811pro.md, now with
  a model table), docs/protocols/logitech-hidpp.md, CONTRIBUTING.md.
- Issue templates for new mice and bugs; screenshots with two mice.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Maxwegy
Maxwegy merged commit 2629d98 into main Oct 12, 2026
2 checks passed
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