am de02cd6d: CEC: Stub MHL Device

* commit 'de02cd6d02e0b6c5b0dac06a26cdade2109e8f23':
  CEC: Stub MHL Device
This commit is contained in:
Jinsuk Kim
2014-09-12 18:51:29 +00:00
committed by Android Git Automerger
3 changed files with 70 additions and 59 deletions

View File

@@ -818,42 +818,18 @@ public final class HdmiControlService extends SystemService {
getVendorId(), displayName);
}
@ServiceThreadOnly
void sendMhlSubcommand(int portId, HdmiMhlSubcommand command) {
assertRunOnServiceThread();
sendMhlSubcommand(portId, command, null);
}
@ServiceThreadOnly
void sendMhlSubcommand(int portId, HdmiMhlSubcommand command, SendMessageCallback callback) {
assertRunOnServiceThread();
mMhlController.sendSubcommand(portId, command, callback);
}
@ServiceThreadOnly
boolean handleMhlSubcommand(int portId, HdmiMhlSubcommand message) {
assertRunOnServiceThread();
HdmiMhlLocalDevice device = mMhlController.getLocalDevice(portId);
if (device != null) {
return device.handleSubcommand(message);
}
Slog.w(TAG, "No mhl device exists[portId:" + portId + ", message:" + message);
return false;
}
@ServiceThreadOnly
void handleMhlHotplugEvent(int portId, boolean connected) {
assertRunOnServiceThread();
if (connected) {
HdmiMhlLocalDevice newDevice = new HdmiMhlLocalDevice(this, portId);
HdmiMhlLocalDevice oldDevice = mMhlController.addLocalDevice(newDevice);
HdmiMhlLocalDeviceStub newDevice = new HdmiMhlLocalDeviceStub(this, portId);
HdmiMhlLocalDeviceStub oldDevice = mMhlController.addLocalDevice(newDevice);
if (oldDevice != null) {
oldDevice.onDeviceRemoved();
Slog.i(TAG, "Old device of port " + portId + " is removed");
}
} else {
HdmiMhlLocalDevice device = mMhlController.removeLocalDevice(portId);
HdmiMhlLocalDeviceStub device = mMhlController.removeLocalDevice(portId);
if (device != null) {
device.onDeviceRemoved();
// There is no explicit event for device removal.
@@ -873,7 +849,7 @@ public final class HdmiControlService extends SystemService {
@ServiceThreadOnly
void handleMhlBusModeChanged(int portId, int busmode) {
assertRunOnServiceThread();
HdmiMhlLocalDevice device = mMhlController.getLocalDevice(portId);
HdmiMhlLocalDeviceStub device = mMhlController.getLocalDevice(portId);
if (device != null) {
device.setBusMode(busmode);
} else {
@@ -885,7 +861,7 @@ public final class HdmiControlService extends SystemService {
@ServiceThreadOnly
void handleMhlBusOvercurrent(int portId, boolean on) {
assertRunOnServiceThread();
HdmiMhlLocalDevice device = mMhlController.getLocalDevice(portId);
HdmiMhlLocalDeviceStub device = mMhlController.getLocalDevice(portId);
if (device != null) {
device.onBusOvercurrentDetected(on);
} else {
@@ -896,7 +872,7 @@ public final class HdmiControlService extends SystemService {
@ServiceThreadOnly
void handleMhlDeviceStatusChanged(int portId, int adopterId, int deviceId) {
assertRunOnServiceThread();
HdmiMhlLocalDevice device = mMhlController.getLocalDevice(portId);
HdmiMhlLocalDeviceStub device = mMhlController.getLocalDevice(portId);
// Hotplug event should already have been called before device status change event.
if (device != null) {
@@ -913,9 +889,9 @@ public final class HdmiControlService extends SystemService {
private void updateSafeMhlInput() {
assertRunOnServiceThread();
List<HdmiDeviceInfo> inputs = Collections.emptyList();
SparseArray<HdmiMhlLocalDevice> devices = mMhlController.getAllLocalDevices();
SparseArray<HdmiMhlLocalDeviceStub> devices = mMhlController.getAllLocalDevices();
for (int i = 0; i < devices.size(); ++i) {
HdmiMhlLocalDevice device = devices.valueAt(i);
HdmiMhlLocalDeviceStub device = devices.valueAt(i);
HdmiDeviceInfo info = device.getInfo();
if (info != null) {
if (inputs.isEmpty()) {
@@ -1077,7 +1053,7 @@ public final class HdmiControlService extends SystemService {
invokeCallback(callback, HdmiControlManager.RESULT_SOURCE_NOT_AVAILABLE);
return;
}
HdmiMhlLocalDevice device = mMhlController.getLocalDeviceById(deviceId);
HdmiMhlLocalDeviceStub device = mMhlController.getLocalDeviceById(deviceId);
if (device != null) {
if (device.getPortId() == tv.getActivePortId()) {
invokeCallback(callback, HdmiControlManager.RESULT_SUCCESS);
@@ -1122,7 +1098,7 @@ public final class HdmiControlService extends SystemService {
runOnServiceThread(new Runnable() {
@Override
public void run() {
HdmiMhlLocalDevice device = mMhlController.getLocalDevice(mActivePortId);
HdmiMhlLocalDeviceStub device = mMhlController.getLocalDevice(mActivePortId);
if (device != null) {
device.sendKeyEvent(keyCode, isPressed);
return;
@@ -1434,7 +1410,7 @@ public final class HdmiControlService extends SystemService {
Slog.w(TAG, "Hdmi control is disabled.");
return ;
}
HdmiMhlLocalDevice device = mMhlController.getLocalDevice(portId);
HdmiMhlLocalDeviceStub device = mMhlController.getLocalDevice(portId);
if (device == null) {
Slog.w(TAG, "Invalid port id:" + portId);
return;
@@ -2025,7 +2001,7 @@ public final class HdmiControlService extends SystemService {
// the last port to go back to when turnoff command is received. Note that the last port
// may not be the MHL-enabled one. In this case the device info to be passed to
// input change listener should be the one describing the corresponding HDMI port.
HdmiMhlLocalDevice device = mMhlController.getLocalDevice(portId);
HdmiMhlLocalDeviceStub device = mMhlController.getLocalDevice(portId);
HdmiDeviceInfo info = (device != null && device.getInfo() != null)
? device.getInfo()
: mPortDeviceMap.get(portId);

View File

@@ -29,7 +29,7 @@ import com.android.server.hdmi.HdmiControlService.SendMessageCallback;
*/
final class HdmiMhlControllerStub {
private static final SparseArray<HdmiMhlLocalDevice> mLocalDevices = new SparseArray<>();
private static final SparseArray<HdmiMhlLocalDeviceStub> mLocalDevices = new SparseArray<>();
private static final HdmiPortInfo[] EMPTY_PORT_INFO = new HdmiPortInfo[0];
private static final int INVALID_MHL_VERSION = 0;
private static final int NO_SUPPORTED_FEATURES = 0;
@@ -53,59 +53,48 @@ final class HdmiMhlControllerStub {
}
/**
* Return {@link HdmiMhlLocalDevice} matched with the given port id.
* Return {@link HdmiMhlLocalDeviceStub} matched with the given port id.
*
* @return null if has no matched port id
*/
HdmiMhlLocalDevice getLocalDevice(int portId) {
HdmiMhlLocalDeviceStub getLocalDevice(int portId) {
return null;
}
/**
* Return {@link HdmiMhlLocalDevice} matched with the given device id.
* Return {@link HdmiMhlLocalDeviceStub} matched with the given device id.
*
* @return null if has no matched id
*/
HdmiMhlLocalDevice getLocalDeviceById(int deviceId) {
HdmiMhlLocalDeviceStub getLocalDeviceById(int deviceId) {
return null;
}
SparseArray<HdmiMhlLocalDevice> getAllLocalDevices() {
SparseArray<HdmiMhlLocalDeviceStub> getAllLocalDevices() {
return mLocalDevices;
}
/**
* Remove a {@link HdmiMhlLocalDevice} matched with the given port id.
* Remove a {@link HdmiMhlLocalDeviceStub} matched with the given port id.
*
* @return removed {@link HdmiMhlLocalDevice}. Return null if no matched port id.
* @return removed {@link HdmiMhlLocalDeviceStub}. Return null if no matched port id.
*/
HdmiMhlLocalDevice removeLocalDevice(int portId) {
HdmiMhlLocalDeviceStub removeLocalDevice(int portId) {
return null;
}
/**
* Add a new {@link HdmiMhlLocalDevice}.
* Add a new {@link HdmiMhlLocalDeviceStub}.
*
* @return old {@link HdmiMhlLocalDevice} having same port id
* @return old {@link HdmiMhlLocalDeviceStub} having same port id
*/
HdmiMhlLocalDevice addLocalDevice(HdmiMhlLocalDevice device) {
HdmiMhlLocalDeviceStub addLocalDevice(HdmiMhlLocalDeviceStub device) {
return null;
}
void clearAllLocalDevices() {
}
/**
* Send MHL MSC-Subcommand to the device connected to the given port.
*/
void sendSubcommand(int portId, HdmiMhlSubcommand command) {
}
void sendSubcommand(final int portId, final HdmiMhlSubcommand command,
SendMessageCallback callback) {
}
void sendVendorCommand(int portId, int offset, int length, byte[] data) {
}

View File

@@ -0,0 +1,46 @@
package com.android.server.hdmi;
import android.hardware.hdmi.HdmiDeviceInfo;
import android.hardware.hdmi.IHdmiControlCallback;
/**
* Stub class that models a logical mhl device hosted in this system.
*/
final class HdmiMhlLocalDeviceStub {
private static final HdmiDeviceInfo INFO = new HdmiDeviceInfo(
Constants.INVALID_PHYSICAL_ADDRESS, Constants.INVALID_PORT_ID, -1, -1);
private final HdmiControlService mService;
private final int mPortId;
protected HdmiMhlLocalDeviceStub(HdmiControlService service, int portId) {
mService = service;
mPortId = portId;
}
void onDeviceRemoved() {
}
HdmiDeviceInfo getInfo() {
return INFO;
}
void setBusMode(int cbusmode) {
}
void onBusOvercurrentDetected(boolean on) {
}
void setDeviceStatusChange(int adopterId, int deviceId) {
}
int getPortId() {
return mPortId;
}
void turnOn(IHdmiControlCallback callback) {
}
void sendKeyEvent(int keycode, boolean isPressed) {
}
}