UMBRA-5: Add DeviceSpecs for the full Basilisk line (16 PIDs) #12

Merged
David merged 1 commit from feat/basilisk-line-devicespecs-UMBRA-5 into main 2026-06-06 11:30:02 +02:00
Owner

UMBRA-5: Add DeviceSpecs for the full Basilisk line (16 PIDs)

Resolves UMBRA-5.

Adds a DeviceSpec for the 16 remaining Basilisk PIDs from OpenRazer's driver/razermouse_driver.h (the Basilisk V3, 0x0099, landed earlier), each in its own <model>.rs under crates/umbra-hid/src/models/, registered in SUPPORTED, and listed in the README "Supported devices" table.

What was read from the driver

Per-command transaction IDs, DPI/poll paths, lighting zones, effect kinds, and battery/idle support were read branch-by-branch from razermouse_driver.c and the per-PID razer_mouse_probe attribute lists, not assumed. A single device mixes transaction IDs across command classes.

PID Model DPI max Lighting Battery Idle
0x0064 Razer Basilisk 16,000 Logo + Scroll (0x3f) - -
0x0065 Razer Basilisk Essential 6400 Logo (0x3f) - -
0x0083 Razer Basilisk X HyperSpeed 16,000 none 0xFF 0xFF
0x0085 Razer Basilisk V2 26,000 Logo + Scroll (0x1f) - -
0x0086 Razer Basilisk Ultimate (Wired) 26,000 Logo + Scroll + L + R (0x1f) 0x1f 0xFF
0x0088 Razer Basilisk Ultimate (Receiver) 26,000 Logo + Scroll + L + R (0x1f) 0x1f 0xFF
0x00AA Razer Basilisk V3 Pro (Wired) 30,000 Logo + Scroll (0x1f) 0x1f 0x1f
0x00AB Razer Basilisk V3 Pro (Wireless) 30,000 Logo + Scroll (0x1f) 0x1f 0x1f
0x00B9 Razer Basilisk V3 X HyperSpeed 18,000 Scroll (0x1f) 0x1f 0x1f
0x00CB Razer Basilisk V3 35K 35,000 Logo + Scroll (0x1f) - -
0x00CC Razer Basilisk V3 Pro 35K (Wired) 35,000 Logo + Scroll (0x1f) 0x1f 0x1f
0x00CD Razer Basilisk V3 Pro 35K (Wireless) 35,000 Logo + Scroll (0x1f) 0x1f 0x1f
0x00D3 Razer Basilisk Mobile (Wired) 18,000 none 0x1f 0x1f
0x00D4 Razer Basilisk Mobile (Receiver) 18,000 none 0x1f 0x1f
0x00D6 Razer Basilisk V3 Pro 35K Phantom Green (Wired) 35,000 Scroll (0x1f) 0x1f 0x1f
0x00D7 Razer Basilisk V3 Pro 35K Phantom Green (Wireless) 35,000 Scroll (0x1f) 0x1f 0x1f

Decisions worth a reviewer's eye

  • Split transaction IDs. The classic Basilisk/Essential run firmware/serial/dpi/poll on 0x3f; everything from the V2 onward on 0x1f. The Basilisk Ultimate carries battery on 0x1f but idle on 0xFF (the driver puts idle in a separate switch arm), mirroring the existing DeathAdder V2 Pro precedent.
  • Phantom Green is differentiated. Its razer_mouse_probe branch registers only the Scroll zone, not the Logo zone the plain V3 Pro 35K keeps, so this spec exposes a single Scroll zone (the issue noted "feature content matching the V3 Pro 35K branches unless the driver differentiates them" - it does).
  • Underglow not modeled. The V3 Pro generation exposes a whole-device Chroma underglow matrix; no umbra LED zone addresses it, so it is left unmodeled and documented, consistent with basilisk_v3.
  • Receiver PIDs (AC). The four receiver PIDs (0x0083, 0x0088, 0x00B9, 0x00D4) are all INCLUDED because the driver registers a full control attribute set against each PID in razer_mouse_probe, per the UMBRA-1 receiver precedent. The AA-powered receivers carry battery + idle, but the driver hard-codes is_charging to 0.
  • No-builder features declared None. The X HyperSpeed receiver exposes no onboard lighting; the Basilisk Mobile drives its matrix through a bespoke razer_basilisk_mobile_effect_static builder umbra does not ship, so its lighting is omitted. DPI maxima are sensor-derived assumptions documented in each file's doc comment (Focus+ 26K for V2/Ultimate/V3, Focus Pro 30K for V3 Pro, 35K for the 35K editions, per the UMBRA-5 assumptions).

Verification

  • cargo fmt --check, cargo clippy --workspace --all-targets, and the workspace build all pass clean.
  • cargo test --package umbra-hid --no-default-features passes, including a new every_basilisk_line_pid_is_registered test covering registration plus the zone/txn/split-battery and receiver-inclusion decisions.

🤖 Generated with Claude Code

UMBRA-5: Add DeviceSpecs for the full Basilisk line (16 PIDs) Resolves UMBRA-5. Adds a `DeviceSpec` for the 16 remaining Basilisk PIDs from OpenRazer's `driver/razermouse_driver.h` (the Basilisk V3, 0x0099, landed earlier), each in its own `<model>.rs` under `crates/umbra-hid/src/models/`, registered in `SUPPORTED`, and listed in the README "Supported devices" table. ## What was read from the driver Per-command transaction IDs, DPI/poll paths, lighting zones, effect kinds, and battery/idle support were read branch-by-branch from `razermouse_driver.c` and the per-PID `razer_mouse_probe` attribute lists, not assumed. A single device mixes transaction IDs across command classes. | PID | Model | DPI max | Lighting | Battery | Idle | |--------|-------|---------|----------|---------|------| | 0x0064 | Razer Basilisk | 16,000 | Logo + Scroll (0x3f) | - | - | | 0x0065 | Razer Basilisk Essential | 6400 | Logo (0x3f) | - | - | | 0x0083 | Razer Basilisk X HyperSpeed | 16,000 | none | 0xFF | 0xFF | | 0x0085 | Razer Basilisk V2 | 26,000 | Logo + Scroll (0x1f) | - | - | | 0x0086 | Razer Basilisk Ultimate (Wired) | 26,000 | Logo + Scroll + L + R (0x1f) | 0x1f | 0xFF | | 0x0088 | Razer Basilisk Ultimate (Receiver) | 26,000 | Logo + Scroll + L + R (0x1f) | 0x1f | 0xFF | | 0x00AA | Razer Basilisk V3 Pro (Wired) | 30,000 | Logo + Scroll (0x1f) | 0x1f | 0x1f | | 0x00AB | Razer Basilisk V3 Pro (Wireless) | 30,000 | Logo + Scroll (0x1f) | 0x1f | 0x1f | | 0x00B9 | Razer Basilisk V3 X HyperSpeed | 18,000 | Scroll (0x1f) | 0x1f | 0x1f | | 0x00CB | Razer Basilisk V3 35K | 35,000 | Logo + Scroll (0x1f) | - | - | | 0x00CC | Razer Basilisk V3 Pro 35K (Wired) | 35,000 | Logo + Scroll (0x1f) | 0x1f | 0x1f | | 0x00CD | Razer Basilisk V3 Pro 35K (Wireless) | 35,000 | Logo + Scroll (0x1f) | 0x1f | 0x1f | | 0x00D3 | Razer Basilisk Mobile (Wired) | 18,000 | none | 0x1f | 0x1f | | 0x00D4 | Razer Basilisk Mobile (Receiver) | 18,000 | none | 0x1f | 0x1f | | 0x00D6 | Razer Basilisk V3 Pro 35K Phantom Green (Wired) | 35,000 | Scroll (0x1f) | 0x1f | 0x1f | | 0x00D7 | Razer Basilisk V3 Pro 35K Phantom Green (Wireless) | 35,000 | Scroll (0x1f) | 0x1f | 0x1f | ## Decisions worth a reviewer's eye - **Split transaction IDs.** The classic Basilisk/Essential run firmware/serial/dpi/poll on 0x3f; everything from the V2 onward on 0x1f. The Basilisk Ultimate carries battery on 0x1f but idle on 0xFF (the driver puts idle in a separate switch arm), mirroring the existing DeathAdder V2 Pro precedent. - **Phantom Green is differentiated.** Its `razer_mouse_probe` branch registers only the Scroll zone, not the Logo zone the plain V3 Pro 35K keeps, so this spec exposes a single Scroll zone (the issue noted "feature content matching the V3 Pro 35K branches unless the driver differentiates them" - it does). - **Underglow not modeled.** The V3 Pro generation exposes a whole-device Chroma underglow matrix; no umbra LED zone addresses it, so it is left unmodeled and documented, consistent with `basilisk_v3`. - **Receiver PIDs (AC).** The four receiver PIDs (0x0083, 0x0088, 0x00B9, 0x00D4) are all INCLUDED because the driver registers a full control attribute set against each PID in `razer_mouse_probe`, per the UMBRA-1 receiver precedent. The AA-powered receivers carry battery + idle, but the driver hard-codes `is_charging` to 0. - **No-builder features declared `None`.** The X HyperSpeed receiver exposes no onboard lighting; the Basilisk Mobile drives its matrix through a bespoke `razer_basilisk_mobile_effect_static` builder umbra does not ship, so its lighting is omitted. DPI maxima are sensor-derived assumptions documented in each file's doc comment (Focus+ 26K for V2/Ultimate/V3, Focus Pro 30K for V3 Pro, 35K for the 35K editions, per the UMBRA-5 assumptions). ## Verification - `cargo fmt --check`, `cargo clippy --workspace --all-targets`, and the workspace build all pass clean. - `cargo test --package umbra-hid --no-default-features` passes, including a new `every_basilisk_line_pid_is_registered` test covering registration plus the zone/txn/split-battery and receiver-inclusion decisions. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(umbra-hid): add DeviceSpecs for the full Basilisk line
Some checks failed
Check / fmt + clippy + build + tests (pull_request) Failing after 5s
Create release / Create release from merged PR (pull_request) Has been skipped
02c4c71c55
Register the 16 remaining Basilisk PIDs from OpenRazer's driver/razermouse_driver.h that umbra did not recognize (the Basilisk V3, 0x0099, landed earlier), each as its own DeviceSpec under crates/umbra-hid/src/models/. Per-command transaction IDs, DPI/poll paths, lighting surfaces, and battery/idle support are read branch-by-branch from razermouse_driver.c and razer_mouse_probe, not assumed; a single device mixes transaction IDs across command classes.

Added: Basilisk (0x0064), Basilisk Essential (0x0065), Basilisk X HyperSpeed (0x0083), Basilisk V2 (0x0085), Basilisk Ultimate wired/receiver (0x0086/0x0088), Basilisk V3 Pro wired/wireless (0x00AA/0x00AB), Basilisk V3 X HyperSpeed (0x00B9), Basilisk V3 35K (0x00CB), Basilisk V3 Pro 35K wired/wireless (0x00CC/0x00CD), Basilisk Mobile wired/receiver (0x00D3/0x00D4), and Basilisk V3 Pro 35K Phantom Green wired/wireless (0x00D6/0x00D7).

Feature decisions read off the driver: the classic Basilisk/Essential run firmware/serial/dpi/poll on 0x3f, everything from the V2 onward on 0x1f. The Basilisk Ultimate carries four addressable zones and splits its battery (0x1f) and idle (0xFF) transaction IDs. The V3 Pro generation widens DPI to the Focus Pro sensor and exposes battery + idle on 0x1f; the Phantom Green edition drops the Logo zone the plain V3 Pro 35K keeps, leaving a single Scroll zone, per its distinct probe branch. The whole-device Chroma underglow matrix is not modeled (no umbra LED zone addresses it), mirroring the basilisk_v3 precedent.

Features with no umbra command builder are declared None with a doc comment: the Basilisk X HyperSpeed receiver exposes no onboard lighting, and the Basilisk Mobile drives its matrix through a bespoke razer_basilisk_mobile_effect_static builder umbra does not ship, so its lighting is omitted. Modeled DPI maxima are sensor-derived assumptions documented in each file.

Decision (AC): the four receiver PIDs (X HyperSpeed 0x0083, Ultimate receiver 0x0088, V3 X HyperSpeed 0x00B9, Mobile receiver 0x00D4) are all INCLUDED because the driver registers a full control attribute set against each PID in razer_mouse_probe, per the UMBRA-1 receiver precedent. The AA-powered receivers (0x0083, 0x00B9, 0x00D4) carry battery + idle but the driver hard-codes is_charging to 0.

Registration plus the zone/txn/split-battery and receiver-inclusion decisions are covered by a new every_basilisk_line_pid_is_registered test, and the README "Supported devices" table lists every newly added model.

#UMBRA-5

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
David merged commit 3aa6b56c06 into main 2026-06-06 11:30:02 +02:00
David deleted branch feat/basilisk-line-devicespecs-UMBRA-5 2026-06-06 11:30:02 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
pandoras-box/umbra!12
No description provided.