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
14 changes: 14 additions & 0 deletions src/app/cards/availability.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,20 @@ test("Keychron Nape Pro gets Auto sleep without debounce or signal", () => {
assert.equal(has.signal, false);
});

test("Keychron Launcher 8k mice get sleep and debounce, 1k mice only debounce", () => {
const family = (f: string) => cardAvailability(snapshot({
status: { brand: "Keychron", ui: { family: f }, debounceMs: 4 },
}));
const k8 = family("keychron-8k");
assert.equal(k8.advancedHost, true);
assert.equal(k8.sleep, true);
assert.equal(k8.debounce, true);
const k1 = family("keychron-1k");
assert.equal(k1.advancedHost, true);
assert.equal(k1.sleep, false);
assert.equal(k1.debounce, true);
});

test("a driver may opt into the advanced section and still suppress its cards", () => {
const has = cardAvailability(snapshot({
status: {
Expand Down
9 changes: 6 additions & 3 deletions src/device/traits.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,12 @@ const BY_FAMILY: Readonly<Record<string, Partial<DriverTraits>>> = {
"atk-bitmouse": DIRECT_MODE,
ninjutso: { ...DIRECT_MODE, ninjutso: true },
"keychron-nape": { advancedSection: true, sleep: true, directMode: true },
// The M6 reads debounce and sleep from its 0x06 status report and publishes
// its own option lists, so it takes the plain flags rather than DIRECT_MODE.
"keychron-m6": { advancedSection: true, sleep: true, debounce: true },
// Launcher's "8k" family (the M6 and most Keychron mice) reads debounce and
// sleep from its 0x06 status report and publishes its own option lists, so
// it takes the plain flags rather than DIRECT_MODE.
"keychron-8k": { advancedSection: true, sleep: true, debounce: true },
// Launcher's "1k" protocol has no sleep command, so only debounce.
"keychron-1k": { advancedSection: true, debounce: true },
// Launcher offers no sleep setting for the 4K family, so only debounce.
"keychron-4k": { advancedSection: true, debounce: true },
// The 8K Nordic family (G3 Air) keeps debounce and sleep in its system block
Expand Down
Loading