* commit 'a6a01787fb657189202dec096c30b3d2f63197dc': CEC: Ensure stable AVR connection
This commit is contained in:
@@ -38,6 +38,7 @@ final class HotplugDetectionAction extends HdmiCecFeatureAction {
|
||||
|
||||
private static final int POLLING_INTERVAL_MS = 5000;
|
||||
private static final int TIMEOUT_COUNT = 3;
|
||||
private static final int AVR_COUNT_MAX = 3;
|
||||
|
||||
// State in which waits for next polling
|
||||
private static final int STATE_WAIT_FOR_NEXT_POLLING = 1;
|
||||
@@ -48,6 +49,12 @@ final class HotplugDetectionAction extends HdmiCecFeatureAction {
|
||||
|
||||
private int mTimeoutCount = 0;
|
||||
|
||||
// Counter used to ensure the connection to AVR is stable. Occasional failure to get
|
||||
// polling response from AVR despite its presence leads to unstable status flipping.
|
||||
// This is a workaround to deal with it, by removing the device only if the removal
|
||||
// is detected {@code AVR_COUNT_MAX} times in a row.
|
||||
private int mAvrStatusCount = 0;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
@@ -148,10 +155,22 @@ final class HotplugDetectionAction extends HdmiCecFeatureAction {
|
||||
BitSet removed = complement(currentInfos, polledResult);
|
||||
int index = -1;
|
||||
while ((index = removed.nextSetBit(index + 1)) != -1) {
|
||||
if (index == Constants.ADDR_AUDIO_SYSTEM) {
|
||||
++mAvrStatusCount;
|
||||
Slog.w(TAG, "Ack not returned from AVR. count: " + mAvrStatusCount);
|
||||
if (mAvrStatusCount < AVR_COUNT_MAX) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
Slog.v(TAG, "Remove device by hot-plug detection:" + index);
|
||||
removeDevice(index);
|
||||
}
|
||||
|
||||
// Reset the counter if the ack is returned from AVR.
|
||||
if (!removed.get(Constants.ADDR_AUDIO_SYSTEM)) {
|
||||
mAvrStatusCount = 0;
|
||||
}
|
||||
|
||||
// Next, check added devices.
|
||||
BitSet added = complement(polledResult, currentInfos);
|
||||
index = -1;
|
||||
|
||||
Reference in New Issue
Block a user