Android Open Accessory 1.0

אביזרי USB של Android חייבים לפעול בהתאם לאביזר של Android Open Access (AOA) של אביזר, שמגדיר איך אביזר מזהה ומגדיר תקשורת עם במכשיר מבוסס Android. על האביזרים לבצע את השלבים הבאים:

  1. ממתינים למכשיר מחובר ומזהים אותו.
  2. לקבוע אם המכשיר תומך במצב האביזר של המכשיר.
  3. נסו להפעיל את המכשיר במצב 'אביזר' (במקרה הצורך).
  4. אם המכשיר תומך ב-AOA, יש ליצור תקשורת עם המכשיר.

בקטעים הבאים מוסבר איך ליישם את השלבים האלה.

המתנה וזיהוי החיבור מכשירים

אביזרים צריכים לבדוק ברציפות אם יש מכשירים מחוברים מבוססי Android. כשהמכשיר מחובר, האביזר צריך לקבוע אם יש תמיכה במצב אביזרים.

בחירת התמיכה במצב האביזר

הערה: ניפוי באגים ב-USB לא נדרש לחיבור אביזרים, אבל ייתכן שיהיה צורך ב-ADB במהלך הפיתוח. פרטים נוספים זמינים במאמר שיקולים לניפוי באגים

כאשר מכשיר מבוסס Android מתחבר, הוא יכול להיות באחד משלושת המצבים הבאים:

  • יש תמיכה במצב 'אביזר Android' והוא כבר במצב 'אביזר'.
  • יש תמיכה במצב 'אביזר' ל-Android, אבל הוא לא במצב 'אביזר'.
  • לא תומך במצב אביזר של Android.

במהלך החיבור הראשוני, האביזר צריך לבדוק את הגרסה, מזהה הספק ומזהה המוצר של מתאר התקן ה-USB של המכשיר המחובר. מזהה הספק צריך להתאים למזהה של Google (0x18D1). אם המכשיר כבר נמצא במצב אביזר, מזהה המוצר צריך להיות 0x2D00 או 0x2D01 והאביזר יכול ליצור קשר עם המכשיר דרך נקודות קצה להעברה בכמות גדולה באמצעות תקשורת משלו (אין צורך להפעיל את המכשיר במצב 'אביזר').

הערה: 0x2D00 שמור עבור מכשירים מבוססי Android שתומכים במצב עזר. 0x2D01 הוא שמורים למכשירים שתומכים במצב 'אביזר' וגם ב'ניפוי באגים ב-Android' פרוטוקול ברידג' (ADB), שחושף ממשק שני עם שתי נקודות קצה בכמות גדולה ל-ADB. ניתן להשתמש בנקודות הקצה האלה לניפוי באגים באפליקציית האביזר אם שאתם מדמים את האביזר במחשב. באופן כללי, אין להשתמש ממשק, אלא אם האביזר מטמיע במכשיר פעולת מעבר ל-ADB.

אם הגרסה, מזהה הספק או מזהה המוצר שמופיעים במתאר של התקן ה-USB לא תואם לערכים הצפויים, האביזר לא יכול לקבוע אם המכשיר תומך מצב 'אביזר Android'. האביזר צריך לנסות להפעיל את המכשיר מצב אביזר (מפורט בהמשך) כדי לקבוע את התמיכה של המכשיר.

נקודה חשובה: חובה להוסיף אביזר USB שליחת כותרת בלחיצת היד הראשונית. הכותרת מכילה את שם היצרן, הדגם ו . למרות שגרסה היא שדה אופציונלי, אם מותקנת אפליקציה ל-Android שרק תואם לגרסה, אבל האביזר לא שולח גרסה, מכשירי Android מערכת ההפעלה Android בגרסה 10 ומטה תופעל מחדש עקב חריגה שמתרחשת בתהליך המערכת.

ניסיון להפעיל את האביזר מצב

אם הגרסה, הספק ומזהי המוצר אינם תואמים במצב אביזרים, האביזר לא יכול לקבוע אם הוא תומך במכשיר ( לא במצב אביזרים, או שהמכשיר לא תומך במצב עזר. הזה עשוי להתרחש כי מכשירים שתומכים במצב 'אביזר' (אבל לא באביזר) מצב) לדווח בהתחלה על מזהי המוצר והספק של המכשיר במקום את מזהה הספק ומזהה המוצר של 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) בקשה למכשיר, ואז מתקשרים באמצעות נקודות הקצה.