Android Açık Aksesuar 1.0

Android USB aksesuarları, Android Açık Aksesuar'a (AOA) uygun olmalıdır. Protokol, aksesuarın aksesuarla olan iletişimi nasıl algıladığını ve kurduğunu tanımlayan Android destekli bir cihaz. Aksesuarlar şu adımları uygulamalıdır:

  1. Bağlı bir cihazı bekleyin ve algılayın.
  2. Cihazın aksesuar modu desteğini belirleyin.
  3. Cihazı aksesuar modunda başlatmayı deneyin (gerekirse).
  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ğlanmayı bekle ve algıla cihazlar

Aksesuarlar, bağlı Android destekli cihazları sürekli olarak kontrol etmelidir. Bir cihaz bağlandığında aksesuarın, cihazın bağlı olup olmadığını belirlemesi gerekir. aksesuar modunu destekler.

Aksesuar modu desteğini belirleme

Not: Aksesuarları bağlamak için USB üzerinden hata ayıklama gerekmez ancak Geliştirme sırasında ADB gerekli olabilir. Ayrıntılar için bkz. Hata ayıklamayla ilgili dikkat edilmesi gereken noktalar

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

  • Android aksesuar modunu destekler ve zaten aksesuar modundadır.
  • Android aksesuar modunu destekler, ancak aksesuar modunda değildir.
  • Android aksesuar modunu desteklemiyor.

İlk bağlantı sırasında aksesuar sürümü, tedarikçi firma kimliğini, ve bağlı cihazın USB cihaz tanımlayıcısının ürün kimliği. Tedarikçi firma kimliği Google'ın kimliğiyle (0x18D1) eşleşmelidir. Cihaz zaten aksesuar modundaysa ürün kimliği 0x2D00 veya 0x2D01 ve aksesuar şu işlemleri yapabilir: ekibinizin ihtiyaçlarını kendi iletişimini kullanarak toplu aktarım uç noktaları aracılığıyla cihaza protokolü (cihazın aksesuar modunda başlatılması gerekmez).

Not: 0x2D00 şu alan için ayrıldı: Aksesuar modunu destekleyen Android destekli cihazlar. 0x2D01 aksesuar modunu ve Android Hata Ayıklama'yı destekleyen cihazlar için ayrılmıştır İki toplu uç noktaya sahip ikinci bir arayüz sunan köprü (ADB) protokolü belirtin. Aşağıdaki durumlarda aksesuar uygulamasında hata ayıklamak için bu uç noktaları kullanabilirsiniz: aksesuarın bir bilgisayarda simülasyonunu yapıyorsunuz. Genel olarak arayüzü üzerinden çalışır.

USB cihaz tanımlayıcısındaki sürüm, tedarikçi kimliği veya ürün kimliği beklenen değerlerle eşleştiğinden aksesuar, cihazın desteklenip desteklenmediğini belirleyemez Android aksesuar modu. Aksesuarın cihazı şu sürede başlatmayı denemesi gerekir: aksesuar modunu (aşağıda ayrıntılı olarak açıklanmıştır) etkinleştirin.

Anahtar noktası: USB aksesuarı ilk el sıkışmadan sonra bir üstbilgi gönder. Bu üstbilgide üretici, model ve sürümünü değil. Sürüm isteğe bağlı bir alan olsa da yalnızca sürümle eşleşiyor ancak aksesuar sürüm göndermiyor, Android cihazlar Android 10 ve önceki sürümlerde çalışan bir hata, bahsedeceğim.

Aksesuarda başlamayı dene mod

Sürüm, tedarikçi firma ve ürün kimlikleri, Android destekli bir modundaysa aksesuar, cihazın desteklenip desteklenmediğini belirleyemez (ancak yoksa) aksesuar modunda olup olmadığını veya cihaz aksesuar modunu desteklemiyorsa: Bu aksesuar modunu destekleyen (aksesuarda olmayan) modu) önce cihaz üreticisi tedarikçi firma ve ürün kimliklerini raporlayın yerine AOA tedarikçi ve ürün kimliklerinin kullanılmasını öneririz.

Aksesuarın, şu özellikleri belirlemek için cihazı aksesuar modunda başlatmayı denemesi gerekir: Cihaz bu modu destekliyorsa:

  1. Cihazın aşağıdaki özelliklere sahip olup olmadığını belirlemek için bir 51 denetim isteği ("Protokol Al") gönder: Android aksesuar protokolünü destekler. Cihaz, protokolü destekliyorsa desteklenen protokol sürümünü temsil eden sıfır dışında bir sayı döndürür. Kontrol isteği, aşağıdaki özelliklere sahip uç nokta 0'da:
    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 bir kontrol isteği gönderin tanımlayıcı dize bilgisi içerir. Bu bilgiler, uygun bir uygulama belirler (veya bir uygulamayı Uygun bir uygulama yoksa kullanıcının URL'si). Kontrol isteği, aşağıdakine sahip uç nokta 0'da (her dize kimliği için) özellikler:
    requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
    request:        52
    value:          0
    index:          string ID
    data            zero terminated UTF8 string sent from accessory to device
    

    Maksimum 256 bayt boyutunda olmak üzere aşağıdaki dize kimlikleri desteklenir (\0 ile sıfır sonlandırılmış olmalı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. İlgili içeriği oluşturmak için kullanılan kontrol isteği, aşağıdaki özelliklere sahip uç nokta 0'da:
    requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
    request:        53
    value:          0
    index:          0
    data:           none
    

Bu adımları tamamladıktan sonra aksesuar, bağlı USB'nin yüklenmesini beklemelidir. tanıtıp aksesuar modunda kendisini otobüste yeniden tanıtması bağlı cihazlar. Algoritma aksesuar modu desteğini belirler doğru olması gereken tedarikçi ve ürün kimliklerini kontrol ederek (örneğin, cihaz üreticisinin kimlikleri yerine Google'ın tedarikçi firma ve ürün kimliklerine ekleyerek Cihaz başarıyla aksesuar moduna geçti. Kimlikler ve sürüm doğruysa bir sonraki aşamaya cihazla iletişimde ne olur?

Not: AOA şu anda desteklenmemektedir. aynı anda AOA ve MTP bağlantıları. AOA'dan MTP'ye geçmek için aksesuar önce USB cihazının bağlantısını kesmelidir (fiziksel olarak veya eşdeğer şekilde) ve daha sonra MTP kullanarak yeniden bağlanmayı deneyin.

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

Müşterinizle ve paydaşlarınızla cihaz

Aksesuar, aksesuar modunda Android destekli bir cihaz algılarsa almak için cihaz arayüzünü ve uç nokta tanımlayıcılarını sorgulayabilir. toplu uç noktalar da dahil edilir.

Arayüzlerin ve toplu uç noktaların sayısı ürün kimliğine bağlıdır. Şu ürün kimliğine sahip Android destekli cihaz:

  • 0x2D00, giriş için iki toplu uç nokta bulunan bir arayüze ve çıktı iletişimi.
  • 0x2D01, her biri için iki toplu uç nokta içeren iki arayüze sahiptir giriş ve çıkış iletişimi. İlk arayüzde, standart ve ikinci arayüz ADB iletişimini gerçekleştirir. Bir arayüzünde ilk toplu giriş ve çıkış uç noktalarını bulun, cihaz yapılandırmasını SET_CONFIGURATION ile 1 olarak ayarlayın (0x09) cihaz isteğinde bulunabilir, ardından uç noktaları kullanarak iletişim kurabilirsiniz.