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

תקן High-Definition Multimedia Interface Consumer Electronics Control ‏(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 נועדה לספק:

  • יישום סטנדרטי של 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 Service

הטמעה

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

תמונה שבה מוצגים פרטי השירות של בקרת 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. צריך להשבית או להסיר אותו. הדרישות הנפוצות נובעות מהצורך לטפל בפקודות ספציפיות ליצרן. כדי לשלב את המטפל בפקודות הספציפיות ליצרן בשירות, צריך להרחיב או לשנות אותו. הפעולה הזו נשארת ליצרן המכשיר ולא מצוינת על ידי 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.hal
IHdmiCecCallback.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. רק לטלוויזיה
לטלוויזיה ולמערכת האודיו
שידור
ללא

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