UMBRA-1: Add DeviceSpecs for the full Razer Naga line (Trinity + 17 sibling PIDs) #7
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/naga-line-devicespecs-UMBRA-1"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
UMBRA-1: Add DeviceSpecs for the full Razer Naga line (Trinity + 17 sibling PIDs)
Registers a
DeviceSpecfor every Razer Naga PID defined in OpenRazer'srazermouse_driver.h(18 PIDs, VID0x1532), one model file each undercrates/umbra-hid/src/models/, wired intoSUPPORTEDinmod.rs. Every transaction id, lighting zone, effect kind, DPI txn, and battery/idle flag was read branch-by-branch fromrazermouse_driver.c(firmware/serial/dpi/poll/brightness/effect/charge/idle switches and therazer_mouse_probeattribute table).Naga Trinity (0x0067), the worked example
Implements the three distinct transaction ids verified from the driver:
0xFF(firmware/serial/DPI/poll),0x3F(matrix brightness),0x1f(static effect). The static-effect mode-switch quirk is honored inDevice::set_effect: it sends the mode-switch report (0x0f/0x02,arg[2]=0x08) and then the bespoke Trinity static report (0x0f/0x03), both on0x1f, via the newcommands::naga_trinity_mode_switch/naga_trinity_effect_staticbuilders.Device::brightness_txnkeeps brightness on0x3Fwhile the effect path stays on0x1f. Newled::ZERO(ZERO_LED) models the single unified matrix zone.Wired/wireless splits
Naga Pro (
0x008F/0x0090) and Naga V2 Pro (0x00A7/0x00A8) are split into separate wired and wireless specs per the existing*_pro_wired/*_pro_wirelessconvention; both variants carryBatterySpec+IdleSpecbecause the driver registers charge/idle for the wired PIDs too (same as the existing DeathAdder V2 Pro pair).Edge-PID decisions (AC)
0x003F): INCLUDED. The driver registers it under the samerazer_mouse_probecase as the Naga Epic Chroma (full DPI/poll/lighting/battery/idle attribute set), so it enumerates as a configurable endpoint umbra can talk to.0x00B4): INCLUDED. The driver registers a control attribute set (DPI, DPI stages, poll, charge, idle) on the receiver PID, so umbra can drive it; it exposes no onboard lighting, so lighting is omitted.Faithful-modeling limits (documented per file)
Some legacy PIDs declare
Nonefor DPI and/or lighting rather than emit wrong wire bytes, because umbra does not yet ship the matching command builders:set_dpi_xy_byte) and on/offset_led_stateLEDs.mouse_extended_matrixlighting path (command class0x03).set_led_statelighting path.These PIDs are still recognized by
umbra info(identity + polling, plus battery/idle for the Epic-family). The missing builders are noted in-code as follow-up work and should be filed as separate issues (tooling gap) before the affected lighting/DPI can be enabled.DPI ceilings
The OpenRazer driver does not clamp DPI, so per-device DPI maxima are sensor-derived and documented as assumptions in each model file (e.g. Trinity 16000, Naga X 18000, Naga Pro 20000, Naga V2 Pro 30000). Reviewers can adjust against hardware.
Tests / checks
cargo build(full workspace),cargo clippy -p umbra-hid --all-targets -- -D warnings, andcargo fmt --checkall pass clean. Addedtests/protocol.rscoverage: Trinity split txns + bespoke static bytes + mode-switch, Naga X serial on0x08, the Pro/V2 Pro battery split, and a guard asserting all 18 Naga PIDs resolve viamodels::lookup.🤖 Generated with Claude Code