扩展Magic Mouse的功能:我需要一个kext吗?

Tyl*_*ler 24 kernel objective-c device-driver multi-touch magic-mouse

我最近购买了一只Magic Mouse.它太棒了,充满了潜力.不幸的是,它受到软件支持的严重阻碍.我想解决这个问题.我做了很多研究,这些是我迄今为止关于事件链的调查结果:

  1. Magic Mouse鼠标向系统发送完整的多点触控事件.
  2. 多点触控事件在MultitouchSupport.framework(Carbon)中处理
  3. 事件在框架中解释,并作为正常事件发送到系统
    • 当您用一根手指滚动时,它会发送实际的滚轮事件.
    • 当您用两根手指滑动时,它会发送滑动事件.
  4. 没有NSTouch事件发送到系统.您无法使用NSTouch API与鼠标进行交互.

在我发现上述所有内容之后,我将MultitouchSupport.framework文件进行了反汇编,并通过一些Google搜索,找到了如何将自己的回调插入链中,以便接收原始触摸事件数据.如果枚举设备列表,则可以为每个设备(触控板和鼠标)附加.这一发现将使我们能够创建一个在鼠标上使用多点触控的框架,但仅限于单个应用程序.请在此处查看我的帖子:Raw Multitouch Tracking.

我想在整个系统中为鼠标添加新功能,而不仅仅是一个应用程序.

为了做到这一点,我想出了如何使用Event Taps来查看最低级别的事件抽头是否允许我获取原始数据,解释它,并在其位置发送我自己的事件.不幸的是,这种情况并非如此.事件点击,即使在HID级别,仍然是在MultitouchSupport.framework中解释输入的步骤.

在此处查看我的事件点击尝试:事件点击 - 尝试原始多点触控.
一个有趣的旁注:当收到多点触控事件(例如滑动)时,会触发默认情况并打印出事件编号29.标题显示28为最大值.

关于我的问题,既然你掌握了所有的信息,并且已经看到了我的尝试:扩展Magic Mouse功能的最佳方法是什么?我知道我需要以足够低的水平插入一些东西,以便在处理输入并调度预定义事件之前获取输入.所以,把它归结为单句问题:

  • 有没有办法覆盖MultitouchSupport.framework中使用的默认回调?
  • 我是否需要编写一个kext并自己处理所有传入的数据?
  • 是否可以编写一个位于现在处理输入的kext 之上的kext,并在该kext完成所有艰苦的工作之后对其进行过滤?

我的第一个目标是,如果您点击时设备上有两个手指,则可以发送中键按钮点击事件.显然,目前还有很多可以做的事情,但这对于拍摄来说似乎是一件好事.

提前致谢!

-Sastira

nat*_*evw 4

魔术鼠标和玻璃触控板之间的 MultitouchSupport.framework 中发生的情况有何不同?如果它基于 IOKit 设备属性,我怀疑您将需要一个模拟触控板但实际上与鼠标通信的 KEXT。Apple 有一些关于 Darwin 内核编程和内核扩展的文档:

(就我个人而言,我喜欢能够进行捏合放大和更多滑动/按钮手势的东西;事实上,Magic Mouse 是 Mighty Mouse 的四个按钮和 [尽管一直堵塞] 2D 滚轮的功能降级版。更新最后今年我写了Sesamouse来做到这一点,并且它不需要 kext(只需一两周盯着十六进制转储:-) 请参阅我的其他答案以获取 deets 和源代码。)