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

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: }

unix.superglobalmegacorp.com

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