为现代 macOS 重生 Griffin PowerMate
对于那些还记得 2000 年代初期的人来说,Griffin PowerMate 不仅仅是一个外设;它是一种触觉上的奢华。一个简单、坚固的旋钮,你可以旋转或按下它,它最初的设计是为了简化音频和视频制作。虽然现代控制器提供了各种屏幕和按钮,但 PowerMate 对旋转输入的单一专注却有一种“古朴”的魅力。
多年来,这些设备一直堆积在“垃圾 USB 抽屉”和阁楼里,很大程度上是因为现代 macOS 版本缺乏使其发挥作用的必要驱动程序。随着 Griffin PowerMate Driver 的发布,这种情况正在发生改变,这是一个开源项目,使这款经典硬件能够在 macOS 13 及更高版本上无缝工作。
驱动程序的工作原理
Griffin PowerMate 是一个具有特定 Vendor ID (0x077d) 和 PID (0x0410) 的 USB HID (Human Interface Device)。驱动程序通过在 USB HID 上“接管”设备来运行,使其能够绕过默认的 macOS 行为,并将原始事件直接传递给应用程序。
数据协议
该设备通过 6 字节报告进行通信。驱动程序专注于两个主要数据点:
- 按钮状态 (Byte 0): 一个二进制值,其中
0表示按钮已释放,1表示按钮已按下。 - 旋转增量 (Byte 1): 一个有符号值,表示旋转方向。正值代表顺时针旋转,负值代表逆时针旋转。
由于设备不会直接报告速度,驱动程序会根据报告之间的时间间隔计算 旋转速率 (每秒增量)。这允许开发者实现依赖于速度的映射——例如,当旋钮转动得更快时,滚动速度也更快。
PowerMate Agent: 系统级集成
虽然驱动程序可以作为库在自定义应用中使用,但该项目还包含一个 PowerMate Agent。这个后台实用程序将原始 USB 事件转换为系统范围内的键盘和鼠标事件,以便任何应用程序都可以解释。
关键功能
- 旋转: 映射到垂直滚动。但是,Agent 非常智能,能够使用 macOS Accessibility API 检测何时菜单或子菜单处于聚焦状态。在这种情况下,旋转会自动映射到 Up/Down arrow keys。
- 点击: 短按动作相当于左键单击。当菜单处于聚焦状态时,它充当 Return 键以选择高亮项。
- 长按: 默认情况下,长按(阈值设置为 0.4 秒)充当右键单击。
权限与设置
由于 Agent 模拟用户输入并监控设备,它需要特定的 macOS 安全权限:
- Input Monitoring: 必要的,以便 Agent 捕获并发送事件。
- Accessibility: 必要的,以便 Agent 检测聚焦的 UI 元素(如菜单)以在滚动和箭头键模式之间切换。
自定义硬件反馈
PowerMate 最令人满足的部分之一是其底部的蓝色 LED 环。驱动程序提供了一组 API 调用来控制此灯,从而实现基于系统状态的视觉反馈:
- Static Brightness: 设置一个 0–255 的值。
- Pulse Modes: 驱动程序支持内置的“睡眠”和“唤醒”状态的脉冲模式,以及用于不同速度的自定义脉冲表。
开发者实现
对于希望在自己的 Swift 应用程序中集成 PowerMate 支持的开发者,该驱动程序可以作为 Swift package 使用。实现过程涉及初始化 PowerMateDriver 类并使用闭包或委托来处理事件:
import PowerMateDriver
let driver = PowerMateDriver()
driver.onRotate = { delta, rate in
// Handle rotation (e.g., adjust volume or zoom)
}
driver.onButtonDown = { /* Handle press */ }
driver.start()
社区视角
这款驱动程序的发布在老用户中引发了一波怀旧潮。Hacker News 上的用户将该设备描述为“终极指尖玩具”和一种“感觉年轻了 15 岁”的方式。
然而,该项目也提醒了人们注意旧硬件的怪癖。一位用户指出,历史上曾有一个问题,即在 Mac 休眠时按下按钮可能会触发内核恐慌 (kernel panic),尽管目前尚不清楚现代驱动程序是否解决了此类稳定性问题。
无论你是正在寻找物理滚动轮的视频编辑师,还是想要为你的工作台增台触觉元素的开发者,这款驱动程序为这款经久耐用的硬件注入了新的生命。