Annotation of nono/vm/power.cpp, revision 1.1

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: #include "power.h"
        !            12: #include "mainapp.h"
        !            13: #include "scheduler.h"
        !            14: #include "sync.h"
        !            15: #include "uimessage.h"
        !            16: 
        !            17: // グローバル参照用
        !            18: PowerDevice *gPower;
        !            19: 
        !            20: // コンストラクタ
        !            21: PowerDevice::PowerDevice()
        !            22:        : inherited("Power")
        !            23: {
        !            24:        gScheduler->ConnectMessage(MessageID::POWERON, this,
        !            25:                ToMessageCallback(&PowerDevice::PowerOnCallback));
        !            26:        gScheduler->ConnectMessage(MessageID::RESET, this,
        !            27:                ToMessageCallback(&PowerDevice::ResetCallback));
        !            28:        gScheduler->ConnectMessage(MessageID::POWEROFF_EXIT, this,
        !            29:                ToMessageCallback(&PowerDevice::PowerOffCallback));
        !            30:        gScheduler->ConnectMessage(MessageID::POWEROFF_RESTART, this,
        !            31:                ToMessageCallback(&PowerDevice::PowerOffCallback));
        !            32: }
        !            33: 
        !            34: // デストラクタ
        !            35: PowerDevice::~PowerDevice()
        !            36: {
        !            37:        gPower = NULL;
        !            38: }
        !            39: 
        !            40: // 初期化
        !            41: bool
        !            42: PowerDevice::Init()
        !            43: {
        !            44:        // 初期状態は電源オフ
        !            45:        ispower = false;
        !            46:        return true;
        !            47: }
        !            48: 
        !            49: // 電源オンをスケジューラに指示する。(外部から呼ばれる用)
        !            50: void
        !            51: PowerDevice::MakePowerOn()
        !            52: {
        !            53:        gScheduler->SendMessage(MessageID::POWERON);
        !            54: }
        !            55: 
        !            56: // リセットをスケジューラに指示する。(外部から呼ばれる用)
        !            57: void
        !            58: PowerDevice::MakeResetHard()
        !            59: {
        !            60:        gScheduler->SendMessage(MessageID::RESET);
        !            61: }
        !            62: 
        !            63: // 電源オフ後終了をスケジューラに指示する。(外部から呼ばれる用)
        !            64: void
        !            65: PowerDevice::MakePowerOffExit()
        !            66: {
        !            67:        gScheduler->SendMessage(MessageID::POWEROFF_EXIT);
        !            68: }
        !            69: 
        !            70: // リスタートをスケジューラに指示する。(外部から呼ばれる用)
        !            71: void
        !            72: PowerDevice::MakeRestart()
        !            73: {
        !            74:        gScheduler->SendMessage(MessageID::POWEROFF_RESTART);
        !            75: }
        !            76: 
        !            77: // 電源オンのメッセージコールバック
        !            78: void
        !            79: PowerDevice::PowerOnCallback(MessageID msgid, uint32 arg)
        !            80: {
        !            81:        DoPowerOn();
        !            82: }
        !            83: 
        !            84: // リセットのメッセージコールバック
        !            85: void
        !            86: PowerDevice::ResetCallback(MessageID msgid, uint32 arg)
        !            87: {
        !            88:        DoResetHard();
        !            89: }
        !            90: 
        !            91: // 電源オフのメッセージコールバック
        !            92: void
        !            93: PowerDevice::PowerOffCallback(MessageID msgid, uint32 arg)
        !            94: {
        !            95:        DoPowerOff(msgid);
        !            96: }
        !            97: 
        !            98: // 電源オン操作 (Device::ResetHard ではない)
        !            99: void
        !           100: PowerDevice::DoPowerOn()
        !           101: {
        !           102:        putlog(1, "PowerOn");
        !           103: 
        !           104:        if (ispower == false) {
        !           105:                // 全デバイス電源オン
        !           106:                ispower = true;
        !           107:                for (auto obj : gMainApp.GetObjects()) {
        !           108:                        auto dev = dynamic_cast<Device *>(obj);
        !           109:                        if (dev) {
        !           110:                                dev->ResetHard(true);
        !           111:                        }
        !           112:                }
        !           113: 
        !           114:                // 動作モード変更
        !           115:                gSync->RequestPowerOffMode(false);
        !           116:        }
        !           117: }
        !           118: 
        !           119: // リセット操作 (Device::ResetHard ではない)
        !           120: void
        !           121: PowerDevice::DoResetHard()
        !           122: {
        !           123:        putlog(1, "Reset");
        !           124: 
        !           125:        if (ispower) {
        !           126:                // 全デバイスをリセット
        !           127:                for (auto obj : gMainApp.GetObjects()) {
        !           128:                        auto dev = dynamic_cast<Device *>(obj);
        !           129:                        if (dev) {
        !           130:                                dev->ResetHard(false);
        !           131:                        }
        !           132:                }
        !           133:        }
        !           134: }
        !           135: 
        !           136: // 電源オフ操作 (Device::PowerOff ではない)
        !           137: void
        !           138: PowerDevice::DoPowerOff(MessageID msgid)
        !           139: {
        !           140:        putlog(1, "PowerOff");
        !           141: 
        !           142:        assertmsg(msgid == MessageID::POWEROFF_EXIT ||
        !           143:                  msgid == MessageID::POWEROFF_RESTART,
        !           144:                "msgid=%d", (int)msgid);
        !           145: 
        !           146:        if (ispower) {
        !           147:                // 全デバイス電源オフ
        !           148:                for (auto obj : gMainApp.GetObjects()) {
        !           149:                        auto dev = dynamic_cast<Device *>(obj);
        !           150:                        if (dev) {
        !           151:                                dev->PowerOff();
        !           152:                        }
        !           153:                }
        !           154:                ispower = false;
        !           155: 
        !           156:                // 動作モード変更
        !           157:                gSync->RequestPowerOffMode(true);
        !           158:        }
        !           159: 
        !           160:        // 電源オフ後の動作は引数によって異なる
        !           161:        if (msgid == MessageID::POWEROFF_RESTART) {
        !           162:                // 時間を始め直す
        !           163:                gScheduler->StartTime();
        !           164:                // 再び電源オンにする (リスタート)
        !           165:                DoPowerOn();
        !           166:        } else {
        !           167:                // そうでなければ、GUI に終了を通知
        !           168:                UIMessage::Post(UIMessage::APPEXIT);
        !           169:        }
        !           170: }

unix.superglobalmegacorp.com

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