diff options
| author | 2024-09-10 18:33:16 +0000 | |
|---|---|---|
| committer | 2024-09-10 18:33:16 +0000 | |
| commit | f06da9bd2ef6348888eb716dabeec389da1d8eb7 (patch) | |
| tree | a7c1847523e5ecc644153ac36b861dd6cf5b5a87 | |
| parent | 18998d2db9caac34e6baafcd305ef9a7d1f72eec (diff) | |
| parent | f89021a2428c539b170da76a9f8ccf79309db8e0 (diff) | |
Merge "HDMI: Fix broadcast vendor command handling error" into main
| -rw-r--r-- | services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java | 12 | ||||
| -rw-r--r-- | services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTest.java | 24 |
2 files changed, 25 insertions, 11 deletions
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java index 81204ef5d7ed..a8d5696e8c77 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java @@ -927,12 +927,14 @@ abstract class HdmiCecLocalDevice extends HdmiLocalDevice { protected int handleVendorCommandWithId(HdmiCecMessage message) { byte[] params = message.getParams(); int vendorId = HdmiUtils.threeBytesToInt(params); - if (message.getDestination() == Constants.ADDR_BROADCAST - || message.getSource() == Constants.ADDR_UNREGISTERED) { - Slog.v(TAG, "Wrong broadcast vendor command. Ignoring"); - } else if (!mService.invokeVendorCommandListenersOnReceived( + if (!mService.invokeVendorCommandListenersOnReceived( mDeviceType, message.getSource(), message.getDestination(), params, true)) { - return Constants.ABORT_REFUSED; + if (message.getDestination() == Constants.ADDR_BROADCAST + || message.getSource() == Constants.ADDR_UNREGISTERED) { + Slog.v(TAG, "Broadcast vendor command with no listeners. Ignoring"); + } else { + return Constants.ABORT_REFUSED; + } } return Constants.HANDLED; } diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTest.java index 004c6c68781c..21129a7a9d85 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTest.java @@ -19,6 +19,7 @@ import static android.hardware.hdmi.HdmiDeviceInfo.DEVICE_TV; import static com.android.server.SystemService.PHASE_SYSTEM_SERVICES_READY; import static com.android.server.hdmi.Constants.ADDR_AUDIO_SYSTEM; +import static com.android.server.hdmi.Constants.ADDR_BROADCAST; import static com.android.server.hdmi.Constants.ADDR_PLAYBACK_1; import static com.android.server.hdmi.Constants.ADDR_TV; import static com.android.server.hdmi.Constants.MESSAGE_DEVICE_VENDOR_ID; @@ -529,21 +530,32 @@ public class HdmiCecLocalDeviceTest { public void handleVendorCommand_notHandled() { HdmiCecMessage vendorCommand = HdmiCecMessageBuilder.buildVendorCommand(ADDR_TV, ADDR_PLAYBACK_1, new byte[]{0}); - mNativeWrapper.onCecMessage(vendorCommand); + @Constants.HandleMessageResult int result = + mHdmiLocalDevice.handleVendorCommand(vendorCommand); mTestLooper.dispatchAll(); - HdmiCecMessageBuilder.buildFeatureAbortCommand(ADDR_PLAYBACK_1, ADDR_TV, - vendorCommand.getOpcode(), Constants.ABORT_REFUSED); + assertEquals(Constants.ABORT_REFUSED, result); } @Test public void handleVendorCommandWithId_notHandled_Cec14() { HdmiCecMessage vendorCommand = HdmiCecMessageBuilder.buildVendorCommandWithId(ADDR_TV, ADDR_PLAYBACK_1, 0x1234, new byte[]{0}); - mNativeWrapper.onCecMessage(vendorCommand); + @Constants.HandleMessageResult int result = + mHdmiLocalDevice.handleVendorCommandWithId(vendorCommand); mTestLooper.dispatchAll(); - HdmiCecMessageBuilder.buildFeatureAbortCommand(ADDR_PLAYBACK_1, ADDR_TV, - vendorCommand.getOpcode(), Constants.ABORT_REFUSED); + assertEquals(Constants.ABORT_REFUSED, result); + } + + @Test + public void handleVendorCommandWithId_broadcasted_handled() { + HdmiCecMessage vendorCommand = HdmiCecMessageBuilder.buildVendorCommandWithId(ADDR_TV, + ADDR_BROADCAST, 0x1234, new byte[]{0}); + @Constants.HandleMessageResult int result = + mHdmiLocalDevice.handleVendorCommandWithId(vendorCommand); + mTestLooper.dispatchAll(); + + assertEquals(Constants.HANDLED, result); } } |