--- nono/vm/lunakbd.h 2026/04/29 17:04:28 1.1 +++ nono/vm/lunakbd.h 2026/04/29 17:04:42 1.1.1.5 @@ -1,28 +1,73 @@ // // nono -// Copyright (C) 2018 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt // #pragma once #include "keyboard.h" +#include "scheduler.h" class LunaKeyboard : public Keyboard { - typedef Keyboard inherited; + using inherited = Keyboard; public: LunaKeyboard(); - virtual ~LunaKeyboard(); + ~LunaKeyboard() override; + + void ResetHard() override; + void MonitorUpdate(TextScreen&) override; // キーを押した - virtual void MakeKey(uint); + void MakeKey(uint) override; // キーを離した - virtual void BreakKey(uint); + void BreakKey(uint) override; + // マウス入力 + void MouseInput(int x, int y, bool rb, bool lb, bool mb) override; + + // ホストからの制御コマンド + void Command(uint32 data) override; private: + // キーを離した (内部用) + void BreakKeyCommon(uint lunakey); + + // キーイベントを空きスロットに登録 + void SetKeyEvent(uint code); + + // キーボードコールバック + void KeyboardCallback(Event& ev); + // 共通キーコードから LUNA キーコードへの変換 uint keycode2lunakey(uint); + // LUNA キーコードから LED 番号を取得。 + // 0: かな + // 1: CAPS + int LunaKey2LED(uint lunakey) const; + + // イベント + Event key_event {}; + Event mouse_event[3] {}; + + // キー送信中なら true + bool key_sending {}; + + // マウス状態 + int mouse_x {}; // 前回送信から現在までの積算値 + int mouse_y {}; + bool mouse_r {}; // 現在値 + bool mouse_l {}; + bool mouse_m {}; + bool prev_r {}; // 前回送信時の値 + bool prev_l {}; + bool prev_m {}; + + // マウスコールバック + void MouseSamplingCallback(Event& ev); + void MouseCallback(Event& ev); + // 変換テーブル static const uint keycode2lunakey_table[128];