استاندارد کنترل لوازم الکترونیکی مصرفی رابط چندرسانهای با کیفیت بالا (HDMI-CEC) به محصولات مصرفی چندرسانهای اجازه میدهد تا با یکدیگر ارتباط برقرار کرده و اطلاعات را تبادل کنند. HDMI-CEC از ویژگیهای بسیاری مانند Remote Control Passthrough و System Audio Control پشتیبانی میکند، اما یکی از محبوبترین آنها One Touch Play است. One Touch Play به دستگاه منبع رسانه اجازه میدهد تا تلویزیون را روشن کرده و پورت ورودی خود را به طور خودکار تغییر دهد، بنابراین لازم نیست برای تغییر از Chromecast به پخشکننده Blu-ray خود، به دنبال کنترل تلویزیون بگردید.
در اندروید ۱۲، کنترل توان نمایشگر متصل به HDMI با کنترل توان نمایشگر داخلی همسو میشود. وقتی یک دستگاه پخش HDMI روشن میشود، سعی میکند تلویزیون متصل را از طریق HDMI CEC One Touch Play روشن کند و به منبع فعال فعلی تبدیل شود. اگر دستگاه در حالی که منبع فعال فعلی است به خواب برود، سعی میکند تلویزیون متصل را خاموش کند.
پشتیبانی از HDMI-CEC عموماً اختیاری است. با این حال، اکثر تولیدکنندگان HDMI-CEC را پذیرفتهاند تا دستگاههایشان با دستگاههای شرکتهای دیگر کار کند. هر تولیدکننده استاندارد HDMI-CEC را به روشهای مختلفی پیادهسازی میکند، بنابراین دستگاهها همیشه یکدیگر را درک نمیکنند و ویژگیهای پشتیبانیشده بین دستگاهها متفاوت است. به دلیل این تفاوت، مصرفکنندگان نمیتوانند با اطمینان فرض کنند که دو محصولی که ادعای پشتیبانی از CEC را دارند، کاملاً سازگار هستند.
پشتیبانی از HDMI-CEC 2.0 به بهبود سازگاری بین دستگاههای HDMI کمک میکند، اگر هم دستگاه فرستنده و هم دستگاه گیرنده از این نسخه از استاندارد پشتیبانی کنند.
راه حل
با معرفی چارچوب ورودی تلویزیون اندروید (TIF)، HDMI-CEC تمام دستگاههای متصل را گرد هم میآورد و مشکلات سازگاری را به حداقل میرساند. اندروید یک سرویس سیستمی به نام HdmiControlService ایجاد کرده است تا این نقاط ضعف را کاهش دهد.
با ارائه HdmiControlService به عنوان بخشی از اکوسیستم اندروید، اندروید امیدوار است موارد زیر را ارائه دهد:
- یک پیادهسازی استاندارد از HDMI-CEC برای همه تولیدکنندگان، که ناسازگاری دستگاهها را کاهش میدهد. پیش از این، تولیدکنندگان مجبور بودند پیادهسازیهای خود از HDMI-CEC را توسعه دهند یا از راهحلهای شخص ثالث استفاده کنند.
- سرویسی که در برابر بسیاری از دستگاههای HDMI-CEC موجود در بازار به خوبی آزمایش شده است. اندروید تحقیقات دقیقی در مورد مشکلات سازگاری موجود در بین محصولات انجام داده و توصیههای مفیدی را از مجریان دستگاه باتجربه در این فناوری جمعآوری کرده است. سرویس CEC به گونهای طراحی شده است که تعادل سالمی بین استاندارد و اصلاحات آن استاندارد برقرار کند تا با محصولاتی که مردم از قبل استفاده میکنند، کار کند.
طراحی کلی
HdmiControlService با بقیه سیستم مانند TV Input Framework (TIF)، سرویس Audio و سرویس Power متصل است تا ویژگیهای مختلفی را که استاندارد مشخص میکند، پیادهسازی کند.
برای نمایش تغییر از یک کنترلر CEC سفارشی به پیادهسازی لایه انتزاعی سختافزاری سادهتر HDMI-CEC (HAL)، نمودار زیر را ببینید.

شکل 1. جایگزینی سرویس کنترل HDMI
پیادهسازی
برای مشاهده جزئیات سرویس کنترل HDMI، نمودار زیر را مشاهده کنید.

شکل 2. جزئیات سرویس کنترل HDMI
در اینجا عناصر کلیدی برای پیادهسازی صحیح HDMI-CEC در اندروید آورده شده است:
- یک کلاس مدیریت
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همزیستی داشته باشد. باید غیرفعال یا حذف شود. الزامات رایج برای این امر از نیاز به مدیریت دستورات خاص سازنده ناشی میشود. کنترلکننده دستورات خاص سازنده باید با گسترش/اصلاح آن در سرویس گنجانده شود. این کار به سازنده دستگاه واگذار شده و توسط اندروید مشخص نشده است. توجه داشته باشید که هرگونه تغییر ایجاد شده در سرویس برای دستورات خاص سازنده نباید با نحوه مدیریت دستورات استاندارد تداخل داشته باشد، در غیر این صورت دستگاه با اندروید سازگار نخواهد بود. - دسترسی به سرویس HDMI-CEC با سطح حفاظت
SignatureOrSystemمحافظت میشود. فقط اجزای سیستم یا برنامههایی که در/system/priv-appقرار دارند میتوانند به این سرویس دسترسی داشته باشند. این امر برای محافظت از سرویس در برابر سوءاستفاده توسط برنامههای مخرب است.
اندروید از نوع TV/Display(0) ، Playback device(4) که میتواند دستور پخش تک لمسی را برای تبدیل شدن به منبع فعال صادر کند و Audio System (5) که حالت صوتی سیستم و ARC را مدیریت میکند، پشتیبانی میکند. انواع دیگر دستگاهها (تیونر و ضبط کننده) در حال حاضر پشتیبانی نمیشوند.
HDMI-CEC HAL
رابط برنامهنویسی کاربردی HDMI-CEC HAL به HdmiControlService اجازه میدهد تا از منابع سختافزاری برای ارسال/دریافت دستورات HDMI-CEC، پیکربندی تنظیمات لازم و (به صورت اختیاری) ارتباط با ریزپردازنده در پلتفرم اصلی که کنترل CEC را در حالت آماده به کار سیستم اندروید بر عهده میگیرد، استفاده کند.
| نسخه | ویژگیها | فایلهای HAL |
|---|---|---|
| ۱.۰ | پیکربندی دادههای HAL (آدرسها، ویژگیها). ارسال دستورات HDMI-CEC. ثبت فراخوانی برای دریافت دستورات HDMI-CEC و رویدادهای اتصال سریع. | IHdmiCec.halIHdmiCecCallback.hal |
| ۱.۱ | معرفی انواع 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 نیز باید در فراخوانیهای IHdmiCec#getCecVersion پشتیبانی از HDMI-CEC 2.0 را گزارش دهد.
پیکربندی CEC
رفتار HDMI-CEC را میتوان هم در زمان ساخت (توسط تولیدکنندگان اصلی تجهیزات (OEM) با استفاده از RROها) و هم در زمان اجرا (توسط HdmiControlManager @SystemApi) پیکربندی کرد.
نمونههایی از تنظیمات HDMI-CEC:
| تنظیم | گزینه |
|---|---|
| فعال یا غیرفعال بودن HDMI-CEC. | فعال شده معلول |
| دامنه پیامهای کنترل توان HDMI-CEC ارسال شده توسط دستگاه پخش. | فقط به تلویزیون به تلویزیون و سیستم صوتی پخش هیچکدام |
برای هر تنظیمی که در حال حاضر موجود است و گزینههای مجاز میتوانند توسط برنامهها در زمان اجرا مورد پرسش قرار گیرند.