mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 02:17:34 +00:00
Kernel: Allow PS2MouseDevice to read multiple packets
We were overwriting the start of the output buffer over and over when reading multiple mouse packets.
This commit is contained in:
parent
f24a6a7574
commit
083b81a566
1 changed files with 8 additions and 9 deletions
|
@ -361,21 +361,20 @@ bool PS2MouseDevice::can_read(const FileDescription&) const
|
||||||
|
|
||||||
ssize_t PS2MouseDevice::read(FileDescription&, u8* buffer, ssize_t size)
|
ssize_t PS2MouseDevice::read(FileDescription&, u8* buffer, ssize_t size)
|
||||||
{
|
{
|
||||||
ssize_t nread = 0;
|
ASSERT(size > 0);
|
||||||
while (nread < size) {
|
size_t nread = 0;
|
||||||
if (m_queue.is_empty())
|
size_t remaining_space_in_buffer = static_cast<size_t>(size) - nread;
|
||||||
break;
|
while (!m_queue.is_empty() && remaining_space_in_buffer) {
|
||||||
// Don't return partial data frames.
|
|
||||||
if ((size - nread) < (ssize_t)sizeof(MousePacket))
|
|
||||||
break;
|
|
||||||
auto packet = m_queue.dequeue();
|
auto packet = m_queue.dequeue();
|
||||||
#ifdef PS2MOUSE_DEBUG
|
#ifdef PS2MOUSE_DEBUG
|
||||||
dbgprintf("PS2 Mouse Read: Buttons %x\n", packet.buttons);
|
dbgprintf("PS2 Mouse Read: Buttons %x\n", packet.buttons);
|
||||||
dbgprintf("PS2 Mouse Read: X %d, Y %d, Z %d, Relative %d\n", packet.x, packet.y, packet.z, packet.buttons);
|
dbgprintf("PS2 Mouse Read: X %d, Y %d, Z %d, Relative %d\n", packet.x, packet.y, packet.z, packet.buttons);
|
||||||
dbgprintf("PS2 Mouse Read: Filter packets\n");
|
dbgprintf("PS2 Mouse Read: Filter packets\n");
|
||||||
#endif
|
#endif
|
||||||
memcpy(buffer, &packet, sizeof(MousePacket));
|
size_t bytes_read_from_packet = min(remaining_space_in_buffer, sizeof(MousePacket));
|
||||||
nread += sizeof(MousePacket);
|
memcpy(buffer + nread, &packet, bytes_read_from_packet);
|
||||||
|
nread += bytes_read_from_packet;
|
||||||
|
remaining_space_in_buffer -= bytes_read_from_packet;
|
||||||
}
|
}
|
||||||
return nread;
|
return nread;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue