127 lines
3.5 KiB
C++
127 lines
3.5 KiB
C++
/*
|
||
// 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 */
|