From f75dde8ceb07407515cd1103b29dc2a927d4134a Mon Sep 17 00:00:00 2001 From: ydw1904 Date: Sat, 3 Oct 2026 03:07:44 +0800 Subject: [PATCH] feat: wire the Fater MCR-9000B driver into the connect flow Adds FaterHidClient to NEEDS_OPEN so the read-only Holtek driver from mouse-protocol opens its vendor collection on connect. No traits entry: the driver exposes no sleep or debounce card. Co-Authored-By: Claude Fable 5.1 --- src/device/controller.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/device/controller.ts b/src/device/controller.ts index 5f179bf..6da6551 100644 --- a/src/device/controller.ts +++ b/src/device/controller.ts @@ -178,6 +178,7 @@ import { MicrosoftHidClient } from "@openmouse/protocol/drivers/microsoft/hid"; import { DareuHidClient } from "@openmouse/protocol/drivers/dareu/hid"; import { IncottHidClient } from "@openmouse/protocol/drivers/incott/hid"; import { BytechHidClient } from "@openmouse/protocol/drivers/bytech/hid"; +import { FaterHidClient } from "@openmouse/protocol/drivers/fater/hid"; import { RapooHidClient } from "@openmouse/protocol/drivers/rapoo/hid"; import { parsePreviewMode, previewsEnabled, type PreviewMode } from "../preview-modes"; import { sleepLabel } from "./options"; @@ -253,7 +254,8 @@ function activeAs(...classes: ClientClass[]): T | null { const DM_CLASSES = [WLMouseHidClient, LamzuHidClient, LamzuAtlantisHidClient, AtkHidClient, AtkBitmouseHidClient, NinjutsoHidClient] as const; const RAZER_CLASSES = [RazerHidClient, RazerViperMiniHidClient, RazerViperHidClient, RazerCobraHidClient] as const; -const NEEDS_OPEN = [LamzuAtlantisHidClient, TeevolutionHidClient, VgnF2HidClient, KeychronNapeHidClient, Keychron8kNordicHidClient, WLMouseBeastX4kHidClient, ModdoHidClient, ZaunkoenigHidClient, CorsairHidClient, FantechHidClient, WallhackMouseHidClient, WallhackKeyboardHidClient, GloriousHidClient, GloriousClassicHidClient, MchoseHidClient, MchoseDockHidClient, MchoseA5ProMaxHidClient, MchoseV3HidClient, MicrosoftHidClient, DareuHidClient, IncottHidClient, BytechHidClient, RapooHidClient] as const;const PULSAR_CLASSES = [PulsarHidClient, PulsarProHidClient, PulsarXs1HidClient] as const; +const NEEDS_OPEN = [LamzuAtlantisHidClient, TeevolutionHidClient, VgnF2HidClient, KeychronNapeHidClient, Keychron8kNordicHidClient, WLMouseBeastX4kHidClient, ModdoHidClient, ZaunkoenigHidClient, CorsairHidClient, FantechHidClient, WallhackMouseHidClient, WallhackKeyboardHidClient, GloriousHidClient, GloriousClassicHidClient, MchoseHidClient, MchoseDockHidClient, MchoseA5ProMaxHidClient, MchoseV3HidClient, MicrosoftHidClient, DareuHidClient, IncottHidClient, BytechHidClient, RapooHidClient, FaterHidClient] as const; +const PULSAR_CLASSES = [PulsarHidClient, PulsarProHidClient, PulsarXs1HidClient] as const; const logitechClient = (): LogitechHidppClient | null => activeAs(LogitechHidppClient); const eggClient = (): EggOp1HidClient | null => activeAs(EggOp1HidClient);