From d98e789a8d392ed8cc21644f4c5d901a77518824 Mon Sep 17 00:00:00 2001 From: Mateusz Grzywacz Date: Mon, 25 Jan 2021 18:11:34 +0100 Subject: [PATCH] [EGD-5193] Eink - Power off the display The eink has to be powered off sometimes. Implement a timer of arbitrary timeout (3,8s) to power off the display if it's not used. --- module-services/service-eink/EinkDisplay.cpp | 12 ++-- module-services/service-eink/EinkDisplay.hpp | 2 +- module-services/service-eink/ServiceEink.cpp | 59 +++++++++++++++----- module-services/service-eink/ServiceEink.hpp | 14 ++--- module-services/service-gui/ServiceGUI.cpp | 17 ++++-- module-services/service-gui/ServiceGUI.hpp | 1 + 6 files changed, 71 insertions(+), 34 deletions(-) diff --git a/module-services/service-eink/EinkDisplay.cpp b/module-services/service-eink/EinkDisplay.cpp index b003733100b322ebdc61963f6cf162947d53836b..a7f6153514b2853a2982586d354900b65dc0d0bd 100644 --- a/module-services/service-eink/EinkDisplay.cpp +++ b/module-services/service-eink/EinkDisplay.cpp @@ -143,10 +143,10 @@ namespace service::eink return true; } - bool EinkDisplay::setWaveform(EinkWaveforms_e mode, std::int32_t temperature) + EinkStatus_e EinkDisplay::setWaveform(EinkWaveforms_e mode, std::int32_t temperature) { if (!isNewWaveformNeeded(mode, temperature)) { - return true; + return EinkOK; } auto currentOffset = @@ -160,13 +160,13 @@ namespace service::eink if (offset == currentOffset) { // current waveform is still the best fit - return true; + return EinkOK; } auto file = std::fopen(LutsFileName, "rb"); if (file == nullptr) { LOG_FATAL("Could not find the LUTS.bin file. Returning"); - return false; + return EinkWaveformsFileOpenFail; } auto fileHandlerCleanup = gsl::finally([&file]() { std::fclose(file); }); @@ -184,7 +184,7 @@ namespace service::eink std::fread(¤tWaveform.LUTCData[1], 1, LUTCSize, file); EinkUpdateWaveform(¤tWaveform); - return true; + return EinkOK; } unsigned int EinkDisplay::toWaveformTemperatureOffset(std::int32_t temperature) noexcept @@ -194,7 +194,7 @@ namespace service::eink if (temperature >= LUTTemperatureSubcritical) return LUTTemperatureOffsetSubcritical; if (temperature < LUTTemperatureMinimal) { - temperature = 0; + temperature = LUTTemperatureMinimal; } return temperature / LUTTemperatureOffsetInterval; } diff --git a/module-services/service-eink/EinkDisplay.hpp b/module-services/service-eink/EinkDisplay.hpp index 08316bfa2edb544339d6986eec710b654c557e87..6449e8f34c6e242f3ca7b254d1b10096a9011cc3 100644 --- a/module-services/service-eink/EinkDisplay.hpp +++ b/module-services/service-eink/EinkDisplay.hpp @@ -33,7 +33,7 @@ namespace service::eink void powerOff(); void shutdown(); - bool setWaveform(EinkWaveforms_e mode, std::int32_t temperature); + EinkStatus_e setWaveform(EinkWaveforms_e mode, std::int32_t temperature); void setMode(EinkDisplayColorMode_e mode) noexcept; std::int32_t getLastTemperature() const noexcept; diff --git a/module-services/service-eink/ServiceEink.cpp b/module-services/service-eink/ServiceEink.cpp index 61220b564cdc38cd116a87bd31ab9fb9a964d620..66ac520d361877315e74733ee145a40178066e71 100644 --- a/module-services/service-eink/ServiceEink.cpp +++ b/module-services/service-eink/ServiceEink.cpp @@ -4,8 +4,8 @@ #include "ServiceEink.hpp" #include "messages/EinkModeMessage.hpp" #include "messages/PrepareDisplayEarlyRequest.hpp" -#include #include +#include #include