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

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

unix.superglobalmegacorp.com

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