Как написать драйвер для геймпада

Обновлено: 05.07.2024

Предметная область

Задача – получить данные от игрового руля. В первую очередь необходимо изучить предметную область. Где используются игровые рули? Очевидно, в играх. Множество игр разрабатывается с помощью технологии DirectX. Почитав википедию, можно узнать, что DirectX подразделяется на множество интерфейсов. Интерес для нас представляет интерфейс DirectInput.

Используемые игровые контроллеры

Для реализации проекта в мое распоряжение был предоставлен игровой руль Defender Forsage GTR.
Также я не упустил возможности поэкспериментировать со своим игровым джойстиком Logitech Rumblepad 2.

Managed DirectX

Необходимые инструменты

Начало работы

Добавим к проекту новый файл app.config со следующим содержимым:


Теперь все готово, можно начинать работать с игровыми контроллерами.

Получение состояния игрового руля

Очевидно, что первым делом необходимо узнать обо всех подключенных игровых контроллерах:


Далее необходимо инициализировать игровое устройство. Для наглядности подразумеваю, что оно у меня одно:


В характеристиках руля сказано, что угол поворота рулевого колеса составляет 180 градусов, поэтому в InputRange я указал значение угла отклонения влево и вправо в 90 градусов.

К сожалению, мы не сможем подписаться на какие-либо события от руля или джойстика вроде KeyDown\KeyUp, и состояние игрового контроллера придется опрашивать вручную:


Для наглядности можно вывести на экран структуру JoystickState и увидеть, какие поля меняются в зависимости от состояния игрового руля. Все это справедливо также и для джойстика.

Выводы

Оказывается, запрограммировать игровой контроллер под свои нужды не так уж и сложно, большинство всевозможных джойстиков\рулей и т.п. подчиняются интерфейсу DirectInput, теперь в свои проекты\игры вы с легкостью сможете добавить их поддержку. Что касается игр, то остается только реализовать функционал, дающий пользователю возможность самому «навешивать» на кнопки действия, предусмотренные логикой игры.

USB/BT Joystick Center 2021
версия: 2021.1

Прикрепленное изображение

Последнее обновление программы в шапке: 22.07.2021

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Краткое описание:
Подключение контроллеров (геймпадов, клавиатур, мышек и прочего).

Описание:
USB/BT Joystick Center - Программа предназначена в первую очередь для любителей поиграть в игры на своём смартфоне или планшете, используя свой любимый манипулятор (будь то геймпад, мышь или клавиатура). С помощью этой программы можно подключить джойстик к устройству и играть с контроллером даже в те игры, которые по-умолчанию не поддерживают его. У программы есть два режима работы: 1. переназначение кнопок на манипуляторе; 2. транслирование действий (нажатия, свайпы, круговые и бесконечные и т.п.) с манипулятора на дисплей устройства (для этого потребуются рут права).

Требования: Android 3.2 и выше, наличие USB хоста (Android 4.2.0 системно не имеет поддержки USB хоста).
For the main features you do not need root (Joysticks + Keymappings). Also for the Wireless PS4/PS3 Dualshock Sixaxis Controller you don't need a rooted device. For all Touch features you need a rooted device.

USB/BT Joystick Center был протестирован с этими устройствами:

- Acer A500 (ICS 4.0.3 Stock)
- Archos 101 G9 (ICS 4.0.3 Stock)
- Asus Nexus 7 (JB 4.1.1 Stock)
- Asus TF101 (HC 3.2 Stock)
- Asus Prime TF201 (ICS 4.0.3 Stock)
- Asus TF300 (ICS 4.03 Stock)
- Asus TF700 (JB 4.1.1 Stock)
- RikoMagic MK808 (Finless Rom)
- RikoMagic MK802 II (4.0.4 with USBHostAPI-Patch.zip)
- Samsung Nexus (ICS 4.0.2 Stock)
- Samsung S2 (ICS 4.0.3 Stock, GT-I9100-IML74K.XWLP7, Kernel: 3.0.31-Dorimanx-V2.1-SGII-ICS)
- Samsung S3 (ICS 4.0.4 Stock)
- Samsung Galaxy Tab 7.7 Plus
- Sony Xperia Play (ICS 4.0.3, Stock Beta)
- Toshiba Thrive A100 (HC 3.2 Stock)
- Transformer Prime TF201 (ICS 4.0.3 Stock)
- Xoom (4.03 Stock, with OTG USB Cable)

На остальных планшетах программа так же должна работать, но они пока не протестированы на данный момент.

- Поддержка почти всех джойстиков USB.
- Поддержка мультиплейера для 16 джойстиков.
- Настраиваемая "мертвая зона"
- Создание, изменение собственных настроек.
- Сохранение и загрузка собственных настроек кнопок, ползунков и проч.
- Поддержка LED индикаторов для PS3 и XBox контроллеров/
- Поддержка реального аналогового Stick Play (новый "Аnalog-Key" опционально)
- Вы можете играть на "Xperia-Play", список поддерживаемых игр ниже.
- Некоторые игры в которые можно поиграть с джойстиком (ShadowGun, GTA III / 3, Riptide GP, Meganoid, Reckless Getaway, Cordy, Modern Combat 3, Mame4droid USB, FrodoC64 USB, N64oid, Mupen64Plus, Nes/SNes, FPse, . и др.)
Программа уже содержит в себе настройки управления приведенных ниже устройств: (для остальных вы можете создать сами

Bluetooth:
- Wii Remotes 1-4 + Nunchuck + Classic Controller
- Zeemote

Wireless:
- PS3 Sixaxis without root (* CSR Bluetooth 2.x/EDR+ USB Stick is needed)
- X360 Controller ("Microsoft Wireless Gaming Receiver for PC" USB is needed)
- Bluetooth Keyboards
- iCade
- iControlPad (SPP Mode)
- PhoneJoy
- Wii Remotes 1-4 + Nunchuck + Classic
- Zeemote

* Please read the PS3 pairing help inside the app
Wired - USB:
- PS3 Sixaxis - With Cable Adapter
- X360 Controller - Wired
- Hyperkin N64 Moonlight Controller
- Logitech (Rumble, F310, F710)
- Microsoft Sidewinder 2 Precision
- Trust GXT 24
- X360 Rockband: USB Guitars/Drums
- N64 "Controller Adapter for PC USB" (for 2 Controllers)
- PSX 1/2 "USB Gamepad Converter Dualschock"
- PSX + N64 USB Dual Converter
- SNES "Controller Adapter for PC USB"
- C64/Atari/Amiga "Donalds USB-Joystickadapter"
- C64/128/A600 "Keyrah" USB Keyboard Adapter
- "PC/Gamepad/Joystick Adapter" (15 Pin D-Sub)
- PSX - USB 4 "Buzz Junior"
- PSX 1|2 "Super Dual Box Advanced" Adapter for PC

For all "SHADOWGUN" Players for the USB/BT Joystick Center:

Вспоминая времена, когда для пользователей персонального компьютера появилась поддержка контроллера XBox 360, вместе с поддержкой и соответствующими драйверами, тогда же была выпущена утилита Xbox 360 Accessories Software 1.2, которая, при удержании кнопки GUIDE на 360-ом контроллере (кнопка с логотипом XBox), вызывала на экран простенький бар, с информацией о порядковом номере геймпада в системе и состоянии батареи\аккумулятора (при беспроводном подключении):

реклама



MSI RTX 3070 сливают дешевле любой другой, это за копейки Дешевая 3070 Gigabyte Gaming - успей пока не началось

Ещё была любительская программка (Turn Off Xbox Controller), запуск которой мгновенно отключал беспроводной XBox 360 контроллер.

А что же интересного есть сейчас для геймпадов от Microsoft и не только? Давайте посмотрим.

реклама

var firedYa28 = false; window.addEventListener('load', () => < if(navigator.userAgent.indexOf("Chrome-Lighthouse") < window.yaContextCb.push(()=>< Ya.Context.AdvManager.render(< renderTo: 'yandex_rtb_R-A-630193-28', blockId: 'R-A-630193-28' >) >) >, 3000); > > >);

Утилита Аксессуары XBox (XBox Accessories).

На смену консоли XBox 360 пришла консоль XBox One, на смену ОС Windows 7/8.1 пришла ОС Windows 10, на смену геймпаду XBox 360 пришёл геймпад XBox One, на смену Xbox 360 Accessories Software пришло UWP-приложение Аксессуары XBox.

Приложение Аксессуары XBox предназначено исключительно для геймпадов XBox One. Приложение умеет:

реклама

Обновлять прошивку XBox One геймпада:


Показывать статус заряда аккумулятора\батареек:


реклама

Менять местами (программно разумеется) кнопки геймпада и отключать\включать вибрацию:


Активировать режим совместной игры (дублирует управление персонажем на два геймпада):


Неплохо, определённый прогресс на лицо. Но хотелось бы индикации заряда в реальном времени, а также предупреждения о низком заряде аккумулятора. Недавно я наткнулся на две соответствующих запросу утилиты.

Первая утилита - XBox One Controller Battery Indicator.

Эта утилита висит в трее и визуально показывает уровень заряда аккумулятора\батареек:


Поддерживаются такие варианты подключения:

  • XBOne + dongle;
  • XBOne Elite + dongle;
  • XBOne S + dongle;
  • XBOne S + Bluetooth;
  • XB360.

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

Когда заряд источников питания достигает критически низкого уровня, программа сигнализирует об этом вот таким всплывающим окном:


Вторая утилита - XInput Battery Meter.

Эта аналогичная по функционалу программа, она также показывает заряд аккумулятора XBox-геймпада в трее.

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



Остальные данные можно глянуть, кликнув правой кнопкой мыши по иконке программы в трее:


Порывшись в интернете, можно найти ещё парочку практически незаменимых программ для XBox-контроллера. На этот раз диагностических.

Первая программа из Microsoft Store - Game Controller Tester.


Эта программа предназначена для всех обладателей XBox геймпадов и любых других геймпадов с поддержкой XInput.

С помощью этой программы можно проверить:

  • Качество работы стиков;
  • Мёртвые зоны;
  • Работу кнопок;
  • Работу основных вибромоторов;
  • Работу виброкурков.

Вторая программа из Microsoft Store - Controller X.


В принципе то же самое, только морда приятней и платная.

Ну и, наконец, ещё одна полезная программка - Durazno.

Durazno - это XInput to XInput враппер для настройки ремаппинга осей и кнопок на XInput девайсах.
С помощью этой программы можно переназначить: кнопки, оси, курки, подкрутить мёртвые зоны и вибрацию, скрывать геймпад от игры.
Утилита работает с оригинальными контроллерами XBox и XInput-совместимыми.

Однажды, в очередной раз запуская AS3 захотелось ощутить немного комфорта: разлечься на стуле, взять в руки контроллер и комфортно поиграть. Для этой задачи удачно нашелся геймпад от Genius модели MaxFire G-12U Vibration, который я приобрел более пяти лет назад за 150 гривен. Он до сих пор работает. Но сразу же возникла проблема, а именно – работа правого стика в современных играх. Если крутить в право-влево, то камера в игре поднимается-опускается, а если вверх-вниз, то вообще никакой реакции. Было пройдено много игр на нем и таких проблем не было. Что ж, я уже не мог отказать себе в отдыхе и начал искать решение.

Предполагая, что проблема связана с драйвером, решил для начала их обновить, но любое ПО с интернета и его родного диска (пришлось еще поискать куда его вставить) не помогло. В свою очередь в эмуляторе PSCX2 все работает прекрасно, значит проблема не аппаратная, уже хорошо.

Как правильно использовать китайский джойстик в среде Windows 10 Xbox 360, Ведьмак, Компьютер, Длиннопост

Установка и настройка X360CE

Для начала необходимо установить последнюю версию драйвера для вашего девайса.

Скачиваем последнюю версию X360CE с его GitHub репозитория (поговаривают, что на официальном сайте давно нечего не обновляли). У меня это версия 4.13.11.0.

Распаковываем ее в удобном месте и всегда запускаем от имени администратора. При первом запуске эмулятор запросит установку драйвера эмуляции – устанавливаем.

Как правильно использовать китайский джойстик в среде Windows 10 Xbox 360, Ведьмак, Компьютер, Длиннопост

Подключаем джойстик, если вы этого еще не сделали. Далее переходим во вкладку Controller 1. Нажимаем кнопку Add в верхнем правом углу и выбираем ваше устройство кнопкой Add Selected Device.

Как правильно использовать китайский джойстик в среде Windows 10 Xbox 360, Ведьмак, Компьютер, Длиннопост

Как правильно использовать китайский джойстик в среде Windows 10 Xbox 360, Ведьмак, Компьютер, Длиннопост

Уже можно задавать кнопки, но пока рано. Замаскируем ваш джойстик в системе. Переходим во вкладку Options, далее Virtual Device и устанавливаем HID Guardian. Система как обычно может запросить перезагрузку, но у меня и без нее все было нормально.

Как правильно использовать китайский джойстик в среде Windows 10 Xbox 360, Ведьмак, Компьютер, Длиннопост

Далее во вкладке Devices находим свое устройство и напротив него устанавливаем галочку Hide.

Как правильно использовать китайский джойстик в среде Windows 10 Xbox 360, Ведьмак, Компьютер, Длиннопост

Таким образом мы прячем свой геймпад из системы, но его нажатия обрабатываются в эмулированном контроллере xbox 360. Чтобы убедится в этом, переходим в вкладку Controller 1 и нажимаем кнопку Game Controllers (внизу слева) и видим мой новый вау эффект.

Как правильно использовать китайский джойстик в среде Windows 10 Xbox 360, Ведьмак, Компьютер, Длиннопост

Убедимся, что все работает – открываем Game Controllers, Свойства контроллера. Проверяем все ли нажимается, крутится, вертится.

Как правильно использовать китайский джойстик в среде Windows 10 Xbox 360, Ведьмак, Компьютер, Длиннопост

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

Как правильно использовать китайский джойстик в среде Windows 10 Xbox 360, Ведьмак, Компьютер, Длиннопост

Собственно, вот сам виновник торжества. Все работает.

Как правильно использовать китайский джойстик в среде Windows 10 Xbox 360, Ведьмак, Компьютер, Длиннопост

В Ведьмаке, который заточенный только под контроллер xbox тоже работает.

Как правильно использовать китайский джойстик в среде Windows 10 Xbox 360, Ведьмак, Компьютер, Длиннопост

И на закуску – пятые свитки.

Выше были описаны минимальные настройки для всей системы. Делать детальное ревью не вижу смысла. Скажу только, что каждый ваш геймпад можно тонко настроить, если посидеть в программе больше пяти минут. Также если потребуется, то возможны индивидуальные настройки для каждой игры, которые можно произвести во вкладке Games. Просто добавляем ее главный исполняемый exe файл, выбираем его в эмуляторе и производим правки.

По поводу производительности. Разработчик советует свернуть эмулятор, перед запуском игры. В таком состоянии, он использует минимальное количество ресурсов системы.

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

Проблемы и возможные решения

Я не нашел в программе сброс всех настроек. Нашел решение на гитхабе. Нужно удалить папку, где эмулятор хранит свои настройки. Она находится в корне системного тома, в папке ProgramData под названием X360CE. Таким же способом можно сделать бекап настроек.

Когда впервые пытался настраивать новую версию программы, все работало, но в игре не работала ни одна кнопка. Оказывается, надо было вычистить старую версию программы из папки игры.

Забейте на ярко красное количество ошибок в правом нижнем углу, они имеют место быть, если уж совсем все плохо.

Вибрацию настроить на новой версии не удалось. При попытке ее включить, программа вылетает. Проблема с двайверами, которые были обновлены последний раз для Висты.

Читайте также: