سرویس کنترل HDMI-CEC

استاندارد High-Definition Multimedia Consumer Electronics Control (HDMI-CEC) به محصولات مصرفی چندرسانه ای اجازه می دهد تا با یکدیگر ارتباط برقرار کرده و اطلاعات را مبادله کنند. HDMI-CEC از بسیاری از ویژگی ها مانند Remote Control Passthrough و System Audio Control پشتیبانی می کند، اما یکی از محبوب ترین آنها One Touch Play است. One Touch Play به دستگاه منبع رسانه اجازه می‌دهد تلویزیون را روشن کند و درگاه ورودی آن را به‌طور خودکار تغییر دهد، بنابراین لازم نیست برای جابجایی از Chromecast خود به پخش‌کننده Blu-ray به دنبال کنترل از راه دور تلویزیون بگردید.

در اندروید 12، کنترل برق نمایشگر متصل به HDMI با کنترل برق نمایشگر داخلی هماهنگ است. هنگامی که یک دستگاه پخش HDMI بیدار می شود، سعی می کند تلویزیون متصل را بیدار کند و از طریق HDMI CEC One Touch Play به منبع فعال فعلی تبدیل شود. اگر دستگاه در حالی که منبع فعال فعلی است به حالت خواب می رود، سپس سعی می کند تلویزیون متصل را خاموش کند.

پشتیبانی از HDMI-CEC به طور کلی اختیاری است. با این حال، اکثر تولید کنندگان HDMI-CEC را اتخاذ کرده اند، بنابراین دستگاه های آنها با دستگاه های شرکت های دیگر کار می کنند. هر سازنده استاندارد HDMI-CEC را به روش‌های مختلف پیاده‌سازی می‌کند، بنابراین دستگاه‌ها همیشه یکدیگر را درک نمی‌کنند و ویژگی‌های پشتیبانی‌شده بین دستگاه‌ها متفاوت است. به دلیل این تفاوت، مصرف کنندگان نمی توانند با خیال راحت فرض کنند که دو محصولی که ادعا می کنند از CEC پشتیبانی می کنند کاملاً سازگار هستند.

پشتیبانی از HDMI-CEC 2.0 به بهبود سازگاری بین دستگاه‌های HDMI کمک می‌کند در صورتی که هر دو دستگاه فرستنده و گیرنده از این نسخه استاندارد پشتیبانی کنند.

راه حل

با معرفی چارچوب ورودی Android TV (TIF)، HDMI-CEC همه دستگاه های متصل را گرد هم می آورد و مشکلات سازگاری را به حداقل می رساند. اندروید یک سرویس سیستمی به نام HdmiControlService ایجاد کرده است تا این نقاط درد را کاهش دهد.

با ارائه HdmiControlService به عنوان بخشی از اکوسیستم اندروید، اندروید امیدوار است که ارائه دهد:

  • اجرای استاندارد HDMI-CEC برای همه سازندگان، که ناسازگاری دستگاه را کاهش می دهد. پیش از این، سازندگان مجبور بودند پیاده سازی های خود را از HDMI-CEC توسعه دهند یا از راه حل های شخص ثالث استفاده کنند.
  • سرویسی که به خوبی در برابر بسیاری از دستگاه های HDMI-CEC در حال حاضر در بازار آزمایش شده است. اندروید تحقیقات دقیقی را در مورد مسائل مربوط به سازگاری در میان محصولات انجام داده و توصیه های مفیدی را از مجریان دستگاه با تجربه در این فناوری جمع آوری کرده است. سرویس CEC برای حفظ تعادل سالم بین استاندارد و اصلاحات آن استاندارد طراحی شده است تا با محصولاتی که مردم قبلاً استفاده می‌کنند کار کند.

طراحی کلی

HdmiControlService با بقیه سیستم مانند TV Input Framework (TIF)، سرویس صوتی و سرویس Power متصل است تا ویژگی های مختلفی را که استاندارد مشخص می کند، پیاده سازی کند.

نمودار زیر را برای تصویری از سوئیچ از یک کنترلر CEC سفارشی تا اجرای لایه انتزاعی سخت افزاری HDMI-CEC ساده تر (HAL) ببینید.

نموداری که نشان می دهد چگونه HDMI-CEC قبل و بعد از Android 5.0 پیاده سازی شده است

شکل 1. جایگزینی سرویس کنترل HDMI

پیاده سازی

برای مشاهده جزئیات سرویس کنترل HDMI به نمودار زیر مراجعه کنید.

تصویری که نحوه جزئیات سرویس HDMI Control را نشان می دهد

شکل 2. جزئیات سرویس کنترل HDMI

در اینجا عناصر کلیدی برای اجرای صحیح 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 است یا یک دستگاه منبع HDMI، سازندگان دستگاه باید ro.hdmi.device_type در device.mk تنظیم کنند تا HdmiControlService به درستی کار کند.

برای دستگاه های منبع HDMI، مانند دستگاه های Over the Top (OTT) یا Set-top box (STB)، تنظیم کنید:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4

برای دستگاه‌های سینک HDMI، مانند تلویزیون‌های پنلی، تنظیم کنید:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=0
  • کنترلر CEC اختصاصی ارائه شده توسط سازنده دستگاه نمی تواند با HdmiControlService همزیستی داشته باشد. باید غیرفعال یا حذف شود. الزامات رایج برای این امر ناشی از نیاز به رسیدگی به دستورات خاص سازنده است. کنترل کننده فرمان خاص سازنده باید با گسترش/تغییر آن در سرویس گنجانده شود. این کار به سازنده دستگاه واگذار شده و توسط اندروید مشخص نشده است. توجه داشته باشید که هرگونه تغییری که در سرویس برای دستورات خاص سازنده ایجاد می‌شود، نباید در نحوه مدیریت دستورات استاندارد تداخل داشته باشد، در غیر این صورت دستگاه با Android سازگار نخواهد بود.
  • دسترسی به سرویس HDMI-CEC با سطح حفاظت SignatureOrSystem محافظت می شود. فقط اجزای سیستم یا برنامه های قرار داده شده در /system/priv-app می توانند به این سرویس دسترسی داشته باشند. این برای محافظت از سرویس در برابر سوء استفاده توسط برنامه ها با اهداف مخرب است.

Android از نوع TV/Display(0) ، Playback device(4) که می تواند فرمان پخش با یک لمس را برای تبدیل شدن به منبع فعال صادر کند و Audio System (5) که حالت صوتی سیستم و ARC را کنترل می کند، پشتیبانی می کند. سایر انواع دستگاه (Tuner و Recorder) در حال حاضر پشتیبانی نمی شوند.

HDMI-CEC HAL

HDMI-CEC HAL API به HdmiControlService اجازه می دهد تا از منبع سخت افزاری برای ارسال/دریافت دستورات HDMI-CEC، پیکربندی تنظیمات لازم و (به صورت اختیاری) ارتباط با ریزپردازنده در پلتفرم زیرین که کنترل CEC را در حالی که Android به عهده می گیرد، استفاده کند. سیستم در حالت آماده به کار است.

نسخه ویژگی ها فایل های HAL
1.0 پیکربندی داده های HAL (آدرس ها، ویژگی ها). دستورات HDMI-CEC را ارسال کنید. برای دریافت دستورات 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

دستگاه های منبع اندروید (پخش) و سینک (پانل تلویزیون) از HDMI-CEC 2.0 پشتیبانی می کنند. HDMI-CEC 2.0 قابلیت همکاری بهتری را بین دستگاه‌های HDMI، بهبودهایی در Remote Control Passthrough و آزمایش‌های گواهینامه گسترده‌تر ارائه می‌دهد. به طور کلی، تعامل HDMI-CEC 2.0 با دستگاه های دیگر کارآمدتر است، و در نتیجه ترافیک HDMI-CEC کمتر و همچنین تعامل سریع تر است.

برای اینکه دستگاهی از HDMI-CEC 2.0 پشتیبانی کند، پیکربندی دستگاه و کاربر باید برای استفاده از HDMI-CEC 2.0 تنظیم شود. پیاده سازی HAL همچنین باید پشتیبانی از HDMI-CEC 2.0 را در تماس با IHdmiCec#getCecVersion گزارش دهد.

پیکربندی CEC

رفتار HDMI-CEC را می توان در زمان ساخت (توسط OEM با استفاده از RRO) و زمان اجرا (توسط HdmiControlManager @SystemApi) پیکربندی کرد.

نمونه هایی از تنظیمات HDMI-CEC:

تنظیم گزینه
آیا HDMI-CEC فعال یا غیرفعال است. فعال شد
از کار افتاده است
دامنه پیام های کنترل برق HDMI-CEC ارسال شده توسط دستگاه پخش. فقط به تلویزیون
به تلویزیون و سیستم صوتی
پخش می شود
هیچ کدام

برای هر تنظیمی که در حال حاضر موجود است و گزینه‌های مجاز را می‌توان در زمان اجرا توسط برنامه‌ها جستجو کرد.

،

استاندارد High-Definition Multimedia Consumer Electronics Control (HDMI-CEC) به محصولات مصرفی چندرسانه ای اجازه می دهد تا با یکدیگر ارتباط برقرار کرده و اطلاعات را مبادله کنند. HDMI-CEC از بسیاری از ویژگی ها مانند Remote Control Passthrough و System Audio Control پشتیبانی می کند، اما یکی از محبوب ترین آنها One Touch Play است. One Touch Play به دستگاه منبع رسانه اجازه می‌دهد تلویزیون را روشن کند و درگاه ورودی آن را به‌طور خودکار تغییر دهد، بنابراین لازم نیست برای جابجایی از Chromecast خود به پخش‌کننده Blu-ray به دنبال کنترل از راه دور تلویزیون بگردید.

در اندروید 12، کنترل برق نمایشگر متصل به HDMI با کنترل برق نمایشگر داخلی هماهنگ است. هنگامی که یک دستگاه پخش HDMI بیدار می شود، سعی می کند تلویزیون متصل را بیدار کند و از طریق HDMI CEC One Touch Play به منبع فعال فعلی تبدیل شود. اگر دستگاه در حالی که منبع فعال فعلی است به حالت خواب می رود، سپس سعی می کند تلویزیون متصل را خاموش کند.

پشتیبانی از HDMI-CEC به طور کلی اختیاری است. با این حال، اکثر تولید کنندگان HDMI-CEC را اتخاذ کرده اند، بنابراین دستگاه های آنها با دستگاه های شرکت های دیگر کار می کنند. هر سازنده استاندارد HDMI-CEC را به روش‌های مختلف پیاده‌سازی می‌کند، بنابراین دستگاه‌ها همیشه یکدیگر را درک نمی‌کنند و ویژگی‌های پشتیبانی‌شده بین دستگاه‌ها متفاوت است. به دلیل این تفاوت، مصرف کنندگان نمی توانند با خیال راحت فرض کنند که دو محصولی که ادعا می کنند از CEC پشتیبانی می کنند کاملاً سازگار هستند.

پشتیبانی از HDMI-CEC 2.0 به بهبود سازگاری بین دستگاه‌های HDMI کمک می‌کند در صورتی که هر دو دستگاه فرستنده و گیرنده از این نسخه استاندارد پشتیبانی کنند.

راه حل

با معرفی چارچوب ورودی Android TV (TIF)، HDMI-CEC همه دستگاه های متصل را گرد هم می آورد و مشکلات سازگاری را به حداقل می رساند. اندروید یک سرویس سیستمی به نام HdmiControlService ایجاد کرده است تا این نقاط درد را کاهش دهد.

با ارائه HdmiControlService به عنوان بخشی از اکوسیستم اندروید، اندروید امیدوار است که ارائه دهد:

  • اجرای استاندارد HDMI-CEC برای همه سازندگان، که ناسازگاری دستگاه را کاهش می دهد. پیش از این، سازندگان مجبور بودند پیاده سازی های خود را از HDMI-CEC توسعه دهند یا از راه حل های شخص ثالث استفاده کنند.
  • سرویسی که به خوبی در برابر بسیاری از دستگاه های HDMI-CEC در حال حاضر در بازار آزمایش شده است. اندروید تحقیقات دقیقی را در مورد مسائل مربوط به سازگاری در میان محصولات انجام داده و توصیه های مفیدی را از مجریان دستگاه با تجربه در این فناوری جمع آوری کرده است. سرویس CEC برای حفظ تعادل سالم بین استاندارد و اصلاحات آن استاندارد طراحی شده است تا با محصولاتی که مردم قبلاً استفاده می‌کنند کار کند.

طراحی کلی

HdmiControlService با بقیه سیستم مانند TV Input Framework (TIF)، سرویس صوتی و سرویس Power متصل است تا ویژگی های مختلفی را که استاندارد مشخص می کند، پیاده سازی کند.

نمودار زیر را برای تصویری از سوئیچ از یک کنترلر CEC سفارشی تا اجرای لایه انتزاعی سخت افزاری HDMI-CEC ساده تر (HAL) ببینید.

نموداری که نشان می دهد چگونه HDMI-CEC قبل و بعد از Android 5.0 پیاده سازی شده است

شکل 1. جایگزینی سرویس کنترل HDMI

پیاده سازی

برای مشاهده جزئیات سرویس کنترل HDMI به نمودار زیر مراجعه کنید.

تصویری که نحوه جزئیات سرویس HDMI Control را نشان می دهد

شکل 2. جزئیات سرویس کنترل HDMI

در اینجا عناصر کلیدی برای اجرای صحیح 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 است یا یک دستگاه منبع HDMI، سازندگان دستگاه باید ro.hdmi.device_type در device.mk تنظیم کنند تا HdmiControlService به درستی کار کند.

برای دستگاه های منبع HDMI، مانند دستگاه های Over the Top (OTT) یا Set-top box (STB)، تنظیم کنید:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=4

برای دستگاه‌های سینک HDMI، مانند تلویزیون‌های پنلی، تنظیم کنید:

PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=0
  • کنترلر CEC اختصاصی ارائه شده توسط سازنده دستگاه نمی تواند با HdmiControlService همزیستی داشته باشد. باید غیرفعال یا حذف شود. الزامات رایج برای این امر ناشی از نیاز به رسیدگی به دستورات خاص سازنده است. کنترل کننده فرمان خاص سازنده باید با گسترش/تغییر آن در سرویس گنجانده شود. این کار به سازنده دستگاه واگذار شده و توسط اندروید مشخص نشده است. توجه داشته باشید که هرگونه تغییری که در سرویس برای دستورات خاص سازنده ایجاد می‌شود، نباید در نحوه مدیریت دستورات استاندارد تداخل داشته باشد، در غیر این صورت دستگاه با Android سازگار نخواهد بود.
  • دسترسی به سرویس HDMI-CEC با سطح حفاظت SignatureOrSystem محافظت می شود. فقط اجزای سیستم یا برنامه های قرار داده شده در /system/priv-app می توانند به این سرویس دسترسی داشته باشند. این برای محافظت از سرویس در برابر سوء استفاده توسط برنامه ها با اهداف مخرب است.

Android از نوع TV/Display(0) ، Playback device(4) که می تواند فرمان پخش با یک لمس را برای تبدیل شدن به منبع فعال صادر کند و Audio System (5) که حالت صوتی سیستم و ARC را کنترل می کند، پشتیبانی می کند. سایر انواع دستگاه (Tuner و Recorder) در حال حاضر پشتیبانی نمی شوند.

HDMI-CEC HAL

HDMI-CEC HAL API به HdmiControlService اجازه می دهد تا از منبع سخت افزاری برای ارسال/دریافت دستورات HDMI-CEC، پیکربندی تنظیمات لازم و (به صورت اختیاری) ارتباط با ریزپردازنده در پلتفرم زیرین که کنترل CEC را در حالی که Android به عهده می گیرد، استفاده کند. سیستم در حالت آماده به کار است.

نسخه ویژگی ها فایل های HAL
1.0 پیکربندی داده های HAL (آدرس ها، ویژگی ها). دستورات HDMI-CEC را ارسال کنید. برای دریافت دستورات 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

دستگاه های منبع اندروید (پخش) و سینک (پانل تلویزیون) از HDMI-CEC 2.0 پشتیبانی می کنند. HDMI-CEC 2.0 قابلیت همکاری بهتری را بین دستگاه‌های HDMI، بهبودهایی در Remote Control Passthrough و آزمایش‌های گواهینامه گسترده‌تر ارائه می‌دهد. به طور کلی، تعامل HDMI-CEC 2.0 با دستگاه های دیگر کارآمدتر است، و در نتیجه ترافیک HDMI-CEC کمتر و همچنین تعامل سریع تر است.

برای اینکه دستگاهی از HDMI-CEC 2.0 پشتیبانی کند، پیکربندی دستگاه و کاربر باید برای استفاده از HDMI-CEC 2.0 تنظیم شود. پیاده سازی HAL همچنین باید پشتیبانی از HDMI-CEC 2.0 را در تماس با IHdmiCec#getCecVersion گزارش دهد.

پیکربندی CEC

رفتار HDMI-CEC را می توان در زمان ساخت (توسط OEM با استفاده از RRO) و زمان اجرا (توسط HdmiControlManager @SystemApi) پیکربندی کرد.

نمونه هایی از تنظیمات HDMI-CEC:

تنظیم گزینه
آیا HDMI-CEC فعال یا غیرفعال است. فعال شد
از کار افتاده است
دامنه پیام های کنترل برق HDMI-CEC ارسال شده توسط دستگاه پخش. فقط به تلویزیون
به تلویزیون و سیستم صوتی
پخش می شود
هیچ کدام

برای هر تنظیمی که در حال حاضر موجود است و گزینه‌های مجاز را می‌توان در زمان اجرا توسط برنامه‌ها جستجو کرد.