Разработчики добавили новый драйвер для устройства Griffin PowerMate в macOS, которое идеально вписывается в современные системы. Этот аппарат появился давно и служит простым контроллером с небольшим колесом, кнопкой и синим светодиодом в основании. Изначально он помог видео- и аудиоинженерам управлять скроллом на рабочем столе, хотя сейчас современные планшеты предлагают больше функций.
Для установки нужно открыть файл DMG, перетащить PowerMate Agent в папку Applications и запустить программу. Без подключенного USB-устройства ничего работать не будет, поэтому достаньте старый девайс из ящика с проводами. В верхнем меню появится новый пункт для настройки поведения. Колесо теперь работает как скролл: поворачивайте его, чтобы листать окна или менять значения. Можно перевернуть направление прокрутки, если стандартное не нравится. Кнопка эмулирует клики мыши: короткое нажатие — левая кнопка, долгое — правая. Также можно настроить так, чтобы долгое нажатие считалось двойным кликом.
Техническая часть основана на протоколе USB HID с идентификаторами VID 0x077d и PID 0x0410. Библиотека перехватывает 6-байтовые отчеты от устройства и преобразует их в события для приложений. Драйвер использует kIOHIDOptionsTypeSeizeDevice для получения эксклюзивного доступа, что означает, что одновременно работать может только одна программа. Отчет включает состояние кнопки и изменение угла поворота. Скорость вращения вычисляется программно на основе интервалов между пакетами данных. Синий LED горит, пока крутите колесо, и гаснет в покое.
Системный агент PowerMateAgent конвертирует движения в события клавиатуры и мыши для любых приложений, например браузеров или редакторов. Вращение вызывает вертикальный скролл или стрелки в меню, а клик выбирает выделенный элемент. Для работы с подменю требуется разрешение на Input Monitoring в настройках конфиденциальности, иначе курсор может «залипать». Если этого разрешения нет, длительное нажатие активирует режим навигации стрелками с таймаутом в пять секунд. При первом запуске macOS запросит доступ к Input Monitoring, его нужно выдать для терминала или исполняемого файла.
В коде Swift доступны методы для управления кнопкой и колесом, а также функции для настройки яркости LED и режимов пульсации, например setLEDPulseAsleep. Если устройство не отвечает, выньте его из порта и вставьте снова. Запустите приложение и завершите работу других программ, которые могут блокировать доступ. В Package.swift укажите зависимость от пакета драйвера, чтобы подключить его в своём проекте.