Merge "Delegate HdmiCecService method impl to HdmiCecDevice subclass" into klp-modular-dev
This commit is contained in:
@ -11033,6 +11033,7 @@ package android.hardware.hdmi {
|
|||||||
public final class HdmiCecClient {
|
public final class HdmiCecClient {
|
||||||
method public boolean isTvOn();
|
method public boolean isTvOn();
|
||||||
method public void sendActiveSource();
|
method public void sendActiveSource();
|
||||||
|
method public void sendGiveDevicePowerStatus(int);
|
||||||
method public void sendImageViewOn();
|
method public void sendImageViewOn();
|
||||||
method public void sendInactiveSource();
|
method public void sendInactiveSource();
|
||||||
method public void sendTextViewOn();
|
method public void sendTextViewOn();
|
||||||
|
@ -88,7 +88,7 @@ public final class HdmiCecClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send <TextViewOn> message.
|
* Send <Text View On> message.
|
||||||
*/
|
*/
|
||||||
public void sendTextViewOn() {
|
public void sendTextViewOn() {
|
||||||
try {
|
try {
|
||||||
@ -99,7 +99,7 @@ public final class HdmiCecClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send <ImageViewOn> message.
|
* Send <Image View On> message.
|
||||||
*/
|
*/
|
||||||
public void sendImageViewOn() {
|
public void sendImageViewOn() {
|
||||||
try {
|
try {
|
||||||
@ -109,6 +109,20 @@ public final class HdmiCecClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send <Give Device Power Status> message.
|
||||||
|
*
|
||||||
|
* @param address logical address of the device to send the message to, such as
|
||||||
|
* {@link HdmiCec#ADDR_TV}.
|
||||||
|
*/
|
||||||
|
public void sendGiveDevicePowerStatus(int address) {
|
||||||
|
try {
|
||||||
|
mService.sendGiveDevicePowerStatus(mBinder, address);
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
Log.e(TAG, "sendGiveDevicePowerStatus threw exception ", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if the TV or attached display is powered on.
|
* Returns true if the TV or attached display is powered on.
|
||||||
* <p>
|
* <p>
|
||||||
|
@ -33,6 +33,7 @@ interface IHdmiCecService {
|
|||||||
void sendInactiveSource(IBinder b);
|
void sendInactiveSource(IBinder b);
|
||||||
void sendImageViewOn(IBinder b);
|
void sendImageViewOn(IBinder b);
|
||||||
void sendTextViewOn(IBinder b);
|
void sendTextViewOn(IBinder b);
|
||||||
|
void sendGiveDevicePowerStatus(IBinder b, int address);
|
||||||
boolean isTvOn(IBinder b);
|
boolean isTvOn(IBinder b);
|
||||||
void sendMessage(IBinder b, in HdmiCecMessage message);
|
void sendMessage(IBinder b, in HdmiCecMessage message);
|
||||||
}
|
}
|
||||||
|
@ -181,12 +181,50 @@ abstract class HdmiCecDevice {
|
|||||||
mIsActiveSource = state;
|
mIsActiveSource = state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send <Active Source> command. The default implementation does nothing. Should be
|
||||||
|
* overriden by subclass.
|
||||||
|
*/
|
||||||
|
public void sendActiveSource(int physicalAddress) {
|
||||||
|
logWarning("<Active Source> not valid for the device type: " + mType
|
||||||
|
+ " address:" + physicalAddress);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send <Inactive Source> command. The default implementation does nothing. Should be
|
||||||
|
* overriden by subclass.
|
||||||
|
*/
|
||||||
|
public void sendInactiveSource(int physicalAddress) {
|
||||||
|
logWarning("<Inactive Source> not valid for the device type: " + mType
|
||||||
|
+ " address:" + physicalAddress);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send <Image View On> command. The default implementation does nothing. Should be
|
||||||
|
* overriden by subclass.
|
||||||
|
*/
|
||||||
|
public void sendImageViewOn() {
|
||||||
|
logWarning("<Image View On> not valid for the device type: " + mType);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send <Text View On> command. The default implementation does nothing. Should be
|
||||||
|
* overriden by subclass.
|
||||||
|
*/
|
||||||
|
public void sendTextViewOn() {
|
||||||
|
logWarning("<Text View On> not valid for the device type: " + mType);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if the connected sink device is in powered-on state. The default implementation
|
* Check if the connected sink device is in powered-on state. The default implementation
|
||||||
* simply returns false. Should be overriden by subclass to report the correct state.
|
* simply returns false. Should be overriden by subclass to report the correct state.
|
||||||
*/
|
*/
|
||||||
public boolean isSinkDeviceOn() {
|
public boolean isSinkDeviceOn() {
|
||||||
Log.w(TAG, "Not valid for the device type: " + mType);
|
logWarning("isSinkDeviceOn() not valid for the device type: " + mType);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void logWarning(String msg) {
|
||||||
|
Log.w(TAG, msg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -66,14 +66,11 @@ final class HdmiCecDevicePlayback extends HdmiCecDevice {
|
|||||||
// 1) Response for the queried power status request arrives. Update the status.
|
// 1) Response for the queried power status request arrives. Update the status.
|
||||||
// 2) Broadcast or direct <Standby> command from TV, which is sent as TV itself is going
|
// 2) Broadcast or direct <Standby> command from TV, which is sent as TV itself is going
|
||||||
// into standby mode too.
|
// into standby mode too.
|
||||||
// 3) Broadcast <Report Physical Address> command from TV, which is sent while it boots up.
|
|
||||||
if (opcode == HdmiCec.MESSAGE_REPORT_POWER_STATUS) {
|
if (opcode == HdmiCec.MESSAGE_REPORT_POWER_STATUS) {
|
||||||
mSinkDevicePowerStatus = params[0];
|
mSinkDevicePowerStatus = params[0];
|
||||||
} else if (srcAddress == HdmiCec.ADDR_TV) {
|
} else if (srcAddress == HdmiCec.ADDR_TV) {
|
||||||
if (opcode == HdmiCec.MESSAGE_STANDBY) {
|
if (opcode == HdmiCec.MESSAGE_STANDBY) {
|
||||||
mSinkDevicePowerStatus = HdmiCec.POWER_STATUS_STANDBY;
|
mSinkDevicePowerStatus = HdmiCec.POWER_STATUS_STANDBY;
|
||||||
} else if (opcode == HdmiCec.MESSAGE_REPORT_PHYSICAL_ADDRESS) {
|
|
||||||
mSinkDevicePowerStatus = HdmiCec.POWER_STATUS_ON;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
super.handleMessage(srcAddress, dstAddress, opcode, params);
|
super.handleMessage(srcAddress, dstAddress, opcode, params);
|
||||||
@ -95,4 +92,38 @@ final class HdmiCecDevicePlayback extends HdmiCecDevice {
|
|||||||
public boolean isSinkDeviceOn() {
|
public boolean isSinkDeviceOn() {
|
||||||
return mSinkDevicePowerStatus == HdmiCec.POWER_STATUS_ON;
|
return mSinkDevicePowerStatus == HdmiCec.POWER_STATUS_ON;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendActiveSource(int physicalAddress) {
|
||||||
|
setIsActiveSource(true);
|
||||||
|
byte[] param = new byte[] {
|
||||||
|
(byte) ((physicalAddress >> 8) & 0xff),
|
||||||
|
(byte) (physicalAddress & 0xff)
|
||||||
|
};
|
||||||
|
getService().sendMessage(getType(), HdmiCec.ADDR_BROADCAST, HdmiCec.MESSAGE_ACTIVE_SOURCE,
|
||||||
|
param);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendInactiveSource(int physicalAddress) {
|
||||||
|
setIsActiveSource(false);
|
||||||
|
byte[] param = new byte[] {
|
||||||
|
(byte) ((physicalAddress >> 8) & 0xff),
|
||||||
|
(byte) (physicalAddress & 0xff)
|
||||||
|
};
|
||||||
|
getService().sendMessage(getType(), HdmiCec.ADDR_TV, HdmiCec.MESSAGE_INACTIVE_SOURCE,
|
||||||
|
param);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendImageViewOn() {
|
||||||
|
getService().sendMessage(getType(), HdmiCec.ADDR_TV, HdmiCec.MESSAGE_IMAGE_VIEW_ON,
|
||||||
|
HdmiCecService.EMPTY_PARAM);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendTextViewOn() {
|
||||||
|
getService().sendMessage(getType(), HdmiCec.ADDR_TV, HdmiCec.MESSAGE_TEXT_VIEW_ON,
|
||||||
|
HdmiCecService.EMPTY_PARAM);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -277,14 +277,7 @@ public final class HdmiCecService extends SystemService {
|
|||||||
enforceAccessPermission();
|
enforceAccessPermission();
|
||||||
synchronized (mLock) {
|
synchronized (mLock) {
|
||||||
HdmiCecDevice device = getLogicalDeviceLocked(b);
|
HdmiCecDevice device = getLogicalDeviceLocked(b);
|
||||||
device.setIsActiveSource(true);
|
device.sendActiveSource(nativeGetPhysicalAddress(mNativePtr));
|
||||||
int physicalAddress = nativeGetPhysicalAddress(mNativePtr);
|
|
||||||
byte[] param = new byte[] {
|
|
||||||
(byte) ((physicalAddress >> 8) & 0xff),
|
|
||||||
(byte) (physicalAddress & 0xff)
|
|
||||||
};
|
|
||||||
nativeSendMessage(mNativePtr, device.getType(), HdmiCec.ADDR_BROADCAST,
|
|
||||||
HdmiCec.MESSAGE_ACTIVE_SOURCE, param);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -293,9 +286,7 @@ public final class HdmiCecService extends SystemService {
|
|||||||
enforceAccessPermission();
|
enforceAccessPermission();
|
||||||
synchronized (mLock) {
|
synchronized (mLock) {
|
||||||
HdmiCecDevice device = getLogicalDeviceLocked(b);
|
HdmiCecDevice device = getLogicalDeviceLocked(b);
|
||||||
device.setIsActiveSource(false);
|
device.sendInactiveSource(nativeGetPhysicalAddress(mNativePtr));
|
||||||
nativeSendMessage(mNativePtr, device.getType(), HdmiCec.ADDR_BROADCAST,
|
|
||||||
HdmiCec.MESSAGE_INACTIVE_SOURCE, EMPTY_PARAM);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -304,8 +295,7 @@ public final class HdmiCecService extends SystemService {
|
|||||||
enforceAccessPermission();
|
enforceAccessPermission();
|
||||||
synchronized (mLock) {
|
synchronized (mLock) {
|
||||||
HdmiCecDevice device = getLogicalDeviceLocked(b);
|
HdmiCecDevice device = getLogicalDeviceLocked(b);
|
||||||
nativeSendMessage(mNativePtr, device.getType(), HdmiCec.ADDR_TV,
|
device.sendImageViewOn();
|
||||||
HdmiCec.MESSAGE_IMAGE_VIEW_ON, EMPTY_PARAM);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -314,8 +304,16 @@ public final class HdmiCecService extends SystemService {
|
|||||||
enforceAccessPermission();
|
enforceAccessPermission();
|
||||||
synchronized (mLock) {
|
synchronized (mLock) {
|
||||||
HdmiCecDevice device = getLogicalDeviceLocked(b);
|
HdmiCecDevice device = getLogicalDeviceLocked(b);
|
||||||
nativeSendMessage(mNativePtr, device.getType(), HdmiCec.ADDR_TV,
|
device.sendTextViewOn();
|
||||||
HdmiCec.MESSAGE_TEXT_VIEW_ON, EMPTY_PARAM);
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendGiveDevicePowerStatus(IBinder b, int address) {
|
||||||
|
enforceAccessPermission();
|
||||||
|
synchronized (mLock) {
|
||||||
|
HdmiCecDevice device = getLogicalDeviceLocked(b);
|
||||||
|
nativeSendMessage(mNativePtr, device.getType(), address,
|
||||||
|
HdmiCec.MESSAGE_GIVE_DEVICE_POWER_STATUS, EMPTY_PARAM);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -204,6 +204,11 @@ cec_logical_address_t HdmiCecHandler::initLogicalDevice(cec_device_type_t type)
|
|||||||
} else {
|
} else {
|
||||||
ALOGV("Logical Address Allocation success: %d", addr);
|
ALOGV("Logical Address Allocation success: %d", addr);
|
||||||
mLogicalDevices.insert(std::pair<cec_device_type_t, cec_logical_address_t>(type, addr));
|
mLogicalDevices.insert(std::pair<cec_device_type_t, cec_logical_address_t>(type, addr));
|
||||||
|
|
||||||
|
// Broadcast <Report Physical Address> when a new logical address was allocated to let
|
||||||
|
// other devices discover the new logical device and its logical - physical address
|
||||||
|
// association.
|
||||||
|
sendReportPhysicalAddress();
|
||||||
}
|
}
|
||||||
return addr;
|
return addr;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user