191120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim/* 291120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * Copyright (C) 2014 The Android Open Source Project 391120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * 491120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * Licensed under the Apache License, Version 2.0 (the "License"); 591120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * you may not use this file except in compliance with the License. 691120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * You may obtain a copy of the License at 791120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * 891120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * http://www.apache.org/licenses/LICENSE-2.0 991120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * 1091120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * Unless required by applicable law or agreed to in writing, software 1191120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * distributed under the License is distributed on an "AS IS" BASIS, 1291120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1391120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * See the License for the specific language governing permissions and 1491120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * limitations under the License. 1591120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim */ 1691120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim 1791120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kimpackage android.hardware.hdmi; 1891120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim 1966d1eb285b129836d1b3c392ed609283c0dbf830Jinsuk Kimimport android.annotation.SystemApi; 2091120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kimimport android.os.RemoteException; 2191120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kimimport android.util.Log; 2291120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim 2391120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim/** 2491120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * HdmiPlaybackClient represents HDMI-CEC logical device of type Playback 2591120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * in the Android system which acts as a playback device such as set-top box. 2691120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * It provides with methods that control, get information from TV/Display device 2791120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * connected through HDMI bus. 2866d1eb285b129836d1b3c392ed609283c0dbf830Jinsuk Kim * 2966d1eb285b129836d1b3c392ed609283c0dbf830Jinsuk Kim * @hide 3091120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim */ 3166d1eb285b129836d1b3c392ed609283c0dbf830Jinsuk Kim@SystemApi 32119160a68195bcb2f5bdf4a269807e01228eca97Jinsuk Kimpublic final class HdmiPlaybackClient extends HdmiClient { 3391120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim private static final String TAG = "HdmiPlaybackClient"; 3491120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim 358d115eb18fce5b85538239e2373c3efd28e46986Jinsuk Kim // Logical address of TV. The secondary TV is not handled. 368d115eb18fce5b85538239e2373c3efd28e46986Jinsuk Kim private static final int ADDR_TV = 0; 378d115eb18fce5b85538239e2373c3efd28e46986Jinsuk Kim 3891120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim /** 3991120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * Listener used by the client to get the result of one touch play operation. 4091120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim */ 4191120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim public interface OneTouchPlayCallback { 4291120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim /** 4391120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * Called when the result of the feature one touch play is returned. 4491120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * 45c0c20d0522d7756d80f011e7a54bf3b51c78df41Jinsuk Kim * @param result the result of the operation. {@link HdmiControlManager#RESULT_SUCCESS} 4691120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * if successful. 4791120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim */ 4891120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim public void onComplete(int result); 4991120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim } 5091120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim 5191120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim /** 5291120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * Listener used by the client to get display device status. 5391120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim */ 5491120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim public interface DisplayStatusCallback { 5591120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim /** 5691120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * Called when display device status is reported. 5791120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * 5861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang * @param status display device status. It should be one of the following values. 5961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang * <ul> 6061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang * <li>{@link HdmiControlManager#POWER_STATUS_ON} 6161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang * <li>{@link HdmiControlManager#POWER_STATUS_STANDBY} 6261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang * <li>{@link HdmiControlManager#POWER_STATUS_TRANSIENT_TO_ON} 6361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang * <li>{@link HdmiControlManager#POWER_STATUS_TRANSIENT_TO_STANDBY} 6461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang * <li>{@link HdmiControlManager#POWER_STATUS_UNKNOWN} 6561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang * </ul> 6691120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim */ 6791120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim public void onComplete(int status); 6891120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim } 6991120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim 702b0da5c4c84305f1d391dc78b85e244c9fd92456Yuncheol Heo /* package */ HdmiPlaybackClient(IHdmiControlService service) { 71119160a68195bcb2f5bdf4a269807e01228eca97Jinsuk Kim super(service); 7291120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim } 7391120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim 7491120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim /** 752b0da5c4c84305f1d391dc78b85e244c9fd92456Yuncheol Heo * Performs the feature 'one touch play' from playback device to turn on display 7691120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * and switch the input. 7791120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * 7891120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * @param callback {@link OneTouchPlayCallback} object to get informed 7991120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * of the result 8091120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim */ 8191120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim public void oneTouchPlay(OneTouchPlayCallback callback) { 8291120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim // TODO: Use PendingResult. 8391120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim try { 8491120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim mService.oneTouchPlay(getCallbackWrapper(callback)); 8591120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim } catch (RemoteException e) { 8691120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim Log.e(TAG, "oneTouchPlay threw exception ", e); 8791120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim } 8891120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim } 8991120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim 908e93c84739902f5adaa499b474f39e3c4807bc1cJungshik Jang @Override 91119160a68195bcb2f5bdf4a269807e01228eca97Jinsuk Kim public int getDeviceType() { 9261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang return HdmiDeviceInfo.DEVICE_PLAYBACK; 93119160a68195bcb2f5bdf4a269807e01228eca97Jinsuk Kim } 94119160a68195bcb2f5bdf4a269807e01228eca97Jinsuk Kim 9591120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim /** 962b0da5c4c84305f1d391dc78b85e244c9fd92456Yuncheol Heo * Gets the status of display device connected through HDMI bus. 9791120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * 9891120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * @param callback {@link DisplayStatusCallback} object to get informed 9991120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * of the result 10091120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim */ 10191120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim public void queryDisplayStatus(DisplayStatusCallback callback) { 10291120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim try { 103304b4a7281ffe4153d21eb50ebed070f1cf685bcJinsuk Kim mService.queryDisplayStatus(getCallbackWrapper(callback)); 10491120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim } catch (RemoteException e) { 10591120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim Log.e(TAG, "queryDisplayStatus threw exception ", e); 10691120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim } 10791120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim } 10891120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim 1098d115eb18fce5b85538239e2373c3efd28e46986Jinsuk Kim /** 1108d115eb18fce5b85538239e2373c3efd28e46986Jinsuk Kim * Sends a <Standby> command to TV. 1118d115eb18fce5b85538239e2373c3efd28e46986Jinsuk Kim */ 1128d115eb18fce5b85538239e2373c3efd28e46986Jinsuk Kim public void sendStandby() { 1138d115eb18fce5b85538239e2373c3efd28e46986Jinsuk Kim try { 1148d115eb18fce5b85538239e2373c3efd28e46986Jinsuk Kim mService.sendStandby(getDeviceType(), HdmiDeviceInfo.idForCecDevice(ADDR_TV)); 1158d115eb18fce5b85538239e2373c3efd28e46986Jinsuk Kim } catch (RemoteException e) { 1168d115eb18fce5b85538239e2373c3efd28e46986Jinsuk Kim Log.e(TAG, "sendStandby threw exception ", e); 1178d115eb18fce5b85538239e2373c3efd28e46986Jinsuk Kim } 1188d115eb18fce5b85538239e2373c3efd28e46986Jinsuk Kim } 1198d115eb18fce5b85538239e2373c3efd28e46986Jinsuk Kim 12091120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim private IHdmiControlCallback getCallbackWrapper(final OneTouchPlayCallback callback) { 12191120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim return new IHdmiControlCallback.Stub() { 12291120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim @Override 12391120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim public void onComplete(int result) { 12491120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim callback.onComplete(result); 12591120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim } 12691120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim }; 12791120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim } 12891120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim 12991120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim private IHdmiControlCallback getCallbackWrapper(final DisplayStatusCallback callback) { 13091120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim return new IHdmiControlCallback.Stub() { 13191120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim @Override 13291120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim public void onComplete(int status) { 13391120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim callback.onComplete(status); 13491120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim } 13591120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim }; 13691120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim } 13791120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim} 138