PhysicalDevice.h revision 8a427146c6f68f9add960bbd18c4f84c9eeee4a5
16a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu/* 26a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * Copyright © 2012 Intel Corporation 36a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * All rights reserved. 46a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * 56a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * Permission is hereby granted, free of charge, to any person obtaining a 66a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * copy of this software and associated documentation files (the "Software"), 76a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * to deal in the Software without restriction, including without limitation 86a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * the rights to use, copy, modify, merge, publish, distribute, sublicense, 96a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * and/or sell copies of the Software, and to permit persons to whom the 106a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * Software is furnished to do so, subject to the following conditions: 116a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * 126a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * The above copyright notice and this permission notice (including the next 136a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * paragraph) shall be included in all copies or substantial portions of the 146a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * Software. 156a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * 166a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 176a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 186a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 196a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 206a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 216a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 226a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * IN THE SOFTWARE. 236a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * 246a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * Authors: 256a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * Jackie Li <yaodong.li@intel.com> 266a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu * 276a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu */ 288a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu#ifndef PHYSICAL_DEVICE_H 298a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu#define PHYSICAL_DEVICE_H 306a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 316a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#include <DisplayPlane.h> 32e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li#include <IVsyncControl.h> 33e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li#include <IBlankControl.h> 346a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#include <VsyncEventObserver.h> 356a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#include <HotplugEventObserver.h> 366a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#include <HwcLayerList.h> 378a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu#include <IDisplayDevice.h> 386a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 396a6081a46a83da606cf21548879b37695adc7e1fAndy Qiunamespace android { 406a6081a46a83da606cf21548879b37695adc7e1fAndy Qiunamespace intel { 416a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 426a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuclass Hwcomposer; 436a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 448a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu// Base class for primary and external devices 458a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiuclass PhysicalDevice : public IDisplayDevice { 466a6081a46a83da606cf21548879b37695adc7e1fAndy Qiupublic: 478a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu PhysicalDevice(uint32_t type, Hwcomposer& hwc, DisplayPlaneManager& dpm); 488a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu virtual ~PhysicalDevice(); 496a6081a46a83da606cf21548879b37695adc7e1fAndy Qiupublic: 508a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu virtual bool prePrepare(hwc_display_contents_1_t *display); 516a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool prepare(hwc_display_contents_1_t *display); 526a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool commit(hwc_display_contents_1_t *display, 536a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu void* context, 546a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int& count) = 0; 556a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 566a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool vsyncControl(int enabled); 576a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool blank(int blank); 586a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool getDisplayConfigs(uint32_t *configs, 596a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu size_t *numConfigs); 606a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool getDisplayAttributes(uint32_t config, 616a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu const uint32_t *attributes, 626a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int32_t *values); 636a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool compositionComplete(); 646a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 656a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // display config operations 666a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual void removeDisplayConfigs(); 676a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool detectDisplayConfigs(); 686a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 696a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // device related operations 706a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool initCheck() const { return mInitialized; } 716a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool initialize(); 726a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool isConnected() const; 736a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual const char* getName() const; 746a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual int getType() const; 756a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 766a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu //events 776a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual void onVsync(int64_t timestamp); 786a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 796a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual void dump(Dump& d); 806a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuprotected: 81e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li virtual void deinitialize(); 82e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Liprotected: 836a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu void onGeometryChanged(hwc_display_contents_1_t *list); 846a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu bool updateDisplayConfigs(struct Output *output); 856a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuprotected: 86e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li virtual IVsyncControl* createVsyncControl() = 0; 87e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li virtual IBlankControl* createBlankControl() = 0; 886a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuprotected: 896a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu uint32_t mType; 906a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu const char *mName; 916a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 926a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu Hwcomposer& mHwc; 936a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu DisplayPlaneManager& mDisplayPlaneManager; 946a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 956a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // display configs 966a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu Vector<DisplayConfig*> mDisplayConfigs; 976a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int mActiveDisplayConfig; 986a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 996a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // vsync control 100e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li IVsyncControl *mVsyncControl; 1016a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // blank control 102e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li IBlankControl *mBlankControl; 1036a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // vsync event observer 1046a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu sp<VsyncEventObserver> mVsyncObserver; 1056a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1066a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // layer list 1076a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu HwcLayerList *mLayerList; 1086a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu DisplayPlane *mPrimaryPlane; 1096a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu bool mConnection; 1106a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1116a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // lock 1126a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu Mutex mLock; 1136a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1146a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu bool mInitialized; 1156a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu}; 1166a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1176a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} 1186a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} 1196a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1208a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu#endif /* PHYSICAL_DEVICE_H */ 121