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 PHYSICAL_DEVICE_H
17 #define PHYSICAL_DEVICE_H
18 
19 #include <DisplayPlane.h>
20 #include <IVsyncControl.h>
21 #include <IBlankControl.h>
22 #include <common/observers/VsyncEventObserver.h>
23 #include <common/base/HwcLayerList.h>
24 #include <common/base/Drm.h>
25 #include <IDisplayDevice.h>
26 
27 namespace android {
28 namespace intel {
29 
30 class Hwcomposer;
31 
32 // Base class for primary and external devices
33 class PhysicalDevice : public IDisplayDevice {
34 public:
35     PhysicalDevice(uint32_t type, Hwcomposer& hwc, DisplayPlaneManager& dpm);
36     virtual ~PhysicalDevice();
37 public:
38     virtual bool prePrepare(hwc_display_contents_1_t *display);
39     virtual bool prepare(hwc_display_contents_1_t *display);
40     virtual bool commit(hwc_display_contents_1_t *display, IDisplayContext *context);
41 
42     virtual bool vsyncControl(bool enabled);
43     virtual bool blank(bool blank);
44     virtual bool getDisplaySize(int *width, int *height);
45     virtual bool getDisplayConfigs(uint32_t *configs,
46                                        size_t *numConfigs);
47     virtual bool getDisplayAttributes(uint32_t config,
48                                           const uint32_t *attributes,
49                                           int32_t *values);
50     virtual bool compositionComplete();
51 
52     virtual bool setPowerMode(int mode);
53     virtual int  getActiveConfig();
54     virtual bool setActiveConfig(int index);
55 
56     // display config operations
57     virtual void removeDisplayConfigs();
58     virtual bool detectDisplayConfigs();
59 
60     // device related operations
initCheck()61     virtual bool initCheck() const { return mInitialized; }
62     virtual bool initialize();
63     virtual void deinitialize();
64     virtual bool isConnected() const;
65     virtual const char* getName() const;
66     virtual int getType() const;
67 
68     //events
69     virtual void onVsync(int64_t timestamp);
70 
71     virtual void dump(Dump& d);
72 
73 protected:
74     void onGeometryChanged(hwc_display_contents_1_t *list);
75     bool updateDisplayConfigs();
76     virtual IVsyncControl* createVsyncControl() = 0;
77     virtual IBlankControl* createBlankControl() = 0;
78     friend class VsyncEventObserver;
79 
80 protected:
81     uint32_t mType;
82     const char *mName;
83 
84     Hwcomposer& mHwc;
85     DisplayPlaneManager& mDisplayPlaneManager;
86 
87     // display configs
88     Vector<DisplayConfig*> mDisplayConfigs;
89     int mActiveDisplayConfig;
90 
91 
92     IBlankControl *mBlankControl;
93     VsyncEventObserver *mVsyncObserver;
94 
95     // layer list
96     HwcLayerList *mLayerList;
97     bool mConnected;
98     bool mBlank;
99 
100     // lock
101     Mutex mLock;
102 
103     // DPMS on (1) or off (0)
104     int mDisplayState;
105     bool mInitialized;
106 };
107 
108 }
109 }
110 
111 #endif /* PHYSICAL_DEVICE_H */
112