From cc7e12bd54d39012cffc6928e8dd6fa0c8e69eae Mon Sep 17 00:00:00 2001 From: snekxs <26660858+snekxs@users.noreply.github.com> Date: Sun, 11 Oct 2026 17:55:15 -0600 Subject: [PATCH] feat: mirror full OP1/XM2 device table, add egg-ot preview and traits --- src/device/traits.ts | 3 + src/preview-fixtures.test.ts | 12 +++ src/preview-fixtures.ts | 28 ++++++ src/preview-modes.ts | 2 + src/supported-devices-crosscheck.test.ts | 17 ++-- src/supported-devices-data.ts | 116 +++++++++++++++++------ 6 files changed, 140 insertions(+), 38 deletions(-) diff --git a/src/device/traits.ts b/src/device/traits.ts index fe3f1406..161b1af0 100644 --- a/src/device/traits.ts +++ b/src/device/traits.ts @@ -35,6 +35,9 @@ const BY_FAMILY: Readonly>> = { "logitech-hidpp": { logitech: true }, "egg-op1": { advancedSection: true, eggControls: true, eggFamily: true }, "egg-we": { eggFamily: true }, + // OT platform (XM1r/OP1/OP1 RGB): profile/CPI/polling/LOD/macros/LED live + // in ot* status fields until dedicated cards land, so only the family flag. + "egg-ot": { eggFamily: true }, "finalmouse-ulx": { advancedSection: true, finalmouse: true, signal: true }, "finalmouse-slx": { advancedSection: true, finalmouse: true, signal: true }, pulsar: SHARED_ADVANCED, diff --git a/src/preview-fixtures.test.ts b/src/preview-fixtures.test.ts index 0f834fb0..01573180 100644 --- a/src/preview-fixtures.test.ts +++ b/src/preview-fixtures.test.ts @@ -88,3 +88,15 @@ test("finalmouse ULX fixture stays free of SLX cards but gains signal", () => { assert.equal(has.perfectPolling, false); assert.equal(has.finalmouseProfiles, false); }); + +test("egg-ot fixture matches the OP1 RGB driver shape", () => { + const { status } = PREVIEW_FIXTURES["egg-ot"]; + assert.equal(status.brand, "Endgame Gear"); + assert.equal(status.name, "OP1 RGB"); + assert.equal(familyOf(status), "egg-ot"); + assert.equal(status.pollingRateHz, 1000); + assert.deepEqual(status.supportedPollingRates, [125, 250, 500, 1000]); + assert.equal(status.dpi, 800); + assert.equal(status.profileCount, 5); + assert.equal(snapshotFor("egg-ot").traits.eggFamily, true); +}); diff --git a/src/preview-fixtures.ts b/src/preview-fixtures.ts index fb767bd6..4bf7e1bd 100644 --- a/src/preview-fixtures.ts +++ b/src/preview-fixtures.ts @@ -107,6 +107,33 @@ const EGG_OP1: MouseStatus = { firmware: ["1.02.00"], }; +const EGG_OT: MouseStatus = { + brand: "Endgame Gear", + name: "OP1 RGB", + ui: { + family: "egg-ot", + hideSleepCard: true, + defaultDisplayName: "Endgame Gear OP1 RGB", + }, + batteryPercent: null, + batteryState: "Unknown", + dpi: 800, + dpiY: 800, + supportsSeparateDpiAxes: true, + pollingRateHz: 1000, + supportedPollingRates: [125, 250, 500, 1000], + activeProfile: 0, + profileCount: 5, + profileNames: ["Gaming"], + liftOffDistance: "Medium", + connectionType: "Wired", + motionSync: false, + angleSnapping: true, + rippleControl: false, + slamclickFilter: true, + firmware: [], +}; + const EGG_WE: MouseStatus = { brand: "Endgame Gear", name: "OP1we", @@ -967,6 +994,7 @@ export const PREVIEW_FIXTURES: Record = { "pulsar-xs1-8k": { label: "Pulsar XS-1 8K dongle", status: PULSAR_XS1_8K }, "pulsar-xs1-unknown": { label: "Pulsar XS-1 unknown polling", status: PULSAR_XS1_UNKNOWN }, "egg-op1": { label: "Endgame Gear OP1 8K", status: EGG_OP1 }, + "egg-ot": { label: "Endgame Gear OP1 RGB", status: EGG_OT }, "egg-we": { label: "Endgame Gear OP1we", status: EGG_WE }, "egg-xm2we": { label: "Endgame Gear XM2we", status: EGG_XM2WE }, wlmouse: { label: "WLMouse BEAST X", status: WLMOUSE }, diff --git a/src/preview-modes.ts b/src/preview-modes.ts index 3ab87a6e..b82aba68 100644 --- a/src/preview-modes.ts +++ b/src/preview-modes.ts @@ -13,6 +13,7 @@ export const PREVIEW_KEYS = [ "pulsar-xs1-8k", "pulsar-xs1-unknown", "egg-op1", + "egg-ot", "egg-we", "egg-xm2we", "wlmouse", @@ -62,6 +63,7 @@ export function parsePreviewMode(value: string | null): PreviewMode | null { case "pulsar-xs1-8k": return "pulsar-xs1-8k"; case "pulsar-xs1-unknown": return "pulsar-xs1-unknown"; case "egg-op1": return "egg-op1"; + case "egg-ot": return "egg-ot"; case "egg-we": return "egg-we"; case "egg-xm2we": return "egg-xm2we"; case "wlmouse": return "wlmouse"; diff --git a/src/supported-devices-crosscheck.test.ts b/src/supported-devices-crosscheck.test.ts index faddbb5e..72975560 100644 --- a/src/supported-devices-crosscheck.test.ts +++ b/src/supported-devices-crosscheck.test.ts @@ -89,27 +89,26 @@ test("Delux M800 Mini still resolves to its supported row on the shared PIDs", ( assert.equal(result.pageModel, "M800 Mini"); }); -test("M2-NEX resolves to the Noir Gear supported row despite the shared OEM PID", () => { +test("M2-NEX resolves by product name since its row pins no PIDs", () => { const result = crosscheckSupportedDevices( - device({ brand: "Noir Gear", name: "M2-NEX", vendorId: 0xa8a4, productId: 0x2255 }), + device({ brand: "Noir Gear", name: "M2-NEX", vendorId: 0xa8a4, productId: null }), "pass", ); assert.equal(result.listed, true); - assert.equal(result.matchedBy, "pid"); + assert.equal(result.matchedBy, "name"); assert.equal(result.status, "supported"); assert.equal(result.pageModel, "M2-NEX"); assert.match(result.detail, /already listed as Supported/); }); -test("NOIR E1 resolves to its own pending row despite sharing the M2-NEX PID", () => { +test("NOIR E1 has no row since upstream removed it", () => { const result = crosscheckSupportedDevices( - device({ brand: "Noir Gear", name: "NOIR E1", vendorId: 0xa8a4, productId: 0x2255 }), + device({ brand: "Noir Gear", name: "NOIR E1", vendorId: 0xa8a4, productId: null }), "pass", ); - assert.equal(result.listed, true); - assert.equal(result.matchedBy, "pid"); - assert.equal(result.status, "pending"); - assert.equal(result.pageModel, "NOIR E1"); + assert.equal(result.listed, false); + assert.equal(result.matchedBy, null); + assert.match(result.detail, /not listed on the supported-devices page/); }); test("brand+model name match on a likely row with a passing run qualifies for Supported", () => { diff --git a/src/supported-devices-data.ts b/src/supported-devices-data.ts index 93d35c15..d85d7a69 100644 --- a/src/supported-devices-data.ts +++ b/src/supported-devices-data.ts @@ -37,7 +37,7 @@ export const SUPPORTED_DEVICES: readonly SupportedDeviceEntry[] = [ { brand: "Logitech", model: "G Pro (2017)", status: "supported", pids: [0xc085] }, { brand: "Logitech", model: "G502 HERO (wired)", status: "supported", pids: [0xc08b] }, { brand: "Logitech", model: "G Pro Hero", status: "supported", pids: [0xc08c] }, - { brand: "Logitech", model: "G903 HERO (wired)", status: "supported", pids: [0xc08e] }, + { brand: "Logitech", model: "MX518 (Legendary)", status: "supported", pids: [0xc08e] }, { brand: "Logitech", model: "G903 Lightspeed", status: "supported" }, { brand: "Logitech", model: "G403 HERO (wired)", status: "supported", pids: [0xc08f] }, { brand: "Logitech", model: "G703 (wired)", status: "supported" }, @@ -46,28 +46,30 @@ export const SUPPORTED_DEVICES: readonly SupportedDeviceEntry[] = [ { brand: "Logitech", model: "PRO X SUPERLIGHT 2", status: "supported", pids: [0xc09b] }, { brand: "Logitech", model: "PRO X SUPERLIGHT 2 SE", status: "supported" }, { brand: "Logitech", model: "PRO X SUPERLIGHT 2 DEX", status: "supported", pids: [0xc0a0] }, - { brand: "Logitech", model: "PRO X2 SUPERSTRIKE", status: "supported", pids: [0xc0a8] }, + { brand: "Logitech", model: "PRO X2 SUPERSTRIKE", status: "supported", pids: [0xc0a8, 0x40bd] }, + { brand: "Logitech", model: "PRO X3 SUPERSTRIKE", status: "supported", pids: [0xc54f] }, { brand: "Logitech", model: "G305", status: "supported" }, { brand: "Logitech", model: "MX Master 3S", status: "supported", pids: [0xc548] }, { brand: "Logitech", model: "G502 X (wired)", status: "supported", pids: [0xc099] }, { brand: "Logitech", model: "G502 X PLUS (wireless)", status: "supported", pids: [0xc095] }, { brand: "Logitech", model: "G502 X LIGHTSPEED", status: "supported", pids: [0xc098] }, - { brand: "Logitech", model: "MX Vertical", status: "driver" }, + { brand: "Logitech", model: "MX Vertical", status: "likely" }, { brand: "Logitech", model: "MX Master 4", status: "supported" }, { brand: "Logitech", model: "MX Master 4S", status: "likely" }, { brand: "Logitech", model: "G304", status: "supported" }, { brand: "Logitech", model: "G Pro Wireless", status: "supported" }, { brand: "Logitech", model: "G300s", status: "driver" }, { brand: "Logitech", model: "G600", status: "driver" }, + { brand: "Logitech", model: "G603 LIGHTSPEED", status: "supported" }, { brand: "Logitech", model: "G604 LIGHTSPEED", status: "supported" }, { brand: "Logitech", model: "G Pro 2 Lightspeed", status: "supported", pids: [0xc09a] }, { brand: "Logitech", model: "G502 Lightspeed", status: "supported" }, - { brand: "Logitech", model: "MX Master 2S", status: "driver" }, + { brand: "Logitech", model: "MX Master 2S", status: "likely" }, { brand: "Logitech", model: "MX Anywhere 3", status: "supported", pids: [0xc548] }, { brand: "Logitech", model: "MX Anywhere 3S", status: "supported", pids: [0xc548] }, { brand: "Logitech", model: "G309 Lightspeed", status: "supported" }, { brand: "Logitech", model: "MX Ergo S", status: "supported", pids: [0xc548] }, - { brand: "Logitech", model: "MX Anywhere 2", status: "driver" }, + { brand: "Logitech", model: "MX Anywhere 2", status: "likely" }, { brand: "Logitech", model: "Compact Wireless", status: "unknown" }, { brand: "Logitech", model: "G700s", status: "driver" }, { brand: "Logitech", model: "M171 Wireless", status: "driver" }, @@ -79,7 +81,7 @@ export const SUPPORTED_DEVICES: readonly SupportedDeviceEntry[] = [ { brand: "Roccat", model: "Kone Pro", status: "driver" }, { brand: "Redragon", model: "M725 Honeycomb", status: "driver" }, { brand: "Redragon", model: "Impact Elite M913", status: "driver" }, - { brand: "Redragon", model: "PREDATOR M612", status: "driver" }, + { brand: "Redragon", model: "PREDATOR M612", status: "supported", pids: [0xfc61] }, { brand: "Redragon", model: "K1ng M916 Pro 4K", status: "driver" }, { brand: "Redragon", model: "M711 Cobra", status: "driver" }, { brand: "Redragon", model: "M917 Pro", status: "driver" }, @@ -91,7 +93,7 @@ export const SUPPORTED_DEVICES: readonly SupportedDeviceEntry[] = [ { brand: "Redragon", model: "M696 Pro", status: "driver" }, { brand: "Redragon", model: "M721 Pro", status: "driver" }, { brand: "Redragon", model: "M724 K1NG 1K", status: "supported", pids: [0xfc7a] }, - { brand: "Redragon", model: "M690 PRO", status: "supported", pids: [0x2e, 0x2f] }, + { brand: "Fater", model: "MCR-9000B", status: "pr", pids: [0xa09f] }, { brand: "AJAZZ", model: "NJ07 MC", status: "pr", pids: [0x2167] }, { brand: "AJAZZ", model: "NJ08 MC", status: "pr", pids: [0x2168] }, { brand: "AJAZZ", model: "NJ07 MC PRO", status: "pr", pids: [0x2177] }, @@ -104,7 +106,6 @@ export const SUPPORTED_DEVICES: readonly SupportedDeviceEntry[] = [ { brand: "Attack Shark", model: "X3", status: "bridge" }, { brand: "Attack Shark", model: "X11", status: "bridge", pids: [0xfa60, 0xfa55] }, { brand: "Attack Shark", model: "R5 Ultra", status: "supported", pids: [0x46, 0x47] }, - { brand: "IPI", model: "Float 88", status: "supported", pids: [0x1014, 0x1015] }, { brand: "Attack Shark", model: "X6", status: "bridge" }, { brand: "Attack Shark", model: "R3", status: "likely", pids: [0x402d, 0x4026] }, { brand: "Attack Shark", model: "R1", status: "bridge" }, @@ -116,7 +117,8 @@ export const SUPPORTED_DEVICES: readonly SupportedDeviceEntry[] = [ { brand: "Attack Shark", model: "X11 SE", status: "bridge" }, { brand: "Attack Shark", model: "X8 PLUS", status: "bridge" }, { brand: "Attack Shark", model: "X12", status: "bridge" }, - { brand: "Attack Shark", model: "R6", status: "bridge" }, + { brand: "Attack Shark", model: "R6", status: "likely", pids: [0x21, 0x22] }, + { brand: "Attack Shark", model: "R8", status: "likely", pids: [0x3a, 0x3b] }, { brand: "Attack Shark", model: "G3", status: "bridge" }, { brand: "Attack Shark", model: "R2", status: "supported", pids: [0x402d, 0x4026] }, { brand: "Lingbao", model: "M5 Pro", status: "supported", pids: [0x402d, 0x4026] }, @@ -172,7 +174,7 @@ export const SUPPORTED_DEVICES: readonly SupportedDeviceEntry[] = [ { brand: "Razer", model: "DeathAdder V2 Lite", status: "likely", pids: [0xa1] }, { brand: "Razer", model: "DeathAdder V2 Mini", status: "likely", pids: [0x8c] }, { brand: "Razer", model: "DeathAdder V3 HyperSpeed", status: "likely", pids: [0xc4, 0xc5] }, - { brand: "Razer", model: "Diamondback Chroma", status: "likely", pids: [0x4c] }, + { brand: "Razer", model: "Diamondback Chroma", status: "supported", pids: [0x4c] }, { brand: "Razer", model: "Imperator 2012", status: "likely", pids: [0x2f] }, { brand: "Razer", model: "Lancehead", status: "likely", pids: [0x59, 0x5a] }, { brand: "Razer", model: "Lancehead Tournament Edition", status: "likely", pids: [0x60] }, @@ -241,11 +243,20 @@ export const SUPPORTED_DEVICES: readonly SupportedDeviceEntry[] = [ { brand: "Glorious", model: "Model D- 2 Wired", status: "likely", pids: [0x832a] }, { brand: "Glorious", model: "Model I 2", status: "likely", pids: [0x821a, 0x821b, 0x821d, 0x831a] }, { brand: "Glorious", model: "Model O3 Wireless", status: "likely", pids: [0xa312, 0xa300] }, - { brand: "Endgame Gear", model: "XM2w 4K", status: "supported" }, + { brand: "Endgame Gear", model: "OP1", status: "supported", pids: [0x1906] }, + { brand: "Endgame Gear", model: "OP1 RGB", status: "supported", pids: [0x1905] }, + { brand: "Endgame Gear", model: "XM1r", status: "supported", pids: [0x1903] }, + { brand: "Endgame Gear", model: "OP1 8K", status: "supported", pids: [0x1964] }, + { brand: "Endgame Gear", model: "OP1 8K Purple Frost", status: "supported", pids: [0x1976] }, + { brand: "Endgame Gear", model: "OP1 8K v2", status: "supported", pids: [0x1978] }, + { brand: "Endgame Gear", model: "OP1w 4K", status: "supported", pids: [0x1972, 0x1970] }, + { brand: "Endgame Gear", model: "OP1w 4K v2", status: "supported", pids: [0x1984, 0x1970] }, { brand: "Endgame Gear", model: "OP1we", status: "supported", pids: [0x1961, 0x1962] }, - { brand: "Endgame Gear", model: "OP1w 4K v2", status: "likely" }, - { brand: "Endgame Gear", model: "OP1 8K", status: "supported", pids: [0x1964, 0x1976, 0x1978] }, - { brand: "Endgame Gear", model: "XM2 8K", status: "supported", pids: [0x1966, 0x1980] }, + { brand: "Endgame Gear", model: "XM2 8K", status: "supported", pids: [0x1966] }, + { brand: "Endgame Gear", model: "XM2 8K v2", status: "supported", pids: [0x1980] }, + { brand: "Endgame Gear", model: "XM2w 4K", status: "supported", pids: [0x1968, 0x1970] }, + { brand: "Endgame Gear", model: "XM2w 4K v2", status: "supported", pids: [0x1982, 0x1970] }, + { brand: "Endgame Gear", model: "XM2we", status: "supported", pids: [0x1960] }, { brand: "ATK", model: "F1 V2 Ultra Max", status: "supported" }, { brand: "ATK", model: "VXE Dragonfly R1 Pro", status: "likely" }, { brand: "VXE", model: "R1 Pro Max", status: "supported", pids: [0xf58a, 0xf58c] }, @@ -256,6 +267,7 @@ export const SUPPORTED_DEVICES: readonly SupportedDeviceEntry[] = [ { brand: "ATK", model: "F1 Ultimate", status: "likely" }, { brand: "ATK", model: "F1 Ultimate 2.0", status: "likely" }, { brand: "ATK", model: "A9 Mini +", status: "likely" }, + { brand: "ATK", model: "A9 Plus", status: "supported" }, { brand: "ATK", model: "VXE Mad R Major", status: "likely" }, { brand: "ATK", model: "ZERO", status: "supported", pids: [0x1154, 0x1155] }, { brand: "ATK", model: "VXE Zero Normal", status: "likely" }, @@ -265,6 +277,7 @@ export const SUPPORTED_DEVICES: readonly SupportedDeviceEntry[] = [ { brand: "WLMouse", model: "Beast X Pro", status: "supported", pids: [0xa870, 0xa871] }, { brand: "WLMouse", model: "Sword X", status: "supported", pids: [0xa878, 0xa879] }, { brand: "WLMouse", model: "Beast Max", status: "supported", pids: [0xa880, 0xa881] }, + { brand: "WLMouse", model: "Beast X 4K", status: "pr", pids: [0xa887] }, { brand: "Pulsar", model: "Tenz Signature", status: "supported" }, { brand: "Pulsar", model: "X2h", status: "supported" }, { brand: "Pulsar", model: "X2 V3 ES Mini", status: "supported" }, @@ -288,7 +301,7 @@ export const SUPPORTED_DEVICES: readonly SupportedDeviceEntry[] = [ { brand: "Lamzu", model: "Atlantis (shared family ids)", status: "likely", pids: [0xf50f] }, { brand: "Lamzu", model: "Thorn", status: "quickwin" }, { brand: "CRDRAKO", model: "KO-ONE", status: "supported", pids: [0x6a, 0x6b] }, - { brand: "LunaFury", model: "LUNA33", status: "likely", pids: [0x32, 0x33] }, + { brand: "LunaFury", model: "LUNA33", status: "supported", pids: [0x32, 0x33] }, { brand: "LunaFury", model: "TYPE33", status: "likely", pids: [0x54, 0x84] }, { brand: "Ninjutso", model: "Sora V2", status: "supported", pids: [0xae11, 0xae12, 0xae13, 0xae14, 0xae15, 0xae16] }, { brand: "Ninjutso", model: "Sora V3", status: "supported", pids: [0xe010] }, @@ -305,6 +318,57 @@ export const SUPPORTED_DEVICES: readonly SupportedDeviceEntry[] = [ { brand: "Microsoft", model: "Classic Intellimouse", status: "supported", pids: [0x823] }, { brand: "Keychron", model: "Nape Pro", status: "supported", pids: [0x440] }, { brand: "Keychron", model: "M6", status: "supported", pids: [0xd060, 0xd029] }, + { brand: "Keychron", model: "M3", status: "pr" }, + { brand: "Keychron", model: "M1", status: "pr" }, + { brand: "Keychron", model: "M3 Mini", status: "pr" }, + { brand: "Keychron", model: "M2", status: "pr" }, + { brand: "Keychron", model: "M2 Mini", status: "pr" }, + { brand: "Keychron", model: "M4", status: "pr" }, + { brand: "Keychron", model: "M7", status: "pr" }, + { brand: "Keychron", model: "M5 8K", status: "pr" }, + { brand: "Keychron", model: "M6 8K", status: "pr" }, + { brand: "Keychron", model: "M3 KM", status: "pr" }, + { brand: "Keychron", model: "M3 Combo", status: "pr" }, + { brand: "Keychron", model: "M2 Mini Combo", status: "pr" }, + { brand: "Keychron", model: "M3 8K", status: "pr" }, + { brand: "Keychron", model: "M3 Mini 8K", status: "pr" }, + { brand: "Keychron", model: "M2 8K", status: "pr" }, + { brand: "Keychron", model: "M4 8K", status: "pr" }, + { brand: "Keychron", model: "M1 8K", status: "pr" }, + { brand: "Keychron", model: "M2 Mini 8K", status: "pr" }, + { brand: "Keychron", model: "M7 8K", status: "pr" }, + { brand: "Keychron", model: "BM22", status: "pr" }, + { brand: "Keychron", model: "BM24", status: "pr" }, + { brand: "Keychron", model: "BM25", status: "pr" }, + { brand: "Keychron", model: "BM26", status: "pr" }, + { brand: "Keychron", model: "M6 SE", status: "pr" }, + { brand: "Keychron", model: "M5", status: "pr" }, + { brand: "Keychron", model: "LM7", status: "pr" }, + { brand: "Keychron", model: "LM7 Ultra", status: "pr" }, + { brand: "Keychron", model: "G4", status: "pr" }, + { brand: "Keychron", model: "G3", status: "pr" }, + { brand: "Keychron", model: "G5", status: "pr" }, + { brand: "Keychron", model: "BM27", status: "pr" }, + { brand: "Keychron", model: "M5 SE", status: "pr" }, + { brand: "Keychron", model: "G3 HE", status: "pr" }, + { brand: "Keychron", model: "M8", status: "pr" }, + { brand: "Keychron", model: "M3 V2", status: "pr" }, + { brand: "Keychron", model: "BM28", status: "pr" }, + { brand: "Keychron", model: "G4 HE", status: "pr" }, + { brand: "Keychron", model: "BM28 8K", status: "pr" }, + { brand: "Keychron", model: "T1 HE", status: "pr" }, + { brand: "Keychron", model: "G6 HE 8K", status: "pr" }, + { brand: "Keychron", model: "G5 HE", status: "pr" }, + { brand: "Keychron", model: "M6 HE 8K", status: "pr" }, + { brand: "Keychron", model: "G10 HE", status: "pr" }, + { brand: "Keychron", model: "M8 HE", status: "pr" }, + { brand: "Keychron", model: "G9 HE 8K", status: "pr" }, + { brand: "Keychron", model: "M4 4K", status: "pr" }, + { brand: "Keychron", model: "M6 4K", status: "pr" }, + { brand: "Keychron", model: "M3 4K", status: "pr" }, + { brand: "Keychron", model: "M3 Mini 4K", status: "pr" }, + { brand: "Keychron", model: "M2 4K", status: "pr" }, + { brand: "Keychron", model: "G3 Air", status: "pr" }, { brand: "Asus", model: "Harpe Ace Aim Lab", status: "driver" }, { brand: "Asus", model: "TUF Gaming M5", status: "driver" }, { brand: "Asus", model: "Gladius II Core", status: "driver" }, @@ -332,9 +396,9 @@ export const SUPPORTED_DEVICES: readonly SupportedDeviceEntry[] = [ { brand: "Bloody", model: "Max W95", status: "driver" }, { brand: "Fantech", model: "THOR II X16", status: "driver" }, { brand: "Cooler Master", model: "MasterMouse MM720", status: "driver" }, - { brand: "Cooler Master", model: "MM711", status: "supported", pids: [0x0101] }, + { brand: "Cooler Master", model: "MM711", status: "driver" }, { brand: "K-snake", model: "X11", status: "supported", pids: [0x2255] }, - { brand: "Noir Gear", model: "M2-NEX", status: "supported", pids: [0x2255] }, + { brand: "Noir Gear", model: "M2-NEX", status: "supported" }, { brand: "Hitscan", model: "Hyperlight", status: "unknown" }, { brand: "RAWM", model: "Leviathan V4", status: "unknown" }, { brand: "AJAZZ", model: "AJ159 Apex", status: "unknown" }, @@ -351,7 +415,7 @@ export const SUPPORTED_DEVICES: readonly SupportedDeviceEntry[] = [ { brand: "Mchose", model: "A5 Pro Max", status: "supported", pids: [0xf019, 0xf013, 0xf015] }, { brand: "Mchose", model: "K7 Ultra", status: "unknown" }, { brand: "Mchose", model: "L7 Ultra+", status: "unknown" }, - { brand: "G-Wolves", model: "HTX Mini 8K", status: "unknown" }, + { brand: "G-Wolves", model: "HTX Mini 8K", status: "pr" }, { brand: "Angry Miao", model: "Infinity .97", status: "unknown" }, { brand: "Dark Project", model: "Novus SE", status: "unknown" }, { brand: "Scyrox", model: "V8", status: "unknown" }, @@ -361,6 +425,7 @@ export const SUPPORTED_DEVICES: readonly SupportedDeviceEntry[] = [ { brand: "Gravastar", model: "Mercury X Pro", status: "unknown" }, { brand: "Gravastar", model: "M1", status: "unknown" }, { brand: "Gravastar", model: "M2", status: "unknown" }, + { brand: "Gravastar", model: "Mercury M1 Pro", status: "likely" }, { brand: "G-Wolves", model: "HT-M-H ACE Wireless", status: "unknown" }, { brand: "Angry Miao", model: "Infinity Mouse", status: "unknown" }, { brand: "VortexSeries", model: "IGNIX F3", status: "unknown" }, @@ -456,11 +521,6 @@ export const SUPPORTED_DEVICES: readonly SupportedDeviceEntry[] = [ { brand: "DEXP", model: "DGSAdept 66662", status: "pending" }, { brand: "Drakar", model: "Asgard", status: "pending" }, { brand: "Dune Voyager", model: "DV-GE4", status: "pending" }, - { brand: "Endgame Gear", model: "OP1 8K V2", status: "pending" }, - { brand: "Endgame Gear", model: "OP1w 4K", status: "pending" }, - { brand: "Endgame Gear", model: "XM1r", status: "pending" }, - { brand: "Endgame Gear", model: "XM2w 4K V2", status: "pending" }, - { brand: "Endgame Gear", model: "OP1 RGB", status: "pending" }, { brand: "Endorfy", model: "EY6A016", status: "pending" }, { brand: "Epomaker", model: "NEX Lite", status: "pending" }, { brand: "Epomaker", model: "Carbon X", status: "pending" }, @@ -518,7 +578,6 @@ export const SUPPORTED_DEVICES: readonly SupportedDeviceEntry[] = [ { brand: "KeepOut", model: "X9 Pro", status: "pending" }, { brand: "Kensington", model: "Expert Wireless", status: "pending" }, { brand: "Kensington", model: "Orbit Trackball With Scroll Ring", status: "pending" }, - { brand: "Keychron", model: "M7 8K", status: "pending" }, { brand: "Kreo", model: "Hawk", status: "pending" }, { brand: "Kreo", model: "Ikarus", status: "pending" }, { brand: "Kreo", model: "Chimera V1", status: "pending" }, @@ -545,7 +604,7 @@ export const SUPPORTED_DEVICES: readonly SupportedDeviceEntry[] = [ { brand: "Logitech", model: "Lift Vertical", status: "pending" }, { brand: "Logitech", model: "Ergo M575S", status: "pending" }, { brand: "Logitech", model: "G700", status: "pending" }, - { brand: "Logitech", model: "G900", status: "pending" }, + { brand: "Logitech", model: "G900 Chaos Spectrum", status: "pending" }, { brand: "Logitech", model: "M-R0057", status: "pending" }, { brand: "Logitech", model: "M170", status: "pending" }, { brand: "Logitech", model: "M220", status: "pending" }, @@ -575,7 +634,6 @@ export const SUPPORTED_DEVICES: readonly SupportedDeviceEntry[] = [ { brand: "MSI", model: "Clutch GM41 Lightweight Wireless (Stalker 2 Edition)", status: "pending" }, { brand: "MSI", model: "GM340", status: "pending" }, { brand: "MSI", model: "Versa 300", status: "pending" }, - { brand: "Noir Gear", model: "NOIR E1", status: "pending", pids: [0x2255] }, { brand: "Noir Gear", model: "S1 Series", status: "pending" }, { brand: "NOS", model: "M750", status: "pending" }, { brand: "NOS", model: "M800", status: "pending" }, @@ -589,8 +647,8 @@ export const SUPPORTED_DEVICES: readonly SupportedDeviceEntry[] = [ { brand: "Pictek", model: "T18", status: "pending" }, { brand: "Pictek", model: "T7", status: "pending" }, { brand: "Portronics", model: "Vader Max", status: "pending" }, - { brand: "Pulsar", model: "X2A V3", status: "pending" }, - { brand: "Pulsar", model: "X2 Mini", status: "pending" }, + { brand: "Pulsar", model: "X2A V3", status: "pr", pids: [0x3404, 0x5403] }, + { brand: "Pulsar", model: "X2 Mini", status: "pr" }, { brand: "Pulsar", model: "X2 V2", status: "pending" }, { brand: "Pulsar", model: "X2H V3 ES", status: "pending" }, { brand: "Pulsar", model: "X3 CrazyLight", status: "pending" }, @@ -598,7 +656,7 @@ export const SUPPORTED_DEVICES: readonly SupportedDeviceEntry[] = [ { brand: "Pwnage", model: "Symm 3", status: "pending" }, { brand: "Rakk", model: "Dasig", status: "pending" }, { brand: "Rakk", model: "Gahum", status: "pending" }, - { brand: "Rapoo", model: "VT9 Pro", status: "pending" }, + { brand: "Rapoo", model: "VT9 Pro", status: "supported", pids: [0x1205, 0x4405] }, { brand: "Rapoo", model: "M1620", status: "pending" }, { brand: "Rapoo", model: "MT760 Pro", status: "pending" }, { brand: "Rapoo", model: "VT7 Air Max V2", status: "pending" },