CEC : Add validator for select analogue service message

Test: atest HdmiCecMessageValidatorTest
Bug: 170811408
Change-Id: I540c290090a3ea48b04a678e39325aa7d419e04a
This commit is contained in:
Shraddha Basantwani
2020-11-03 17:49:54 +05:30
parent 9fa633abeb
commit 525beb28e5
2 changed files with 37 additions and 0 deletions

View File

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

View File

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