UMBRA-11: Add DeviceSpecs for the Pro Click line (7 PIDs) #19

Merged
David merged 2 commits from feat/pro-click-line-devicespecs-UMBRA-11 into main 2026-06-07 05:21:18 +02:00
Owner

UMBRA-11: Add DeviceSpecs for the Pro Click line (7 PIDs)

Registers all seven Pro Click PIDs from OpenRazer's razermouse_driver.h, each as its own DeviceSpec file under crates/umbra-hid/src/models/ and wired into the SUPPORTED table:

PID Model Lighting Battery Idle txn
0x0077 Razer Pro Click (Receiver) none yes 0xFF
0x0080 Razer Pro Click (Wired) none yes 0xFF
0x009A Razer Pro Click Mini (Receiver) none yes 0x1f
0x00C7 Razer Pro Click V2 Vertical Edition (Wired) Matrix (1 zone), static/spectrum yes 0x1f
0x00C8 Razer Pro Click V2 Vertical Edition (Wireless) Matrix (1 zone), static/spectrum yes 0x1f
0x00D0 Razer Pro Click V2 (Wired) Matrix (1 zone), static/spectrum yes 0x1f
0x00D1 Razer Pro Click V2 (Wireless) Matrix (1 zone), static/spectrum yes 0x1f

Receiver decision (AC)

Both the Pro Click Receiver (0x0077) and the AA-powered Pro Click Mini Receiver (0x009A) are INCLUDED: razer_mouse_probe registers a control attribute set (poll rate, DPI, DPI stages, charge level/status, low-threshold, idle) against each dongle PID, so they enumerate as configurable endpoints umbra can talk to. This mirrors the naga_v2_hyperspeed receiver precedent from UMBRA-1.

Feature derivation

Per-command transaction IDs, poll rates, lighting zones, effect kinds, and battery/idle support are read branch-by-branch off razermouse_driver.c, not assumed. Every command class runs on txn 0x1f, with one exception: the original Receiver / Wired PIDs put the idle attribute on a separate 0xFF switch arm. BatterySpec follows charge level/status (0x1f) per the deathadder_v2_pro_wired precedent, even though those two PIDs drive low-threshold on 0xFF. All seven use the standard set_polling_rate path, so poll rates are 125 / 500 / 1000 Hz.

The productivity originals (Receiver, Wired, Mini) expose no onboard lighting, so lighting is None. The V2 generation drives a single underglow matrix zone through the razer_chroma_extended_matrix_* path umbra builds, addressed as ZERO_LED on 0x1f. The driver registers spectrum, wave, static and none effects for the V2; umbra ships no Wave builder, so only None / Static / Spectrum are advertised, with the gap noted in the doc comments. The plain V2 PIDs also wire up tilt-wheel controls that umbra's Features struct does not represent, also noted.

DPI maxima are documented as sensor-derived assumptions in each file's doc comment: 16000 for the original Pro Click, 12000 for the Mini, 30000 for the V2 generation.

Tests / docs

  • New every_pro_click_pid_is_registered test in crates/umbra-hid/tests/protocol.rs covers registration, the per-family txn splits, lighting zone/effects, battery/idle, and DPI assumptions.
  • README "Supported devices" table lists all seven new models with VID:PID, DPI max, polling, lighting, and battery columns.
  • cargo build, cargo test --package umbra-hid --no-default-features (25 passed), and cargo fmt --check pass clean; clippy reports no new warnings in the added files.

#UMBRA-11

🤖 Generated with Claude Code

## UMBRA-11: Add DeviceSpecs for the Pro Click line (7 PIDs) Registers all seven Pro Click PIDs from OpenRazer's `razermouse_driver.h`, each as its own `DeviceSpec` file under `crates/umbra-hid/src/models/` and wired into the `SUPPORTED` table: | PID | Model | Lighting | Battery | Idle txn | |--------|---------------------------------------------|----------|---------|----------| | 0x0077 | Razer Pro Click (Receiver) | none | yes | 0xFF | | 0x0080 | Razer Pro Click (Wired) | none | yes | 0xFF | | 0x009A | Razer Pro Click Mini (Receiver) | none | yes | 0x1f | | 0x00C7 | Razer Pro Click V2 Vertical Edition (Wired) | Matrix (1 zone), static/spectrum | yes | 0x1f | | 0x00C8 | Razer Pro Click V2 Vertical Edition (Wireless) | Matrix (1 zone), static/spectrum | yes | 0x1f | | 0x00D0 | Razer Pro Click V2 (Wired) | Matrix (1 zone), static/spectrum | yes | 0x1f | | 0x00D1 | Razer Pro Click V2 (Wireless) | Matrix (1 zone), static/spectrum | yes | 0x1f | ### Receiver decision (AC) Both the Pro Click Receiver (0x0077) and the AA-powered Pro Click Mini Receiver (0x009A) are INCLUDED: `razer_mouse_probe` registers a control attribute set (poll rate, DPI, DPI stages, charge level/status, low-threshold, idle) against each dongle PID, so they enumerate as configurable endpoints umbra can talk to. This mirrors the `naga_v2_hyperspeed` receiver precedent from UMBRA-1. ### Feature derivation Per-command transaction IDs, poll rates, lighting zones, effect kinds, and battery/idle support are read branch-by-branch off `razermouse_driver.c`, not assumed. Every command class runs on txn `0x1f`, with one exception: the original Receiver / Wired PIDs put the idle attribute on a separate `0xFF` switch arm. `BatterySpec` follows charge level/status (`0x1f`) per the `deathadder_v2_pro_wired` precedent, even though those two PIDs drive low-threshold on `0xFF`. All seven use the standard `set_polling_rate` path, so poll rates are 125 / 500 / 1000 Hz. The productivity originals (Receiver, Wired, Mini) expose no onboard lighting, so lighting is `None`. The V2 generation drives a single underglow matrix zone through the `razer_chroma_extended_matrix_*` path umbra builds, addressed as `ZERO_LED` on `0x1f`. The driver registers spectrum, wave, static and none effects for the V2; umbra ships no Wave builder, so only `None` / `Static` / `Spectrum` are advertised, with the gap noted in the doc comments. The plain V2 PIDs also wire up tilt-wheel controls that umbra's `Features` struct does not represent, also noted. DPI maxima are documented as sensor-derived assumptions in each file's doc comment: 16000 for the original Pro Click, 12000 for the Mini, 30000 for the V2 generation. ### Tests / docs - New `every_pro_click_pid_is_registered` test in `crates/umbra-hid/tests/protocol.rs` covers registration, the per-family txn splits, lighting zone/effects, battery/idle, and DPI assumptions. - README "Supported devices" table lists all seven new models with VID:PID, DPI max, polling, lighting, and battery columns. - `cargo build`, `cargo test --package umbra-hid --no-default-features` (25 passed), and `cargo fmt --check` pass clean; clippy reports no new warnings in the added files. #UMBRA-11 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(umbra-hid): add DeviceSpecs for the Pro Click line
Some checks failed
Check / fmt + clippy + build + tests (pull_request) Failing after 4s
0dda383371
Register all seven Pro Click PIDs from OpenRazer's razermouse_driver.h, each as its own DeviceSpec file under crates/umbra-hid/src/models/ and wired into the SUPPORTED table: Pro Click Receiver (0x0077), Pro Click Wired (0x0080), Pro Click Mini Receiver (0x009A), Pro Click V2 Vertical Edition wired/wireless (0x00C7/0x00C8), and Pro Click V2 wired/wireless (0x00D0/0x00D1).

Receiver decision (UMBRA-11 AC): both the Pro Click Receiver (0x0077) and the AA-powered Pro Click Mini Receiver (0x009A) are INCLUDED because razer_mouse_probe registers a control attribute set (poll rate, DPI, DPI stages, charge level/status, low-threshold, idle) against each dongle PID, so they enumerate as configurable endpoints, mirroring the naga_v2_hyperspeed receiver precedent.

Per-command transaction IDs, poll rates, lighting zones, effect kinds, and battery/idle support are read branch-by-branch off razermouse_driver.c, not assumed. Every command class runs on txn 0x1f, with one exception: the original Receiver / Wired PIDs put the idle attribute on a separate 0xFF arm. Battery follows charge level/status (0x1f) per the deathadder_v2_pro_wired precedent, even though those two PIDs drive low-threshold on 0xFF. All seven use the standard set_polling_rate path, so poll rates are 125/500/1000 Hz.

The productivity originals (Receiver, Wired, Mini) expose no onboard lighting, so lighting is None. The V2 generation drives a single underglow matrix zone through the razer_chroma_extended_matrix_* path umbra builds, addressed as ZERO_LED on 0x1f; the driver registers spectrum, wave, static and none effects, but umbra ships no Wave builder, so only None/Static/Spectrum are advertised. The plain V2 PIDs also wire up tilt-wheel controls that umbra's Features struct does not represent, noted in their doc comments.

DPI maxima are documented as sensor-derived assumptions (16000 for the original Pro Click, 12000 for the Mini, 30000 for the V2 generation). The README "Supported devices" table lists every new model, and a new every_pro_click_pid_is_registered test covers registration plus the per-family txn, lighting, battery/idle, and DPI assumptions.

#UMBRA-11

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Merge remote-tracking branch 'origin/main' into feat/pro-click-line-devicespecs-UMBRA-11
All checks were successful
Check / fmt + clippy + build + tests (pull_request) Successful in 18s
Create release / Create release from merged PR (pull_request) Has been skipped
83f5dc238b
# Conflicts:
#	README.md
#	crates/umbra-hid/tests/protocol.rs
David merged commit a8fa268767 into main 2026-06-07 05:21:18 +02:00
David deleted branch feat/pro-click-line-devicespecs-UMBRA-11 2026-06-07 05:21:18 +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!19
No description provided.