שירות בקרה של HDMI-CEC

תקן HDMI-CEC (High-Definition Multimedia Interface Consumer Electronics Control) מאפשר למוצרי מולטימדיה לצרכן לתקשר ולשתף ביניהם מידע. HDMI-CEC תומך בתכונות רבות, כמו Remote Control Passthrough ו-System Audio Control, אבל אחת התכונות הפופולריות ביותר היא One Touch Play. One Touch Play מאפשר למכשיר של מקור המדיה להפעיל את הטלוויזיה ולעבור את יציאת הקלט שלו באופן אוטומטי, כך שלא תצטרכו לחפש את השלט הרחוק של הטלוויזיה כדי לעבור מ-Chromecast לנגן Blu-ray.

ב-Android 12, בקרת ההפעלה של המסך המחובר ל-HDMI תואמת לבקרת ההפעלה של המסך הפנימי. כשמכשיר הפעלה של HDMI מתעורר, הוא מנסה להעיר את הטלוויזיה המחובר ולהפוך למקור הפעיל הנוכחי באמצעות HDMI CEC One Touch Play. אם המכשיר עובר למצב שינה בזמן שהוא המקור הפעיל הנוכחי, הוא ינסה לכבות את הטלוויזיה המחובר.

בדרך כלל, התמיכה ב-HDMI-CEC היא אופציונלית. עם זאת, רוב היצרנים אימצו את HDMI-CEC כדי שהמכשירים שלהם יפעלו עם מכשירים של חברות אחרות. כל יצרן מטמיע את תקן HDMI-CEC בדרכים שונות, ולכן לא תמיד המכשירים מבינים זה את זה והתכונות הנתמכות משתנות בין המכשירים. בגלל השונות הזו, הצרכנים לא יכולים להניח בבטחה ששני מוצרים שמצהירים על תמיכה ב-CEC תואמים לחלוטין.

תמיכה ב-HDMI-CEC 2.0 משפרת את התאימות בין מכשירי HDMI, אם גם המכשיר השולח וגם המכשיר המקבל תומכים בגרסה הזו של התקן.

הפתרון

עם ההשקה של Android TV Input Framework‏ (TIF), ה-HDMI-CEC מאחד את כל המכשירים המחוברים ומצמצם את בעיות התאימות. כדי לטפל בבעיות האלה, נוצר ב-Android שירות מערכת שנקרא HdmiControlService.

הוספת HdmiControlService לסביבת Android מאפשרת ל-Android לספק:

  • הטמעה סטנדרטית של HDMI-CEC לכל היצרנים, כדי לצמצם את חוסר התאימות בין המכשירים. בעבר, היצרנים היו צריכים לפתח הטמעות משלהם של HDMI-CEC או להשתמש בפתרונות של צד שלישי.
  • שירות שנבדק היטב במכשירי HDMI-CEC רבים שכבר נמצאים בשוק. צוות Android ערך מחקר מעמיק בנושא בעיות תאימות שנמצאו במוצרים, אסף טיפים מועילים ממפתחי מכשירים מנוסים בטכנולוגיה הזו. שירות CEC נועד לשמור על איזון בין התקן לבין השינויים שבו, כדי שהוא יפעל עם המוצרים שבהם אנשים כבר משתמשים.

העיצוב הכללי

HdmiControlService מחובר לשאר המערכת, כמו TV Input Framework‏ (TIF), שירות האודיו ושירות ההפעלה, כדי להטמיע את התכונות השונות שצוינו בתקן.

בתרשים הבא מוצגת תמונה של המעבר מבקר CEC מותאם אישית להטמעה של שכבת ההפשטה של החומרה (HAL) הפשוטה יותר של HDMI-CEC.

תרשים שבו מוצגת ההטמעה של HDMI-CEC לפני ואחרי Android 5.0

איור 1. החלפת שירות HDMI Control

הטמעה

בתרשים הבא מוצגת תצוגה מפורטת של שירות הבקרה של HDMI.

תמונה שמראה את פרטי השירות של HDMI Control

איור 2. פרטי השירות של HDMI Control

אלה המרכיבים העיקריים להטמעה תקינה של HDMI-CEC ב-Android:

  • סוג הכיתה HdmiControlManager מספק את ה-API לאפליקציות בעלות הרשאות. שירותי מערכת כמו שירות ניהול הקלט של הטלוויזיה ושירות האודיו יכולים להשתמש בשירות ישירות.
  • השירות מאפשר אירוח של יותר מסוג אחד של מכשיר לוגי.
  • HDMI-CEC מחובר לחומרה באמצעות שכבת הפשטה של החומרה (HAL) כדי לפשט את הטיפול בהבדלים בפרוטוקול ובמנגנוני האותות בין המכשירים. הגדרת ה-HAL זמינה ליצרני המכשירים כדי להטמיע את שכבת ה-HAL.

הערה: יצרני המכשירים צריכים להוסיף את השורה הבאה לקובץ PRODUCT_COPY_FILES בקובץ device.mk.

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

בהתאם למכשיר שלכם – מכשיר HDMI sink או מכשיר HDMI source – יצרני המכשירים צריכים להגדיר את ro.hdmi.device_type ב-device.mk כדי ש-HdmiControlService יפעל כראוי.

במכשירי מקור HDMI, כמו מכשירים במודל 'ישירות ללקוח' (OTT) או ממירים (STB), מגדירים את האפשרויות הבאות:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4

במכשירי HDMI sink, כמו טלוויזיות עם מסך שטוח, מגדירים:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=0
  • לא ניתן לשלב באותו מכשיר בקר CEC קנייני שסופק על ידי יצרן המכשיר עם HdmiControlService. צריך להשבית או להסיר אותו. הדרישות הנפוצות לכך נובעות מהצורך לטפל בפקודות ספציפיות ליצרן. כדי לשלב את הטיפול בפקודות הספציפיות ליצרן בשירות, צריך להרחיב או לשנות אותו. העבודה הזו נותרת בידיו של יצרן המכשיר ולא מצוין על ידי Android. חשוב לזכור שכל שינוי שבוצע בשירות עבור פקודות ספציפיות ליצרן לא יכול להפריע לאופן שבו פקודות רגילות מטופלות, אחרת המכשיר לא יהיה תואם ל-Android.
  • הגישה לשירות HDMI-CEC מוגנת ברמת ההגנה SignatureOrSystem. רק רכיבי המערכת או האפליקציות שממוקמות ב-/system/priv-app יכולים לגשת לשירות. המטרה היא להגן על השירות מפני ניצול לרעה על ידי אפליקציות עם כוונה זדונית.

Android תומך בסוגים TV/Display(0) ו-Playback device(4), שיכולים להנפיק את הפקודה 'הפעלה בלחיצה אחת' כדי להפוך למקור הפעיל, ובסוג Audio System (5) שמטפל במצב אודיו במערכת וב-ARC. אין כרגע תמיכה בסוגים אחרים של מכשירים (Tuner ו-Recorder).

HDMI-CEC HAL

ממשק ה-HAL API של HDMI-CEC מאפשר ל-HdmiControlService להשתמש במשאב החומרה כדי לשלוח או לקבל פקודות HDMI-CEC, להגדיר את ההגדרות הנדרשות ולתקשר (אופציונלי) עם המיקרו-מעבד בפלטפורמה הבסיסית, שייקח את השליטה ב-CEC בזמן שמערכת Android נמצאת במצב המתנה.

גרסה תכונות קובצי HAL
1.0 הגדרת נתוני HAL (כתובות, תכונות). שליחת פקודות HDMI-CEC. רישום קריאה חוזרת (callback) כדי לקבל פקודות HDMI-CEC ואירועי hotplug. IHdmiCec.hal
IHdmiCecCallback.hal
1.1 הצגת הסוגים של HDMI-CEC 2.0 @1.1::IHdmiCec.hal
@1.1::IHdmiCecCallback.hal

בדיקה

הטמעות של HDMI-CEC במכשירים נבדקות ומאומתות באמצעות בדיקות CTS בהתאם ל מסמכי התיעוד של HDMI-CEC CTS.

HDMI-CEC 2.0

מכשירי Android שמשמשים כמקור (הפעלה) וכצינור ניקוז (לוח הטלוויזיה) תומכים ב-HDMI-CEC 2.0. ב-HDMI-CEC 2.0 יש יכולת פעולה הדדית טובה יותר בין מכשירי HDMI, שיפורים בהעברת סיגנל ללא שינוי בשלט רחוק ובדיקות אישור מקיפות יותר. באופן כללי, האינטראקציות של HDMI-CEC 2.0 עם מכשירים אחרים יעילות יותר, וכתוצאה מכך יש פחות תעבורת נתונים ב-HDMI-CEC וגם אינטראקציות מהירות יותר.

כדי שמכשיר יתמוך ב-HDMI-CEC 2.0, צריך להגדיר את המכשיר ואת ההגדרות של המשתמש לשימוש ב-HDMI-CEC 2.0. הטמעת ה-HAL חייבת גם לדווח על תמיכה ב-HDMI-CEC 2.0 בקריאות ל-IHdmiCec#getCecVersion.

הגדרת CEC

אפשר להגדיר את ההתנהגות של HDMI-CEC גם בזמן ה-build (על ידי יצרני ציוד מקורי באמצעות RRO) וגם בסביבת זמן הריצה (על ידי HdmiControlManager @SystemApi).

דוגמאות להגדרות HDMI-CEC:

הגדרה אפשרות
אם התכונה HDMI-CEC מופעלת או מושבתת. מופעל
מושבת
היקף ההודעות של בקרת ההפעלה של HDMI-CEC שנשלחות על ידי מכשיר ההפעלה. לטלוויזיה בלבד
לטלוויזיה ולמערכת האודיו
שידור
ללא שידור

אפליקציות יכולות לשלוח שאילתות לגבי כל אחת מהאפשרויות הזמינות והמותרות כרגע בהגדרות, בזמן הריצה.