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

Commit 5ea0ca57 authored by Shraddha Basantwani's avatar Shraddha Basantwani
Browse files

CEC : Add validator for play message

Test: atest HdmiCecMessageValidatorTest
Bug: 170811408
Change-Id: Ie81c995b418dee5f9d3682c10b1071f56b661e7a
parent fd4e760c
Loading
Loading
Loading
Loading
+20 −1
Original line number Diff line number Diff line
@@ -148,7 +148,6 @@ public class HdmiCecMessageValidator {
        addValidationInfo(Constants.MESSAGE_SET_MENU_LANGUAGE,
                new AsciiValidator(3), DEST_BROADCAST);

        // TODO: Handle messages for the Deck Control.
        addValidationInfo(
                Constants.MESSAGE_DECK_CONTROL, new OneByteRangeValidator(0x01, 0x04), DEST_DIRECT);
        addValidationInfo(
@@ -157,6 +156,7 @@ public class HdmiCecMessageValidator {
                Constants.MESSAGE_GIVE_DECK_STATUS,
                new OneByteRangeValidator(0x01, 0x03),
                DEST_DIRECT);
        addValidationInfo(Constants.MESSAGE_PLAY, new PlayModeValidator(), DEST_DIRECT);

        // TODO: Handle messages for the Tuner Control.

@@ -871,4 +871,23 @@ public class HdmiCecMessageValidator {
            return toErrorCode(isValidTimerStatusData(params, 0));
        }
    }

    /**
     * Check if the given play mode parameter is valid. A valid parameter should lie within the
     * range description defined in CEC 1.4 Specification : Operand Descriptions (Section 17)
     */
    private class PlayModeValidator implements ParameterValidator {
        @Override
        public int isValid(byte[] params) {
            if (params.length < 1) {
                return ERROR_PARAMETER_SHORT;
            }
            return toErrorCode(isWithinRange(params[0], 0x05, 0x07)
                    || isWithinRange(params[0], 0x09, 0x0B)
                    || isWithinRange(params[0], 0x15, 0x17)
                    || isWithinRange(params[0], 0x19, 0x1B)
                    || isWithinRange(params[0], 0x24, 0x25)
                    || (params[0] == 0x20));
        }
    }
}
+14 −0
Original line number Diff line number Diff line
@@ -388,6 +388,20 @@ public class HdmiCecMessageValidatorTest {
        assertMessageValidity("40:1A:04").isEqualTo(ERROR_PARAMETER);
    }

    @Test
    public void isValid_play() {
        assertMessageValidity("40:41:16:E3").isEqualTo(OK);
        assertMessageValidity("40:41:20").isEqualTo(OK);

        assertMessageValidity("4F:41:16").isEqualTo(ERROR_DESTINATION);
        assertMessageValidity("F0:41:20").isEqualTo(ERROR_SOURCE);
        assertMessageValidity("40:41").isEqualTo(ERROR_PARAMETER_SHORT);
        assertMessageValidity("40:41:04").isEqualTo(ERROR_PARAMETER);
        assertMessageValidity("40:41:18").isEqualTo(ERROR_PARAMETER);
        assertMessageValidity("40:41:23").isEqualTo(ERROR_PARAMETER);
        assertMessageValidity("40:41:26").isEqualTo(ERROR_PARAMETER);
    }

    private IntegerSubject assertMessageValidity(String message) {
        return assertThat(mHdmiCecMessageValidator.isValid(buildMessage(message)));
    }