1/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.server.hdmi;
18
19import android.hardware.hdmi.HdmiPortInfo;
20import android.util.SparseArray;
21
22import com.android.internal.util.IndentingPrintWriter;
23import com.android.server.hdmi.HdmiControlService.SendMessageCallback;
24
25/**
26 * A handler class for MHL control command. It converts user's command into MHL command and pass it
27 * to MHL HAL layer.
28 * <p>
29 * It can be created only by {@link HdmiMhlControllerStub#create}.
30 */
31final class HdmiMhlControllerStub {
32
33    private static final SparseArray<HdmiMhlLocalDeviceStub> mLocalDevices = new SparseArray<>();
34    private static final HdmiPortInfo[] EMPTY_PORT_INFO = new HdmiPortInfo[0];
35    private static final int INVALID_MHL_VERSION = 0;
36    private static final int NO_SUPPORTED_FEATURES = 0;
37    private static final int INVALID_DEVICE_ROLES = 0;
38
39    // Private constructor. Use HdmiMhlControllerStub.create().
40    private HdmiMhlControllerStub(HdmiControlService service) {
41    }
42
43    // Returns true if MHL controller is initialized and ready to use.
44    boolean isReady() {
45        return false;
46    }
47
48    static HdmiMhlControllerStub create(HdmiControlService service) {
49        return new HdmiMhlControllerStub(service);
50    }
51
52    HdmiPortInfo[] getPortInfos() {
53        return EMPTY_PORT_INFO;
54    }
55
56    /**
57     * Return {@link HdmiMhlLocalDeviceStub} matched with the given port id.
58     *
59     * @return null if has no matched port id
60     */
61    HdmiMhlLocalDeviceStub getLocalDevice(int portId) {
62        return null;
63    }
64
65    /**
66     * Return {@link HdmiMhlLocalDeviceStub} matched with the given device id.
67     *
68     * @return null if has no matched id
69     */
70    HdmiMhlLocalDeviceStub getLocalDeviceById(int deviceId) {
71        return null;
72    }
73
74    SparseArray<HdmiMhlLocalDeviceStub> getAllLocalDevices() {
75        return mLocalDevices;
76    }
77
78    /**
79     * Remove a {@link HdmiMhlLocalDeviceStub} matched with the given port id.
80     *
81     * @return removed {@link HdmiMhlLocalDeviceStub}. Return null if no matched port id.
82     */
83    HdmiMhlLocalDeviceStub removeLocalDevice(int portId) {
84        return null;
85    }
86
87    /**
88     * Add a new {@link HdmiMhlLocalDeviceStub}.
89     *
90     * @return old {@link HdmiMhlLocalDeviceStub} having same port id
91     */
92    HdmiMhlLocalDeviceStub addLocalDevice(HdmiMhlLocalDeviceStub device) {
93        return null;
94    }
95
96    void clearAllLocalDevices() {
97    }
98
99    void sendVendorCommand(int portId, int offset, int length, byte[] data) {
100    }
101
102    void setOption(int flag, int value) {
103    }
104
105    /**
106     * Get the MHL version supported by underlying hardware port of the given {@code portId}.
107     * MHL specification version 2.0 returns 0x20, 3.0 will return 0x30 respectively.
108     * The return value is stored in 'version'. Return INVALID_VERSION if MHL hardware layer
109     * is not ready.
110     */
111    int getMhlVersion(int portId) {
112        return INVALID_MHL_VERSION;
113    }
114
115    /**
116     * Get MHL version of a device which is connected to a port of the given {@code portId}.
117     * MHL specification version 2.0 returns 0x20, 3.0 will return 0x30 respectively.
118     * The return value is stored in 'version'.
119     */
120    int getPeerMhlVersion(int portId) {
121        return INVALID_MHL_VERSION;
122    }
123
124    /**
125     * Get the bit flags describing the features supported by the system. Refer to feature support
126     * flag register info in MHL specification.
127     */
128    int getSupportedFeatures(int portId) {
129        return NO_SUPPORTED_FEATURES;
130    }
131
132    /**
133     * Get the bit flags describing the roles which ECBUS device can play. Refer to the
134     * ECBUS_DEV_ROLES Register info MHL3.0 specification
135     */
136    int getEcbusDeviceRoles(int portId) {
137        return INVALID_DEVICE_ROLES;
138    }
139
140    void dump(IndentingPrintWriter pw) {
141    }
142}
143