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

Commit 9ae53810 authored by Yan Han's avatar Yan Han Committed by Automerger Merge Worker
Browse files

Set device type on first message received am: 888ee5be

parents 6dc0c9f7 888ee5be
Loading
Loading
Loading
Loading
+32 −2
Original line number Diff line number Diff line
@@ -370,10 +370,12 @@ public class HdmiCecNetwork {
    // This only applies to TV devices.
    // Returns true if the policy is set to true, and the device to check does not have
    // a parent CEC device (which should be the CEC-enabled switch) in the list.
    // Devices with an invalid physical address are assumed to NOT be connected to a legacy switch.
    private boolean hideDevicesBehindLegacySwitch(HdmiDeviceInfo info) {
        return isLocalDeviceAddress(Constants.ADDR_TV)
                && HdmiConfig.HIDE_DEVICES_BEHIND_LEGACY_SWITCH
                && !isConnectedToCecSwitch(info.getPhysicalAddress(), getCecSwitches());
                && !isConnectedToCecSwitch(info.getPhysicalAddress(), getCecSwitches())
                && info.getPhysicalAddress() != HdmiDeviceInfo.PATH_INVALID;
    }

    /**
@@ -497,6 +499,34 @@ public class HdmiCecNetwork {
        return device.getPhysicalAddress() == physicalAddress;
    }

    /**
     * Attempts to deduce the device type of a device given its logical address.
     * If multiple types are possible, returns {@link HdmiDeviceInfo#DEVICE_RESERVED}.
     */
    private static int logicalAddressToDeviceType(int logicalAddress) {
        switch (logicalAddress) {
            case Constants.ADDR_TV:
                return HdmiDeviceInfo.DEVICE_TV;
            case Constants.ADDR_RECORDER_1:
            case Constants.ADDR_RECORDER_2:
            case Constants.ADDR_RECORDER_3:
                return HdmiDeviceInfo.DEVICE_RECORDER;
            case Constants.ADDR_TUNER_1:
            case Constants.ADDR_TUNER_2:
            case Constants.ADDR_TUNER_3:
            case Constants.ADDR_TUNER_4:
                return HdmiDeviceInfo.DEVICE_TUNER;
            case Constants.ADDR_PLAYBACK_1:
            case Constants.ADDR_PLAYBACK_2:
            case Constants.ADDR_PLAYBACK_3:
                return HdmiDeviceInfo.DEVICE_PLAYBACK;
            case Constants.ADDR_AUDIO_SYSTEM:
                return HdmiDeviceInfo.DEVICE_AUDIO_SYSTEM;
            default:
                return HdmiDeviceInfo.DEVICE_RESERVED;
        }
    }

    /**
     * Passively listen to incoming CEC messages.
     *
@@ -510,7 +540,7 @@ public class HdmiCecNetwork {
        if (getCecDeviceInfo(sourceAddress) == null) {
            HdmiDeviceInfo newDevice = new HdmiDeviceInfo(sourceAddress,
                    HdmiDeviceInfo.PATH_INVALID, HdmiDeviceInfo.PORT_INVALID,
                    HdmiDeviceInfo.DEVICE_RESERVED, Constants.UNKNOWN_VENDOR_ID,
                    logicalAddressToDeviceType(sourceAddress), Constants.UNKNOWN_VENDOR_ID,
                    HdmiUtils.getDefaultDeviceName(sourceAddress));
            addCecDevice(newDevice);
        }
+10 −6
Original line number Diff line number Diff line
@@ -100,6 +100,8 @@ public class HdmiCecNetworkTest {
                new HdmiPortInfo(5, HdmiPortInfo.PORT_OUTPUT, 0x0000, true, false, false);
        mNativeWrapper.setPortInfo(mHdmiPortInfo);
        mHdmiCecNetwork.initPortInfo();

        mHdmiCecNetwork = mHdmiControlService.getHdmiCecNetwork();
    }

    @Test
@@ -141,6 +143,7 @@ public class HdmiCecNetworkTest {

    @Test
    public void localDevices_verifyOne_tv() {
        mHdmiCecNetwork.clearLocalDevices();
        mHdmiCecNetwork.addLocalDevice(HdmiDeviceInfo.DEVICE_TV,
                new HdmiCecLocalDeviceTv(mHdmiControlService));

@@ -153,6 +156,7 @@ public class HdmiCecNetworkTest {

    @Test
    public void localDevices_verifyOne_playback() {
        mHdmiCecNetwork.clearLocalDevices();
        mHdmiCecNetwork.addLocalDevice(HdmiDeviceInfo.DEVICE_PLAYBACK,
                new HdmiCecLocalDevicePlayback(mHdmiControlService));

@@ -175,7 +179,7 @@ public class HdmiCecNetworkTest {
        assertThat(cecDeviceInfo.getLogicalAddress()).isEqualTo(logicalAddress);
        assertThat(cecDeviceInfo.getPhysicalAddress()).isEqualTo(
                Constants.INVALID_PHYSICAL_ADDRESS);
        assertThat(cecDeviceInfo.getDeviceType()).isEqualTo(HdmiDeviceInfo.DEVICE_RESERVED);
        assertThat(cecDeviceInfo.getDeviceType()).isEqualTo(HdmiDeviceInfo.DEVICE_PLAYBACK);
        assertThat(cecDeviceInfo.getDisplayName()).isEqualTo(
                HdmiUtils.getDefaultDeviceName(logicalAddress));
        assertThat(cecDeviceInfo.getVendorId()).isEqualTo(Constants.UNKNOWN_VENDOR_ID);
@@ -257,7 +261,7 @@ public class HdmiCecNetworkTest {
        assertThat(cecDeviceInfo.getLogicalAddress()).isEqualTo(logicalAddress);
        assertThat(cecDeviceInfo.getPhysicalAddress()).isEqualTo(
                Constants.INVALID_PHYSICAL_ADDRESS);
        assertThat(cecDeviceInfo.getDeviceType()).isEqualTo(HdmiDeviceInfo.DEVICE_RESERVED);
        assertThat(cecDeviceInfo.getDeviceType()).isEqualTo(HdmiDeviceInfo.DEVICE_PLAYBACK);
        assertThat(cecDeviceInfo.getVendorId()).isEqualTo(Constants.UNKNOWN_VENDOR_ID);
        assertThat(cecDeviceInfo.getDisplayName()).isEqualTo(
                HdmiUtils.getDefaultDeviceName(logicalAddress));
@@ -278,7 +282,7 @@ public class HdmiCecNetworkTest {
        assertThat(cecDeviceInfo.getLogicalAddress()).isEqualTo(logicalAddress);
        assertThat(cecDeviceInfo.getPhysicalAddress()).isEqualTo(
                Constants.INVALID_PHYSICAL_ADDRESS);
        assertThat(cecDeviceInfo.getDeviceType()).isEqualTo(HdmiDeviceInfo.DEVICE_RESERVED);
        assertThat(cecDeviceInfo.getDeviceType()).isEqualTo(HdmiDeviceInfo.DEVICE_PLAYBACK);
        assertThat(cecDeviceInfo.getVendorId()).isEqualTo(Constants.UNKNOWN_VENDOR_ID);
        assertThat(cecDeviceInfo.getDisplayName()).isEqualTo(osdName);
        assertThat(cecDeviceInfo.getDevicePowerStatus()).isEqualTo(
@@ -298,7 +302,7 @@ public class HdmiCecNetworkTest {
        assertThat(cecDeviceInfo.getLogicalAddress()).isEqualTo(logicalAddress);
        assertThat(cecDeviceInfo.getPhysicalAddress()).isEqualTo(
                Constants.INVALID_PHYSICAL_ADDRESS);
        assertThat(cecDeviceInfo.getDeviceType()).isEqualTo(HdmiDeviceInfo.DEVICE_RESERVED);
        assertThat(cecDeviceInfo.getDeviceType()).isEqualTo(HdmiDeviceInfo.DEVICE_PLAYBACK);
        assertThat(cecDeviceInfo.getDisplayName()).isEqualTo(
                HdmiUtils.getDefaultDeviceName(logicalAddress));
        assertThat(cecDeviceInfo.getVendorId()).isEqualTo(vendorId);
@@ -429,7 +433,7 @@ public class HdmiCecNetworkTest {
        assertThat(cecDeviceInfo.getLogicalAddress()).isEqualTo(logicalAddress);
        assertThat(cecDeviceInfo.getPhysicalAddress()).isEqualTo(
                Constants.INVALID_PHYSICAL_ADDRESS);
        assertThat(cecDeviceInfo.getDeviceType()).isEqualTo(HdmiDeviceInfo.DEVICE_RESERVED);
        assertThat(cecDeviceInfo.getDeviceType()).isEqualTo(HdmiDeviceInfo.DEVICE_PLAYBACK);
        assertThat(cecDeviceInfo.getDisplayName()).isEqualTo(
                HdmiUtils.getDefaultDeviceName(logicalAddress));
        assertThat(cecDeviceInfo.getVendorId()).isEqualTo(updatedVendorId);
@@ -470,7 +474,7 @@ public class HdmiCecNetworkTest {
        assertThat(cecDeviceInfo.getLogicalAddress()).isEqualTo(logicalAddress);
        assertThat(cecDeviceInfo.getPhysicalAddress()).isEqualTo(
                Constants.INVALID_PHYSICAL_ADDRESS);
        assertThat(cecDeviceInfo.getDeviceType()).isEqualTo(HdmiDeviceInfo.DEVICE_RESERVED);
        assertThat(cecDeviceInfo.getDeviceType()).isEqualTo(HdmiDeviceInfo.DEVICE_PLAYBACK);
        assertThat(cecDeviceInfo.getVendorId()).isEqualTo(Constants.UNKNOWN_VENDOR_ID);
        assertThat(cecDeviceInfo.getDisplayName()).isEqualTo(
                HdmiUtils.getDefaultDeviceName(logicalAddress));