1/* 2// Copyright (c) 2014 Intel Corporation 3// 4// Licensed under the Apache License, Version 2.0 (the "License"); 5// you may not use this file except in compliance with the License. 6// You may obtain a copy of the License at 7// 8// http://www.apache.org/licenses/LICENSE-2.0 9// 10// Unless required by applicable law or agreed to in writing, software 11// distributed under the License is distributed on an "AS IS" BASIS, 12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13// See the License for the specific language governing permissions and 14// limitations under the License. 15*/ 16#ifndef HWCOMPOSER_H 17#define HWCOMPOSER_H 18 19#include <EGL/egl.h> 20#include <hardware/hwcomposer.h> 21#include <utils/Vector.h> 22 23#include <IDisplayDevice.h> 24#include <BufferManager.h> 25#include <IDisplayContext.h> 26#include <common/base/Drm.h> 27#include <DisplayPlaneManager.h> 28#include <common/base/DisplayAnalyzer.h> 29#include <UeventObserver.h> 30 31namespace android { 32namespace intel { 33 34class Hwcomposer : public hwc_composer_device_1_t { 35public: 36 virtual ~Hwcomposer(); 37public: 38 // callbacks implementation 39 virtual bool prepare(size_t numDisplays, 40 hwc_display_contents_1_t** displays); 41 virtual bool commit(size_t numDisplays, 42 hwc_display_contents_1_t** displays); 43 virtual bool vsyncControl(int disp, int enabled); 44 virtual bool release(); 45 virtual bool dump(char *buff, int buff_len, int *cur_len); 46 virtual void registerProcs(hwc_procs_t const *procs); 47 48 virtual bool blank(int disp, int blank); 49 virtual bool getDisplayConfigs(int disp, 50 uint32_t *configs, 51 size_t *numConfigs); 52 virtual bool getDisplayAttributes(int disp, 53 uint32_t config, 54 const uint32_t *attributes, 55 int32_t *values); 56 virtual bool compositionComplete(int disp); 57 58 virtual bool setPowerMode(int disp, int mode); 59 virtual int getActiveConfig(int disp); 60 virtual bool setActiveConfig(int disp, int index); 61 virtual bool setCursorPositionAsync(int disp, int x, int y); 62 63 // callbacks 64 virtual void vsync(int disp, int64_t timestamp); 65 virtual void hotplug(int disp, bool connected); 66 virtual void invalidate(); 67 68 virtual bool initCheck() const; 69 virtual bool initialize(); 70 virtual void deinitialize(); 71 72public: 73 Drm* getDrm(); 74 DisplayPlaneManager* getPlaneManager(); 75 BufferManager* getBufferManager(); 76 IDisplayContext* getDisplayContext(); 77 DisplayAnalyzer* getDisplayAnalyzer(); 78 IDisplayDevice* getDisplayDevice(int disp); 79 UeventObserver* getUeventObserver(); 80 81protected: 82 Hwcomposer(); 83 84public: 85 static Hwcomposer& getInstance() { 86 Hwcomposer *instance = sInstance; 87 if (instance == 0) { 88 instance = createHwcomposer(); 89 sInstance = instance; 90 } 91 return *sInstance; 92 } 93 static void releaseInstance() { 94 delete sInstance; 95 sInstance = NULL; 96 } 97 // Need to be implemented 98 static Hwcomposer* createHwcomposer(); 99protected: 100 virtual DisplayPlaneManager* createDisplayPlaneManager() = 0; 101 virtual BufferManager* createBufferManager() = 0; 102 virtual IDisplayDevice* createDisplayDevice(int disp, 103 DisplayPlaneManager& dpm) = 0; 104 virtual IDisplayContext* createDisplayContext() = 0; 105 106protected: 107 hwc_procs_t const *mProcs; 108 Drm *mDrm; 109 DisplayPlaneManager *mPlaneManager; 110 BufferManager *mBufferManager; 111 DisplayAnalyzer *mDisplayAnalyzer; 112 Vector<IDisplayDevice*> mDisplayDevices; 113 IDisplayContext *mDisplayContext; 114 UeventObserver *mUeventObserver; 115 bool mInitialized; 116private: 117 static Hwcomposer *sInstance; 118}; 119 120} // namespace intel 121} 122 123#endif /*HW_COMPOSER_H*/ 124