Files
signal-hyperx/tools/descriptor.py
T
steveandClaude Opus 5.5 5f36610a60 Initial HyperX Eve 1800 SignalRGB plugin and protocol tools
Working 10-zone plugin using the 0x44 live colour reports on the 0xFF90
vendor interface (data then commit). Includes Python tools used to
identify the device, confirm the protocol and map zones. Output is
dimmer than onboard effects; investigation pending.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01EcbUcbNpyPn7cGpe4t6y5y
2026-10-25 16:45:27 -07:00

25 lines
914 B
Python

"""Dump + decode the HID report descriptor of the vendor interface (read-only)."""
import hid
VID, PID, USAGE_PAGE = 0x03F0, 0x08C2, 0xFF90
info = next(d for d in hid.enumerate(VID, PID) if d["usage_page"] == USAGE_PAGE)
dev = hid.device()
dev.open_path(info["path"])
desc = bytes(dev.get_report_descriptor())
dev.close()
print(f"{len(desc)} bytes: {desc.hex(' ')}\n")
TAGS = {0x04: "UsagePage", 0x08: "Usage", 0xA0: "Collection", 0xC0: "EndCollection",
0x14: "LogicalMin", 0x24: "LogicalMax", 0x74: "ReportSize", 0x94: "ReportCount",
0x84: "ReportID", 0x80: "Input", 0x90: "Output", 0xB0: "Feature",
0x18: "UsageMin", 0x28: "UsageMax"}
i = 0
while i < len(desc):
prefix = desc[i]
size = {0: 0, 1: 1, 2: 2, 3: 4}[prefix & 3]
val = int.from_bytes(desc[i + 1:i + 1 + size], "little")
print(f" {TAGS.get(prefix & 0xFC, f'0x{prefix:02X}'):14} 0x{val:X}")
i += 1 + size