CEC : Add validator for play message

Test: atest HdmiCecMessageValidatorTest
Bug: 170811408
Change-Id: Ie81c995b418dee5f9d3682c10b1071f56b661e7a
This commit is contained in:
Shraddha Basantwani
2020-11-02 15:10:20 +05:30
parent fd4e760c79
commit 5ea0ca572e
2 changed files with 34 additions and 1 deletions

View File

@@ -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));
}
}
}

View File

@@ -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)));
}