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

Commit 200cb303 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Handle <Device Vendor ID> messages in HdmiCecNetwork"

parents c32a9421 2ce0803a
Loading
Loading
Loading
Loading
+24 −0
Original line number Original line Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.server.hdmi;


import static com.android.server.hdmi.HdmiAnnotations.ServiceThreadOnly;
import static com.android.server.hdmi.HdmiAnnotations.ServiceThreadOnly;


import android.annotation.Nullable;
import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.HdmiDeviceInfo;
import android.hardware.hdmi.HdmiDeviceInfo;
import android.hardware.hdmi.HdmiPortInfo;
import android.hardware.hdmi.HdmiPortInfo;
@@ -242,6 +243,7 @@ class HdmiCecNetwork {
     * Returns null if no logical address matched
     * Returns null if no logical address matched
     */
     */
    @ServiceThreadOnly
    @ServiceThreadOnly
    @Nullable
    HdmiDeviceInfo getCecDeviceInfo(int logicalAddress) {
    HdmiDeviceInfo getCecDeviceInfo(int logicalAddress) {
        assertRunOnServiceThread();
        assertRunOnServiceThread();
        return mDeviceInfos.get(HdmiDeviceInfo.idForCecDevice(logicalAddress));
        return mDeviceInfos.get(HdmiDeviceInfo.idForCecDevice(logicalAddress));
@@ -517,6 +519,10 @@ class HdmiCecNetwork {
            case Constants.MESSAGE_SET_OSD_NAME:
            case Constants.MESSAGE_SET_OSD_NAME:
                handleSetOsdName(message);
                handleSetOsdName(message);
                break;
                break;
            case Constants.MESSAGE_DEVICE_VENDOR_ID:
                handleDeviceVendorId(message);
                break;

        }
        }
    }
    }


@@ -582,6 +588,24 @@ class HdmiCecNetwork {
                deviceInfo.getDevicePowerStatus()));
                deviceInfo.getDevicePowerStatus()));
    }
    }


    @ServiceThreadOnly
    private void handleDeviceVendorId(HdmiCecMessage message) {
        assertRunOnServiceThread();
        int logicalAddress = message.getSource();
        int vendorId = HdmiUtils.threeBytesToInt(message.getParams());

        HdmiDeviceInfo deviceInfo = getCecDeviceInfo(logicalAddress);
        if (deviceInfo == null) {
            Slog.i(TAG, "Unknown source device info for <Device Vendor ID> " + message);
        } else {
            HdmiDeviceInfo updatedDeviceInfo = new HdmiDeviceInfo(deviceInfo.getLogicalAddress(),
                    deviceInfo.getPhysicalAddress(),
                    deviceInfo.getPortId(), deviceInfo.getDeviceType(), vendorId,
                    deviceInfo.getDisplayName(), deviceInfo.getDevicePowerStatus());
            updateCecDevice(updatedDeviceInfo);
        }
    }

    void addCecSwitch(int physicalAddress) {
    void addCecSwitch(int physicalAddress) {
        mCecSwitches.add(physicalAddress);
        mCecSwitches.add(physicalAddress);
    }
    }
+49 −0
Original line number Original line Diff line number Diff line
@@ -284,6 +284,27 @@ public class HdmiCecNetworkTest {
                HdmiControlManager.POWER_STATUS_UNKNOWN);
                HdmiControlManager.POWER_STATUS_UNKNOWN);
    }
    }


    @Test
    public void cecDevices_tracking_reportVendorId() {
        int logicalAddress = Constants.ADDR_PLAYBACK_1;
        int vendorId = 1234;
        mHdmiCecNetwork.handleCecMessage(
                HdmiCecMessageBuilder.buildDeviceVendorIdCommand(logicalAddress, vendorId));

        assertThat(mHdmiCecNetwork.getSafeCecDevicesLocked()).hasSize(1);

        HdmiDeviceInfo cecDeviceInfo = mHdmiCecNetwork.getCecDeviceInfo(logicalAddress);
        assertThat(cecDeviceInfo.getLogicalAddress()).isEqualTo(logicalAddress);
        assertThat(cecDeviceInfo.getPhysicalAddress()).isEqualTo(
                Constants.INVALID_PHYSICAL_ADDRESS);
        assertThat(cecDeviceInfo.getDeviceType()).isEqualTo(HdmiDeviceInfo.DEVICE_RESERVED);
        assertThat(cecDeviceInfo.getDisplayName()).isEqualTo(
                HdmiUtils.getDefaultDeviceName(logicalAddress));
        assertThat(cecDeviceInfo.getVendorId()).isEqualTo(vendorId);
        assertThat(cecDeviceInfo.getDevicePowerStatus()).isEqualTo(
                HdmiControlManager.POWER_STATUS_UNKNOWN);
    }

    @Test
    @Test
    public void cecDevices_tracking_updatesDeviceInfo() {
    public void cecDevices_tracking_updatesDeviceInfo() {
        int logicalAddress = Constants.ADDR_PLAYBACK_1;
        int logicalAddress = Constants.ADDR_PLAYBACK_1;
@@ -291,6 +312,7 @@ public class HdmiCecNetworkTest {
        int type = HdmiDeviceInfo.DEVICE_PLAYBACK;
        int type = HdmiDeviceInfo.DEVICE_PLAYBACK;
        int powerStatus = HdmiControlManager.POWER_STATUS_ON;
        int powerStatus = HdmiControlManager.POWER_STATUS_ON;
        String osdName = "Test Device";
        String osdName = "Test Device";
        int vendorId = 1234;


        mHdmiCecNetwork.handleCecMessage(
        mHdmiCecNetwork.handleCecMessage(
                HdmiCecMessageBuilder.buildReportPhysicalAddressCommand(logicalAddress,
                HdmiCecMessageBuilder.buildReportPhysicalAddressCommand(logicalAddress,
@@ -301,6 +323,8 @@ public class HdmiCecNetworkTest {
        mHdmiCecNetwork.handleCecMessage(
        mHdmiCecNetwork.handleCecMessage(
                HdmiCecMessageBuilder.buildSetOsdNameCommand(logicalAddress,
                HdmiCecMessageBuilder.buildSetOsdNameCommand(logicalAddress,
                        Constants.ADDR_BROADCAST, osdName));
                        Constants.ADDR_BROADCAST, osdName));
        mHdmiCecNetwork.handleCecMessage(
                HdmiCecMessageBuilder.buildDeviceVendorIdCommand(logicalAddress, vendorId));


        assertThat(mHdmiCecNetwork.getSafeCecDevicesLocked()).hasSize(1);
        assertThat(mHdmiCecNetwork.getSafeCecDevicesLocked()).hasSize(1);


@@ -309,6 +333,7 @@ public class HdmiCecNetworkTest {
        assertThat(cecDeviceInfo.getPhysicalAddress()).isEqualTo(physicalAddress);
        assertThat(cecDeviceInfo.getPhysicalAddress()).isEqualTo(physicalAddress);
        assertThat(cecDeviceInfo.getDeviceType()).isEqualTo(type);
        assertThat(cecDeviceInfo.getDeviceType()).isEqualTo(type);
        assertThat(cecDeviceInfo.getDisplayName()).isEqualTo(osdName);
        assertThat(cecDeviceInfo.getDisplayName()).isEqualTo(osdName);
        assertThat(cecDeviceInfo.getVendorId()).isEqualTo(vendorId);
        assertThat(cecDeviceInfo.getDevicePowerStatus()).isEqualTo(powerStatus);
        assertThat(cecDeviceInfo.getDevicePowerStatus()).isEqualTo(powerStatus);
    }
    }


@@ -381,6 +406,30 @@ public class HdmiCecNetworkTest {
        assertThat(cecDeviceInfo.getDisplayName()).isEqualTo(updatedOsdName);
        assertThat(cecDeviceInfo.getDisplayName()).isEqualTo(updatedOsdName);
    }
    }


    @Test
    public void cecDevices_tracking_updatesVendorId() {
        int logicalAddress = Constants.ADDR_PLAYBACK_1;
        int vendorId = 1234;
        int updatedVendorId = 12345;
        mHdmiCecNetwork.handleCecMessage(
                HdmiCecMessageBuilder.buildDeviceVendorIdCommand(logicalAddress, vendorId));
        mHdmiCecNetwork.handleCecMessage(
                HdmiCecMessageBuilder.buildDeviceVendorIdCommand(logicalAddress, updatedVendorId));

        assertThat(mHdmiCecNetwork.getSafeCecDevicesLocked()).hasSize(1);

        HdmiDeviceInfo cecDeviceInfo = mHdmiCecNetwork.getCecDeviceInfo(logicalAddress);
        assertThat(cecDeviceInfo.getLogicalAddress()).isEqualTo(logicalAddress);
        assertThat(cecDeviceInfo.getPhysicalAddress()).isEqualTo(
                Constants.INVALID_PHYSICAL_ADDRESS);
        assertThat(cecDeviceInfo.getDeviceType()).isEqualTo(HdmiDeviceInfo.DEVICE_RESERVED);
        assertThat(cecDeviceInfo.getDisplayName()).isEqualTo(
                HdmiUtils.getDefaultDeviceName(logicalAddress));
        assertThat(cecDeviceInfo.getVendorId()).isEqualTo(updatedVendorId);
        assertThat(cecDeviceInfo.getDevicePowerStatus()).isEqualTo(
                HdmiControlManager.POWER_STATUS_UNKNOWN);
    }

    @Test
    @Test
    public void cecDevices_tracking_clearDevices() {
    public void cecDevices_tracking_clearDevices() {
        int logicalAddress = Constants.ADDR_PLAYBACK_1;
        int logicalAddress = Constants.ADDR_PLAYBACK_1;