เอกสารนี้อธิบายการเปลี่ยนแปลงในโปรโตคอล Android Open Accessory (AOA) นับตั้งแต่การเปิดตัวและเวอร์ชันเสริม เอกสารประกอบเกี่ยวกับ AOA 1.0 AOAv2 เพิ่มฟีเจอร์ดังต่อไปนี้
- เอาต์พุตเสียง (เลิกใช้งานแล้วใน Android 8.0)
- การรองรับอุปกรณ์เสริมซึ่งทำหน้าที่เป็นอุปกรณ์ที่มีอินเทอร์เฟซของบุคคลตั้งแต่ 1 เครื่องขึ้นไป (HID) ไปยังอุปกรณ์ Android
API ของ Android SDK ที่นักพัฒนาแอป Android ใช้งานได้นั้นไม่มีการเปลี่ยนแปลง
ตรวจหาการสนับสนุน AOAv2
เพื่อดูว่าอุปกรณ์ Android ที่เชื่อมต่อรองรับอุปกรณ์เสริมหรือไม่ และ
เวอร์ชันโปรโตคอลที่รองรับ อุปกรณ์เสริมต้องส่ง getProtocol()
และตรวจสอบผลลัพธ์ อุปกรณ์ Android ที่รองรับเฉพาะฟีเจอร์
ใน AOAv1 ต้องแสดงผล 1
เป็นเวอร์ชันโปรโตคอล อุปกรณ์ที่
รองรับฟีเจอร์เพิ่มเติมใน AOAv2 จะต้องแสดงผล 2
เป็น
เวอร์ชันโปรโตคอล AOAv2 เข้ากันได้แบบย้อนหลังกับ AOAv1 ดังนั้นอุปกรณ์เสริม
ที่ออกแบบมาสำหรับโปรโตคอลอุปกรณ์เสริมเดิมจะยังคงใช้งานได้กับ Android รุ่นใหม่กว่า
อุปกรณ์
ตัวอย่างต่อไปนี้จากชุดเครื่องมือพัฒนาอุปกรณ์เสริม 2011
ซอร์สโค้ด
(<adk-src>/adk1/board/AndroidAccessory/AndroidAccessory.cpp
)
ของไลบรารีสาธิตการตรวจสอบโปรโตคอลนี้:
bool AndroidAccessory::switchDevice(byte addr) { int protocol = getProtocol(addr); if (protocol >= 1) { Serial.print("device supports protocol 1 or higher\n"); } else { Serial.print("could not read device protocol version\n"); return false; } sendString(addr, ACCESSORY_STRING_MANUFACTURER, manufacturer); sendString(addr, ACCESSORY_STRING_MODEL, model); sendString(addr, ACCESSORY_STRING_DESCRIPTION, description); sendString(addr, ACCESSORY_STRING_VERSION, version); sendString(addr, ACCESSORY_STRING_URI, uri); sendString(addr, ACCESSORY_STRING_SERIAL, serial); usb.ctrlReq(addr, 0, USB_SETUP_HOST_TO_DEVICE | USB_SETUP_TYPE_VENDOR | USB_SETUP_RECIPIENT_DEVICE, ACCESSORY_START, 0, 0, 0, 0, NULL); return true; }
AOAv2 มีรหัสผลิตภัณฑ์ USB ใหม่สำหรับอินเทอร์เฟซ USB แต่ละชุด ที่พร้อมใช้งานในโหมดอุปกรณ์เสริม:
เวอร์ชัน | รหัสผลิตภัณฑ์ | การสื่อสาร | คำอธิบาย |
---|---|---|---|
AOAv1 | 0x2D00 |
เครื่องประดับ | มีปลายทาง 2 จุดสำหรับการสื่อสารกับแอป Android |
0x2D01 |
อุปกรณ์เสริม + adb | เพื่อวัตถุประสงค์ในการแก้ไขข้อบกพร่องในระหว่างการพัฒนาอุปกรณ์เสริม ใช้ได้เฉพาะเมื่อ ผู้ใช้ได้เปิดใช้การแก้ไขข้อบกพร่องผ่าน USB ในการตั้งค่าอุปกรณ์ Android | |
AOAv2 | 0x2D02 |
เสียง | สำหรับการสตรีมเสียงจากอุปกรณ์ Android ไปยังอุปกรณ์เสริม |
0x2D03 |
เสียง + adb | ||
0x2D04 |
อุปกรณ์เสริม + เสียง | ||
0x2D05 |
อุปกรณ์เสริม + เสียง + adb |
รหัสผลิตภัณฑ์ที่ใช้ใน AOAv1 (0x2D00
และ 0x2D01
)
จะได้รับการรองรับใน AOAv2 ต่อไป
การรองรับเสียง
AOAv2 รองรับเอาต์พุตเสียงจากอุปกรณ์ Android ไปยัง อุปกรณ์เสริมผ่านอินเทอร์เฟซ USB Audio Class มาตรฐานที่รองรับ 2 ช่องสัญญาณ 16 บิต เสียง PCM ที่มีอัตราบิต 44,100 Khz (สามารถเพิ่มโหมดเสียงเพิ่มเติมใน ในอนาคต)
หากต้องการเปิดใช้การสนับสนุนเสียง อุปกรณ์เสริมต้องส่งคำขอการควบคุม USB ใหม่ โดยทำดังนี้
**SET_AUDIO_MODE** requestType: USB_DIR_OUT | USB_TYPE_VENDOR request: 58 value: 0 for no audio (default), 1 for 2 channel, 16-bit PCM at 44100 KHz index: 0 data none
คุณต้องส่งคำสั่งนี้ก่อนส่ง
คำสั่ง ACCESSORY_START
สำหรับการเข้าสู่โหมดอุปกรณ์เสริม
การรองรับ HID
AOAv2 อนุญาตให้อุปกรณ์เสริมลงทะเบียน USB Human Interface หนึ่งหรือหลายรายการ อุปกรณ์ (HID) กับอุปกรณ์ Android วิธีนี้กลับทิศทางของ การสื่อสารสำหรับอุปกรณ์ USB HID ทั่วไป เช่น เมาส์และแป้นพิมพ์ USB โดยปกติแล้ว อุปกรณ์ HID คืออุปกรณ์ต่อพ่วงที่เชื่อมต่อกับโฮสต์ USB (ได้แก่ คอมพิวเตอร์ส่วนบุคคล) แต่ใน AOA โฮสต์ USB สามารถทำหน้าที่เป็นอินพุต เข้ากับอุปกรณ์ต่อพ่วง USB
การสนับสนุน HID เป็นพร็อกซีสำหรับเหตุการณ์ HID มาตรฐาน เวลา ไม่ต้องอาศัยสมมติฐานเกี่ยวกับเนื้อหาหรือประเภทของเหตุการณ์และ เพียงส่งผ่านไปยังระบบอินพุต ทำให้อุปกรณ์เสริม AOAv2 สามารถ ทำหน้าที่เป็นอุปกรณ์ HID (เมาส์ แป้นพิมพ์ เกมคอนโทรลเลอร์ ฯลฯ) คุณใช้ HID ได้ รองรับฟังก์ชันการทำงานพื้นฐาน เช่น ปุ่มเล่น/หยุดชั่วคราวบนสื่อ หรือสำหรับฟังก์ชันการทำงานขั้นสูง เช่น อุปกรณ์เพิ่มพอร์ตเชื่อมต่อด้วยเมาส์และ แป้นพิมพ์ QWERTY เต็มรูปแบบ
AOAv2 เพิ่มคำขอการควบคุม USB ใหม่ที่ช่วยให้อุปกรณ์เสริมสามารถทำงานได้ ใช้อุปกรณ์อินพุต HID อย่างน้อย 1 เครื่องกับอุปกรณ์ Android ดำเนินการรองรับ HID แล้ว ผ่านคำขอควบคุมที่ปลายทาง 0 จึงไม่มีอินเทอร์เฟซ USB ใหม่ ที่จำเป็น คำขอการควบคุมใหม่ 4 รายการมีดังนี้
- ACCESSORY_REGISTER_HID ลงทะเบียนอุปกรณ์ HID ใหม่ด้วยฟังก์ชัน
อุปกรณ์ Android อุปกรณ์เสริมให้รหัสที่ใช้ระบุอุปกรณ์ HID สำหรับ
การโทรอีก 3 ครั้ง รหัสนี้จะใช้ได้จนกว่า USB จะตัดการเชื่อมต่อ หรือจนกว่า
อุปกรณ์เสริมส่ง
ACCESSORY_UNREGISTER_HID
เพื่อยกเลิกการลงทะเบียน HID อุปกรณ์ - ACCESSORY_UNREGISTER_HID ยกเลิกการลงทะเบียนอุปกรณ์ HID
เคยลงทะเบียนกับ
ACCESSORY_REGISTER_HID
- ACCESSORY_SET_HID_REPORT_DESC ส่งข้อบ่งชี้รายงานสำหรับ
อุปกรณ์ HID กับอุปกรณ์ Android คำขอนี้ใช้เพื่ออธิบาย
ความสามารถของอุปกรณ์ HID และต้องส่งก่อนที่จะรายงานเหตุการณ์ HID
ในอุปกรณ์ Android หากข้อบ่งชี้รายงานมากกว่าค่าสูงสุด
ขนาดแพ็กเก็ตสำหรับปลายทาง 0, หลายรายการ
ระบบจะส่งคำสั่ง
ACCESSORY_SET_HID_REPORT_DESC
รายการเพื่อโอน ข้อบ่งชี้ทั้งหมด - ACCESSORY_SEND_HID_EVENT จะส่งเหตุการณ์อินพุตจาก เป็นอุปกรณ์เสริมสำหรับอุปกรณ์ Android
คำจำกัดความของโค้ดสำหรับคำขอควบคุมใหม่มีดังนี้
/* Control request for registering a HID device. * Upon registering, a unique ID is sent by the accessory in the * value parameter. This ID will be used for future commands for * the device * * requestType: USB_DIR_OUT | USB_TYPE_VENDOR * request: ACCESSORY_REGISTER_HID_DEVICE * value: Accessory assigned ID for the HID device * index: total length of the HID report descriptor * data none */ #define ACCESSORY_REGISTER_HID 54 /* Control request for unregistering a HID device. * * requestType: USB_DIR_OUT | USB_TYPE_VENDOR * request: ACCESSORY_REGISTER_HID * value: Accessory assigned ID for the HID device * index: 0 * data none */ #define ACCESSORY_UNREGISTER_HID 55 /* Control request for sending the HID report descriptor. * If the HID descriptor is longer than the endpoint zero max packet size, * the descriptor will be sent in multiple ACCESSORY_SET_HID_REPORT_DESC * commands. The data for the descriptor must be sent sequentially * if multiple packets are needed. * * requestType: USB_DIR_OUT | USB_TYPE_VENDOR * request: ACCESSORY_SET_HID_REPORT_DESC * value: Accessory assigned ID for the HID device * index: offset of data in descriptor * (needed when HID descriptor is too big for one packet) * data the HID report descriptor */ #define ACCESSORY_SET_HID_REPORT_DESC 56 /* Control request for sending HID events. * * requestType: USB_DIR_OUT | USB_TYPE_VENDOR * request: ACCESSORY_SEND_HID_EVENT * value: Accessory assigned ID for the HID device * index: 0 * data the HID report for the event */ #define ACCESSORY_SEND_HID_EVENT 57
ความสามารถในการทำงานร่วมกับ AOAv1
โปรโตคอลเดิม (AOAv1) ให้การสนับสนุนแอป Android ในการสื่อสารกับ USB โดยตรง โฮสต์ (อุปกรณ์เสริม) ผ่านทาง USB AOAv2 จะยังคงให้การสนับสนุนต่อไปและเพิ่มฟีเจอร์ใหม่ เพื่อให้อุปกรณ์เสริมสื่อสารกับระบบปฏิบัติการ Android ได้ (โดยเฉพาะระบบเสียงและอินพุต) การออกแบบของ AOAv2 เป็นไปได้ที่จะสร้างอุปกรณ์เสริมที่ใช้การสนับสนุนเสียงและ HID ใหม่ นอกเหนือจากชุดฟีเจอร์เดิม เพียงใช้คุณสมบัติใหม่ คุณลักษณะดั้งเดิม
เชื่อมต่อ AOAv2 โดยไม่มี แอป Android
คุณสามารถออกแบบอุปกรณ์เสริม (เช่น แท่นชาร์จเสียง) ที่ใช้เสียงและ HID ได้ รองรับแต่ไม่สื่อสารกับแอปในอุปกรณ์ Android สำหรับ อุปกรณ์เสริมเหล่านี้ ผู้ใช้จึงไม่ต้องรับข้อความแจ้งของกล่องโต้ตอบสำหรับการค้นหาและ กำลังเชื่อมโยงอุปกรณ์เสริมที่เพิ่งเชื่อมต่อกับแอป Android ที่สามารถ สื่อสารกับสิ่งนั้น
ในการระงับกล่องโต้ตอบดังกล่าวหลังจากเชื่อมต่ออุปกรณ์เสริม อุปกรณ์เสริมสามารถเลือกที่จะไม่ส่งชื่อผู้ผลิตและชื่อรุ่นไปยัง Android อุปกรณ์ หากไม่มีสตริงเหล่านี้ในอุปกรณ์ Android
- ระบบจะไม่พยายามค้นหาแอปเพื่อสื่อสารกับอุปกรณ์เสริม
- อินเทอร์เฟซ USB ของอุปกรณ์เสริมไม่มีอยู่ใน USB ของอุปกรณ์ Android การกำหนดค่าหลังจากที่อุปกรณ์เข้าสู่โหมดอุปกรณ์เสริมแล้ว