بروتوكول ملحق Android المفتوح 1.0

يجب أن تلتزم ملحقات Android USB ببروتوكول Android Open Accessory (AOA) ، والذي يحدد كيفية اكتشاف الملحق وإعداد الاتصال بجهاز يعمل بنظام Android. يجب أن تقوم الملحقات بالخطوات التالية:

  1. انتظر واكتشف الجهاز المتصل.
  2. تحديد دعم وضع ملحق الجهاز.
  3. حاول بدء تشغيل الجهاز في وضع الملحقات (إذا لزم الأمر).
  4. إذا كان الجهاز يدعم AOA ، فقم بإنشاء اتصال مع الجهاز.

توضح الأقسام التالية كيفية تنفيذ هذه الخطوات.

انتظر واكتشف الأجهزة المتصلة

يجب أن تتحقق الملحقات باستمرار من الأجهزة المتصلة التي تعمل بنظام Android. عند توصيل أحد الأجهزة ، يجب أن يحدد الملحق ما إذا كان الجهاز يدعم وضع الملحقات.

تحديد دعم وضع الملحق

ملاحظة: تصحيح أخطاء USB ليس مطلوبًا لتوصيل الملحقات ولكن قد يكون ADB ضروريًا أثناء التطوير. للحصول على التفاصيل ، راجع اعتبارات التصحيح .

عندما يتصل جهاز يعمل بنظام Android ، يمكن أن يكون في إحدى الحالات الثلاث:

  • يدعم وضع ملحق Android وهو بالفعل في وضع الملحقات.
  • يدعم وضع ملحق Android ولكنه ليس في وضع الملحقات.
  • لا يدعم وضع ملحقات Android.

أثناء الاتصال الأولي ، يجب أن يتحقق الملحق من الإصدار ومعرف البائع ومعرف المنتج الخاص بواصف جهاز USB الخاص بالجهاز المتصل. يجب أن يتطابق معرّف البائع مع معرّف Google ( 0x18D1 ). إذا كان الجهاز في وضع الملحقات بالفعل ، فيجب أن يكون معرّف المنتج 0x2D00 أو 0x2D01 ويمكن للملحق إنشاء اتصال بالجهاز من خلال نقاط نهاية النقل الجماعي باستخدام بروتوكول الاتصال الخاص به (لا يحتاج الجهاز إلى البدء في وضع الملحقات).

ملاحظة: 0x2D00 محجوزة للأجهزة التي تعمل بنظام Android والتي تدعم وضع الملحقات. يتم حجز 0x2D01 للأجهزة التي تدعم وضع الملحقات بالإضافة إلى بروتوكول Android Debug Bridge (ADB) ، والذي يعرض واجهة ثانية بنقطتي نهاية مجمعتين لـ ADB. يمكنك استخدام نقاط النهاية هذه لتصحيح أخطاء تطبيق الملحق إذا كنت تحاكي الملحق على جهاز كمبيوتر. بشكل عام ، لا تستخدم هذه الواجهة ما لم ينفذ الملحق عبورًا إلى ADB على الجهاز.

إذا كان الإصدار أو معرف البائع أو معرف المنتج في واصف جهاز USB لا يتطابق مع القيم المتوقعة ، فلن يتمكن الملحق من تحديد ما إذا كان الجهاز يدعم وضع ملحقات Android. يجب أن يحاول الملحق بدء تشغيل الجهاز في وضع الملحق (المفصل أدناه) لتحديد دعم الجهاز.

النقطة الأساسية: يجب أن يرسل ملحق USB رأسًا عند المصافحة الأولية. يحتوي الرأس على الشركة المصنعة والطراز والإصدار. على الرغم من أن الإصدار هو حقل اختياري ، إذا تم تثبيت تطبيق Android يتطابق فقط مع الإصدار ، ولكن الملحق لا يرسل إصدارًا ، فستتم إعادة تشغيل أجهزة Android التي تعمل على Android 10 والإصدارات الأقدم بسبب استثناء يتم طرحه في عملية النظام.

حاول البدء في وضع الملحقات

إذا كان الإصدار والمورد ومعرفات المنتج لا تتوافق مع جهاز يعمل بنظام Android في وضع الملحقات ، فلن يتمكن الملحق من تحديد ما إذا كان الجهاز يدعم (ولكن ليس في) وضع الملحقات أو إذا كان الجهاز لا يدعم وضع الملحقات. يمكن أن يحدث هذا لأن الأجهزة التي تدعم وضع الملحقات (ولكنها ليست في وضع الملحقات) تقوم مبدئيًا بالإبلاغ عن مورد الشركة المصنعة للجهاز ومعرفات المنتج بدلاً من معرفات المنتج ومورد AOA .

يجب أن يحاول الملحق بدء تشغيل الجهاز في وضع الملحق لتحديد ما إذا كان الجهاز يدعم هذا الوضع:

  1. أرسل طلب تحكم 51 ("Get Protocol") لتحديد ما إذا كان الجهاز يدعم بروتوكول ملحق Android. إذا كان الجهاز يدعم البروتوكول ، فإنه يقوم بإرجاع رقم غير صفري يمثل إصدار البروتوكول المدعوم. طلب التحكم موجود على نقطة النهاية 0 بالخصائص التالية:
    requestType:    USB_DIR_IN | USB_TYPE_VENDOR
    request:        51
    value:          0
    index:          0
    data:           protocol version number (16 bits little endian sent from the
                    device to the accessory)
    
  2. إذا أعاد الجهاز إصدار بروتوكول مدعوم ، فأرسل طلب تحكم مع تحديد معلومات السلسلة إلى الجهاز. تسمح هذه المعلومات للجهاز بتحديد التطبيق المناسب للملحق (أو تقديم عنوان URL للمستخدم في حالة عدم وجود التطبيق المناسب). طلب التحكم موجود على نقطة النهاية 0 (لكل معرف سلسلة) بالخصائص التالية:
    requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
    request:        52
    value:          0
    index:          string ID
    data            zero terminated UTF8 string sent from accessory to device
    

    يتم دعم معرّفات السلسلة التالية ، بحد أقصى 256 بايت لكل سلسلة (يجب أن تنتهي بصفر مع \0 ).

    manufacturer name:  0
    model name:         1
    description:        2
    version:            3
    URI:                4
    serial number:      5
    
  3. أرسل طلب تحكم لمطالبة الجهاز بالبدء في وضع الملحقات. طلب التحكم موجود على نقطة النهاية 0 بالخصائص التالية:
    requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
    request:        53
    value:          0
    index:          0
    data:           none
    

بعد إكمال هذه الخطوات ، يجب أن ينتظر الملحق حتى يقوم جهاز USB المتصل بإعادة تقديم نفسه على الناقل في وضع الملحقات ، ثم إعادة تعداد الأجهزة المتصلة. تحدد الخوارزمية دعم وضع الملحقات عن طريق التحقق من معرفات البائع والمنتج ، والتي يجب أن تكون صحيحة (على سبيل المثال ، تتوافق مع معرفات البائع والمنتج في Google بدلاً من معرفات الشركة المصنعة للجهاز) إذا تم تحويل الجهاز بنجاح إلى وضع الملحقات. إذا كانت المعرفات والإصدار صحيحين ، يتحرك الملحق لإنشاء اتصال مع الجهاز .

ملاحظة: لا تدعم AOA حاليًا اتصالات AOA و MTP المتزامنة. للتبديل من AOA إلى MTP ، يجب أن يقوم الملحق أولاً بفصل جهاز USB (إما ماديًا أو بطريقة مكافئة كهربائيًا) ثم إعادة الاتصال باستخدام MTP.

في حالة فشل أي خطوة ، يحدد الملحق أن الجهاز لا يدعم وضع ملحق Android وينتظر اتصال الجهاز التالي.

إنشاء اتصال مع الجهاز

إذا اكتشف الملحق جهازًا يعمل بنظام Android في وضع الملحقات ، فيمكن للملحق الاستعلام عن واجهة الجهاز وواصفات نقطة النهاية للحصول على نقاط النهاية المجمعة للتواصل مع الجهاز.

يعتمد عدد الواجهات ونقاط النهاية المجمعة على معرّف المنتج. جهاز يعمل بنظام Android مع معرّف منتج لـ:

  • يحتوي 0x2D00 على واجهة واحدة بنقطتي نهاية مجمعتين لاتصالات الإدخال والإخراج.
  • يحتوي 0x2D01 على واجهتين مع نقطتي نهاية مجمعتين لكل منهما لاتصالات الإدخال والإخراج. تعالج الواجهة الأولى الاتصال القياسي وتعالج الواجهة الثانية اتصالات ADB. لاستخدام واجهة ، حدد موقع نقاط نهاية الإدخال والإخراج المجمعة الأولى ، واضبط تكوين الجهاز على قيمة 1 مع طلب جهاز SET_CONFIGURATION ( 0x09 ) ، ثم تواصل باستخدام نقاط النهاية.