--- nono/vm/power.cpp 2026/04/29 17:05:24 1.1.1.4 +++ nono/vm/power.cpp 2026/04/29 17:05:54 1.1.1.8 @@ -9,6 +9,7 @@ // #include "power.h" +#include "event.h" #include "mainapp.h" #include "mfp.h" #include "scheduler.h" @@ -34,11 +35,8 @@ PowerDevice::~PowerDevice() bool PowerDevice::Init() { - if (inherited::Init() == false) { - return false; - } - syncer = GetSyncer(); + uimessage = gMainApp.GetUIMessage(); scheduler->ConnectMessage(MessageID::RESET, this, ToMessageCallback(&PowerDevice::ResetMessage)); @@ -108,7 +106,7 @@ PowerDevice::DoPowerButton() // LED の状態が変わったことを UI に通知。 led = ispower; - UIMessage::Post(UIMessage::LED); + uimessage->Post(UIMessage::LED); } // 電源オン操作 (Device::ResetHard ではない) @@ -128,7 +126,7 @@ PowerDevice::DoPowerOn() } // 動作モード変更 - syncer->RequestPowerOffMode(false); + syncer->NotifyPowerOffMode(false); } } @@ -170,7 +168,7 @@ PowerDevice::DoPowerOff(MessageID msgid) ispower = false; // 動作モード変更 - syncer->RequestPowerOffMode(true); + syncer->NotifyPowerOffMode(true); } // 電源オフ後の動作は引数によって異なる @@ -181,7 +179,7 @@ PowerDevice::DoPowerOff(MessageID msgid) DoPowerOn(); } else { // そうでなければ、GUI に終了を通知 - UIMessage::Post(UIMessage::APPEXIT); + uimessage->Post(UIMessage::APPEXIT); } } @@ -201,7 +199,7 @@ PowerDevice::GetPowerButtonState() const void PowerDevice::SetSystemPowerOn(bool poweron) { - assert("PowerDevice::SetSystemPowerOn should not be called."); + assertmsg(false, "PowerDevice::SetSystemPowerOn should not be called."); } @@ -223,9 +221,6 @@ PowerDevice::SetSystemPowerOn(bool power LunaPowerDevice::LunaPowerDevice() : inherited() { - event.func = ToEventCallback(&LunaPowerDevice::PowerCallback); - event.time = 1_msec; - event.Regist("Power Off"); } // デストラクタ @@ -233,17 +228,34 @@ LunaPowerDevice::~LunaPowerDevice() { } +// 初期化 +bool +LunaPowerDevice::Init() +{ + if (inherited::Init() == false) { + return false; + } + + auto evman = GetEventManager(); + event = evman->Regist(this, + ToEventCallback(&LunaPowerDevice::PowerCallback), + "Power Off"); + event->time = 1_msec; + + return true; +} + // PIO1 の PC4 が繋がっているということにする。 void LunaPowerDevice::SetSystemPowerOn(bool poweron) { if (poweron) { - if (event.IsRunning()) { + if (event->IsRunning()) { putlog(1, "Cancel Power-Off"); scheduler->StopEvent(event); } } else { - if (event.IsRunning() == false) { + if (event->IsRunning() == false) { putlog(1, "Start Power-Off timer"); scheduler->RestartEvent(event); } @@ -253,13 +265,13 @@ LunaPowerDevice::SetSystemPowerOn(bool p // LUNA の電源オフが信号状態の変化に対し 1msec 遅れて応答することを // エミュレートするためのイベントコールバック。 void -LunaPowerDevice::PowerCallback(Event& ev) +LunaPowerDevice::PowerCallback(Event *ev) { DoPowerOff(MessageID::POWEROFF_EXIT); // LED の状態が変わったことを UI に通知。 led = ispower; - UIMessage::Post(UIMessage::LED); + uimessage->Post(UIMessage::LED); } @@ -325,7 +337,7 @@ X68030PowerDevice::Change() { bool old_power = ispower; bool new_power = power_button | alarm_out | system_poweron; - putlog(1, "Change: old=%d new=%d (button=%d alarm=%d system=%d)", + putlog(1, "Change: old=%u new=%u (button=%u alarm=%u system=%u)", old_power, new_power, power_button, alarm_out, system_poweron); if (old_power == false && new_power) { @@ -340,6 +352,6 @@ X68030PowerDevice::Change() if (old_led != led) { // LED の状態が変わったことを UI に通知 - UIMessage::Post(UIMessage::LED); + uimessage->Post(UIMessage::LED); } }