Bu belge, Android Açık Aksesuar (AOA) protokolünde ilk sürümünden bu yana yapılan değişiklikleri açıklar ve AOA 1.0 belgelerini tamamlar. AOAv2 aşağıdaki özellikleri ekler:
- Ses çıkışı (Android 8.0'da kullanımdan kaldırılmıştır).
- Android cihaza bir veya daha fazla insan arayüz cihazı (HID) olarak işlev gören aksesuar desteği.
Android uygulama geliştiricilerinin kullanabildiği Android SDK API'leri değiştirilmemiştir.
AOAv2 desteğini algılama
Bağlı bir Android cihazının aksesuarları ve desteklenen protokol sürümünü destekleyip desteklemediğini belirlemek için, bir aksesuarın bir getProtocol()
komutu göndermesi ve sonucu kontrol etmesi gerekir. Yalnızca AOAv1'deki özellikleri destekleyen Android cihazlar, protokol sürümü olarak 1
döndürmelidir; AOAv2 ek feautres destekleyen cihazlar dönmelidir 2
protokol versiyonu olarak. AOAv2, AOAv1 ile geriye dönük uyumludur, bu nedenle orijinal aksesuar protokolü için tasarlanan aksesuarlar daha yeni Android cihazlarla çalışmaya devam eder.
Accessory Development Kit 2011 kaynak kodu ( <adk-src>/adk1/board/AndroidAccessory/AndroidAccessory.cpp
) kitaplığından alınan aşağıdaki örnek, bu protokol denetimini gösterir:
bool AndroidAccessory::switchDevice(byte addr) { int protocol = getProtocol(addr); if (protocol >= 1) { Serial.print("device supports protocol 1 or higher\n"); } else { Serial.print("could not read device protocol version\n"); return false; } sendString(addr, ACCESSORY_STRING_MANUFACTURER, manufacturer); sendString(addr, ACCESSORY_STRING_MODEL, model); sendString(addr, ACCESSORY_STRING_DESCRIPTION, description); sendString(addr, ACCESSORY_STRING_VERSION, version); sendString(addr, ACCESSORY_STRING_URI, uri); sendString(addr, ACCESSORY_STRING_SERIAL, serial); usb.ctrlReq(addr, 0, USB_SETUP_HOST_TO_DEVICE | USB_SETUP_TYPE_VENDOR | USB_SETUP_RECIPIENT_DEVICE, ACCESSORY_START, 0, 0, 0, 0, NULL); return true; }
AOAv2, aksesuar modunda bulunan her USB arabirimi kombinasyonu için yeni USB ürün kimlikleri içerir:
Sürüm | ürün kimliği | İletişim | Açıklama |
---|---|---|---|
AOAv1 | 0x2D00 | aksesuar | Bir Android uygulamasıyla iletişim kurmak için iki toplu uç nokta sağlar. |
0x2D01 | aksesuar + adb | Aksesuar geliştirme sırasında hata ayıklama amacıyla. Yalnızca, kullanıcı Android cihaz ayarlarında USB Hata Ayıklamayı etkinleştirmişse kullanılabilir. | |
AOAv2 | 0x2D02 | ses | Bir Android cihazdan bir aksesuara ses akışı yapmak için. |
0x2D03 | ses + adb | ||
0x2D04 | aksesuar + ses | ||
0x2D05 | aksesuar + ses + adb |
AOAv1'de kullanılan ürün kimlikleri ( 0x2D00
ve 0x2D01
), AOAv2'de desteklenmeye devam etmektedir.
Ses desteği
AOAv2, 44100 Khz bit hızına sahip 2 kanallı, 16 bit PCM ses kapasitesine sahip standart bir USB ses sınıfı arabirim aracılığıyla bir Android cihazdan bir aksesuara ses çıkışı desteği içerir (gelecekte ek ses modları eklenebilir).
Ses desteğini etkinleştirmek için aksesuarın yeni bir USB kontrol isteği göndermesi gerekir:
**SET_AUDIO_MODE** requestType: USB_DIR_OUT | USB_TYPE_VENDOR request: 58 value: 0 for no audio (default), 1 for 2 channel, 16-bit PCM at 44100 KHz index: 0 data none
Bu komut, aksesuar moduna girmek için ACCESSORY_START
komutu gönderilmeden önce gönderilmelidir.
HID desteği
AOAv2, aksesuarların bir Android cihazla bir veya daha fazla USB İnsan Arabirimi Cihazını (HID) kaydetmesine izin verir. Bu yaklaşım, USB fareler ve klavyeler gibi tipik USB HID cihazları için iletişim yönünü tersine çevirir. Normalde, HID cihazı bir USB ana bilgisayarına (yani bir kişisel bilgisayar) bağlı bir çevre birimidir, ancak AOA'da USB ana bilgisayarı, bir USB çevre birimine bir veya daha fazla giriş aygıtı olarak hareket edebilir.
HID desteği, standart HID olayları için bir proxy'dir; uygulama, olayların içeriği veya türü hakkında hiçbir varsayımda bulunmaz ve bunu giriş sistemine aktararak, bir AOAv2 aksesuarının herhangi bir HID cihazı (fare, klavye, oyun denetleyicisi, vb.) olarak işlev görmesini sağlar. HID desteğini, bir media dock üzerindeki oynat / duraklat düğmesi gibi temel işlevleri sağlamak için veya fareli bir yerleştirme istasyonu ve tam QWERTY klavye gibi gelişmiş işlevler için kullanabilirsiniz.
AOAv2, aksesuarın Android cihaza bir veya daha fazla HID giriş cihazı olarak davranmasına izin veren yeni USB kontrol istekleri ekler. HID desteği tamamen sıfır uç noktadaki kontrol talepleri aracılığıyla ele alınır, bu nedenle yeni USB arayüzüne gerek yoktur. Dört yeni kontrol isteği:
- ACCESSORY_REGISTER_HID , Android cihaza yeni bir HID cihazı kaydeder. Aksesuar, diğer üç çağrı için HID cihazını tanımlamak için kullanılan bir kimlik sağlar. Bu kimlik, USB bağlantısı kesilene kadar veya aksesuar HID aygıtının kaydını silmek için
ACCESSORY_UNREGISTER_HID
gönderene kadar geçerlidir. - ACCESSORY_UNREGISTER_HID ,
ACCESSORY_REGISTER_HID
ile önceden kaydedilmiş bir HID cihazının kaydını siler. - ACCESSORY_SET_HID_REPORT_DESC , Android cihaza bir HID cihazı için bir rapor tanımlayıcı gönderir. Bu istek, HID cihazının yeteneklerini tanımlamak için kullanılır ve herhangi bir HID olayını Android cihaza bildirmeden önce gönderilmelidir. Rapor tanımlayıcısı sıfır uç noktası için maksimum paket boyutundan büyükse, tüm tanımlayıcıyı aktarmak için birden çok
ACCESSORY_SET_HID_REPORT_DESC
komutu gönderilir. - ACCESSORY_SEND_HID_EVENT , aksesuardan Android cihaza giriş olayları gönderir.
Yeni kontrol talepleri için kod tanımları şunlardır:
/* Control request for registering a HID device. * Upon registering, a unique ID is sent by the accessory in the * value parameter. This ID will be used for future commands for * the device * * requestType: USB_DIR_OUT | USB_TYPE_VENDOR * request: ACCESSORY_REGISTER_HID_DEVICE * value: Accessory assigned ID for the HID device * index: total length of the HID report descriptor * data none */ #define ACCESSORY_REGISTER_HID 54 /* Control request for unregistering a HID device. * * requestType: USB_DIR_OUT | USB_TYPE_VENDOR * request: ACCESSORY_REGISTER_HID * value: Accessory assigned ID for the HID device * index: 0 * data none */ #define ACCESSORY_UNREGISTER_HID 55 /* Control request for sending the HID report descriptor. * If the HID descriptor is longer than the endpoint zero max packet size, * the descriptor will be sent in multiple ACCESSORY_SET_HID_REPORT_DESC * commands. The data for the descriptor must be sent sequentially * if multiple packets are needed. * * requestType: USB_DIR_OUT | USB_TYPE_VENDOR * request: ACCESSORY_SET_HID_REPORT_DESC * value: Accessory assigned ID for the HID device * index: offset of data in descriptor * (needed when HID descriptor is too big for one packet) * data the HID report descriptor */ #define ACCESSORY_SET_HID_REPORT_DESC 56 /* Control request for sending HID events. * * requestType: USB_DIR_OUT | USB_TYPE_VENDOR * request: ACCESSORY_SEND_HID_EVENT * value: Accessory assigned ID for the HID device * index: 0 * data the HID report for the event */ #define ACCESSORY_SEND_HID_EVENT 57
AOAv1 ile birlikte çalışabilirlik
Orijinal protokol ( AOAv1 ), bir Android uygulamasının USB üzerinden bir USB ana bilgisayar (aksesuar) ile doğrudan iletişim kurması için destek sağlar. AOAv2 bu desteği sürdürür ve aksesuarın Android işletim sistemiyle (özellikle ses ve giriş sistemleri) iletişim kurmasını sağlamak için yeni özellikler ekler. AOAv2'nin tasarımı, orijinal özellik setine ek olarak yeni ses ve HID desteğini kullanan bir aksesuar oluşturmayı mümkün kılar. Orijinal özelliklerle birlikte yeni özellikleri kullanmanız yeterlidir.
AOAv2'yi Android uygulaması olmadan bağlama
Ses ve HID desteğini kullanan, ancak Android cihazdaki bir uygulamayla iletişim kurmayan bir aksesuar (ses yuvası gibi) tasarlayabilirsiniz. Bu aksesuarlar için, kullanıcıların yeni eklenmiş aksesuarı bulup onunla iletişim kurabilen bir Android uygulamasıyla ilişkilendirmek için iletişim istemleri almasına gerek yoktur.
Bir aksesuar bağlandıktan sonra bu tür iletişim kutularını bastırmak için aksesuar, üretici ve model adlarını Android cihaza göndermemeyi seçebilir. Bu dizeler Android cihaza sağlanmadığında:
- Sistem aksesuarla iletişim kurmak için bir uygulama bulmaya çalışmaz.
- Aksesuar USB arabirimi, cihaz aksesuar moduna girdikten sonra Android cihaz USB yapılandırmasında mevcut değildir.