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 <common/base/Drm.h>
     27 #include <DisplayPlaneManager.h>
     28 #include <common/base/DisplayAnalyzer.h>
     29 #include <UeventObserver.h>
     30 
     31 namespace android {
     32 namespace intel {
     33 
     34 class Hwcomposer : public hwc_composer_device_1_t {
     35 public:
     36     virtual ~Hwcomposer();
     37 public:
     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 
     72 public:
     73     Drm* getDrm();
     74     DisplayPlaneManager* getPlaneManager();
     75     BufferManager* getBufferManager();
     76     IDisplayContext* getDisplayContext();
     77     DisplayAnalyzer* getDisplayAnalyzer();
     78     IDisplayDevice* getDisplayDevice(int disp);
     79     UeventObserver* getUeventObserver();
     80 
     81 protected:
     82     Hwcomposer();
     83 
     84 public:
     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();
     99 protected:
    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 
    106 protected:
    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;
    116 private:
    117     static Hwcomposer *sInstance;
    118 };
    119 
    120 } // namespace intel
    121 }
    122 
    123 #endif /*HW_COMPOSER_H*/
    124