blob: 5817ce47e17dd21a24f816928f023656ef960dcf [file] [log] [blame]
Andy Qiu6a6081a2013-03-22 16:25:43 -07001/*
2 * Copyright © 2012 Intel Corporation
3 * All rights reserved.
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the "Software"),
7 * to deal in the Software without restriction, including without limitation
8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 * and/or sell copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, subject to the following conditions:
11 *
12 * The above copyright notice and this permission notice (including the next
13 * paragraph) shall be included in all copies or substantial portions of the
14 * Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
22 * IN THE SOFTWARE.
23 *
24 * Authors:
25 * Jackie Li <yaodong.li@intel.com>
26 *
27 */
Andy Qiu8a427142013-04-05 17:41:58 -070028#ifndef PHYSICAL_DEVICE_H
29#define PHYSICAL_DEVICE_H
Andy Qiu6a6081a2013-03-22 16:25:43 -070030
31#include <DisplayPlane.h>
Jackie Lie6ecdad2013-03-25 09:03:16 -070032#include <IVsyncControl.h>
33#include <IBlankControl.h>
Andy Qiu25caf442013-04-23 16:19:38 -070034#include <IPrepareListener.h>
Andy Qiu6a6081a2013-03-22 16:25:43 -070035#include <VsyncEventObserver.h>
36#include <HotplugEventObserver.h>
37#include <HwcLayerList.h>
Andy Qiu30c19ac2013-06-04 15:45:09 -070038#include <Drm.h>
Andy Qiu8a427142013-04-05 17:41:58 -070039#include <IDisplayDevice.h>
Andy Qiu6a6081a2013-03-22 16:25:43 -070040
41namespace android {
42namespace intel {
43
Andy Qiu6a6081a2013-03-22 16:25:43 -070044class Hwcomposer;
45
Andy Qiu8a427142013-04-05 17:41:58 -070046// Base class for primary and external devices
47class PhysicalDevice : public IDisplayDevice {
Andy Qiu6a6081a2013-03-22 16:25:43 -070048public:
Andy Qiu8a427142013-04-05 17:41:58 -070049 PhysicalDevice(uint32_t type, Hwcomposer& hwc, DisplayPlaneManager& dpm);
50 virtual ~PhysicalDevice();
Andy Qiu6a6081a2013-03-22 16:25:43 -070051public:
Andy Qiu8a427142013-04-05 17:41:58 -070052 virtual bool prePrepare(hwc_display_contents_1_t *display);
Andy Qiu6a6081a2013-03-22 16:25:43 -070053 virtual bool prepare(hwc_display_contents_1_t *display);
Andy Qiu4b834ce2013-04-09 18:23:20 -070054 virtual bool commit(hwc_display_contents_1_t *display, IDisplayContext *context);
Andy Qiu6a6081a2013-03-22 16:25:43 -070055
Andy Qiueb726af2013-05-31 11:51:49 +080056 virtual bool vsyncControl(bool enabled);
57 virtual bool blank(bool blank);
Andy Qiu6a6081a2013-03-22 16:25:43 -070058 virtual bool getDisplayConfigs(uint32_t *configs,
59 size_t *numConfigs);
60 virtual bool getDisplayAttributes(uint32_t config,
61 const uint32_t *attributes,
62 int32_t *values);
63 virtual bool compositionComplete();
64
65 // display config operations
66 virtual void removeDisplayConfigs();
67 virtual bool detectDisplayConfigs();
68
69 // device related operations
70 virtual bool initCheck() const { return mInitialized; }
71 virtual bool initialize();
fu jine2ad4c02013-05-28 13:47:51 -070072 virtual void deinitialize();
Andy Qiu6a6081a2013-03-22 16:25:43 -070073 virtual bool isConnected() const;
74 virtual const char* getName() const;
75 virtual int getType() const;
76
77 //events
Andy Qiu6a6081a2013-03-22 16:25:43 -070078 virtual void onVsync(int64_t timestamp);
79
80 virtual void dump(Dump& d);
Andy Qiu65efc252013-04-25 17:59:54 -070081
Andy Qiu6a6081a2013-03-22 16:25:43 -070082protected:
83 void onGeometryChanged(hwc_display_contents_1_t *list);
Jackie Licf696452013-04-10 16:30:59 +080084
Jackie Lie6ecdad2013-03-25 09:03:16 -070085 virtual IVsyncControl* createVsyncControl() = 0;
86 virtual IBlankControl* createBlankControl() = 0;
Andy Qiu25caf442013-04-23 16:19:38 -070087 virtual IPrepareListener* createPrepareListener() = 0;
Andy Qiueb726af2013-05-31 11:51:49 +080088 friend class VsyncEventObserver;
89
Andy Qiu6a6081a2013-03-22 16:25:43 -070090protected:
91 uint32_t mType;
92 const char *mName;
93
94 Hwcomposer& mHwc;
95 DisplayPlaneManager& mDisplayPlaneManager;
96
97 // display configs
98 Vector<DisplayConfig*> mDisplayConfigs;
99 int mActiveDisplayConfig;
100
Andy Qiu25caf442013-04-23 16:19:38 -0700101
Andy Qiueb726af2013-05-31 11:51:49 +0800102 IBlankControl *mBlankControl;
Andy Qiu25caf442013-04-23 16:19:38 -0700103 IPrepareListener *mPrepareListener;
Andy Qiueb726af2013-05-31 11:51:49 +0800104 VsyncEventObserver *mVsyncObserver;
Andy Qiu6a6081a2013-03-22 16:25:43 -0700105
106 // layer list
107 HwcLayerList *mLayerList;
Andy Qiu30c19ac2013-06-04 15:45:09 -0700108 bool mConnected;
Andy Qiu6a6081a2013-03-22 16:25:43 -0700109
110 // lock
111 Mutex mLock;
112
Andy Qiu65efc252013-04-25 17:59:54 -0700113 // DPMS on (1) or off (0)
114 int mDisplayState;
Andy Qiu6a6081a2013-03-22 16:25:43 -0700115 bool mInitialized;
116};
117
118}
119}
120
Andy Qiu8a427142013-04-05 17:41:58 -0700121#endif /* PHYSICAL_DEVICE_H */