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