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.