diff --git a/Kernel/PS2MouseDevice.cpp b/Kernel/PS2MouseDevice.cpp index 679410b72d..64360baf60 100644 --- a/Kernel/PS2MouseDevice.cpp +++ b/Kernel/PS2MouseDevice.cpp @@ -44,7 +44,9 @@ void PS2MouseDevice::handle_irq() (m_data[0] & 2) ? "Right" : "" ); #endif - m_buffer.write((const byte*)m_data, 3); + m_queue.enqueue(m_data[0]); + m_queue.enqueue(m_data[1]); + m_queue.enqueue(m_data[2]); break; } } @@ -118,12 +120,18 @@ byte PS2MouseDevice::mouse_read() bool PS2MouseDevice::can_read(Process&) const { - return !m_buffer.is_empty(); + return !m_queue.is_empty(); } ssize_t PS2MouseDevice::read(Process&, byte* buffer, size_t size) { - return m_buffer.read(buffer, size); + ssize_t nread = 0; + while ((size_t)nread < size) { + if (m_queue.is_empty()) + break; + buffer[nread++] = m_queue.dequeue(); + } + return nread; } ssize_t PS2MouseDevice::write(Process&, const byte*, size_t) diff --git a/Kernel/PS2MouseDevice.h b/Kernel/PS2MouseDevice.h index 2dfbb2c178..cb68b3f3e2 100644 --- a/Kernel/PS2MouseDevice.h +++ b/Kernel/PS2MouseDevice.h @@ -1,7 +1,6 @@ #pragma once #include -#include "DoubleBuffer.h" #include "IRQHandler.h" class PS2MouseDevice final : public IRQHandler, public CharacterDevice { @@ -29,7 +28,7 @@ private: void wait_then_write(byte port, byte data); byte wait_then_read(byte port); - DoubleBuffer m_buffer; + CircularQueue m_queue; byte m_data_state { 0 }; signed_byte m_data[3]; };