يصف هذا المستند التغييرات في بروتوكول Android Open Accessory (AOA) منذ إصداره الأولي ويكمل وثائق AOA 1.0 . يضيف AOAv2 الميزات التالية:
- إخراج الصوت (مهمل في Android 8.0).
- دعم الملحق الذي يعمل كواجهة بشرية واحدة أو أكثر (HIDs) لجهاز Android.
لم تتغير واجهات برمجة تطبيقات Android SDK المتاحة لمطوري تطبيقات Android.
الكشف عن دعم AOAv2
لتحديد ما إذا كان جهاز Android المتصل يدعم الملحقات وإصدار البروتوكول المدعوم ، يجب أن يرسل الملحق أمر getProtocol()
والتحقق من النتيجة. يجب أن تقوم أجهزة Android التي تدعم الميزات في AOAv1 فقط بإرجاع 1
كإصدار البروتوكول ؛ الأجهزة التي تدعم الميزات الإضافية في AOAv2 يجب أن ترجع 2
كإصدار البروتوكول. AOAv2 متوافق مع الإصدارات السابقة مع AOAv1 ، لذلك تستمر الملحقات المصممة لبروتوكول الملحقات الأصلي في العمل مع أجهزة Android الأحدث.
يوضح المثال التالي من التعليمات البرمجية المصدر لـ Accessory Development Kit 2011 ( <adk-src>/adk1/board/AndroidAccessory/AndroidAccessory.cpp
) فحص البروتوكول هذا:
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 معرّفات منتجات USB جديدة لكل مجموعة من واجهات USB المتوفرة في وضع الملحقات:
إصدار | معرف المنتج | الاتصالات | وصف |
---|---|---|---|
AOAv1 | 0x2D00 | ملحق | يوفر نقطتي نهاية مجمعتين للتواصل مع تطبيق Android. |
0x2D01 | ملحق + adb | لأغراض التصحيح أثناء تطوير الملحقات. متاح فقط إذا قام المستخدم بتمكين تصحيح أخطاء USB في إعدادات جهاز Android. | |
AOAv2 | 0x2D02 | صوتي | لتدفق الصوت من جهاز Android إلى أحد الملحقات. |
0x2D03 | صوت + adb | ||
0x2D04 | ملحق + صوتي | ||
0x2D05 | ملحق + صوت + adb |
يستمر دعم معرفات المنتجات المستخدمة في AOAv1 ( 0x2D00
و 0x2D01
) في AOAv2.
دعم الصوت
يتضمن AOAv2 دعمًا لإخراج الصوت من جهاز Android إلى ملحق عبر واجهة USB قياسية من فئة الصوت قادرة على قناتين وصوت PCM 16 بت بمعدل بت 44100 كيلو هرتز (يمكن إضافة أوضاع صوتية إضافية في المستقبل).
لتمكين دعم الصوت ، يجب أن يرسل الملحق طلب تحكم USB جديدًا:
**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
يجب إرسال هذا الأمر قبل إرسال الأمر ACCESSORY_START
للدخول إلى وضع الملحقات.
دعم HID
يسمح AOAv2 للملحقات بتسجيل واحد أو أكثر من أجهزة USB بواجهة بشرية (HID) مع جهاز Android. يعكس هذا الأسلوب اتجاه الاتصال لأجهزة USB HID النموذجية مثل ماوسات USB ولوحات المفاتيح. عادةً ما يكون جهاز HID عبارة عن جهاز طرفي متصل بمضيف USB (أي كمبيوتر شخصي) ، ولكن في AOA ، يمكن لمضيف USB أن يعمل كواحد أو أكثر من أجهزة الإدخال إلى طرف USB.
دعم HID هو وكيل لأحداث HID القياسية ؛ لا يضع التطبيق أي افتراضات حول المحتوى أو نوع الأحداث ويمررها ببساطة إلى نظام الإدخال ، مما يتيح لملحق AOAv2 العمل كأي جهاز HID (الماوس ولوحة المفاتيح ووحدة التحكم في الألعاب ، إلخ). يمكنك استخدام دعم HID لتوفير الوظائف الأساسية ، مثل زر التشغيل / الإيقاف المؤقت في رصيف الوسائط ، أو للوظائف المتقدمة مثل محطة الإرساء بالماوس ولوحة مفاتيح QWERTY كاملة.
يضيف AOAv2 طلبات تحكم USB جديدة تسمح للملحق بالعمل كواحد أو أكثر من أجهزة إدخال HID إلى جهاز Android. يتم التعامل مع دعم HID بالكامل من خلال طلبات التحكم عند نقطة النهاية صفر ، لذلك لا حاجة إلى واجهة USB جديدة. طلبات التحكم الأربعة الجديدة هي:
- يسجل ACCESSORY_REGISTER_HID جهاز HID جديد مع جهاز Android. يوفر الملحق معرفًا يستخدم لتحديد جهاز HID للمكالمات الثلاثة الأخرى. هذا المعرف صالح حتى يتم قطع اتصال USB أو حتى يرسل الملحق
ACCESSORY_UNREGISTER_HID
لإلغاء تسجيل جهاز HID. - يقوم ACCESSORY_UNREGISTER_HID بإلغاء تسجيل جهاز HID مسجل مسبقًا مع
ACCESSORY_REGISTER_HID
. - ACCESSORY_SET_HID_REPORT_DESC يرسل موصف التقرير لجهاز HID الى جهاز Android. يستخدم هذا الطلب لوصف إمكانيات جهاز HID ويجب إرساله قبل الإبلاغ عن أي أحداث HID لجهاز Android. إذا كان واصف التقرير أكبر من الحد الأقصى لحجم الحزمة لنقطة النهاية صفر ، فسيتم إرسال أوامر
ACCESSORY_SET_HID_REPORT_DESC
متعددة لنقل الموصف بالكامل. - ACCESSORY_SEND_HID_EVENT يرسل أحداث الإدخال من الملحق إلى جهاز Android.
تعريفات الكود لطلبات التحكم الجديدة هي:
/* 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
يوفر البروتوكول الأصلي ( AOAv1 ) دعمًا لتطبيق Android للتواصل مباشرة مع مضيف USB (ملحق) عبر USB. يواصل AOAv2 هذا الدعم ويضيف ميزات جديدة للسماح للملحق بالاتصال بنظام التشغيل Android نفسه (تحديدًا أنظمة الصوت والإدخال). يتيح تصميم AOAv2 إمكانية إنشاء ملحق يستخدم الصوت الجديد ودعم HID بالإضافة إلى مجموعة الميزات الأصلية. ما عليك سوى استخدام الميزات الجديدة جنبًا إلى جنب مع الميزات الأصلية.
توصيل AOAv2 بدون تطبيق Android
يمكنك تصميم ملحق (مثل رصيف صوتي) يستخدم الصوت ودعم HID لكن لا يتصل بتطبيق على جهاز Android. بالنسبة لهذه الملحقات ، لا يحتاج المستخدمون إلى تلقي مطالبات حوار للعثور على الملحق المرفق حديثًا وربطه بتطبيق Android يمكنه الاتصال به.
لمنع مثل هذه الحوارات بعد توصيل أحد الملحقات ، يمكن للملحق اختيار عدم إرسال اسم الشركة المصنعة والطراز إلى جهاز Android. عندما لا يتم توفير هذه السلاسل لجهاز Android:
- لا يحاول النظام العثور على تطبيق للاتصال بالملحق.
- واجهة USB للملحق غير موجودة في تكوين USB لجهاز Android بعد أن يدخل الجهاز في وضع الملحقات.