Можно ли запрограммировать Android на физическую клавиатуру USB?

Я действительно хочу знать, является ли это проблемой аппаратного обеспечения или проблемой программного обеспечения. Могу ли я подключить свой телефон Android к компьютеру через USB и использовать его в качестве аппаратной клавиатуры. Я не хочу ничего устанавливать на компьютере, я хочу, чтобы андроид вел себя как стандартное оборудование.


Редактирование: Разъяснение Я хочу написать программу / библиотеку для Android, которая позволяет устройству полностью эмулировать обычную клавиатуру, чтобы операционная система сообщала об этом как стандартном клавиатурном устройстве, и она будет работать в BIOS или где-нибудь еще, что клавиатура работает.

Solutions Collecting From Web of "Можно ли запрограммировать Android на физическую клавиатуру USB?"

Я модифицировал ядро ​​на Nexus 7, чтобы действовать как стандартная клавиатура и мышь HID, не теряя при этом функции MTP / ADB / другого USB.

Вы можете использовать утилиту командной строки usb-gadget-test для отправки нажатий клавиш и движений мыши на ваш компьютер. Я хочу позже создать приложение удаленного администратора, которое будет отправлять ключевые события и получать видео с камеры.

Патч ядра, двоичные файлы и инструкции: https://github.com/pelya/android-keyboard-gadget

Изменить: я опубликовал подходящее приложение для Google Play , если ваш Nexus 7 укоренен, вы можете запускать ядро ​​прямо из приложения и отправлять с ним клавиши.

Для большинства USB-клавиатур нужны драйверы. Любые функциональные возможности клавиатуры (нестандартные кнопки), выходящие за пределы возможностей стандартных драйверов HID , должны будут установить на компьютер некоторое программное обеспечение.

При этом может быть возможно использовать возможности Android для Android, а также написать пользовательский драйвер, если по умолчанию HID недостаточно для достижения вашей цели. Это, вероятно, очень нетривиальное мероприятие.

Редактировать: Я думаю, что Кристофер Мичинский прав, что уровень контроля, который вы получаете с Android Android API для Android, для этого неадекватен. Его два решения по модификации прошивки для связи с использованием HID-стандартов, а также аппаратный посредник, который переводится с протокола Android Accessory на HID, кажутся мне действительными. Если установка драйверов на компьютере не может быть решена, это могут быть только два варианта.

Однако, если вы открыты для установки драйвера для этого поведения, должно быть возможно написать собственный драйвер, который может обрабатывать протокол Android USB, и правильно перевести на правильные вызовы / прерывания для функциональности клавиатуры. Если память используется, каждая периферийная клавиатура, которую я использовал за последние 10 лет, должна была установить драйвер для полной функциональности, поэтому это не может считаться нестандартным поведением. (Хотя происходит только, что этот подход позволит только устройству функционировать как клавиатура внутри окон, а не во время процесса загрузки)

Похоже, что кто-то, наконец, сделал это, он немного уродливый, но вот он:

http://forum.xda-developers.com/showthread.php?t=1871281

Это связано с перекомпиляцией ядра и небольшим редактированием, и вы теряете частичную функциональность (MDC?) .. но это сделано.

Лично, однако, теперь, когда я вижу «истинную стоимость», я бы, вероятно, собрал небольшой адаптер на мероприятии или что-то в этом роде – предположив, что Android может разговаривать с последовательными устройствами через USB. Но это связано с тем, что у меня есть samsung, и в любом случае для подключения USB-соединения потребуется специальный кабель, без дополнительной боли, чтобы иметь небольшое устройство на конце, если я вообще должен носить проклятый кабель.

Кажется, кто-то сделал это, исправляя ядро. Я только что наткнулся на бумагу под названием «Использование смартфонов для подключения USB для удовольствия и прибыли» Анджело Ставру, Чжаохуй Ван, факультет компьютерных наук Университета Джорджа Мейсона, Fairfax, VA. (Доступный свободно путем googling вышеуказанного названия). Здесь два исследователя исследуют возможность взломанного Android-устройства, управляющего подключенным компьютером, имея устройство Android, представляющее собой устройство HID (клавиатура). Как доказательство концепции, кажется, что они успешно исправили ядро, делая именно то, что вы хотите. Они не представили подробных шагов, но в любом случае я просто цитирую, что они сказали, что они сделали:

….. мы разработали специальный USB-драйвер гаджета в дополнение к существующему составному интерфейсу USB на ядре Android Linux с помощью USB-интерфейса Gadget API для Linux [4]. Основа UGAL помогла нам реализовать простую функциональность USB Human Interface Driver (HID) (например, драйвер устройства) и код клея между различными API-интерфейсами ядра. Используя код, приведенный в разделе «drivers / usb / gadget / composite.c», мы создали собственный драйвер гаджета в качестве дополнительного композитного интерфейса USB. Этот драйвер имитирует USB-клавиатуру. Мы также можем имитировать USB-мышь, отправляющую запрограммированную входную команду на настольную систему. Таким образом, просто представить себя как обычное USB-мышь или клавиатурное устройство и незаметно отправлять предопределенные команды для имитации вредоносных интерактивных действий пользователя. Чтобы проверить эту функциональность, в наших контролируемых экспериментах мы отправляем последовательности кодовых последовательностей для выполнения нефатальных операций и показываем, как такое манипулируемое устройство может нанести ущерб. В частности, мы моделировали клавиатуру Dell USB (vendorID = 413C, productID = 2105) CTRL + ESC "и" U "и" Enter "для перезагрузки устройства. Обратите внимание, что для этого требуется только подключение USB и может получить привилегии «текущего пользователя» на настольной системе. С дополнительным локальным или удаленным эксплойтом, отправленным как полезная нагрузка, вредоносное ПО может повысить привилегию и получить полный доступ к настольной системе.

Единственный способ, которым я мог видеть, что это возможно, – это если вы:

  • Модифицировал прошивку Android, чтобы предоставить вам уровень доступа на уровне usb на достаточно низком уровне, который вы могли бы использовать, используя необходимый протокол

или

  • Сделал какой-то специальный аппаратный конвертер уровня, который вы подключили к устройству.

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

Я считаю, что вы можете это сделать, если у вас есть внедренное устройство с недавним Android. Например, Asus Eee Pad Transformer с Android 4 имеет библиотеки /system/lib/libusb.so и /system/lib/libusbhost.so , поэтому вы можете написать приложение Java, которое вызывает их с помощью JNI для эмуляции USB-клавиатуры. Это означает, что вы должны написать некоторый код Cue, который эмулирует способ связи USB-клавиатуры с ПК (= вы должны изучить способ работы протокола USB).

Я говорю «root», потому что для использования этих библиотек обычно необходимы некоторые разрешения.

Edit: Вышеупомянутое верно при программировании Android-устройства в качестве USB-хоста, в вашем случае вам нужно быть «гаджетом». Я не знаю, сколько функций гаджета Linux содержится в ядре вашего Android-устройства. См. Это для аналогичного вопроса.

Ваш Android уже идентифицируется с помощью VID / PID при подключении к хосту. У него уже есть интерфейс для Mass Storage. Вам нужно будет взломать драйвер на низком уровне для поддержки второго интерфейса для 03:01 HID. Тогда это будет просто вопрос подталкивания scancodes к модифицированному драйверу. Это было бы непросто, но это был бы аккуратный взлом. Одно из них – для ввода длинных случайных паролей для входа в систему.

Не сдавайся. Linux может сделать это с помощью правильного оборудования через «USB-гаджеты». И давая следующие факты:

  1. Мой старый Nokia N95 может использовать USB-устройство как «Mass Storage Device», «Media Player», «GSM-модем» или для печати фотографий.
  2. Я могу подключить iPhone к iPad через пассивный адаптер Apple USB-Camera, и они передают фотографии.
  3. IPhone может показаться очевидным как целое, например, когда они входят в DFU.

Почему все это имеет значение?

Потому что, если я пишу линукс-телефон, я знаю, что он будет делать, и как он это сделает. И ответ будет включать USB-гаджеты.

Читая одну из ссылок, которые были размещены здесь,

Это ядро ​​Linux, код находится в драйверах / usb / gadget / в дереве kernel.org, если вам интересно. Android имеет несколько конкретных гаджетов, которые не находятся в магистрали, но это не так много. Вы можете увидеть все это, просто проверив свое дерево git ядра, не нужно беспокоить их разработчиков.

Я бы предположил, что у вас есть шанс на это – но это потребует повторной компиляции ядра / операционной системы Android или, по крайней мере, наличия среды сборки, в которой вы / можете / перестроить ядро, если хотите.

Кстати, у меня есть Atmel NGW100mkII, который поддерживает USB-гаджеты, но не поставляется с HID-модулем. И мне придется делать это и многое другое.

Это возможно, без каких-либо дополнительных драйверов.

Вы можете эмулировать USB-клавиатуру ПК с помощью небольшого USB-устройства, а затем использовать Android-устройство для отправки данных с клавиатуры (и / или мыши) по Bluetooth.

Взгляните на описательное видео в кампании Indiegogo: http://igg.me/at/hiDBLUE/x/3400885

BTW: технические документы продукта доступны здесь: http://www.flyfish-tech.com/hiDBLUE

Некоторые другие выяснили, что это неправильно. Тем временем я разделяю их мнение. Прости.

Старый НЕПРАВИЛЬНЫЙ ответ:

По-моему, это едва возможно.

Компьютер идентифицирует любое устройство USB с дескриптором устройства USB или дескриптором интерфейса USB. Чтобы иметь возможность использовать ваше устройство Android в качестве клавиатуры, вам придется изменить их. На самом деле, я думаю, что они сохранены на ПЗУ в устройстве, поэтому вам придется менять оборудование. Устройство должно идентифицировать себя с хостом, даже если его единственная зарядка в выключенном состоянии (должна сказать usb host о потреблении энергии, в противном случае – всего несколько мА макс). Для меня это указывает на то, что вам придется менять оборудование

«Самый простой» способ можно было бы собрать адаптер, содержащий чип хоста usb с μC, который преобразует полученные данные (которые вам все еще нужно было отправлять через usb) на сигналы ps / 2 или usb-client, которые вы отправляете на компьютер.

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

Вы должны установить какое-то соединение, чтобы сделать этот андроид-вне коробки, например, через tcp / ip и adb, поэтому не нужно устанавливать по крайней мере adb и прослушиватель на компьютере.

Но если у вас есть активность, которая отправляет аппаратную клавиатуру, как данные через usb, то почему бы и нет? Не будет легко, я думаю. На этом этапе ответ на усус-форум приходит сразу: «Почему бы вам не изменить свои планы и …» 🙂

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

Вы можете заставить свой Android-телефон работать как клавиатура, мышь, камера, звуковая потоковая система, модемное устройство. Короче говоря, какой-нибудь USB-гаджет, который вы видите на рынке, и до тех пор, пока оборудование не ограничит вас. Такие, как скорость или интерфейс гаджета, недоступны.

Устройство USB имеет два типа, хост и гаджет. Таким образом устройство гаджета действует как клиент и обычно имеет интерфейс usb otg на большинстве телефонов. Таким образом, в конце гаджета вы можете заставить свой телефон вести себя как другое устройство, переключаясь между различными настройками (вы уже делаете это, когда вы входите в настройки usb и делаете свое устройство как массовое хранилище или что-то еще).

Но для выполнения всех этих действий вам необходимо изменить ядро ​​Android. Если вы разработчик устройств Android, вы можете это точно сделать.

У меня есть опыт работы здесь как пользователь. Наиболее очевидным решением является tcp / ip через модель клиент / сервер. Многие из инструментов, таких как airkeyboard (http://www.freenew.net/iPhone/air-keyboard-111/171415.htm), используют этот метод для создания замены клавиатуры / мыши с помощью смартфона os. Обратите внимание, что есть некоторые проблемы безопасности, которые становятся очевидными в реализации. Например, вы должны войти в систему, чтобы использовать серверные компоненты.

Другие кросс-платформенные инструменты (например, windows / mac, управляющие другим экземпляром Windows / Mac) используют аналогичный подход. См. Синергию: http://synergy-foss.org/