Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions src/check-scan.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,12 @@ export const BRANDS: Record<number, string> = {
0x1915: "Orbital",
0x0C45: "Redragon",
0x1BCF: "Alienware",
0x3151: "Fantech",
};

const OPENMOUSE_SUPPORTED = new Set([
0x1532, 0x046D, 0x3710, 0x3367, 0x36A7, 0x373E, 0x3554, 0x373B, 0x361D, 0x3434, 0x2FE3, 0x1915,
0x3151,
]);

/**
Expand Down
3 changes: 2 additions & 1 deletion src/device/controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ import { TeevolutionHidClient } from "@openmouse/protocol/drivers/teevolution/hi
import { teevolutionProfileForCid } from "@openmouse/protocol/teevolution";
import { VgnF2HidClient } from "@openmouse/protocol/drivers/vgn/hid";
import { KeychronHidClient } from "@openmouse/protocol/drivers/keychron/hid";
import { FantechHidClient } from "@openmouse/protocol/drivers/fantech/hid";
import { SUPPORTED_HID_FILTERS } from "@openmouse/protocol/drivers/vendors";
import { WLMouseHidClient } from "@openmouse/protocol/drivers/wlmouse/hid";
import { parsePreviewMode, previewsEnabled, type PreviewMode } from "../preview-modes";
Expand Down Expand Up @@ -160,7 +161,7 @@ function activeAs<T>(...classes: ClientClass<T>[]): T | null {

const DM_CLASSES = [WLMouseHidClient, LamzuHidClient, AtkHidClient, NinjutsoHidClient] as const;
const RAZER_CLASSES = [RazerHidClient, RazerViperMiniHidClient, RazerViperHidClient, RazerCobraHidClient] as const;
const NEEDS_OPEN = [TeevolutionHidClient, VgnF2HidClient, KeychronHidClient, ModdoHidClient, ZaunkoenigHidClient] as const;
const NEEDS_OPEN = [TeevolutionHidClient, VgnF2HidClient, KeychronHidClient, ModdoHidClient, ZaunkoenigHidClient, FantechHidClient] as const;
const DEDICATED = [
...DM_CLASSES, ...RAZER_CLASSES, ...NEEDS_OPEN,
EggOp1HidClient, LogitechHidppClient, OrbitalHidClient, RazerViperV4ProHidClient, FinalmouseHidClient,
Expand Down
1 change: 1 addition & 0 deletions src/device/traits.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ const BY_FAMILY: Readonly<Record<string, Partial<DriverTraits>>> = {
atk: DIRECT_MODE,
ninjutso: { ...DIRECT_MODE, ninjutso: true },
"keychron-nape": { advancedSection: true, sleep: true, directMode: true },
fantech: { advancedSection: true, sleep: true, directMode: true },
};

const BY_BRAND: Readonly<Record<string, string>> = {
Expand Down
4 changes: 3 additions & 1 deletion src/supported-mice.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import test from "node:test";

import { DEVICE_DRIVERS } from "@openmouse/protocol/drivers/registry";
import { WLMOUSE_PRODUCTS } from "@openmouse/protocol/drivers/vendors";
import { WLMOUSE_PRODUCTS, VENDOR_ID } from "@openmouse/protocol/drivers/vendors";
Comment thread
jazzstack marked this conversation as resolved.
Dismissed
import { EGG_DEVICE_PROFILES } from "@openmouse/protocol/endgame-gear-op1";
import { KEYCHRON_PRODUCTS } from "@openmouse/protocol/keychron";
import { LAMZU_PRODUCTS } from "@openmouse/protocol/lamzu";
Expand Down Expand Up @@ -105,6 +105,8 @@
...PULSAR_XS1_PRODUCT_IDS,
// Finalmouse ULX dongle (drivers/finalmouse/hid.ts).
0x0100,
// Fantech WG14P Yari Pro (drivers/fantech/hid.ts).
0x503d,
]);
test("every pinned PID on a coverage claim exists in the protocol registry", () => {
const withPids: Array<Mouse & { pids: readonly number[] }> = MICE.filter(
Expand Down
3 changes: 3 additions & 0 deletions src/supported-mice.ts
Original file line number Diff line number Diff line change
Expand Up @@ -487,6 +487,9 @@ export const MICE: Mouse[] = [
note: "A4tech / Bloody protocol — not implemented" },
{ brand: "Fantech", model: "THOR II X16", status: "driver", req: 1,
note: "Fantech protocol — not implemented" },
{ brand: "Fantech", model: "WG14P Yari Pro", status: "supported", req: 1,
pids: [0x503d],
note: "PID 0x503d — vendor interface (0xFFFF:0x02) in Fantech driver" },
{ brand: "Cooler Master", model: "MasterMouse MM720", status: "driver", req: 1,
note: "CM protocol — not implemented" },
{ brand: "Cooler Master", model: "MM711", status: "driver", req: 1,
Expand Down
1 change: 1 addition & 0 deletions src/ui/device-images.ts
Original file line number Diff line number Diff line change
Expand Up @@ -94,5 +94,6 @@ export function deviceImage(device: HIDDevice | null | undefined, displayName =
// Pulsar 4K Wireless Receiver ships with the X2 V2 4K dongle kit; the receiver
// product id is not yet published, so match the name reported by WebHID.
if (/pulsar/i.test(displayName)) return "/devices/pulsar-x2-v2.png";
if (/fantech/i.test(displayName)) return "/devices/unknown-device.png";
return "/devices/unknown-device.png";
}