18a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu/*
2cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// Copyright (c) 2014 Intel Corporation 
3cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika//
4cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// Licensed under the Apache License, Version 2.0 (the "License");
5cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// you may not use this file except in compliance with the License.
6cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// You may obtain a copy of the License at
7cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika//
8cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika//      http://www.apache.org/licenses/LICENSE-2.0
9cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika//
10cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// Unless required by applicable law or agreed to in writing, software
11cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// distributed under the License is distributed on an "AS IS" BASIS,
12cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// See the License for the specific language governing permissions and
14cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// limitations under the License.
15cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika*/
168a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu#ifndef EXTERNAL_DEVICE_H
178a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu#define EXTERNAL_DEVICE_H
188a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu
198a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu#include <PhysicalDevice.h>
2010056c1964f893323ab3309f3906e0db8b60d7e0Andy Qiu#include <IHdcpControl.h>
210594c42af26255fd8d3d7d39c0cb0e2da5b8841bThierry Strudel#include <common/base/SimpleThread.h>
228a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu
238a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiunamespace android {
248a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiunamespace intel {
258a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu
268a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu
278a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiuclass ExternalDevice : public PhysicalDevice {
288a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu
298a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiupublic:
308a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu    ExternalDevice(Hwcomposer& hwc, DisplayPlaneManager& dpm);
318a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu    virtual ~ExternalDevice();
328a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiupublic:
338a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu    virtual bool initialize();
34e2ad4c047651d4442f6a0e002290016d45e9201afu jin    virtual void deinitialize();
35cd8c21ebad3f4aa2848495ddf254a180b9be2b31Andy Qiu    virtual bool blank(bool blank);
363f1974031c88750a14adc8f2f49538837238abf9Lin Xie    virtual bool setDrmMode(drmModeModeInfo& value);
372413102f33fdefa6bdb80ed2c4f56fae83cd5bd8fu jin    virtual void setRefreshRate(int hz);
3866ea2feb6efaf52467391fd7ae3a1e57380ca254Andy Qiu    virtual bool getDisplaySize(int *width, int *height);
3966ea2feb6efaf52467391fd7ae3a1e57380ca254Andy Qiu    virtual bool getDisplayConfigs(uint32_t *configs,
4066ea2feb6efaf52467391fd7ae3a1e57380ca254Andy Qiu                                       size_t *numConfigs);
4166ea2feb6efaf52467391fd7ae3a1e57380ca254Andy Qiu    virtual bool getDisplayAttributes(uint32_t config,
4266ea2feb6efaf52467391fd7ae3a1e57380ca254Andy Qiu                                          const uint32_t *attributes,
4366ea2feb6efaf52467391fd7ae3a1e57380ca254Andy Qiu                                          int32_t *values);
44452fbc109a9c585737bcac18f19aff40574c3d79Jim Bish    virtual int  getActiveConfig();
45452fbc109a9c585737bcac18f19aff40574c3d79Jim Bish    virtual bool setActiveConfig(int index);
468a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu
4710056c1964f893323ab3309f3906e0db8b60d7e0Andy Qiuprivate:
4810056c1964f893323ab3309f3906e0db8b60d7e0Andy Qiu    static void HdcpLinkStatusListener(bool success, void *userData);
4910056c1964f893323ab3309f3906e0db8b60d7e0Andy Qiu    void HdcpLinkStatusListener(bool success);
503f1974031c88750a14adc8f2f49538837238abf9Lin Xie    void setDrmMode();
5110056c1964f893323ab3309f3906e0db8b60d7e0Andy Qiu
528a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiuprotected:
5310056c1964f893323ab3309f3906e0db8b60d7e0Andy Qiu    virtual IHdcpControl* createHdcpControl() = 0;
5410056c1964f893323ab3309f3906e0db8b60d7e0Andy Qiu
558a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiuprotected:
5610056c1964f893323ab3309f3906e0db8b60d7e0Andy Qiu    IHdcpControl *mHdcpControl;
57466748a6f67ce4d1ad8baa944e68a88cf3c86d26Austin Hu
58466748a6f67ce4d1ad8baa944e68a88cf3c86d26Austin Huprivate:
59466748a6f67ce4d1ad8baa944e68a88cf3c86d26Austin Hu    static void hotplugEventListener(void *data);
60466748a6f67ce4d1ad8baa944e68a88cf3c86d26Austin Hu    void hotplugListener();
6110056c1964f893323ab3309f3906e0db8b60d7e0Andy Qiu
6210056c1964f893323ab3309f3906e0db8b60d7e0Andy Qiuprivate:
633f1974031c88750a14adc8f2f49538837238abf9Lin Xie    Condition mAbortModeSettingCond;
643f1974031c88750a14adc8f2f49538837238abf9Lin Xie    drmModeModeInfo mPendingDrmMode;
6510056c1964f893323ab3309f3906e0db8b60d7e0Andy Qiu    bool mHotplugEventPending;
664d4cd66e1f283757110e953f452ef356e3718b82ljia    int mExpectedRefreshRate;
673f1974031c88750a14adc8f2f49538837238abf9Lin Xie
683f1974031c88750a14adc8f2f49538837238abf9Lin Xieprivate:
693f1974031c88750a14adc8f2f49538837238abf9Lin Xie    DECLARE_THREAD(ModeSettingThread, ExternalDevice);
708a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu};
718a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu
728a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu}
738a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu}
748a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu
758a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu#endif /* EXTERNAL_DEVICE_H */
76