Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/check-scan.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ export const BRANDS: Record<number, string> = {
0x1038: "SteelSeries",
0x1B1C: "Corsair",
0x0951: "HyperX / Kingston",
0x0B05: "ASUS ROG",
0x0B05: "Asus",
0x1E7D: "Roccat",
0x258A: "SinoWealth / Glorious",
0x30FA: "SinoWealth",
Expand Down
5 changes: 4 additions & 1 deletion src/supported-live.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,10 @@ test("canonicalBrand folds brand aliases onto the canonical name", () => {
assert.equal(canonicalBrand("HSXJ"), "HXSJ");
assert.equal(canonicalBrand("Razer Basilisk"), "Razer");
assert.equal(canonicalBrand("MX Anywhere 3s"), "Logitech");
assert.equal(canonicalBrand("ROG"), "ASUS ROG");
assert.equal(canonicalBrand("ROG"), "Asus");
assert.equal(canonicalBrand("ASUS"), "Asus");
assert.equal(canonicalBrand("TUF"), "Asus");
assert.equal(canonicalBrand("ASUS ROG"), "Asus");
assert.equal(canonicalBrand("rapoo Vpro"), "Rapoo");
assert.equal(canonicalBrand("Eyooso"), "E-YOOSO");
assert.equal(canonicalBrand("e-yooso"), "E-YOOSO");
Expand Down
5 changes: 4 additions & 1 deletion src/supported-live.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,10 @@ const BRAND_TYPOS: Record<string, string> = {
mxanywhere3: "Logitech",
mxanywhere3s: "Logitech",
hyperxpulsefirehastle2: "HyperX",
rog: "ASUS ROG",
rog: "Asus",
asus: "Asus",
asusrog: "Asus",
tuf: "Asus",
};

/**
Expand Down
66 changes: 33 additions & 33 deletions src/supported-mice.ts
Original file line number Diff line number Diff line change
Expand Up @@ -187,32 +187,32 @@ export const MICE: Mouse[] = [

// ATTACK SHARK ────────────────────────────────────────────────────────
{ brand: "Attack Shark", model: "X3", status: "likely", req: 15,
note: "Driver implemented (0x25a7 family) — needs hardware test" },
note: "0x25a7 GearHub protocol — needs hardware test" },
{ brand: "Attack Shark", model: "X11", status: "likely", req: 10,
note: "Driver implemented (0x1d57 / 0x25a7 families) — needs hardware test" },
{ brand: "Attack Shark", model: "R5 Ultra", status: "supported", req: 7,
pids: [0x0046, 0x0047],
note: "PIDs 0x0046/0x0047 in the CompX/Lamzu driver (R5 Ultra profile)" },
{ brand: "Attack Shark", model: "X6", status: "likely", req: 5,
note: "Driver implemented (0x25a7 family) — needs hardware test" },
note: "0x25a7 GearHub protocol — needs hardware test" },
{ brand: "Attack Shark", model: "R3", status: "likely", req: 4,
note: "Driver implemented (0x373e family) — needs hardware test" },
{ brand: "Attack Shark", model: "R1", status: "likely", req: 3,
note: "Driver implemented (0x1d57 family) — needs hardware test" },
{ brand: "Attack Shark", model: "X8 Ultra", status: "likely", req: 3,
note: "Driver implemented (0x25a7 family) — needs hardware test" },
{ brand: "Attack Shark", model: "X8 SE", status: "likely", req: 3,
note: "Driver implemented (0x25a7 family) — needs hardware test" },
note: "0x25a7 GearHub protocol — needs hardware test" },
{ brand: "Attack Shark", model: "X8 SE", status: "supported", req: 2,
note: "0x25a7 GearHub protocol — DPI, polling, firmware" },
{ brand: "Attack Shark", model: "X1", status: "likely", req: 2,
note: "Driver implemented (0x25a7 family) — needs hardware test" },
note: "0x25a7 GearHub protocol — needs hardware test" },
{ brand: "Attack Shark", model: "V3 Pro", status: "likely", req: 1,
note: "Driver implemented (0x25a7 family) — needs hardware test" },
note: "0x25a7 GearHub protocol — needs hardware test" },
{ brand: "Attack Shark", model: "X3 Pro", status: "likely", req: 1,
note: "Driver implemented (0x25a7 family) — needs hardware test" },
note: "0x25a7 GearHub protocol — needs hardware test" },
{ brand: "Attack Shark", model: "X11 SE", status: "likely", req: 1,
note: "Driver implemented (0x1d57 / 0x25a7 families) — needs hardware test" },
{ brand: "Attack Shark", model: "X8 PLUS", status: "likely", req: 1,
note: "Driver implemented (0x25a7 family) — needs hardware test" },
note: "0x25a7 GearHub protocol — needs hardware test" },
{ brand: "Attack Shark", model: "X12", status: "likely", req: 1,
note: "Driver implemented (0x25a7 family) — needs hardware test" },
{ brand: "Attack Shark", model: "R6", status: "likely", req: 1,
Expand Down Expand Up @@ -360,10 +360,10 @@ export const MICE: Mouse[] = [
note: "egg-we driver (0x3367) covers OP1we/XM2we family" },
{ brand: "Endgame Gear", model: "OP1w 4K v2", status: "likely", req: 7,
note: "egg-we driver (0x3367) covers OP1we/XM2we family — needs hardware test" },
{ brand: "Endgame Gear", model: "OP1 8K", status: "supported", req: 0,
{ brand: "Endgame Gear", model: "OP1 8K", status: "supported", req: 1,
pids: [0x1964, 0x1976, 0x1978],
note: "Egg OP1 driver — PIDs 0x1964/0x1976/0x1978" },
{ brand: "Endgame Gear", model: "XM2 8K", status: "supported", req: 0,
{ brand: "Endgame Gear", model: "XM2 8K", status: "supported", req: 1,
pids: [0x1966, 0x1980],
note: "Egg OP1 driver — PIDs 0x1966/0x1980" },

Expand All @@ -382,21 +382,21 @@ export const MICE: Mouse[] = [
note: "ATK driver (0x373b) likely covers — needs hardware test" },
{ brand: "ATK", model: "VXE Zero Normal", status: "likely", req: 1,
note: "ATK driver (0x373b) likely covers — needs hardware test" },
{ brand: "VGN", model: "Dragonfly F2 Master+", status: "supported", req: 0,
{ brand: "VGN", model: "Dragonfly F2 Master+", status: "supported", req: 1,
pids: [0xfb56, 0xfb57],
note: "VGN F2 driver — PIDs 0xfb56/0xfb57" },

// WLMouse ─────────────────────────────────────────────────────────────
{ brand: "WLMouse", model: "Beast X", status: "supported", req: 1,
pids: [0xa883, 0xa884],
note: "PIDs 0xa883 / 0xa884 already in WLMouse driver" },
{ brand: "WLMouse", model: "Beast Mini", status: "supported", req: 0,
{ brand: "WLMouse", model: "Beast Mini", status: "supported", req: 1,
pids: [0xa885, 0xa886],
note: "PIDs 0xa885 / 0xa886 in WLMouse driver" },
{ brand: "WLMouse", model: "Beast X Pro", status: "supported", req: 0,
{ brand: "WLMouse", model: "Beast X Pro", status: "supported", req: 1,
pids: [0xa870, 0xa871],
note: "PIDs 0xa870 / 0xa871 in WLMouse driver" },
{ brand: "WLMouse", model: "Sword X", status: "supported", req: 0,
{ brand: "WLMouse", model: "Sword X", status: "supported", req: 1,
pids: [0xa878, 0xa879],
note: "PIDs 0xa878 / 0xa879 in WLMouse driver" },

Expand All @@ -414,72 +414,72 @@ export const MICE: Mouse[] = [
note: "Pulsar driver (VID 0x3710) — collection-based detection" },

// LAMZU / CRDRAKO ─────────────────────────────────────────────────────
{ brand: "Lamzu", model: "Maya X", status: "supported", req: 0,
{ brand: "Lamzu", model: "Maya X", status: "supported", req: 1,
pids: [0x001c, 0x001d, 0x001e],
note: "PIDs 0x001c/0x001d/0x001e in Lamzu driver" },
{ brand: "Lamzu", model: "Inca", status: "quickwin", req: 1,
note: "CompX protocol implemented; Inca PID not yet in driver" },
{ brand: "Lamzu", model: "Thorn", status: "quickwin", req: 1,
note: "CompX protocol implemented; Thorn PID not yet in driver" },
{ brand: "CRDRAKO", model: "KO-ONE", status: "supported", req: 0,
{ brand: "CRDRAKO", model: "KO-ONE", status: "supported", req: 1,
pids: [0x006a, 0x006b],
note: "PIDs 0x006a/0x006b in Lamzu/CompX driver" },

// NINJUTSO ────────────────────────────────────────────────────────────
{ brand: "Ninjutso", model: "Sora V2", status: "supported", req: 0,
{ brand: "Ninjutso", model: "Sora V2", status: "supported", req: 1,
pids: [0xae11, 0xae12, 0xae13, 0xae14, 0xae15, 0xae16],
note: "Legacy 0x1915 PIDs in Ninjutso driver" },
{ brand: "Ninjutso", model: "Sora V3", status: "supported", req: 0,
{ brand: "Ninjutso", model: "Sora V3", status: "supported", req: 1,
pids: [0xe010],
note: "PID 0xe010 in Ninjutso driver" },
{ brand: "Ninjutso", model: "TEN", status: "supported", req: 0,
{ brand: "Ninjutso", model: "TEN", status: "supported", req: 1,
pids: [0xe020, 0xea01],
note: "PIDs 0xe020/0xea01 in Ninjutso driver" },
{ brand: "Ninjutso", model: "Sora", status: "likely", req: 1,
note: "Driver covers Sora V2/V3; original Sora PID not listed — needs test" },

// TEEVOLUTION ─────────────────────────────────────────────────────────
{ brand: "Teevolution", model: "Terra Pro", status: "supported", req: 0,
{ brand: "Teevolution", model: "Terra Pro", status: "supported", req: 1,
pids: [0xf520, 0xf523, 0xf5bb, 0xf522],
note: "PIDs 0xf520/0xf523/0xf5bb/0xf522 in Teevolution driver" },

// FINALMOUSE ──────────────────────────────────────────────────────────
{ brand: "Finalmouse", model: "Starlight-12 / ULX", status: "supported", req: 0,
{ brand: "Finalmouse", model: "Starlight-12 / ULX", status: "supported", req: 1,
pids: [0x0100],
note: "ULX dongle PID 0x0100 in Finalmouse driver" },

// ZAUNKOENIG ──────────────────────────────────────────────────────────
{ brand: "Zaunkoenig", model: "M3K", status: "supported", req: 0,
{ brand: "Zaunkoenig", model: "M3K", status: "supported", req: 1,
pids: [0xa462],
note: "PID 0xa462 in Zaunkoenig driver" },
{ brand: "Zaunkoenig", model: "M2K", status: "supported", req: 0,
{ brand: "Zaunkoenig", model: "M2K", status: "supported", req: 1,
pids: [0xa3cf],
note: "PID 0xa3cf in Zaunkoenig driver" },

// MODDO / ORBITAL ─────────────────────────────────────────────────────
{ brand: "moddoMOUSE", model: "moddoMOUSE", status: "supported", req: 0,
{ brand: "moddoMOUSE", model: "moddoMOUSE", status: "supported", req: 1,
note: "Vendor config interface (0x2fe3) in moddo driver" },
{ brand: "Orbital", model: "Ghost / Pathfinder V2", status: "supported", req: 0,
{ brand: "Orbital", model: "Ghost / Pathfinder V2", status: "supported", req: 1,
pids: [0x080c],
note: "PID 0x080c in Orbital driver" },

// KEYCHRON ────────────────────────────────────────────────────────────
{ brand: "Keychron", model: "Nape Pro", status: "supported", req: 0,
{ brand: "Keychron", model: "Nape Pro", status: "supported", req: 1,
pids: [0x0440],
note: "PID 0x0440 in Keychron driver" },
{ brand: "Keychron", model: "M6", status: "quickwin", req: 1,
note: "Keychron vendor covered; M6 PID not yet in KEYCHRON_PRODUCT_IDS" },

// ASUS ROG ────────────────────────────────────────────────────────────
{ brand: "ASUS ROG", model: "Harpe Ace Aim Lab", status: "driver", req: 5,
// Asus ────────────────────────────────────────────────────────────────
{ brand: "Asus", model: "Harpe Ace Aim Lab", status: "driver", req: 5,
note: "Armoury Crate protocol — not implemented" },
{ brand: "ASUS ROG", model: "TUF Gaming M5", status: "driver", req: 2,
{ brand: "Asus", model: "TUF Gaming M5", status: "driver", req: 2,
note: "Armoury Crate protocol — not implemented" },
{ brand: "ASUS ROG", model: "Gladius II Core", status: "driver", req: 1,
{ brand: "Asus", model: "Gladius II Core", status: "driver", req: 1,
note: "Armoury Crate protocol — not implemented" },
{ brand: "ASUS ROG", model: "Strix Impact III", status: "driver", req: 1,
{ brand: "Asus", model: "Strix Impact III", status: "driver", req: 1,
note: "Armoury Crate protocol — not implemented" },
{ brand: "ASUS ROG", model: "TUF Gaming M3 Gen 1", status: "driver", req: 1,
{ brand: "Asus", model: "TUF Gaming M3 Gen 1", status: "driver", req: 1,
note: "Armoury Crate protocol — not implemented" },

// OTHER DRIVER-NEEDED ─────────────────────────────────────────────────
Expand Down