Chuyển đổi âm thanh
Vì người dùng ngày càng sử dụng nhiều thiết bị nguồn âm thanh để thực hiện công việc hằng ngày, thì nhu cầu tìm một giải pháp đơn giản hơn để quản lý tai nghe đang gia tăng sử dụng trên nhiều thiết bị. Công tắc âm thanh giúp chuyển đổi liền mạch các kết nối tai nghe giữa các thiết bị dựa trên hoạt động của người dùng (ví dụ: bắt đầu xem phim) và được ưu tiên sự kiện (ví dụ: cuộc gọi đến).
Nguyên tắc về trải nghiệm người dùng
- Quá trình chuyển đổi kết nối phải diễn ra nhanh chóng và dựa vào thao tác của người dùng.
- Việc chuyển đổi kết nối phải minh bạch với người dùng để người dùng có thể kiểm soát/huỷ kích hoạt nếu việc chuyển đổi là không mong muốn.
- Quá trình chuyển đổi phải tôn trọng quyền riêng tư của người dùng.
Vai trò
Audio Switch Seeker (Trình tìm kiếm công tắc âm thanh): Thiết bị này là một thiết bị nguồn âm thanh (ví dụ: điện thoại hoặc máy tính bảng), tìm kiếm tai nghe ở gần để kết nối khi có thể.
Nhà cung cấp công tắc âm thanh: Nhà cung cấp thường là tai nghe quảng cáo sự hiện diện và trạng thái kết nối để Người tìm kiếm đưa ra quyết định chuyển đổi.
Tổng quan về các yêu cầu
Để sử dụng tính năng chuyển đổi thông minh, Nhà cung cấp phải tuân thủ các yêu cầu sau:
Tên | Mô tả | Yêu cầu | Bắt buộc? |
---|---|---|---|
Quét trang | Để chấp nhận yêu cầu kết nối mới từ một Trình tìm kiếm khác khi đã có kết nối. Đối với Nhà cung cấp một điểm:
|
Cần có chế độ quét trang có độ trễ thấp (khoảng thời gian quét không được lớn hơn 640 mili giây) để cải thiện hiệu suất. Để cân bằng giữa thời lượng pin và hiệu suất chuyển đổi, Nhà cung cấp có thể đặt chế độ quét trang mặc định cho hầu hết các trường hợp (chế độ công suất thấp, khoảng thời gian quét không được lớn hơn 1280 mili giây). Tuy nhiên, bạn phải sử dụng chế độ độ trễ thấp trong các trường hợp sau:
|
Bắt buộc |
Nhật ký kết nối | Để chuyển về kết nối trước và tiếp tục phát nếu có thể. Việc chuyển trở lại sẽ được kích hoạt bởi thông tin liên lạc qua API Luồng tin nhắn. Sự kiện âm thanh đang tạm dừng phải được đưa vào bản ghi để tiếp tục phát nếu có. |
Duy trì lịch sử kết nối và triển khai các API Luồng thông báo. | Bắt buộc |
Trạng thái kết nối | Để Người tìm kiếm có thể đánh giá việc chuyển đổi kết nối.Trạng thái kết nối bao gồm:
|
Bao gồm trạng thái kết nối trong Quảng cáo BLE và Luồng tin nhắn. | Bắt buộc |
Thay đổi các chức năng trong thời gian chạy | Bạn có thể bật tính năng chuyển đổi âm thanh bằng cách nâng cấp chương trình cơ sở trên Nhà cung cấp. Vì vậy, các chức năng cần được đồng bộ hoá giữa Trình tìm kiếm và Nhà cung cấp trong thời gian chạy. | Triển khai API Luồng thư để truy cập các tính năng trong thời gian chạy. | Bắt buộc |
Quy tắc chuyển đổi có thể định cấu hình | Cho phép ứng dụng Seeker định cấu hình mức độ ưu tiên giữa các yêu cầu phát trực tuyến âm thanh đang hoạt động hiện có và các yêu cầu phát âm thanh mới thông qua phần cài đặt lựa chọn ưu tiên của người dùng. Ví dụ: trình chuyển đổi âm thanh có thể cung cấp các chế độ cài đặt giao diện người dùng để cho phép người dùng bật/tắt tính năng tự động chuyển đổi giữa tính năng gọi và phát nội dung nghe nhìn. Người tìm kiếm công cụ chuyển đổi âm thanh sẽ thiết lập và tải quy tắc chuyển đổi thông qua Luồng thông báo. |
Chỉ Nhà cung cấp đa điểm. Triển khai API Luồng thông báo để giúp quy tắc chuyển đổi giữa các thiết bị được kết nối có thể định cấu hình. |
Không bắt buộc |
Chuyển đổi thiết bị đang hoạt động | Cho phép Trình tìm kiếm công cụ chuyển đổi âm thanh mô phỏng quá trình chuyển đổi âm thanh giữa các thiết bị đã kết nối. Ở phía Trình tìm kiếm công tắc âm thanh, có thể có một giao diện người dùng để người dùng dễ dàng chuyển đổi giữa các thiết bị đã kết nối. |
Chỉ Nhà cung cấp đa điểm. Triển khai API Luồng thông báo cho Trình tìm kiếm công tắc âm thanh để xác định nguồn âm thanh đang hoạt động giữa các thiết bị được kết nối. |
Bắt buộc |
Thông báo chuyển đổi đa điểm | Cho phép Trình tìm kiếm công tắc âm thanh hiển thị thông báo chuyển. | Chỉ Nhà cung cấp đa điểm. Triển khai API Luồng thông báo để thông báo cho Trình chuyển đổi âm thanh đã kết nối khi quá trình chuyển đổi đa điểm đang diễn ra. |
Bắt buộc |
Tải trọng quảng cáo
Nhà cung cấp phải nêu rõ trạng thái kết nối hiện tại của mình vào quảng cáo, được tạo dựa trên dữ liệu Tài khoản Ghép nối nhanh như được mô tả trong Quảng cáo: Khi không thể tìm thấy.
Lưu ý rằng phiên bản của bảng 4.2 là 0x1.
Trường trạng thái kết nối
Bộ tám | Loại dữ liệu | Mô tả | Giá trị | Bắt buộc? |
---|---|---|---|---|
0 | uint8 |
Độ dài và loại trường 0bLLLLTTTT
|
0bLLLL0101
|
Bắt buộc |
1 | uint8 |
Trạng thái kết nối 0bHAFRSSSS
|
0bHAFRSSSS
|
Bắt buộc |
2 | uint8 |
Dữ liệu tuỳ chỉnh Hiện tại, dữ liệu này chỉ chứa loại nội dung dùng để mô tả mức sử dụng tính năng phát trực tuyến âm thanh hiện tại. Trình tìm kiếm sẽ gửi bản sao đó đến Nhà cung cấp. |
Giá trị này được gửi từ Người tìm kiếm luồng tin nhắn hiện đang hoạt động đến Nhà cung cấp thông qua luồng tin nhắn. 0 nếu luồng truyền trực tuyến đang hoạt động không phải từ Seeker. | Bắt buộc |
3 – var | Bitmap của thiết bị đã kết nối Một bitmap để cho biết thiết bị nào hiện đang kết nối với Trình cung cấp. Tất cả các thiết bị liên kết được sắp xếp theo thứ tự, một bit cho một thiết bị liên kết. Độ dài sẽ tuỳ thuộc vào số lượng thiết bị liên kết của Nhà cung cấp. |
Bit được ánh xạ sẽ được đặt thành 1 nếu thiết bị đang được kết nối với Nhà cung cấp, nếu không thì là 0. Xem Bitmap thiết bị đã kết nối để biết chi tiết |
Không bắt buộc |
Bảng 4.1: Dữ liệu thô của trường trạng thái kết nối
Cờ kết nối
0bH = khi phát hiện đầu
- 1, hiện đang có mặt
- 0, nếu không thì không được đeo trên đầu hoặc không có cảm biến OHD
0bA = khả năng kết nối sẵn có
- 1, hiện có kết nối
- 0, nếu không thì
0bF = chế độ lấy nét
- 1, hiện đang ở chế độ tập trung, không cho phép chuyển đổi kết nối đối với nội dung nghe nhìn sử dụng, tức là không chuyển A2DP sang A2DP
- 0, nếu không thì
0bR = tự động kết nối lại
- 1, nếu Nhà cung cấp tự động kết nối lại với kết nối hiện tại, nghĩa là nó không được kết nối bởi người dùng (đối với trường hợp đa điểm, nếu một trong các các kết nối đã tự động kết nối lại, bạn phải đặt giá trị này là 1)
- 0, nếu không thì
Trạng thái kết nối
- 0x0: không có kết nối
- 0x1: đánh số trang
- 0x2: đã kết nối nhưng không chuyển dữ liệu
- 0x3: Chuyển dữ liệu không phải âm thanh (chỉ khi có thể chuyển đổi, nếu không, sử dụng 0xF)
- 0x4: Truyền trực tuyến A2DP, không áp dụng AVRCP
- 0x5: Phát trực tuyến A2DP và phát AVRCP
- 0x6: Truyền trực tuyến HFP (cuộc gọi điện thoại/voip), bao gồm nhạc chuông băng tần và nhạc chuông không băng tần
- 0x7: Âm thanh năng lượng thấp – truyền trực tuyến nội dung nghe nhìn mà không cần điều khiển
- 0x8: Âm thanh năng lượng thấp – phát trực tuyến nội dung nghe nhìn có điều khiển
- 0x9: Âm thanh năng lượng thấp – truyền trực tuyến cuộc gọi
- 0xA: Âm thanh năng lượng thấp – truyền phát
- 0xF: Tạm thời tắt công tắc kết nối (ví dụ: cập nhật chương trình cơ sở)
Loại ngữ cảnh của Âm thanh năng lượng thấp và Trạng thái kết nối
Đề xuất Nhà cung cấp âm thanh năng lượng thấp nên xử lý tất cả các loại ngữ cảnh được chỉ định trong Số được chỉ định 6.12.3 (trừ khi Nhà cung cấp rõ ràng không hỗ trợ một loại ngữ cảnh nhất định) và ánh xạ loại ngữ cảnh sang trạng thái kết nối như dưới đây.
- Trò chuyện: 0x9
- Nội dung nghe nhìn: 0x8
- Trò chơi: 0x7
- Hướng dẫn: 0x7
- Trợ lý thoại: 0x9
- Trực tiếp: 0x9
- Hiệu ứng âm thanh: 0x2
- Thông báo: 0x2
- Nhạc chuông: 0x9
- Cảnh báo: 0x7
- Chuông báo khẩn cấp: 0x9
Đối với tình huống kết hợp loại bối cảnh Âm thanh năng lượng thấp, chẳng hạn như phát nội dung nghe nhìn trong thì Nhà cung cấp sẽ sử dụng trạng thái kết nối có mức độ ưu tiên cao nhất, tức là sử dụng 0x9 (gọi) cho trường hợp trên thay vì 0x8 (nội dung đa phương tiện).
Định dạng bitmap trên thiết bị được kết nối
Để tránh việc chuyển đổi kết nối không mong muốn, người tìm kiếm có thể cần biết (các) thiết bị mà tai nghe hiện đang kết nối. Ví dụ: khi tai nghe được kết nối với điện thoại, nên người dùng không muốn bị gián đoạn bởi khi một trong các thành viên gia đình bắt đầu dùng YouTube trên máy tính bảng.
Lưu ý rằng bitmap này ẩn danh, Người tìm kiếm không thể biết bitmap nào khác thiết bị được liên kết với Nhà cung cấp. Ví dụ: hãy lấy 5 thiết bị liên kết:
- 0: máy tính xách tay (0bx0000000)
- 1: phoneA (0b0x000000)
- 2: phoneB (0b00x00000)
- 3: máy tính bảng (0b000x0000)
- 4: TV (0b0000x000)
Nếu các thiết bị hiện đang kết nối là máy tính xách tay và máy tính bảng, giá trị của bitmap sẽ là 0b10010000. Việc thay đổi đơn đặt hàng có thể chấp nhận được nếu là không thể tránh khỏi, ví dụ: khi người dùng đặt lại tai nghe về trạng thái ban đầu hoặc khi số lượng thiết bị liên kết đạt đến giới hạn trên.
Quảng cáo có thể phân giải ngẫu nhiên
Để tránh việc theo dõi và tôn trọng quyền riêng tư của người dùng, Nhà cung cấp phải xoay vòng và mã hoá trường bằng khoá tài khoản bằng AES-CTR:
encrypted_connection_status_field = connection_status_raw_data ^ AES(Key, IV)
trong đó
Khoá được lấy từ khoá tài khoản đang sử dụng được xác định trong phần tiếp theo.
Khoá được tạo bởi hàm HKDF, IETF RFC 5869, sử dụng SHA-256 hàm băm.
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
Nhà cung cấp sẽ sử dụng khoá tài khoản gốc tại đây, tức là byte đầu tiên của khoá là 0x04, không được đưa vào mẫu sử dụng.
IV (vectơ ban đầu) là dữ liệu ngẫu nhiên 2 byte của Dữ liệu khóa tài khoản có 0 khoảng đệm, tức là IV là concat(muối, ZEROs 14 byte).
Dữ liệu thô về trạng thái kết nối được xác định trong bảng 4.1, nếu giá trị trạng thái kết nối thay đổi, dữ liệu ngẫu nhiên và RPA cần được tạo lại ở cùng một khung thời gian quảng cáo.
Điều này làm cho trường trạng thái kết nối đã mã hoá xoay cùng lúc với Dữ liệu khoá tài khoản sẽ xoay vòng.
Quảng cáo BLE sẽ có cấu trúc như sau:
Bộ tám | Loại dữ liệu | Mô tả | Giá trị | Bắt buộc? |
---|---|---|---|---|
0 | uint8 |
Phiên bản và cờ | 0x10 | Bắt buộc |
1 – t | Dữ liệu về khoá tài khoản | khác nhau | Bắt buộc | |
t+1 – s | Dữ liệu về pin | khác nhau | Không bắt buộc | |
s+1 – var | Dữ liệu có thể phân giải ngẫu nhiên | khác nhau | Bắt buộc nếu Danh sách khoá tài khoản không để trống, nếu không, bị loại trừ. |
Bảng 4.2: Quảng cáo BLE với Dữ liệu có thể phân giải ngẫu nhiên
Dữ liệu có thể phân giải ngẫu nhiên chứa:
Bộ tám | Loại dữ liệu | Mô tả | Giá trị | Bắt buộc? |
---|---|---|---|---|
0 | uint8 |
Độ dài và loại trường 0bLLLLTTTT
|
0bLLLL0110
|
Bắt buộc |
1 – var | Dữ liệu đã mã hoá | khác nhau | Bắt buộc |
Bảng 4.2.1: Dữ liệu có thể phân giải ngẫu nhiên
Ví dụ: nếu Dữ liệu có thể phân giải ngẫu nhiên chứa một kết nối đã mã hoá trường trạng thái, kết quả được giải mã sẽ là trường trạng thái kết nối.
Để tránh bị can thiệp, bạn nên sửa đổi một chút Dữ liệu khoá tài khoản ở trên khi Dữ liệu có thể phân giải ngẫu nhiên được đưa vào quảng cáo. Thông thường, khi tạo bộ lọc khoá tài khoản, giá trị V được tạo ra bằng cách kết hợp tài khoản bộ lọc chính có thêm muối. Thay vào đó, khi Dữ liệu có thể phân giải ngẫu nhiên cũng được được quảng cáo, thì giá trị V sẽ được tạo là:
V = concat(account_key, salt, random_resolvable_data)
Nếu đang quảng cáo cả Dữ liệu về pin và Dữ liệu có thể phân giải ngẫu nhiên, V phải được tạo thành:
V = concat(account_key, salt, battery_data, random_resolvable_data)
Khoá tài khoản đang được sử dụng
Việc chuyển đổi kết nối dựa trên tài khoản, vì vậy, Nhà cung cấp phải bao gồm thông tin tài khoản của kết nối hiện tại trong quảng cáo BLE. Nếu thiết bị hiện đã kết nối là Thiết bị tìm công tắc âm thanh, Nhà cung cấp phải có thể để lấy khoá tài khoản liên kết với Người tìm kiếm này và sử dụng khoá tài khoản này để mã hoá trường trạng thái kết nối. Nếu nguồn âm thanh được kết nối không phải là Âm thanh chuyển đổi Người tìm kiếm, Nhà cung cấp sẽ sử dụng khoá tài khoản được sử dụng gần đây nhất.
Trước khi tính toán bộ lọc khoá tài khoản, Nhà cung cấp phải sửa đổi byte của khoá tài khoản để đưa một trong các khoá sau đây vào mẫu sử dụng:
- 0b00000100
Bạn chưa dùng khoá tài khoản này.
Đây là khoá mặc định (xem phần Khoá tài khoản). - 0b00000101
Khoá tài khoản này là khoá tài khoản được dùng gần đây nhất.
Trường trạng thái kết nối được mã hoá bằng khoá tài khoản này. Không có thông tin chính của tài khoản về trạng thái kết nối hiện tại, có thể là không thiết bị đã kết nối hoặc thiết bị được kết nối không phải là Người tìm kiếm công cụ chuyển đổi âm thanh. - 0b00000110
Khoá tài khoản này là khoá tài khoản đang được sử dụng.
Trường trạng thái kết nối được mã hoá bằng khoá tài khoản này và trường hiện tại thiết bị thông minh nào được liên kết với khoá tài khoản này.
Sơ đồ cho tải trọng chuyển đổi âm thanh
Hình dưới đây cho thấy sơ đồ dành cho tải trọng Bộ chuyển đổi âm thanh.
Tin nhắn
Khi được kết nối, Người tìm kiếm và Nhà cung cấp có thể sử dụng Luồng tin nhắn để đồng bộ hoá Âm thanh chức năng chuyển đổi, kích hoạt nút chuyển kết nối, thiết lập và nhận nút chuyển thông báo trạng thái kết nối, v.v. Chúng tôi tạo một nhóm thông báo và các mã tin nhắn cụ thể cho tính năng Chuyển đổi âm thanh như bên dưới.
Tên nhóm tin nhắn | Giá trị |
---|---|
Chuyển đổi âm thanh | 0x07 |
Thông tin chi tiết bổ sung về từng mã thông báo được trình bày trong các phần sau.
Tên mã tin nhắn | Giá trị | Chỉ đa điểm | Người gửi | Người trả lời | Mã hóa | MAC | Đánh bóng thành công |
---|---|---|---|---|---|---|---|
Xem tính năng Chuyển đổi âm thanh | 0x10 | Không | Cả hai | Cả hai, thông qua mã 0x11 | Không | Không | Không |
Khả năng thông báo của công cụ Chuyển đổi âm thanh | 0x11 | Không | Cả hai | Cả hai | Không | Có | Có |
Đặt trạng thái đa điểm | 0x12 | Có | Người tìm kiếm | Nhà cung cấp | Không | Có | Có |
Đặt lựa chọn ưu tiên về việc chuyển đổi | 0x20 | Có | Người tìm kiếm | Nhà cung cấp | Không | Có | Có |
Nhận lựa chọn ưu tiên về việc chuyển đổi | 0x21 | Có | Người tìm kiếm | Nhà cung cấp, qua mã 0x22 | Không | Không | Không |
Lựa chọn ưu tiên về việc chuyển đổi thông báo | 0x22 | Có | Nhà cung cấp | Người tìm kiếm | Không | Không | Không |
Chuyển nguồn âm thanh đang hoạt động(sang thiết bị đã kết nối) | 0x30 | Có | Người tìm kiếm | Nhà cung cấp | Không | Có | Có |
Chuyển trở lại | 0x31 | Không | Người tìm kiếm | Nhà cung cấp | Không | Có | Có |
Thông báo về sự kiện công tắc đa điểm | 0x32 | Có | Nhà cung cấp | Người tìm kiếm | Không | Không | Không |
Xem trạng thái kết nối | 0x33 | Có | Người tìm kiếm | Nhà cung cấp, qua mã 0x34 | Không | Không | Không |
Thông báo về trạng thái kết nối | 0x34 | Có | Nhà cung cấp | Người tìm kiếm | Có | Không | Không |
Thông báo cho kết nối đã khởi tạo tính năng chuyển đổi âm thanh | 0x40 | Không | Người tìm kiếm | Nhà cung cấp | Không | Có | Có |
Hiển thị khoá tài khoản đang sử dụng | 0x41 | Không | Người tìm kiếm | Nhà cung cấp | Không | Có | Có |
Gửi dữ liệu tuỳ chỉnh | 0x42 | Không | Người tìm kiếm | Nhà cung cấp | Không | Có | Có |
Đặt mục tiêu thả kết nối | 0x43 | Có | Người tìm kiếm | Nhà cung cấp | Không | Có | Có |
Bảng 4.3: Thông báo chuyển đổi âm thanh
MAC của Thông báo chuyển đổi âm thanh
Để cung cấp xác thực thông báo, tất cả thông báo Chuyển đổi âm thanh có bổ sung dữ liệu được gửi từ Trình tìm kiếm đến Nhà cung cấp cần có Mã xác thực thư. Thời gian một thông báo có MAC được nhận thì thông báo đó phải được xác nhận để Người tìm kiếm biết liệu Nhà cung cấp đã thể hiện cảm xúc với tin nhắn hay chưa.
Nếu xác thực thông báo thành công thì Nhà cung cấp phải gửi ACK cho thông báo:
Bộ tám | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Xác nhận | 0xFF |
1 | uint8 | Đánh bóng thành công | 0x01 |
2–3 | uint16 | Thời lượng dữ liệu bổ sung | khác nhau |
4 | uint8 | Chuyển đổi âm thanh | 0x07 |
5 | uint8 | Mã tin nhắn chuyển đổi âm thanh | khác nhau |
6 – giây | Dữ liệu bổ sung | khác nhau |
Nếu không gửi được thông báo, Nhà cung cấp sẽ gửi NAK cho thông báo:
Bộ tám | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Xác nhận | 0xFF |
1 | uint8 | NAK | 0x02 |
2–3 | uint16 | Thời lượng dữ liệu bổ sung | 0x0003 |
4 | uint8 | Lý do bị lỗi | khác nhau |
5 | uint8 | Chuyển đổi âm thanh | 0x07 |
6 | uint8 | Mã tin nhắn chuyển đổi âm thanh | khác nhau |
Lưu ý: Nếu Nhà cung cấp là người gửi thì không bắt buộc phải sử dụng MAC.
Nhận chức năng chuyển đổi âm thanh
Cả Nhà cung cấp công tắc âm thanh và Ứng dụng tìm kiếm đều có thể kiểm tra xem Thiết bị ghép nối nhanh được kết nối có phải là Trình tìm kiếm/Nhà cung cấp có hỗ trợ tính năng Chuyển đổi âm thanh hay không bằng cách sử dụng thông báo bên dưới:
Bộ tám | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Nhận chức năng chuyển đổi âm thanh | 0x10 |
2–3 | uint16 | Thời lượng dữ liệu bổ sung | 0 |
Bảng 4.3.1.0: Nhận chức năng chuyển đổi âm thanh
Thông báo về tính năng chuyển đổi âm thanh
Khi nhận được thông báo nhận chức năng chuyển đổi âm thanh , thì Trình tìm kiếm/Nhà cung cấp công tắc âm thanh sẽ phản hồi bằng một trong các yêu cầu sau cờ:
Bộ tám | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Thông báo về tính năng chuyển đổi âm thanh | 0x11 |
2–3 | uint16 | Thời lượng dữ liệu bổ sung | 20 nếu nội dung này là do Người tìm kiếm gửi 4 nếu nội dung này do Nhà cung cấp gửi |
4–5 | uint16 | Mã phiên bản chuyển đổi âm thanh | Giá trị khác 0 có nghĩa là thiết bị này có hỗ trợ tính năng Chuyển đổi âm thanh. Mã phiên bản hiện tại (có tính năng tăng cường bảo mật) là 0x0102. Nếu bạn nhận được 0x0000 hoặc không có phản hồi sau 1 giây, thì có nghĩa là tính năng Chuyển đổi âm thanh không được hỗ trợ trên thiết bị này |
6–7 | flags | Cờ khả năng chuyển đổi âm thanh của Trình cung cấp Nếu cờ này do Trình tìm kiếm gửi, thì 2 byte này sẽ được bỏ qua. |
thay đổi Xem Các cờ về chức năng chuyển đổi âm thanh |
8–15 | Số chỉ dùng một lần của tin nhắn Chỉ bắt buộc khi người tìm kiếm gửi tin nhắn này |
khác nhau | |
16–23 | Mã xác thực thư Chỉ bắt buộc khi mã này được gửi bởi Người tìm kiếm |
khác nhau |
Bảng 4.3.1.1: Thông báo về tính năng Chuyển đổi âm thanh
Cờ chức năng chuyển đổi âm thanh
Bit 0 (octet 6, MSB): Trạng thái chuyển đổi âm thanh
- 1, nếu trạng thái chuyển đổi Âm thanh đang bật
- 0, nếu không thì
Bit 1: khả năng định cấu hình đa điểm
- 1, nếu thiết bị hỗ trợ điểm đa điểm và có thể chuyển đổi giữa chế độ bật và đang tắt
- 0, nếu không (không hỗ trợ chế độ đa điểm hoặc chế độ đa điểm luôn bật)
Bit 2: trạng thái hiện tại đa điểm
- 1, nếu điểm đa điểm đang bật
- 0, nếu không thì
Bit 3: phát hiện trên đầu
- 1, nếu thiết bị này hỗ trợ tính năng phát hiện trên đầu (ngay cả khi tính năng phát hiện trên đầu là đã tắt)
- 0, nếu không thì
Bit 4: trạng thái hiện tại của tính năng phát hiện trên đầu
- 1, nếu tính năng phát hiện góc nhìn ngang được bật
- 0, nếu không (không hỗ trợ phát hiện trên đầu hoặc phát hiện trên đầu bị vô hiệu hoá)
Tất cả các bit khác được dành riêng, mặc định là 0.
Đặt trạng thái đa điểm
Trên ứng dụng Tìm công tắc âm thanh, chúng tôi có thể cung cấp chế độ cài đặt để người dùng bật/tắt chức năng đa điểm. Trình tìm kiếm sẽ đặt trạng thái đa điểm thành Nhà cung cấp thông qua thông báo bên dưới:
Bộ tám | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Đặt trạng thái đa điểm | 0x12 |
2–3 | uint16 | Thời lượng dữ liệu bổ sung | 17 |
4 | uint8 | Trạng thái đa điểm | 0: tắt chế độ đa điểm 1: bật chế độ đa điểm |
5–12 | Số chỉ dùng một lần tin nhắn | khác nhau | |
13–20 | Mã xác thực thư | khác nhau |
Bảng 4.3.1.2: Thiết lập trạng thái đa điểm
Đặt lựa chọn ưu tiên về việc chuyển đổi
Người tìm kiếm công tắc âm thanh có thể điều chỉnh lựa chọn chuyển đổi ưu tiên của chế độ đa điểm và chế độ cài đặt mã đó cho Nhà cung cấp bằng thông báo dưới đây:
Bộ tám | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Đặt lựa chọn ưu tiên về việc chuyển đổi | 0x20 |
2–3 | uint16 | Thời lượng dữ liệu bổ sung | 18 |
4 | flags | Lựa chọn chuyển đổi ưu tiên | thay đổi Xem cờ lựa chọn ưu tiên chuyển đổi đa điểm |
5 | Cài đặt chuyển đổi nâng cao byte này đã được dành riêng, giá trị mặc định là 0 |
khác nhau | |
6–13 | Số chỉ dùng một lần tin nhắn | khác nhau | |
14–21 | Mã xác thực thư | khác nhau |
Bảng 4.3.2.0: Thiết lập lựa chọn ưu tiên chuyển đổi
Cờ lựa chọn ưu tiên chuyển đổi đa điểm
- Bit 0 (MSB): A2DP so với A2DP (mặc định là 0)
- Bit 1: HFP so với HFP (mặc định là 0)
- Bit 2: A2DP so với HFP (mặc định là 0)
- Bit 3: HFP so với A2DP (mặc định là 1)
- Bit 4 – 7: dành riêng
- Phần trên được thể hiện là "yêu cầu hồ sơ mới" so với "hồ sơ hiện đang hoạt động"
- 0 khi không chuyển đổi
- 1 để chuyển đổi
Nhận lựa chọn ưu tiên về việc chuyển đổi
Người tìm kiếm có thể truy vấn tuỳ chọn chuyển đổi của đa điểm từ Nhà cung cấp thông qua thông báo bên dưới:
Bộ tám | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Nhận cấu hình chuyển đổi | 0x21 |
2–3 | uint16 | Thời lượng dữ liệu bổ sung | 0 |
Bảng 4.3.2.1: Nhận lựa chọn ưu tiên về việc chuyển đổi
Thông báo về lựa chọn ưu tiên khi chuyển đổi
Bộ tám | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Thông báo về lựa chọn ưu tiên khi chuyển đổi | 0x22 |
2–3 | uint16 | Thời lượng dữ liệu bổ sung | 2 |
4 | flags | Đang chuyển đổi cờ lựa chọn ưu tiên | thay đổi Xem cờ lựa chọn ưu tiên chuyển đổi đa điểm |
5 | Cài đặt chuyển đổi nâng cao byte này đã được dành riêng, giá trị mặc định phải là 0 |
khác nhau |
Bảng 4.3.2.2: Thông báo về lựa chọn ưu tiên chuyển đổi
Chuyển nguồn âm thanh đang hoạt động (sang thiết bị đã kết nối)
Người tìm kiếm có thể yêu cầu Nhà cung cấp đa điểm chuyển đổi nguồn âm thanh giữa các thiết bị được kết nối bằng thông báo bên dưới:
Bộ tám | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Chuyển nguồn âm thanh đang hoạt động (sang thiết bị đã kết nối) | 0x30 |
2–3 | uint16 | Thời lượng dữ liệu bổ sung | 17 |
4 | flags | Chuyển đổi cờ sự kiện nguồn âm thanh đang hoạt động | thay đổi Xem sự kiện chuyển đổi nguồn âm thanh đang hoạt động |
5–12 | Số chỉ dùng một lần tin nhắn | khác nhau | |
13–20 | Mã xác thực thư | khác nhau |
Bảng 4.3.3.0: Chuyển đổi nguồn âm thanh đang hoạt động (sang thiết bị đã kết nối)
Đang chuyển đổi sự kiện nguồn âm thanh đang hoạt động
- Bit 0 (MSB): 1 công tắc cho thiết bị này, 0 chuyển sang thiết bị được kết nối thứ hai
- Bit 1: 1 tiếp tục phát trên công tắc sang thiết bị sau khi chuyển, 0 nếu không. Tiếp tục phát có nghĩa là Nhà cung cấp gửi thông báo PLAY cho Người tìm kiếm thông qua cấu hình AVRCP. Nếu trạng thái trước đó (trước khi chuyển sang trạng thái không hoạt động) PLAY thì Nhà cung cấp phải bỏ qua cờ này.
- Bit 2: 1 từ chối SCO trên thiết bị tắt, 0 nếu không
- Bit 3: 1 ngắt kết nối Bluetooth trên thiết bị chuyển đổi, 0 nếu không.
- Bit 4 – 7: dành riêng.
Người tìm kiếm chuyển đổi âm thanh không phải lúc nào cũng biết chính xác trạng thái của mình nên có thể để Nhà cung cấp nhận được "chuyển sang thiết bị này" thông báo khi Người tìm kiếm là đã có thiết bị đang hoạt động. Trong trường hợp này, để hiển thị đúng giao diện người dùng trên Seeker, Nhà cung cấp có thể gửi NAK kèm theo lý do lỗi, 0x4 – Hành động dự phòng trên thiết bị.
Đối với Nhà cung cấp dịch vụ âm thanh năng lượng thấp có nhiều thành viên được thiết lập, Nhà cung cấp đó phải ngắt kết nối tất cả các thành viên khỏi Trình tìm kiếm, nếu không ngăn xếp bluetooth của Người tìm kiếm sẽ kết nối lại với Nhà cung cấp.
Chuyển trở lại (thành thiết bị đã ngắt kết nối)
Nếu việc chuyển đổi kết nối là không mong muốn, người dùng có thể huỷ bỏ việc chuyển đổi và trong trong một số trường hợp nhất định, bạn nên khôi phục kết nối âm thanh để giảm thiểu sự gián đoạn. Người tìm kiếm sẽ sử dụng thông báo bên dưới để kích hoạt chuyển đổi trở lại:
Bộ tám | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Chuyển trở lại (thành thiết bị đã ngắt kết nối) | 0x31 |
2–3 | uint16 | Thời lượng dữ liệu bổ sung | 17 |
4 | uint8 | Chuyển lại sự kiện | thay đổi 0x01: chuyển về lại 0x02: chuyển về và tiếp tục phát |
5–12 | Số chỉ dùng một lần tin nhắn | khác nhau | |
13–20 | Mã xác thực thư | khác nhau |
Bảng 4.3.3.1: Chuyển trở lại (để ngắt kết nối thiết bị)
Đối với Nhà cung cấp đa điểm, để thực hiện việc chuyển đổi kết nối, Nhà cung cấp có thể bỏ kết nối với một thiết bị nguồn âm thanh và tạm dừng phiên âm thanh trên thiết bị còn lại nguồn âm thanh. Ví dụ: giả sử tai nghe đa điểm được kết nối với một máy tính bảng và thiết bị chuyển đổi âm thanh được hỗ trợ thứ 3. Người dùng đang xem video trên chiếc máy tính bảng khi có cuộc gọi đến trên điện thoại của họ. Điện thoại sẽ kích hoạt công tắc kết nối trên tai nghe cần thả để kết nối với điện thoại, trong khi cũng tạm dừng nội dung nghe nhìn trên máy tính bảng để lấy nhạc chuông từ điện thoại. Nếu người dùng từ chối cuộc gọi đó, điện thoại có thể yêu cầu tai nghe "chuyển về và tiếp tục phát". Khi nhận được yêu cầu này, tai nghe phải kết nối lại với thiết bị thứ ba và tiếp tục phát video tạm dừng trên máy tính bảng.
Thông báo về sự kiện chuyển đổi nhiều điểm
Để người dùng biết một sự kiện chuyển đổi nhiều điểm đang diễn ra, nút chuyển Âm thanh Người tìm kiếm có thể hiển thị thông báo cho người dùng. Nhà cung cấp phải thông báo cho những người được kết nối Trình tìm chuyển đổi âm thanh về sự kiện chuyển đổi.
Bộ tám | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Thông báo về sự kiện công tắc đa điểm Nhà cung cấp nên gửi sự kiện này trên mọi công tắc, bao gồm cả Trình tìm kiếm công tắc sang âm thanh không phải Công tắc, Trình tìm kiếm công tắc không phải Thiết bị chuyển đổi âm thanh và Trình tìm công tắc chuyển đổi âm thanh sang Trình tìm công tắc âm thanh |
0x32 |
2–3 | uint16 | Thời lượng dữ liệu bổ sung | khác nhau |
4 | uint8 | Lý do chuyển đổi Giá trị này phải được xác định dựa trên Trạng thái kết nối. Đối với các trường hợp sử dụng Âm thanh năng lượng thấp, việc xem xét mối liên kết giữa Loại ngữ cảnh âm thanh năng lượng thấp và Trạng thái kết nối có thể hữu ích. Ví dụ: trạng thái kết nối tương ứng với Trợ lý thoại là 0x9(Âm thanh năng lượng thấp – truyền trực tuyến cuộc gọi). Vì vậy, lý do chuyển đổi do Trợ lý thoại khởi tạo phải là 0x02. |
thay đổi 0x00: Không xác định 0x01: Nội dung nghe nhìn (ví dụ: truyền trực tuyến A2DP, truyền trực tuyến nội dung nghe nhìn LEA) 0x02: Cuộc gọi (ví dụ: truyền trực tuyến HFP, truyền trực tuyến cuộc gọi LEA) |
5 | uint8 | Thiết bị mục tiêu | thay đổi 0x01: thiết bị này 0x02: một thiết bị đã kết nối khác |
6 – n | utf8 | Tên thiết bị mục tiêu nếu thiết bị mục tiêu là Người tìm kiếm công tắc âm thanh, sử dụng tên mà Trình tìm kiếm được gửi đến, nếu không sử dụng tên BT, nếu không có, sử dụng 2 byte cuối cùng của địa chỉ |
khác nhau |
Bảng 4.3.3.2: Thông báo về sự kiện công tắc đa điểm
Xem trạng thái kết nối
Trình tìm kiếm có thể biết trạng thái kết nối hiện tại từ Nhà cung cấp:
Bộ tám | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Xem trạng thái kết nối | 0x33 |
2–3 | uint16 | Thời lượng dữ liệu bổ sung | 0 |
Bảng 4.3.3.3: Nhận trạng thái kết nối
Sau khi nhận được tin nhắn này, Nhà cung cấp sẽ phản hồi bằng mã tin nhắn 0x34, thông báo trạng thái kết nối.
Thông báo về trạng thái kết nối
Như đã định nghĩa trong tải trọng quảng cáo BLE, đối với Nhà cung cấp đa điểm, nếu trạng thái kết nối thay đổi, ngoại trừ việc thay đổi gói quảng cáo, Nhà cung cấp cũng phải thông báo cho những Người tìm kiếm được kết nối đang sử dụng cùng một khoá tài khoản liên quan đến thay đổi này. Nếu Nhà cung cấp đã được kết nối có Trình tìm kiếm chuyển đổi âm thanh và Trình tìm kiếm chuyển đổi không phải Âm thanh, nếu nút chuyển Trình tìm kiếm đang hoạt động, Nhà cung cấp cũng sẽ thông báo cho Âm thanh được kết nối chuyển đổi Người tìm kiếm về trạng thái kết nối (sử dụng khoá tài khoản của Người tìm kiếm).
Bộ tám | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Thông báo về trạng thái kết nối | 0x34 |
2–3 | uint16 | Thời lượng dữ liệu bổ sung | khác nhau |
4 | uint8 | Cờ thiết bị đang hoạt động | khác nhau 0x00: thiết bị này là thiết bị thụ động và thiết bị đang hoạt động đang sử dụng cùng một khoá tài khoản 0x01: thiết bị này là thiết bị đang hoạt động 0x02: thiết bị này là thiết bị thụ động, còn thiết bị đang hoạt động không phải là thiết bị chuyển đổi âm thanh. |
5 – n | Trạng thái kết nối đã mã hoá | khác nhau | |
n+1 - n+8 | Số chỉ dùng một lần tin nhắn | khác nhau |
Bảng 4.3.3.4: Thông báo về trạng thái kết nối
Thông báo về trạng thái kết nối đã mã hoá
encrypted_connection_status = connection_status_raw_data ^ AES(Key, IV)
trong đó:
Khoá được lấy từ khoá tài khoản đang được sử dụng, xem Quảng cáo có thể phân giải ngẫu nhiên.
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
IV là concat(Session_nonce; Message_nonce)
trạng_thái_trạng_thái_kết_nối = concat(trạng_thái_kết_nối, dữ_liệu_tuỳ_chỉnh, Connected_devices) được xác định trong BLE tải trọng quảng cáo Lưu ý không nên thêm byte cho độ dài trường và kiểu vì chúng tôi có mã tin nhắn và độ dài dữ liệu ở đây.
Thông báo cho kết nối đã bắt đầu sử dụng tính năng Chuyển đổi âm thanh
Nhà cung cấp công cụ chuyển đổi âm thanh có thể cần biết quá trình chuyển đổi kết nối có được kích hoạt hay không bằng tính năng chuyển đổi âm thanh để thể hiện nhiều phản ứng, ví dụ: tắt âm báo cho Âm thanh chuyển đổi sự kiện. Người tìm kiếm gửi thông báo để thông báo cho Nhà cung cấp rằng là kết nối được khởi tạo bằng Công tắc âm thanh.
Bộ tám | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Thông báo cho kết nối đã bắt đầu sử dụng tính năng Chuyển đổi âm thanh | 0x40 |
2–3 | uint16 | Thời lượng dữ liệu bổ sung | 17 |
4 | uint8 | Chỉ báo kết nối đã bắt đầu chuyển đổi âm thanh | thay đổi 0: đây là kết nối không được kích hoạt bằng Công tắc âm thanh 1: đây là kết nối được kích hoạt bằng công cụ Chuyển đổi âm thanh |
5–12 | Số chỉ dùng một lần tin nhắn | khác nhau | |
13–20 | Mã xác thực thư | khác nhau |
Bảng 4.3.4.0: Thông báo về việc kết nối dùng tính năng chuyển đổi âm thanh
Cho biết khoá tài khoản đang được sử dụng
Nếu nhiều khoá tài khoản trên Người tìm kiếm (ví dụ: nhiều người dùng) được liên kết với Nhà cung cấp thì Người tìm kiếm sẽ sử dụng thông báo bên dưới để cho biết tài khoản nào đang được sử dụng.
Bộ tám | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Cho biết khoá tài khoản đang được sử dụng | 0x41 |
2–3 | uint16 | Thời lượng dữ liệu bổ sung | 22 |
4–9 | utf8 | Chuỗi đang được sử dụng | UTF8 ("đang sử dụng") |
10–17 | Số chỉ dùng một lần tin nhắn | khác nhau | |
18–25 | Mã xác thực thư | khác nhau |
Bảng 4.3.4.1: Cho biết khoá tài khoản có sử dụng
Sau khi nhận được tin nhắn này, Nhà cung cấp có thể biết khoá tài khoản nào đang được sử dụng bằng cách xác minh mã xác thực tin nhắn.
Gửi dữ liệu tuỳ chỉnh
Trình tìm kiếm công tắc âm thanh đang hoạt động có thể gói thông tin (ví dụ: âm thanh sử dụng) luồng âm thanh trong byte dữ liệu tuỳ chỉnh rồi gửi đến Nhà cung cấp bằng cách sử dụng thông báo bên dưới:
Bộ tám | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Gửi dữ liệu tuỳ chỉnh | 0x42 |
2–3 | uint16 | Thời lượng dữ liệu bổ sung | 17 |
4 | uint8 | Dữ liệu tùy chỉnh | khác nhau |
5–12 | Số chỉ dùng một lần tin nhắn | khác nhau | |
13–20 | Mã xác thực thư | khác nhau |
Bảng 4.3.4.2: Gửi dữ liệu tuỳ chỉnh
Sau khi nhận được dữ liệu tuỳ chỉnh, Nhà cung cấp sẽ cập nhật gói quảng cáo để thêm dữ liệu tuỳ chỉnh. Đối với Trình cung cấp đa điểm, Trình cung cấp này cũng phải thông báo thay đổi trạng thái kết nối thành một Người tìm kiếm khác đã kết nối bằng cách sử dụng cùng một khoá tài khoản.
Đặt đích thả kết nối
Trên tai nghe đa điểm, nếu kết nối ưu tiên cần bị ngắt không phải là thiết bị được sử dụng gần đây nhất, Người tìm kiếm công cụ chuyển đổi âm thanh có thể cho Nhà cung cấp biết thiết bị nào bỏ qua bằng thông báo bên dưới:
Bộ tám | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Chuyển đổi âm thanh | 0x07 |
1 | uint8 | Đặt đích thả kết nối | 0x43 |
2–3 | uint16 | Thời lượng dữ liệu bổ sung | 17 |
4 | uint8 | Thiết bị mục tiêu được kết nối sẽ bị thả | thay đổi 1: thiết bị này |
5–12 | Số chỉ dùng một lần tin nhắn | khác nhau | |
13–20 | Mã xác thực thư | khác nhau |
Bảng 4.3.4.3: Thiết lập đích thả kết nối
Triển khai tệp đối chiếu
Xem Thư viện SDK nhúng lân cận để triển khai tệp tham chiếu