Các phụ kiện USB Android phải tuân thủ Phụ kiện mở Android (AOA) giao thức, xác định cách một phụ kiện phát hiện và thiết lập giao tiếp với một thiết bị chạy Android. Phụ kiện cần thực hiện các bước sau:
- Chờ và phát hiện một thiết bị đã kết nối.
- Xác định khả năng hỗ trợ chế độ phụ kiện của thiết bị.
- Thử khởi động thiết bị ở chế độ phụ kiện (nếu cần).
- Nếu thiết bị hỗ trợ AOA, hãy thiết lập hoạt động giao tiếp với thiết bị.
Các phần sau đây giải thích cách triển khai các bước này.
Chờ và phát hiện thiết bị đã kết nối thiết bị
Phụ kiện phải liên tục kiểm tra để tìm các thiết bị chạy Android đã kết nối. Khi một thiết bị được kết nối, phụ kiện phải xác định xem thiết bị có hỗ trợ chế độ phụ kiện.
Xác định khả năng hỗ trợ chế độ phụ kiện
Lưu ý: Bạn không bắt buộc phải gỡ lỗi qua USB để kết nối các phụ kiện, nhưng Có thể cần ADB trong quá trình phát triển. Để biết thông tin chi tiết, hãy xem Những điểm cần cân nhắc khi gỡ lỗi.
Khi một thiết bị chạy Android kết nối, thiết bị đó có thể ở một trong 3 trạng thái:
- Hỗ trợ chế độ phụ kiện Android và đã ở chế độ phụ kiện.
- Hỗ trợ chế độ phụ kiện Android nhưng không hỗ trợ chế độ phụ kiện.
- Không hỗ trợ chế độ phụ kiện Android.
Trong lần kết nối đầu tiên, phụ kiện phải kiểm tra phiên bản, mã nhà cung cấp,
và mã sản phẩm của mã mô tả thiết bị USB của thiết bị đã kết nối. Mã nhà cung cấp
phải khớp với mã của Google (0x18D1
). Nếu thiết bị đã được bật
chế độ phụ kiện, mã sản phẩm phải là 0x2D00
hoặc
0x2D01
và phụ kiện có thể
thiết lập liên lạc với
thiết bị thông qua các điểm cuối chuyển hàng loạt bằng phương thức giao tiếp riêng
giao thức (thiết bị không cần khởi động ở chế độ phụ kiện).
Lưu ý: 0x2D00
dành riêng cho
Thiết bị chạy Android có hỗ trợ chế độ phụ kiện. 0x2D01
là
dành riêng cho những thiết bị hỗ trợ chế độ phụ kiện cũng như Trình gỡ lỗi Android
Giao thức cầu nối (ADB) hiển thị giao diện thứ hai với 2 điểm cuối hàng loạt
cho ADB. Bạn có thể sử dụng các điểm cuối này để gỡ lỗi ứng dụng phụ kiện nếu
bạn đang mô phỏng phụ kiện trên máy tính. Nói chung, không sử dụng
trừ phi phụ kiện triển khai chức năng truyền qua ADB trên thiết bị.
Nếu phiên bản, mã nhà cung cấp hoặc mã sản phẩm trong bộ mô tả thiết bị USB không khớp với các giá trị dự kiến nên phụ kiện không thể xác định xem thiết bị có hỗ trợ hay không Chế độ phụ kiện Android. Phụ kiện nên tìm cách khởi động thiết bị sau chế độ phụ kiện (chi tiết bên dưới) để xác định khả năng hỗ trợ thiết bị.
Lưu ý quan trọng: Phụ kiện USB phải gửi một tiêu đề khi bắt tay ban đầu. Tiêu đề chứa nhà sản xuất, kiểu máy và . Mặc dù phiên bản là trường không bắt buộc, nhưng nếu một ứng dụng Android được cài đặt thì chỉ khớp với phiên bản, nhưng phụ kiện không gửi phiên bản, thiết bị Android chạy trên Android 10 trở xuống sẽ khởi động lại do có một ngoại lệ được gửi tiến trình hệ thống.
Cố gắng bắt đầu trong phụ kiện chế độ
Nếu phiên bản, nhà cung cấp và mã sản phẩm không tương ứng với một thiết bị ở chế độ phụ kiện thì phụ kiện đó không thể xác định xem thiết bị có hỗ trợ hay không (nhưng không ở) chế độ phụ kiện hoặc nếu thiết bị không hỗ trợ chế độ phụ kiện. Chiến dịch này có thể xảy ra vì các thiết bị hỗ trợ chế độ phụ kiện (nhưng không hỗ trợ chế độ này) chế độ) báo cáo ban đầu về mã sản phẩm và mã nhà sản xuất thiết bị thay vì mã sản phẩm và mã nhà cung cấp AOA.
Phụ kiện nên cố khởi động thiết bị ở chế độ phụ kiện để xác định nếu thiết bị hỗ trợ chế độ đó:
- Gửi yêu cầu kiểm soát 51 ("Nhận giao thức") để xác định xem thiết bị
hỗ trợ giao thức phụ kiện Android. Nếu thiết bị hỗ trợ giao thức,
phương thức này sẽ trả về một số khác 0 đại diện cho phiên bản giao thức được hỗ trợ.
Yêu cầu điều khiển nằm trên điểm cuối 0 có các đặc điểm sau đây:
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)
- Nếu thiết bị trả về một phiên bản giao thức được hỗ trợ, hãy gửi một yêu cầu kiểm soát
với thông tin chuỗi nhận dạng thiết bị. Thông tin này cho phép
để xác định ứng dụng phù hợp cho phụ kiện (hoặc trình bày
URL tới người dùng nếu không tồn tại ứng dụng phù hợp). Nhóm đối chứng
yêu cầu trên điểm cuối 0 (đối với mỗi mã nhận dạng chuỗi) với các thông tin sau
đặc điểm:
requestType: USB_DIR_OUT | USB_TYPE_VENDOR request: 52 value: 0 index: string ID data zero terminated UTF8 string sent from accessory to device
Các mã nhận dạng chuỗi sau được hỗ trợ, với kích thước tối đa là 256 byte cho từng chuỗi (phải kết thúc bằng 0 bằng
\0
).manufacturer name: 0 model name: 1 description: 2 version: 3 URI: 4 serial number: 5
- Gửi yêu cầu điều khiển để đề nghị thiết bị khởi động ở chế độ phụ kiện. Chiến lược phát hành đĩa đơn
yêu cầu điều khiển nằm trên điểm cuối 0 có các đặc điểm sau:
requestType: USB_DIR_OUT | USB_TYPE_VENDOR request: 53 value: 0 index: 0 data: none
Sau khi hoàn tất các bước này, phụ kiện sẽ đợi USB được kết nối thiết bị giới thiệu lại trên xe buýt ở chế độ phụ kiện, sau đó liệt kê lại thiết bị thông minh. Thuật toán xác định khả năng hỗ trợ chế độ phụ kiện bằng cách kiểm tra mã nhà cung cấp và mã sản phẩm. Mã này phải chính xác (ví dụ: tương ứng vào mã sản phẩm và mã nhà cung cấp của Google thay vì mã của nhà sản xuất thiết bị) đã chuyển thiết bị sang chế độ phụ kiện. Nếu mã nhận dạng và phiên bản là chính xác, phụ kiện chuyển sang trạng thái thiết lập giao tiếp với thiết bị.
Lưu ý: AOA hiện không hỗ trợ các kết nối AOA và MTP đồng thời. Để chuyển từ AOA sang MTP, phụ kiện trước tiên phải ngắt kết nối thiết bị USB (dù là thiết bị vật lý hay thiết bị điện tương đương) rồi kết nối lại bằng MTP.
Nếu có bước nào không thành công, phụ kiện sẽ xác định rằng thiết bị không hỗ trợ Chế độ phụ kiện Android và chờ thiết bị tiếp theo kết nối.
Thiết lập liên lạc với thiết bị
Nếu phụ kiện phát hiện thấy một thiết bị chạy Android ở chế độ phụ kiện, thì phụ kiện có thể truy vấn giao diện thiết bị và mã mô tả điểm cuối để lấy thông tin các điểm cuối hàng loạt để giao tiếp với thiết bị.
Số lượng giao diện và điểm cuối hàng loạt phụ thuộc vào mã sản phẩm. Một Thiết bị chạy Android có mã sản phẩm là:
0x2D00
có một giao diện có 2 điểm cuối hàng loạt để nhập dữ liệu và giao tiếp đầu ra.0x2D01
có hai giao diện, trong đó mỗi giao diện có hai điểm cuối hàng loạt dành cho giao tiếp đầu vào và đầu ra. Giao diện đầu tiên xử lý các tiêu chuẩn giao tiếp thứ hai sẽ xử lý giao tiếp ADB. Để sử dụng giao diện, xác định điểm cuối đầu vào và đầu ra hàng loạt đầu tiên, đặt giá trị cấu hình thiết bị thành giá trị 1 thông quaSET_CONFIGURATION
(0x09
) yêu cầu thiết bị, sau đó giao tiếp bằng các điểm cuối.