Как захватить контроллер Bluetooth, когда приложение Mac неактивно? - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь написать небольшое вспомогательное приложение для macOS, которое захватывает ввод игрового контроллера Nimbus Steel Series и преобразует его в события клавиатуры и мыши для другого приложения (игры, которая не поддерживает контроллеры).

В моей первой попытке я использовал GCController, но как только приложение становится неактивным, больше никаких событий от контроллера не поступает. Кажется, нет способа изменить это.

В моей второй попытке я использовал CBCentralManager, чтобы обнаружить контроллер, надеясь, что смогу работать с ним, используя стандартные службы Bluetooth. Но контроллер даже не отображается при сканировании, когда контроллер подключен или отключен. Я нахожу устройства по всему дому (iPad, iPhone, Smart TV, компьютеры), но нет периферийных устройств, которые идентифицируют себя как Nimbus. Однако есть пара периферийных устройств nil, которые, как я полагаю, являются вспомогательными периферийными устройствами от устройств Apple, такими как Magic Mouse или беспроводная клавиатура.

В моей третьей попытке я пытался сделать главное окно NSPanel в стиле HUD. Панель остается на плаву, но все равно становится неактивной, когда я щелкаю в другом месте. События контроллера не получены. Я подумал, что, может быть, мне удастся как-то показать панель над полноэкранной игрой в углу. Но он все еще должен быть активным, чтобы получать события GCController, тогда игра не получит события.

Есть ли другие варианты получения входов игрового контроллера, когда приложение неактивно? Будет ли это работать через IOKit? До сих пор я не решался использовать IOKit, потому что я надеялся решить эту проблему без него, так как это API очень низкого уровня.

1 Ответ

0 голосов
/ 16 ноября 2018

Я решил эту проблему с помощью функций IOHIDManager. Обратные вызовы получают события, даже если приложение не активно.

...