Android USB aksesuarları, bir aksesuarın Android destekli bir cihazı nasıl algılayıp kurduğunu tanımlayan Android Açık Aksesuar (AOA) protokolüne uymalıdır. Aksesuarlar aşağıdaki adımları uygulamalıdır:
- Bağlı bir cihazı bekleyin ve tespit edin.
- Cihazın aksesuar modu desteğini belirleyin.
- Cihazı aksesuar modunda başlatmayı deneyin (gerekirse).
- 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ı bekleyin ve tespit edin
Aksesuarlar bağlı Android destekli 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: Aksesuarların bağlanması için USB hata ayıklaması gerekli değildir ancak geliştirme sırasında ADB gerekli olabilir. Ayrıntılar için bkz. Hata ayıklamayla ilgili hususlar .
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 desteklemez.
İlk bağlantı sırasında aksesuar, bağlı cihazın USB cihazı tanımlayıcısının sürümünü, satıcı kimliğini ve ürün kimliğini kontrol etmelidir. Satıcı 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ı aracılığıyla cihazla iletişim kurabilir (cihazın aksesuar modunda başlatılmasına gerek yoktur).
Not:
0x2D00 aksesuar modunu destekleyen Android destekli cihazlar için ayrılmıştır.
0x2D01 aksesuar modunun yanı sıra ADB için iki toplu uç noktaya sahip ikinci bir arayüz ortaya çıkaran Android Hata Ayıklama Köprüsü (ADB) protokolünü destekleyen cihazlar için ayrılmıştır. Aksesuarı bilgisayarda simüle ediyorsanız, aksesuar uygulamasında hata ayıklamak için bu uç noktaları kullanabilirsiniz. Genel olarak, aksesuar cihazda ADB'ye geçiş uygulamadığı sürece bu arayüzü kullanmayın.
USB aygıt tanımlayıcısındaki sürüm, satıcı kimliği veya ürün kimliği beklenen değerlerle eşleşmezse aksesuar, aygıtın Android aksesuar modunu destekleyip desteklemediğini belirleyemez. Aksesuar, cihaz desteğini belirlemek için cihazı aksesuar modunda (aşağıda ayrıntılı olarak açıklanmıştır) başlatmayı denemelidir.
Anahtar nokta: Bir USB aksesuarı, ilk el sıkışma sonrasında bir başlık göndermelidir. Başlık üreticiyi, modeli ve sürümü içerir. Sürüm isteğe bağlı bir alan olsa da, yalnızca sürümle eşleşen bir Android uygulaması yüklüyse ancak aksesuar bir sürüm göndermiyorsa, Android 10 ve daha eski sürümlerde çalışan Android cihazlar, sistem sürecinde oluşan bir istisna nedeniyle yeniden başlatılır.
Aksesuar modunda başlatmayı deneyin
Sürüm, satıcı ve ürün kimlikleri, aksesuar modundaki Android destekli bir cihaza karşılık gelmiyorsa aksesuar, cihazın aksesuar modunu destekleyip desteklemediğini (ancak bu modda olmadığını) veya cihazın aksesuar modunu destekleyip desteklemediğini belirleyemez. Bunun nedeni, aksesuar modunu destekleyen (ancak aksesuar modunda olmayan) cihazların başlangıçta AOA satıcısı ve ürün kimlikleri yerine cihaz üreticisi satıcısını ve ürün kimliklerini bildirmesi olabilir.
Aksesuarın, cihazın bu modu destekleyip desteklemediğini belirlemek için cihazı aksesuar modunda başlatmayı denemesi gerekir:
- Cihazın Android aksesuar protokolünü destekleyip desteklemediğini belirlemek için bir 51 kontrol isteği ("Protokol Al") gönderin. Cihaz protokolü destekliyorsa, desteklenen protokol sürümünü temsil eden sıfırdan farklı bir sayı döndürür. Kontrol isteği, aşağıdaki özelliklere sahip uç nokta 0'dadı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)
- 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 bilgi, cihazın aksesuar için uygun bir uygulamayı belirlemesine (veya uygun bir uygulama yoksa kullanıcıya bir URL sunmasına) olanak tanır. Kontrol isteği, aşağıdaki özelliklere sahip 0 uç noktasındadır (her dize kimliği için):
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 (
\0ile sıfırla sonlandırılmalıdır).
manufacturer name: 0 model name: 1 description: 2 version: 3 URI: 4 serial number: 5
- 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 uç nokta 0'dadır:
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 cihazının kendisini aksesuar modunda veri yoluna yeniden tanıtmasını beklemeli, ardından bağlı cihazları yeniden numaralandırmalıdır. Algoritma, cihazın aksesuar moduna başarılı bir şekilde geçmesi durumunda doğru olması gereken (örneğin, cihaz üreticisinin kimlikleri yerine Google'ın satıcı ve ürün kimliklerine karşılık gelen) satıcı ve ürün kimliklerini kontrol ederek aksesuar modu desteğini belirler . Kimlikler ve sürüm doğruysa aksesuar, cihazla iletişim kurmak için hareket eder.
Not: AOA şu anda eşzamanlı AOA ve MTP bağlantılarını desteklememektedir. AOA'dan MTP'ye geçiş yapmak 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 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 kurun
Aksesuar, aksesuar modunda Android destekli bir cihaz algılarsa cihazla iletişim kurmaya yönelik toplu uç noktaları elde etmek için cihaz arayüzünü ve uç nokta tanımlayıcılarını sorgulayabilir.
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 bir cihaz:
-
0x2D00giriş ve çıkış iletişimi için iki toplu uç noktaya sahip bir arayüze sahiptir.
-
0x2D01her biri giriş ve çıkış iletişimi için 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, bir
SET_CONFIGURATION(
0x09) cihaz isteğiyle cihaz konfigürasyonunu 1 değerine ayarlayın, ardından uç noktaları kullanarak iletişim kurun.