현대 macOS를 위한 Griffin PowerMate의 부활
초기 Mac 사용자들에게 Griffin PowerMate는 단순한 주변 기기 그 이상이었습니다. 그것은 데스크톱의 촉각적 중심이었습니다. 돌려서 스크롤하거나 눌러서 클릭할 수 있는 단순하고 우아한 노브는 현대의 터치패드나 마우스가 흔히 결여하고 있는 물리적 실재감을 제공했습니다. 하지만 macOS가 진화함에 따라 이 "quaint"한 장치에 대한 지원이 점차 사라졌고, 많은 PowerMate들이 잡동사니 서랍 속에서 먼지만 쌓여가게 되었습니다.
James Lockman이 개발한 새로운 오픈 소스 드라이버의 출시로 상황이 바뀌고 있습니다. Swift 기반의 이 프로젝트는 PowerMate를 현대의 macOS (13+)로 다시 가져와, 사용자들이 이 클래식한 하드웨어를 생산성 향상과 피젯(fidgeting) 용도 모두로 다시 활용할 수 있게 해줍니다.
PowerMate의 작동 방식
Griffin PowerMate는 두 가지 주요 입력을 제공하는 USB HID (Human Interface Device)입니다: 회전 다이얼과 순간적인 푸시 버튼. 이 장치는 Vendor ID 0x077d와 Product ID 0x0410으로 식별됩니다.
데이터 프로토콜
드라이버는 6바이트 리포트를 통해 장치와 상호작용합니다. 리포트 형식은 간단합니다:
- Byte 0: 버튼 상태를 나타냅니다 (
0은 떼었을 때,1은 눌렀을 때). - Byte 1: 회전 델타(delta)를 나타냅니다. 이는 부호가 있는 값으로, 양수는 시계 방향 회전을, 음수는 반시계 방향 회전을 나타냅니다 (일반적으로 리포트당 ±1에서 ±7 사이).
장치가 속도를 직접 보고하지 않기 때문에, 드라이버는 리포트 사이의 경과 시간을 측정하여 **회전 속도(rotation rate)**를 계산하며, 이를 통해 소프트웨어에서 속도에 따른 매핑이 가능해집니다.
PowerMate Agent: 시스템 전반의 통합
드라이버를 커스텀 앱에서 라이브러리로 사용할 수도 있지만, 이 프로젝트에는 PowerMate Agent가 포함되어 있습니다. 이 백그라운드 애플리케이션은 하드웨어 입력을 모든 애플리케이션이 해석할 수 있는 시스템 전반의 이벤트로 변환합니다:
- Rotation: 스크롤에 매핑됩니다. 흥미롭게도, 메뉴나 서브메뉴가 포커스된 경우, 에이전트는 macOS Accessibility API를 사용하여 이 상태를 감지하고 자동으로 회전을 Up/Down arrow keys로 전환하여 전송합니다.
- Click (Short Press): 왼쪽 마우스 버튼 클릭으로 작동합니다. 메뉴가 포커스된 경우, 하이라이트된 항목을 선택하기 위해 Return 키를 전송합니다.
- Long Press: 오른쪽 마우스 버튼 클릭으로 작동합니다.
정상적으로 작동하려면 에이전트는 시스템 설정에서 Input Monitoring 및 Accessibility 권한이 필요합니다. Accessibility가 활성화되지 않은 경우, 에이전트는 롱 프레스에 의해 트리거되는 "메뉴 모드"로 전환되어, 클릭이 발생하거나 5초의 타임아웃이 도달할 때까지 사용자가 화살표 키로 메뉴를 탐색할 수 있게 합니다.
개발자를 위한 안내: 드라이버 통합
자신만의 도구를 만드는 사람들을 위해, PowerMateDriver는 Swift package로 추가할 수 있습니다. 드라이버는 클로저(closure)나 델리게이트 패턴(delegate pattern)을 통해 이벤트를 처리하는 깔끔한 API를 제공합니다:
onRotate:delta와 계산된rate를 제공합니다.onButtonDown/onButtonUp: 물리적 누름과 뗌을 처리합니다.onClick/onLongPress: 버튼 상태에서 파생된 상수위(high-level) 이벤트입니다.
LED 제어
PowerMate의 가장 매력적인 기능 중 하나는 베이스에 있는 파란색 LED입니다. 드라이버는 시각적 피드백을 위해 이 조명을 제어하는 메서드를 제공합니다:
setLEDBrightness: 정적 밝기 수준을 설정합니다 (0–255).setLEDPulseAsleep/setLEDPulseAwake: 내장된 펄스 동작을 토구합니다.setLEDPulseMode: USB vendor control requests를 사용하여 커스텀 펄스 설정을 구성할 수 있게 합니다.
커뮤니티의 관점
이 드라이버의 출시는 커뮤니티에 향수를를 향수를 불러일으켰습니다. Hacker News의 사용자들은 이 장치를 "ultimate fidget tool"이라고 묘사했으며, 일부 사용자들은 단순히 기능적인 드라이버가 없어서 장치를 사용 중단했었다고 언급했습니다.
하지만 일부 사용자들은 장치가 마우스 기능만 수행한다면 그 유용성이 제한적이라고 지언했습니다. 한 사용자 @zdw가 다음과 같이 제안했습니다:
"스크롤과 마우스 버튼 클릭은 이미 마우스를 통해 할 수 있는 일들이라, 볼륨 조절이나 미디어 재생/일시정지 같은 다른 기능들을 할 수 있다면 정말 좋을 것 같습니다."
이는 드라이버의 유연성을 강조합니다. 드라이버가 로우(raw) 회전 및 버튼 이벤트를 노출하기 때문에, 개발자들은 이를 어떤 CGEvent (예: 볼륨 조절 또는 미디어 키)로도 매핑핑할 수 있어 사용자의 특정 워크플로우에 맞춰 장치를치를 장치를 커스텀할 수 있습니다.
설치 및 요구 사항
현대적인 Mac에서 PowerMate를 작동시키려면 **macOS 13+**와 **Swift 5.9+**가 필요합니다. 드라이버는 kIOHIDOptionsTypeSeizeDevice를 사용하여 USB 장치에 대한 독점적 접근권을 가받아, 한 번에 하나의 프로세스만 PowerMate를 제어할 수 있도록 보장합니다.