|
|
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 root 56: ID_MAX,
57: };
58:
59: using Queue = FixedQueue<UIMessage, 16>;
60:
61: public:
62: UIMessage();
1.1.1.2 root 63: UIMessage(ID id_, int arg_);
1.1 root 64:
65: ID GetID() const { return id; }
66: int GetArg() const { return arg; }
67:
68: // メッセージ処理関数をアタッチ
69: static void Attach(const std::function<void(Queue&)>& process_);
70:
71: // 新しい UIMessage を生成して投函
72: static void Post(ID id);
73: // 新しい UIMessage を生成して投函(argあり)
74: static void Post(ID id, int arg);
75:
76: protected:
77: // 自身を投函
78: void Post();
79:
80: private:
1.1.1.2 root 81: ID id {};
82: int arg {};
1.1 root 83:
84: static Queue queue;
85:
86: // メッセージ処理コールバック
87: static std::function<void(Queue&)> process;
88: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.