From 1db47cf223b1481f4ff7ffcf29fa5cbe5b952745 Mon Sep 17 00:00:00 2001 From: ydw1904 Date: Thu, 1 Oct 2026 11:37:11 +0800 Subject: [PATCH] razer: mark the Diamondback Chroma (0x004c) verified on hardware Firmware "Mouse 1.0" over the cable, through OpenMouse Bridge on Windows, with RazerHidClient unmodified: - Identity, firmware, DPI (1800) and polling (500 Hz) read back on the existing 0xff transaction id. - 800 DPI and 1000 Hz each wrote, read back and were restored. - Polling was read back but not measured (the sampler saw dropouts), and the DPI stage read gave nothing usable, so no stage editor is offered. The app's hardware test export is in captures/razer-diamondback-chroma/. Co-Authored-By: Claude Opus 5.5 --- captures/razer-diamondback-chroma/README.md | 17 +++ .../hardware-test-2026-09-30.json | 132 ++++++++++++++++++ docs/razer-testing.md | 1 + src/drivers/razer/devices.test.ts | 5 +- src/razer/devices.ts | 7 +- 5 files changed, 160 insertions(+), 2 deletions(-) create mode 100644 captures/razer-diamondback-chroma/README.md create mode 100644 captures/razer-diamondback-chroma/hardware-test-2026-09-30.json diff --git a/captures/razer-diamondback-chroma/README.md b/captures/razer-diamondback-chroma/README.md new file mode 100644 index 0000000..1ff181f --- /dev/null +++ b/captures/razer-diamondback-chroma/README.md @@ -0,0 +1,17 @@ +# Razer Diamondback Chroma (`1532:004c`) hardware report, 2026-09-30 + +Reporter's own mouse, firmware "Mouse 1.0", wired, Windows. Connected through +OpenMouse Bridge with an unmodified `RazerHidClient`; the Bridge listed seven +HID paths for the device and opened all of them. + +- `hardware-test-2026-09-30.json`: the app's hardware test export. Identity, + firmware, DPI (1800) and polling (500 Hz) read back; 800 DPI and 1000 Hz each + wrote, read back and were restored. Verdict: pass. + +What it does not settle: + +- Polling was read back but not measured: the sampler averaged 305 Hz against + the reported 500 Hz and flagged dropouts, so it skipped rather than failed. +- The DPI stage read (`0x04`/`0x86`) gave nothing usable, so no stage editor + is offered on this model. +- No raw feature reports were captured in this session. diff --git a/captures/razer-diamondback-chroma/hardware-test-2026-09-30.json b/captures/razer-diamondback-chroma/hardware-test-2026-09-30.json new file mode 100644 index 0000000..e010e9d --- /dev/null +++ b/captures/razer-diamondback-chroma/hardware-test-2026-09-30.json @@ -0,0 +1,132 @@ +{ + "device": { + "present": true, + "brand": "Razer", + "name": "Razer Diamondback Chroma", + "vendorId": 5426, + "productId": 76, + "productName": "Razer Diamondback Chroma", + "transport": "bridge", + "connectionType": "Wired", + "pollingRateHz": 500, + "supportedPollingRates": [ + 125, + 500, + 1000 + ], + "dpi": 1800, + "dpiStages": null, + "activeDpiStage": null, + "batteryPercent": null, + "batteryState": "Unknown", + "firmware": [ + "Mouse 1.0" + ], + "liftOffDistance": null, + "driverFamily": "razer", + "deviceMode": null, + "collectionsSummary": "interfaces 0x0001:0x0002, 0x000C:0x0001, 0x0001:0x0006, 0x0001:0x0080, 0x0001:0x0000", + "signalStrength": null, + "receiverOnline": null, + "receiverRfId": null, + "pairingInProgress": false + }, + "results": [ + { + "key": "connection", + "label": "Device connected", + "status": "pass", + "detail": "Connected through OpenMouse Bridge" + }, + { + "key": "interface", + "label": "Control interface", + "status": "pass", + "detail": "interfaces 0x0001:0x0002, 0x000C:0x0001, 0x0001:0x0006, 0x0001:0x0080, 0x0001:0x0000" + }, + { + "key": "identity", + "label": "Device identity", + "status": "pass", + "detail": "Razer Razer Diamondback Chroma" + }, + { + "key": "driver", + "label": "Driver identification", + "status": "pass", + "detail": "Razer razer" + }, + { + "key": "dpi", + "label": "DPI read-back", + "status": "pass", + "detail": "1,800 DPI" + }, + { + "key": "pollingRead", + "label": "Polling rate read-back", + "status": "pass", + "detail": "500 Hz" + }, + { + "key": "battery", + "label": "Battery read-back", + "status": "skip", + "detail": "Not reported by this device." + }, + { + "key": "firmware", + "label": "Firmware read-back", + "status": "pass", + "detail": "Mouse 1.0" + }, + { + "key": "liftOff", + "label": "Lift-off read-back", + "status": "skip", + "detail": "Not reported by this device." + }, + { + "key": "link", + "label": "Wireless link (receiver)", + "status": "skip", + "detail": null + }, + { + "key": "flashRead", + "label": "Flash / EEPROM read-back", + "status": "pass", + "detail": "decoded fields are in range (dpi, polling)" + }, + { + "key": "brandWirelessBattery", + "label": "Razer wireless battery", + "status": "skip", + "detail": null + }, + { + "key": "sampling", + "label": "Polling rate sampling", + "status": "skip", + "detail": "avg 305 Hz vs reported 500 Hz — dropout or rate mismatch detected, so the sample is not counted as a failure." + }, + { + "key": "flashWrite", + "label": "Flash write round-trip", + "status": "pass", + "detail": "wrote 800 DPI → read back → restored 1,800 DPI · wrote 1,000 Hz → read back → restored 500 Hz · Lift-off skipped" + } + ], + "verdict": "pass", + "durationMs": 17802.09999999404, + "runAt": "2026-09-30T21:58:33.335Z", + "build": "BETA · v2.0.58d", + "supportedPage": { + "listed": true, + "status": "likely", + "label": "Test Needed", + "matchedBy": "pid", + "pageModel": "Diamondback Chroma", + "detail": "listed as Test Needed on the supported-devices page — this passing verification supports moving it to Supported." + } +} \ No newline at end of file diff --git a/docs/razer-testing.md b/docs/razer-testing.md index d65c23d..3b32c56 100644 --- a/docs/razer-testing.md +++ b/docs/razer-testing.md @@ -25,6 +25,7 @@ Identifiers verified on hardware: - `1532:00a3` — Cobra, wired (separate driver) - `1532:00b6` — DeathAdder V3 Pro, wired (firmware 2.1) - `1532:00b7` — DeathAdder V3 Pro, stock HyperSpeed receiver (firmware 2.1) +- `1532:004c`: Diamondback Chroma, wired (firmware 1.0, through OpenMouse Bridge) Mouse Dock Pro uses the same 90-byte protocol as the paired mouse. It has no fixed polling list: if the paired mouse answers the extended polling command it diff --git a/src/drivers/razer/devices.test.ts b/src/drivers/razer/devices.test.ts index 02f2eeb..746d3e2 100644 --- a/src/drivers/razer/devices.test.ts +++ b/src/drivers/razer/devices.test.ts @@ -65,6 +65,9 @@ const VERIFIED_SINCE: ReadonlyArray<[number, VerifiedProfile]> = [ // Same mouse over the cable, same session: 13/13 writes persisted, 126 Hz // peak measured at 125, battery reports "Charging". [0x00b6, { model: "DeathAdder V3 Pro (Wired)", wireless: false, maxDpi: 30000, transactionId: RAZER_TRANSACTION_ID, rates: RATES_1K, highRate: false }], + // Diamondback Chroma (firmware 1.0) over the cable through OpenMouse Bridge: + // answers on `0xff`, and DPI and legacy polling each round-tripped. + [0x004c, { model: "Diamondback Chroma", wireless: false, maxDpi: 16000, transactionId: RAZER_TRANSACTION_ID_FF, rates: RATES_1K, highRate: false }], ]; const VERIFIED = [...REFACTOR_BASELINE, ...VERIFIED_SINCE]; @@ -77,7 +80,7 @@ const VERIFIED = [...REFACTOR_BASELINE, ...VERIFIED_SINCE]; * hardware-tested", so it is pinned like the others without claiming to be * verified. */ -const HARDWARE_VERIFIED: readonly number[] = [0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00c0, 0x00c1, 0x00b8, 0x00b7, 0x00b6]; +const HARDWARE_VERIFIED: readonly number[] = [0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00c0, 0x00c1, 0x00b8, 0x00b7, 0x00b6, 0x004c]; test("every pinned product keeps exactly the profile it was given", () => { // A silent change to any of these would only show up on hardware, which is diff --git a/src/razer/devices.ts b/src/razer/devices.ts index 8b7fe3c..56b620a 100644 --- a/src/razer/devices.ts +++ b/src/razer/devices.ts @@ -441,7 +441,12 @@ const PRODUCT_DEFINITIONS: ReadonlyArray<[number, Omit