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

תקן HDMI-CEC (HDMI-CEC) מאפשר למוצרי צריכה אלקטרוניים של ממשק מולטימדיה, לתקשר ביניהם ולהחליף מידע זה עם זה. 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 שנשלחות על ידי מכשיר הפעלה. לטלוויזיה בלבד
לטלוויזיה ולמערכת אודיו
שידור
ללא

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