Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Protocolo de accesorios abiertos de Android 1.0

Los accesorios USB de Android deben adherirse al protocolo de accesorios abiertos de Android (AOA), que define cómo un accesorio detecta y configura la comunicación con un dispositivo con Android. Los accesorios deben realizar los siguientes pasos:

  1. Espere y detecte un dispositivo conectado.
  2. Determine la compatibilidad del modo accesorio del dispositivo.
  3. Intente iniciar el dispositivo en modo accesorio (si es necesario).
  4. Si el dispositivo es compatible con AOA, establezca comunicación con el dispositivo.

Las siguientes secciones explican cómo implementar estos pasos.

Espere y detecte dispositivos conectados

Los accesorios deben comprobar continuamente si hay dispositivos conectados con Android. Cuando se conecta un dispositivo, el accesorio debe determinar si el dispositivo admite el modo accesorio.

Determinar la compatibilidad del modo accesorio

Cuando se conecta un dispositivo con Android, puede estar en uno de estos tres estados:

  • Admite el modo de accesorios de Android y ya está en modo de accesorios.
  • Admite el modo de accesorios de Android, pero no está en modo de accesorios.
  • No es compatible con el modo de accesorios de Android.

Durante la conexión inicial, el accesorio debe verificar la versión, el ID del proveedor y el ID del producto del descriptor del dispositivo USB del dispositivo conectado. El ID del proveedor debe coincidir con el ID de Google ( 0x18D1 ). Si el dispositivo ya está en modo accesorio, la ID del producto debe ser 0x2D00 o 0x2D01 y el accesorio puede establecer comunicación con el dispositivo a través de puntos finales de transferencia masiva utilizando su propio protocolo de comunicación (no es necesario iniciar el dispositivo en modo accesorio).

Nota: 0x2D00 está reservado para dispositivos con Android que admiten el modo accesorio. 0x2D01 está reservado para dispositivos que admiten el modo accesorio, así como el protocolo Android Debug Bridge (ADB), que expone una segunda interfaz con dos puntos finales masivos para ADB. Puede utilizar estos puntos finales para depurar la aplicación de accesorios si está simulando el accesorio en una computadora. En general, no utilice esta interfaz a menos que el accesorio implemente un paso a través de ADB en el dispositivo.

Si la versión, el ID del proveedor o el ID del producto en el descriptor del dispositivo USB no coinciden con los valores esperados, el accesorio no puede determinar si el dispositivo es compatible con el modo de accesorio de Android. El accesorio debe intentar iniciar el dispositivo en modo accesorio (que se detalla a continuación) para determinar la compatibilidad del dispositivo.

Punto clave: un accesorio USB debe enviar un encabezado tras el protocolo de enlace inicial. El encabezado contiene el fabricante, el modelo y la versión. Aunque la versión es un campo opcional, si se instala una aplicación de Android que solo coincide con la versión, pero el accesorio no envía una versión, los dispositivos Android que se ejecutan en Android 10 y versiones anteriores se reiniciarán debido a que se lanzó una excepción en el proceso del sistema.

Intente iniciar en modo accesorio

Si la versión, el proveedor y los ID de producto no corresponden a un dispositivo con Android en modo accesorio, el accesorio no puede determinar si el dispositivo admite (pero no está) en modo accesorio o si el dispositivo no admite modo accesorio. Esto puede ocurrir porque los dispositivos que admiten el modo accesorio (pero no están en modo accesorio) informan inicialmente los ID de producto y proveedor del fabricante del dispositivo en lugar de los ID de producto y proveedor de AOA .

El accesorio debe intentar iniciar el dispositivo en modo accesorio para determinar si el dispositivo admite ese modo:

  1. Envíe una solicitud de control 51 ("Obtener protocolo") para determinar si el dispositivo es compatible con el protocolo de accesorios de Android. Si el dispositivo es compatible con el protocolo, devuelve un número distinto de cero que representa la versión del protocolo compatible. La solicitud de control está en el punto final 0 con las siguientes características:
    requestType:    USB_DIR_IN | USB_TYPE_VENDOR
    request:        51
    value:          0
    index:          0
    data:           protocol version number (16 bits little endian sent from the
                    device to the accessory)
    
  2. Si el dispositivo devuelve una versión de protocolo compatible, envíe una solicitud de control con información de cadena de identificación al dispositivo. Esta información permite al dispositivo determinar una aplicación adecuada para el accesorio (o presentar una URL al usuario si no existe una aplicación adecuada). La solicitud de control está en el punto final 0 (para cada ID de cadena) con las siguientes características:
    requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
    request:        52
    value:          0
    index:          string ID
    data            zero terminated UTF8 string sent from accessory to device
    

    Se admiten los siguientes ID de cadena, con un tamaño máximo de 256 bytes para cada cadena (debe terminar en cero con \0 ).

    manufacturer name:  0
    model name:         1
    description:        2
    version:            3
    URI:                4
    serial number:      5
    
  3. Envíe una solicitud de control para pedirle al dispositivo que se inicie en modo accesorio. La solicitud de control está en el punto final 0 con las siguientes características:
    requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
    request:        53
    value:          0
    index:          0
    data:           none
    

Después de completar estos pasos, el accesorio debe esperar a que el dispositivo USB conectado se vuelva a introducir en el bus en modo accesorio y luego volver a enumerar los dispositivos conectados. El algoritmo determina la compatibilidad con el modo accesorio al verificar los ID de proveedor y producto, que deben ser correctos (por ejemplo, corresponder a los ID de producto y proveedor de Google en lugar de a los ID del fabricante del dispositivo) si el dispositivo cambió correctamente al modo de accesorio. Si los ID y la versión son correctos, el accesorio se mueve para establecer comunicación con el dispositivo .

Nota: AOA no admite actualmente conexiones AOA y MTP simultáneas. Para cambiar de AOA a MTP, el accesorio debe primero desconectar el dispositivo USB (ya sea físicamente o de una manera equivalente eléctricamente) y luego volver a conectarse usando MTP.

Si falla algún paso, el accesorio determina que el dispositivo no es compatible con el modo de accesorio de Android y espera a que se conecte el siguiente dispositivo.

Establecer comunicación con el dispositivo

Si el accesorio detecta un dispositivo con Android en modo accesorio, el accesorio puede consultar la interfaz del dispositivo y los descriptores de los puntos finales para obtener los puntos finales masivos para comunicarse con el dispositivo.

La cantidad de interfaces y puntos finales masivos depende del ID del producto. Un dispositivo con Android con un ID de producto de:

  • 0x2D00 tiene una interfaz con dos puntos finales masivos para la comunicación de entrada y salida.
  • 0x2D01 tiene dos interfaces con dos puntos finales masivos cada uno para la comunicación de entrada y salida. La primera interfaz maneja la comunicación estándar y la segunda interfaz maneja la comunicación ADB. Para usar una interfaz, ubique los primeros puntos finales de entrada y salida masivos, establezca la configuración del dispositivo en un valor de 1 con una solicitud de dispositivo SET_CONFIGURATION ( 0x09 ), luego 0x09 usando los puntos finales.