feat(touchpad): сильное нажатие как назначаемое действие (XIC-78) - #67
Merged
Merged
Conversation
Продавили тачпад заметно сильнее обычного клика — выполняется выбранное действие, тот же список, что у клавиш (Настройки → Тачпад → «Сильное нажатие»). Как в 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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Что
Продавили тачпад заметно сильнее обычного клика — выполняется выбранное действие. Список тот же, что у клавиш (Настройки → Тачпад → «Сильное нажатие»). Как в Xiaomi PC Manager, где на сильном нажатии скриншот; в момент продавливания прошивка щёлкает второй раз.
Заодно действие «Скриншот» (Win+Shift+S) появилось в общем списке — его можно повесить и на любую клавишу.
Как распознаётся
Разбор
PluginGesture.dllPC Manager: сильное нажатие — это Tip Pressure (0x0D/0x30) контакта с Confidence > 500 в обычном PTP-вводе, один раз за касание. Вендорский канал для распознавания не нужен.Замер на TM2424:
Давление приходит при любом значении
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, действие «Скриншот»)🤖 Generated with Claude Code