gem5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
vncinput.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2010, 2015 ARM Limited
3  * All rights reserved
4  *
5  * The license below extends only to copyright in the software and shall
6  * not be construed as granting a license to any other intellectual
7  * property including but not limited to intellectual property relating
8  * to a hardware implementation of the functionality of the software
9  * licensed hereunder. You may use the software subject to the license
10  * terms below provided that you ensure that this notice is replicated
11  * unmodified and in its entirety in all distributions of the software,
12  * modified or unmodified, in source code or in binary form.
13  *
14  * Redistribution and use in source and binary forms, with or without
15  * modification, are permitted provided that the following conditions are
16  * met: redistributions of source code must retain the above copyright
17  * notice, this list of conditions and the following disclaimer;
18  * redistributions in binary form must reproduce the above copyright
19  * notice, this list of conditions and the following disclaimer in the
20  * documentation and/or other materials provided with the distribution;
21  * neither the name of the copyright holders nor the names of its
22  * contributors may be used to endorse or promote products derived from
23  * this software without specific prior written permission.
24  *
25  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36  *
37  * Authors: Ali Saidi
38  * William Wang
39  */
40 
45 #ifndef __BASE_VNC_VNC_INPUT_HH__
46 #define __BASE_VNC_VNC_INPUT_HH__
47 
48 #include <iostream>
49 #include <memory>
50 
51 #include "base/bitmap.hh"
52 #include "params/VncInput.hh"
53 #include "sim/sim_object.hh"
54 
55 class OutputDirectory;
56 
63 {
64  public:
71  virtual void keyPress(uint32_t key, bool down) = 0;
72 };
73 
74 class VncMouse
75 {
76  public:
85  virtual void mouseAt(uint16_t x, uint16_t y, uint8_t buttons) = 0;
86 };
87 
88 class VncInput : public SimObject
89 {
90  public:
91 
100  };
101 
102  struct PixelFormat {
103  uint8_t bpp;
104  uint8_t depth;
105  uint8_t bigendian;
106  uint8_t truecolor;
107  uint16_t redmax;
108  uint16_t greenmax;
109  uint16_t bluemax;
110  uint8_t redshift;
111  uint8_t greenshift;
112  uint8_t blueshift;
113  uint8_t padding[3];
114  } M5_ATTR_PACKED;
115 
117  uint8_t type;
118  uint8_t padding[3];
120  } M5_ATTR_PACKED;
121 
123  uint8_t type;
124  uint8_t padding;
125  uint16_t num_encodings;
126  } M5_ATTR_PACKED;
127 
129  uint8_t type;
130  uint8_t incremental;
131  uint16_t x;
132  uint16_t y;
133  uint16_t width;
134  uint16_t height;
135  } M5_ATTR_PACKED;
136 
138  uint8_t type;
139  uint8_t down_flag;
140  uint8_t padding[2];
141  uint32_t key;
142  } M5_ATTR_PACKED;
143 
145  uint8_t type;
146  uint8_t button_mask;
147  uint16_t x;
148  uint16_t y;
149  } M5_ATTR_PACKED;
150 
152  uint8_t type;
153  uint8_t padding[3];
154  uint32_t length;
155  } M5_ATTR_PACKED;
156 
157  typedef VncInputParams Params;
158  VncInput(const Params *p);
159 
165  virtual void setFrameBuffer(const FrameBuffer *rfb);
166 
171  void setKeyboard(VncKeyboard *_keyboard) { keyboard = _keyboard; }
172 
177  void setMouse(VncMouse *_mouse) { mouse = _mouse; }
178 
184  uint16_t videoWidth() const { return _videoWidth; }
185 
191  uint16_t videoHeight() const { return _videoHeight; }
192 
197  virtual void setDirty();
198 
199  protected:
200  virtual void frameBufferResized() {};
201 
204 
207 
209  const FrameBuffer *fb;
210 
212  uint16_t _videoWidth;
213 
215  uint16_t _videoHeight;
216 
219 
222 
225 
227  uint64_t captureLastHash;
228 
230  std::unique_ptr<Bitmap> captureBitmap;
231 
233  void captureFrameBuffer();
234 };
235 #endif
virtual void frameBufferResized()
Definition: vncinput.hh:200
Internal gem5 representation of a frame buffer.
Definition: framebuffer.hh:244
virtual void setDirty()
The frame buffer uses this call to notify the vnc server that the frame buffer has been updated and a...
Definition: vncinput.cc:91
bool down
Definition: ps2.hh:92
virtual void setFrameBuffer(const FrameBuffer *rfb)
Set the address of the frame buffer we are going to show.
Definition: vncinput.cc:74
bool captureEnabled
Flag indicating whether to capture snapshots of frame buffer or not.
Definition: vncinput.hh:218
uint16_t _videoHeight
the height of the frame buffer we are sending to the client
Definition: vncinput.hh:215
struct VncInput::PixelFormat M5_ATTR_PACKED
uint64_t captureLastHash
Computed hash of the last captured frame.
Definition: vncinput.hh:227
VncInputParams Params
Definition: vncinput.hh:157
virtual void mouseAt(uint16_t x, uint16_t y, uint8_t buttons)=0
called whenever the mouse moves or it's button state changes buttons is a simple mask with each butto...
ClientMessages
Client -> Server message IDs.
Definition: vncinput.hh:93
std::unique_ptr< Bitmap > captureBitmap
Cached bitmap object for writing out frame buffers to file.
Definition: vncinput.hh:230
void setKeyboard(VncKeyboard *_keyboard)
Set up the device that would like to receive notifications when keys are pressed in the vnc client ke...
Definition: vncinput.hh:171
VncKeyboard * keyboard
The device to notify when we get key events.
Definition: vncinput.hh:200
int captureCurrentFrame
Current frame number being captured to a file.
Definition: vncinput.hh:221
void setMouse(VncMouse *_mouse)
Setup the device that would like to receive notifications when mouse movements or button presses are ...
Definition: vncinput.hh:177
VncMouse * mouse
The device to notify when we get mouse events.
Definition: vncinput.hh:206
virtual void keyPress(uint32_t key, bool down)=0
Called when the vnc server receives a key press event from the client.
VncInput(const Params *p)
Definition: vncinput.cc:56
A device that expects to receive input from the vnc server should derrive (through mulitple inheriten...
Definition: vncinput.hh:62
uint16_t videoWidth() const
What is the width of the screen we're displaying.
Definition: vncinput.hh:184
uint8_t padding[3]
Definition: vncinput.hh:113
Interface for creating files in a gem5 output directory.
Definition: output.hh:139
OutputDirectory * captureOutputDirectory
Directory to store captured frames to.
Definition: vncinput.hh:224
const FrameBuffer * fb
pointer to the actual data that is stored in the frame buffer device
Definition: vncinput.hh:209
uint16_t _videoWidth
the width of the frame buffer we are sending to the client
Definition: vncinput.hh:212
Bitfield< 0 > p
Bitfield< 1 > x
Definition: types.hh:105
Abstract superclass for simulation objects.
Definition: sim_object.hh:94
void captureFrameBuffer()
Captures the current frame buffer to a file.
Definition: vncinput.cc:111
uint16_t videoHeight() const
What is the height of the screen we're displaying.
Definition: vncinput.hh:191

Generated on Fri Jun 9 2017 13:03:41 for gem5 by doxygen 1.8.6