Comments 20
если однажды куплю такой джойстик, погляжу на досуге. выглядит несложно
Подпишусь на обновления. У меня геймпад xbox one bluetooth по проводу (я играю возле компа) и оставлять его с светящийся кнопкой после игровой сессии это как что-то незавершенное, а прожимать кнопку слишком долго, слишком. Могу предоставить свои дампы или побыть бета-тестером.
Полностью разделяю ваши ощущения. Видеть, как он лежит 15 минут включенный - режет глаза. Напишу вам, как снова возьмусь за это. Еще надеюсь, что в новых версиях GameInput, всё-таки, появится возможность отключать питание без танцев с бубном. В нулевой версии был метод PowerOff, видимо, изначально была идея давать это делать, может быть к этому вернутся
Достойный оверхэд, снимаю шляпу)
У меня тот же сценарий использования, сразу решил делать так (по пунктам проблем из статьи):
Переключаю видеовывод на тв по Win+P (легко вслепую, если отключен тв/монитор в этот момент) с монитора на тв и обратно в режим "Только экран компьютера" или "Только второй экран", вместе с переключением меняется и аудиовывод по умолчанию (при переключению видеовывода на тв звук тоже переключается на него и наоборот, запоминается последнее выбранное соответствие видео-звук, настраивается один раз при первом переключении)
Не использую Ночной свет по расписанию (для монитора всегда можно кликнуть кнопкой в панели у часов, если нужно)
Выключаю геймпад долгим нажатием (да, долго, но не настолько, чтобы что-то с этим делать)
Мы на то и разработчики\программисты, чтобы автоматизировать монотонные задачи. Не люблю держать кнопки и вообще делать одно и тоже за компом каждый раз, когда есть инструменты, позволяющие не делать это. Да и ковыряться во всем этом было достаточно интересно.
К тому же, у меня довольно сложная домашняя система, разные аудиоустройства, три монитора и пр. Автоматизация уже необходимость, а не прихоть
Сейчас качаю навыки 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-архиве лежит история чатов
Надеюсь это как-то поможет
Цена обсессии или как я пытался программно выключить джойстик Xbox Series