أندرويد مفتوح الملحقات 1.0

يجب أن تلتزم ملحقات Android USB ببروتوكول Android Open Accessories (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 ("الحصول على البروتوكول") لتحديد ما إذا كان الجهاز يدعم بروتوكول ملحقات 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 ) ثم قم بالاتصال باستخدام نقاط النهاية.