Dịch vụ điều khiển HDMI-CEC

Tiêu chuẩn Điều khiển thiết bị điện tử tiêu dùng qua giao diện đa phương tiện độ phân giải cao (HDMI-CEC) cho phép các sản phẩm đa phương tiện tiêu dùng giao tiếp và trao đổi thông tin với nhau. HDMI-CEC hỗ trợ nhiều tính năng, chẳng hạn như Chuyển tiếp điều khiển từ xa và Điều khiển âm thanh hệ thống, nhưng một trong những tính năng phổ biến nhất là Phát bằng một lần chạm. Tính năng One Touch Play cho phép thiết bị nguồn nội dung đa phương tiện bật TV và tự động chuyển đổi cổng đầu vào, vì vậy, bạn không cần phải tìm kiếm điều khiển từ xa của TV để chuyển từ Chromecast sang đầu phát Blu-ray.

Với Android 12, tính năng kiểm soát nguồn của màn hình kết nối qua HDMI sẽ phù hợp với tính năng kiểm soát nguồn của màn hình trong. Khi một thiết bị phát HDMI thức dậy, thiết bị này sẽ cố gắng đánh thức TV đã kết nối và trở thành nguồn đang hoạt động hiện tại thông qua tính năng Phát một chạm HDMI CEC. Nếu thiết bị chuyển sang chế độ ngủ trong khi đang là nguồn đang hoạt động, thì thiết bị sẽ cố gắng tắt TV đã kết nối.

Việc hỗ trợ HDMI-CEC thường là không bắt buộc. Tuy nhiên, hầu hết các nhà sản xuất đều đã sử dụng HDMI-CEC để thiết bị của họ hoạt động với thiết bị của các công ty khác. Mỗi nhà sản xuất triển khai tiêu chuẩn HDMI-CEC theo cách khác nhau, vì vậy, các thiết bị không phải lúc nào cũng hiểu nhau và các tính năng được hỗ trợ cũng khác nhau giữa các thiết bị. Do sự khác biệt này, người tiêu dùng không thể giả định một cách an toàn rằng hai sản phẩm tuyên bố hỗ trợ CEC là hoàn toàn tương thích.

Việc hỗ trợ HDMI-CEC 2.0 giúp cải thiện khả năng tương thích giữa các thiết bị HDMI nếu cả thiết bị gửi và nhận đều hỗ trợ phiên bản chuẩn này.

Giải pháp

Với việc ra mắt Khung đầu vào Android TV (TIF), HDMI-CEC sẽ kết hợp tất cả các thiết bị đã kết nối và giảm thiểu các vấn đề về khả năng tương thích. Android đã tạo một dịch vụ hệ thống có tên là HdmiControlService để khắc phục những vấn đề này.

Bằng cách cung cấp HdmiControlService như một phần của hệ sinh thái Android, Android hy vọng mang lại:

  • Cách triển khai HDMI-CEC chuẩn cho tất cả nhà sản xuất, giúp giảm tình trạng thiết bị không tương thích. Trước đây, các nhà sản xuất phải tự phát triển cách triển khai HDMI-CEC hoặc sử dụng giải pháp của bên thứ ba.
  • Một dịch vụ được kiểm thử kỹ lưỡng trên nhiều thiết bị HDMI-CEC đã có trên thị trường. Android đang tiến hành nghiên cứu nghiêm ngặt về các vấn đề về khả năng tương thích được tìm thấy trong các sản phẩm và thu thập lời khuyên hữu ích từ những nhà triển khai thiết bị có kinh nghiệm về công nghệ này. Dịch vụ CEC được thiết kế để duy trì sự cân bằng hợp lý giữa tiêu chuẩn và các nội dung sửa đổi đối với tiêu chuẩn đó để hoạt động được với các sản phẩm mà mọi người đã sử dụng.

Thiết kế tổng thể

HdmiControlService được kết nối với phần còn lại của hệ thống như TV Input Framework (TIF), Dịch vụ âm thanh và Dịch vụ nguồn để triển khai các tính năng mà tiêu chuẩn chỉ định.

Hãy xem sơ đồ sau đây để biết nội dung mô tả về việc chuyển đổi từ bộ điều khiển CEC tuỳ chỉnh sang việc triển khai lớp trừu tượng phần cứng HDMI-CEC (HAL) đơn giản hơn.

Sơ đồ cho thấy cách triển khai HDMI-CEC trước và sau Android 5.0

Hình 1. Thay thế Dịch vụ điều khiển HDMI

Triển khai

Hãy xem sơ đồ sau đây để biết thông tin chi tiết về dịch vụ điều khiển HDMI.

Hình ảnh cho thấy thông tin chi tiết về dịch vụ Điều khiển HDMI

Hình 2. Thông tin chi tiết về Dịch vụ điều khiển HDMI

Dưới đây là các yếu tố chính để triển khai HDMI-CEC đúng cách cho Android:

  • Lớp trình quản lý HdmiControlManager cung cấp API cho các ứng dụng đặc quyền. Các dịch vụ hệ thống như dịch vụ Trình quản lý đầu vào TV và dịch vụ Âm thanh có thể sử dụng trực tiếp dịch vụ này.
  • Dịch vụ này được thiết kế để cho phép lưu trữ nhiều loại thiết bị logic.
  • HDMI-CEC được kết nối với phần cứng thông qua một lớp trừu tượng phần cứng (HAL) để đơn giản hoá việc xử lý các khác biệt của giao thức và cơ chế báo hiệu giữa các thiết bị. Nhà sản xuất thiết bị có thể sử dụng định nghĩa HAL để triển khai lớp HAL.

Lưu ý: Nhà sản xuất thiết bị nên thêm dòng sau vào PRODUCT_COPY_FILES trong device.mk.

PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.hardware.hdmi.cec.xml:system/etc/permissions/android.hardware.hdmi.cec.xml

Tuỳ thuộc vào việc thiết bị của bạn là thiết bị HDMI sink hay thiết bị nguồn HDMI, nhà sản xuất thiết bị cần đặt ro.hdmi.device_type trong device.mk để HdmiControlService hoạt động đúng cách.

Đối với các thiết bị nguồn HDMI, chẳng hạn như thiết bị truyền hình trực tuyến (OTT) hoặc hộp giải mã tín hiệu số (STB), hãy đặt:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4

Đối với các thiết bị HDMI sink (thiết bị nhận tín hiệu HDMI), chẳng hạn như TV màn hình, hãy đặt:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=0
  • Bộ điều khiển CEC thuộc quyền sở hữu riêng của thiết bị do nhà sản xuất cung cấp không thể cùng tồn tại với HdmiControlService. Bạn phải vô hiệu hoá hoặc xoá bỏ tính năng đó. Các yêu cầu này thường xuất phát từ nhu cầu xử lý các lệnh cụ thể của nhà sản xuất. Bạn nên đưa trình xử lý lệnh dành riêng cho nhà sản xuất vào dịch vụ bằng cách mở rộng/sửa đổi trình xử lý đó. Công việc này do nhà sản xuất thiết bị thực hiện và không do Android chỉ định. Xin lưu ý rằng mọi thay đổi trong dịch vụ dành cho các lệnh dành riêng cho nhà sản xuất đều không được can thiệp vào cách xử lý các lệnh tiêu chuẩn, nếu không thiết bị sẽ không tương thích với Android.
  • Quyền truy cập vào dịch vụ HDMI-CEC được bảo vệ bằng cấp độ bảo vệ SignatureOrSystem. Chỉ các thành phần hệ thống hoặc ứng dụng được đặt trong /system/priv-app mới có thể truy cập vào dịch vụ. Việc này nhằm bảo vệ dịch vụ khỏi bị các ứng dụng có ý định độc hại lợi dụng.

Android hỗ trợ loại TV/Display(0), Playback device(4) có thể đưa ra lệnh One Touch Play để trở thành nguồn đang hoạt động và Audio System (5) xử lý chế độ âm thanh hệ thống và ARC. Các loại thiết bị khác (Tuner và Máy ghi âm) hiện không được hỗ trợ.

Lớp trừu tượng phần cứng (HAL) HDMI-CEC

API HAL HDMI-CEC cho phép HdmiControlService sử dụng tài nguyên phần cứng để gửi/nhận lệnh HDMI-CEC, định cấu hình các chế độ cài đặt cần thiết và (không bắt buộc) giao tiếp với bộ vi xử lý trong nền tảng cơ bản sẽ tiếp quản chức năng điều khiển CEC trong khi hệ thống Android ở chế độ chờ.

Phiên bản Tính năng Tệp HAL
1.0 Định cấu hình dữ liệu HAL (địa chỉ, tính năng). Gửi lệnh HDMI-CEC. Đăng ký lệnh gọi lại để nhận các lệnh HDMI-CEC và các sự kiện plugin nóng. IHdmiCec.hal
IHdmiCecCallback.hal
1.1 Ra mắt các loại HDMI-CEC 2.0 @1.1::IHdmiCec.hal
@1.1::IHdmiCecCallback.hal

Thử nghiệm

Các quy trình triển khai HDMI-CEC của thiết bị được kiểm thử và xác minh thông qua các bài kiểm thử CTS theo tài liệu HDMI-CEC CTS.

HDMI-CEC 2.0

Các thiết bị nguồn (phát) và bồn lưu trữ dữ liệu (bảng điều khiển TV) của Android hỗ trợ HDMI-CEC 2.0. HDMI-CEC 2.0 mang lại khả năng tương tác tốt hơn giữa các thiết bị HDMI, cải thiện tính năng Truyền qua điều khiển từ xa và kiểm thử chứng nhận rộng rãi hơn. Nhìn chung, các hoạt động tương tác HDMI-CEC 2.0 với các thiết bị khác sẽ hiệu quả hơn, dẫn đến lưu lượng truy cập HDMI-CEC thấp hơn cũng như các tương tác nhanh hơn.

Để thiết bị hỗ trợ HDMI-CEC 2.0, bạn phải thiết lập cấu hình người dùng và thiết bị để sử dụng HDMI-CEC 2.0. Việc triển khai HAL cũng phải báo cáo khả năng hỗ trợ HDMI-CEC 2.0 trong các lệnh gọi đến IHdmiCec#getCecVersion.

Cấu hình CEC

Bạn có thể định cấu hình hành vi HDMI-CEC tại cả thời gian xây dựng (do OEM sử dụng RRO) và thời gian chạy (do HdmiControlManager @SystemApi thực hiện).

Ví dụ về chế độ cài đặt HDMI-CEC:

Xem xét Lựa chọn
HDMI-CEC được bật hay tắt. Đang bật
Đã tắt
Phạm vi của thông báo điều khiển nguồn HDMI-CEC do thiết bị phát gửi. Chỉ truyền đến TV
Truyền đến TV và hệ thống âm thanh
Truyền tin
Không truyền

Đối với mỗi chế độ cài đặt hiện có, ứng dụng có thể truy vấn các tuỳ chọn được cho phép trong thời gian chạy.