Android Open Accessory 1.0

Les accessoires USB Android doivent être conformes à la norme Android Open Accessory (AOA) qui définit la manière dont un accessoire détecte et configure la communication avec un appareil Android. Les accessoires doivent procéder comme suit:

  1. Attendez et détectez un appareil connecté.
  2. Déterminez si l'appareil prend en charge le mode accessoire.
  3. Essayez de démarrer l'appareil en mode accessoire (si nécessaire).
  4. Si l'appareil est compatible avec la fonctionnalité AOA, établissez la communication avec lui.

Les sections suivantes expliquent comment mettre en œuvre ces étapes.

Attendre et détecter les appareils connectés appareils

Les accessoires doivent vérifier en permanence la présence d'appareils Android connectés. Lorsqu'un appareil est connecté, l'accessoire doit déterminer si l'appareil prend en charge le mode accessoire.

Déterminer la compatibilité du mode accessoire

Remarque:Le débogage USB n'est pas nécessaire pour connecter des accessoires. ADB peut être nécessaire pendant le développement. Pour en savoir plus, consultez <ph type="x-smartling-placeholder"></ph> Considérations relatives au débogage.

Lorsqu'un appareil Android se connecte, il peut présenter l'un des trois états suivants:

  • Compatible avec le mode accessoire Android et est déjà en mode accessoire.
  • Compatible avec le mode accessoire Android, mais pas en mode accessoire.
  • Non compatible avec le mode accessoire Android.

Lors de la connexion initiale, l'accessoire doit vérifier la version, l'ID du fournisseur et l'ID produit du descripteur de périphérique USB de l'appareil connecté. ID du fournisseur doit correspondre à l'identifiant de Google (0x18D1). Si l'appareil est déjà dans mode accessoire, l'ID produit doit être 0x2D00 ou 0x2D01 et l'accessoire peut établir une communication avec l'appareil via des points de terminaison de transfert groupé qui utilisent sa propre communication (il n'est pas nécessaire de démarrer l'appareil en mode accessoire).

Remarque:0x2D00 est réservé à Appareils Android compatibles avec le mode Accessoire 0x2D01 correspond à Réservé aux appareils compatibles avec le mode accessoire (ADB), qui expose une deuxième interface avec deux points de terminaison groupés pour ADB. Vous pouvez utiliser ces points de terminaison pour déboguer l'application accessoire si vous simulez l'accessoire sur un ordinateur. En général, n'utilisez pas à moins que l'accessoire implémente un passthrough vers ADB sur l'appareil.

Si la version, l'identifiant du fournisseur ou l'identifiant produit dans le descripteur de périphérique USB ne ne correspondent pas aux valeurs attendues, l'accessoire ne peut pas déterminer si l'appareil est compatible Mode accessoire Android L'accessoire doit tenter de démarrer l'appareil mode accessoire (détaillé ci-dessous) pour déterminer la compatibilité de l'appareil.

Important : Un accessoire USB doit être envoyer un en-tête lors du premier handshake. L'en-tête contient le fabricant, le modèle et version. Même si le champ "Version" est facultatif, si une application Android installée correspond à la version, mais l'accessoire n'envoie pas de version, les appareils Android exécuté sous Android 10 ou version antérieure redémarrera en raison de la génération d'une exception ; le processus système.

Tentative de démarrage sur l'accessoire mode

Si les ID de version, de fournisseur et de produit ne correspondent pas à des ID Android appareil en mode accessoire, l'accessoire ne peut pas déterminer s'il est compatible avec n'est pas activé) ou si l'appareil n'est pas compatible avec ce mode. Ce cela peut être dû au fait que les appareils compatibles avec le mode accessoire ) indiquent initialement le fabricant de l'appareil et les ID produit du fabricant au lieu des ID de fournisseur et de produit AOA.

L'accessoire doit essayer de démarrer l'appareil en mode Accessoire pour déterminer si l'appareil est compatible avec ce mode:

  1. Envoyer une requête de contrôle 51 ("Get Protocol") pour déterminer si l'appareil est compatible avec le protocole d'accessoire Android. Si l’appareil prend en charge le protocole, il renvoie un nombre non nul qui représente la version de protocole prise en charge. La requête de contrôle est sur le point de terminaison 0 avec les caractéristiques suivantes:
    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 l'appareil renvoie une version de protocole compatible, envoyez une requête de contrôle. avec des informations de chaîne d'identification à l'appareil. Ces informations permettent au appareil afin de déterminer une application appropriée pour l'accessoire (ou présenter une URL de l'utilisateur si aucune application appropriée n'existe). La commande se trouve sur le point de terminaison 0 (pour chaque ID de chaîne) avec les éléments suivants : caractéristiques:
    requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
    request:        52
    value:          0
    index:          string ID
    data            zero terminated UTF8 string sent from accessory to device
    

    Les ID de chaîne suivants sont acceptés, avec une taille maximale de 256 octets pour chaque chaîne (elle doit se terminer par zéro) par \0.

    manufacturer name:  0
    model name:         1
    description:        2
    version:            3
    URI:                4
    serial number:      5
    
  3. Envoyez une demande de contrôle pour demander à l'appareil de démarrer en mode accessoire. La de contrôle est sur le point de terminaison 0 avec les caractéristiques suivantes:
    requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
    request:        53
    value:          0
    index:          0
    data:           none
    

Une fois ces étapes terminées, l'accessoire doit attendre que la connexion USB l'appareil pour se réintroduire dans le bus en mode accessoire, puis ré-énumérer appareils connectés. L'algorithme détermine la compatibilité du mode accessoire en vérifiant les ID de fournisseur et de produit, qui doivent être corrects (par exemple, correspondre aux ID produit et de fournisseur de Google au lieu des ID du fabricant de l'appareil) si l'appareil est passé en mode accessoire. Si les ID et la version sont corrects, l'accessoire se déplace pour établir la communication avec l'appareil.

Remarque:AOA n'est actuellement pas compatible avec les connexions simultanées AOA et MTP. Pour passer de AOA à MTP, l'accessoire vous devez d'abord débrancher le périphérique USB (soit physiquement, soit de manière équivalente), puis reconnectez-vous à l'aide de MTP.

Si une étape échoue, l'accessoire détermine que l'appareil n'est pas compatible le mode accessoire Android et attend que l'appareil suivant se connecte.

Établir une communication avec l'appareil

Si l'accessoire détecte un appareil Android en mode Accessoire, la accessoire peut interroger l'interface de l'appareil et les descripteurs de point de terminaison pour obtenir des points de terminaison groupés pour communiquer avec l'appareil.

Le nombre d'interfaces et de points de terminaison groupés dépend de l'ID produit. Une Appareil Android associé à l'identifiant produit suivant:

  • 0x2D00 dispose d'une interface avec deux points de terminaison groupés pour l'entrée et la communication de sortie.
  • 0x2D01 dispose de deux interfaces avec deux points de terminaison groupés chacune pour d'entrée et de sortie. La première interface gère l'authentification et la deuxième interface gère la communication ADB. Pour utiliser un localiser les premiers points de terminaison d'entrée et de sortie groupés, configuration de l'appareil sur une valeur de 1 avec un SET_CONFIGURATION (0x09), puis communiquent à l'aide des points de terminaison.