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