Как написать драйвер для геймпада
Предметная область
Задача – получить данные от игрового руля. В первую очередь необходимо изучить предметную область. Где используются игровые рули? Очевидно, в играх. Множество игр разрабатывается с помощью технологии 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.
- 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), вызывала на экран простенький бар, с информацией о порядковом номере геймпада в системе и состоянии батареи\аккумулятора (при беспроводном подключении):
реклама
Ещё была любительская программка (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 все работает прекрасно, значит проблема не аппаратная, уже хорошо.
Установка и настройка X360CE
Для начала необходимо установить последнюю версию драйвера для вашего девайса.
Скачиваем последнюю версию X360CE с его GitHub репозитория (поговаривают, что на официальном сайте давно нечего не обновляли). У меня это версия 4.13.11.0.
Распаковываем ее в удобном месте и всегда запускаем от имени администратора. При первом запуске эмулятор запросит установку драйвера эмуляции – устанавливаем.
Подключаем джойстик, если вы этого еще не сделали. Далее переходим во вкладку Controller 1. Нажимаем кнопку Add в верхнем правом углу и выбираем ваше устройство кнопкой Add Selected Device.
Уже можно задавать кнопки, но пока рано. Замаскируем ваш джойстик в системе. Переходим во вкладку Options, далее Virtual Device и устанавливаем HID Guardian. Система как обычно может запросить перезагрузку, но у меня и без нее все было нормально.
Далее во вкладке Devices находим свое устройство и напротив него устанавливаем галочку Hide.
Таким образом мы прячем свой геймпад из системы, но его нажатия обрабатываются в эмулированном контроллере xbox 360. Чтобы убедится в этом, переходим в вкладку Controller 1 и нажимаем кнопку Game Controllers (внизу слева) и видим мой новый вау эффект.
Убедимся, что все работает – открываем Game Controllers, Свойства контроллера. Проверяем все ли нажимается, крутится, вертится.
Отлично, система видит заточенный под нее джойстик. Теперь можно тестировать в играх, прикладываю скриншоты доказательства работы эмуляции в современных играх от разных студий.
Собственно, вот сам виновник торжества. Все работает.
В Ведьмаке, который заточенный только под контроллер xbox тоже работает.
И на закуску – пятые свитки.
Выше были описаны минимальные настройки для всей системы. Делать детальное ревью не вижу смысла. Скажу только, что каждый ваш геймпад можно тонко настроить, если посидеть в программе больше пяти минут. Также если потребуется, то возможны индивидуальные настройки для каждой игры, которые можно произвести во вкладке Games. Просто добавляем ее главный исполняемый exe файл, выбираем его в эмуляторе и производим правки.
По поводу производительности. Разработчик советует свернуть эмулятор, перед запуском игры. В таком состоянии, он использует минимальное количество ресурсов системы.
Таким образом я решил не только свою проблему с геймпадом, но и нашел способ, как сэкономить деньги на покупке джойстика xbox для своего ноутбука. Но это все же не панацея, слишком багов может всплыть, а если изучить официальный репозиторий и вовсе страшно становится.
Проблемы и возможные решения
Я не нашел в программе сброс всех настроек. Нашел решение на гитхабе. Нужно удалить папку, где эмулятор хранит свои настройки. Она находится в корне системного тома, в папке ProgramData под названием X360CE. Таким же способом можно сделать бекап настроек.
Когда впервые пытался настраивать новую версию программы, все работало, но в игре не работала ни одна кнопка. Оказывается, надо было вычистить старую версию программы из папки игры.
Забейте на ярко красное количество ошибок в правом нижнем углу, они имеют место быть, если уж совсем все плохо.
Вибрацию настроить на новой версии не удалось. При попытке ее включить, программа вылетает. Проблема с двайверами, которые были обновлены последний раз для Висты.
Читайте также: