16a6081a46a83da606cf21548879b37695adc7e1fAndy 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 PHYSICAL_DEVICE_H 178a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu#define PHYSICAL_DEVICE_H 186a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 196a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#include <DisplayPlane.h> 20e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li#include <IVsyncControl.h> 21e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li#include <IBlankControl.h> 220594c42af26255fd8d3d7d39c0cb0e2da5b8841bThierry Strudel#include <common/observers/VsyncEventObserver.h> 230594c42af26255fd8d3d7d39c0cb0e2da5b8841bThierry Strudel#include <common/base/HwcLayerList.h> 240594c42af26255fd8d3d7d39c0cb0e2da5b8841bThierry Strudel#include <common/base/Drm.h> 258a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu#include <IDisplayDevice.h> 266a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 276a6081a46a83da606cf21548879b37695adc7e1fAndy Qiunamespace android { 286a6081a46a83da606cf21548879b37695adc7e1fAndy Qiunamespace intel { 296a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 306a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuclass Hwcomposer; 316a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 328a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu// Base class for primary and external devices 338a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiuclass PhysicalDevice : public IDisplayDevice { 346a6081a46a83da606cf21548879b37695adc7e1fAndy Qiupublic: 358a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu PhysicalDevice(uint32_t type, Hwcomposer& hwc, DisplayPlaneManager& dpm); 368a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu virtual ~PhysicalDevice(); 376a6081a46a83da606cf21548879b37695adc7e1fAndy Qiupublic: 388a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu virtual bool prePrepare(hwc_display_contents_1_t *display); 396a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool prepare(hwc_display_contents_1_t *display); 404b834ced8031d624fc8bd042275cb0612c7b9f63Andy Qiu virtual bool commit(hwc_display_contents_1_t *display, IDisplayContext *context); 416a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 42eb726af21649d79ed720bdf329e0849270995c45Andy Qiu virtual bool vsyncControl(bool enabled); 43eb726af21649d79ed720bdf329e0849270995c45Andy Qiu virtual bool blank(bool blank); 440131f123eba74813aca3eaaf99cd418b6b558416Andy Qiu virtual bool getDisplaySize(int *width, int *height); 456a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool getDisplayConfigs(uint32_t *configs, 466a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu size_t *numConfigs); 476a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool getDisplayAttributes(uint32_t config, 486a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu const uint32_t *attributes, 496a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int32_t *values); 506a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool compositionComplete(); 516a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 52452fbc109a9c585737bcac18f19aff40574c3d79Jim Bish virtual bool setPowerMode(int mode); 53452fbc109a9c585737bcac18f19aff40574c3d79Jim Bish virtual int getActiveConfig(); 54452fbc109a9c585737bcac18f19aff40574c3d79Jim Bish virtual bool setActiveConfig(int index); 55452fbc109a9c585737bcac18f19aff40574c3d79Jim Bish 566a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // display config operations 576a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual void removeDisplayConfigs(); 586a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool detectDisplayConfigs(); 596a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 606a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // device related operations 616a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool initCheck() const { return mInitialized; } 626a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool initialize(); 63e2ad4c047651d4442f6a0e002290016d45e9201afu jin virtual void deinitialize(); 646a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool isConnected() const; 656a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual const char* getName() const; 666a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual int getType() const; 676a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 686a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu //events 696a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual void onVsync(int64_t timestamp); 706a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 716a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual void dump(Dump& d); 7265efc253a628175c7afa95c431b746ea20052794Andy Qiu 736a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuprotected: 746a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu void onGeometryChanged(hwc_display_contents_1_t *list); 753f1974031c88750a14adc8f2f49538837238abf9Lin Xie bool updateDisplayConfigs(); 76e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li virtual IVsyncControl* createVsyncControl() = 0; 77e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li virtual IBlankControl* createBlankControl() = 0; 78eb726af21649d79ed720bdf329e0849270995c45Andy Qiu friend class VsyncEventObserver; 79eb726af21649d79ed720bdf329e0849270995c45Andy Qiu 806a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuprotected: 816a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu uint32_t mType; 826a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu const char *mName; 836a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 846a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu Hwcomposer& mHwc; 856a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu DisplayPlaneManager& mDisplayPlaneManager; 866a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 876a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // display configs 886a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu Vector<DisplayConfig*> mDisplayConfigs; 896a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int mActiveDisplayConfig; 906a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 9125caf44022e04f4dc131e51b85b2fb8f966d57e7Andy Qiu 92eb726af21649d79ed720bdf329e0849270995c45Andy Qiu IBlankControl *mBlankControl; 93eb726af21649d79ed720bdf329e0849270995c45Andy Qiu VsyncEventObserver *mVsyncObserver; 946a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 956a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // layer list 966a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu HwcLayerList *mLayerList; 9730c19aca49c615368ae3bce961c431fa901e90b9Andy Qiu bool mConnected; 982413102f33fdefa6bdb80ed2c4f56fae83cd5bd8fu jin bool mBlank; 996a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1006a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // lock 1016a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu Mutex mLock; 1026a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 10365efc253a628175c7afa95c431b746ea20052794Andy Qiu // DPMS on (1) or off (0) 10465efc253a628175c7afa95c431b746ea20052794Andy Qiu int mDisplayState; 1056a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu bool mInitialized; 1066a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu}; 1076a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1086a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} 1096a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} 1106a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1118a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu#endif /* PHYSICAL_DEVICE_H */ 112