Android Açık Aksesuar 2.0

Bu dokümanda, Android Açık Aksesuar (AOA) protokolündeki değişiklikler açıklanmaktadır ve takviye maddeler içeren AOA 1.0 belgeleri. AOAv2 şu özellikleri ekler:

  • Ses çıkışı (Android 8.0'da kullanımdan kaldırılmıştır).
  • Bir veya daha fazla insan arayüz cihazı gibi çalışan aksesuar için destek (HID) Android cihaza bağlayın.

Android uygulama geliştiricilerin kullanımına sunulan Android SDK API'lerinde değişiklik yoktur.

AOAv2 desteğini algılama

Bağlı bir Android cihazın aksesuarları ve desteklenen protokol sürümü varsa bir aksesuarın getProtocol() göndermesi gerekir komutunu girin ve sonucu kontrol edin. Yalnızca özellikleri destekleyen Android cihazlar AOAv1'de, protokol sürümü olarak 1 döndürülmelidir; şu cihazları kullanan: desteği, AOAv2'deki ek özellikleri desteklemesi gerekir, 2 protokolü sürümü. AOAv2, AOAv1 ile geriye dönük uyumluluğa sahiptir. Bu nedenle, orijinal aksesuar protokolü için tasarlanan yeni Android sürümleriyle çalışmaya devam eder cihazlar.

Aksesuar Geliştirme Kiti 2011'den aşağıdaki örnek kaynak kod (<adk-src>/adk1/board/AndroidAccessory/AndroidAccessory.cpp) kitaplığı şu protokol kontrolünü 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, her USB arayüzü kombinasyonu için yeni USB ürün kimlikleri içerir. aksesuar modunda kullanılabilir:

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 kullanılır. Yalnızca Kullanıcının, Android cihaz ayarlarında USB Hata Ayıklaması'nı etkinleştirmiş olması.
AOAv2 0x2D02 Ses Android cihazdan aksesuara ses akışı için kullanılır.
0x2D03 ses + adb
0x2D04 aksesuar + ses
0x2D05 aksesuar + ses + adb

AOAv1'de kullanılan ürün kimlikleri (0x2D00 ve 0x2D01) desteklenmeye devam edecek.

Ses desteği

AOAv2, Android cihazdan 2 kanallı, 16 bit özellikli standart bir USB ses sınıfı arayüzü üzerinden bir aksesuar 44.100 Khz bit hızıyla PCM ses (ilave ses modları (gelecekte).

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, önce Aksesuar moduna girmek için ACCESSORY_START komutu.

HID desteği

AOAv2, aksesuarların bir veya daha fazla USB İnsan Arayüzünü kaydetmesine olanak tanır Android cihaz kullanan cihazlar (HID). Bu yaklaşım, ekibinizin USB fare ve klavyeler gibi tipik USB HID cihazları için iletişim. Normalde HID cihazı, bir USB ana makinesine (ör. kişisel bilgisayar), ancak AOA'da USB ana makinesi, bir veya daha fazla giriş cihazları USB çevre birimine bağlayabilirsiniz.

HID desteği, standart HID etkinlikleri için bir proxy'dir. "the" etkinliklerin içeriği veya türü hakkında herhangi bir varsayımda bulunulmaz. bunu giriş sistemine iletir ve bir AOAv2 aksesuarının herhangi bir HID cihazı (fare, klavye, oyun kumandası vb.) gibi davranamaz. HID'yi kullanabilirsiniz medya içeriğindeki oynat/duraklat düğmesi gibi temel işlevleri sağlama desteği gibi ileri seviye işlevsellik için kullanmak üzere tam Q klavye.

AOAv2, aksesuarın gerektiği gibi çalışmasını sağlayan yeni USB kontrol istekleri ekler. Android cihaza bir veya daha fazla HID giriş cihazı bağlayın. HID desteği sunuluyor uç nokta sıfırındaki kontrol istekleri aracılığıyla yapılır. Böylece yeni USB arayüzü gerekir. Dört yeni kontrol isteği şunlardır:

  • ACCESSORY_REGISTER_HID yeni bir HID cihazını Android cihaz. Aksesuar, HID cihazını tanımlamak için kullanılan bir kimlik sağlar: diğer üç çağrı. Bu kimlik, USB bağlantısı kesilene veya aksesuar, HID'nin kaydını iptal etmek için ACCESSORY_UNREGISTER_HID gönderir olanak tanır.
  • ACCESSORY_UNREGISTER_HID bir HID cihazının kaydını iptal eder daha önce ACCESSORY_REGISTER_HID numaralı telefona kaydedilmiş.
  • ACCESSORY_SET_HID_REPORT_DESC, şunun için bir rapor açıklayıcısı gönderir: Android cihaza bir HID cihazı. Bu istek, HID cihazının özellikleri ve herhangi bir HID etkinliği bildirilmeden önce gönderilmelidir. Android cihaza geri yüklendi. Rapor tanımlayıcısı maksimum değerden daha büyükse uç nokta sıfır, çoklu için paket boyutu ACCESSORY_SET_HID_REPORT_DESC komutlar, açıklayıcının tamamı.
  • ACCESSORY_SEND_HID_EVENT giriş etkinliklerini bir aksesuar ekleyin.

Yeni kontrol isteklerinin 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) USB ile doğrudan iletişim kurma desteği sunan bir Android uygulaması USB üzerinden ana makineye (aksesuar) gidin. AOAv2, bu desteği devam ettirir ve yeni özellikler ekler. Aksesuarın, Android işletim sistemiyle iletişim kurmasını sağlamak için (özellikle de ses ve giriş sistemleri). AOAv2'nin tasarımı, Böylece, yeni ses ve HID desteğini kullanan bir aksesuar derleyebilirsiniz. bir kontrol listesidir. Yeni özellikleri kullanmak için geri dönelim.

AOAv2'yi Android uygulaması

Ses ve HID kullanan bir aksesuar (ör. ses yuvası) tasarlayabilirsiniz desteği var ancak Android cihazdaki bir uygulamayla iletişim kurmuyor. Örneğin, Kullanıcıların arama sorgusuna uygun içerikleri bulma ve yeni takılan aksesuarı şu işlemi gerçekleştirebilecek bir Android uygulamasıyla ilişkilendirebilirsiniz: anlamak zorundasınız.

Bir aksesuar bağlandıktan sonra bu tür iletişim kutularını gizlemek için aksesuarın üretici ve model adlarını olanak tanır. Bu dizeler Android cihaza sağlanmadığında:

  • Sistem, aksesuarla iletişim kuracak bir uygulama bulmaya çalışmaz.
  • Aksesuarın USB arayüzü, Android cihazın USB'sinde yok yapılandırmasını devre dışı bırakır.