45,46c45,46
< #ifndef __DEV_VNC_SERVER_HH__
< #define __DEV_VNC_SERVER_HH__
---
> #ifndef __BASE_VNC_VNC_SERVER_HH__
> #define __BASE_VNC_VNC_SERVER_HH__
50a51
> #include "base/vnc/vncinput.hh"
59,63c60,61
<
< /**
< * 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
65,75d62
< 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;
< };
77c64
< class VncMouse
---
> class VncServer : public VncInput
80,89d66
< /**
< * 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;
< };
91,94d67
< class VncServer : public SimObject
< {
< public:
<
106,115d78
< /** Client -> Server message IDs */
< enum ClientMessages {
< ClientSetPixelFormat = 0,
< ClientSetEncodings = 2,
< ClientFrameBufferUpdate = 3,
< ClientKeyEvent = 4,
< ClientPointerEvent = 5,
< ClientCutText = 6
< };
<
152,165d114
< 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;
<
174,214d122
< 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;
<
287,301d194
< /** 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;
<
315,335d207
< /** 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;
<
337,339d208
< /** Captures the current frame buffer to a file */
< void captureFrameBuffer();
<
441,463d309
< /** 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; }
<
470a317
> VncInput::setDirty();
472,473d318
< if (captureEnabled)
< captureFrameBuffer();
477,490d321
< /** 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; }
<
494c325,326
< void setFrameBufferParams(VideoConvert::Mode mode, int width, int height);
---
> void setFrameBufferParams(VideoConvert::Mode mode, uint16_t width,
> uint16_t height);