2012-10-05 22 views
5

Estoy desarrollando una aplicación para Android en la que necesito conectarme a un dispositivo USB.Escribir controlador USB para Android

He desarrollado una aplicación similar en Windows y he escrito un controlador en c.

Quiero desarrollar un controlador USB para mi aplicación de Android. Quiero saber qué cosas son necesarias para desarrollar el controlador USB para Android.

o

¿Puedo volver a utilizar el código escrito en C usando NDK.

Gracias,

Respuesta

6

En primer lugar, Android es en realidad sólo Linux, por lo que si usted está hablando de "escribir un controlador USB para mi aplicación Android" que más bien debería decir "escribir un controlador USB Linux para su dispositivo específico".

A continuación, tendrá que acceder a su dispositivo de alguna manera. Lo que obtendrá cuando haya escrito el controlador USB para Linux es probablemente algún nodo de archivo en/dev /. Supongo que quiere crear un controlador para un dispositivo USB no estándar (como un mouse/joystick/almacenamiento masivo) para el cual Android no proporciona una buena API de JAVA. En ese caso, tendrá que escribir una biblioteca nativa (probablemente basada en el código c que ya tiene) y compilarla con el NDK. El archivo .so que obtendrá de él se puede empaquetar en su aplicación Android, que luego puede usarlo para hablar con su dispositivo USB.

Así que para resumir: controlador de dispositivo

USB -> crear un módulo del núcleo o incrustar un controlador en el kernel de Linux: esto es Linux USB cosas de programación conductor, sobre las que debería ser capaz de encontrar suficientes guías En la red. Debería poder reutilizar partes de su código c si realmente creó un controlador usb de Windows.

biblioteca contenedora nativa para acceder a su dispositivo (archivo .so o .dll si está acostumbrado a la terminología de Windows) -> cree un proyecto NDK que abra el nodo del dispositivo correcto y lea/escriba correctamente en su dispositivo.

android app -> incluye el archivo .so y accede a sus métodos nativos (c) a través de jni. Puede usar herramientas como javah o swig para generar el código jni a partir de los archivos de cabecera de su biblioteca.

3

La respuesta anterior supone que tiene acceso de administrador a su dispositivo y no es adecuado para una implementación masiva. Desde la versión 12 de api android ha proporcionado una interfaz usb que le permite interactuar con ciertos dispositivos utilizando los canales de control de bajo nivel y los búferes de solicitud de USB.

Hay dos tipos de dispositivos compatibles los dispositivos de acogida USB dispositivos USB (androide) accesorias

anfitrión modo está normalmente sólo soportan bien en tabletas, teléfonos móviles pueden hacer y apoyarla pero su ablity para sostener un modo de servidor es menos y muy dependiente de las demandas de tensión de la deviec en cuestiones

modo de accesorio es extraño que se extiende estándares USB para agregar un intercambio adicional que identifica un accesorio como un accesorio "androide"

Si los modos por encima de una Reutilizable para usted, entonces son, de lejos, la mejor opción para utilizar un controlador c de bajo nivel a menos que tenga control total sobre todos los dispositivos en los que se instalará.

Ambos son apis de Java y se pueden encontrar documentados en el sitio de documentación de google android, bajo usb.

+0

¿Las aplicaciones NDK requieren acceso raíz? –

+1

No, no es así. El código nativo puede desarrollarse desarrollado e implementado sin root, pero el acceso a los recursos propios del sistema, como los dispositivos, requerirá root. Un ejemplo que no sea USB usaría un sshd linux estándar como dropbear, esto es plausible, puedes encontrarlos en Play Store, sin embargo, para ejecutarlos en los puertos standrard necesitarían ejecutarse como root. – Neil

Cuestiones relacionadas