小李司机

给 MacBook 写一个更好的 Windows 触摸板驱动
总有人是这样,将生活弄得更好。下面推荐一个在windows下用上Macbook自带的Magic Trackpad ...
扫描右侧二维码阅读全文
04
2019/08

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

总有人是这样,将生活弄得更好。
下面推荐一个在windows下用上Macbook自带的Magic Trackpad 驱动,灰常给力。

下载地址:Github 本地下载

按照过程也比较简单,就是先安装证书然后再右键inf进行安装。

14700-10455-151024-Trackpad-2-l.jpg

下面是原文转发:

众所周知 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 描述符要求把数据喂回去然后完成请求即可。

几个坑和提示
设备 D0/D3 转换的时候可以关掉触摸板来省电(反正 MacBook 没 S0ix )
一定要精确报告每个 Input Frame 的测量时间,不然加速度会变得非常奇怪(你可以用 KeQueryPerformanceCounter / QueryPerformanceCounter,分别对应 km 和 um )来获得每一次读取的差值。注意在 HID 报告里,Timing 的单位是 100 微秒,且这个 Timing 的数据只有两个 2 Byte。数据允许 Rollover )
没有来得及完成的 Request 在转换和 Unload 时清理掉(STATUS_CANCELLED)。不然等着蓝屏吧
Polling 单独开一个 System Thread,然后 Synchronous IOCTL Request 能不用就不要用(我还需要改 SPI 的这一部分)。
Q & A
为什么要这么干?好好用 macOS 不好吗?
因为我能这么干,为什么不这么干呢。其实有一些硬需求用 Windows 也挺好的。

有没有演示?
YouTube
Bilibili
代码在哪
Github

最后修改:2019 年 08 月 04 日 09 : 03 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论