Android Open Accessory 1.0

لوازم جانبی Android USB باید به پروتکل Android Open Accessory (AOA) پایبند باشد، پروتکلی که تعریف می‌کند چگونه یک وسیله جانبی دستگاهی را که دارای Android است، شناسایی و راه‌اندازی می‌کند. لوازم جانبی باید مراحل زیر را انجام دهند:

  1. منتظر بمانید و دستگاه متصل را شناسایی کنید.
  2. پشتیبانی از حالت لوازم جانبی دستگاه را تعیین کنید.
  3. سعی کنید دستگاه را در حالت لوازم جانبی راه اندازی کنید (در صورت نیاز).
  4. اگر دستگاه از AOA پشتیبانی می کند، با دستگاه ارتباط برقرار کنید.

بخش های زیر نحوه اجرای این مراحل را توضیح می دهند.

منتظر بمانید و دستگاه های متصل را شناسایی کنید

لوازم جانبی باید به طور مداوم دستگاه‌های متصل به Android را بررسی کنند. هنگامی که یک دستگاه متصل است، لوازم جانبی باید تعیین کند که آیا دستگاه از حالت لوازم جانبی پشتیبانی می کند یا خیر.

پشتیبانی از حالت لوازم جانبی را تعیین کنید

توجه: اشکال زدایی USB برای اتصال لوازم جانبی مورد نیاز نیست، اما ADB ممکن است در طول توسعه ضروری باشد. برای جزئیات، به ملاحظات اشکال زدایی مراجعه کنید.

هنگامی که یک دستگاه مجهز به Android متصل می شود، می تواند در یکی از سه حالت باشد:

  • از حالت لوازم جانبی اندروید پشتیبانی می کند و در حال حاضر در حالت لوازم جانبی است.
  • از حالت لوازم جانبی اندروید پشتیبانی می کند اما در حالت لوازم جانبی نیست.
  • از حالت لوازم جانبی اندروید پشتیبانی نمی کند.

در طول اتصال اولیه، لوازم جانبی باید نسخه، شناسه فروشنده و شناسه محصول توصیفگر دستگاه USB دستگاه متصل را بررسی کند. شناسه فروشنده باید با شناسه Google ( 0x18D1 ) مطابقت داشته باشد. اگر دستگاه قبلاً در حالت لوازم جانبی است، شناسه محصول باید 0x2D00 یا 0x2D01 باشد و لوازم جانبی می تواند با استفاده از پروتکل ارتباطی خود از طریق نقاط پایانی انتقال انبوه با دستگاه ارتباط برقرار کند (نیازی نیست دستگاه در حالت لوازم جانبی راه اندازی شود).

توجه: 0x2D00 برای دستگاه‌های مجهز به Android که از حالت لوازم جانبی پشتیبانی می‌کنند، رزرو شده است. 0x2D01 برای دستگاه‌هایی محفوظ است که از حالت جانبی و همچنین پروتکل Android Debug Bridge (ADB) پشتیبانی می‌کنند، که رابط دوم را با دو نقطه پایانی انبوه برای ADB نشان می‌دهد. اگر لوازم جانبی را در رایانه شبیه سازی می کنید، می توانید از این نقاط پایانی برای اشکال زدایی برنامه جانبی استفاده کنید. به طور کلی، از این رابط استفاده نکنید، مگر اینکه وسیله جانبی یک گذر از ADB را بر روی دستگاه اجرا کند.

اگر نسخه، شناسه فروشنده یا شناسه محصول در توصیفگر دستگاه USB با مقادیر مورد انتظار مطابقت نداشته باشد، لوازم جانبی نمی تواند تشخیص دهد که آیا دستگاه از حالت لوازم جانبی Android پشتیبانی می کند یا خیر. لوازم جانبی باید سعی کند دستگاه را در حالت لوازم جانبی (جزئیات زیر) برای تعیین پشتیبانی دستگاه راه اندازی کند.

نکته کلیدی: لوازم جانبی USB باید در هنگام دست دادن اولیه هدر ارسال کند. هدر شامل سازنده، مدل و نسخه است. اگرچه نسخه یک فیلد اختیاری است، اگر برنامه اندرویدی نصب شده باشد که فقط با نسخه مطابقت دارد، اما لوازم جانبی نسخه ای را ارسال نکند، دستگاه های اندرویدی که روی اندروید 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 را مدیریت می کند. برای استفاده از یک رابط، اولین نقاط پایانی ورودی و خروجی انبوه را پیدا کنید، پیکربندی دستگاه را با یک درخواست دستگاه SET_CONFIGURATION ( 0x09 ) روی مقدار 1 تنظیم کنید، سپس با استفاده از نقاط پایانی ارتباط برقرار کنید.