ExternalDevice.h revision 452fbc109a9c585737bcac18f19aff40574c3d79
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(); 353f1974031c88750a14adc8f2f49538837238abf9Lin Xie virtual bool setDrmMode(drmModeModeInfo& value); 362413102f33fdefa6bdb80ed2c4f56fae83cd5bd8fu jin virtual void setRefreshRate(int hz); 3766ea2feb6efaf52467391fd7ae3a1e57380ca254Andy Qiu virtual bool getDisplaySize(int *width, int *height); 3866ea2feb6efaf52467391fd7ae3a1e57380ca254Andy Qiu virtual bool getDisplayConfigs(uint32_t *configs, 3966ea2feb6efaf52467391fd7ae3a1e57380ca254Andy Qiu size_t *numConfigs); 4066ea2feb6efaf52467391fd7ae3a1e57380ca254Andy Qiu virtual bool getDisplayAttributes(uint32_t config, 4166ea2feb6efaf52467391fd7ae3a1e57380ca254Andy Qiu const uint32_t *attributes, 4266ea2feb6efaf52467391fd7ae3a1e57380ca254Andy Qiu int32_t *values); 43452fbc109a9c585737bcac18f19aff40574c3d79Jim Bish virtual int getActiveConfig(); 44452fbc109a9c585737bcac18f19aff40574c3d79Jim Bish virtual bool setActiveConfig(int index); 458a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu 4610056c1964f893323ab3309f3906e0db8b60d7e0Andy Qiuprivate: 4710056c1964f893323ab3309f3906e0db8b60d7e0Andy Qiu static void HdcpLinkStatusListener(bool success, void *userData); 4810056c1964f893323ab3309f3906e0db8b60d7e0Andy Qiu void HdcpLinkStatusListener(bool success); 493f1974031c88750a14adc8f2f49538837238abf9Lin Xie void setDrmMode(); 5010056c1964f893323ab3309f3906e0db8b60d7e0Andy Qiu 518a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiuprotected: 5210056c1964f893323ab3309f3906e0db8b60d7e0Andy Qiu virtual IHdcpControl* createHdcpControl() = 0; 5310056c1964f893323ab3309f3906e0db8b60d7e0Andy Qiu 548a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiuprotected: 5510056c1964f893323ab3309f3906e0db8b60d7e0Andy Qiu IHdcpControl *mHdcpControl; 56466748a6f67ce4d1ad8baa944e68a88cf3c86d26Austin Hu 57466748a6f67ce4d1ad8baa944e68a88cf3c86d26Austin Huprivate: 58466748a6f67ce4d1ad8baa944e68a88cf3c86d26Austin Hu static void hotplugEventListener(void *data); 59466748a6f67ce4d1ad8baa944e68a88cf3c86d26Austin Hu void hotplugListener(); 6010056c1964f893323ab3309f3906e0db8b60d7e0Andy Qiu 6110056c1964f893323ab3309f3906e0db8b60d7e0Andy Qiuprivate: 623f1974031c88750a14adc8f2f49538837238abf9Lin Xie Condition mAbortModeSettingCond; 633f1974031c88750a14adc8f2f49538837238abf9Lin Xie drmModeModeInfo mPendingDrmMode; 6410056c1964f893323ab3309f3906e0db8b60d7e0Andy Qiu bool mHotplugEventPending; 654d4cd66e1f283757110e953f452ef356e3718b82ljia int mExpectedRefreshRate; 66bac1829f65507275c265cc53e90f07be208a1345Andy Qiu int mDefaultWidth; 67bac1829f65507275c265cc53e90f07be208a1345Andy Qiu int mDefaultHeight; 683f1974031c88750a14adc8f2f49538837238abf9Lin Xie 693f1974031c88750a14adc8f2f49538837238abf9Lin Xieprivate: 703f1974031c88750a14adc8f2f49538837238abf9Lin Xie DECLARE_THREAD(ModeSettingThread, ExternalDevice); 718a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu}; 728a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu 738a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu} 748a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu} 758a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu 768a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu#endif /* EXTERNAL_DEVICE_H */ 77