|
|
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.4 ! root 97: // PIO1 の PC4 の状態を受け取る
! 98: void SetSystemPowerOn(bool poweron) override;
1.1.1.2 root 99:
1.1.1.4 ! root 100: private:
! 101: void PowerCallback(Event&);
1.1.1.3 root 102:
1.1.1.2 root 103: // 電源オフイベント
104: Event event { this };
1.1 root 105: };
106:
1.1.1.4 ! root 107: class X68030PowerDevice : public PowerDevice
! 108: {
! 109: using inherited = PowerDevice;
! 110: public:
! 111: X68030PowerDevice();
! 112: ~X68030PowerDevice() override;
! 113:
! 114: // システムポートからの電源オフコマンドを受け取る
! 115: void SetSystemPowerOn(bool poweron) override;
! 116:
! 117: // RP5C15 の ALARM_OUT を受け取る
! 118: void SetAlarmOut(bool alarm_out_);
! 119:
! 120: private:
! 121: // 電源ボタン操作
! 122: void DoPowerButton() override;
! 123:
! 124: void Change();
! 125:
! 126: // システム内の電源オン信号に相当
! 127: bool system_poweron {};
! 128:
! 129: // ALARM_OUT 信号状態
! 130: bool alarm_out {};
! 131: };
! 132:
1.1.1.3 root 133: static inline PowerDevice *GetPowerDevice() {
134: return Object::GetObject<PowerDevice>(OBJ_POWER);
135: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.