Android Open Accessory 1.0

Los accesorios USB de Android deben cumplir con el Android Open Accessory (AOA) protocolo, que define la manera en que un accesorio detecta y configura la comunicación con un dispositivo con Android. Los accesorios deben completar los siguientes pasos:

  1. Espera y detecta un dispositivo conectado.
  2. Determina la compatibilidad del dispositivo con el modo de accesorio.
  3. Intenta iniciar el dispositivo en modo de accesorio (si es necesario).
  4. Si el dispositivo admite AOA, establece la comunicación con él.

En las siguientes secciones, se explica cómo implementar estos pasos.

Esperar y detectar conexiones dispositivos

Los accesorios deben verificar continuamente que no haya dispositivos Android conectados. Cuando se conecta un dispositivo, el accesorio debe determinar si el dispositivo admite el modo de accesorio.

Cómo determinar la compatibilidad con el modo de accesorio

Nota: No se requiere la depuración por USB para conectar accesorios, Es posible que se requiera ADB durante el desarrollo. Para obtener más información, consulta Consideraciones sobre la depuración

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

  • Admite el modo de accesorio de Android y ya se encuentra en este modo.
  • Admite el modo de accesorio de Android, pero no está en modo de accesorio.
  • No es compatible con el modo de accesorio 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 de dispositivo USB del dispositivo conectado. El ID del proveedor debe coincidir con el ID de Google (0x18D1). Si el dispositivo ya está en modo de accesorio, el ID del producto debe ser 0x2D00 o 0x2D01 y el accesorio pueden establecer comunicación con el dispositivo a través de extremos de transferencia masiva usando sus propios medios protocolo (no es necesario que el dispositivo se inicie en el modo de accesorio).

Nota: 0x2D00 está reservado para Dispositivos con Android que admiten el modo de accesorio 0x2D01 es reservado para dispositivos que admiten el modo de accesorio y la función de Android Debug Protocolo puente (ADB), que expone una segunda interfaz con dos extremos masivos para ADB. Puedes usar estos extremos para depurar la aplicación auxiliar en los siguientes casos: que estás simulando el accesorio en una computadora. En general, no debes utilizar este a menos que el accesorio implemente una transferencia a ADB en el dispositivo.

Si la versión, el ID del proveedor o el ID del producto en el descriptor de dispositivo USB no coinciden con los valores esperados, el accesorio no puede determinar si el dispositivo admite Modo de accesorio de Android El accesorio debería intentar iniciar el dispositivo en modo de accesorio (detallado a continuación) para determinar la compatibilidad del dispositivo.

Punto clave: El accesorio USB debe envía un encabezado tras el protocolo de enlace inicial. El encabezado contiene el fabricante, el modelo y versión. Si bien la versión es un campo opcional, si hay una app para Android instalada que solo coincide con la versión, pero el accesorio no envía una, los dispositivos Android que se ejecute en Android 10 y versiones anteriores se reiniciará debido a que se arrojó una excepción el proceso del sistema.

Intento de inicio en el accesorio modo

Si la versión, el proveedor y los IDs del producto no corresponden a una cadena en modo de accesorio, el accesorio no puede determinar si el dispositivo es compatible (pero no está en) modo de accesorio o si el dispositivo no lo admite. Esta puede ocurrir porque los dispositivos que admiten el modo de accesorio (pero no están en modo ) informan inicialmente los IDs del producto y el proveedor del fabricante del dispositivo en lugar de los ID del producto y del proveedor de la AOA.

El accesorio debe intentar iniciar el dispositivo en modo de accesorio para determinar Si el dispositivo admite ese modo, haz lo siguiente:

  1. Enviar una solicitud de control 51 ("Get Protocol") para determinar si el dispositivo es compatible con el protocolo de accesorios de Android. Si el dispositivo admite el protocolo, arroja un número distinto de cero que representa la versión de protocolo compatible. La solicitud de control está en el extremo 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ía una solicitud de control. con la información de cadena de identificación al dispositivo. Esta información le permite a la para determinar una aplicación adecuada para el accesorio (o presentar una URL al usuario si no existe una aplicación adecuada). El grupo de control se encuentra en el extremo 0 (para cada ID de cadena) con el siguiente 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 IDs de cadenas 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ía una solicitud de control para pedirle al dispositivo que se inicie en el modo de accesorio. El la solicitud de control está en el extremo 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 esperará a que se conecte el USB se vuelva a presentar en el autobús con el modo accesorio y, luego, reenumeren conectados. El algoritmo determina la compatibilidad con el modo de accesorio verificando los IDs del producto y del proveedor, que deberían ser correctos (por ejemplo, a los IDs de productos y proveedores de Google, en lugar de a los IDs del fabricante del dispositivo). el dispositivo cambió correctamente al modo de accesorio. Si los IDs y la versión son correctos, el accesorio se mueve para establecer comunicación con el dispositivo.

Nota: Por el momento, AOA no es compatible conexiones AOA y MTP simultáneas. Para cambiar de AOA a MTP, el accesorio primero debes desconectar el dispositivo USB (ya sea físicamente o de un equivalente) y, luego, vuelve a conectarte mediante MTP.

Si alguno de los pasos falla, el accesorio determina que el dispositivo no es compatible. Modo de accesorio de Android y espera a que se conecte otro dispositivo.

Establece una comunicación con el dispositivo

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

La cantidad de interfaces y extremos masivos depende del ID del producto. Los Dispositivo con Android cuyo ID de producto es:

  • 0x2D00 tiene una interfaz con dos extremos masivos para la entrada y comunicación de salida.
  • 0x2D01 tiene dos interfaces con dos extremos masivos, cada uno para la comunicación de entrada y salida. La primera interfaz controla archivos y la segunda se encarga de la comunicación con ADB. Para usar un local, ubica los primeros extremos de entrada y salida masivos, establece el la configuración del dispositivo en un valor de 1 con un SET_CONFIGURATION (0x09) y, luego, se comunica con los extremos.