diff --git a/public/devices/README.md b/public/devices/README.md index 248f09e..7da5a0f 100644 --- a/public/devices/README.md +++ b/public/devices/README.md @@ -55,6 +55,9 @@ since it is a trademark and this repository is public. URL for the OP1 8K. Confirm redistribution terms before including it in a public release package. +`endgame-gear-op1we.png` was supplied from an Overclockers UK product-image +URL for the OP1we. + `razer-viper-v2-pro.png` was supplied from Razer's support FAQ device-layout asset (`dl.razerzone.com/src/6048-1-en-v10.png`). Ideally replace it with a higher-resolution image if one is found. Confirm redistribution terms before diff --git a/public/devices/endgame-gear-op1we.png b/public/devices/endgame-gear-op1we.png new file mode 100644 index 0000000..c09b334 Binary files /dev/null and b/public/devices/endgame-gear-op1we.png differ diff --git a/src/supported-mice.ts b/src/supported-mice.ts index d986f25..344fa92 100644 --- a/src/supported-mice.ts +++ b/src/supported-mice.ts @@ -360,6 +360,9 @@ export const MICE: Mouse[] = [ // ENDGAME GEAR ──────────────────────────────────────────────────────── { brand: "Endgame Gear", model: "XM2w 4K", status: "supported", req: 3, note: "egg-we driver (0x3367) covers OP1we/XM2we family" }, + { brand: "Endgame Gear", model: "OP1we", status: "supported", req: 1, + pids: [0x1961, 0x1962], + 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: 1, diff --git a/src/ui/device-images.test.ts b/src/ui/device-images.test.ts index 37fc0f0..d4f8a79 100644 --- a/src/ui/device-images.test.ts +++ b/src/ui/device-images.test.ts @@ -38,6 +38,9 @@ test("fixture previews resolve product art without a HID device", () => { assert.equal(deviceImage(null, "Terra Pro"), "/devices/teevolution-terra-pro.png"); assert.equal(deviceImage(null, "MX Master 3S"), "/devices/logitech-mx-master-3s.png"); assert.equal(deviceImage(null, "G703"), "/devices/logitech-g703.png"); + assert.equal(deviceImage(null, "OP1we"), "/devices/endgame-gear-op1we.png"); + assert.equal(deviceImage(null, "Endgame Gear OP1we"), "/devices/endgame-gear-op1we.png"); + assert.equal(deviceImage(null, "OP1 8K"), "/devices/endgame-gear-op1-8k.png"); }); test("Pulsar 4K receiver artwork follows the reported mouse name", () => { @@ -53,6 +56,15 @@ test("Attack Shark R5 Ultra wired and wireless share the same artwork", () => { assert.equal(deviceImage(null, "Attack Shark R5 Ultra"), "/devices/attackshark-r5-ultra.png"); }); +test("OP1we wired and wireless share the same artwork, distinct from OP1 8K", () => { + const hid3367 = (productId: number): HIDDevice => ({ vendorId: 0x3367, productId } as HIDDevice); + assert.equal(deviceImage(hid3367(0x1961)), "/devices/endgame-gear-op1we.png"); + assert.equal(deviceImage(hid3367(0x1962)), "/devices/endgame-gear-op1we.png"); + assert.equal(deviceImage(null, "OP1we"), "/devices/endgame-gear-op1we.png"); + assert.equal(deviceImage(hid3367(0x1964)), "/devices/endgame-gear-op1-8k.png"); + assert.equal(deviceImage(null, "OP1 8K"), "/devices/endgame-gear-op1-8k.png"); +}); + test("Pulsar Pro receiver uses its dongle artwork", () => { const device = { vendorId: 0x3710, productId: 0x5405 } as HIDDevice; assert.equal(deviceImage(device, "Pulsar PRO Dongle"), "/devices/pulsar-pro-dongle.png"); diff --git a/src/ui/device-images.ts b/src/ui/device-images.ts index 12b20f3..d5db94d 100644 --- a/src/ui/device-images.ts +++ b/src/ui/device-images.ts @@ -38,6 +38,9 @@ const DEVICE_IMAGES: ReadonlyMap = new Map([ ["3367:1964", "/devices/endgame-gear-op1-8k.png"], ["3367:1976", "/devices/endgame-gear-op1-8k.png"], ["3367:1978", "/devices/endgame-gear-op1-8k.png"], + // OP1we + ["3367:1961", "/devices/endgame-gear-op1we.png"], + ["3367:1962", "/devices/endgame-gear-op1we.png"], // NinjaForce exposes separate wired and receiver ids for Sora V2, Sora V3, // and the TEN family. Receiver variants show the paired mouse artwork. ["1915:ae11", "/devices/ninjutso-sora-v2.png"], @@ -91,6 +94,7 @@ export function deviceImage(device: HIDDevice | null | undefined, displayName = if (/mx\s*master\s*4/i.test(displayName)) return "/devices/logitech-mx-master-4.png"; if (/superstrike/i.test(displayName)) return "/devices/logitech-pro-x2-superstrike.png"; if (/superlight/i.test(displayName)) return "/devices/logitech-pro-x-superlight-2c.png"; + if (/op1we/i.test(displayName)) return "/devices/endgame-gear-op1we.png"; if (/\bop1\b/i.test(displayName)) return "/devices/endgame-gear-op1-8k.png"; if (/\bviper\s*v2\s*pro\b/i.test(displayName)) return "/devices/razer-viper-v2-pro.png"; if (/\bviper\s*mini\b/i.test(displayName)) return "/devices/razer-viper-mini.webp";