Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

Android Open Accessory Protocol 1.0

Phụ kiện USB Android phải tuân theo giao thức Android Open Accessory (AOA), giao thức này xác định cách phụ kiện phát hiện và thiết lập giao tiếp với thiết bị hỗ trợ Android. Phụ kiện phải thực hiện các bước sau:

  1. Chờ và phát hiện một thiết bị được kết nối.
  2. Xác định hỗ trợ chế độ phụ kiện của thiết bị.
  3. Cố gắng khởi động thiết bị ở chế độ phụ kiện (nếu cần).
  4. Nếu thiết bị hỗ trợ AOA, hãy thiết lập giao tiếp với thiết bị.

Các phần sau đây giải thích cách thực hiện các bước này.

Chờ và phát hiện các thiết bị được kết nối

Các phụ kiện phải liên tục kiểm tra các thiết bị hỗ trợ Android được kết nối. Khi một thiết bị được kết nối, phụ kiện sẽ xác định xem thiết bị có hỗ trợ chế độ phụ kiện hay không.

Xác định hỗ trợ chế độ phụ kiện

Khi một thiết bị hỗ trợ Android kết nối, nó có thể ở một trong ba 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 nó không ở chế độ phụ kiện.
  • Không hỗ trợ chế độ phụ kiện Android.

Trong quá trình kết nối ban đầu, phụ kiện phải kiểm tra phiên bản, ID nhà cung cấp và ID sản phẩm của bộ mô tả thiết bị USB của thiết bị được kết nối. ID nhà cung cấp phải khớp với ID của Google ( 0x18D1 ). Nếu thiết bị đã ở chế độ phụ kiện, ID sản phẩm phải là 0x2D00 hoặc 0x2D01 và phụ kiện có thể thiết lập giao tiếp với thiết bị thông qua các điểm cuối chuyển hàng loạt bằng giao thức giao tiếp của riêng nó (thiết bị không cần khởi động ở chế độ phụ kiện).

Lưu ý: 0x2D00 được dành riêng cho các thiết bị chạy Android có hỗ trợ chế độ phụ kiện. 0x2D01 được dành riêng cho các thiết bị hỗ trợ chế độ phụ kiện cũng như giao thức Cầu gỡ lỗi Android (ADB), giao diện này hiển thị giao diện thứ hai với hai đ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 giao diện này trừ khi phụ kiện thực hiện chuyển qua ADB trên thiết bị.

Nếu phiên bản, ID nhà cung cấp hoặc ID sản phẩm trong bộ mô tả thiết bị USB không khớp với các giá trị mong đợi, phụ kiện không thể xác định xem thiết bị có hỗ trợ chế độ phụ kiện Android hay không. Phụ kiện phải cố gắng khởi động thiết bị ở chế độ phụ kiện (chi tiết bên dưới) để xác định hỗ trợ thiết bị.

Điểm mấu chốt: Phụ kiện USB phải gửi tiêu đề khi bắt tay lần đầu. Tiêu đề chứa nhà sản xuất, kiểu máy và phiên bản. Mặc dù phiên bản là trường tùy chọn, nếu ứng dụng Android được cài đặt chỉ khớp trên phiên bản nhưng phụ kiện không gửi phiên bản, thì các 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ệ trong quy trình hệ thống.

Cố gắng bắt đầu ở chế độ phụ kiện

Nếu phiên bản, nhà cung cấp và ID sản phẩm không tương ứng với thiết bị chạy Android ở chế độ phụ kiện, phụ kiện sẽ không thể xác định xem thiết bị có hỗ trợ (nhưng không ở) chế độ phụ kiện hay thiết bị không hỗ trợ chế độ phụ kiện. Điều này có thể xảy ra do các thiết bị hỗ trợ chế độ phụ kiện (nhưng không ở chế độ phụ kiện) ban đầu báo cáo nhà sản xuất thiết bị và ID sản phẩm thay vì ID sản phẩm và nhà cung cấp AOA .

Phụ kiện nên thử khởi động thiết bị ở chế độ phụ kiện để xác định xem thiết bị có hỗ trợ chế độ đó hay không:

  1. Gửi yêu cầu kiểm soát 51 ("Nhận giao thức") để xác định xem thiết bị có hỗ trợ giao thức phụ kiện Android hay không. Nếu thiết bị hỗ trợ giao thức, nó 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 với các đặc điểm sau:
    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. Nếu thiết bị trả về phiên bản giao thức được hỗ trợ, hãy gửi yêu cầu kiểm soát với thông tin chuỗi nhận dạng tới thiết bị. Thông tin này cho phép thiết bị xác định ứng dụng thích hợp cho phụ kiện (hoặc hiển thị URL cho người dùng nếu ứng dụng thích hợp không tồn tại). Yêu cầu điều khiển nằm trên điểm cuối 0 (cho mỗi ID chuỗi) với các đặc điểm sau:
    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 ID chuỗi sau được hỗ trợ, với kích thước tối đa là 256 byte cho mỗi chuỗi (phải được 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
    
  3. Gửi yêu cầu điều khiển để yêu cầu thiết bị khởi động ở chế độ phụ kiện. Yêu cầu điều khiển nằm trên điểm cuối 0 với 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 thành các bước này, phụ kiện phải đợi thiết bị USB được kết nối tự giới thiệu lại trên xe buýt ở chế độ phụ kiện, sau đó liệt kê lại các thiết bị đã kết nối. Thuật toán xác định hỗ trợ chế độ phụ kiện bằng cách kiểm tra nhà cung cấp và ID sản phẩm, phải chính xác (ví dụ: tương ứng với nhà cung cấp và ID sản phẩm của Google thay vì ID của nhà sản xuất thiết bị) nếu thiết bị chuyển sang chế độ phụ kiện thành công. Nếu ID và phiên bản chính xác, phụ kiện sẽ di chuyển để thiết lập giao tiếp với thiết bị .

Lưu ý: AOA hiện không hỗ trợ kết nối AOA và MTP đồng thời. Để chuyển từ AOA sang MTP, trước tiên phụ kiện phải ngắt kết nối thiết bị USB (vật lý hoặc theo cách tương đương về điện), sau đó kết nối lại bằng MTP.

Nếu bất kỳ bước nào không thành công, phụ kiện xác định 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 giao tiếp với thiết bị

Nếu phụ kiện phát hiện thiết bị hỗ trợ Android ở chế độ phụ kiện, phụ kiện có thể truy vấn giao diện thiết bị và các bộ mô tả điểm cuối để có được hàng loạt điểm cuối để giao tiếp với thiết bị.

Số lượng giao diện và số lượng lớn điểm cuối phụ thuộc vào ID sản phẩm. Thiết bị hỗ trợ Android có ID sản phẩm là:

  • 0x2D00 có một giao diện với hai điểm cuối số lượng lớn để giao tiếp đầu vào và đầu ra.
  • 0x2D01 có hai giao diện với hai điểm cuối số lượng lớn mỗi giao tiếp đầu vào và đầu ra. Giao diện đầu tiên xử lý giao tiếp tiêu chuẩn và giao diện thứ hai xử lý giao tiếp ADB. Để sử dụng giao diện, hãy định vị điểm cuối đầu vào và đầu ra hàng loạt đầu tiên, đặt cấu hình thiết bị thành giá trị 1 với yêu cầu thiết bị SET_CONFIGURATION ( 0x09 ), sau đó giao tiếp bằng cách sử dụng các điểm cuối.