#include "fs/devices/MouseDevice.h" SharedPtr MouseDevice::s_mouse_device = {}; Result MouseDevice::create() { auto device = TRY(make_shared()); s_mouse_device = device; return DeviceRegistry::register_special_device(DeviceRegistry::Input, 0, device, 0600); } Result MouseDevice::read(u8* buf, usize, usize length) const { usize nread = 0; while (length >= sizeof(moon::MousePacket)) { if (!m_packet_queue.try_pop(*(moon::MousePacket*)buf)) break; buf += sizeof(moon::MousePacket); length -= sizeof(moon::MousePacket); nread += sizeof(moon::MousePacket); } return nread; } Result MouseDevice::write(const u8* buf, usize, usize length) { usize nwritten = 0; while (length >= sizeof(moon::MousePacket)) { if (!m_packet_queue.try_push(*(const moon::MousePacket*)buf)) break; buf += sizeof(moon::MousePacket); length -= sizeof(moon::MousePacket); nwritten += sizeof(moon::MousePacket); } return nwritten; } void MouseDevice::add_mouse_event(const moon::MousePacket& packet) { if (s_mouse_device) s_mouse_device->m_packet_queue.try_push(packet); } bool MouseDevice::will_block_if_read() const { return m_packet_queue.is_empty(); }