给 MacBook 写一个更好的 Windows 触摸板驱动

2018-07-08 04:34:52 +08:00
 imbushuo

众所周知 Boot Camp 的触摸板驱动不是那么好用,所以我们就来实现一个在 Windows 10 上能用的触摸板驱动吧。微软在 Windows 8.1 后加入了一套新的触摸板模型,叫做 Precision Touchpad,相关文档可以看这里。微软建议是用硬件( USB 或者 I2C )来实现 PTP 的 HID 设备,对于像 MacBook 这种不是原生 PTP HID 的设备来说,我们可以写一个 HID Miniport 驱动来把它变成一个 PTP HID 设备。

要完成这个 HID Miniport 驱动,驱动需要注册自己为一个过滤驱动,然后把后续的事情交给 HID KMDF/UMDF (mshidkmdf/mshidumdf),再完成相关的 IOCTL Routine。注意 HID KMDF/UMDF 的 IOCTL 略有不同,且一些 IO 操作也不同,比如 KMDF 可以直接读 IRP 包的 Buffer,而 UMDF 必须走 WDF 的那套拿 Buffer

之后驱动需要实现 PTP 所需要的所有 HID 描述符和 Top-level Collection。HID 的描述符会被对应到相应的 C Struct 里。

之后需要配置和读取设备。配置设备其实就是给触摸板写一个 HID Feature Report 来打开触摸板模式,在基于 USB 的 MacBook 触摸板可以用 USB Control Transfer,基于 SPI 的触摸板需要给 IoTarget 发 IOCTL_HID_SET_FEATURE 的 Internal Device Control。

之后便可以读取设备。在基于 USB 的 MacBook 触摸板上,可以使用中断,而 SPI 的需要使用轮询。按照 PTP 的 HID 描述符要求把数据喂回去然后完成请求即可。

几个坑和提示

Q & A

为什么要这么干?好好用 macOS 不好吗?

因为我能这么干,为什么不这么干呢。其实有一些硬需求用 Windows 也挺好的。

有没有演示?

代码在哪

SPI 版本目前还需要一些重构,稍后会合并到主干。

Acknowledgements

12627 次点击
所在节点    分享创造
43 条回复
Love4Taylor
2018-07-08 12:27:40 +08:00
牛批, 仰望
JRay
2018-07-08 12:36:08 +08:00
高端玩家
murmur
2018-07-08 12:52:39 +08:00
驱动级玩家
跪了
MOmc
2018-07-08 13:09:49 +08:00
赞!
May725
2018-07-08 13:13:45 +08:00
厉害👍 虽然看不懂
takashiki
2018-07-08 13:18:28 +08:00
厉害了,我现在都是通过 extramagic 在 windows 笔记本上用 trackpad2
walkbox
2018-07-08 13:21:52 +08:00
膜拜大佬
icestraw
2018-07-08 18:37:01 +08:00
很想知道如果不是 Mac 的硬件,Windows 本身的 Precision Touchpad 有可能实现 三指拖移 吗?原理上似乎可以但是一直没有看到有实现...
maemolee
2018-07-08 19:07:13 +08:00
感谢大佬!指不定那天我要用 Windows 就得受大佬恩惠。
d7101120120
2018-07-08 23:03:15 +08:00
在充满撕逼戾气的热门帖里面,终于看到了一条不一样的技术贴而且还这么厉害,感谢感谢。
mortal
2018-07-08 23:33:11 +08:00
膜拜
mortal
2018-07-08 23:36:52 +08:00
有支持 Trackpad 1 的计划么?
quericy
2018-07-08 23:55:58 +08:00
大佬!
这不是推特上的 imbushuo 大佬么
zzzim
2018-07-09 00:49:08 +08:00
睡前一个完美的技术贴
hanxiV2EX
2018-07-09 09:14:54 +08:00
赞一个!!!
galenzhao
2018-07-09 10:46:23 +08:00
@icestraw 急需 win10 三指拖拽,那个点两次拖拽太脑残
toou123
2018-07-09 13:44:31 +08:00
牛逼
lovelinghan
2018-07-09 14:40:24 +08:00
膜拜大佬
yishanxin
2018-07-09 16:22:59 +08:00
ayanmw
2019-07-16 17:09:01 +08:00
因为这个在 macbook 下 bootcamp windows 的体验比较差,我都想卖了笔记本了.已经买了台式机了(性能好) ;

如果这个 触控板 好用起来, 那简直就是好事一件,持续关注!!!

后续可以考虑学习下驱动开发, 如果能参与进来就好了~~( 我是 golang mmo 游戏开发)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/468972

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX