From 0092cb8c366d1e1a984ffb17acf55f085a0f50dc Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sat, 6 Apr 2024 13:44:05 -0400 Subject: [PATCH] Route enough to be able to mess around. --- Machines/Acorn/Archimedes/Keyboard.hpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/Machines/Acorn/Archimedes/Keyboard.hpp b/Machines/Acorn/Archimedes/Keyboard.hpp index 8c953ffc7..5eb5e8aeb 100644 --- a/Machines/Acorn/Archimedes/Keyboard.hpp +++ b/Machines/Acorn/Archimedes/Keyboard.hpp @@ -17,7 +17,7 @@ namespace Archimedes { // Resource for the keyboard protocol: https://github.com/tmk/tmk_keyboard/wiki/ACORN-ARCHIMEDES-Keyboard struct Keyboard { - Keyboard(HalfDuplexSerial &serial) : serial_(serial) {} + Keyboard(HalfDuplexSerial &serial) : serial_(serial), mouse_(*this) {} void set_key_state(int row, int column, bool is_pressed) { if(!scan_keyboard_) { @@ -198,7 +198,27 @@ private: struct Mouse: public Inputs::Mouse { + Mouse(Keyboard &keyboard): keyboard_(keyboard) {} + void move(int x, int y) override { + // For now: just clamp. + x = std::clamp(x, -0x3f, 0x3f); + y = std::clamp(-y, -0x3f, 0x3f); + + keyboard_.enqueue(static_cast(x) & 0x7f, static_cast(y) & 0x7f); + keyboard_.consider_dequeue(); + } + + int get_number_of_buttons() override { + return 3; + } + + virtual void set_button_pressed(int index, bool is_pressed) { + keyboard_.set_key_state(7, index, is_pressed); + } + + private: + Keyboard &keyboard_; }; Mouse mouse_; };