Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 36bfe205 authored by Marvin Ramin's avatar Marvin Ramin
Browse files

Limit CEC version on version reported by CEC HAL

The HAL reports a maximum supported CEC version. Limit the CEC version
to the version that the HAL reports the hardware supports.

Bug: 169121290
Test: manual
Change-Id: Iceb72dfb8010ae6392602f4ffc631f5f877fa1c9
parent 7de30409
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -774,8 +774,14 @@ public class HdmiControlService extends SystemService {

    private void initializeCec(int initiatedBy) {
        mAddressAllocated = false;
        mCecVersion = getHdmiCecConfig().getIntValue(
        int settingsCecVersion = getHdmiCecConfig().getIntValue(
                HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION);
        int supportedCecVersion = mCecController.getVersion();

        // Limit the used CEC version to the highest supported version by HAL and selected
        // version in settings (but at least v1.4b).
        mCecVersion = Math.max(HdmiControlManager.HDMI_CEC_VERSION_1_4_B,
                Math.min(settingsCecVersion, supportedCecVersion));

        mCecController.setOption(OptionKey.SYSTEM_CEC_CONTROL, true);
        mCecController.setLanguage(mMenuLanguage);
@@ -2184,6 +2190,7 @@ public class HdmiControlService extends SystemService {

            pw.println("mProhibitMode: " + mProhibitMode);
            pw.println("mPowerStatus: " + mPowerStatusController.getPowerStatus());
            pw.println("mCecVersion: " + mCecVersion);

            // System settings
            pw.println("System_settings:");
+6 −1
Original line number Diff line number Diff line
@@ -58,6 +58,7 @@ final class FakeNativeWrapper implements NativeWrapper {
    private int mMyPhysicalAddress = 0;
    private HdmiPortInfo[] mHdmiPortInfo = null;
    private HdmiCecController.HdmiCecCallback mCallback = null;
    private int mCecVersion = HdmiControlManager.HDMI_CEC_VERSION_2_0;

    @Override
    public String nativeInit() {
@@ -96,7 +97,7 @@ final class FakeNativeWrapper implements NativeWrapper {

    @Override
    public int nativeGetVersion() {
        return HdmiControlManager.HDMI_CEC_VERSION_2_0;
        return mCecVersion;
    }

    @Override
@@ -132,6 +133,10 @@ final class FakeNativeWrapper implements NativeWrapper {
        mPortConnectionStatus.put(port, connected);
    }

    public void setCecVersion(@HdmiControlManager.HdmiCecVersion int cecVersion) {
        mCecVersion = cecVersion;
    }

    public void onCecMessage(HdmiCecMessage hdmiCecMessage) {
        if (mCallback == null) {
            return;
+40 −0
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ import androidx.test.InstrumentationRegistry;
import androidx.test.filters.SmallTest;

import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@@ -622,6 +623,45 @@ public class HdmiControlServiceTest {
        assertEquals(runnerUid, Binder.getCallingWorkSourceUid());
    }

    @Ignore("b/180499471")
    @Test
    public void initCecVersion_limitToMinimumSupportedVersion() {
        mHdmiControlService.getHdmiCecConfig().setIntValue(
                HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
                HdmiControlManager.HDMI_CEC_VERSION_2_0);
        mNativeWrapper.setCecVersion(HdmiControlManager.HDMI_CEC_VERSION_1_4_B);

        mHdmiControlService.initService();
        assertThat(mHdmiControlService.getCecVersion()).isEqualTo(
                HdmiControlManager.HDMI_CEC_VERSION_1_4_B);
    }

    @Ignore("b/180499471")
    @Test
    public void initCecVersion_limitToAtLeast1_4() {
        mHdmiControlService.getHdmiCecConfig().setIntValue(
                HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
                HdmiControlManager.HDMI_CEC_VERSION_2_0);
        mNativeWrapper.setCecVersion(0x0);

        mHdmiControlService.initService();
        assertThat(mHdmiControlService.getCecVersion()).isEqualTo(
                HdmiControlManager.HDMI_CEC_VERSION_1_4_B);
    }

    @Ignore("b/180499471")
    @Test
    public void initCecVersion_useHighestMatchingVersion() {
        mHdmiControlService.getHdmiCecConfig().setIntValue(
                HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
                HdmiControlManager.HDMI_CEC_VERSION_2_0);
        mNativeWrapper.setCecVersion(HdmiControlManager.HDMI_CEC_VERSION_2_0);

        mHdmiControlService.initService();
        assertThat(mHdmiControlService.getCecVersion()).isEqualTo(
                HdmiControlManager.HDMI_CEC_VERSION_2_0);
    }

    private static class VolumeControlFeatureCallback extends
            IHdmiCecVolumeControlFeatureListener.Stub {
        boolean mCallbackReceived = false;