Нативная поддержка для устройств ввода | [В Android своими руками]



Реп: (1400)
Данная тема является продолжением статьи https://4pda.to/2014/12/12/190359/
Здесь обсуждаем способ создания нативной поддержки для устройств ввода и делимся готовыми решениями.
Прикрепленное изображение


Сообщения, не относящиеся к теме обсуждения (оффтоп), удаляются без предупреждения.


Инструментарий
Инструментарий:
  • устройство на Android 4+ (проверял только на 5.0 и 4.4);
  • поддержка устройством USB OTG;
  • наличие root-доступа;
  • файловый менеджер с поддержкой root (в моём случае это Total Commander);
  • текстовый редактор (в моём случае это опять Total Сommander);
  • лист бумаги и карандаш;
  • USB Device Info (для определения свойств устройства);
  • KeyTest (для отображения кодов кнопок устройства) временно недоступна по ссылке, скачивайте с форума, ссылка ниже.
    Еще одна программа, отображающая коды кнопок и действия осей Google Play
    Универсальная программа для тестирования кнопок, редактирования действий и создания конфига Gamepad Tester

Так же эти приложения можно скачать на форуме Нативная поддержка для устройств ввода (Пост #36465278)

Шаг первый. VID и PID
1. Создание файла с VID и PID
Подключаем наше устройство ввода и запускаем приложение USB Device Info. Нас интересует вкладка Linux, в которой выбираем своё устройство (у меня оно было последним в списке) и ищем значения строчек Vendor ID и Product ID. В моём случае это были 0c45 и 7700 соответственно.
Прикрепленное изображение

Так же VID и PID можно посмотреть подключив устройство к ПК.
Прикрепленное изображение

Для Bluetooth устройств:
Узнать эти значения для Bluetooth девайсов можно открыв файл /proc/bus/input/devices.

Копируем любой файл из /system/usr/keylayout на sdcard и переименовываем его в соответствии с полученными данными, для моего джойстика название получилось таким: Vendor_0c45_Product_7700.kl. (Обратите внимание, что регистр букв имеет значение)

Шаг второй. Получение кодов кнопок.
2. Получение кодов кнопок
Запускаем приложение KeyTest и, вооружившись бумагой и карандашом, начинаем поочерёдно нажимать кнопки на устройстве, записывая цифры, высвечивающиеся после scanCode=. Я записывал коды, располагая их на бумаге, как кнопки на геймпаде.
Прикрепленное изображение
Из программы можно выйти только по кнопке «Домой».

ВНИМАНИЕ!
Если Геймпад видно в первом шаге, но кейтест не реагирует на нажатия, возможно, у вас отсутствует нужный модуль в ядре - скажите "спасибо" автору прошивки.
Но не отчаивайтесь, есть возможное решение Нативная поддержка для устройств ввода (Пост wm-hater #52134473)

Шаг третий. Маппинг кнопок.
3. Маппинг кнопок
Теперь, когда стали известны коды всех клавиш, необходимо прописать их функции. Тут есть два пути:
а) найти среди имеющихся в Android конфигов устройство, максимально приближенное к вашему, и просто изменить в нём коды кнопок, скопировав содержимое в свой файл;
б) прописать все самому.
Я пошёл по второму пути, ибо мой джойстик имеет только крестовину управления и четыре кнопки. Для начала нужно понять синтаксис файла раскладки, он очень прост:

key код_кнопки действие_кнопки

Но тут возник вопрос: а какие действия кнопок писать в конфиге? За много лет использования различных геймпадов на Android я для себя определил, что самый универсальный конфиг — это раскладка от Sony Xperia Play, она одинаково хорошо ведёт себя как в играх, так и в интерфейсе системы.

Ok Google, key mapping for Xperia Play

Key code constant scancode
X 23 KEYCODE_DPAD_CENTER 304
circle 4 KEYCODE_BACK 305
square 99 KEYCODE_BUTTON_X 307
triangle 100 KEYCODE_BUTTON_Y 308
up 19 KEYCODE_DPAD_UP 106
down 20 KEYCODE_DPAD_DOWN 105
left 21 KEYCODE_DPAD_LEFT 103
right 22 KEYCODE_DPAD_RIGHT 108
select 109 KEYCODE_BUTTON_SELECT 314
start 108 KEYCODE_BUTTON_START 28
L trigger 102 KEYCODE_BUTTON_L1 310
R trigger 103 KEYCODE_BUTTON_R1 311

Нас интересует третья колонка, но запись действий в ней немного отличается от тех, что были найдены в системе — это не помеха, просто убираем KEYCODE_.

Прописываю свои кнопки (помните листок с карандашными записями? Самое время найти его...):
!!! ВНИМАНИЕ !!!
Нужен текстовый редактор с поддержкой unix кодировки!
Блокнот из состава Windows НЕ подойдет,
Используйте, к примеру, Notepad++
key 147 DPAD_CENTER
key 149 BUTTON_B
key 148 BUTTON_Y
key 146 BUTTON_X
key 157 DPAD_DOWN
key 145 DPAD_LEFT
key 155 DPAD_UP
key 156 DPAD_RIGHT

Но и тут не обошлось без нюансов. У Sony на кнопку «круг» (circle) назначено действие KEYCODE_BACK (привычная нам кнопка «назад»). Несложно догадаться, что нажатие такой кнопки в игре может вызвать нервный срыв. А всё дело в том, что во время игры на Xplay эта кнопка принимает альтернативное значение — KEYCODE_BUTTON_B. Вот её мы и пропишем.
Смещение по оси прописывается так:
axis 0x00 HAT_X
axis 0x01 HAT_Y


Шаг четвертый. Момент истины.
4. Момент истины
Сохраняем наш файл и копируем его в папку /system/usr/keylayout. Выставляем права -rw -r -r (644). Перезагружаем устройство (сам я этого не делал, просто заблокировал и разблокировал, но для чистоты совести и эксперимента обязан был это написать).

Подключаем наше устройство, и если всё сделали правильно, тут же сможете «крестовиной» перемещаться по меню Android. Кнопка, на которую назначили DPAD_CENTER, будет кнопкой выбора, а BUTTON_B — кнопкой «назад».


Проблемы и возможные решения
Q: Все прописываю верно, но конфиг не цепляется.
А: Если вы пропишете коды действий с ошибкой, например:
key 123 BUTTON_HOME вместо key 123 HOME
то система будет считать этот файл ошибочным.
Проверить свой файл на ошибки можно на сайте: https://ris58h.github.io/validatekeymaps/ (спасибо говорим prakop29 )

Также есть способ проверить подхватывается ваш kl файл системой или нет - стереть все кейкоды или закомментировать их знаком #:
#key 123 BUTTON_HOME
Если файл подхватился - никакой реакции на кнопки не будет, но в KeyTest все будет отображаться.

Q: Все прописываю верно и без ошибок но все или часть кнопок не работают.
А: Попробуйте прописать scancode в hex формате: Нативная поддержка для устройств ввода (Пост romanctest #69194647)

Q: Дуалшок 4 постоянно отваливается или работает с задержкой.
А: Нативная поддержка для устройств ввода (Пост maxmergov #81264882)

Q:Как выключить тачпад на геймпаде/клавиатуре?
А: Нативная поддержка для устройств ввода (Пост SirKosichka #115621658)


Полезные ссылки:

Готовые *.kl файлы


Сообщение отредактировал Boy77ruS - 14.03.24, 15:21
Причина редактирования: Esperanza Gamepad PS3/PC USB Trooper Black (EGG107K)



Реп: (7)
а клаву с мышкой для wot blitz так запилить можно будет?



Реп: (1)
usb device info джойстик видит, а вот keytest не видит. Что делать cm11



Реп: (24)
* Dreamer...,
Результат нулевой, делал так:
Прикрепленное изображение

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



Реп: (1)
У меня интересная ситуация. Геймпад Defender, без стиков, без вибрации, определяется планшетом автоматом. И по менюшкам листает и даже в играх некоторых работает(хотя не всегда так как надо, но от игры зависит). А вот Logitech F310 ни как не хочет определяться в системе, помогает только прога USB/BT Joy. Причем, конфиг(или драйвер) для последнего есть в keylaout, а для Defender - нет.



Реп: (374)
* Dreamer...,
Я думаю, что здесь не помешает ссылка на Переназначение функций кнопок на android устройствах , а также тот факт, что посмотреть VID|PID можно через Диспетчер устройств Windows.
Прикрепленное изображение



Реп: (1400)
* ivanew, в теории можно.
* Pinfo4er, попробовать создать пустой .kl файл, перезагрузиться и проверить в keyTest ещё раз.
* Shadow326159, а кейкоды прописывали?

Добавлено 12.12.2014, 23:37:

Hanzo_Hassashi @ 12.12.2014, 21:27 *
Причем, конфиг(или драйвер) для последнего есть в keylaout,
а значения кнопок в нем правильные?
* ottiwell, да. Посмотреть эту инфу можно в любой системе.



Реп: (7)
Хорошо, а что делать с беспроводными устройствами?
Хочу мышкой закрывать окна (c) ;)

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



Реп: (2)
Блин весь вечер проковырялся с геймпадом от PS4, но не без чужих усилий получилось!
Dualshock 4 хоть и подключается без каких либо настроек но вот работает не адекватно все потому что настройки от Dualshock 3.
Решил поправить немного их и тут понеслось....
KeyTest видит только коды клавиш а оси не отслеживает (хотя может и отслеживает но я ладу не дал) и DPAD как то не так работает.
В общим нашел кто за меня сделал большую часть работы, правда ребята там другим делом занимались, они Dualshock 4 к Amazon Fire TV прикручивали за что им спасибо.
http://forum.xda-devel…rrect-keymaps-t2817223
В конечном счете я его немного переделал ну и все, точнее большинство заработало.
Проверял на SGS3 и асфальт 8.
Единственно необходимо поменять расширение с txt на kl.

Прикрепленные файлы

Прикрепленный файлVendor_054c_Product_05c4.txt ( 1.22 КБ )


Сообщение отредактировал space_cat - 13.12.14, 00:44



Реп: (12)
Ребятки, не могу загрузить Key Test по ссылке... ?



Реп: (1)
ребят подкиньте коды действий под dualshock или xbox контролер
что прописывать чтоб под gta sa



Реп: (12)
Вот готовый файл для такого джоя http://www.exeq.ru/pro…orma-pc/neonlight.html

Прикрепленные файлы

Прикрепленный файлEXEQ NEONLight.zip ( 534 байт )


Сообщение отредактировал bati7 - 13.12.14, 02:50



Реп: (12)
Может кто нибудь выложит установочный apk KeyTest? Зачем через облако, он же весит меньше канарейки?

Сообщение отредактировал Dranyonito - 13.12.14, 04:10



Реп: (24)
Dreamer... @ 12.12.2014, 23:37 *
Shadow326159, а кейкоды прописывали?

Нет, взял от xbox360 и просто переименовал, закинул и поставил права.



Реп: (214)
С блютус джоями никто не разбирался? У меня Ipega pg-9025, как определить Vendor/Product ID?



Реп: (1)
* Dreamer...,
не помогло



Реп: (1)
Gluck92 @ 13.12.2014, 12:08 *
С блютус джоями никто не разбирался? У меня Ipega pg-9025, как определить Vendor/Product ID?
мне помогло найти через KeyTest "scan code" кнопок, и их изменение в Generic.kl
а так да, висит вопрос определения БТ девайсов



Реп: (374)
Dranyonito @ 13.12.2014, 03:10 *
Может кто нибудь выложит установочный apk KeyTest?


Прикрепленные файлы

Прикрепленный файлKeyTest.apk ( 13.72 КБ )
Прикрепленный файлUSBDeviceInfo.apk ( 63.84 КБ )



Реп: (1400)
MEEP! Joystick
Изображение
Прикрепленное изображение

Прикрепленный файлMEEP Joystick.zip ( 618 байт )



Genius MaxFire Pandora Pro
Изображение
Прикрепленное изображение

Прикрепленный файлGenius MaxFire Pandora Pro.zip ( 634 байт )


Сообщение отредактировал Dreamer... - 13.12.14, 20:37



Реп: (1400)
Hanzo_Hassashi @ 12.12.2014, 21:27 *
А вот Logitech F310 ни как не хочет определяться в системе, помогает только прога USB/BT Joy. Причем, конфиг(или драйвер) для последнего есть в keylaout, а для Defender - нет

Раз USB/BT Joy видит - значит можно настроить нативное определение
maaster @ 13.12.2014, 00:24 *
Хорошо, а что делать с беспроводными устройствами?

Написал в шапке
lnsurgent @ 13.12.2014, 01:44 *
ребят подкиньте коды действий под dualshock или xbox контролер

Под xbox и dualshock уже встроены в систему + выше писали и выкладывали готовый файл.
lnsurgent @ 13.12.2014, 14:00 *
мне помогло найти через KeyTest "scan code" кнопок, и их изменение в Generic.kl

Изменение в Generic.kl не самый изящный способ
Shadow326159 @ 13.12.2014, 06:45 *
Нет, взял от xbox360 и просто переименовал, закинул и поставил права.

ну так кейкоды могут не совпадать.



Реп: (12)
* Dreamer..., Thrustmaster LightBack определяется USBDeviceinfo, но в Key Test на нажатия реакции нет. Проверял на Surfpad 3.


Полная версия   Текстовая версия

Помощь   Правила

Сейчас: 29.03.24, 10:57