PhysicalDevice.h revision 6a6081a46a83da606cf21548879b37695adc7e1f
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 */ 286a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#ifndef DISPLAYDEVICE_H_ 296a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#define DISPLAYDEVICE_H_ 306a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 316a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#include <DisplayPlane.h> 326a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#include <VsyncControl.h> 336a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#include <BlankControl.h> 346a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#include <VsyncEventObserver.h> 356a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#include <HotplugEventObserver.h> 366a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#include <HwcLayerList.h> 376a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 386a6081a46a83da606cf21548879b37695adc7e1fAndy Qiunamespace android { 396a6081a46a83da606cf21548879b37695adc7e1fAndy Qiunamespace intel { 406a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 416a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu// display config 426a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuclass DisplayConfig { 436a6081a46a83da606cf21548879b37695adc7e1fAndy Qiupublic: 446a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu DisplayConfig(int rr, int w, int h, int dpix, int dpiy) 456a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu : mRefreshRate(rr), 466a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu mWidth(w), 476a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu mHeight(h), 486a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu mDpiX(dpix), 496a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu mDpiY(dpiy) 506a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu {} 516a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu ~DisplayConfig() {} 526a6081a46a83da606cf21548879b37695adc7e1fAndy Qiupublic: 536a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int getRefreshRate() const { return mRefreshRate; } 546a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int getWidth() const { return mWidth; } 556a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int getHeight() const { return mHeight; } 566a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int getDpiX() const { return mDpiX; } 576a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int getDpiY() const { return mDpiY; } 586a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuprivate: 596a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int mRefreshRate; 606a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int mWidth; 616a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int mHeight; 626a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int mDpiX; 636a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int mDpiY; 646a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu}; 656a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 666a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuclass Hwcomposer; 676a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 686a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu// generic display device 696a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuclass DisplayDevice { 706a6081a46a83da606cf21548879b37695adc7e1fAndy Qiupublic: 716a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // display device type 726a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu enum { 736a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu DEVICE_PRIMARY = HWC_DISPLAY_PRIMARY, 746a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu DEVICE_EXTERNAL = HWC_DISPLAY_EXTERNAL, 756a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu DEVICE_VIRTUAL = HWC_NUM_DISPLAY_TYPES, 766a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu DEVICE_COUNT, 776a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu }; 786a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu enum { 796a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu DEVICE_DISCONNECTED = 0, 806a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu DEVICE_CONNECTED, 816a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu }; 826a6081a46a83da606cf21548879b37695adc7e1fAndy Qiupublic: 836a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu DisplayDevice(uint32_t type, Hwcomposer& hwc, DisplayPlaneManager& dpm); 846a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual ~DisplayDevice(); 856a6081a46a83da606cf21548879b37695adc7e1fAndy Qiupublic: 866a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual void prePrepare(hwc_display_contents_1_t *display); 876a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool prepare(hwc_display_contents_1_t *display); 886a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool commit(hwc_display_contents_1_t *display, 896a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu void* context, 906a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int& count) = 0; 916a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 926a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool vsyncControl(int enabled); 936a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool blank(int blank); 946a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool getDisplayConfigs(uint32_t *configs, 956a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu size_t *numConfigs); 966a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool getDisplayAttributes(uint32_t config, 976a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu const uint32_t *attributes, 986a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int32_t *values); 996a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool compositionComplete(); 1006a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1016a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // display config operations 1026a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual void removeDisplayConfigs(); 1036a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool detectDisplayConfigs(); 1046a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1056a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // device related operations 1066a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool initCheck() const { return mInitialized; } 1076a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool initialize(); 1086a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual bool isConnected() const; 1096a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual const char* getName() const; 1106a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual int getType() const; 1116a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1126a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu //events 1136a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual void onHotplug(int connected); 1146a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual void onVsync(int64_t timestamp); 1156a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1166a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual void dump(Dump& d); 1176a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuprotected: 1186a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu void onGeometryChanged(hwc_display_contents_1_t *list); 1196a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu bool updateDisplayConfigs(struct Output *output); 1206a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuprotected: 1216a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual VsyncControl* createVsyncControl() = 0; 1226a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual BlankControl* createBlankControl() = 0; 1236a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual HotplugControl* createHotplugControl() = 0; 1246a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuprotected: 1256a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu uint32_t mType; 1266a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu const char *mName; 1276a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1286a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu Hwcomposer& mHwc; 1296a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu DisplayPlaneManager& mDisplayPlaneManager; 1306a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1316a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // display configs 1326a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu Vector<DisplayConfig*> mDisplayConfigs; 1336a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int mActiveDisplayConfig; 1346a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1356a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // vsync control 1366a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu VsyncControl *mVsyncControl; 1376a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // blank control 1386a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu BlankControl *mBlankControl; 1396a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // hotplug control 1406a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu HotplugControl *mHotplugControl; 1416a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1426a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // hotplug event observer 1436a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu sp<HotplugEventObserver> mHotplugObserver; 1446a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // vsync event observer 1456a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu sp<VsyncEventObserver> mVsyncObserver; 1466a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1476a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // layer list 1486a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu HwcLayerList *mLayerList; 1496a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu DisplayPlane *mPrimaryPlane; 1506a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu bool mConnection; 1516a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1526a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // lock 1536a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu Mutex mLock; 1546a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1556a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu bool mInitialized; 1566a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu}; 1576a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1586a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} 1596a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} 1606a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1616a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#endif /* DISPLAYDEVICE_H_ */ 162