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
27namespace android {
28namespace intel {
29
30class Hwcomposer;
31
32// Base class for primary and external devices
33class PhysicalDevice : public IDisplayDevice {
34public:
35    PhysicalDevice(uint32_t disp, uint32_t type, Hwcomposer& hwc, DisplayPlaneManager& dpm);
36    virtual ~PhysicalDevice();
37public:
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
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
73protected:
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
80protected:
81    uint32_t mDisp;
82    uint32_t mType;
83    const char *mName;
84
85    Hwcomposer& mHwc;
86    DisplayPlaneManager& mDisplayPlaneManager;
87
88    // display configs
89    Vector<DisplayConfig*> mDisplayConfigs;
90    int mActiveDisplayConfig;
91
92
93    IBlankControl *mBlankControl;
94    VsyncEventObserver *mVsyncObserver;
95
96    // layer list
97    HwcLayerList *mLayerList;
98    bool mConnected;
99    bool mBlank;
100
101    // lock
102    Mutex mLock;
103
104    // DPMS on (1) or off (0)
105    int mDisplayState;
106    bool mInitialized;
107};
108
109}
110}
111
112#endif /* PHYSICAL_DEVICE_H */
113