Skip to content

control: drive the ATK ZERO, and let a mouse state its own lift-off range - #189

Merged
snekxs merged 4 commits into
control-panelfrom
pr159-fix
Sep 6, 2026
Merged

snekxs merged 4 commits into
control-panelfrom
pr159-fix

Conversation

@snekxs

@snekxs snekxs commented Sep 6, 2026

Copy link
Copy Markdown
Member

Merge of #159 onto current control-panel, resolving conflicts against #163's long-range-mode/turbo-mode/button-combination additions (both PRs added overlapping Pulsar toggle plumbing) plus an unused-import conflict in supported-mice.test.ts. Raised the JS bundle budget to 800 kB for the new ATK ZERO driver. Closes #159.

itsnttt and others added 4 commits September 5, 2026 07:04
The ZERO does not speak the 0xff02 EEPROM protocol the existing ATK
driver implements, so the "ATK driver (0x373b) likely covers" note on
the VXE Zero Normal row was wrong: that vendor id alone is not enough.
The family uses the BITMOUSE channel on usage page 0xff05, added in
OpenMouse-Project/mouse-protocol.

Pin the two PIDs verified on hardware and let the PID universe in the
test import them from the protocol package, so the row cannot drift.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ange

Wiring the BITMOUSE driver up exposed three things the app assumed.

A driver the app does not name is treated as Pulsar. `pulsarClient()` is a
negative test — anything not in DEDICATED falls through to the Pulsar
explorer — so connecting an ATK ZERO failed on `client.describeCollections
is not a function`. The client joins DM_CLASSES, beside the older ATK, Lamzu
and WLMouse drivers whose surface it shares.

Cards come from BY_FAMILY, not from the status. `ui.showAdvancedSection`
opens the section but `sleep` and `debounce` stay false until the family is
in the table, so both cards were missing even though the driver reported
values for them. "atk-bitmouse" gets the same DIRECT_MODE entry as "atk".

Lift-off was three stops for everyone. `liftOffDistance` has only Low,
Medium and High, so a mouse that tunes lift-off continuously — the ATK ZERO
runs 0.7 mm to 1.7 mm in eleven steps — had ten of its settings thrown away.
Drivers can now report a `liftOffScale`, and the card renders a slider over
the raw device codes labelled with the millimetres the driver supplies, so
the scale stays in the driver and any brand can use the control. The coarse
field is still reported alongside it, and a driver that sets no scale keeps
the three stops exactly as before.

Sensor sampling mode was likewise Teevolution-only; a generic row now shows
whenever a status carries `sensorMode`. Ultra Long Range gets a toggle
against the new `longRangeMode` field.

Also maps both ATK ZERO product ids to atk-zero.png. The art itself goes
through an artwork request, as public/devices/README.md asks.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
# Conflicts:
#	src/app/cards/AdvancedCards.tsx
#	src/device/controller.ts
#	src/device/types.ts
#	src/supported-mice.test.ts
@snekxs
snekxs merged commit 5299d6e into control-panel Sep 6, 2026
4 of 5 checks passed
@snekxs
snekxs deleted the pr159-fix branch September 6, 2026 21:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants