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