CEC : Add validator for play message
Test: atest HdmiCecMessageValidatorTest Bug: 170811408 Change-Id: Ie81c995b418dee5f9d3682c10b1071f56b661e7a
This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user