Uinput nav что это
[Вопросы] uinput_nav panda gamepad pro как решить?
Xiaomi Comm APP
Получайте новости о Mi продукции и MIUI
Рекомендации
* Рекомендуется загружать изображения для обложки с разрешением 720*312
Изменения необратимы после отправки
Cookies Preference Center
We use cookies on this website. To learn in detail about how we use cookies, please read our full Cookies Notice. To reject all non-essential cookies simply click «Save and Close» below. To accept or reject cookies by category please simply click on the tabs to the left. You can revisit and change your settings at any time. read more
These cookies are necessary for the website to function and cannot be switched off in our systems. They are usually only set in response to actions made by you which amount to a request for services such as setting your privacy preferences, logging in or filling in formsYou can set your browser to block or alert you about these cookies, but some parts of thesite will not then work. These cookies do not store any personally identifiable information.
These cookies are necessary for the website to function and cannot be switched off in our systems. They are usually only set in response to actions made by you which amount to a request for services such as setting your privacy preferences, logging in or filling in formsYou can set your browser to block or alert you about these cookies, but some parts of thesite will not then work. These cookies do not store any personally identifiable information.
These cookies are necessary for the website to function and cannot be switched off in our systems. They are usually only set in response to actions made by you which amount to a request for services such as setting your privacy preferences, logging in or filling in formsYou can set your browser to block or alert you about these cookies, but some parts of thesite will not then work. These cookies do not store any personally identifiable information.
Uinput nav что это
Указанная тема не существует, или находится на премодерации.
Cookies Preference Center
We use cookies on this website. To learn in detail about how we use cookies, please read our full Cookies Notice. To reject all non-essential cookies simply click «Save and Close» below. To accept or reject cookies by category please simply click on the tabs to the left. You can revisit and change your settings at any time. read more
These cookies are necessary for the website to function and cannot be switched off in our systems. They are usually only set in response to actions made by you which amount to a request for services such as setting your privacy preferences, logging in or filling in formsYou can set your browser to block or alert you about these cookies, but some parts of thesite will not then work. These cookies do not store any personally identifiable information.
These cookies are necessary for the website to function and cannot be switched off in our systems. They are usually only set in response to actions made by you which amount to a request for services such as setting your privacy preferences, logging in or filling in formsYou can set your browser to block or alert you about these cookies, but some parts of thesite will not then work. These cookies do not store any personally identifiable information.
These cookies are necessary for the website to function and cannot be switched off in our systems. They are usually only set in response to actions made by you which amount to a request for services such as setting your privacy preferences, logging in or filling in formsYou can set your browser to block or alert you about these cookies, but some parts of thesite will not then work. These cookies do not store any personally identifiable information.
Как играть на Android с помощью геймпада, клавиатуры или мышки. Настройка Panda Pro
Данный способ позволяет владельцам девайсов (смартфонов, планшетов, тв боксов и т.п.) на операционной системе Android играть в игры с помощью геймпадов, клавиатур и мышек, даже если в игре нету поддержки данных устройств управления!
Подготовка к запуску
2) Скачиваем активатор на ПК. Да, нам прийдется активировать программу Panda Pro через ПК
Активатор Panda Gamepad Pro/Mouse Pro для Windows: Скачать по прямой ссылке
На сайте активатора есть также версия для Mac.
Активация и настройки
Если у вас есть рут доступ на смартфоне, активация через ПК не нужна (Panda Pro сама активируется). Если же нет, то:
1) Устанавливаем и запускаем приложение Panda Pro на вашем устройстве, даем все разрешения, которые запросит программа.
2) Подключаем кабель USB к ПК и соединяем его со смартфоном. На смартфоне включаем режим отладки по USB и включаем Panda Pro.
3) На ПК запускаем активатор через файл Activate.bat, на смартфоне подтверждаем действия (должно всплыть уведомление).
4) С чистой душой отсоединяем телефон после завершения актиации.
Подключаем контроллер!
После активации подключаем наше устройство управления (мышь или геймпад) к смартфону, запускаем игру и верхней части экрана нажимаем на полупрозрачный значок Panda. Здесь можно настроить управление, прозрачность кнопок и т.п.
По умолчанию обычно все уже неплохо настроено. Более подробно про настройки программы смотрите в видео обзоре ниже:
Пишем драйвер пользовательского окружения для uinput на Raspberry Pi
Ради одного из своих небольших проектов на Raspberry Pi 2 я приобрел емкостной сенсорный дисплей Waveshare с демократичной ценой, скромным разрешением и сомнительной поддержкой. В коробке с дисплеем лежала DVD-R DL, и по заявлениям продавца, там лежали образы систем на базе Raspbian. Прочитать их мне не удалось, поиск решений в интернете подсказал, что драйвер, который там лежал, был и так не самым лучшим решением (уже скомпилированное ядро без исходников).
В процессе поиска я наткнулся на проект одного парня из дружественного Китая. Благодаря нему я смог прийти к своему решению.
В чем, собственно, дело
Дело в том, что компания предоставила только двоичный драйвер для своего дисплея, слинковав его с raspbian’овским ядром. Это хорошо, до тех пор, пока вы остаетесь на родном ядре и не хотите ничего менять и не вести серьезную embedded-разработку. Но как только вместо Debian’a вы перейдете на buildroot, смените компилятор, пересоберете свое ядро и так далее — у вас не останется никакого драйвера, совместимого с вашей новоиспеченной операционкой вообще.
В таких случаях выручает драйвер пользовательского окружения, который представляет собой программу, которая передает модулю ядра данные в понятном линуксу виде.
Поиск решения
Если мы посмотрим в лог dmesg, то увидим интересные нам строчки:
Господин derekhe с гитхаба указал на флаг сборки ядра (ядра у меня, к сожалению, не было):
Это позволяет прийти к заключению о том, что устройство является (или имитирует) клоном сенсора eGalaxy, а Waveshare просто перебили USB VendorId:ProductId. Так или иначе ядро создает устройство типа hidraw, в которое сенсорный экран плюет данные по 25 байт.
Потыкав пальцами в экран можно разобрать формат сообщения:
Для ленивых: исходники сырой версии драйвера лежат тут.
Решение проблемы
Прежде всего нужно осознавать, что все, что втыкается в USB можно и выткнуть, а поэтому нужно учитывать горячее подключение к порту.
В линуксе есть замечательная библиотека libudev, которая позволяет произвести перечисление подключенных устройств и мониторить добавление/удаление устройств.
Один из недостатков нашего случая — драйвер hidraw не несет информации о VendorId:ProductId устройства USB, к которому он привязан. Поэтому нужно делать перечисление устройств по драйверу hidraw, а затем искать родительское USB-устройство с указанными нами идентификаторами.
Важно: если мы хотим проверить уже подключенные устройства и следить за добавлением/удалением, необходимо выполнить действия в следующем порядке (и никак иначе):
Получение списка устройств
С помощью функции udev_enumerate_add_match_subsystem и udev_monitor_filter_add_match_subsystem_devtype мы отсеиваем часть нерелевантных нам устройств. При получении указателя на нужный нам hidraw-девайс, нужно проверить, наш ли он:
Если условие выполнено, то мы запускаем в отдельном потоке цикл обработки событий от сенсорного экрана. Цикл считывает данные из /dev/hidraw* и записывает команды в выделенный ему /dev/input/eventX
В документации Linux описано два варианта реализации uinput драйвера для сенсорной панели:
Поскольку реализовывать второй протокол долго и алгоритмически сложно, будем реализовывать первый. Необходимо объявить характеристики устройства, такие как название, шина, идентификатор вендора и продукта, разрешение по осям и допустимые события для устройства.
Поскольку мы работает с multitouch-устройством, то оси у нас соответственно ABS_MT_POSITION_X и ABS_MT_POSITION_Y. После открытия устройства мы заявляем о типах событий:
Читаем в цикле наш порт и в соответствии с разобранным выше протоколом создаем события для uinput. Для каждой нажатой точки требуется событие ABS_MT_POSITION_X, ABS_MT_POSITION_Y и SYN_MT_REPORT. Если нажатий больше нет, то передается SYN_MT_REPORT. В конце каждого пакета (набор точек или событие о том, что их больше нет) необходимо вызвать SYN_REPORT.
Сборка
Драйвер зависит от libsuinput, pthreads, libudev и компилятора C99. Для сборки все это должно присутствовать в сборочном окружении:
Запускаем приложение от имени суперпользователя в фоне:
И проверяем созданное устройство (к моей малине ни клавиатуры, ни мыши подключено не было, поэтому /dev/input/event0):
Устройство функционирует в соответствии со стандартом Linux Kernel.
Существующие проблемы
На данный момент существует две проблемы:
Если найдете ошибки в драйвере/косяки дизайна — буду рад их принять, поскольку это моя первая «серьезная» программа, написанная на С.
Как определить файлы, соответствующие устройству uinput?
2 ответа
Я пытаюсь использовать сенсорный экран с платой разработчика под управлением Android 2.2. У меня есть инструкции производителя, и мне нужно включить процесс uinput, который должен быть виден в Android под /dev/input как uinput. Я проверил это с помощью меню: CONFIG_INPUT_UINPUT: y/m Device Drivers.
Я пытаюсь установить uinput и нашел команду, которую мне нужно запустить ( pip install python-uinput ) за исключением того, что я получаю эту ошибку, когда пытаюсь ее запустить: Cannot fetch index base URL https://pypi.python.org/simple/ Could not find any downloads that satisfy the requirement.
Обратите внимание, что вы можете найти виртуальное устройство по другому пути. В этом случае input19-это мое устройство uinput. Какое устройство соответствует символу?
Вы можете получить информацию о ваших новых устройствах uinput, прочитав kernel сообщений:
Альтернативой является использование libudev для извлечения устройства uinput. Взгляните на следующую ссылку: учебник по libudev
Поэтому, если у вас есть возможность использовать Linux kernel более поздний, чем 3.13, вы можете использовать приведенный выше ioctl для улучшения кода, использующего uinput.
Это лучший способ, который я нашел до сих пор, в сочетании с ответом, приведенным здесь, я бы сделал что-то вроде:
Теперь send_input_to_fd должен быть правильным FD для отправки событий.
Похожие вопросы:
Можно ли создать несколько устройств uinput и если да, то как это сделать? Я хотел бы создать несколько отдельных игровых контроллеров. Спасибо за любую помощь.
Я пытаюсь использовать сенсорный экран с платой разработчика под управлением Android 2.2. У меня есть инструкции производителя, и мне нужно включить процесс uinput, который должен быть виден в.
Я пытаюсь установить uinput и нашел команду, которую мне нужно запустить ( pip install python-uinput ) за исключением того, что я получаю эту ошибку, когда пытаюсь ее запустить: Cannot fetch index.
Я пытаюсь управлять Android, записывая данные в /dev/uinput., например, если я ввожу ‘A’ на своем рабочем столе, коды будут писать что-то в соответствии с key_code в uinput, а Android должен вести.
Я пытаюсь сделать простое приложение CLI для списков задач. Что здесь происходит? Это потому, что я имею в виду переменную, которая находится внутри функции? Я попытался поставить global позади.