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 <Drm.h> 27 #include <DisplayPlaneManager.h> 28 #include <DisplayAnalyzer.h> 29 #include <VsyncManager.h> 30 #include <MultiDisplayObserver.h> 31 #include <UeventObserver.h> 32 #include <IPlatFactory.h> 33 34 35 namespace android { 36 namespace intel { 37 38 class Hwcomposer : public hwc_composer_device_1_t { 39 public: 40 virtual ~Hwcomposer(); 41 public: 42 // callbacks implementation 43 virtual bool prepare(size_t numDisplays, 44 hwc_display_contents_1_t** displays); 45 virtual bool commit(size_t numDisplays, 46 hwc_display_contents_1_t** displays); 47 virtual bool vsyncControl(int disp, int enabled); 48 virtual bool release(); 49 virtual bool dump(char *buff, int buff_len, int *cur_len); 50 virtual void registerProcs(hwc_procs_t const *procs); 51 52 virtual bool blank(int disp, int blank); 53 virtual bool getDisplayConfigs(int disp, 54 uint32_t *configs, 55 size_t *numConfigs); 56 virtual bool getDisplayAttributes(int disp, 57 uint32_t config, 58 const uint32_t *attributes, 59 int32_t *values); 60 virtual bool compositionComplete(int disp); 61 62 virtual bool setPowerMode(int disp, int mode); 63 virtual int getActiveConfig(int disp); 64 virtual bool setActiveConfig(int disp, int index); 65 virtual bool setCursorPositionAsync(int disp, int x, int y); 66 67 // callbacks 68 virtual void vsync(int disp, int64_t timestamp); 69 virtual void hotplug(int disp, bool connected); 70 virtual void invalidate(); 71 72 virtual bool initCheck() const; 73 virtual bool initialize(); 74 virtual void deinitialize(); 75 76 77 public: 78 Drm* getDrm(); 79 DisplayPlaneManager* getPlaneManager(); 80 BufferManager* getBufferManager(); 81 IDisplayContext* getDisplayContext(); 82 DisplayAnalyzer* getDisplayAnalyzer(); 83 VsyncManager* getVsyncManager(); 84 MultiDisplayObserver* getMultiDisplayObserver(); 85 IDisplayDevice* getDisplayDevice(int disp); 86 UeventObserver* getUeventObserver(); getPlatFactory()87 IPlatFactory* getPlatFactory() {return mPlatFactory;} 88 protected: 89 Hwcomposer(IPlatFactory *factory); 90 91 public: getInstance()92 static Hwcomposer& getInstance() { 93 Hwcomposer *instance = sInstance; 94 if (instance == 0) { 95 instance = createHwcomposer(); 96 sInstance = instance; 97 } 98 return *sInstance; 99 } releaseInstance()100 static void releaseInstance() { 101 delete sInstance; 102 sInstance = NULL; 103 } 104 // Need to be implemented 105 static Hwcomposer* createHwcomposer(); 106 107 108 private: 109 hwc_procs_t const *mProcs; 110 Drm *mDrm; 111 112 // plugin through set 113 IPlatFactory *mPlatFactory; 114 VsyncManager *mVsyncManager; 115 DisplayAnalyzer *mDisplayAnalyzer; 116 MultiDisplayObserver *mMultiDisplayObserver; 117 UeventObserver *mUeventObserver; 118 119 // created from IPlatFactory 120 DisplayPlaneManager *mPlaneManager; 121 BufferManager *mBufferManager; 122 IDisplayContext *mDisplayContext; 123 124 Vector<IDisplayDevice*> mDisplayDevices; 125 126 bool mInitialized; 127 128 129 130 static Hwcomposer *sInstance; 131 }; 132 133 } // namespace intel 134 } 135 136 #endif /*HW_COMPOSER_H*/ 137