| /* |
| // Copyright (c) 2014 Intel Corporation |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| */ |
| #ifndef PHYSICAL_DEVICE_H |
| #define PHYSICAL_DEVICE_H |
| |
| #include <DisplayPlane.h> |
| #include <IVsyncControl.h> |
| #include <IBlankControl.h> |
| #include <IPrepareListener.h> |
| #include <VsyncEventObserver.h> |
| #include <HwcLayerList.h> |
| #include <Drm.h> |
| #include <IDisplayDevice.h> |
| |
| namespace android { |
| namespace intel { |
| |
| class IHdcpControl; |
| |
| class DeviceControlFactory { |
| public: |
| virtual ~DeviceControlFactory(){} |
| public: |
| virtual IVsyncControl* createVsyncControl() = 0; |
| virtual IBlankControl* createBlankControl() = 0; |
| virtual IHdcpControl* createHdcpControl() = 0; |
| }; |
| |
| class Hwcomposer; |
| |
| // Base class for primary and external devices |
| class PhysicalDevice : public IDisplayDevice { |
| public: |
| PhysicalDevice(uint32_t type, Hwcomposer& hwc, DeviceControlFactory* controlFactory); |
| virtual ~PhysicalDevice(); |
| public: |
| virtual bool prePrepare(hwc_display_contents_1_t *display); |
| virtual bool prepare(hwc_display_contents_1_t *display); |
| virtual bool commit(hwc_display_contents_1_t *display, IDisplayContext *context); |
| |
| virtual bool vsyncControl(bool enabled); |
| virtual bool blank(bool blank); |
| virtual bool getDisplaySize(int *width, int *height); |
| virtual bool getDisplayConfigs(uint32_t *configs, |
| size_t *numConfigs); |
| virtual bool getDisplayAttributes(uint32_t config, |
| const uint32_t *attributes, |
| int32_t *values); |
| virtual bool compositionComplete(); |
| |
| virtual bool setPowerMode(int mode); |
| virtual int getActiveConfig(); |
| virtual bool setActiveConfig(int index); |
| |
| // display config operations |
| virtual void removeDisplayConfigs(); |
| virtual bool detectDisplayConfigs(); |
| |
| // device related operations |
| virtual bool initCheck() const { return mInitialized; } |
| virtual bool initialize(); |
| virtual void deinitialize(); |
| virtual bool isConnected() const; |
| virtual const char* getName() const; |
| virtual int getType() const; |
| virtual uint32_t getFpsDivider(); |
| |
| //events |
| virtual void onVsync(int64_t timestamp); |
| |
| virtual void dump(Dump& d); |
| |
| protected: |
| void onGeometryChanged(hwc_display_contents_1_t *list); |
| bool updateDisplayConfigs(); |
| IVsyncControl* createVsyncControl() {return mControlFactory->createVsyncControl();} |
| friend class VsyncEventObserver; |
| |
| protected: |
| uint32_t mType; |
| const char *mName; |
| |
| Hwcomposer& mHwc; |
| |
| // display configs |
| Vector<DisplayConfig*> mDisplayConfigs; |
| int mActiveDisplayConfig; |
| |
| |
| IBlankControl *mBlankControl; |
| VsyncEventObserver *mVsyncObserver; |
| |
| DeviceControlFactory *mControlFactory; |
| |
| // layer list |
| HwcLayerList *mLayerList; |
| bool mConnected; |
| bool mBlank; |
| |
| // lock |
| Mutex mLock; |
| |
| // DPMS on (1) or off (0) |
| int mDisplayState; |
| bool mInitialized; |
| uint32_t mFpsDivider; |
| }; |
| |
| |
| |
| } |
| } |
| |
| #endif /* PHYSICAL_DEVICE_H */ |