feat: add LunaFury LUNA33 and TYPE33 support - #168
Merged
Merged
Conversation
|
🎉 This PR is included in version 0.24.0 🎉 The release is available on: Your semantic-release bot 📦🚀 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Add LunaFury LUNA33 and TYPE33 to the existing Lamzu/CompX driver. Both models
use the shared VID
0x373e:0x00320x00330x00540x0084Wired mouse commands use target
0x00; receiver mouse commands use target0x02. Theb032/b033/b054/b084bootloader identities are excluded. EL/ESsuffixes are preserved when the device reports them in its product name;
the PID does not determine the color.
The public
lamzusubpath exposes Lightning Trigger, per-button latency,sensor angle, and wheel guard. These commands run only on LunaFury devices.
Setters validate ranges and profile bytes, then read back each write.
Unsupported or invalid replies leave the optional status fields absent.
Extension reads match the echoed profile and, for button latency, the button
ID. Stale replies are skipped within the existing retry limit without
resending the request.
Protocol evidence
The device table and command mappings come from the
public vendor configurator, inspected on
2026-10-05:
app.14b76f96.js.mapcontains the device table and UI calls, andoutput.xvi3.min.jscontains the XviUpdater feature-report transport.docs/lunafury-testing.mdrecords the packet offsets, timing layout,connection targets, and hardware checklist. The patch contains no proprietary
source or binaries.
Hardware verification
I tested all implemented features on LUNA33 over both wired and 8K receiver
connections with firmware
0.0.26.0. This covers both LUNA33 runtimeidentities in the table. TYPE33 has not been tested on hardware.
Tests
npm run check: strict build, all 2059 tests passed, package dry-run passed.signed angles, full 19-byte button timing payloads, invalid/truncated replies,
ignored writes/readback mismatches, disabled zero-wheel-window restoration,
and other-brand isolation.
build, all 287 tests, bundle-size check, and frontend audit passed.
npm audit --omit=dev --audit-level=high: zero vulnerabilities.The unchanged upstream dev/release toolchain has 11 full-audit findings.
git diff --checkpassed. Changes use LF and exclude generated output andvendor artwork.
The matching frontend is OpenMouse #598,
kept in draft until a stable npm release contains these APIs.