תקן High-Definition Multimedia Interface Consumer Electronics Control (HDMI-CEC) מאפשר למוצרי מולטימדיה לצרכנים לתקשר ולהחליף מידע ביניהם. HDMI-CEC תומך בהרבה תכונות, כמו העברה של פקודות משלט רחוק ושליטה באודיו של המערכת, אבל אחת התכונות הפופולריות ביותר היא הפעלה בנגיעה אחת. התכונה One Touch Play מאפשרת למכשיר מקור מדיה להפעיל את הטלוויזיה ולהעביר את יציאת הקלט שלה באופן אוטומטי, כך שלא צריך לחפש את השלט של הטלוויזיה כדי לעבור מ-Chromecast לנגן Blu-ray.
ב-Android 12, בקרת ההפעלה של המסך שמחובר ל-HDMI תואמת לבקרת ההפעלה של המסך הפנימי. כשמכשיר הפעלה שמחובר באמצעות HDMI מתעורר, הוא מנסה להעיר את הטלוויזיה המחוברת ולהפוך למקור הפעיל הנוכחי באמצעות הפעלה בנגיעה אחת של HDMI CEC. אם המכשיר עובר למצב שינה בזמן שהוא המקור הפעיל הנוכחי, הוא ינסה לכבות את הטלוויזיה המחוברת.
בדרך כלל, התמיכה ב-HDMI-CEC היא אופציונלית. עם זאת, רוב היצרנים אימצו את HDMI-CEC כדי שהמכשירים שלהם יפעלו עם מכשירים של חברות אחרות. כל יצרן מיישם את התקן HDMI-CEC בדרכים שונות, ולכן לא תמיד המכשירים מבינים זה את זה, והתכונות הנתמכות משתנות בין המכשירים. בגלל השונות הזו, הצרכנים לא יכולים להניח בבטחה ששני מוצרים שטוענים לתמיכה ב-CEC תואמים לחלוטין.
תמיכה ב-HDMI-CEC 2.0 משפרת את התאימות בין מכשירי HDMI אם גם המכשיר השולח וגם המכשיר המקבל תומכים בגרסה הזו של התקן.
פתרון
עם ההשקה של Android TV Input Framework (TIF), HDMI-CEC מאחד את כל המכשירים המחוברים ומצמצם את בעיות התאימות.
כדי לפתור את הבעיות האלה, מערכת Android יצרה שירות מערכת בשם HdmiControlService.
אנחנו מציעים את HdmiControlService כחלק ממערכת Android, ומקווים לספק:
- יישום סטנדרטי של HDMI-CEC לכל היצרנים, שיצמצם את חוסר התאימות בין מכשירים. בעבר, היצרנים היו צריכים לפתח הטמעות משלהם של HDMI-CEC או להשתמש בפתרונות של צד שלישי.
- שירות שנבדק היטב עם מכשירי HDMI-CEC רבים שכבר קיימים בשוק. צוות Android ערך מחקר מקיף בנושא בעיות תאימות שנמצאו במוצרים, ואסף עצות מועילות ממיישמי מכשירים שמנוסים בטכנולוגיה. שירות ה-CEC נועד לשמור על איזון בריא בין התקן לבין השינויים בתקן, כדי שהוא יפעל עם המוצרים שבהם אנשים כבר משתמשים.
עיצוב כללי
HdmiControlService מחובר לשאר המערכת, כמו TV Input Framework (TIF), שירות האודיו ושירות ההפעלה, כדי להטמיע את התכונות השונות שמוגדרות בתקן.
בתרשים הבא מוצג מעבר מבקר CEC מותאם אישית להטמעה של שכבת הפשטת חומרה (HAL) פשוטה יותר של HDMI-CEC.
איור 1. החלפה של HDMI Control Service
הטמעה
בתרשים הבא מוצג פירוט של שירות בקרת HDMI.
איור 2. פרטי שירות של שליטת HDMI
אלה המרכיבים העיקריים להטמעה תקינה של HDMI-CEC ב-Android:
- כיתת ניהול
HdmiControlManagerמספקת לאפליקציות עם הרשאות מיוחדות את ה-API. שירותי מערכת כמו TV Input Manager service ו-Audio service יכולים להשתמש בשירות ישירות. - השירות מיועד לאירוח של יותר מסוג אחד של מכשיר לוגי.
- החיבור של 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. צריך להשבית או להסיר אותה. הדרישות הנפוצות נובעות מהצורך לטפל בפקודות ספציפיות ליצרן. כדי לשלב את ה-handler של הפקודות הספציפיות ליצרן בשירות, צריך להרחיב או לשנות אותו. העבודה הזו נשארת ליצרן המכשיר ולא מצוינת על ידי Android. חשוב לדעת שכל שינוי שמתבצע בשירות עבור פקודות ספציפיות ליצרן לא יכול לשנות את האופן שבו פקודות רגילות מטופלות, אחרת המכשיר לא יהיה תואם ל-Android. - הגישה לשירות HDMI-CEC מוגנת ברמת ההגנה
SignatureOrSystem. רק רכיבי מערכת או האפליקציות שמוצבות ב-/system/priv-appיכולים לגשת לשירות. הדבר נעשה כדי להגן על השירות מפני ניצול לרעה על ידי אפליקציות עם כוונות זדוניות.
מערכת Android תומכת בסוג TV/Display(0), Playback
device(4) שיכול להנפיק את הפקודה One Touch Play כדי להפוך למקור הפעיל, ובסוג Audio System (5) שמטפל במצב האודיו של המערכת וב-ARC.
בשלב הזה אין תמיכה בסוגים אחרים של מכשירים (מכשירי כוונון ומכשירי הקלטה).
HDMI-CEC HAL
ממשק ה-API של HDMI-CEC HAL מאפשר ל-HdmiControlService להשתמש במשאב החומרה כדי לשלוח ולקבל פקודות HDMI-CEC, להגדיר את ההגדרות הנדרשות וגם (באופן אופציונלי) לתקשר עם המיקרו-מעבד בפלטפורמה הבסיסית שישתלט על בקרת ה-CEC בזמן שמערכת Android נמצאת במצב המתנה.
| גרסה | תכונות | קובצי HAL |
|---|---|---|
| 1.0 | הגדרת נתוני HAL (כתובות, תכונות). שליחת פקודות HDMI-CEC. רישום קריאה חוזרת (callback) לקבלת פקודות HDMI-CEC ואירועי hotplug. | IHdmiCec.halIHdmiCecCallback.hal |
| 1.1 | הוספת סוגים של HDMI-CEC 2.0 | @1.1::IHdmiCec.hal@1.1::IHdmiCecCallback.hal |
בדיקה
הטמעות של HDMI-CEC במכשירים נבדקות ומאומתות באמצעות בדיקות CTS בהתאם ל מסמכי ה-CTS של HDMI-CEC.
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. | לשידור רק בטלוויזיה לשידור בטלוויזיה ובמערכת האודיו לשידור ללא שידור |
אפליקציות יכולות לשלוח שאילתות לגבי כל הגדרה שזמינה כרגע ואפשרויות מותרות בזמן הריצה.