Обновить

Цена обсессии или как я пытался программно выключить джойстик Xbox Series

Уровень сложностиСредний
Время на прочтение17 мин
Охват и читатели8.9K
Всего голосов 6: ↑6 и ↓0+7
Комментарии12

Комментарии 12

если однажды куплю такой джойстик, погляжу на досуге. выглядит несложно

На авито можно с рук купить не очень дорого. Джойстик Series стоит 2-3 тыщи, правда еще свисток тоже в районе тысячи

Что вы имеете в виду, когда говорите "несложно"?

Подпишусь на обновления. У меня геймпад xbox one bluetooth по проводу (я играю возле компа) и оставлять его с светящийся кнопкой после игровой сессии это как что-то незавершенное, а прожимать кнопку слишком долго, слишком. Могу предоставить свои дампы или побыть бета-тестером.

Полностью разделяю ваши ощущения. Видеть, как он лежит 15 минут включенный - режет глаза. Напишу вам, как снова возьмусь за это. Еще надеюсь, что в новых версиях GameInput, всё-таки, появится возможность отключать питание без танцев с бубном. В нулевой версии был метод PowerOff, видимо, изначально была идея давать это делать, может быть к этому вернутся

Достойный оверхэд, снимаю шляпу)

У меня тот же сценарий использования, сразу решил делать так (по пунктам проблем из статьи):

  1. Переключаю видеовывод на тв по Win+P (легко вслепую, если отключен тв/монитор в этот момент) с монитора на тв и обратно в режим "Только экран компьютера" или "Только второй экран", вместе с переключением меняется и аудиовывод по умолчанию (при переключению видеовывода на тв звук тоже переключается на него и наоборот, запоминается последнее выбранное соответствие видео-звук, настраивается один раз при первом переключении)

  2. Не использую Ночной свет по расписанию (для монитора всегда можно кликнуть кнопкой в панели у часов, если нужно)

  3. Выключаю геймпад долгим нажатием (да, долго, но не настолько, чтобы что-то с этим делать)

Мы на то и разработчики\программисты, чтобы автоматизировать монотонные задачи. Не люблю держать кнопки и вообще делать одно и тоже за компом каждый раз, когда есть инструменты, позволяющие не делать это. Да и ковыряться во всем этом было достаточно интересно.

К тому же, у меня довольно сложная домашняя система, разные аудиоустройства, три монитора и пр. Автоматизация уже необходимость, а не прихоть

Сейчас качаю навыки C#, чтобы методы GameInput поизучать лучше.

А мне очень не хватает отключения подсветки для кнопки... Играя вечером, светит прямо в глаза. На XBox, насколько знаю, отключить можно. А вот в Windows - нет

Это тоже описывается в документации. Если подключить джойстик по простому проводу, то можно регулировать яркость кнопки Guide, я пока экспериментировал, убавлял ее на 50-80%. Меня тоже беспокоит яркость, ядерная) Так что если научимся выключать джойстик, то научимся и регулировать свет)

Два часа вайб-запросинга с КлодКодом выдали в конце такой результат (для контроллера, подключенного по BLE):

Скрытый текст
Всё проверено и не работает для стандартных Xbox контроллеров 
  на Windows:

  ┌───────────────────────────────────────┬──────────────────┐  
  │                 Метод                 │ Причина провала  │  
  ├───────────────────────────────────────┼──────────────────┤  
  │                                       │ xusb22.sys       │  
  │ HID output report (USB)               │ перехватывает,   │  
  │                                       │ caps output=0    │  
  ├───────────────────────────────────────┼──────────────────┤  
  │                                       │ WSA 10050,       │  
  │ Raw L2CAP BT                          │ Windows          │  
  │                                       │ блокирует        │  
  ├───────────────────────────────────────┼──────────────────┤  
  │                                       │ Команды          │  
  │ BLE GATT char 0x0004                  │ принимаются, LED │  
  │                                       │  не меняется     │  
  ├───────────────────────────────────────┼──────────────────┤  
  │ GipGameControllerProvider.SendMessage │ Нет GIP          │  
  │                                       │ контроллера      │  
  ├───────────────────────────────────────┼──────────────────┤  
  │ INexusApi.SetTempNexusBrightness      │ Только для GIP,  │  
  │                                       │ BT+USB = XUSB    │  
  ├───────────────────────────────────────┼──────────────────┤  
  │ IMessageApi / IMessageSender          │ Только для       │  
  │                                       │ GIP-аксессуаров  │  
  └───────────────────────────────────────┴──────────────────┘  

  Вывод: Стандартные Xbox контроллеры (One/Series X/S) на       
  Windows всегда используют XUSB — и по USB (xusb22.sys), и по  
  BT (bthxhid.sys → XUSB bridge). GIP (и все связанные API      
  управления LED) доступен только для GIP-аксессуаров (Elite    
  Controller v2, гарнитуры) через xboxgip.sys. Смена яркости LED
   кнопки Guide через Windows-software для стандартных
  контроллеров невозможна известными методами.


Интересная информация. Я сейчас изучаю именно вариант с GIP, при подключении по беспроводному адаптеру.

Насколько я знаю, при работе по блютуз - это совершенно другая история и данные там то ли шифруются, то ли передаются по-другому.

XUSB, насколько я знаю, это про старые джойстики иксбокс 360. Начиная с Xbox One, контроллеры работают по GIP. В случае с Series это подтвержается тем, что при работе по проводу USB команду из GIP-документации отрабатывают.

GipGameControllerProvider.SendMessage - я пробовал. Там нужно каким-то образом ждать, чтобы появился контроллер. Даже если он уже подключен к ПК на момент запуска кода с этим методом, джойстик все равно определяется позже и я не смог разобраться как правильно получать к нему доступ. Наверное, попробую еще раз на досуге. Но само пространство имен Windows.Gaming.Input.Custom, как я понял, больше для кастомных геймпадов, у которых подразумевается дополнительный функционал.

ну у меня по проводу тоже получилось отключить подсветку кнопки.
однако при подключении по BLE (без донгла) - GIP не доступен. ну и отключив подсветку по проводу, при переключении на BLE кнопка снова "зажигается". заказал донгл, посмотрим как с ним. возможно через него будет доступен GIP

Да, в этом суть донгла. По сути разница между подключения по USB-проводу и подключению по донглу в том, что донгл шифрует данные, но пакеты те же работают. Потому по проводу можно команды передать, а по донглу нет, видимо, надо реверсить шифрование каким-то образом.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации