Android Open Accessory 1.0

Android USB aksesuarları, bir aksesuarın Android destekli bir cihazı nasıl algılayıp iletişim kuracağını tanımlayan Android Açık Aksesuar (AOA) protokolüne uymalıdır. Aksesuarlar aşağıdaki adımları uygulamalıdır:

  1. Bağlı bir cihazı bekleyip algılayın.
  2. Cihazın aksesuar modu desteğini belirleyin.
  3. Gerekirse cihazı aksesuar modunda başlatmayı deneyin.
  4. Cihaz AOA'yı destekliyorsa cihazla iletişim kurun.

Aşağıdaki bölümlerde bu adımların nasıl uygulanacağı açıklanmaktadır.

Bağlı cihazları bekleyip algılama

Aksesuarlar, bağlı Android cihazları sürekli olarak kontrol etmelidir. Bir cihaz bağlandığında aksesuar, cihazın aksesuar modunu destekleyip desteklemediğini belirlemelidir.

Aksesuar modu desteğini belirleme

Not: USB üzerinden hata ayıklama, aksesuarları bağlamak için gerekli değildir ancak geliştirme sırasında ADB gerekli olabilir. Ayrıntılar için Hata ayıklamayla ilgili dikkat edilmesi gerekenler bölümünü inceleyin.

Android destekli bir cihaz bağlandığında üç durumdan birinde olabilir:

  • Android aksesuar modunu desteklemeli ve aksesuar modunda olmalıdır.
  • Android aksesuar modunu destekler ancak aksesuar modunda değildir.
  • Android aksesuar modu desteklenmez.

Aksesuar, ilk bağlantı sırasında bağlı cihazın USB cihaz tanımlayıcısının sürümünü, tedarikçi firma kimliğini ve ürün kimliğini kontrol etmelidir. Tedarikçi kimliği, Google'ın kimliğiyle (0x18D1) eşleşmelidir. Cihaz zaten aksesuar modundaysa ürün kimliği 0x2D00 veya 0x2D01 olmalıdır ve aksesuar, kendi iletişim protokolünü kullanarak toplu aktarım uç noktaları üzerinden cihazla iletişim kurabilir (cihazın aksesuar modunda başlatılması gerekmez).

Not: 0x2D00, aksesuar modunu destekleyen Android cihazlar için ayrılmıştır. 0x2D01, aksesuar modunu ve Android Debug Bridge (ADB) protokolünü destekleyen cihazlar için ayrılmıştır. ADB için iki toplu uç nokta içeren ikinci bir arayüz sunar. Aksesuarı bilgisayarda simüle ediyorsanız aksesuar uygulamasında hata ayıklama için bu uç noktaları kullanabilirsiniz. Genel olarak, aksesuar cihazda ADB'ye geçiş sağlamadığı sürece bu arayüzü kullanmayın.

USB cihaz tanımlayıcısı sürüm, satıcı kimliği veya ürün kimliği beklenen değerlerle eşleşmiyorsa aksesuar, cihazın Android aksesuar modunu destekleyip desteklemediğini belirleyemez. Aksesuar, cihaz desteğini belirlemek için cihazı aksesuar modunda (aşağıda açıklanmıştır) başlatmayı dener.

Önemli nokta: USB aksesuarı, ilk el sıkışma sonrasında bir üstbilgi göndermelidir. Üstbilgi, üreticiyi, modeli ve sürümü içerir. Sürüm isteğe bağlı bir alandır ancak yalnızca sürümle eşleşen bir Android uygulaması yüklüyse ve aksesuar bir sürüm göndermiyorsa Android 10 ve önceki sürümleri çalıştıran Android cihazlar, sistem işleminde bir istisna atanması nedeniyle yeniden başlatılır.

Aksesuar modunda başlatmayı deneyin

Sürüm, satıcı ve ürün kimlikleri, aksesuar modunda çalışan bir Android cihazla eşleşmiyorsa aksesuar, cihazın aksesuar modunu destekleyip desteklemediğini (ancak aksesuar modunda olmadığını) veya desteklemediğini belirleyemez. Bu durum, aksesuar modunu destekleyen (ancak aksesuar modunda olmayan) cihazların başlangıçta AOA tedarikçi firma ve ürün kimlikleri yerine cihaz üreticisi tedarikçi firma ve ürün kimliklerini bildirmesi nedeniyle ortaya çıkabilir.

Aksesuar, cihazın bu modu destekleyip desteklemediğini belirlemek için cihazı aksesuar modunda başlatmayı dener:

  1. Cihazın Android aksesuar protokolünü destekleyip desteklemediğini belirlemek için 51 kontrol isteği ("Get Protocol") gönderin. Cihaz protokolü destekliyorsa desteklenen protokol sürümünü temsil eden sıfır olmayan bir sayı döndürür. Kontrol isteği, aşağıdaki özelliklere sahip 0 numaralı uç noktadadır:
    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. Cihaz desteklenen bir protokol sürümü döndürürse cihaza tanımlayıcı dize bilgilerini içeren bir kontrol isteği gönderin. Bu bilgiler, cihazın aksesuar için uygun bir uygulama belirlemesine (veya uygun bir uygulama yoksa kullanıcıya bir URL göstermesine) olanak tanır. Kontrol isteği, 0 numaralı uç noktada (her dize kimliği için) aşağıdaki özelliklere sahiptir:
    requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
    request:        52
    value:          0
    index:          string ID
    data            zero terminated UTF8 string sent from accessory to device
    

    Her dize için maksimum 256 bayt boyutunda aşağıdaki dize kimlikleri desteklenir (\0 ile sıfırla sonlandırılmalıdır).

    manufacturer name:  0
    model name:         1
    description:        2
    version:            3
    URI:                4
    serial number:      5
    
  3. Cihazın aksesuar modunda başlatılmasını istemek için bir kontrol isteği gönderin. Kontrol isteği, aşağıdaki özelliklere sahip 0 numaralı uç noktadadır:
    requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
    request:        53
    value:          0
    index:          0
    data:           none
    

Bu adımlar tamamlandıktan sonra aksesuar, bağlı USB cihazının kendisini otobüste aksesuar modunda yeniden tanıtmasını beklemeli, ardından bağlı cihazları yeniden numaralandırmalıdır. Algoritma, cihazın aksesuar moduna başarıyla geçiş yapması durumunda doğru olması gereken tedarikçi ve ürün kimliklerini kontrol ederek aksesuar modu desteğini belirler (ör. cihaz üreticisinin kimlikleri yerine Google'ın tedarikçi ve ürün kimliklerine karşılık gelir). Kimlikler ve sürüm doğruysa aksesuar cihazla iletişim kurmaya geçer.

Not: AOA şu anda eşzamanlı AOA ve MTP bağlantılarını desteklemez. AOA'dan MTP'ye geçmek için aksesuarın önce USB cihazının bağlantısını kesmesi (fiziksel olarak veya elektriksel olarak eşdeğer bir şekilde) ve ardından MTP'yi kullanarak yeniden bağlanması gerekir.

Herhangi bir adım başarısız olursa aksesuar, cihazın Android aksesuar modunu desteklemediğini belirler ve bir sonraki cihazın bağlanmasını bekler.

Cihazla iletişim kurma

Aksesuar, Android destekli bir cihazı aksesuar modunda algılarsa cihazla iletişim kurmak için toplu uç noktaları elde etmek üzere cihaz arayüzünü ve uç nokta tanımlayıcılarını sorgulayabilir.

Arayüz ve toplu uç nokta sayısı ürün kimliğine bağlıdır. Aşağıdaki ürün kimliğine sahip Android cihazlar:

  • 0x2D00, giriş ve çıkış iletişimi için iki toplu uç noktaya sahip bir arayüze sahiptir.
  • 0x2D01, giriş ve çıkış iletişimi için her biri iki toplu uç noktaya sahip iki arayüze sahiptir. İlk arayüz standart iletişimi, ikinci arayüz ise ADB iletişimini yönetir. Bir arayüzü kullanmak için ilk toplu giriş ve çıkış uç noktalarını bulun, SET_CONFIGURATION (0x09) cihaz isteğiyle cihaz yapılandırmasını 1 değerine ayarlayın, ardından uç noktaları kullanarak iletişim kurun.