Home | History | Annotate | Download | only in include
      1 /*
      2 // Copyright(c)2014 IntelCorporation
      3 //
      4 // LicensedundertheApacheLicense,Version2.0(the"License");
      5 // youmaynotusethisfileexceptincompliancewiththeLicense.
      6 // YoumayobtainacopyoftheLicenseat
      7 //
      8 // http://www.apache.org/licenses/LICENSE-2.0
      9 //
     10 // Unlessrequiredbyapplicablelaworagreedtoinwriting,software
     11 // distributedundertheLicenseisdistributedonan"ASIS"BASIS,
     12 // WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.
     13 // SeetheLicenseforthespecificlanguagegoverningpermissionsand
     14 // limitationsundertheLicense.
     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();
     87     IPlatFactory* getPlatFactory() {return mPlatFactory;}
     88 protected:
     89     Hwcomposer(IPlatFactory *factory);
     90 
     91 public:
     92     static Hwcomposer& getInstance() {
     93         Hwcomposer *instance = sInstance;
     94         if (instance == 0) {
     95             instance = createHwcomposer();
     96             sInstance = instance;
     97         }
     98         return *sInstance;
     99     }
    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