Можно ли запрограммировать Android для работы в качестве физической USB-клавиатуры?


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


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

13 71

13 ответов:

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

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

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

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

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

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

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

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

похоже, кто-то, наконец, сделал это, это немного некрасиво - но вот это:

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

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

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

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

.....мы разработали специальный драйвер USB-гаджета в дополнение к существующему USB составной интерфейс на ядре Android Linux с помощью USB-гаджета API для Linux[4]. Структура UGAL помогла нам реализовать простой USB Функциональность драйвера человеческого интерфейса (HID) (т. е. устройство водитель и код склеивания между различными API ядра. Использование предоставленного кода в: "драйверы / usb / гаджет / композитный.c", мы создали наш собственный драйвер гаджета как дополнительный составной интерфейс USB. Этот драйвер эмулирует USB-устройство устройство клавиатуры. Мы также можем имитировать отправку USB-устройства мыши предварительно запрограммированные команды для настольной системы. Поэтому прямолинейный для того чтобы представить как нормальный прибор мыши или клавиатуры УСБ и отправить предопределенную команду незаметно для имитации вредоносных интерактивный активность пользователей. Чтобы проверить эту функциональность, в нашем контролируемом эксперименты, мы посылаем последовательности ключей для выполнения несмертельных операций и показать, как такое манипулируемое устройство может вызвать повреждения в в частности, мы смоделировали USB-клавиатуру Dell (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. Это означает, что вы должны написать некоторый код клея C, который эмулирует способ связи USB-клавиатуры с ПК (=вы должны изучить, как работает протокол USB).

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

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

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

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

  1. мой старый Nokia N95 может использовать его USB, чтобы быть "массовым запоминающим устройством", "медиаплеером", "GSM-модемом" или печатать фотографии.
  2. я могу подключить iPhone к iPad через пассивный адаптер USB-камеры Apple, и они передают изображения.
  3. iPhone может очевидно представить как ряд вещей, например, когда они идут в ДФУ.

Почему это важно?

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

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

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

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

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

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

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

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

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

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

но если у вас есть деятельность, которая отправляет аппаратную клавиатуру, как данные через usb, то почему бы и нет? Думаю, это будет нелегко. В этот момент на форуме usuas сразу же появляется ответ: "почему бы вам не изменить свои планы и ....":)

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

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

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

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

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

старый неправильно ответ:

на мой взгляд, это едва ли возможно.

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

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

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

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

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