16a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu/*
2cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// Copyright (c) 2014 Intel Corporation 
3cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika//
4cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// Licensed under the Apache License, Version 2.0 (the "License");
5cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// you may not use this file except in compliance with the License.
6cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// You may obtain a copy of the License at
7cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika//
8cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika//      http://www.apache.org/licenses/LICENSE-2.0
9cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika//
10cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// Unless required by applicable law or agreed to in writing, software
11cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// distributed under the License is distributed on an "AS IS" BASIS,
12cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// See the License for the specific language governing permissions and
14cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// limitations under the License.
15cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika*/
168a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu#ifndef PHYSICAL_DEVICE_H
178a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu#define PHYSICAL_DEVICE_H
186a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
196a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#include <DisplayPlane.h>
20e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li#include <IVsyncControl.h>
21e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li#include <IBlankControl.h>
220594c42af26255fd8d3d7d39c0cb0e2da5b8841bThierry Strudel#include <common/observers/VsyncEventObserver.h>
230594c42af26255fd8d3d7d39c0cb0e2da5b8841bThierry Strudel#include <common/base/HwcLayerList.h>
240594c42af26255fd8d3d7d39c0cb0e2da5b8841bThierry Strudel#include <common/base/Drm.h>
258a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu#include <IDisplayDevice.h>
266a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
276a6081a46a83da606cf21548879b37695adc7e1fAndy Qiunamespace android {
286a6081a46a83da606cf21548879b37695adc7e1fAndy Qiunamespace intel {
296a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
306a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuclass Hwcomposer;
316a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
328a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu// Base class for primary and external devices
338a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiuclass PhysicalDevice : public IDisplayDevice {
346a6081a46a83da606cf21548879b37695adc7e1fAndy Qiupublic:
358a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu    PhysicalDevice(uint32_t type, Hwcomposer& hwc, DisplayPlaneManager& dpm);
368a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu    virtual ~PhysicalDevice();
376a6081a46a83da606cf21548879b37695adc7e1fAndy Qiupublic:
388a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu    virtual bool prePrepare(hwc_display_contents_1_t *display);
396a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual bool prepare(hwc_display_contents_1_t *display);
404b834ced8031d624fc8bd042275cb0612c7b9f63Andy Qiu    virtual bool commit(hwc_display_contents_1_t *display, IDisplayContext *context);
416a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
42eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    virtual bool vsyncControl(bool enabled);
43eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    virtual bool blank(bool blank);
440131f123eba74813aca3eaaf99cd418b6b558416Andy Qiu    virtual bool getDisplaySize(int *width, int *height);
456a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual bool getDisplayConfigs(uint32_t *configs,
466a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu                                       size_t *numConfigs);
476a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual bool getDisplayAttributes(uint32_t config,
486a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu                                          const uint32_t *attributes,
496a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu                                          int32_t *values);
506a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual bool compositionComplete();
516a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
52452fbc109a9c585737bcac18f19aff40574c3d79Jim Bish    virtual bool setPowerMode(int mode);
53452fbc109a9c585737bcac18f19aff40574c3d79Jim Bish    virtual int  getActiveConfig();
54452fbc109a9c585737bcac18f19aff40574c3d79Jim Bish    virtual bool setActiveConfig(int index);
55452fbc109a9c585737bcac18f19aff40574c3d79Jim Bish
566a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    // display config operations
576a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual void removeDisplayConfigs();
586a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual bool detectDisplayConfigs();
596a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
606a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    // device related operations
616a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual bool initCheck() const { return mInitialized; }
626a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual bool initialize();
63e2ad4c047651d4442f6a0e002290016d45e9201afu jin    virtual void deinitialize();
646a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual bool isConnected() const;
656a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual const char* getName() const;
666a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual int getType() const;
676a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
686a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    //events
696a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual void onVsync(int64_t timestamp);
706a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
716a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    virtual void dump(Dump& d);
7265efc253a628175c7afa95c431b746ea20052794Andy Qiu
736a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuprotected:
746a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    void onGeometryChanged(hwc_display_contents_1_t *list);
753f1974031c88750a14adc8f2f49538837238abf9Lin Xie    bool updateDisplayConfigs();
76e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li    virtual IVsyncControl* createVsyncControl() = 0;
77e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li    virtual IBlankControl* createBlankControl() = 0;
78eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    friend class VsyncEventObserver;
79eb726af21649d79ed720bdf329e0849270995c45Andy Qiu
806a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuprotected:
816a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    uint32_t mType;
826a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    const char *mName;
836a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
846a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    Hwcomposer& mHwc;
856a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    DisplayPlaneManager& mDisplayPlaneManager;
866a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
876a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    // display configs
886a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    Vector<DisplayConfig*> mDisplayConfigs;
896a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    int mActiveDisplayConfig;
906a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
9125caf44022e04f4dc131e51b85b2fb8f966d57e7Andy Qiu
92eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    IBlankControl *mBlankControl;
93eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    VsyncEventObserver *mVsyncObserver;
946a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
956a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    // layer list
966a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    HwcLayerList *mLayerList;
9730c19aca49c615368ae3bce961c431fa901e90b9Andy Qiu    bool mConnected;
982413102f33fdefa6bdb80ed2c4f56fae83cd5bd8fu jin    bool mBlank;
996a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
1006a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    // lock
1016a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    Mutex mLock;
1026a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
10365efc253a628175c7afa95c431b746ea20052794Andy Qiu    // DPMS on (1) or off (0)
10465efc253a628175c7afa95c431b746ea20052794Andy Qiu    int mDisplayState;
1056a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    bool mInitialized;
1066a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu};
1076a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
1086a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu}
1096a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu}
1106a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
1118a427146c6f68f9add960bbd18c4f84c9eeee4a5Andy Qiu#endif /* PHYSICAL_DEVICE_H */
112