Merge "CEC: Set the parameter of <System Audio Mode Request> right" into lmp-mr1-dev

This commit is contained in:
Jinsuk Kim
2014-12-02 21:50:42 +00:00
committed by Android (Google) Code Review
2 changed files with 16 additions and 2 deletions

View File

@@ -186,6 +186,7 @@ final class Constants {
static final int INVALID_PORT_ID = HdmiDeviceInfo.PORT_INVALID;
static final int INVALID_PHYSICAL_ADDRESS = HdmiDeviceInfo.PATH_INVALID;
static final int PATH_INTERNAL = HdmiDeviceInfo.PATH_INTERNAL;
// Send result codes. It should be consistent with hdmi_cec.h's send_message error code.
static final int SEND_RESULT_SUCCESS = 0;

View File

@@ -90,10 +90,9 @@ abstract class SystemAudioAction extends HdmiCecFeatureAction {
}
private void sendSystemAudioModeRequestInternal() {
int avrPhysicalAddress = tv().getAvrDeviceInfo().getPhysicalAddress();
HdmiCecMessage command = HdmiCecMessageBuilder.buildSystemAudioModeRequest(
getSourceAddress(),
mAvrLogicalAddress, avrPhysicalAddress, mTargetAudioStatus);
mAvrLogicalAddress, getSystemAudioModeRequestParam(), mTargetAudioStatus);
sendCommand(command, new HdmiControlService.SendMessageCallback() {
@Override
public void onSendCompleted(int error) {
@@ -108,6 +107,20 @@ abstract class SystemAudioAction extends HdmiCecFeatureAction {
addTimer(mState, mTargetAudioStatus ? ON_TIMEOUT_MS : OFF_TIMEOUT_MS);
}
private int getSystemAudioModeRequestParam() {
// <System Audio Mode Request> takes the physical address of the source device
// as a parameter. Get it from following candidates, in the order listed below:
// 1) physical address of the active source
// 2) active routing path
// 3) physical address of TV
if (tv().getActiveSource().isValid()) {
return tv().getActiveSource().physicalAddress;
}
int param = tv().getActivePath();
return param != Constants.INVALID_PHYSICAL_ADDRESS
? param : Constants.PATH_INTERNAL;
}
private void handleSendSystemAudioModeRequestTimeout() {
if (!mTargetAudioStatus // Don't retry for Off case.
|| mSendRetryCount++ >= MAX_SEND_RETRY_COUNT) {