Luna/kernel/src/fs/devices/FramebufferDevice.cpp

45 lines
1008 B
C++
Raw Normal View History

#include "fs/devices/FramebufferDevice.h"
#include "video/Framebuffer.h"
2023-04-21 16:25:53 +00:00
#include <bits/ioctl-defs.h>
#include <luna/CString.h>
Result<SharedPtr<Device>> FramebufferDevice::create()
{
return (SharedPtr<Device>)TRY(make_shared<FramebufferDevice>());
}
Result<usize> FramebufferDevice::read(u8*, usize, usize) const
{
return 0;
}
Result<usize> 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;
}
2023-04-21 16:25:53 +00:00
Result<u64> FramebufferDevice::ioctl(int request, void*)
{
2023-04-21 16:25:53 +00:00
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);
}
}