--- nono/vm/power.cpp 2026/04/29 17:05:13 1.1.1.2 +++ nono/vm/power.cpp 2026/04/29 17:05:17 1.1.1.3 @@ -12,53 +12,62 @@ #include "mainapp.h" #include "mfp.h" #include "scheduler.h" -#include "sync.h" +#include "syncer.h" #include "uimessage.h" -// グローバル参照用 -PowerDevice *gPower; - // コンストラクタ PowerDevice::PowerDevice() - : inherited("Power") + : inherited(OBJ_POWER) { event.func = ToEventCallback(&PowerDevice::PowerCallback); event.time = 1_msec; event.Regist("Power Off"); - - gScheduler->ConnectMessage(MessageID::RESET, this, - ToMessageCallback(&PowerDevice::ResetCallback)); - gScheduler->ConnectMessage(MessageID::POWEROFF_RESTART, this, - ToMessageCallback(&PowerDevice::PowerOffCallback)); - gScheduler->ConnectMessage(MessageID::POWER_BUTTON, this, - ToMessageCallback(&PowerDevice::PowerButtonCallback)); } // デストラクタ PowerDevice::~PowerDevice() { - gPower = NULL; +} + +// 初期化 +bool +PowerDevice::Init() +{ + if (inherited::Init() == false) { + return false; + } + + syncer = GetSyncer(); + + scheduler->ConnectMessage(MessageID::RESET, this, + ToMessageCallback(&PowerDevice::ResetCallback)); + scheduler->ConnectMessage(MessageID::POWEROFF_RESTART, this, + ToMessageCallback(&PowerDevice::PowerOffCallback)); + scheduler->ConnectMessage(MessageID::POWER_BUTTON, this, + ToMessageCallback(&PowerDevice::PowerButtonCallback)); + + return true; } // リセットをスケジューラに指示する。(外部から呼ばれる用) void PowerDevice::MakeResetHard() { - gScheduler->SendMessage(MessageID::RESET); + scheduler->SendMessage(MessageID::RESET); } // リスタートをスケジューラに指示する。(外部から呼ばれる用) void PowerDevice::MakeRestart() { - gScheduler->SendMessage(MessageID::POWEROFF_RESTART); + scheduler->SendMessage(MessageID::POWEROFF_RESTART); } // 電源ボタンを押す。 (外部から呼ばれる用) void PowerDevice::PowerButton() { - gScheduler->SendMessage(MessageID::POWER_BUTTON); + scheduler->SendMessage(MessageID::POWER_BUTTON); } // リセットのメッセージコールバック @@ -99,7 +108,7 @@ PowerDevice::DoPowerOn() } // 動作モード変更 - gSync->RequestPowerOffMode(false); + syncer->RequestPowerOffMode(false); } } @@ -141,13 +150,13 @@ PowerDevice::DoPowerOff(MessageID msgid) ispower = false; // 動作モード変更 - gSync->RequestPowerOffMode(true); + syncer->RequestPowerOffMode(true); } // 電源オフ後の動作は引数によって異なる if (msgid == MessageID::POWEROFF_RESTART) { // 時間を始め直す - gScheduler->StartTime(); + scheduler->StartTime(); // 再び電源オンにする (リスタート) DoPowerOn(); } else { @@ -162,12 +171,12 @@ PowerDevice::DoPowerButton() { putlog(1, "PowerButton"); - if (gMainApp.GetVMType() == VMType::X68030) { + if (gMainApp.IsX68030()) { // X68030 の電源ボタンはオルタネート動作 power_button = !power_button; Change(); // MFP の POWSW 信号は負論理 - gMFP->SetPowSW(!power_button); + GetMFPDevice()->SetPowSW(!power_button); } else { // LUNA の電源ボタンはモーメンタリ動作 power_button = true; @@ -206,10 +215,10 @@ PowerDevice::Change() if (old_power == false && new_power) { DoPowerOn(); } else if (old_power && new_power == false) { - if (gMainApp.GetVMType() == VMType::X68030) { + if (gMainApp.IsX68030()) { DoPowerOff(MessageID::POWEROFF_EXIT); } else { - gScheduler->RestartEvent(event); + scheduler->RestartEvent(event); } }