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

Commit 23ab9e57 authored by Marvin Ramin's avatar Marvin Ramin Committed by Android (Google) Code Review
Browse files

Merge "Add new HDMI CEC messages"

parents 87a9b4f7 b27e202b
Loading
Loading
Loading
Loading
+110 −72
Original line number Diff line number Diff line
@@ -151,6 +151,10 @@ final class Constants {
            MESSAGE_SET_EXTERNAL_TIMER,
            MESSAGE_REPORT_SHORT_AUDIO_DESCRIPTOR,
            MESSAGE_REQUEST_SHORT_AUDIO_DESCRIPTOR,
            MESSAGE_GIVE_FEATURES,
            MESSAGE_REPORT_FEATURES,
            MESSAGE_REQUEST_CURRENT_LATENCY,
            MESSAGE_REPORT_CURRENT_LATENCY,
            MESSAGE_INITIATE_ARC,
            MESSAGE_REPORT_ARC_INITIATED,
            MESSAGE_REPORT_ARC_TERMINATED,
@@ -160,7 +164,8 @@ final class Constants {
            MESSAGE_CDC_MESSAGE,
            MESSAGE_ABORT,
    })
    public @interface FeatureOpcode {}
    public @interface FeatureOpcode {
    }

    static final int MESSAGE_FEATURE_ABORT = 0x00;
    static final int MESSAGE_IMAGE_VIEW_ON = 0x04;
@@ -225,6 +230,10 @@ final class Constants {
    static final int MESSAGE_SET_EXTERNAL_TIMER = 0xA2;
    static final int MESSAGE_REPORT_SHORT_AUDIO_DESCRIPTOR = 0xA3;
    static final int MESSAGE_REQUEST_SHORT_AUDIO_DESCRIPTOR = 0xA4;
    static final int MESSAGE_GIVE_FEATURES = 0xA5;
    static final int MESSAGE_REPORT_FEATURES = 0xA6;
    static final int MESSAGE_REQUEST_CURRENT_LATENCY = 0xA7;
    static final int MESSAGE_REPORT_CURRENT_LATENCY = 0xA8;
    static final int MESSAGE_INITIATE_ARC = 0xC0;
    static final int MESSAGE_REPORT_ARC_INITIATED = 0xC1;
    static final int MESSAGE_REPORT_ARC_TERMINATED = 0xC2;
@@ -501,6 +510,35 @@ final class Constants {
    static final int VERSION_1_4 = 0x05;
    static final int VERSION_2_0 = 0x06;

    static final int ALL_DEVICE_TYPES_TV = 7;
    static final int ALL_DEVICE_TYPES_RECORDER = 6;
    static final int ALL_DEVICE_TYPES_TUNER = 5;
    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;

    static final int DEVICE_FEATURE_TV_SUPPORTS_RECORD_TV_SCREEN = 6;
    static final int DEVICE_FEATURE_TV_SUPPORTS_SET_OSD_STRING = 5;
    static final int DEVICE_FEATURE_SUPPORTS_DECK_CONTROL = 4;
    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;

    static final int RC_PROFILE_TV = 0;
    static final int RC_PROFILE_SOURCE = 1;

    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;

    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;

    private Constants() {
        /* cannot be instantiated */
    }
+29 −0
Original line number Diff line number Diff line
@@ -351,6 +351,8 @@ abstract class HdmiCecLocalDevice {
                return handleRequestShortAudioDescriptor(message);
            case Constants.MESSAGE_REPORT_SHORT_AUDIO_DESCRIPTOR:
                return handleReportShortAudioDescriptor(message);
            case Constants.MESSAGE_GIVE_FEATURES:
                return handleGiveFeatures(message);
            default:
                return false;
        }
@@ -551,6 +553,33 @@ abstract class HdmiCecLocalDevice {
        return false;
    }

    protected abstract int getRcProfile();

    protected abstract List<Integer> getRcFeatures();

    protected abstract List<Integer> getDeviceFeatures();

    protected boolean handleGiveFeatures(HdmiCecMessage message) {
        if (mService.getCecVersion() < Constants.VERSION_2_0) {
            return false;
        }

        List<Integer> localDeviceTypes = new ArrayList<>();
        for (HdmiCecLocalDevice localDevice : mService.getAllLocalDevices()) {
            localDeviceTypes.add(localDevice.mDeviceType);
        }


        int rcProfile = getRcProfile();
        List<Integer> rcFeatures = getRcFeatures();
        List<Integer> deviceFeatures = getDeviceFeatures();

        mService.sendCecCommand(
                HdmiCecMessageBuilder.buildReportFeatures(mAddress, mService.getCecVersion(),
                        localDeviceTypes, rcProfile, rcFeatures, deviceFeatures));
        return true;
    }

    @ServiceThreadOnly
    protected boolean handleStandby(HdmiCecMessage message) {
        assertRunOnServiceThread();
+7 −0
Original line number Diff line number Diff line
@@ -47,6 +47,8 @@ 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;
@@ -175,6 +177,11 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource {
        return info != null;
    }

    @Override
    protected List<Integer> getDeviceFeatures() {
        return Lists.newArrayList(Constants.DEVICE_FEATURE_SOURCE_SUPPORTS_ARC_RX);
    }

    @Override
    @ServiceThreadOnly
    void onHotplug(int portId, boolean connected) {
+20 −0
Original line number Diff line number Diff line
@@ -28,6 +28,8 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.server.hdmi.Constants.LocalActivePort;
import com.android.server.hdmi.HdmiAnnotations.ServiceThreadOnly;

import com.google.android.collect.Lists;

import java.util.List;

/**
@@ -233,6 +235,24 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice {
        // do nothing
    }

    @Override
    protected int getRcProfile() {
        return Constants.RC_PROFILE_SOURCE;
    }

    @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);
    }

    @Override
    protected List<Integer> getDeviceFeatures() {
        return Lists.newArrayList();
    }

    // Active source claiming needs to be handled in Service
    // since service can decide who will be the active source when the device supports
    // multiple device types in this method.
+18 −0
Original line number Diff line number Diff line
@@ -51,6 +51,8 @@ import com.android.server.hdmi.DeviceDiscoveryAction.DeviceDiscoveryCallback;
import com.android.server.hdmi.HdmiAnnotations.ServiceThreadOnly;
import com.android.server.hdmi.HdmiControlService.SendMessageCallback;

import com.google.android.collect.Lists;

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

    @Override
    protected int getRcProfile() {
        return Constants.RC_PROFILE_TV;
    }

    @Override
    protected List<Integer> getRcFeatures() {
        return Lists.newArrayList(Constants.RC_PROFILE_TV_NONE);
    }

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

    @Override
    protected void sendStandby(int deviceId) {
        HdmiDeviceInfo targetDevice = mService.getHdmiCecNetwork().getDeviceInfo(deviceId);
Loading