|
|
1.1 ! root 1: // ! 2: // nono ! 3: // Copyright (C) 2021 nono project ! 4: // Licensed under nono-license.txt ! 5: // ! 6: ! 7: // ! 8: // VM から UI へのメッセージ機構 ! 9: // ! 10: ! 11: #pragma once ! 12: ! 13: #include "fixedqueue.h" ! 14: #include <functional> ! 15: ! 16: class UIMessage ! 17: { ! 18: public: ! 19: // メッセージ ID ! 20: enum ID { ! 21: NONE = 0, ! 22: ! 23: // VM 電源オフになったのでアプリケーションを終了する場合 ! 24: POWEROFF, ! 25: ! 26: // MPU がホールト状態になった ! 27: HALT, ! 28: ! 29: // SCSI (各 ID) のメディア状態が変わった (Load/Unload) ! 30: SCSI_MEDIA_CHANGE, ! 31: ! 32: // SCSI メディアの挿入に失敗した ! 33: SCSI_MEDIA_FAILED, ! 34: ! 35: // キー入力状態が変わった ! 36: KEYBOARD, ! 37: ! 38: // LCD 状態が変わった ! 39: LCD, ! 40: ! 41: ID_MAX, ! 42: }; ! 43: ! 44: using Queue = FixedQueue<UIMessage, 16>; ! 45: ! 46: public: ! 47: UIMessage(); ! 48: ! 49: ID GetID() const { return id; } ! 50: int GetArg() const { return arg; } ! 51: ! 52: // メッセージ処理関数をアタッチ ! 53: static void Attach(const std::function<void(Queue&)>& process_); ! 54: ! 55: // VM 外に向けてメッセージを投函 ! 56: // 新しい UIMessage を生成して投函 ! 57: static void Post(ID id); ! 58: // 新しい UIMessage を生成して投函(argあり) ! 59: static void Post(ID id, int arg); ! 60: ! 61: protected: ! 62: UIMessage(ID id_, int arg_); ! 63: ! 64: // 自身を投函 ! 65: void Post(); ! 66: ! 67: private: ! 68: ID id; ! 69: int arg; ! 70: ! 71: static Queue queue; ! 72: ! 73: // メッセージ処理コールバック ! 74: static std::function<void(Queue&)> process; ! 75: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.