1781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim/* 2781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * Copyright (C) 2014 The Android Open Source Project 3781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * 4781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * Licensed under the Apache License, Version 2.0 (the "License"); 5781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * you may not use this file except in compliance with the License. 6781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * You may obtain a copy of the License at 7781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * 8781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * http://www.apache.org/licenses/LICENSE-2.0 9781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * 10781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * Unless required by applicable law or agreed to in writing, software 11781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * distributed under the License is distributed on an "AS IS" BASIS, 12781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * See the License for the specific language governing permissions and 14781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * limitations under the License. 15781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim */ 16781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim 17781041239f2931ca16c902fb371cd041b057c918Jinsuk Kimpackage com.android.server.hdmi; 18781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim 19781041239f2931ca16c902fb371cd041b057c918Jinsuk Kimimport android.hardware.hdmi.HdmiPortInfo; 20781041239f2931ca16c902fb371cd041b057c918Jinsuk Kimimport android.util.SparseArray; 21781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim 2261c94d1a03971b07c4ac28af678f3fff6b695c32Jinsuk Kimimport com.android.internal.util.IndentingPrintWriter; 23781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim 24781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim/** 25781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * A handler class for MHL control command. It converts user's command into MHL command and pass it 26781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * to MHL HAL layer. 27781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * <p> 28781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * It can be created only by {@link HdmiMhlControllerStub#create}. 29781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim */ 30781041239f2931ca16c902fb371cd041b057c918Jinsuk Kimfinal class HdmiMhlControllerStub { 31781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim 323b9309a01c9aa0544f97b2ec6abe7b254d829336Jinsuk Kim private static final SparseArray<HdmiMhlLocalDeviceStub> mLocalDevices = new SparseArray<>(); 33781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim private static final HdmiPortInfo[] EMPTY_PORT_INFO = new HdmiPortInfo[0]; 34781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim private static final int INVALID_MHL_VERSION = 0; 35781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim private static final int NO_SUPPORTED_FEATURES = 0; 36781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim private static final int INVALID_DEVICE_ROLES = 0; 37781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim 38781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim // Private constructor. Use HdmiMhlControllerStub.create(). 39781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim private HdmiMhlControllerStub(HdmiControlService service) { 40781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim } 41781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim 42781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim // Returns true if MHL controller is initialized and ready to use. 43781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim boolean isReady() { 44781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim return false; 45781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim } 46781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim 47781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim static HdmiMhlControllerStub create(HdmiControlService service) { 48781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim return new HdmiMhlControllerStub(service); 49781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim } 50781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim 51781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim HdmiPortInfo[] getPortInfos() { 52781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim return EMPTY_PORT_INFO; 53781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim } 54781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim 55781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim /** 563b9309a01c9aa0544f97b2ec6abe7b254d829336Jinsuk Kim * Return {@link HdmiMhlLocalDeviceStub} matched with the given port id. 57781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * 58781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * @return null if has no matched port id 59781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim */ 603b9309a01c9aa0544f97b2ec6abe7b254d829336Jinsuk Kim HdmiMhlLocalDeviceStub getLocalDevice(int portId) { 61781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim return null; 62781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim } 63781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim 64781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim /** 653b9309a01c9aa0544f97b2ec6abe7b254d829336Jinsuk Kim * Return {@link HdmiMhlLocalDeviceStub} matched with the given device id. 66781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * 67781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * @return null if has no matched id 68781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim */ 693b9309a01c9aa0544f97b2ec6abe7b254d829336Jinsuk Kim HdmiMhlLocalDeviceStub getLocalDeviceById(int deviceId) { 70781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim return null; 71781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim } 72781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim 733b9309a01c9aa0544f97b2ec6abe7b254d829336Jinsuk Kim SparseArray<HdmiMhlLocalDeviceStub> getAllLocalDevices() { 74781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim return mLocalDevices; 75781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim } 76781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim 77781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim /** 783b9309a01c9aa0544f97b2ec6abe7b254d829336Jinsuk Kim * Remove a {@link HdmiMhlLocalDeviceStub} matched with the given port id. 79781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * 803b9309a01c9aa0544f97b2ec6abe7b254d829336Jinsuk Kim * @return removed {@link HdmiMhlLocalDeviceStub}. Return null if no matched port id. 81781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim */ 823b9309a01c9aa0544f97b2ec6abe7b254d829336Jinsuk Kim HdmiMhlLocalDeviceStub removeLocalDevice(int portId) { 83781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim return null; 84781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim } 85781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim 86781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim /** 873b9309a01c9aa0544f97b2ec6abe7b254d829336Jinsuk Kim * Add a new {@link HdmiMhlLocalDeviceStub}. 88781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * 893b9309a01c9aa0544f97b2ec6abe7b254d829336Jinsuk Kim * @return old {@link HdmiMhlLocalDeviceStub} having same port id 90781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim */ 913b9309a01c9aa0544f97b2ec6abe7b254d829336Jinsuk Kim HdmiMhlLocalDeviceStub addLocalDevice(HdmiMhlLocalDeviceStub device) { 92781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim return null; 93781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim } 94781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim 95781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim void clearAllLocalDevices() { 96781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim } 97781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim 98b3fbf9dbe8d41d91efbac2118b676af74592257bJinsuk Kim void sendVendorCommand(int portId, int offset, int length, byte[] data) { 99781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim } 100781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim 101781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim void setOption(int flag, int value) { 102781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim } 103781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim 104781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim /** 105781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * Get the MHL version supported by underlying hardware port of the given {@code portId}. 106781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * MHL specification version 2.0 returns 0x20, 3.0 will return 0x30 respectively. 107781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * The return value is stored in 'version'. Return INVALID_VERSION if MHL hardware layer 108781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * is not ready. 109781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim */ 110781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim int getMhlVersion(int portId) { 111781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim return INVALID_MHL_VERSION; 112781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim } 113781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim 114781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim /** 115781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * Get MHL version of a device which is connected to a port of the given {@code portId}. 116781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * MHL specification version 2.0 returns 0x20, 3.0 will return 0x30 respectively. 117781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * The return value is stored in 'version'. 118781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim */ 119781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim int getPeerMhlVersion(int portId) { 120781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim return INVALID_MHL_VERSION; 121781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim } 122781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim 123781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim /** 124781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * Get the bit flags describing the features supported by the system. Refer to feature support 125781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * flag register info in MHL specification. 126781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim */ 127781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim int getSupportedFeatures(int portId) { 128781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim return NO_SUPPORTED_FEATURES; 129781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim } 130781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim 131781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim /** 132781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * Get the bit flags describing the roles which ECBUS device can play. Refer to the 133781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim * ECBUS_DEV_ROLES Register info MHL3.0 specification 134781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim */ 135781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim int getEcbusDeviceRoles(int portId) { 136781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim return INVALID_DEVICE_ROLES; 137781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim } 13861c94d1a03971b07c4ac28af678f3fff6b695c32Jinsuk Kim 13961c94d1a03971b07c4ac28af678f3fff6b695c32Jinsuk Kim void dump(IndentingPrintWriter pw) { 14061c94d1a03971b07c4ac28af678f3fff6b695c32Jinsuk Kim } 141781041239f2931ca16c902fb371cd041b057c918Jinsuk Kim} 142