#include "fs/devices/FramebufferDevice.h" #include "video/Framebuffer.h" #include #include Result FramebufferDevice::create() { auto device = (SharedPtr)TRY(make_shared()); return DeviceRegistry::register_special_device(DeviceRegistry::Framebuffer, 0, device, "fb0", 0600); } Result FramebufferDevice::read(u8*, usize, usize) const { return 0; } Result FramebufferDevice::write(const u8* buf, usize offset, usize length) { if ((offset + length) > size()) length = size() - offset; memcpy(Framebuffer::ptr() + offset, buf, length); return length; } usize FramebufferDevice::size() const { return Framebuffer::size(); } bool FramebufferDevice::blocking() const { return false; } Result FramebufferDevice::ioctl(int request, void*) { switch (request) { case FB_GET_WIDTH: return (u64)Framebuffer::width(); case FB_GET_HEIGHT: return (u64)Framebuffer::height(); case FB_GET_SCANLINE: return (u64)Framebuffer::scanline(); default: return err(EINVAL); } }