Skip to content

ASUS: ROG OMNI receiver mice and keyboards (Harpe Ace Mini, Falchion RX Low Profile), unit tests - #185

Open
metalgitter wants to merge 1 commit into
HeyOkay:mainfrom
metalgitter:asus-omni-receiver
Open

metalgitter wants to merge 1 commit into
HeyOkay:mainfrom
metalgitter:asus-omni-receiver

Conversation

@metalgitter

Copy link
Copy Markdown

Adds the ROG OMNI receiver (0B05:1ACE) to the ASUS provider: the battery of the mouse and the keyboard paired to it. It was listed as "not included" in providers/asus.py.

Closes: no issue (none open for the OMNI receiver).

Source of the protocol: G-Helper (seerge/g-helper), app/Peripherals/PeripheralsProvider.cs (DedectOmniMouse, MouseFromOmniPid, KeyboardFromOmniPid) and the *Omni model classes in Mouse/Models and Keyboard/Models (AsusKeyboard.ReadBattery, Falchion.ParseBattery). Only the protocol facts are used.

How it is read: the receiver's interface 0 is only a keyboard, so the existing interface-0 path never matched it. The vendor collections are on interface 2, each with its own report id and 64-byte reports:

Collection Request Reply
col01 ff02 01 a0 00 00 pair list: from byte 5, four bytes a slot, pid little-endian, 0 ends
col03 ff01 03 12 07 the usual 12 07 mouse reply behind report id 3 (battery byte 5, charging byte 10)
col02 ff00 02 12 01 keyboard: battery byte 6 (byte 11 on the Falchion family), charging byte 9

Only pids in the pair list that G-Helper knows are asked. Collections are grouped per receiver by device instance, so two receivers do not mix. An OMNI mouse uses the same names as KNOWN, so it shares one icon with the same mouse on its cable. Keyboards get kind="keyboard". A sleeping device (all zeros, battery 0 without charging, or ff aa from a keyboard asleep on battery) shows nothing. _read now uses a small _ask helper shared with the OMNI requests; the existing mouse behaviour and its tests are unchanged.

Tested on real hardware: yes, a ROG Harpe Ace Mini (pid 1b65) and a ROG Falchion RX Low Profile (pid 1b06) on one OMNI receiver. --probe shows:

[ASUS] ROG OMNI receiver pid=1ace
    reply: 01 a0 00 02 00 06 1b 02 04 65 1b 03
  paired: 1b06 1b65
  mouse ROG Harpe Ace Mini pid=1b65
    reply: 03 12 07 00 00 37 02 0a e8 0e 00 00
  keyboard ROG Falchion RX Low Profile pid=1b06
    reply: 02 12 01 00 00 00 42 02 01 00 14 42
  -> ROG Harpe Ace Mini: 55%
  -> ROG Falchion RX Low Profile: 66%

The keyboard answered 02 ff aa while asleep and 66 % once awake. The other OMNI pids (Keris II Ace / Origin, Harpe Ace Aim Lab / Extreme, Gladius III Aimpoint, Keris Wireless Aimpoint, Strix Impact III Wireless; Azoth, Azoth Extreme, Strix Scope II 96) come from G-Helper and are unverified.

Unit tests: 16 new tests in tests/test_asus.py (pair list, mouse and keyboard parsing, the Falchion gauge byte, standby, events before the reply, unknown pids, two receivers, OMNI + cable sharing an icon). python -m unittest discover -s tests: 475 tests OK.

Other open pull requests changing the same files: none touch providers/asus.py or tests/test_asus.py. Most open PRs also add to CHANGELOG.md, README.md and docs/protocols.md, and #181, #177, #176, #172, #167, #157, #141, #137, #136, #135, #134, #129, #124, #123 and #39 change halo_battery.pyw; this PR only changes the "asus" Device types label there and a line of the module docstring.

🤖 Generated with Claude Code

…RX Low Profile), unit tests

The OMNI receiver (0B05:1ACE) was left out of the ASUS provider. Its interface 0
is only a keyboard; the battery exchanges are on interface 2, each collection
with its own report id (G-Helper's PeripheralsProvider.cs and *Omni models):

- 01 a0 on ff02: the pair list, which names the mouse and keyboard
- 03 12 07 on ff01: the mouse, the usual 12 07 reply behind report id 3
- 02 12 01 on ff00: the keyboard, battery in byte 6 (byte 11 on the Falchion
  family), charging in byte 9

Collections are grouped per receiver by device instance. A mouse on the OMNI
receiver shares its icon with the same mouse on its cable. Confirmed on a
Harpe Ace Mini and a Falchion RX Low Profile.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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