Merge "CEC : Add additional validator for message record status"

This commit is contained in:
Treehugger Robot
2020-09-22 19:03:41 +00:00
committed by Gerrit Code Review

View File

@@ -117,14 +117,15 @@ public class HdmiCecMessageValidator {
// TODO: Validate more than length for the following messages. // TODO: Validate more than length for the following messages.
// Messages for the One Touch Record. // Messages for the One Touch Record.
FixedLengthValidator oneByteValidator = new FixedLengthValidator(1);
addValidationInfo(Constants.MESSAGE_RECORD_ON, addValidationInfo(Constants.MESSAGE_RECORD_ON,
new VariableLengthValidator(1, 8), DEST_DIRECT); new VariableLengthValidator(1, 8), DEST_DIRECT);
addValidationInfo(Constants.MESSAGE_RECORD_STATUS, oneByteValidator, DEST_DIRECT); addValidationInfo(Constants.MESSAGE_RECORD_STATUS,
new RecordStatusInfoValidator(), DEST_DIRECT);
// TODO: Handle messages for the Timer Programming. // TODO: Handle messages for the Timer Programming.
// Messages for the System Information. // Messages for the System Information.
FixedLengthValidator oneByteValidator = new FixedLengthValidator(1);
addValidationInfo(Constants.MESSAGE_CEC_VERSION, oneByteValidator, DEST_DIRECT); addValidationInfo(Constants.MESSAGE_CEC_VERSION, oneByteValidator, DEST_DIRECT);
addValidationInfo(Constants.MESSAGE_SET_MENU_LANGUAGE, addValidationInfo(Constants.MESSAGE_SET_MENU_LANGUAGE,
new FixedLengthValidator(3), DEST_BROADCAST); new FixedLengthValidator(3), DEST_BROADCAST);
@@ -339,4 +340,23 @@ public class HdmiCecMessageValidator {
isValidPhysicalAddress(params, 0) && isValidPhysicalAddress(params, 2)); isValidPhysicalAddress(params, 0) && isValidPhysicalAddress(params, 2));
} }
} }
/**
* Check if the given record status message parameter is valid.
* A valid parameter should lie within the range description of Record Status Info defined in
* CEC 1.4 Specification : Operand Descriptions (Section 17)
*/
private class RecordStatusInfoValidator implements ParameterValidator {
@Override
public int isValid(byte[] params) {
if (params.length < 1) {
return ERROR_PARAMETER_SHORT;
}
return toErrorCode(isWithinRange(params[0], 0x01, 0x07)
|| isWithinRange(params[0], 0x09, 0x0E)
|| isWithinRange(params[0], 0x10, 0x17)
|| isWithinRange(params[0], 0x1A, 0x1B)
|| params[0] == 0x1F);
}
}
} }