blob: 993f466d1cc38cee454cdd186f2659a1a6064987 [file] [log] [blame]
Steve Kondik961b4cc2017-06-22 18:10:50 -07001#ifndef ANDROID_DESKTOP_H_
2#define ANDROID_DESKTOP_H_
3
4#include <memory>
5
6#include <utils/Condition.h>
7#include <utils/Mutex.h>
8#include <utils/RefBase.h>
9#include <utils/Thread.h>
10
11#include <gui/CpuConsumer.h>
12
Steve Kondik6f9ab852017-07-09 21:30:20 -070013#include <ui/DisplayInfo.h>
maxwenad0a9222020-09-20 14:40:41 +020014#include <ui/DisplayConfig.h>
15#include <ui/DisplayState.h>
Steve Kondik6f9ab852017-07-09 21:30:20 -070016
Steve Kondik961b4cc2017-06-22 18:10:50 -070017#include <rfb/PixelBuffer.h>
18#include <rfb/SDesktop.h>
Steve Kondik71850752019-09-12 12:45:23 -070019#include <rfb/ScreenSet.h>
Steve Kondik961b4cc2017-06-22 18:10:50 -070020
Steve Kondik6f9ab852017-07-09 21:30:20 -070021#include "AndroidPixelBuffer.h"
Steve Kondik961b4cc2017-06-22 18:10:50 -070022#include "InputDevice.h"
Steve Kondik6f9ab852017-07-09 21:30:20 -070023#include "VirtualDisplay.h"
Steve Kondik961b4cc2017-06-22 18:10:50 -070024
25using namespace android;
26
27namespace vncflinger {
28
Steve Kondik6f9ab852017-07-09 21:30:20 -070029class AndroidDesktop : public rfb::SDesktop,
30 public CpuConsumer::FrameAvailableListener,
31 public AndroidPixelBuffer::BufferDimensionsListener {
Steve Kondik961b4cc2017-06-22 18:10:50 -070032 public:
33 AndroidDesktop();
34
35 virtual ~AndroidDesktop();
36
37 virtual void start(rfb::VNCServer* vs);
38 virtual void stop();
Steve Kondikf19d1422019-09-06 13:52:12 -070039 virtual void terminate();
Steve Kondik961b4cc2017-06-22 18:10:50 -070040
Steve Kondik961b4cc2017-06-22 18:10:50 -070041 virtual unsigned int setScreenLayout(int fb_width, int fb_height, const rfb::ScreenSet& layout);
42
Steve Kondikf19d1422019-09-06 13:52:12 -070043 virtual void keyEvent(rdr::U32 keysym, rdr::U32 keycode, bool down);
Steve Kondik961b4cc2017-06-22 18:10:50 -070044 virtual void pointerEvent(const rfb::Point& pos, int buttonMask);
45
46 virtual void processFrames();
47
48 virtual int getEventFd() {
49 return mEventFd;
50 }
51
Steve Kondik6f9ab852017-07-09 21:30:20 -070052 virtual void onBufferDimensionsChanged(uint32_t width, uint32_t height);
53
54 virtual void onFrameAvailable(const BufferItem& item);
55
Steve Kondikf19d1422019-09-06 13:52:12 -070056 virtual void queryConnection(network::Socket* sock, const char* userName);
57
Steve Kondik961b4cc2017-06-22 18:10:50 -070058 private:
Steve Kondik961b4cc2017-06-22 18:10:50 -070059 virtual void notify();
60
Steve Kondik6f9ab852017-07-09 21:30:20 -070061 virtual status_t updateDisplayInfo();
Steve Kondik961b4cc2017-06-22 18:10:50 -070062
Steve Kondik71850752019-09-12 12:45:23 -070063 virtual rfb::ScreenSet computeScreenLayout();
64
Steve Kondik961b4cc2017-06-22 18:10:50 -070065 Rect mDisplayRect;
66
Steve Kondik6f9ab852017-07-09 21:30:20 -070067 Mutex mLock;
Steve Kondik961b4cc2017-06-22 18:10:50 -070068
69 uint64_t mFrameNumber;
Steve Kondik961b4cc2017-06-22 18:10:50 -070070
71 int mEventFd;
72
Steve Kondik961b4cc2017-06-22 18:10:50 -070073 // Server instance
Steve Kondik71850752019-09-12 12:45:23 -070074 rfb::VNCServer* mServer;
Steve Kondik961b4cc2017-06-22 18:10:50 -070075
76 // Pixel buffer
77 sp<AndroidPixelBuffer> mPixels;
78
Steve Kondik6f9ab852017-07-09 21:30:20 -070079 // Virtual display controller
80 sp<VirtualDisplay> mVirtualDisplay;
81
Steve Kondik961b4cc2017-06-22 18:10:50 -070082 // Primary display
Steve Kondik6f9ab852017-07-09 21:30:20 -070083 DisplayInfo mDisplayInfo;
maxwenad0a9222020-09-20 14:40:41 +020084 DisplayConfig mDisplayConfig = {};
85 ui::DisplayState mDisplayState = {};
Steve Kondik961b4cc2017-06-22 18:10:50 -070086
87 // Virtual input device
88 sp<InputDevice> mInputDevice;
89};
90};
91
92#endif