aboutsummaryrefslogtreecommitdiff
path: root/fesvr/rfb.h
diff options
context:
space:
mode:
authorAndrew Waterman <andrew@sifive.com>2019-03-31 00:49:57 -0700
committerAndrew Waterman <andrew@sifive.com>2019-03-31 00:50:15 -0700
commitf49618ca9d674ec7e596118f85027c4b503862ac (patch)
tree3b6ad73cbe8760309f930b743950a2853ad17668 /fesvr/rfb.h
parent61cb96df00067ba61cf3816c74c18aef5677197a (diff)
downloadspike-f49618ca9d674ec7e596118f85027c4b503862ac.zip
spike-f49618ca9d674ec7e596118f85027c4b503862ac.tar.gz
spike-f49618ca9d674ec7e596118f85027c4b503862ac.tar.bz2
Add fesvr; only globally install fesvr headers/libsstatic-link
Diffstat (limited to 'fesvr/rfb.h')
-rw-r--r--fesvr/rfb.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/fesvr/rfb.h b/fesvr/rfb.h
new file mode 100644
index 0000000..263663a
--- /dev/null
+++ b/fesvr/rfb.h
@@ -0,0 +1,53 @@
+#ifndef _RFB_H
+#define _RFB_H
+
+#include "device.h"
+#include "memif.h"
+#include <pthread.h>
+
+// remote frame buffer
+class rfb_t : public device_t
+{
+ public:
+ rfb_t(int display = 0);
+ ~rfb_t();
+ void tick();
+ std::string name() { return "RISC-V"; }
+ const char* identity() { return "rfb"; }
+
+ private:
+ template <typename T>
+ std::string str(T x)
+ {
+ return std::string((char*)&x, sizeof(x));
+ }
+ size_t fb_bytes() { return size_t(width) * height * bpp/8; }
+ void thread_main();
+ friend void* rfb_thread_main(void*);
+ std::string pixel_format();
+ void fb_update(const std::string& s);
+ void set_encodings(const std::string& s);
+ void set_pixel_format(const std::string& s);
+ void write(const std::string& s);
+ std::string read();
+ void handle_configure(command_t cmd);
+ void handle_set_address(command_t cmd);
+
+ int sockfd;
+ int afd;
+ memif_t* memif;
+ reg_t addr;
+ uint16_t width;
+ uint16_t height;
+ uint16_t bpp;
+ int display;
+ pthread_t thread;
+ volatile char* volatile fb1;
+ volatile char* volatile fb2;
+ size_t read_pos;
+ pthread_mutex_t lock;
+
+ static const int FB_ALIGN = 256;
+};
+
+#endif