UMBRA-10: Add DeviceSpecs for the Orochi line (5 PIDs) #18

Merged
David merged 2 commits from feat/orochi-line-devicespecs-UMBRA-10 into main 2026-06-07 05:12:38 +02:00
Owner

UMBRA-10: Add DeviceSpecs for the Orochi line (5 PIDs)

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

PID Model DPI max Poll Lighting Battery Idle
0x0013 Razer Orochi 2011 none none none no no
0x0039 Razer Orochi 2013 6400 0xFF none no no
0x0048 Razer Orochi Chroma 8200 0xFF none no 0xFF
0x0094 Razer Orochi V2 (Receiver) 18000 0x1f none 0x1f 0xFF
0x0095 Razer Orochi V2 (Bluetooth) 18000 0x1f none 0x1f 0xFF

Per-command transaction IDs (read branch-by-branch off razermouse_driver.c, not assumed)

  • Orochi 2011 drives DPI and polling through the special combined set_orochi2011_poll_dpi command umbra has no builder for, so both are None. Its firmware and serial are hard-coded in the driver (no command issued); 0xFF is recorded as the legacy-line default.
  • Orochi 2013 and Chroma run firmware / serial / dpi / poll on the legacy 0xFF txn and build the standard misc DPI/poll commands.
  • Lighting is unmodelled across the whole line: the 2011/2013 use the classic on/off set_led_state path and the Chroma uses the standard-matrix (class 0x03) backlight path, none of which umbra builds (the diamondback_chroma / naga_chroma precedent).
  • The Chroma registers device_idle_time (0xFF) but no charge_level / charge_status, so it carries idle without battery.
  • The Orochi V2 receiver and Bluetooth PIDs share every driver branch: firmware / serial / dpi / poll / battery on 0x1f, charge status hard-coded (AA cells), and idle on 0xFF (the atheris split-idle-txn precedent).

Decision record (AC): Orochi V2 Bluetooth PID 0x0095

INCLUDED. Every case USB_DEVICE_ID_RAZER_OROCHI_V2_RECEIVER in razermouse_driver.c is immediately followed by a fall-through case USB_DEVICE_ID_RAZER_OROCHI_V2_BLUETOOTH, and razer_mouse_probe registers the identical control attribute set (DPI, DPI stages, polling, charge level/status, low-threshold, idle), reached over the standard HID feature-report surface umbra uses. The Bluetooth spec therefore mirrors the receiver field-for-field.

DPI maxima

Documented in each file's doc comment as sensor-derived assumptions (6400 laser for the 2013, 8200 laser for the Chroma, 18000 optical for the V2); the driver does not clamp DPI.

Verification

  • cargo fmt --check: clean.
  • cargo clippy --package umbra-hid --no-default-features --all-targets: clean for the new files (the 3 pre-existing doc_lazy_continuation warnings in basilisk_x_hyperspeed.rs are untouched).
  • cargo test --package umbra-hid --no-default-features: 25 passed, including the new every_orochi_line_pid_is_registered test covering registration plus the per-model dpi/poll/lighting/battery/idle and txn splits.
  • cargo build --package umbra-hid: clean.
  • README "Supported devices" table lists every new model.

#UMBRA-10

## UMBRA-10: Add DeviceSpecs for the Orochi line (5 PIDs) Registers all five Orochi PIDs from OpenRazer's `razermouse_driver.h`, each as its own `DeviceSpec` under `crates/umbra-hid/src/models/` and wired into the `SUPPORTED` table. | PID | Model | DPI max | Poll | Lighting | Battery | Idle | |--------|---------------------------|---------|------|----------|---------|------| | 0x0013 | Razer Orochi 2011 | none | none | none | no | no | | 0x0039 | Razer Orochi 2013 | 6400 | 0xFF | none | no | no | | 0x0048 | Razer Orochi Chroma | 8200 | 0xFF | none | no | 0xFF | | 0x0094 | Razer Orochi V2 (Receiver) | 18000 | 0x1f | none | 0x1f | 0xFF | | 0x0095 | Razer Orochi V2 (Bluetooth) | 18000 | 0x1f | none | 0x1f | 0xFF | ### Per-command transaction IDs (read branch-by-branch off `razermouse_driver.c`, not assumed) - Orochi 2011 drives DPI and polling through the special combined `set_orochi2011_poll_dpi` command umbra has no builder for, so both are `None`. Its firmware and serial are hard-coded in the driver (no command issued); 0xFF is recorded as the legacy-line default. - Orochi 2013 and Chroma run firmware / serial / dpi / poll on the legacy 0xFF txn and build the standard misc DPI/poll commands. - Lighting is unmodelled across the whole line: the 2011/2013 use the classic on/off `set_led_state` path and the Chroma uses the standard-matrix (class 0x03) backlight path, none of which umbra builds (the `diamondback_chroma` / `naga_chroma` precedent). - The Chroma registers `device_idle_time` (0xFF) but no `charge_level` / `charge_status`, so it carries idle without battery. - The Orochi V2 receiver and Bluetooth PIDs share every driver branch: firmware / serial / dpi / poll / battery on 0x1f, charge status hard-coded (AA cells), and idle on 0xFF (the `atheris` split-idle-txn precedent). ### Decision record (AC): Orochi V2 Bluetooth PID 0x0095 INCLUDED. Every `case USB_DEVICE_ID_RAZER_OROCHI_V2_RECEIVER` in `razermouse_driver.c` is immediately followed by a fall-through `case USB_DEVICE_ID_RAZER_OROCHI_V2_BLUETOOTH`, and `razer_mouse_probe` registers the identical control attribute set (DPI, DPI stages, polling, charge level/status, low-threshold, idle), reached over the standard HID feature-report surface umbra uses. The Bluetooth spec therefore mirrors the receiver field-for-field. ### DPI maxima Documented in each file's doc comment as sensor-derived assumptions (6400 laser for the 2013, 8200 laser for the Chroma, 18000 optical for the V2); the driver does not clamp DPI. ### Verification - `cargo fmt --check`: clean. - `cargo clippy --package umbra-hid --no-default-features --all-targets`: clean for the new files (the 3 pre-existing `doc_lazy_continuation` warnings in `basilisk_x_hyperspeed.rs` are untouched). - `cargo test --package umbra-hid --no-default-features`: 25 passed, including the new `every_orochi_line_pid_is_registered` test covering registration plus the per-model dpi/poll/lighting/battery/idle and txn splits. - `cargo build --package umbra-hid`: clean. - README "Supported devices" table lists every new model. #UMBRA-10
feat(umbra-hid): add DeviceSpecs for the Orochi line
Some checks failed
Check / fmt + clippy + build + tests (pull_request) Failing after 4s
995cea41bd
Register all five Orochi 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: Orochi 2011 (0x0013), Orochi 2013 (0x0039), Orochi Chroma (0x0048), and the Orochi V2 receiver/Bluetooth pair (0x0094/0x0095).

Per-command transaction IDs, DPI/poll command paths, lighting paths, and battery/idle support are read branch-by-branch off razermouse_driver.c and razer_mouse_probe, not assumed. The Orochi 2011 drives DPI and polling through the special combined set_orochi2011_poll_dpi command umbra does not build, so both are None; its firmware and serial are hard-coded in the driver (no command issued), with 0xFF recorded as the legacy default. The Orochi 2013 and Chroma run firmware/serial/dpi/poll on 0xFF and build the standard misc DPI/poll commands. Lighting is left unmodelled across the line: the 2011/2013 use the classic on/off set_led_state path and the Chroma uses the standard-matrix class 0x03 backlight path, none of which umbra builds (the diamondback_chroma / naga_chroma precedent). The Chroma registers device_idle_time (0xFF) but no charge_level/charge_status, so it carries idle without battery.

Decision (UMBRA-10 AC) for the Orochi V2 Bluetooth PID (0x0095): INCLUDED. Every receiver branch in the driver is immediately followed by a fall-through Bluetooth case and razer_mouse_probe registers the identical control attribute set, reached over the standard HID feature-report surface umbra uses, so the Bluetooth spec mirrors the receiver field-for-field. Both run firmware/serial/dpi/poll/battery on 0x1f, with charge status hard-coded (AA cells) and idle on 0xFF (the atheris precedent of a split idle txn).

DPI maxima are documented as sensor-derived assumptions (6400 for the 2013 laser, 8200 for the Chroma laser, 18000 for the V2 optical); the driver does not clamp DPI. The README "Supported devices" table lists every new model, and a new every_orochi_line_pid_is_registered test covers registration plus the per-model dpi/poll/lighting/battery/idle and txn splits.

#UMBRA-10

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Merge remote-tracking branch 'origin/main' into feat/orochi-line-devicespecs-UMBRA-10
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
e201df7693
# Conflicts:
#	crates/umbra-hid/tests/protocol.rs
David merged commit b5de324d67 into main 2026-06-07 05:12:38 +02:00
David deleted branch feat/orochi-line-devicespecs-UMBRA-10 2026-06-07 05:12:38 +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!18
No description provided.