CEC : Add validator for select analogue service message
Test: atest HdmiCecMessageValidatorTest Bug: 170811408 Change-Id: I540c290090a3ea48b04a678e39325aa7d419e04a
This commit is contained in:
@@ -159,6 +159,10 @@ public class HdmiCecMessageValidator {
|
||||
// TODO: Handle messages for the Tuner Control.
|
||||
addValidationInfo(
|
||||
Constants.MESSAGE_GIVE_TUNER_DEVICE_STATUS, statusRequestValidator, DEST_DIRECT);
|
||||
addValidationInfo(
|
||||
Constants.MESSAGE_SELECT_ANALOG_SERVICE,
|
||||
new SelectAnalogueServiceValidator(),
|
||||
DEST_DIRECT);
|
||||
|
||||
// Messages for the Vendor Specific Commands.
|
||||
VariableLengthValidator maxLengthValidator = new VariableLengthValidator(0, 14);
|
||||
@@ -890,4 +894,21 @@ public class HdmiCecMessageValidator {
|
||||
|| (params[0] == 0x20));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the given select analogue service parameter is valid. A valid parameter should lie
|
||||
* within the range description defined in CEC 1.4 Specification : Operand Descriptions
|
||||
* (Section 17)
|
||||
*/
|
||||
private class SelectAnalogueServiceValidator implements ParameterValidator {
|
||||
@Override
|
||||
public int isValid(byte[] params) {
|
||||
if (params.length < 4) {
|
||||
return ERROR_PARAMETER_SHORT;
|
||||
}
|
||||
return toErrorCode(isValidAnalogueBroadcastType(params[0])
|
||||
&& isValidAnalogueFrequency(HdmiUtils.twoBytesToInt(params, 1))
|
||||
&& isValidBroadcastSystem(params[3]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -409,6 +409,22 @@ public class HdmiCecMessageValidatorTest {
|
||||
assertMessageValidity("40:41:26").isEqualTo(ERROR_PARAMETER);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void isValid_selectAnalogueService() {
|
||||
assertMessageValidity("40:92:00:13:0F:00:96").isEqualTo(OK);
|
||||
assertMessageValidity("40:92:02:EA:60:1F").isEqualTo(OK);
|
||||
|
||||
assertMessageValidity("4F:92:00:13:0F:00").isEqualTo(ERROR_DESTINATION);
|
||||
assertMessageValidity("F0:92:02:EA:60:1F").isEqualTo(ERROR_SOURCE);
|
||||
assertMessageValidity("40:92:00:13:0F").isEqualTo(ERROR_PARAMETER_SHORT);
|
||||
// Invalid Analogue Broadcast type
|
||||
assertMessageValidity("40:92:03:EA:60:1F").isEqualTo(ERROR_PARAMETER);
|
||||
// Invalid Analogue Frequency
|
||||
assertMessageValidity("40:92:00:FF:FF:00").isEqualTo(ERROR_PARAMETER);
|
||||
// Invalid Broadcast system
|
||||
assertMessageValidity("40:92:02:EA:60:20").isEqualTo(ERROR_PARAMETER);
|
||||
}
|
||||
|
||||
private IntegerSubject assertMessageValidity(String message) {
|
||||
return assertThat(mHdmiCecMessageValidator.isValid(buildMessage(message)));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user