Google is committed to advancing racial equity for Black communities. See how.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Android Açık Aksesuar Protokolü 2.0

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.