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ư Điều khiển từ xa qua điều khiển từ xa và Điều khiển âm thanh hệ thống, nhưng là một trong những tính năng phổ biến nhất là Chơi một lần. 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 được đánh thức, thiết bị phát HDMI sẽ thử để đánh thức TV đã kết nối và trở thành nguồn hoạt động hiện tại thông qua HDMI CEC One Touch Play. Nếu thiết bị chuyển sang chế độ ngủ khi vẫn là nguồn đang hoạt động, thì thiết bị sẽ tìm cách tắt TV kết nối Internet.

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, vậy 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.

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ả hai gửi và nhận thiết bị hỗ trợ phiên bản chuẩn này.

Giải pháp

Với sự ra mắt của Khung đầu vào Android TV (TIF), HDMI-CEC tập hợp tất cả các thiết bị đã kết nối lại với nhau 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 để làm giảm bớt những khó khă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 phát triển các phương pháp triển khai HDMI-CEC riêng hoặc sử dụng các giải pháp của bên thứ ba.
  • Một dịch vụ đã được thử nghiệm kỹ lưỡng trên nhiều thiết bị HDMI-CEC trên thị trường. Android đang tiến hành nghiên cứu nghiêm ngặt về khả năng tương thích vấn đề được tìm thấy trong các sản phẩm và thu thập lời khuyên hữu ích từ thiết bị những người triển khai có kinh nghiệm về công nghệ này. Dịch vụ CEC được thiết kế để duy trì tạo sự cân bằng hợp lý giữa tiêu chuẩn và nội dung sửa đổi theo tiêu chuẩn đó để phù hợp với 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, chẳng hạn như TV Input Framework (TIF), dịch vụ Audio và dịch vụ Power để triển khai nhiều tính năng khác nhau 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. Dịch vụ điều khiển HDMI thay thế

Triển khai

Vui lòng xem sơ đồ dưới đây để biết thông tin chi tiết về dịch vụ điều khiển HDMI.

Hình ảnh minh hoạ cách 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 người quản lý HdmiControlManager cung cấp các ứng dụng đặc quyền với API. 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ị bồn lưu trữ HDMI 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 chính xác.

Đối với các thiết bị nguồn HDMI, chẳng hạn như thiết bị phát trực tiếp qua Internet (OTT) hoặc thiết bị 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 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 cùng với HdmiControlService. Bạn phải vô hiệu hoá hoặc xoá bỏ tính năng đó. Phổ biến cho điều này xuất phát từ nhu cầu phải xử lý các lệnh. Trình xử lý lệnh dành riêng cho nhà sản xuất phải được tích hợp vào dịch vụ bằng cách mở rộng/sửa đổi. Công việc này sẽ do thiết bị thực hiện nhà sản xuất và không được 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 có thể truy cập vào dịch vụ. Việc này nhằm bảo vệ dịch vụ khỏi hành vi lạm dụng của các ứng dụng có mục đích xấu.

Android hỗ trợ loại TV/Display(0), Playback device(4) có thể đưa ra lệnh One Touch Play để trở thành phiên bản hoạt động nguồn 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 HDMI-CEC HAL 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ẽ giành quyền kiểm soát 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 các 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

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, HDMI-CEC 2.0 tương tác 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 ít hơn cũng như tương tác nhanh hơn.

Để hỗ trợ HDMI-CEC 2.0, thiết bị và cấu hình người dùng phải thành 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 lệnh gọi đến IHdmiCec#getCecVersion.

Cấu hình CEC

Hành vi HDMI-CEC có thể được định cấu hình trong cả thời gian xây dựng (theo OEM sử dụng RRO) và thời gian chạy (của HdmiControlManager @SystemApi).

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
Đã vô hiệu hoá
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ỉ đến TV
Đến TV và hệ thống âm thanh
Phát đi thông báo
Không chọn ngôn ngữ nào

Ứng dụng có thể truy vấn các chế độ cài đặt hiện có và được phép đối với từng chế độ cài đặt trong thời gian chạy.