Annotation of nono/vm/power.h, revision 1.1.1.6

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"
                     14: #include "message.h"
                     15: 
1.1.1.3   root       16: class Syncer;
1.1.1.6 ! root       17: class UIMessage;
1.1.1.3   root       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 {};
1.1.1.6 ! root       88:        UIMessage *uimessage {};
1.1.1.4   root       89: };
1.1.1.2   root       90: 
1.1.1.4   root       91: class LunaPowerDevice : public PowerDevice
                     92: {
                     93:        using inherited = PowerDevice;
                     94:  public:
                     95:        LunaPowerDevice();
                     96:        ~LunaPowerDevice() override;
1.1.1.2   root       97: 
1.1.1.5   root       98:        bool Init() override;
                     99: 
1.1.1.4   root      100:        // PIO1 の PC4 の状態を受け取る
                    101:        void SetSystemPowerOn(bool poweron) override;
1.1.1.2   root      102: 
1.1.1.4   root      103:  private:
1.1.1.6 ! root      104:        void PowerCallback(Event *);
1.1.1.3   root      105: 
1.1.1.2   root      106:        // 電源オフイベント
1.1.1.6 ! root      107:        Event *event {};
1.1       root      108: };
                    109: 
1.1.1.4   root      110: class X68030PowerDevice : public PowerDevice
                    111: {
                    112:        using inherited = PowerDevice;
                    113:  public:
                    114:        X68030PowerDevice();
                    115:        ~X68030PowerDevice() override;
                    116: 
                    117:        // システムポートからの電源オフコマンドを受け取る
                    118:        void SetSystemPowerOn(bool poweron) override;
                    119: 
                    120:        // RP5C15 の ALARM_OUT を受け取る
                    121:        void SetAlarmOut(bool alarm_out_);
                    122: 
                    123:  private:
                    124:        // 電源ボタン操作
                    125:        void DoPowerButton() override;
                    126: 
                    127:        void Change();
                    128: 
                    129:        // システム内の電源オン信号に相当
                    130:        bool system_poweron {};
                    131: 
                    132:        // ALARM_OUT 信号状態
                    133:        bool alarm_out {};
                    134: };
                    135: 
1.1.1.3   root      136: static inline PowerDevice *GetPowerDevice() {
                    137:        return Object::GetObject<PowerDevice>(OBJ_POWER);
                    138: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.