|
|
1.1 root 1: //
2: // nono
3: // Copyright (C) 2021 nono project
4: // Licensed under nono-license.txt
5: //
6:
7: //
1.1.1.2 root 8: // UI スレッドへのメッセージ機構
1.1 root 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:
1.1.1.2 root 23: // アプリケーションを終了する
24: APPEXIT,
1.1 root 25:
26: // MPU がホールト状態になった
27: HALT,
28:
29: // SCSI (各 ID) のメディア状態が変わった (Load/Unload)
30: SCSI_MEDIA_CHANGE,
31:
32: // SCSI メディアの挿入に失敗した
33: SCSI_MEDIA_FAILED,
34:
1.1.1.3 root 35: // FDD (各 ID) のメディア状態が変わった (Load/Unload)
36: FDD_MEDIA_CHANGE,
37:
38: // FDD メディアの挿入に失敗した
39: FDD_MEDIA_FAILED,
40:
1.1 root 41: // キー入力状態が変わった
42: KEYBOARD,
43:
44: // LCD 状態が変わった
45: LCD,
46:
1.1.1.2 root 47: // 画面を更新した
48: RENDER,
49:
50: // パレットが変更になった
51: PALETTE,
52:
1.1.1.3 root 53: // LED 状態が変わった
54: LED,
55:
1.1.1.4 ! root 56: // 新しいホストドライバの起動に失敗した。
! 57: HOSTNET_FAILED,
! 58: HOSTCOM_FAILED,
! 59:
1.1 root 60: ID_MAX,
61: };
62:
63: using Queue = FixedQueue<UIMessage, 16>;
64:
65: public:
66: UIMessage();
1.1.1.2 root 67: UIMessage(ID id_, int arg_);
1.1 root 68:
69: ID GetID() const { return id; }
70: int GetArg() const { return arg; }
71:
72: // メッセージ処理関数をアタッチ
73: static void Attach(const std::function<void(Queue&)>& process_);
74:
75: // 新しい UIMessage を生成して投函
76: static void Post(ID id);
77: // 新しい UIMessage を生成して投函(argあり)
78: static void Post(ID id, int arg);
79:
80: protected:
81: // 自身を投函
82: void Post();
83:
84: private:
1.1.1.2 root 85: ID id {};
86: int arg {};
1.1 root 87:
88: static Queue queue;
89:
90: // メッセージ処理コールバック
91: static std::function<void(Queue&)> process;
92: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.