Comunicarse con un dispositivo a través del puerto USB, ¿es posible?

Soy nuevo en la plataforma Android y me gustaría saber si es posible que un dispositivo Android (aplicación) se comunique con el sistema Linux/XP a través del puerto USB para una comunicación bidireccional. Si es así, ¿cómo se puede hacer?

Lo que quiero lograr: tengo una PC con Linux y quiero escribir una pequeña aplicación en mi dispositivo Android para enviar y recibir datos desde la PC a través de USB.

Esto depende un poco de lo que entiendas por "comunicar". ¿Está buscando dispositivos que admitan el modo de host USB, o simplemente está buscando enviar paquetes de datos en ambos sentidos a través del cable? Esto último se puede lograr con ADB y reenvío de puertos

Respuestas (3)

Esto no es posible en la mayoría de los dispositivos, ya que no admiten el modo USB Host. Algunos dispositivos tienen compatibilidad con USB OTG o un puerto USB Host, pero estos son dispositivos relativamente raros hasta ahora. En teoría, podría escribir una aplicación en Win/Linux para acceder al teléfono a través de USB, pero no al revés.

Si bien esto es generalmente correcto desde el punto de vista del host USB, solo quiero señalar que no necesariamente necesita el modo host si simplemente desea enviar paquetes de datos a través de un cable USB. Puede usar una configuración de cliente/servidor con una aplicación de escritorio y el reenvío de puertos de ADB para enviar paquetes de datos en ambos sentidos. Básicamente, así es como funciona PDANet.
Sí, por eso mencioné la posibilidad de escribir una aplicación para el escritorio. Solo olvidé mencionar la arquitectura cliente/servidor. Buena aclaración.

Los dispositivos Android como hosts USB han sido un punto de interés para todos los desarrolladores. Hasta el sistema operativo HoneyComb de Android (OS 3.0), no ha habido señales de posibilidad.
Sin embargo, la última API de HoneyComb (OS 3.1) parece brindar posibilidades para admitir dispositivos Android que se utilizan como hosts USB. Se ha incluido una API para el mismo.
Por lo tanto, aunque a partir de ahora muy pocos dispositivos Android admiten la capacidad de USB Host, será posible en todos los próximos dispositivos.

1) 3.1 es Honeycomb, no ICS. Ya se ha implementado en muchos dispositivos y, de hecho, varios ya están en 3.2. 2) Varios dispositivos Honeycomb son totalmente compatibles con el modo de host USB, incluido el Xoom. Solo necesita un adaptador OTG si el dispositivo no tiene un puerto USB de tamaño completo.
+1 a eso... Probablemente me refería a documentación anterior. Pero sí, los nuevos dispositivos admiten la capacidad de host USB. Gracias, @eldarerathis !

Android no expone directamente el modo de dispositivo USB a las aplicaciones, pero las aplicaciones pueden transferir datos indirectamente a través de IP cuando se usa la conexión. Esto a veces requiere un software/controlador adicional personalizado 'similar a un proxy' en el host para desenvolver los datos. Por ejemplo, para interpretar ipMIDI como MIDI en Linux, se necesita multimidicast/QmidiNet.

Sin embargo, el modo host ha estado expuesto desde 3.1 (en android.hardware.usb).

Con suerte, Google eventualmente admitirá el modo de dispositivo (suspiro). Vea estos problemas en el proyecto Android (¡y márquelos si le interesan!):
https://code.google.com/p/android/issues/detail?id=10176
https://code.google.com/p/ android/problemas/detalle?id=30198