Tài liệu này mô tả những thay đổi trong giao thức Phụ kiện mở Android (AOA) kể từ lần đầu phát hành và dùng thực phẩm bổ sung Tài liệu về AOA 1.0. AOAv2 sẽ thêm các tính năng sau:
- Đầu ra âm thanh (không dùng nữa trong Android 8.0).
- Hỗ trợ phụ kiện hoạt động như một hoặc nhiều thiết bị có giao diện dành cho con người (HID) sang thiết bị Android.
API Android SDK dành cho nhà phát triển ứng dụng Android không thay đổi.
Phát hiện tính năng hỗ trợ AOAv2
Để xác định xem một thiết bị Android đã kết nối có hỗ trợ các phụ kiện và
phiên bản giao thức được hỗ trợ, phụ kiện phải gửi một getProtocol()
và kiểm tra kết quả. Thiết bị Android chỉ hỗ trợ các tính năng
trong AOAv1 phải trả về 1
làm phiên bản giao thức; các thiết bị
hỗ trợ các tính năng bổ sung trong AOAv2 phải trả về 2
dưới dạng
phiên bản giao thức. AOAv2 tương thích ngược với AOAv1, vì vậy, các phụ kiện
được thiết kế cho giao thức phụ kiện ban đầu sẽ tiếp tục hoạt động với các thiết bị Android mới hơn
thiết bị.
Ví dụ sau trong Bộ phát triển phụ kiện năm 2011
mã nguồn
(<adk-src>/adk1/board/AndroidAccessory/AndroidAccessory.cpp
)
thư viện minh hoạ việc kiểm tra giao thức này:
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 cung cấp mã sản phẩm USB mới cho từng tổ hợp giao diện USB có ở chế độ phụ kiện:
Phiên bản | Mã sản phẩm | Liên lạc | Mô tả |
---|---|---|---|
AOAv1 | 0x2D00 |
phụ kiện | Cung cấp 2 điểm cuối hàng loạt để giao tiếp với ứng dụng Android. |
0x2D01 |
phụ kiện + adb | Dành cho mục đích gỡ lỗi trong quá trình phát triển phụ kiện. Chỉ có sẵn nếu người dùng đã bật tính năng Gỡ lỗi qua USB trong phần cài đặt thiết bị Android. | |
AOAv2 | 0x2D02 |
âm thanh | Để truyền trực tuyến âm thanh từ thiết bị Android đến một phụ kiện. |
0x2D03 |
âm thanh + adb | ||
0x2D04 |
phụ kiện + âm thanh | ||
0x2D05 |
phụ kiện + âm thanh + adb |
Mã sản phẩm dùng trong AOAv1 (0x2D00
và 0x2D01
)
tiếp tục được hỗ trợ trong AOAv2.
Hỗ trợ âm thanh
AOAv2 bao gồm tính năng hỗ trợ đầu ra âm thanh từ thiết bị Android đến phụ kiện qua giao diện lớp âm thanh USB tiêu chuẩn có khả năng 2 kênh, 16 bit Âm thanh PCM với tốc độ bit 44100 Khz (có thể thêm các chế độ âm thanh khác trong tương lai).
Để bật tính năng hỗ trợ âm thanh, phụ kiện phải gửi một yêu cầu điều khiển USB mới:
**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
Bạn phải gửi lệnh này trước khi gửi
Lệnh ACCESSORY_START
để chuyển sang chế độ phụ kiện.
Hỗ trợ HID
AOAv2 cho phép các phụ kiện đăng ký một hoặc nhiều Giao diện người dùng USB Thiết bị (HID) có thiết bị Android. Phương pháp này đảo ngược xu hướng của hoạt động giao tiếp của các thiết bị USB HID thông thường như chuột và bàn phím USB. Thông thường, thiết bị HID là thiết bị ngoại vi được kết nối với máy chủ USB (ví dụ: máy tính cá nhân), nhưng trong AOA, máy chủ USB có thể đóng vai trò là một hoặc nhiều đầu vào thiết bị sang thiết bị ngoại vi USB.
Hỗ trợ HID là một proxy cho các sự kiện HID tiêu chuẩn; thời gian không đưa ra giả định nào về nội dung hoặc loại sự kiện và chỉ cần truyền dữ liệu đó đến hệ thống đầu vào, cho phép phụ kiện AOAv2 hoạt động như bất kỳ thiết bị HID nào (chuột, bàn phím, tay điều khiển trò chơi, v.v.). Bạn có thể dùng HID hỗ trợ để cung cấp chức năng cơ bản, chẳng hạn như nút phát/tạm dừng trên nội dung nghe nhìn đế sạc hoặc cho chức năng nâng cao như đế sạc có chuột và bàn phím QWERTY đầy đủ.
AOAv2 bổ sung các yêu cầu mới về việc điều khiển USB để cho phép phụ kiện hoạt động như một hoặc nhiều thiết bị đầu vào HID sang thiết bị Android. Đã xử lý chế độ hỗ trợ HID hoàn toàn thông qua các yêu cầu điều khiển trên điểm cuối số 0, vì vậy sẽ không có giao diện USB mới nào cần thiết. Bốn yêu cầu kiểm soát mới là:
- ACCESSORY_REGISTER_HID đăng ký một thiết bị HID mới bằng
Thiết bị Android. Phụ kiện này cung cấp mã nhận dạng dùng để nhận dạng thiết bị HID cho
3 cuộc gọi còn lại. Mã này có hiệu lực cho đến khi USB ngắt kết nối hoặc
phụ kiện gửi
ACCESSORY_UNREGISTER_HID
để huỷ đăng ký HID thiết bị. - ACCESSORY_UNREGISTER_HID huỷ đăng ký một thiết bị HID
đã đăng ký trước đó với
ACCESSORY_REGISTER_HID
. - ACCESSORY_SET_HID_REPORT_DESC gửi mã mô tả báo cáo cho
một thiết bị HID sang thiết bị Android. Yêu cầu này được dùng để mô tả
các chức năng của thiết bị HID và phải được gửi trước khi báo cáo bất kỳ sự kiện HID nào
thiết bị Android. Nếu phần mô tả báo cáo lớn hơn giá trị tối đa
kích thước gói cho điểm cuối bằng 0, bội số
ACCESSORY_SET_HID_REPORT_DESC
lệnh được gửi để chuyển toàn bộ phần mô tả. - ACCESSORY_SEND_HID_EVENT gửi sự kiện đầu vào từ phụ kiện cho thiết bị Android.
Dưới đây là các định nghĩa mã cho các yêu cầu kiểm soát mới:
/* 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
Khả năng tương tác với AOAv1
Giao thức ban đầu (AOAv1) cung cấp tính năng hỗ trợ để ứng dụng Android giao tiếp trực tiếp qua USB máy chủ lưu trữ (phụ kiện) qua USB. AOAv2 tiếp tục hỗ trợ và bổ sung các tính năng mới để cho phép phụ kiện tự giao tiếp với hệ điều hành Android (cụ thể là hệ thống âm thanh và đầu vào). Thiết kế của AOAv2 khiến nó có thể xây dựng một phụ kiện sử dụng tính năng hỗ trợ HID và âm thanh mới bên cạnh bộ tính năng ban đầu. Bạn chỉ cần sử dụng các tính năng mới cùng với các tính năng ban đầu.
Kết nối AOAv2 mà không có Ứng dụng cho Android
Bạn có thể thiết kế một phụ kiện (chẳng hạn như đế âm thanh) sử dụng âm thanh và HID nhưng không giao tiếp được với một ứng dụng trên thiết bị Android. Cho các phụ kiện này, người dùng không cần nhận lời nhắc qua hộp thoại để tìm và liên kết phụ kiện mới gắn với một ứng dụng Android có thể giao tiếp với thiết bị đó.
Để loại bỏ những hộp thoại như vậy sau khi một phụ kiện được kết nối, phụ kiện có thể chọn không gửi tên nhà sản xuất và kiểu máy cho thiết bị Android thiết bị. Khi bạn không cung cấp những chuỗi này cho thiết bị Android:
- Hệ thống không cố gắng tìm ứng dụng để giao tiếp với phụ kiện.
- Giao diện USB của phụ kiện không có trong USB của thiết bị Android cấu hình sau khi thiết bị chuyển sang chế độ phụ kiện.