From 3ecdd832c77483c909fbf90d17d0e6d97ca365ee Mon Sep 17 00:00:00 2001 From: Jungshik Jang Date: Tue, 17 Jun 2014 14:04:38 +0900 Subject: [PATCH] Fix missing iteration policy on device discover action Device polling requires both pick policy and pick iteration policy, however, device discovery action has no iteration policy. Along with fix, move send result and pick policy constants to HdmiConstants package Change-Id: Ibbcfdc482a189bbc3aa2c61143422541da78447d --- .../server/hdmi/DeviceDiscoveryAction.java | 3 ++- .../android/server/hdmi/HdmiCecController.java | 16 ++++++++-------- .../com/android/server/hdmi/HdmiConstants.java | 15 +++++++++++++++ .../android/server/hdmi/HdmiControlService.java | 16 ++-------------- .../server/hdmi/HotplugDetectionAction.java | 8 ++++---- .../server/hdmi/RequestArcInitiationAction.java | 2 +- .../server/hdmi/RequestArcTerminationAction.java | 2 +- .../hdmi/SetArcTransmissionStateAction.java | 2 +- .../android/server/hdmi/SystemAudioAction.java | 4 ++-- 9 files changed, 36 insertions(+), 32 deletions(-) diff --git a/services/core/java/com/android/server/hdmi/DeviceDiscoveryAction.java b/services/core/java/com/android/server/hdmi/DeviceDiscoveryAction.java index daeff3c76cb44..02f088fe3dab6 100644 --- a/services/core/java/com/android/server/hdmi/DeviceDiscoveryAction.java +++ b/services/core/java/com/android/server/hdmi/DeviceDiscoveryAction.java @@ -119,7 +119,8 @@ final class DeviceDiscoveryAction extends FeatureAction { allocateDevices(ackedAddress); startPhysicalAddressStage(); } - }, HdmiControlService.POLL_STRATEGY_REMOTES_DEVICES, DEVICE_POLLING_RETRY); + }, HdmiConstants.POLL_ITERATION_REVERSE_ORDER + | HdmiConstants.POLL_STRATEGY_REMOTES_DEVICES, DEVICE_POLLING_RETRY); return true; } diff --git a/services/core/java/com/android/server/hdmi/HdmiCecController.java b/services/core/java/com/android/server/hdmi/HdmiCecController.java index fe1686945aad1..6d05e82cad5d8 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecController.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecController.java @@ -366,29 +366,29 @@ final class HdmiCecController { } private List pickPollCandidates(int pickStrategy) { - int strategy = pickStrategy & HdmiControlService.POLL_STRATEGY_MASK; + int strategy = pickStrategy & HdmiConstants.POLL_STRATEGY_MASK; Predicate pickPredicate = null; switch (strategy) { - case HdmiControlService.POLL_STRATEGY_SYSTEM_AUDIO: + case HdmiConstants.POLL_STRATEGY_SYSTEM_AUDIO: pickPredicate = mSystemAudioAddressPredicate; break; - case HdmiControlService.POLL_STRATEGY_REMOTES_DEVICES: + case HdmiConstants.POLL_STRATEGY_REMOTES_DEVICES: default: // The default is POLL_STRATEGY_REMOTES_DEVICES. pickPredicate = mRemoteDeviceAddressPredicate; break; } - int iterationStrategy = pickStrategy & HdmiControlService.POLL_ITERATION_STRATEGY_MASK; + int iterationStrategy = pickStrategy & HdmiConstants.POLL_ITERATION_STRATEGY_MASK; ArrayList pollingCandidates = new ArrayList<>(); switch (iterationStrategy) { - case HdmiControlService.POLL_ITERATION_IN_ORDER: + case HdmiConstants.POLL_ITERATION_IN_ORDER: for (int i = HdmiCec.ADDR_TV; i <= HdmiCec.ADDR_SPECIFIC_USE; ++i) { if (pickPredicate.apply(i)) { pollingCandidates.add(i); } } break; - case HdmiControlService.POLL_ITERATION_REVERSE_ORDER: + case HdmiConstants.POLL_ITERATION_REVERSE_ORDER: default: // The default is reverse order. for (int i = HdmiCec.ADDR_SPECIFIC_USE; i >= HdmiCec.ADDR_TV; --i) { if (pickPredicate.apply(i)) { @@ -442,7 +442,7 @@ final class HdmiCecController { // new logical address for the device because no device uses // it as logical address of the device. if (nativeSendCecCommand(mNativePtr, address, address, EMPTY_BODY) - == HdmiControlService.SEND_RESULT_SUCCESS) { + == HdmiConstants.SEND_RESULT_SUCCESS) { return true; } } @@ -509,7 +509,7 @@ final class HdmiCecController { byte[] body = buildBody(cecMessage.getOpcode(), cecMessage.getParams()); final int error = nativeSendCecCommand(mNativePtr, cecMessage.getSource(), cecMessage.getDestination(), body); - if (error != HdmiControlService.SEND_RESULT_SUCCESS) { + if (error != HdmiConstants.SEND_RESULT_SUCCESS) { Slog.w(TAG, "Failed to send " + cecMessage); } if (callback != null) { diff --git a/services/core/java/com/android/server/hdmi/HdmiConstants.java b/services/core/java/com/android/server/hdmi/HdmiConstants.java index b558f2bbe4434..9c60e55b912d7 100644 --- a/services/core/java/com/android/server/hdmi/HdmiConstants.java +++ b/services/core/java/com/android/server/hdmi/HdmiConstants.java @@ -80,5 +80,20 @@ final class HdmiConstants { static final int INVALID_PORT_ID = -1; static final int INVALID_PHYSICAL_ADDRESS = 0xFFFF; + // Send result codes. + static final int SEND_RESULT_SUCCESS = 0; + static final int SEND_RESULT_NAK = -1; + static final int SEND_RESULT_FAILURE = -2; + + // Strategy for device polling. + // Should use "OR(|) operation of POLL_STRATEGY_XXX and POLL_ITERATION_XXX. + static final int POLL_STRATEGY_MASK = 0x3; // first and second bit. + static final int POLL_STRATEGY_REMOTES_DEVICES = 0x1; + static final int POLL_STRATEGY_SYSTEM_AUDIO = 0x2; + + static final int POLL_ITERATION_STRATEGY_MASK = 0x30000; // first and second bit. + static final int POLL_ITERATION_IN_ORDER = 0x10000; + static final int POLL_ITERATION_REVERSE_ORDER = 0x20000; + private HdmiConstants() { /* cannot be instantiated */ } } diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java index 1c53b58bf6932..10da7567bf17d 100644 --- a/services/core/java/com/android/server/hdmi/HdmiControlService.java +++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java @@ -54,18 +54,6 @@ public final class HdmiControlService extends SystemService { // TODO: Rename the permission to HDMI_CONTROL. private static final String PERMISSION = "android.permission.HDMI_CEC"; - static final int SEND_RESULT_SUCCESS = 0; - static final int SEND_RESULT_NAK = -1; - static final int SEND_RESULT_FAILURE = -2; - - static final int POLL_STRATEGY_MASK = 0x3; // first and second bit. - static final int POLL_STRATEGY_REMOTES_DEVICES = 0x1; - static final int POLL_STRATEGY_SYSTEM_AUDIO = 0x2; - - static final int POLL_ITERATION_STRATEGY_MASK = 0x30000; // first and second bit. - static final int POLL_ITERATION_IN_ORDER = 0x10000; - static final int POLL_ITERATION_REVERSE_ORDER = 0x20000; - /** * Interface to report send result. */ @@ -430,11 +418,11 @@ public final class HdmiControlService extends SystemService { } private int checkPollStrategy(int pickStrategy) { - int strategy = pickStrategy & POLL_STRATEGY_MASK; + int strategy = pickStrategy & HdmiConstants.POLL_STRATEGY_MASK; if (strategy == 0) { throw new IllegalArgumentException("Invalid poll strategy:" + pickStrategy); } - int iterationStrategy = pickStrategy & POLL_ITERATION_STRATEGY_MASK; + int iterationStrategy = pickStrategy & HdmiConstants.POLL_ITERATION_STRATEGY_MASK; if (iterationStrategy == 0) { throw new IllegalArgumentException("Invalid iteration strategy:" + pickStrategy); } diff --git a/services/core/java/com/android/server/hdmi/HotplugDetectionAction.java b/services/core/java/com/android/server/hdmi/HotplugDetectionAction.java index 74f40a6a8ba3f..647cc88e78fa1 100644 --- a/services/core/java/com/android/server/hdmi/HotplugDetectionAction.java +++ b/services/core/java/com/android/server/hdmi/HotplugDetectionAction.java @@ -125,8 +125,8 @@ final class HotplugDetectionAction extends FeatureAction { public void onPollingFinished(List ackedAddress) { checkHotplug(ackedAddress, false); } - }, HdmiControlService.POLL_ITERATION_IN_ORDER - | HdmiControlService.POLL_STRATEGY_REMOTES_DEVICES, POLL_RETRY_COUNT); + }, HdmiConstants.POLL_ITERATION_IN_ORDER + | HdmiConstants.POLL_STRATEGY_REMOTES_DEVICES, POLL_RETRY_COUNT); } private void pollAudioSystem() { @@ -137,8 +137,8 @@ final class HotplugDetectionAction extends FeatureAction { public void onPollingFinished(List ackedAddress) { checkHotplug(ackedAddress, true); } - }, HdmiControlService.POLL_ITERATION_IN_ORDER - | HdmiControlService.POLL_STRATEGY_SYSTEM_AUDIO, POLL_RETRY_COUNT); + }, HdmiConstants.POLL_ITERATION_IN_ORDER + | HdmiConstants.POLL_STRATEGY_SYSTEM_AUDIO, POLL_RETRY_COUNT); } private void checkHotplug(List ackedAddress, boolean audioOnly) { diff --git a/services/core/java/com/android/server/hdmi/RequestArcInitiationAction.java b/services/core/java/com/android/server/hdmi/RequestArcInitiationAction.java index 98ec9536d8817..55fb65ae588d1 100644 --- a/services/core/java/com/android/server/hdmi/RequestArcInitiationAction.java +++ b/services/core/java/com/android/server/hdmi/RequestArcInitiationAction.java @@ -42,7 +42,7 @@ final class RequestArcInitiationAction extends RequestArcAction { sendCommand(command, new HdmiControlService.SendMessageCallback() { @Override public void onSendCompleted(int error) { - if (error == HdmiControlService.SEND_RESULT_SUCCESS) { + if (error == HdmiConstants.SEND_RESULT_SUCCESS) { mState = STATE_WATING_FOR_REQUEST_ARC_REQUEST_RESPONSE; addTimer(mState, TIMEOUT_MS); } else { diff --git a/services/core/java/com/android/server/hdmi/RequestArcTerminationAction.java b/services/core/java/com/android/server/hdmi/RequestArcTerminationAction.java index 19fa22bacfbbe..62ca8f69cbfd9 100644 --- a/services/core/java/com/android/server/hdmi/RequestArcTerminationAction.java +++ b/services/core/java/com/android/server/hdmi/RequestArcTerminationAction.java @@ -42,7 +42,7 @@ final class RequestArcTerminationAction extends RequestArcAction { sendCommand(command, new HdmiControlService.SendMessageCallback() { @Override public void onSendCompleted(int error) { - if (error == HdmiControlService.SEND_RESULT_SUCCESS) { + if (error == HdmiConstants.SEND_RESULT_SUCCESS) { mState = STATE_WATING_FOR_REQUEST_ARC_REQUEST_RESPONSE; addTimer(mState, TIMEOUT_MS); } else { diff --git a/services/core/java/com/android/server/hdmi/SetArcTransmissionStateAction.java b/services/core/java/com/android/server/hdmi/SetArcTransmissionStateAction.java index da841c638f8eb..cdedd6b3bf42c 100644 --- a/services/core/java/com/android/server/hdmi/SetArcTransmissionStateAction.java +++ b/services/core/java/com/android/server/hdmi/SetArcTransmissionStateAction.java @@ -68,7 +68,7 @@ final class SetArcTransmissionStateAction extends FeatureAction { sendCommand(command, new HdmiControlService.SendMessageCallback() { @Override public void onSendCompleted(int error) { - if (error == HdmiControlService.SEND_RESULT_SUCCESS) { + if (error == HdmiConstants.SEND_RESULT_SUCCESS) { // Enable ARC status immediately after sending . // If AVR responds with , disable ARC status again. // This is different from spec that says that turns ARC status to diff --git a/services/core/java/com/android/server/hdmi/SystemAudioAction.java b/services/core/java/com/android/server/hdmi/SystemAudioAction.java index cf7ff90380dfd..e48b0dc3e8626 100644 --- a/services/core/java/com/android/server/hdmi/SystemAudioAction.java +++ b/services/core/java/com/android/server/hdmi/SystemAudioAction.java @@ -67,7 +67,7 @@ abstract class SystemAudioAction extends FeatureAction { sendCommand(command, new HdmiControlService.SendMessageCallback() { @Override public void onSendCompleted(int error) { - if (error == HdmiControlService.SEND_RESULT_SUCCESS) { + if (error == HdmiConstants.SEND_RESULT_SUCCESS) { mState = STATE_WAIT_FOR_SET_SYSTEM_AUDIO_MODE; addTimer(mState, mTargetAudioStatus ? ON_TIMEOUT_MS : OFF_TIMEOUT_MS); } else { @@ -98,7 +98,7 @@ abstract class SystemAudioAction extends FeatureAction { sendCommand(command, new HdmiControlService.SendMessageCallback() { @Override public void onSendCompleted(int error) { - if (error == HdmiControlService.SEND_RESULT_SUCCESS) { + if (error == HdmiConstants.SEND_RESULT_SUCCESS) { mState = STATE_WAIT_FOR_REPORT_AUDIO_STATUS; addTimer(mState, TIMEOUT_MS); } else {