recuperar - ¿Es posible programar Android para que funcione como un teclado USB físico?
teclado android (13)
Lo que realmente quiero saber es si se trata de un problema de hardware o de software. ¿Podría conectar mi teléfono Android a una computadora a través de USB y hacer que actúe como un teclado de hardware. No quiero instalar nada en la computadora, quiero que Android se comporte como el hardware estándar.
Editar: Aclaración Quiero escribir un programa / biblioteca para Android que permita al dispositivo emular completamente un teclado común, para que el sistema operativo lo informe como un dispositivo de teclado estándar, y funcionaría en el BIOS o en cualquier otro lugar que un teclado trabajos.
Algunos otros descubrieron que esto está mal. Mientras tanto, comparto su opinión. Lo siento.
Respuesta incorrecta MALA:
En mi opinión esto es apenas posible.
Su computadora identifica cualquier dispositivo USB con el descriptor de dispositivo USB o el descriptor de interfaz usb. Para poder usar su dispositivo Android como teclado, debería cambiarlos. En realidad, creo que estos se guardan en una ROM en el dispositivo, por lo que tendría que cambiar el hardware. El dispositivo necesita identificarse con el host incluso si solo se está cargando en estado desactivado (tiene que decirle al host del usb acerca del consumo de energía, de lo contrario solo unos pocos mA máximos). Para mí, esto apunta en la dirección, que tendrías que cambiar el hardware
La forma más fácil sería ensamblar un adaptador que contenga un chip de host usb con un μC que convierta los datos recibidos (que aún tenía que enviar a través de usb) a ps / 2 o señales de usb-client que envíe a la computadora.
En mi opinión, la forma más fácil sería: compra uno de estos teclados que puedas enrollar y ponlos también en tu bolsa.
Esto es posible, sin necesidad de controladores adicionales.
Puede emular el teclado USB de su PC con un pequeño dispositivo de tamaño USB y luego usar su dispositivo Android para enviar datos de teclado (y / o mouse) a través de Bluetooth.
Eche un vistazo al video descriptivo en la campaña de Indiegogo: http://igg.me/at/hiDBLUE/x/3400885
Por cierto: los documentos técnicos del producto están disponibles aquí: http://www.flyfish-tech.com/hiDBLUE
Estoy un poco tarde para comentar en este blog, pero podría ser útil para otras personas.
Puede hacer que su teléfono Android funcione como el teclado, el mouse, la cámara, el sistema de transmisión de sonido y el dispositivo de anclaje. En resumen, el gadget usb que veas en el mercado y hasta que el hardware no te limite. Tal como la velocidad o la interfaz del gadget no disponible.
El dispositivo USB es de dos tipos, host y gadget. Por lo tanto, el dispositivo gadget actúa como un cliente y generalmente tiene una interfaz USB en la mayoría de los teléfonos. Por lo tanto, al final del gadget, puedes hacer que tu teléfono se comporte como un dispositivo diferente al cambiar entre diferentes configuraciones (ya lo estás haciendo cuando ingresas a la configuración de usb y haces que tu dispositivo sea de almacenamiento masivo o cualquier otra cosa).
Pero para hacer todo esto tienes que modificar el kernel de Android. Si eres un desarrollador de dispositivos Android, puedes hacerlo.
He modificado kernel en Nexus 7 para que funcione como el teclado y el mouse HID estándar, sin perder la funcionalidad MTP / ADB / otro USB.
Puede usar la utilidad de línea de comandos usb-gadget-test para enviar pulsaciones de teclas y movimientos del mouse a su PC. Deseo crear una aplicación de administración remota más tarde, que enviará eventos clave y recibirá videos de la cámara.
Parche, binarios e instrucciones del kernel: https://github.com/pelya/android-keyboard-gadget
Editar: publiqué una aplicación adecuada para Google Play . Si su Nexus 7 está rooteado, puede actualizar el núcleo directamente desde la aplicación y enviar las pulsaciones de tecla.
La única forma en que podría ver que esto es posible es si tú:
- modificó el firmware de Android para darle acceso a nivel usb a un nivel lo suficientemente bajo como para que pueda operar utilizando el protocolo necesario
o
- Hizo una especie de convertidor de nivel de hardware especial que conectó al dispositivo.
(Así que supongo que, dependiendo de la cantidad de trabajo que desee hacer, podría ser un problema de hardware o software).
La mayoría de los teclados USB necesitan controladores para ejecutarse. Cualquier funcionalidad de teclado (botones no estándar) más allá de las capacidades de los controladores HID estándar necesitará instalar algún software en la computadora.
Dicho esto, es posible utilizar las capacidades USB de Android, así como escribir un controlador personalizado si el HID predeterminado no es suficiente, para lograr su objetivo. Es probable que sea una empresa muy no trivial.
Editar: creo que KristopherMicinski tiene razón en que el nivel de control que obtienes con la API USB de Android es inadecuado para este propósito. Sus dos soluciones de modificación del firmware para comunicarse utilizando estándares HID, así como un intermediario de hardware que traduce desde el protocolo Android Access a HID me parecen válidas. Si la instalación de controladores en la computadora está fuera de discusión, estas pueden ser las únicas dos opciones.
Sin embargo, si está dispuesto a instalar un controlador para este comportamiento, debería ser posible escribir un controlador personalizado que pueda manejar el protocolo USB de Android y traducirlo correctamente a las llamadas / interrupciones correctas para la funcionalidad del teclado. Si la memoria sirve, cada teclado periférico que he usado en los últimos 10 años ha necesitado instalar un controlador para una funcionalidad completa, por lo que esto puede no considerarse un comportamiento no estándar. (Lo único que ocurre es que este enfoque solo permitirá que el dispositivo funcione como un teclado dentro de las ventanas, no durante el proceso de arranque)
No te rindas. Linux puede hacerlo con el hardware adecuado, a través de "Gadgets USB". Y dando los siguientes hechos:
- Mi viejo Nokia N95 podría usar su USB para ser un "Dispositivo de almacenamiento masivo", un "Reproductor multimedia", "un módem GSM" o para imprimir fotos.
- Puedo conectar un iPhone a un iPad mediante un adaptador pasivo Apple USB-Camera y transfieren imágenes.
- iPhone puede presentarse obvio como una cantidad de cosas, por ejemplo, cuando ingresan en DFU.
¿Por qué todo esto es relevante?
Porque si estuviera escribiendo un teléfono con Linux , sé lo que haría y cómo lo haría. Y la respuesta implicaría dispositivos USB.
Leyendo uno de los enlaces que se publicó aquí,
Es el kernel de Linux, el código está en drivers / usb / gadget / en el árbol kernel.org si está interesado. Android tiene algunos parches de gadgets específicos que no están en la línea principal, pero no es demasiado. Puedes ver todo esto simplemente revisando su kernel git tree, sin necesidad de molestar a sus desarrolladores.
Supongo que tendrías una oportunidad, pero implicaría recompilar el kernel / sistema operativo de Android, o al menos tener un entorno de compilación en el que pudieras / puedas / reconstruir el kernel si así lo deseas.
Por cierto, tengo un Atmel NGW100mkII, que admite gadgets USB, pero no se envía con el módulo HID. Y tendré que hacer lo anterior y más.
Parece que alguien finalmente lo hizo, es un poco feo, pero aquí está:
http://forum.xda-developers.com/showthread.php?t=1871281
Implica recompilar kernel, y un poco de edición, y pierde una funcionalidad parcial (¿el MDC?) ... pero ya está hecho.
Sin embargo, personalmente, ahora que veo el "verdadero costo", probablemente armaría un pequeño adaptador en un Teency o algo así, suponiendo que Android pueda hablar con dispositivos serie a través de USB. Pero eso se basa en el hecho de que tengo un Samsung, y necesitaría un cable especial para hacer una conexión USB de todos modos, sin dolor extra para tener un pequeño dispositivo en el extremo, si tengo que llevar el maldito cable de todos modos.
Su Android ya se identifica con un VID / PID cuando está conectado a un host. Ya tiene una interfaz para Mass Storage. Tendría que hackear el controlador en un nivel bajo para admitir una segunda interfaz para 03:01 HID. Entonces solo sería cuestión de presionar códigos de scan para el controlador modificado. Esto no sería simple, pero sería un truco perfecto. Un uso sería escribir contraseñas largas aleatorias para inicios de sesión.
Tengo algo de experiencia aquí como usuario. La solución más obvia es a través de tcp / ip a través de un modelo cliente / servidor. Muchas de las herramientas como airkeyboard (http://www.freenew.net/iPhone/air-keyboard-111/171415.htm) utilizan este método para crear un reemplazo de teclado / mouse usando un sistema operativo de teléfono inteligente. Tenga en cuenta que hay algunos problemas de seguridad que se ponen de manifiesto en la implementación. Por ejemplo, debe iniciar sesión para utilizar los componentes del servidor.
Otras herramientas multiplataforma (es decir, windows / mac que controlan otra instancia de windows / mac) utilizan un enfoque similar. Ver sinergia: http://synergy-foss.org/
Tienes que establecer algún tipo de conexión para hacer ese android-out-of-the-box, como a través de tcp / ip y adb, así que no sin instalar al menos adb y un oyente en la computadora.
Pero si tiene una actividad que envía el teclado de hardware como datos a través de un usb, ¿por qué no? No será fácil, supongo. En este punto, la respuesta al foro de usuas viene de inmediato: "¿Por qué no cambias tus planes y ...?" :)
Creo que puedes hacerlo si tienes un dispositivo rooteado con un Android reciente. Por ejemplo, el Asus Eee Pad Transformer con Android 4 tiene las bibliotecas /system/lib/libusb.so
y /system/lib/libusbhost.so
, por lo que puede escribir una aplicación Java que las llame usando JNI para emular un teclado USB.Esto significa que debe escribir un código de cola C que emule la forma en que un teclado USB se está comunicando con una PC (= debe estudiar la forma en que funciona el protocolo USB).
Digo "rooteado", porque generalmente se necesitan algunos permisos para usar estas bibliotecas.
Editar: Lo anterior es cierto cuando se programa un dispositivo Android para actuar como un host USB, en su caso debe ser un "gadget". No sé qué parte de la funcionalidad del dispositivo Linux está contenida en el kernel de su dispositivo Android. Mira this para una pregunta similar.
Parece que alguien lo ha hecho parcheando el kernel. Acabo de encontrar un documento titulado "Aprovechar la conectividad USB de teléfonos inteligentes para divertirse y obtener ganancias" por Angelos Stavrou, Zhaohui Wang, Departamento de informática, Universidad George Mason, Fairfax, VA. (disponible libremente buscando en Google el título anterior). Aquí los dos investigadores están investigando la posibilidad de que un dispositivo android comprometido controle la PC conectada haciendo que el dispositivo Android se presente a sí mismo como un dispositivo HID (teclado). Como una prueba de concepto, parece que han parcheado con éxito un núcleo haciendo exactamente lo que quieres. No dieron los pasos detallados, pero de todos modos solo cité lo que dijeron que habían hecho:
..... desarrollamos un controlador de gadget USB especial además de la interfaz compuesta de USB existente en el kernel de Android Linux utilizando la API de gadget USB para Linux [4]. El marco UGAL nos ayudó a implementar una funcionalidad simple de controlador de interfaz humana (HID) USB (es decir, controlador de dispositivo) y el código de pegamento entre las diversas API de kernel. Usando el código provisto en: "drivers / usb / gadget / composite.c", creamos nuestro propio controlador de gadget como una interfaz USB compuesta adicional. Este controlador simula un dispositivo de teclado USB. También podemos simular un dispositivo de mouse USB que envía un comando de entrada preprogramado al sistema de escritorio. Por lo tanto, es sencillo posar como un mouse o dispositivo de teclado USB normal y enviar sigilosamente un comando predefinido para simular actividades de usuario interactivas maliciosas. Para verificar esta funcionalidad, en nuestros experimentos controlados, enviamos secuencias de códigos de tecla para realizar operaciones no fatales y mostramos cómo dicho dispositivo manipulado puede causar daños. En particular, simulamos un teclado USB de Dell (vendorID = 413C, productID = 2105) enviando " CTRL + ESC "combinación de teclas" y "U" y "Enter" secuencia de teclas para reiniciar la máquina. Tenga en cuenta que esto solo requiere conexión USB y puede obtener el privilegio de "usuario actual" en el sistema de escritorio. Con el exploit local o remoto adicional enviado como carga útil, el malware puede escalar el privilegio y obtener acceso completo al sistema de escritorio.