diff --git a/src/device/controller.ts b/src/device/controller.ts index fa91aa23..5b7baa4d 100644 --- a/src/device/controller.ts +++ b/src/device/controller.ts @@ -192,6 +192,7 @@ 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 { CoolerMasterHidClient } from "@openmouse/protocol/drivers/coolermaster/hid"; +import { AjazzHidClient } from "@openmouse/protocol/drivers/ajazz/hid"; import { RedragonM690ProHidClient } from "@openmouse/protocol/drivers/redragon/m690-pro-hid"; import { parsePreviewMode, previewsEnabled, type PreviewMode } from "../preview-modes"; import { sleepLabel } from "./options"; @@ -268,7 +269,7 @@ 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, CorsairBragiHidClient, FantechHidClient, WallhackMouseHidClient, WallhackKeyboardHidClient, GloriousHidClient, GloriousClassicHidClient, MchoseHidClient, MchoseDockHidClient, MchoseA5ProMaxHidClient, MchoseV3HidClient, MicrosoftHidClient, DareuHidClient, IncottHidClient, BytechHidClient, RapooHidClient, FaterHidClient, CoolerMasterHidClient, RedragonM690ProHidClient] as const; +const NEEDS_OPEN = [LamzuAtlantisHidClient, TeevolutionHidClient, VgnF2HidClient, KeychronNapeHidClient, Keychron8kNordicHidClient, WLMouseBeastX4kHidClient, ModdoHidClient, ZaunkoenigHidClient, CorsairHidClient, CorsairBragiHidClient, FantechHidClient, WallhackMouseHidClient, WallhackKeyboardHidClient, GloriousHidClient, GloriousClassicHidClient, MchoseHidClient, MchoseDockHidClient, MchoseA5ProMaxHidClient, MchoseV3HidClient, MicrosoftHidClient, DareuHidClient, IncottHidClient, BytechHidClient, RapooHidClient, FaterHidClient, CoolerMasterHidClient, RedragonM690ProHidClient, AjazzHidClient] as const; const PULSAR_CLASSES = [PulsarHidClient, PulsarProHidClient, PulsarXs1HidClient] as const; const logitechClient = (): LogitechHidppClient | null => activeAs(LogitechHidppClient); diff --git a/src/device/traits.ts b/src/device/traits.ts index 66cedc10..35cc25a7 100644 --- a/src/device/traits.ts +++ b/src/device/traits.ts @@ -94,6 +94,9 @@ const BY_FAMILY: Readonly>> = { hyperx: {}, "cooler master": { advancedSection: true, debounce: true }, "coolermaster-mm711": { advancedSection: true, debounce: true }, + // The NJ07/NJ08 family keeps the sleep timer in its config block and has no + // debounce setting in the vendor panel, so only the sleep card. + ajazz: { advancedSection: true, sleep: true }, }; const BY_BRAND: Readonly> = { diff --git a/src/supported-devices-data.ts b/src/supported-devices-data.ts index 0355339a..1c6e7e4a 100644 --- a/src/supported-devices-data.ts +++ b/src/supported-devices-data.ts @@ -92,6 +92,12 @@ export const SUPPORTED_DEVICES: readonly SupportedDeviceEntry[] = [ { 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: "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] }, + { brand: "AJAZZ", model: "NJ08 MC PRO", status: "pr", pids: [0x2178] }, + { brand: "AJAZZ", model: "NJ07", status: "pr", pids: [0x2157] }, + { brand: "AJAZZ", model: "NJ08", status: "pr", pids: [0x2158] }, { brand: "Ryunix", model: "KYU Pro MX1", status: "supported", pids: [0x26e, 0x26f] }, { brand: "Delux", model: "M800 Mini", status: "supported", pids: [0xfa60, 0xfa55] }, { brand: "Dareu", model: "A950 PRO Mg", status: "supported", pids: [0x1114, 0x1117] }, @@ -375,9 +381,7 @@ export const SUPPORTED_DEVICES: readonly SupportedDeviceEntry[] = [ { brand: "AJAZZ", model: "AJ179 Pro", status: "pending" }, { brand: "AJAZZ", model: "AJ159P MC", status: "pending" }, { brand: "AJAZZ", model: "AM3 Max", status: "pending" }, - { brand: "AJAZZ", model: "NJ08", status: "pending" }, { brand: "AJAZZ", model: "AJ159 V2 MC", status: "pending" }, - { brand: "AJAZZ", model: "NJ07", status: "pending" }, { brand: "Alienware", model: "AW610M", status: "pending" }, { brand: "Amkette", model: "XS Series Flow Plus", status: "pending" }, { brand: "Andowl", model: "Q-144", status: "pending" },