diff --git a/module-services/service-eink/ServiceEink.cpp b/module-services/service-eink/ServiceEink.cpp index 54c04bffc..84c377be5 100644 --- a/module-services/service-eink/ServiceEink.cpp +++ b/module-services/service-eink/ServiceEink.cpp @@ -70,10 +70,6 @@ ServiceEink::~ServiceEink(){ sys::Message_t ServiceEink::DataReceivedHandler(sys::DataMessage* msgl,sys::ResponseMessage* resp) { seink::EinkMessage* msg = static_cast(msgl); - if(isPoweredDown){ - return std::make_shared(); - } - switch( msg->messageType ) { case static_cast(MessageType::EinkImageData): { @@ -239,8 +235,6 @@ sys::ReturnCodes ServiceEink::SwitchPowerModeHandler(const sys::ServicePowerMode // Clear the temperature timer count deepClearScreen( s_einkAmbientTemperature ); - - isPoweredDown = false; } break; case sys::ServicePowerMode ::SuspendToRAM: @@ -248,8 +242,6 @@ sys::ReturnCodes ServiceEink::SwitchPowerModeHandler(const sys::ServicePowerMode suspended = true; stopTimer( timerPowerOff ); EinkPowerDown(); - stopTimer( timerPowerOff ); - isPoweredDown = true; break; } diff --git a/module-services/service-eink/ServiceEink.hpp b/module-services/service-eink/ServiceEink.hpp index 6fba559ae..80eeac3f6 100644 --- a/module-services/service-eink/ServiceEink.hpp +++ b/module-services/service-eink/ServiceEink.hpp @@ -46,7 +46,6 @@ protected: uint8_t einkRenderBuffer[600 * 480]; bool deepRefresh = false; uint32_t timerPowerOff = 0; - bool isPoweredDown = false; public: ServiceEink(const std::string& name,std::string parent = ""); ~ServiceEink(); diff --git a/module-sys/SystemManager/PowerManager.cpp b/module-sys/SystemManager/PowerManager.cpp index 1f4d4293c..ff96ed80f 100644 --- a/module-sys/SystemManager/PowerManager.cpp +++ b/module-sys/SystemManager/PowerManager.cpp @@ -23,16 +23,23 @@ namespace sys{ } int32_t PowerManager::Switch(const sys::PowerManager::Mode mode) { + + int32_t ret = 0; switch(mode){ case Mode::FullSpeed: - return lowPowerControl->Switch(bsp::LowPowerMode::Mode::FullSpeed); + ret = lowPowerControl->Switch(bsp::LowPowerMode::Mode::FullSpeed); + break; case Mode::LowPowerIdle: case Mode::LowPowerRun: case Mode::Suspend: - return lowPowerControl->Switch(bsp::LowPowerMode::Mode::LowPowerIdle); - default: - return 0; + ret = lowPowerControl->Switch(bsp::LowPowerMode::Mode::LowPowerIdle); + break; } + + if(ret == 0){ + currentPowerMode = mode; + } + return ret; } } \ No newline at end of file diff --git a/module-sys/SystemManager/PowerManager.hpp b/module-sys/SystemManager/PowerManager.hpp index a750029ba..46c1385c5 100644 --- a/module-sys/SystemManager/PowerManager.hpp +++ b/module-sys/SystemManager/PowerManager.hpp @@ -36,11 +36,13 @@ namespace sys { int32_t Switch(const Mode mode); + Mode GetCurrentMode(){return currentPowerMode;} + private: std::unique_ptr lowPowerControl; - bsp::LowPowerMode::Mode currentPowerMode = bsp::LowPowerMode::Mode ::FullSpeed; + Mode currentPowerMode = Mode ::FullSpeed; }; diff --git a/module-sys/SystemManager/SystemManager.cpp b/module-sys/SystemManager/SystemManager.cpp index a5168622f..1a75ae89a 100644 --- a/module-sys/SystemManager/SystemManager.cpp +++ b/module-sys/SystemManager/SystemManager.cpp @@ -77,7 +77,8 @@ namespace sys { bool SystemManager::SuspendSystem(Service *caller) { - if(lowPowerMode->GetCurrentMode() != bsp::LowPowerMode::Mode::FullSpeed){ + if(powerManager.GetCurrentMode() != PowerManager::Mode::FullSpeed){ + LOG_WARN("System is already suspended."); return false; } @@ -101,6 +102,11 @@ namespace sys { bool SystemManager::ResumeSystem(Service *caller) { + if(powerManager.GetCurrentMode() == PowerManager::Mode::FullSpeed){ + LOG_WARN("System is already resumed."); + return false; + } + powerManager.Switch(PowerManager::Mode::FullSpeed); for(const auto &w : servicesList){