為現代 macOS 復興 Griffin PowerMate

對於那些記得 2000 年代初期的人來說,Griffin PowerMate 不僅僅是一個週邊設備;它是一種觸覺上的奢華。這是一個簡單、耐用的旋鈕,你可以旋轉或按下它,最初設計是用於簡化音訊和視訊製作。雖然現代控制器提供了一系列螢幕和按鈕,但 PowerMate 對旋轉輸入的單一專注卻有一種「古樸」的魅力。

多年來,這些設備一直堆積在「垃圾 USB 抽屜」和閣樓裡,主要是因為現代 macOS 版本缺乏使其能夠正常運作的必要驅動程式。隨著 Griffin PowerMate Driver 的發佈,這種情況正在改變,這是一個開源專案,讓這款經典硬體能在 macOS 13 及以上版本上無縫運作。

驅動程式的工作原理

Griffin PowerMate 是一個 USB HID (Human Interface Device) 設備,具有特定的 Vendor ID (0x077d) 和 PID (0x0410)。驅動程式透過在 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 呼叫來控制這道光,允許根據系統狀態進行視覺回饋:

  • 靜態亮度: 設定一個 0–255 的值。
  • 脈衝模式: 驅動程式支援內建的「睡眠」與「喚醒」狀態的脈衝模式,以及用於不同速度的自定義脈衝表。

開發者實作

對於想要將 PowerMate 支援整合到自己的 Swift 應用程式中的開發者,該驅動程式可以作為一個 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,雖然目前尚不清楚現代驅動程式是否解決了此類穩定性問題。

無論你是正在尋找實體捲動輪的視訊編輯師,還是想要為你的桌面增添觸覺元素開發者,這款驅動程式為這件耐用的硬體注入了新的生命。

Sources