يجب أن تلتزم ملحقات USB لأجهزة Android ببروتوكول "ملحق Android المفتوح" (AOA)، الذي يحدِّد كيفية رصد الملحق للاتصال بجهاز Android وإعداده. يجب أن تتّبع الملحقات الخطوات التالية:
- انتظِر ظهور جهاز متصل ورصده.
- تحديد مدى توافق الجهاز مع وضع الملحق
- حاوِل تشغيل الجهاز في وضع الملحق (إذا لزم الأمر).
- إذا كان الجهاز متوافقًا مع ميزة 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 التي تعمل بالإصدار 10 من نظام التشغيل Android والإصدارات الأقدم بسبب حدوث استثناء في عملية النظام.
محاولة التشغيل في وضع الملحق
إذا لم تتطابق معرّفات الإصدار والمورّد والمنتج مع جهاز Android الذي يعمل في وضع الملحق، لا يمكن للملحق تحديد ما إذا كان الجهاز يتيح وضع الملحق (ولكنه ليس في هذا الوضع) أو ما إذا كان الجهاز لا يتيح هذا الوضع. يمكن أن يحدث ذلك لأنّ الأجهزة التي تتيح وضع الملحق (ولكنها ليست في وضع الملحق ) تُبلغ في البداية عن معرّفَي المورّد والمنتجات للشركة المصنّعة للجهاز بدلاً من معرّفَي المورّد والمنتجات لنظام AOA.
من المفترض أن يحاول الملحق تشغيل الجهاز في وضع الملحق لتحديد ما إذا كان الجهاز متوافقًا مع هذا الوضع:
- أرسِل طلب التحكّم 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)
- إذا أرجع الجهاز إصدارًا متوافقًا من البروتوكول، أرسِل طلب التحكّم
مع معلومات السلسلة المحدِّدة الهوية إلى الجهاز. تتيح هذه المعلومات لجهاز
تحديد تطبيق مناسب للإكسسوار (أو عرض عنوان 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
- أرسِل طلب التحكّم لطلب تشغيل الجهاز في وضع الملحق. طلب التحكّم في
متوفّر في نقطة النهاية 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
على واجهة واحدة تتضمّن نقطتَي نهاية مجمّعتَين للتواصل مع0x2D00
من حيث الإدخال والإخراج. - يحتوي
0x2D01
على واجهتَين بنقطة نهاية مجمّعة لكل منهما للتواصل مع الإدخال والإخراج. تعالج الواجهة الأولى رسائل البريد الإلكتروني العادية، وتعالج الواجهة الثانية رسائل ADB. لاستخدام واجهة، حدِّد نقاط نهاية الإدخال والإخراج المجمّعة الأولى، واضبط إعدادات الجهاز على القيمة 1 باستخدام طلب جهازSET_CONFIGURATION
(0x09
)، ثم تواصل باستخدام نقاط النهاية.