Android USB aksesuarları, bir aksesuarın Android destekli bir cihazla iletişimi nasıl algılayıp kurduğunu tanımlayan Android Açık Aksesuar (AOA) protokolüne uygun olmalıdır. Aksesuarlar aşağıdaki adımları gerçekleştirmelidir:
- 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ümler, bu adımların nasıl uygulanacağını açıklamaktadı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 belirleyin
Android destekli bir cihaz bağlandığında, şu üç durumdan birinde olabilir:
- Android aksesuar modunu destekler ve zaten aksesuar modunda.
- Android aksesuar modunu destekler, ancak aksesuar modunda değildir.
- Android aksesuar modunu desteklemez.
İlk bağlantı sırasında aksesuar, bağlı aygıtın USB aygıt 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 )
0x18D1 . 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 modunu destekleyen cihazların yanı sıra ADB için iki toplu uç noktaya sahip ikinci bir arayüz sunan Android Hata Ayıklama Köprüsü (ADB) protokolü için ayrılmıştır. Aksesuarı bir bilgisayarda simüle ediyorsanız, aksesuar uygulamasında hata ayıklamak için bu uç noktaları kullanabilirsiniz. Genel olarak, aksesuar cihazda ADB'ye bir geçiş uygulamadıkça bu arayüzü kullanmayın.
USB cihaz tanımlayıcısındaki sürüm, satıcı kimliği veya ürün kimliği beklenen değerlerle eşleşmezse aksesuar, cihazın Android aksesuar modunu destekleyip desteklemediğini belirleyemez. Aksesuar, cihaz desteğini belirlemek için cihazı aksesuar modunda başlatmaya çalışmalıdır (aşağıda ayrıntılı olarak verilmiştir).
Anahtar nokta: Bir USB aksesuarı, ilk el sıkışmanın ardından 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üklenirse ancak aksesuar bir sürüm göndermezse, Android 10 ve daha eski sürümlerde çalışan Android cihazlar, sistem işleminde atılan bir istisna nedeniyle yeniden başlatılır.
Aksesuar modunda başlamaya çalışın
Aksesuar modundaki sürüm, satıcı ve ürün kimlikleri Android destekli bir cihaza karşılık gelmiyorsa aksesuar, cihazın aksesuar modunu destekleyip desteklemediğini (ancak desteklemediğini) veya cihazın aksesuar modunu destekleyip desteklemediğini belirleyemez. Bunun nedeni, aksesuar modunu destekleyen (ancak aksesuar modunda olmayan) aygıtların başlangıçta AOA satıcısı ve ürün kimlikleri yerine aygıt üreticisi satıcısını ve ürün kimliklerini bildirmesi olabilir.
Aksesuar, cihazın bu modu destekleyip desteklemediğini belirlemek için cihazı aksesuar modunda başlatmaya çalışmalıdır:
- Cihazın Android aksesuar protokolünü destekleyip desteklemediğini belirlemek için 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 0 son noktasındadı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ünü döndürürse, cihaza tanımlayıcı dizi bilgilerini içeren bir kontrol talebi gönderin. Bu bilgi, cihazın aksesuar için uygun bir uygulama belirlemesine (veya uygun bir uygulama yoksa kullanıcıya bir URL sunmasına) izin verir. Kontrol isteği, aşağıdaki özelliklere sahip son nokta 0'da (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
Aşağıdaki dizi kimlikleri, her dizge için maksimum 256 bayt boyutuyla desteklenir (
\0ile sıfır 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şlamasını istemek için bir kontrol isteği gönderin. Kontrol isteği, aşağıdaki özelliklere sahip 0 son noktasındadır:
requestType: USB_DIR_OUT | USB_TYPE_VENDOR request: 53 value: 0 index: 0 data: none
Bu adımları tamamladıktan sonra aksesuar, bağlanan USB aygıtının kendisini aksesuar modunda veri yolunda yeniden tanıtmasını beklemeli, ardından bağlı aygıtları yeniden numaralandırmalıdır. Algoritma, cihaz başarıyla aksesuar moduna geçtiyse 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 . Kimlik 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çmek için aksesuarın önce USB cihazının bağlantısını kesmesi (fiziksel 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 sonraki cihazın bağlanmasını bekler.
Cihazla iletişim kurun
Aksesuar, Android destekli bir cihazı aksesuar modunda algılarsa, aksesuar, cihazla iletişim kurmak için 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. Ürün kimliğine sahip Android destekli bir cihaz:
-
0x2D00, giriş ve çıkış iletişimi için iki toplu uç noktaya sahip bir arabirime sahiptir.
-
0x2D01, her biri giriş ve çıkış iletişimi için iki toplu uç noktasına sahip iki arabirime sahiptir. İlk arayüz standart iletişimi yönetir ve ikinci arabirim ADB iletişimini yönetir. Bir arabirim kullanmak için, ilk toplu giriş ve çıkış uç noktalarını bulun, aygıt yapılandırmasını bir
SET_CONFIGURATION(
0x09) aygıt isteği ile 1 değerine ayarlayın, ardından uç noktaları kullanarak iletişim
SET_CONFIGURATION.