Skip to content

corsair: add read-only NIGHTSWORD RGB driver (VID 0x1b1c, PID 0x1b5c) - #66

Merged
snekxs merged 3 commits into
mainfrom
pr63-fix
Sep 6, 2026
Merged

corsair: add read-only NIGHTSWORD RGB driver (VID 0x1b1c, PID 0x1b5c)#66
snekxs merged 3 commits into
mainfrom
pr63-fix

Conversation

@snekxs

Copy link
Copy Markdown
Member

Merge of #63 onto current main, resolving additive brand-union conflicts against #65's Microsoft Intellimouse driver (mouse-types.ts, registry.ts, vendors.ts). Closes#63.

kfrancisand others added 3 commits September 6, 2026 15:53
New vendor. Pure codec in src/corsair and a WebHID client in
src/drivers/corsair that reads identity, firmware, the enabled-stage
mask, the current stage, every enabled DPI stage with its colour,
lift-off height and angle snapping over 64-byte feature reports on the
0xffc2 / usage 4 config interface. Read-only for now: settingsReady is
false, no setters, getDpiOptions() is empty.
Protocol facts honoured, all verified on fw 3.41 / bl 3.08:
- GET = sendFeatureReport → ~20 ms → receiveFeatureReport, reply must
echo request bytes 0–3 (retried on a stale buffer); SET has no reply.
- Byte 3 must be 0 (live profile); 1 returns zeros on this device.
- DPI is big-endian in GET replies and little-endian in SET payloads;
identity fields are little-endian. Tested explicitly.
- A MOUSE_DPIPROF write without RGB bytes clears the stage colour, so
setStageDpi requires the triple.
- Slot d0 is iCUE's Sniper stage; numbered stages are d1–d5.
- isSupported() requires usage 4 with a feature report on id 0 so the
MI_00 usage-3 collection is never claimed; the picker filter includes
usage: 4.
The "NotAllowedError when iCUE is running" note from the original probe
turned out to be the wrong picker entry: the usage-3 collection has no
feature report and throws exactly that error, while the usage-4
interface keeps answering with iCUE active. The error is still mapped
to guidance, leading with the interface choice.
Registry wiring: DEVICE_DRIVERS, SupportedClient, VENDOR_ID.corsair,
SUPPORTED_HID_FILTERS, the brand union, the registry probe matrix
(0xffc2 page and usage 4), the ./corsair subpath export, tsconfig path
and root namespace. Fixtures and the protocol write-up live in
captures/corsair-nightsword.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…range)
Run against the NIGHTSWORD RGB on fw 3.41 with iCUE running: selecting
a stage with 07 13 02 00 <n> takes effect immediately (cursor speed
changes and the GET reads the new slot), angle snap accepts the write
with or without ckb-next's trailing 0x05, and lift height reads back
every value from 1 to 5. Raw log in captures/corsair-nightsword/
write-probe.txt; PROTOCOL.md's write table and open-questions list
updated. No driver behaviour changes.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
# Conflicts:
#	src/drivers/mouse-types.ts
#	src/drivers/registry.ts
#	src/drivers/vendors.ts
@snekxs
snekxs merged commit 541f39e into mainSep 6, 2026
2 checks passed
@snekxs
snekxs deleted the pr63-fix branch September 6, 2026 21:57
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@snekxs@kfrancis