Pull to refresh

Comments 20

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

На авито можно с рук купить не очень дорого. Джойстик 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-проводу и подключению по донглу в том, что донгл шифрует данные, но пакеты те же работают. Потому по проводу можно команды передать, а по донглу нет, видимо, надо реверсить шифрование каким-то образом.

ну что же... приехал ко мне донгл. подключил к нему контроллер и получилось так выключить подсветку - через донг GIP-команды на Guide кнопку доходят (уровень яркости, разные анимации мигания, on/off) через WriteFile:

Логи приложения
Логи приложения


Получается так:

  • USB-провод или донгл - команды на подсветку работают и доходят

  • Беспровод через BLE - нет. Возможно дело в драйвере, может он как-то только HID пропускает, а до GIP не достучаться (что косвенно подтверждает приложение XBox Accessories - там устройство не видно, подключенное по BLE.

В общем, спасибо за статью, т.к. она дала направление, как можно эту бесячую кнопку выключить. А то я уже реально думал изолентой клеить, как советуют в интернетах

П.С. Если нужен будет код, дайте знать. Залью на гитхаб

Ого, это очень интересный виток развития всей этой темы. Заливайте, конечно. Посмотрим. Что вы имеете в виду под on/off? on/off подсветка клавиши Guide?

Ну можно регулировать интенсивность подсветки, а также можно передать "паттерн":
on - вкл подсветку

off - выключить

slow blink - медленное мигание

fast blink - быстрое мигание

charging blink - мигание, как при зарядке

ramp - так и не понял

В общем тут в доке есть это: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-gipusb/ec312389-2e05-4915-85ed-0e8fe9c3d33b. Table 42

По коду: чуть причешу и выложу

Спасибо, очень жду. Возможно это тот самый сдвиг, который мне был нужен) Если расскажите как вообще решили, как подходили к решению, буду рад почитать

Если честно - пару вечеров с Claude Code (sonnet-4.5). Все эксперименты он проводил. Я просто следил, чтобы он ничего серьезного не натворил. Ну и немного статей почитал, документации. Вся эта тема для меня очень новая:

  • Проект на C# - у меня ноль опыта с ним

  • GIP, всякие эти протоколы... темный лес

Пэтому особо рассказывать нечего. Знаний у меня в этом вопросе особых нет

Штош, тогда ждем репо на гите, там поковыряемся. Если не сложно, то прикрепите файл чата с клодом, если есть, тоже в репо.

Итак. Вот репо с готовым, работающим приложением: https://github.com/sinuke/xbox.led.control. Ну, как говорится, у меня на ноуте работает, проверял. В ридмишке написано как запускать, собирать. Я лично поставил .NET 10 SDK. Возможно с другими версиями тоже будет работать

Также создал ветку feature/experiments (https://github.com/sinuke/xbox.led.control/tree/feature/experiments). В этой ветке добавил папочку /experiments где сложил все файлики, относящиеся к разным проверкам, которые Claude пробовал. Также туда закинул CLAUDE.md, RESEARCH.md, MEMORY.md, а также создал папоку /claude-history в которой в ZIP-архиве лежит история чатов

Надеюсь это как-то поможет

Sign up to leave a comment.

Articles