From 763fe1b0a4f9c7f0e10ae15f4c6c94df64ab0442 Mon Sep 17 00:00:00 2001 From: Marvin Ramin Date: Mon, 24 Aug 2020 11:08:39 +0200 Subject: [PATCH] CEC: Fix OSD name message length OSD name may be 1<=N<=14 characters long according to the CEC specification. CTS test: cect_11_2_11_1a_GiveOsdNameTest verifies the limit correctly. Test: atest HdmiCecMessageBuilderTest Bug: 165786024 Change-Id: I0b59c4753f974979101d9346081af597e3fc306f --- .../server/hdmi/HdmiCecMessageBuilder.java | 2 +- .../hdmi/HdmiCecMessageBuilderTest.java | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/hdmi/HdmiCecMessageBuilder.java b/services/core/java/com/android/server/hdmi/HdmiCecMessageBuilder.java index 3f949bab8a2e4..653323de8d600 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecMessageBuilder.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecMessageBuilder.java @@ -25,7 +25,7 @@ import java.util.Arrays; * A helper class to build {@link HdmiCecMessage} from various cec commands. */ public class HdmiCecMessageBuilder { - private static final int OSD_NAME_MAX_LENGTH = 13; + private static final int OSD_NAME_MAX_LENGTH = 14; private HdmiCecMessageBuilder() {} diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecMessageBuilderTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecMessageBuilderTest.java index 53c4d6faf0b92..f17173f61b698 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecMessageBuilderTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecMessageBuilderTest.java @@ -62,6 +62,32 @@ public class HdmiCecMessageBuilderTest { assertThat(message).isEqualTo(buildMessage("5F:81:21:00")); } + @Test + public void buildSetOsdName_short() { + String deviceName = "abc"; + HdmiCecMessage message = HdmiCecMessageBuilder.buildSetOsdNameCommand(ADDR_PLAYBACK_1, + ADDR_TV, deviceName); + assertThat(message).isEqualTo(buildMessage("40:47:61:62:63")); + } + + @Test + public void buildSetOsdName_maximumLength() { + String deviceName = "abcdefghijklmn"; + HdmiCecMessage message = HdmiCecMessageBuilder.buildSetOsdNameCommand(ADDR_PLAYBACK_1, + ADDR_TV, deviceName); + assertThat(message).isEqualTo( + buildMessage("40:47:61:62:63:64:65:66:67:68:69:6A:6B:6C:6D:6E")); + } + + @Test + public void buildSetOsdName_tooLong() { + String deviceName = "abcdefghijklmnop"; + HdmiCecMessage message = HdmiCecMessageBuilder.buildSetOsdNameCommand(ADDR_PLAYBACK_1, + ADDR_TV, deviceName); + assertThat(message).isEqualTo( + buildMessage("40:47:61:62:63:64:65:66:67:68:69:6A:6B:6C:6D:6E")); + } + /** * Build a CEC message from a hex byte string with bytes separated by {@code :}. *