2011-05-09 31 views
5

Desde hace un año, Is there a way to communicate with USB devices on Android? esto no parecía un requisito común, pero las tabletas han evolucionado, y con suerte, el sistema operativo también lo ha hecho.
Necesito operar una simple tarjeta de retransmisión USB desde mi tableta Curtis LT8025, actualmente ejecutando 2.1 parches.
También soy un recién llegado tanto a Android como a Java, ¡por lo que estoy relativamente desorientado!
No hay necesidad de comunicación bidireccional, solo un simple comando en serie al dispositivo.¿Cómo comunicarse con un dispositivo USB desde la tableta Android?

¿Alguna sugerencia?

Gracias!
Dave

+1

El ADK fue lanzado unos días después de que usted lo haya preguntado - http://developer.android.com/guide/topics/usb/adk.html –

Respuesta

2

Lamentablemente, actualmente no existe una API estándar para lograr la comunicación por cable con dispositivos Android. Me enfrentaba a un problema similar hace un tiempo (ver Android: Communicating with a USB device which acts as host).

Pude implementar con éxito la solución proporcionada por CommonsWare. Deje un comentario si necesita más ayuda con respecto a esto y puedo proporcionar detalles.

  • Editar (más detalles) -

Básicamente, lo que redujo a dos soluciones posibles para este problema:

  1. ninguna modificación del propio fuente de Android para incluir controladores personalizados para cualquier propósito necesita e instala esto en su tableta. Como se basa principalmente en Linux, si desarrolla los controladores para Linux, lo mismo se puede usar en Android con una pequeña modificación. Esta solución es más fácil de desarrollar, pero no es comercial si no proporciona la tableta/teléfono usted mismo.

  2. Haga que su dispositivo USB actúe como un host e implemente el controlador/conjunto de comandos de ADB en su dispositivo. Cuando está conectado, puede emitir "adb forward" para reenviar puertos tcp para que pueda interactuar con sus aplicaciones de Android y tener comunicación bidireccional entre el dispositivo y la aplicación.

Utilicé el segundo método y funciona sin problemas. Pero es solo práctico si está haciendo dispositivos host USB. para los esclavos USB, el primer método es la única forma de reconocimiento.

+0

@Vayu - ¡sí, por favor! Agradecería cualquier información que pueda ofrecer. La tableta tiene un concentrador USB (y Ethernet) extraíble. Lo uso para una unidad flash, así que, presumiblemente, hay soporte para el nivel del controlador, si puedo localizarlo. Dave – DBell

+1

Copie /proc/config.gz del dispositivo y gzip -d, luego mire y vea qué controladores de dispositivo (si los hay) más allá del almacenamiento masivo se proporcionan para ir con la capacidad de host USB de la tableta. También busque en/lib/modules/whatever. Para un dispositivo que no se admita allí, deberá compilar un controlador, lo que es plausible si tiene orígenes de raíz y kernel. Si la tableta es compatible con teclados usb, y usted tiene la raíz, ¿podría hacer algo pretendiendo ser un teclado y luego hablar de SPI por bit-golpeando los LED del teclado, y así evitar la compilación de un controlador? –

+0

@chris - ¿Es posible hablar directamente con un puerto \ dev? Mi tableta implementa \ usb1 \ usb2 \ usbdev1.1 \ usbdev1.3 y \ usbdev2.1 – DBell

2

Si está utilizando un dispositivo serie y tiene la capacidad de hablar con él a través de una serie nativa, es posible que desee considerar IOIO (consulte http://ytai-mer.blogspot.com/2011/04/meet-ioio-io-for-android.html para obtener más información).

+1

Parecen estar usando el segundo método que mencioné. Buena idea; empaquetar un módulo de host con ADB incrustado. Se ve bien pulido. Muy excelente si no desea incluir su propio módulo de host USB. – Vaayu

0

Estoy construyendo un sistema personalizado de Android. Conecté varios dispositivos en el USB. Busqué conectar un dispositivo en el puerto OTG, el que generalmente sale de una tableta en la que usa ADB. Me di por vencido. Esto es una pesadilla. No creo que puedas usar ADB en el USB OTG que actualmente es un dispositivo y esperar poder usar otro dispositivo como un convertidor de USB a serie. Eso significa que pierde toda la cadena de herramientas de ADB para la depuración cuando desea usar el puerto como host. Además de eso, los controladores USB OTG que tienes para tu tableta probablemente no fueron muy probados en el modo de host ya que no se usan realmente de esa manera. Así que muchos dolores de cabeza.

La manera simple que encontré fue usar el segundo puerto USB de la CPU. Este es un puerto HOST simple (lamentablemente limitado a 12 Mbit/s). Lamentablemente, no sé si hay alguna tableta con 2 puertos USB disponibles desde el exterior (un OTG y un host).

Si obtiene una configuración con dos puertos USB (un HOST), entonces es posible compilar como un módulo (drivername.ko), un conversor usb a serial. Hay varios chipset soportados en el árbol fuente del kernel y ya usé algunos de ellos y funciona.

Espero que este poco de información sea útil.

Cuestiones relacionadas