8#include "pedigree/kernel/Log.h"
10#include "modules/drivers/x86/ps2mouse/Ps2MousePacket.h"
13bool check(
bool condition,
const char* detail) {
18 ERROR(
"HOSTED-WAIT-TEST: FAIL ps2mouse-packet-decoder: " << detail);
27 passed &= check(!decoder.
feed(0x00, packet),
"a byte without the packet sync bit was accepted");
28 passed &= check(!decoder.
feed(0x2D, packet),
"the first packet byte completed a packet");
29 passed &= check(!decoder.
feed(0x01, packet),
"the second packet byte completed a packet");
30 passed &= check(decoder.
feed(0xFF, packet),
"a complete packet was not emitted");
32 packet.relativeX == 1 && packet.relativeY == -1 && packet.buttons == 0x3 && !packet.overflow,
33 "signed motion or left/middle button mapping was incorrect");
36 passed &= check(!decoder.
feed(0x18, packet) && !decoder.
feed(0x00, packet) &&
37 decoder.
feed(0x00, packet) && packet.relativeX == -256,
38 "the ninth X movement bit was not decoded");
41 passed &= check(!decoder.
feed(0x28, packet) && !decoder.
feed(0x00, packet) &&
42 decoder.
feed(0x00, packet) && packet.relativeY == -256,
43 "the ninth Y movement bit was not decoded");
46 passed &= check(!decoder.
feed(0x48, packet) && !decoder.
feed(0xFF, packet) &&
47 decoder.
feed(0x02, packet) && packet.relativeX == 0 &&
48 packet.relativeY == 2 && packet.overflow,
49 "overflow packets were not reported safely");
52 passed &= check(!decoder.
feed(0x0A, packet) && !decoder.
feed(0x00, packet) &&
53 decoder.
feed(0x00, packet) && packet.buttons == 0x4,
54 "the PS/2 right button was not mapped to input button three");
58 check(!decoder.
feed(0x08, packet) && !decoder.
feed(0xFA, packet) &&
59 decoder.
feed(0xFE, packet) && packet.relativeX == 250 && packet.relativeY == 254,
60 "movement bytes that resemble command replies were discarded");
63 NOTICE(
"HOSTED-WAIT-TEST: PASS ps2mouse-packet-decoder");
69bool runHostedPs2MousePacketRegressions() {
70 return packetDecoder();
bool feed(uint8_t byte, Ps2MousePacket &packet)