อุปกรณ์เสริม Android Open 1.0

อุปกรณ์เสริม USB ของ Android ต้องเป็นไปตาม Android Open Accessory (AOA) ซึ่งเป็นการกำหนดว่าอุปกรณ์เสริมจะตรวจจับและตั้งค่าการสื่อสารอย่างไรกับ อุปกรณ์ที่ใช้ระบบ Android อุปกรณ์เสริมควรทำตามขั้นตอนต่อไปนี้

  1. รอและตรวจหาอุปกรณ์ที่เชื่อมต่อ
  2. ตรวจสอบการรองรับโหมดอุปกรณ์เสริมของอุปกรณ์
  3. ลองเริ่มอุปกรณ์ในโหมดอุปกรณ์เสริม (หากจำเป็น)
  4. หากอุปกรณ์รองรับ AOA ให้สื่อสารกับอุปกรณ์

ส่วนต่อไปนี้จะอธิบายวิธีดำเนินการตามขั้นตอนเหล่านี้

รอและตรวจพบว่ามีการเชื่อมต่อ อุปกรณ์

อุปกรณ์เสริมควรตรวจสอบอุปกรณ์ที่ใช้ Android ที่เชื่อมต่ออยู่อย่างต่อเนื่อง เมื่อเชื่อมต่ออุปกรณ์แล้ว อุปกรณ์เสริมควรระบุว่าอุปกรณ์ รองรับโหมดอุปกรณ์เสริม

ระบุการรองรับโหมดอุปกรณ์เสริม

หมายเหตุ: ไม่จำเป็นต้องแก้ไขข้อบกพร่อง USB สำหรับการเชื่อมต่ออุปกรณ์เสริม ADB อาจจำเป็นสำหรับการพัฒนา โปรดดูรายละเอียดที่หัวข้อ ข้อควรพิจารณาในการแก้ไขข้อบกพร่อง

เมื่อเชื่อมต่ออุปกรณ์ที่ใช้ระบบ Android อุปกรณ์จะมีสถานะ 1 ใน 3 สถานะต่อไปนี้

  • รองรับโหมดอุปกรณ์เสริม Android และอยู่ในโหมดอุปกรณ์เสริมอยู่แล้ว
  • รองรับโหมดอุปกรณ์เสริม Android แต่ไม่อยู่ในโหมดอุปกรณ์เสริม
  • ไม่รองรับโหมดอุปกรณ์เสริมของ Android

ระหว่างการเชื่อมต่อครั้งแรก อุปกรณ์เสริมควรตรวจสอบเวอร์ชัน รหัสผู้ให้บริการ และรหัสผลิตภัณฑ์ของข้อบ่งชี้อุปกรณ์ USB ของอุปกรณ์ที่เชื่อมต่อ รหัสผู้ให้บริการ ควรตรงกับรหัสของ Google (0x18D1) หากมีอุปกรณ์อยู่แล้ว โหมดอุปกรณ์เสริม รหัสผลิตภัณฑ์ควรเป็น 0x2D00 หรือ 0x2D01 และอุปกรณ์เสริม ได้สื่อสารกับ อุปกรณ์ผ่านปลายทางการโอนจำนวนมากโดยใช้การสื่อสารของตนเอง โปรโตคอล (ไม่จำเป็นต้องเริ่มทำงานในโหมดอุปกรณ์เสริม)

หมายเหตุ: 0x2D00 สงวนไว้สำหรับ อุปกรณ์ที่ใช้ Android ซึ่งรองรับโหมดอุปกรณ์เสริม 0x2D01 คือ สงวนไว้สำหรับอุปกรณ์ที่รองรับโหมดอุปกรณ์เสริมและการแก้ไขข้อบกพร่องของ Android โปรโตคอลบริดจ์ (ADB) ซึ่งแสดงอินเทอร์เฟซที่ 2 ที่มีปลายทางแบบกลุ่ม 2 จุด สำหรับ ADB คุณสามารถใช้อุปกรณ์ปลายทางเหล่านี้เพื่อแก้ไขข้อบกพร่องของแอปพลิเคชันอุปกรณ์เสริมได้ หาก คุณกำลังจำลองอุปกรณ์เสริมบนคอมพิวเตอร์ โดยทั่วไปแล้ว อย่าใช้ฟีเจอร์นี้ เว้นแต่อุปกรณ์เสริมจะใช้การส่งผ่านไปยัง ADB บนอุปกรณ์

หากเวอร์ชัน รหัสผู้ให้บริการ หรือรหัสผลิตภัณฑ์ในข้อบ่งชี้อุปกรณ์ USB ไม่มี ตรงกับค่าที่คาดไว้ อุปกรณ์เสริมไม่สามารถระบุได้ว่าอุปกรณ์รองรับหรือไม่ โหมดอุปกรณ์เสริม Android อุปกรณ์เสริมควรพยายามเปิดเครื่องใน โหมดอุปกรณ์เสริม (ตามรายละเอียดด้านล่าง) เพื่อตรวจสอบการรองรับของอุปกรณ์

จุดคีย์: อุปกรณ์เสริม USB ต้อง ส่งส่วนหัวเมื่อเริ่มต้นแฮนด์เชค ส่วนหัวประกอบด้วยผู้ผลิต รุ่น และ เวอร์ชัน แม้ว่าเวอร์ชันจะเป็นช่องที่ไม่บังคับ แต่ถ้าติดตั้งแอป Android มีเฉพาะ ตรงกันกับเวอร์ชัน แต่อุปกรณ์เสริมไม่ส่งเวอร์ชัน อุปกรณ์ Android ที่ทำงานใน Android 10 และต่ำกว่าจะรีบูตเนื่องจากมีข้อยกเว้น กระบวนการของระบบ

จำนวนครั้งที่เริ่มในอุปกรณ์เสริม โหมด

หากเวอร์ชัน ผู้ให้บริการ และรหัสผลิตภัณฑ์ไม่ตรงกับเวอร์ชันที่ขับเคลื่อนโดย Android อุปกรณ์ในโหมดอุปกรณ์เสริม อุปกรณ์เสริมจะไม่สามารถระบุได้ว่าอุปกรณ์รองรับหรือไม่ (แต่ ไม่ได้) โหมดอุปกรณ์เสริมหรือหากอุปกรณ์ไม่รองรับโหมดอุปกรณ์เสริม ช่วงเวลานี้ อาจเกิดขึ้นได้เนื่องจากอุปกรณ์ที่รองรับโหมดอุปกรณ์เสริม (แต่ไม่ใช่ในอุปกรณ์เสริม) โหมด) จะรายงานผู้ให้บริการและรหัสผลิตภัณฑ์ของผู้ผลิตอุปกรณ์ในเบื้องต้น แทนผู้ให้บริการและรหัสผลิตภัณฑ์ AOA

อุปกรณ์เสริมควรพยายามเริ่มการทำงานของอุปกรณ์ในโหมดอุปกรณ์เสริมเพื่อระบุ หากอุปกรณ์รองรับโหมดดังกล่าว

  1. ส่งคำขอการควบคุม 51 ("รับโปรโตคอล") เพื่อดูว่าอุปกรณ์ รองรับโปรโตคอลอุปกรณ์เสริมของ Android หากอุปกรณ์รองรับโปรโตคอล จะแสดงตัวเลขที่ไม่ใช่ 0 ซึ่งแสดงถึงเวอร์ชันโปรโตคอลที่รองรับ คำขอการควบคุมอยู่ในปลายทาง 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 ในโหมดอุปกรณ์เสริม อุปกรณ์เสริมสามารถค้นหาตัวระบุอินเทอร์เฟซอุปกรณ์และตัวบอกปลายทาง ปลายทางแบบเป็นกลุ่มสําหรับการสื่อสารกับอุปกรณ์

จํานวนอินเทอร์เฟซและปลายทางแบบกลุ่มจะขึ้นอยู่กับรหัสผลิตภัณฑ์ CANNOT TRANSLATE อุปกรณ์ที่ใช้ระบบ Android โดยมีรหัสผลิตภัณฑ์ดังนี้

  • 0x2D00 มีอินเทอร์เฟซ 1 รายการที่มีปลายทางแบบกลุ่ม 2 จุดสำหรับอินพุตและ การสื่อสารเอาต์พุต
  • 0x2D01 มีอินเทอร์เฟซ 2 รายการซึ่งมีปลายทางแบบกลุ่ม 2 รายการสำหรับ การสื่อสารเกี่ยวกับอินพุตและเอาต์พุต อินเทอร์เฟซแรกจะจัดการ และอินเทอร์เฟซที่ 2 จะจัดการกับการสื่อสารของ ADB วิธีใช้ หาปลายทางอินพุตและเอาต์พุตจำนวนมากแรก ตั้งค่า การกำหนดค่าอุปกรณ์เป็นค่า 1 ที่มี SET_CONFIGURATION (0x09) อุปกรณ์ แล้วสื่อสารโดยใช้ปลายทาง