Skip to content

feat(touchpad): сильное нажатие как назначаемое действие (XIC-78) - #67

Merged
Oksion merged 1 commit into
mainfrom
feat/xic-78-heavy-press
Sep 24, 2026
Merged

Oksion merged 1 commit into
mainfrom
feat/xic-78-heavy-press

Conversation

@Oksion

@Oksion Oksion commented Sep 24, 2026

Copy link
Copy Markdown
Owner

Что

Продавили тачпад заметно сильнее обычного клика — выполняется выбранное действие. Список тот же, что у клавиш (Настройки → Тачпад → «Сильное нажатие»). Как в Xiaomi PC Manager, где на сильном нажатии скриншот; в момент продавливания прошивка щёлкает второй раз.

Заодно действие «Скриншот» (Win+Shift+S) появилось в общем списке — его можно повесить и на любую клавишу.

Как распознаётся

Разбор PluginGesture.dll PC Manager: сильное нажатие — это Tip Pressure (0x0D/0x30) контакта с Confidence > 500 в обычном PTP-вводе, один раз за касание. Вендорский канал для распознавания не нужен.

Замер на TM2424:

Касание Давление
лёгкое 35–55
обычный клик 125–150
сильное нажатие 900–1200

Давление приходит при любом значении 0x59. Сам 0x59 ([01|02, 00], как в SvrCModule) — только второй щелчок прошивки; пишется лишь при явном включении/выключении, на старте тачпад не трогаем.

Архитектура

  • TouchpadInput — один RawTouchpadReader на процесс со счётчиком пользователей. Raw Input даёт процессу одно окно-получатель на usage: второй независимый читатель молча отобрал бы ввод у краевых ползунков. Краевые ползунки переведены на него.
  • HeavyPressDetector — чистая логика под тестами на живых числах; TouchpadHeavyPress — подписка и 0x59.
  • Действие выполняется через KeyRouter.Run в UI-потоке — тем же путём, что клавиши.

Ничего лишнего при «Нет действия»

  • подписки нет, давление не разбирается (читатель разбирает его только пока есть потребитель);
  • если выключены и краевые ползунки — читатель касаний остановлен совсем;
  • в тачпад ничего не пишется.

Проверка

  • dotnet build — 0 ошибок / 0 предупреждений
  • dotnet test — 719 зелёных (+9: распознаватель, кадры 0x59, действие «Скриншот»)
  • Руками на TM2424: сильное нажатие → скриншот, второй щелчок, обычный клик и касания не срабатывают, краевые ползунки работают на общем источнике

🤖 Generated with Claude Code

Продавили тачпад заметно сильнее обычного клика — выполняется выбранное действие,
тот же список, что у клавиш (Настройки → Тачпад → «Сильное нажатие»). Как в Xiaomi
PC Manager, где это скриншот.

Разбор PC Manager (PluginGesture.dll) показал, что вендорский канал для
распознавания не нужен: сильное нажатие — это Tip Pressure (0x0D/0x30) контакта с
Confidence > 500 в обычном PTP-вводе, раз за касание. Замер на TM2424: касание
35–55, клик 125–150, сильное 900–1200; давление приходит при любом 0x59. Сам 0x59
([01|02, 00], как в SvrCModule) — второй щелчок прошивки в момент продавливания.

- TouchpadInput: один RawTouchpadReader на процесс со счётчиком пользователей —
  Raw Input даёт процессу одно окно-получатель, второй читатель отобрал бы ввод
  у краевых ползунков. Давление разбирается только пока кому-то нужно.
- RawTouchpadReader: Tip Pressure в TouchContact, только у контакта с Confidence
  (ладонь — 0); Tip Switch и Confidence — одним вызовом HidP_GetUsages.
- HeavyPressDetector (под тестами на живых числах) + TouchpadHeavyPress: подписка
  только при назначенном действии; 0x59 пишется лишь при явном вкл/выкл, на старте
  тачпад не трогаем. Подписка/Release — снаружи замка (иначе тупик с потоком
  читателя при остановке).
- TouchpadEdgeSliders переведены на общий TouchpadInput.
- Действие «Скриншот» (Win+Shift+S) — в KeyRouter.Run и списке клавиш.
- С «Нет действия»: не подписаны, давление не читается; если выключены и краевые
  ползунки — читатель касаний остановлен совсем.

Доки: CLAUDE.md, README/README.ru, ROADMAP, CHANGELOG, docs/05, docs/07.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Oksion
Oksion merged commit 31355f0 into main Sep 24, 2026
5 checks passed
@Oksion
Oksion deleted the feat/xic-78-heavy-press branch September 24, 2026 16:46
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.

1 participant