Разработчик Алек Холл (Alec Hall) представил серию патчей для ядра Linux, решающих проблему с отображением уровня заряда аккумуляторов периферии Apple при подключении по Bluetooth. В настоящее время ядро считывает данные о батарее клавиатур Magic Keyboard и мышей Magic Mouse исключительно при проводном соединении через USB. При беспроводном использовании индикация заряда стабильно показывает 0%, что создает неудобства для пользователей.
Основная техническая сложность заключалась в архитектуре кода. Драйверы запрашивали данные о батарее по аппаратному таймеру, что приводило к зависанию системы при попытке выполнить запрос. Для устранения этой ошибки автор перенес логику опроса состояния аккумулятора в отдельный поток, что позволяет безопасно выполнять операции с ожиданием ответа устройства без риска заморозки всей системы.
Помимо отображения процента заряда, патч добавляет поддержку индикации статуса зарядки для мыши Magic Mouse. Разработчик эмпирически определил значения специального байта состояния устройства, который теперь корректно интерпретируется подсистемой HID. Изменения успешно протестированы на клавиатуре Magic Keyboard и трекпаде Magic Trackpad 2 в связке со стеком BlueZ.
Примечательно, что периферия этой серии производится Apple с 2015 года, но реализация полной поддержки была осуществлена только сейчас, что отражает неравномерность процесса разработки открытых ОС, который держится на компаниях, заинтересованных только в части оборудования и ПО и отдельных энтузиастах, занимающихся разработкой в свободное время.
На данный момент патчи находятся на рассмотрении перед включением в основной код ядра и их можно будет ожидать в будущих релизах Linux.