about summary refs log tree commit diff
path: root/fakefbdev/IOCTL.cpp
diff options
context:
space:
mode:
authorMalte Voos <git@mal.tc>2024-04-03 18:12:50 +0200
committerMalte Voos <git@mal.tc>2024-04-03 18:12:50 +0200
commit6eaea5ca33cfaeea7a7fc9434e082ce1a9e0c6c5 (patch)
tree0f65ca7bb4c5a951f132b6ad53582dc7b5dcc12a /fakefbdev/IOCTL.cpp
downloadreMder-6eaea5ca33cfaeea7a7fc9434e082ce1a9e0c6c5.tar.gz
reMder-6eaea5ca33cfaeea7a7fc9434e082ce1a9e0c6c5.zip
init
Diffstat (limited to 'fakefbdev/IOCTL.cpp')
-rw-r--r--fakefbdev/IOCTL.cpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/fakefbdev/IOCTL.cpp b/fakefbdev/IOCTL.cpp
new file mode 100644
index 0000000..90e2583
--- /dev/null
+++ b/fakefbdev/IOCTL.cpp
@@ -0,0 +1,43 @@
+#include "IOCTL.h"
+#include "SharedBuffer.h"
+
+#include <cstring>
+#include <linux/ioctl.h>
+
+#include "mxcfb.h"
+
+int
+handleIOCTL(unsigned long request, char* ptr) {
+  if (request == FBIOGET_VSCREENINFO) {
+
+    fb_var_screeninfo* screeninfo = (fb_var_screeninfo*)ptr;
+    screeninfo->xres = fb_width;
+    screeninfo->yres = fb_height;
+    screeninfo->grayscale = 0;
+    screeninfo->bits_per_pixel = 8 * fb_pixel_size;
+    screeninfo->xres_virtual = fb_width;
+    screeninfo->yres_virtual = fb_height;
+
+    // set to RGB565
+    screeninfo->red.offset = 11;
+    screeninfo->red.length = 5;
+    screeninfo->green.offset = 5;
+    screeninfo->green.length = 6;
+    screeninfo->blue.offset = 0;
+    screeninfo->blue.length = 5;
+
+    return 0;
+  } else if (request == FBIOGET_FSCREENINFO) {
+
+    fb_fix_screeninfo* screeninfo = (fb_fix_screeninfo*)ptr;
+    screeninfo->smem_len = fb_size;
+    screeninfo->smem_start = (unsigned long)0x1000;
+    screeninfo->line_length = fb_width * fb_pixel_size;
+    constexpr char fb_id[] = "mxcfb";
+    std::memcpy(screeninfo->id, fb_id, sizeof(fb_id));
+
+    return 0;
+  } else {
+    return 0;
+  }
+}