|
|
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.