From c6db987140384d31daae105266c4cf0921b9372c Mon Sep 17 00:00:00 2001 From: ydw1904 Date: Sat, 5 Sep 2026 11:14:22 +0800 Subject: [PATCH 1/2] wlmouse: show high-speed, turbo, angle tune, and button combinations The driver now reads four per-profile sensor settings from WLmouse mice, so the Processing card can offer them. Three are switches beside the ones already there; angle tune reuses the same -30..+30 select Pulsar Pro has, shown for any mouse that reports the field and left in the Pro card for Pulsar so it is not offered twice. Turbo is greyed out while high-speed mode is off, which is the firmware's own rule: it will not hold turbo on without it. The shared hyper-mode switch reads "High-speed mode" for WLMouse, the name their own tool uses, and stays "Hyper mode" elsewhere. Artwork resolves by name for WLmouse now. The shared 1K receiver enumerates under one product id whatever mouse is on it, so keying art by product id could never work for those; the driver reads the paired model and the name fallbacks pick up the render. Co-Authored-By: Claude Opus 5 --- src/app/cards/AdvancedCards.tsx | 37 ++++++++++++++++++++++++++++++++- src/app/cards/availability.ts | 3 +++ src/device/controller.ts | 24 +++++++++++++++++++++ src/device/types.ts | 4 +++- src/preview-fixtures.ts | 4 ++++ src/ui/device-images.test.ts | 8 +++++++ src/ui/device-images.ts | 5 +++++ 7 files changed, 83 insertions(+), 2 deletions(-) diff --git a/src/app/cards/AdvancedCards.tsx b/src/app/cards/AdvancedCards.tsx index 13862fda..ce08e395 100644 --- a/src/app/cards/AdvancedCards.tsx +++ b/src/app/cards/AdvancedCards.tsx @@ -20,6 +20,7 @@ import { import { teevolutionSensorModeUi } from "@openmouse/protocol/teevolution"; import * as control from "../../device/controller"; import { PULSAR_SLEEP_OPTIONS } from "../../device/controller"; +import { isPulsarProProtocol } from "../../device/traits"; import { selectableValues, sleepLabel, sleepParts, sleepTotalSeconds, KEYCHRON_SLEEP_MAX_HOURS, KEYCHRON_SLEEP_MAX_SECONDS, KEYCHRON_SLEEP_MIN_SECONDS } from "../../device/options"; import type { ControlSnapshot } from "../../device/types"; import { Collapsible, Segmented, SwitchRow } from "../ui"; @@ -264,6 +265,11 @@ export function ProcessingCard({ snapshot }: { snapshot: ControlSnapshot }): Rea ? "Competitive mode" : status.brand === "Teevolution" ? "Highest performance" : "Performance mode"; + // WLMouse calls the same sensor setting High-speed mode in its own tool. + const hyperLabel = status.brand === "WLMouse" ? "High-speed mode" : "Hyper mode"; + // Pulsar Pro shows the angle with the rest of its Pro-only settings. + const angleTuning = isPulsarProProtocol(status) ? null : status.angleTuning; + return (

SENSOR

Processing

@@ -322,11 +328,40 @@ export function ProcessingCard({ snapshot }: { snapshot: ControlSnapshot }): Rea />