diff options
author | Chander Sudanthi <chander.sudanthi@arm.com> | 2012-11-02 11:32:00 -0500 |
---|---|---|
committer | Chander Sudanthi <chander.sudanthi@arm.com> | 2012-11-02 11:32:00 -0500 |
commit | 55787cc0d0ecdbd060f7ee1caaaab90d2482eb67 (patch) | |
tree | fff89ebf048d5afecada34a95d7529ac48361e0b /src/base/vnc/vncserver.hh | |
parent | ac161c1d7294fc755b6c06e23f719f577d926695 (diff) | |
download | gem5-55787cc0d0ecdbd060f7ee1caaaab90d2482eb67.tar.xz |
base: split out the VncServer into a VncInput and Server classes
This patch adds a VncInput base class which VncServer inherits from.
Another class can implement the same interface and be used instead
of the VncServer, for example a class that replays Vnc traffic.
--HG--
rename : src/base/vnc/VncServer.py => src/base/vnc/Vnc.py
rename : src/base/vnc/vncserver.cc => src/base/vnc/vncinput.cc
rename : src/base/vnc/vncserver.hh => src/base/vnc/vncinput.hh
Diffstat (limited to 'src/base/vnc/vncserver.hh')
-rw-r--r-- | src/base/vnc/vncserver.hh | 186 |
1 files changed, 9 insertions, 177 deletions
diff --git a/src/base/vnc/vncserver.hh b/src/base/vnc/vncserver.hh index 33d833f26..17c097536 100644 --- a/src/base/vnc/vncserver.hh +++ b/src/base/vnc/vncserver.hh @@ -42,12 +42,13 @@ * Declaration of a VNC server */ -#ifndef __DEV_VNC_SERVER_HH__ -#define __DEV_VNC_SERVER_HH__ +#ifndef __BASE_VNC_VNC_SERVER_HH__ +#define __BASE_VNC_VNC_SERVER_HH__ #include <iostream> #include "base/vnc/convert.hh" +#include "base/vnc/vncinput.hh" #include "base/bitmap.hh" #include "base/circlebuf.hh" #include "base/pollevent.hh" @@ -56,39 +57,11 @@ #include "params/VncServer.hh" #include "sim/sim_object.hh" - -/** - * A device that expects to receive input from the vnc server should derrive - * (through mulitple inheritence if necessary from VncKeyboard or VncMouse - * and call setKeyboard() or setMouse() respectively on the vnc server. +/** @file + * Declaration of a VNC server */ -class VncKeyboard -{ - public: - /** - * Called when the vnc server receives a key press event from the - * client. - * @param key the key passed is an x11 keysym - * @param down is the key now down or up? - */ - virtual void keyPress(uint32_t key, bool down) = 0; -}; -class VncMouse -{ - public: - /** - * called whenever the mouse moves or it's button state changes - * buttons is a simple mask with each button (0-8) corresponding to - * a bit position in the byte with 1 being down and 0 being up - * @param x the x position of the mouse - * @param y the y position of the mouse - * @param buttos the button state as described above - */ - virtual void mouseAt(uint16_t x, uint16_t y, uint8_t buttons) = 0; -}; - -class VncServer : public SimObject +class VncServer : public VncInput { public: @@ -103,16 +76,6 @@ class VncServer : public SimObject /** Error conditions */ const static uint32_t VncOK = 0; - /** Client -> Server message IDs */ - enum ClientMessages { - ClientSetPixelFormat = 0, - ClientSetEncodings = 2, - ClientFrameBufferUpdate = 3, - ClientKeyEvent = 4, - ClientPointerEvent = 5, - ClientCutText = 6 - }; - /** Server -> Client message IDs */ enum ServerMessages { ServerFrameBufferUpdate = 0, @@ -149,20 +112,6 @@ class VncServer : public SimObject NormalPhase }; - struct PixelFormat { - uint8_t bpp; - uint8_t depth; - uint8_t bigendian; - uint8_t truecolor; - uint16_t redmax; - uint16_t greenmax; - uint16_t bluemax; - uint8_t redshift; - uint8_t greenshift; - uint8_t blueshift; - uint8_t padding[3]; - } M5_ATTR_PACKED; - struct ServerInitMsg { uint16_t fbWidth; uint16_t fbHeight; @@ -171,47 +120,6 @@ class VncServer : public SimObject char name[2]; // just to put M5 in here } M5_ATTR_PACKED; - struct PixelFormatMessage { - uint8_t type; - uint8_t padding[3]; - PixelFormat px; - } M5_ATTR_PACKED; - - struct PixelEncodingsMessage { - uint8_t type; - uint8_t padding; - uint16_t num_encodings; - } M5_ATTR_PACKED; - - struct FrameBufferUpdateReq { - uint8_t type; - uint8_t incremental; - uint16_t x; - uint16_t y; - uint16_t width; - uint16_t height; - } M5_ATTR_PACKED; - - struct KeyEventMessage { - uint8_t type; - uint8_t down_flag; - uint8_t padding[2]; - uint32_t key; - } M5_ATTR_PACKED; - - struct PointerEventMessage { - uint8_t type; - uint8_t button_mask; - uint16_t x; - uint16_t y; - } M5_ATTR_PACKED; - - struct ClientCutTextMessage { - uint8_t type; - uint8_t padding[3]; - uint32_t length; - } M5_ATTR_PACKED; - struct FrameBufferUpdate { uint8_t type; uint8_t padding; @@ -284,21 +192,6 @@ class VncServer : public SimObject /** The rfb prototol state the connection is in */ ConnectionState curState; - /** the width of the frame buffer we are sending to the client */ - uint16_t _videoWidth; - - /** the height of the frame buffer we are sending to the client */ - uint16_t _videoHeight; - - /** pointer to the actual data that is stored in the frame buffer device */ - uint8_t* clientRfb; - - /** The device to notify when we get key events */ - VncKeyboard *keyboard; - - /** The device to notify when we get mouse events */ - VncMouse *mouse; - /** An update needs to be sent to the client. Without doing this the * client will constantly request data that is pointless */ bool sendUpdate; @@ -312,31 +205,7 @@ class VncServer : public SimObject /** If the vnc client supports the desktop resize command */ bool supportsResizeEnc; - /** The mode of data we're getting frame buffer in */ - VideoConvert::Mode videoMode; - - /** The video converter that transforms data for us */ - VideoConvert *vc; - - /** Flag indicating whether to capture snapshots of frame buffer or not */ - bool captureEnabled; - - /** Current frame number being captured to a file */ - int captureCurrentFrame; - - /** Directory to store captured frames to */ - std::string captureOutputDirectory; - - /** Computed hash of the last captured frame */ - uint64_t captureLastHash; - - /** Cached bitmap object for writing out frame buffers to file */ - Bitmap *captureBitmap; - protected: - /** Captures the current frame buffer to a file */ - void captureFrameBuffer(); - /** * vnc client Interface */ @@ -438,29 +307,6 @@ class VncServer : public SimObject void sendFrameBufferResized(); public: - /** Set the address of the frame buffer we are going to show. - * To avoid copying, just have the display controller - * tell us where the data is instead of constanly copying it around - * @param rfb frame buffer that we're going to use - */ - void - setFramebufferAddr(uint8_t* rfb) - { - clientRfb = rfb; - } - - /** Set up the device that would like to receive notifications when keys are - * pressed in the vnc client keyboard - * @param _keyboard an object that derrives from VncKeyboard - */ - void setKeyboard(VncKeyboard *_keyboard) { keyboard = _keyboard; } - - /** Setup the device that would like to receive notifications when mouse - * movements or button presses are received from the vnc client. - * @param _mouse an object that derrives from VncMouse - */ - void setMouse(VncMouse *_mouse) { mouse = _mouse; } - /** The frame buffer uses this call to notify the vnc server that * the frame buffer has been updated and a new image needs to be sent to the * client @@ -468,30 +314,16 @@ class VncServer : public SimObject void setDirty() { + VncInput::setDirty(); sendUpdate = true; - if (captureEnabled) - captureFrameBuffer(); sendFrameBufferUpdate(); } - /** What is the width of the screen we're displaying. - * This is used for pointer/tablet devices that need to know to calculate - * the correct value to send to the device driver. - * @return the width of the simulated screen - */ - uint16_t videoWidth() { return _videoWidth; } - - /** What is the height of the screen we're displaying. - * This is used for pointer/tablet devices that need to know to calculate - * the correct value to send to the device driver. - * @return the height of the simulated screen - */ - uint16_t videoHeight() { return _videoHeight; } - /** Set the mode of the data the frame buffer will be sending us * @param mode the mode */ - void setFrameBufferParams(VideoConvert::Mode mode, int width, int height); + void setFrameBufferParams(VideoConvert::Mode mode, uint16_t width, + uint16_t height); }; #endif |