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

Commit 1833e43e authored by Marvin Ramin's avatar Marvin Ramin
Browse files

Update CEC device features constants and handling

This change add IntDef for better handling of CEC device feature
constants. Also update the default device features reported by different
devices. Make CEC ARC feature dependent on the availability of a
physical ARC port on the device.

Bug: 166227212
Test: atest com.android.server.hdmi
Change-Id: Ie6909d47a753501d98cc71959234bf0e2b843694
parent ba500e96
Loading
Loading
Loading
Loading
+39 −0
Original line number Diff line number Diff line
@@ -507,6 +507,15 @@ final class Constants {
    static final int ALL_DEVICE_TYPES_PLAYBACK = 4;
    static final int ALL_DEVICE_TYPES_AUDIO_SYSTEM = 3;
    static final int ALL_DEVICE_TYPES_SWITCH = 2;
    @IntDef({
            ALL_DEVICE_TYPES_TV,
            ALL_DEVICE_TYPES_RECORDER,
            ALL_DEVICE_TYPES_TUNER,
            ALL_DEVICE_TYPES_PLAYBACK,
            ALL_DEVICE_TYPES_AUDIO_SYSTEM,
            ALL_DEVICE_TYPES_SWITCH
    })
    @interface DeviceType {}

    static final int DEVICE_FEATURE_TV_SUPPORTS_RECORD_TV_SCREEN = 6;
    static final int DEVICE_FEATURE_TV_SUPPORTS_SET_OSD_STRING = 5;
@@ -514,21 +523,51 @@ final class Constants {
    static final int DEVICE_FEATURE_SUPPORTS_SET_AUDIO_RATE = 3;
    static final int DEVICE_FEATURE_SINK_SUPPORTS_ARC_TX = 2;
    static final int DEVICE_FEATURE_SOURCE_SUPPORTS_ARC_RX = 1;
    @IntDef({
            DEVICE_FEATURE_TV_SUPPORTS_RECORD_TV_SCREEN,
            DEVICE_FEATURE_TV_SUPPORTS_SET_OSD_STRING,
            DEVICE_FEATURE_SUPPORTS_DECK_CONTROL,
            DEVICE_FEATURE_SUPPORTS_SET_AUDIO_RATE,
            DEVICE_FEATURE_SINK_SUPPORTS_ARC_TX,
            DEVICE_FEATURE_SOURCE_SUPPORTS_ARC_RX
    })
    @interface DeviceFeature {}

    static final int RC_PROFILE_TV = 0;
    static final int RC_PROFILE_SOURCE = 1;
    @IntDef({
            RC_PROFILE_TV,
            RC_PROFILE_SOURCE
    })
    @interface RcProfile {}

    static final int RC_PROFILE_TV_NONE = 0x0;
    static final int RC_PROFILE_TV_ONE = 0x2;
    static final int RC_PROFILE_TV_TWO = 0x6;
    static final int RC_PROFILE_TV_THREE = 0xA;
    static final int RC_PROFILE_TV_FOUR = 0xE;
    @IntDef({
            RC_PROFILE_TV_NONE,
            RC_PROFILE_TV_ONE,
            RC_PROFILE_TV_TWO,
            RC_PROFILE_TV_THREE,
            RC_PROFILE_TV_FOUR
    })
    @interface RcProfileTv {}

    static final int RC_PROFILE_SOURCE_HANDLES_ROOT_MENU = 4;
    static final int RC_PROFILE_SOURCE_HANDLES_SETUP_MENU = 3;
    static final int RC_PROFILE_SOURCE_HANDLES_CONTENTS_MENU = 2;
    static final int RC_PROFILE_SOURCE_HANDLES_TOP_MENU = 1;
    static final int RC_PROFILE_SOURCE_HANDLES_MEDIA_CONTEXT_SENSITIVE_MENU = 0;
    @IntDef({
            RC_PROFILE_SOURCE_HANDLES_ROOT_MENU,
            RC_PROFILE_SOURCE_HANDLES_SETUP_MENU,
            RC_PROFILE_SOURCE_HANDLES_CONTENTS_MENU,
            RC_PROFILE_SOURCE_HANDLES_TOP_MENU,
            RC_PROFILE_SOURCE_HANDLES_MEDIA_CONTEXT_SENSITIVE_MENU
    })
    @interface RcProfileSource {}

    private Constants() {
        /* cannot be instantiated */
+1 −0
Original line number Diff line number Diff line
@@ -554,6 +554,7 @@ abstract class HdmiCecLocalDevice {
        return false;
    }

    @Constants.RcProfile
    protected abstract int getRcProfile();

    protected abstract List<Integer> getRcFeatures();
+7 −3
Original line number Diff line number Diff line
@@ -47,8 +47,6 @@ import com.android.server.hdmi.HdmiAnnotations.ServiceThreadOnly;
import com.android.server.hdmi.HdmiUtils.CodecSad;
import com.android.server.hdmi.HdmiUtils.DeviceConfig;

import com.google.android.collect.Lists;

import org.xmlpull.v1.XmlPullParserException;

import java.io.File;
@@ -179,7 +177,13 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource {

    @Override
    protected List<Integer> getDeviceFeatures() {
        return Lists.newArrayList(Constants.DEVICE_FEATURE_SOURCE_SUPPORTS_ARC_RX);
        List<Integer> deviceFeatures = new ArrayList<>();

        if (SystemProperties.getBoolean(Constants.PROPERTY_ARC_SUPPORT, true)) {
            deviceFeatures.add(Constants.DEVICE_FEATURE_SOURCE_SUPPORTS_ARC_RX);
        }

        return deviceFeatures;
    }

    @Override
+3 −4
Original line number Diff line number Diff line
@@ -296,6 +296,7 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice {
        // do nothing
    }

    @Constants.RcProfile
    @Override
    protected int getRcProfile() {
        return Constants.RC_PROFILE_SOURCE;
@@ -303,10 +304,8 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice {

    @Override
    protected List<Integer> getRcFeatures() {
        return Lists.newArrayList(Constants.RC_PROFILE_SOURCE_HANDLES_CONTENTS_MENU,
                Constants.RC_PROFILE_SOURCE_HANDLES_ROOT_MENU,
                Constants.RC_PROFILE_SOURCE_HANDLES_SETUP_MENU,
                Constants.RC_PROFILE_SOURCE_HANDLES_TOP_MENU);
        return Lists.newArrayList(Constants.RC_PROFILE_SOURCE_HANDLES_ROOT_MENU,
                Constants.RC_PROFILE_SOURCE_HANDLES_SETUP_MENU);
    }

    @Override
+17 −2
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@ import com.android.server.hdmi.HdmiControlService.SendMessageCallback;

import com.google.android.collect.Lists;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
@@ -1480,6 +1481,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
        return true;
    }

    @Constants.RcProfile
    @Override
    protected int getRcProfile() {
        return Constants.RC_PROFILE_TV;
@@ -1492,8 +1494,21 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {

    @Override
    protected List<Integer> getDeviceFeatures() {
        return Lists.newArrayList(Constants.DEVICE_FEATURE_SINK_SUPPORTS_ARC_TX,
                Constants.DEVICE_FEATURE_TV_SUPPORTS_RECORD_TV_SCREEN);
        List<Integer> deviceFeatures = new ArrayList<>();

        boolean hasArcPort = false;
        List<HdmiPortInfo> ports = mService.getPortInfo();
        for (HdmiPortInfo port : ports) {
            if (isArcFeatureEnabled(port.getId())) {
                hasArcPort = true;
                break;
            }
        }
        if (hasArcPort) {
            deviceFeatures.add(Constants.DEVICE_FEATURE_SINK_SUPPORTS_ARC_TX);
        }
        deviceFeatures.add(Constants.DEVICE_FEATURE_TV_SUPPORTS_RECORD_TV_SCREEN);
        return deviceFeatures;
    }

    @Override
Loading