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

Chế độ điều khiển thiết bị điện tử tiêu dùng có giao diện đa phương tiện độ phân giải cao (HDMI-CEC) cho phép các sản phẩm tiêu dùng đa phương tiện 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 Phát bằng một lần chạm cho phép thiết bị nguồn nội dung nghe nhìn bật TV và tự động chuyển đổi cổng đầu vào, do đó bạn không phải tìm kiếm TV điều khiển từ xa để chuyển từ Chromecast sang đầu phát Blu-ray.

Với Android 12, chế độ kiểm soát nguồn điện của màn hình kết nối HDMI phù hợp với kiểm soát nguồn của màn hình nội bộ. Khi một thiết bị phát HDMI thức dậy, thiết bị đó 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ọ tương thích với thiết bị của các công ty khác. Mỗi nhà sản xuất đều triển khai HDMI-CEC chuẩn theo những cách khác nhau, nên các thiết bị không phải lúc nào cũng hiểu nhau và được hỗ trợ có sự khác biệt giữa các thiết bị. Do sự chênh lệch này, người tiêu dùng không thể giả định rằng 2 sản phẩm tuyên bố có hỗ trợ CEC là hoàn toàn tương thích.

Tính năng 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 tiêu 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 để giảm thiểu những vấn đề này.

Bằng cách cung cấp HdmiControlService như một phần của Android của chúng tôi, Android hy vọng cung cấp:

  • Phương thức triển khai HDMI-CEC chuẩn cho tất cả các nhà sản xuất, giảm khả năng không tương thích của thiết bị. 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 đã 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 giữa các sản phẩm và thu thập lời khuyên hữu ích từ những người 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 sửa đổi đối với tiêu chuẩn đó để dịch vụ này hoạt động với các sản phẩm mà mọi người đang 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ơ đồ dưới đây để biết cách chuyển đổi từ một CEC tuỳ chỉnh bộ điều khiển sang mô hình triển khai mô hình trừu tượng hoá phần cứng HDMI-CEC đơn giản hơn lớp (HAL).

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 thành phần chính để triển khai đúng cách HDMI-CEC trên 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ể trực tiếp sử dụng dịch vụ.
  • Dịch vụ được thiết kế để cho phép lưu trữ nhiều loại thiết bị.
  • HDMI-CEC được kết nối với phần cứng thông qua lớp trừu tượng phần cứng (HAL) để đơn giản hoá việc xử lý những khác biệt của cơ chế báo hiệu và giao thức giữa các thiết bị. Định nghĩa HAL (Lớp trừu tượng phần cứng) có sẵn cho các nhà sản xuất thiết bị để sử dụng nhằm 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ị có bồn lưu trữ HDMI, chẳng hạn như TV bảng điều khiển, hãy đặt:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=0
  • Bộ điều khiển CEC độc quyền do nhà sản xuất thiết bị cung cấp không thể cùng tồn tại với HdmiControlService. Bạn phải tắt hoặc xoá ứng dụng đó. Phổ biến cho điều này xuất phát từ nhu cầu phải xử lý . 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 bất kỳ thay đổi nào được thực hiện trong dịch vụ cho các lệnh của riêng nhà sản xuất không được cản trở cách các lệnh chuẩn được xử lý, 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ệ theo 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à sự kiện hotplug. IHdmiCec.hal
IHdmiCecCallback.hal
1.1 Giới thiệu các loại HDMI-CEC 2.0 @1.1::IHdmiCec.hal
@1.1::IHdmiCecCallback.hal

Thử nghiệm

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

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 cung cấp khả năng tương tác tốt hơn giữa các thiết bị HDMI, các cải tiến đối với tính năng Thông qua điều khiển từ xa và kiểm tra chứng nhận mở rộng hơn. Nhìn chung, các lượt tương tác HDMI-CEC 2.0 với các thiết bị khác hiệu quả hơn, dẫn đến ít lưu lượng truy cập HDMI-CEC hơn cũng như các lượt 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ề các chế độ cài đặt HDMI-CEC:

Xem xét Lựa chọn
HDMI-CEC được bật hay tắt. Đã bật
Bị Vô hiệu
Phạm vi của các 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.