diff --git a/src/check-scan.ts b/src/check-scan.ts index 2456fd3..65c4691 100644 --- a/src/check-scan.ts +++ b/src/check-scan.ts @@ -12,7 +12,7 @@ export const BRANDS: Record = { 0x1038: "SteelSeries", 0x1B1C: "Corsair", 0x0951: "HyperX / Kingston", - 0x0B05: "ASUS ROG", + 0x0B05: "Asus", 0x1E7D: "Roccat", 0x258A: "SinoWealth / Glorious", 0x30FA: "SinoWealth", diff --git a/src/supported-live.test.ts b/src/supported-live.test.ts index e865527..ebd6c24 100644 --- a/src/supported-live.test.ts +++ b/src/supported-live.test.ts @@ -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"); diff --git a/src/supported-live.ts b/src/supported-live.ts index f2205e1..c3eb085 100644 --- a/src/supported-live.ts +++ b/src/supported-live.ts @@ -51,7 +51,10 @@ const BRAND_TYPOS: Record = { mxanywhere3: "Logitech", mxanywhere3s: "Logitech", hyperxpulsefirehastle2: "HyperX", - rog: "ASUS ROG", + rog: "Asus", + asus: "Asus", + asusrog: "Asus", + tuf: "Asus", }; /** diff --git a/src/supported-mice.ts b/src/supported-mice.ts index 685ec4c..3996d97 100644 --- a/src/supported-mice.ts +++ b/src/supported-mice.ts @@ -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, @@ -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" }, @@ -382,7 +382,7 @@ 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" }, @@ -390,13 +390,13 @@ export const MICE: Mouse[] = [ { 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" }, @@ -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 ─────────────────────────────────────────────────