|
|
1.1 root 1: //
2: // nono
3: // Copyright (C) 2022 nono project
4: // Licensed under nono-license.txt
5: //
6:
7: //
8: // 電源周り
9: //
10:
11: #pragma once
12:
13: #include "device.h"
1.1.1.2 root 14: #include "event.h"
1.1 root 15: #include "message.h"
16:
1.1.1.3 root 17: class Syncer;
18:
1.1.1.4 root 19: // 定数
20: enum class PowerButtonState
21: {
22: // 電源ボタンの状態がオフ/オン (bool にキャストできる)
23: Off = 0,
24: On = 1,
25:
26: // モーメンタリスイッチなどで状態を持たない場合
27: NoState = -1,
28: };
29:
30: // 電源周り (共通部分)
1.1 root 31: class PowerDevice : public Device
32: {
33: using inherited = Device;
34: public:
35: PowerDevice();
36: ~PowerDevice() override;
37:
1.1.1.3 root 38: bool Init() override;
39:
1.1.1.4 root 40: // 電源ボタンを押す (どのスレッドから呼んでもよい)
41: void PushPowerButton();
1.1 root 42:
1.1.1.4 root 43: // リセットを指示 (どのスレッドから呼んでもよい)
1.1 root 44: void MakeResetHard();
45:
1.1.1.4 root 46: // リスタートを指示 (どのスレッドから呼んでもよい)
1.1 root 47: void MakeRestart();
48:
1.1.1.4 root 49: // 機種固有の電源オンオフ処理の信号を受け取る。
50: virtual void SetSystemPowerOn(bool poweron);
51:
52: // 電源ボタンの状態 (オフ/オン/状態を持たない) を返す。(GUI 用)
53: PowerButtonState GetPowerButtonState() const;
54:
1.1.1.2 root 55: // 電源が実際にオンなら true を返す。
1.1 root 56: bool IsPower() const { return ispower; }
57:
1.1.1.2 root 58: // 電源 LED 点灯なら true を返す。
59: bool GetPowerLED() const { return led; }
60:
1.1.1.4 root 61: protected:
62: // メッセージコールバック
63: void PowerButtonMessage(MessageID, uint32);
64: void ResetMessage(MessageID, uint32);
65: void PowerOffMessage(MessageID, uint32);
1.1.1.2 root 66:
1.1.1.4 root 67: // 電源ボタン操作
68: virtual void DoPowerButton();
69:
70: // 電源オン、リセット、電源オフ操作
1.1 root 71: void DoPowerOn();
72: void DoResetHard();
73: void DoPowerOff(MessageID);
1.1.1.2 root 74:
1.1.1.4 root 75: // 電源ボタンがオルタネートスイッチなら true。
76: bool alternate_switch {};
1.1.1.2 root 77:
1.1.1.4 root 78: // 電源ボタンのオン/オフ状態。alternate_switch が false なら無効。
79: bool power_button {};
1.1 root 80:
81: // 電源オンなら true
82: bool ispower {};
1.1.1.2 root 83:
84: // 電源 LED
85: bool led {};
86:
1.1.1.4 root 87: Syncer *syncer {};
88: };
1.1.1.2 root 89:
1.1.1.4 root 90: class LunaPowerDevice : public PowerDevice
91: {
92: using inherited = PowerDevice;
93: public:
94: LunaPowerDevice();
95: ~LunaPowerDevice() override;
1.1.1.2 root 96:
1.1.1.5 ! root 97: bool Init() override;
! 98:
1.1.1.4 root 99: // PIO1 の PC4 の状態を受け取る
100: void SetSystemPowerOn(bool poweron) override;
1.1.1.2 root 101:
1.1.1.4 root 102: private:
103: void PowerCallback(Event&);
1.1.1.3 root 104:
1.1.1.2 root 105: // 電源オフイベント
106: Event event { this };
1.1 root 107: };
108:
1.1.1.4 root 109: class X68030PowerDevice : public PowerDevice
110: {
111: using inherited = PowerDevice;
112: public:
113: X68030PowerDevice();
114: ~X68030PowerDevice() override;
115:
116: // システムポートからの電源オフコマンドを受け取る
117: void SetSystemPowerOn(bool poweron) override;
118:
119: // RP5C15 の ALARM_OUT を受け取る
120: void SetAlarmOut(bool alarm_out_);
121:
122: private:
123: // 電源ボタン操作
124: void DoPowerButton() override;
125:
126: void Change();
127:
128: // システム内の電源オン信号に相当
129: bool system_poweron {};
130:
131: // ALARM_OUT 信号状態
132: bool alarm_out {};
133: };
134:
1.1.1.3 root 135: static inline PowerDevice *GetPowerDevice() {
136: return Object::GetObject<PowerDevice>(OBJ_POWER);
137: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.